Current File : /home/mmdealscpanel/yummmdeals.com/gems.zip
PK/%�Z���8O8O#ruby/io-console-0.4.6/io/console.sonuȯ��ELF>`@8H@8	@88 �;�; �;  h �;�; �; ��888$$�7�7�7  S�td�7�7�7  P�td(1(1(1Q�tdR�td�;�; �;   GNU��S	�׫=�rҖ��	T�?�H!@?ACBE���|�qX/D�o����f�J,o��� �2�u���$��^7�
��a��}U L���v�Z{>�r%-��B�Y, ��F"��k��@ �H@ �@  -Tp�/�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_funcallvrb_default_rsrb_io_writerb_cIOrb_cFilerb_const_definedrb_cloexec_openrb_update_max_fdrb_class_new_instancerb_io_taint_checkrb_io_check_closedrb_str_new_staticrb_obj_freezerb_const_setrb_const_getrb_const_removerb_id2symrb_check_typerb_io_closerb_check_idrb_error_arity__stack_chk_fail__errno_locationtcsetattrtcgetattrrb_sys_failtcflushcfmakerawrb_string_value_cstrrb_check_safe_objrb_intern2rb_io_get_write_iorb_ensurerb_stdinrb_stderrrb_check_hash_typerb_extract_keywordsrb_hash_arefrb_fix2intrb_funcallv_publicrb_num2intioctlrb_assoc_newrb_Arrayrb_num2uintrb_eArgErrorrb_raiserb_protectrb_syserr_failrb_jump_tagrb_io_getsrb_yieldInitVM_consolerb_define_methodrb_f_notimplementrb_define_singleton_methodrb_define_module_underInit_consolerb_internlibruby.so.2.5libc.so.6_edata__bss_start_endGLIBC_2.4GLIBC_2.2.5�ii
�ui	��; �; ��; �; �? �? 	�? �? �? !�? #�? +�? 1�? 7�? 8�? 9�? :�? >> > > >  > (> 0> 8> 
@> H> P> 
X> `> h> p> x> �> �> �> �> �> �> �> �> �> �> �> �>  �> "�> $�> %�> &? '? (? )? * ? ,(? -0? .8? /@? 0H? 2P? 3X? B`? 4h? 5p? 6x? :�? ;�? <�? =��H��H��+ H��t��H����5�) �%�) ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2��������%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%�& D���%}& D���%u& D���%m& D���%e& D���%]& D���%U& D���%M& D���%E& D���%=& D���%5& D���%-& D���%%& D���%& D���%& D���%
& D���%& D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%�% D���%}% D���%u% D���%m% D���%e% D���%]% D���%U% D���%M% D���%E% D���%=% D���%5% DH�=�% H��% H9�tH�&% H��t	�����H�=i% H�5b% H)�H��H��H��?H�H�tH�% H��t��fD�����=%% u+UH�=
% H��tH�=�  �)����d�����$ ]������w������H�"�O{�H	�����g�������H��H�5�$ H�׉��v���fD��H�5�$ 1�1��\���ff.����H�$ H�0���ff.�f���AWAVAUA��ATUSH��8dH�%(H�D$(1����<I��H���oE1�H��# H9u
H��# H�H�5/$ H���������M���1ҾH�=��K���Hc�����H�l-���H��H�t$�H�l$H�D$�T���H��H�����L�xL������H�=��l���H������A�OH��H��I�GH�5�# ���M���H�L$(dH3%(H���LH��8[]A\A]A^A_�f.�H�5A# H�����H�ŨuH�����ubH�5## H�����M�������H�=# ���A�����I9�������n���fDL�&�L��������������u�H�EH��t��x�t�M���.���H�=�" �R���I9�u-A��u'H�����H�5{" H��������fDI�H�|$H�D$�N���H��t)A��I��H��L��D��H�����H������H��! �փ�1��}�������U��SH��H���
�K����8u&H�ھ���w�����u�H���[]��H��1�[]����SH��PdH�%(H�D$H1��r���H�XH���v����{H��������u)�D$��H��H�H�Ѓ�H�T$HdH3%(u
H��P[�1��G����2���f���AUI��ATUH��SH��XdH�%(H�D$H1�I����H�XH������[L��������uP�D$I�����u:��D$L���������t.H�T$HdH3%(H��u"H��X[]A\A]����x�D$��1�������ff.���ATUH��SH��PdH�%(H�D$H1�I���I���H�XH���M����[L��������u@L���H�"�L${�H	$�,�����tH�T$HdH3%(H��uH��P[]A\�1���������UH��SH������H�XH�������{1�������u
H��H��[]�1�������UH��SH��H�������c�H��t�E��x�C�E��x�CH��[]��SH��dH�%(H�D$1�H�H��t$H��H��H�$�c���H�<$����H�4$H���n���H�D$dH3%(uH��[�����H�5� SH��H��tH��1�1�[����H�=����H��1�1�H��[H�� ������AUATA��USH������H��I��H�����H��H9�tHA��uH��L������H��H���H��H�=K
����H��t0H��H��[]A\A]�>���fDH�� H9u�H�� H�(�H���[]A\A]ú1����@AUI��ATI��U��SH��H��XdH�%(H�D$H1����1���uDH�C0�oL���oK�oS H�D$0�C8H��)$H��)L$)T$ �D$8A��H�މ������H�T$HdH3%(��uH��X[]A\A]��z���f.�AUATUS��H��dH�%(H�D$1�H�$��~`Hc�H�|�H��u2��u?D1�H�L$dH3%(�FH��[]A\A]��H���0���H�$H��u1�1����k���t���@I��L����H�<$I������H��������H���y���H�=� �m���L��H����H�=� H���S���L��H����H�EI��1�H��tH�߃�tM����EH��I������L��L���*H�$�;���H�Ǩt$�O����EH�����@����f����څ��������H��uA�L�$$�������ff.�@��AUATUH��SH��hdH�%(H�D$X1�H�T$�%���H��I���z�H�XH���~�D�cH�\$H��D���
�����u8L��H�����H��D���`�����tH�L$XdH3%(H��uH��h[]A\A]�1��7����"�f���UH��SH����H�XH����H�{PH��t���H�XH�����{����u
H��H��[]�1����fD��UH��SH����H�XH����H�{PH��t��H�XH����{�H�5�
�$�H��x
H��H��[]�1��n�ff.���SH��dH�%(H�D$1��"�H�XH���&�H�{PH��t��H�XH����{1�H��T�z��u.�t$�<$H�t6H�|?��H�L$dH3%(u
H��[�1������ff.����ATUH��S��H�XH����H�{PD�cH��u�D�����uJH��[]A\�fD�S�H�XH���W�[���t�A9�t�1�D�����u����p��t�1��5�D��USH����wVH��uH��H��H�����H�5� 1�1�H����H��H��tH������H��H�` H��H�0��H��H��[]ú1��/�ff.�@��AWAVAUATI��UH��SH��dH�%(H�D$1��c�H�XH���g�L���/�H��� ��H����H����L�xL�pA�A�H�{PH��t��H�XH����[1�H�$I��tL�����f�$1�I��tL�����f�D$1�I��tL����f�D$1�I��tL����f�D$H��1��T���%��unH�L$dH3%(H��uVH��[]A\A]A^A_��H�PH��tBH��uH�@ L�8L�pL�hL�`�"���H�	 H�5H�81����3�1��<�H�@ A�A�L�8L�p���AWAVAUI��ATI��UH��SH��H�4$dH�%(H��$�1��D$�������L�xL�����A�_�����I�PA���D$H�����D$����H��E1�A��t�H�hH���x�A���tD9u��E����|$���KH��$�dH3%(L���H�Ĩ[]A\A]A^A_��H�t$ L��L�����������D$A��A�_�D$I�PH��tD�����A��L�xL�����A�_����!���A9�����H�t$\L��L���������?H�<$H��H�T$�D$A��`�H��I���e�H�hH���i�A�������H�}PH����}9����H�t$\�F���������D$������D$�|$1���D���t��^�fDH�<$H��H�T$E1����H��I�����H�hH�����A����d���D9u�Q���H�t$ D������<������D$������D$E���p����+������A�����A�_��D$�w���fD����������D$����3�H�hH���7��}9���������"�f���H�5� 1�H�,�������H�5� 1�H���������H�5u 1�H���������SH��H��dH�%(H�D$1�H���,���H���H�5��H��H���s���H�L$dH3%(uH��[��h����SH��H��dH�%(H�D$1�H������H�5� H�~�H��H������H�L$dH3%(uH��[������U�����H�����H�5SH��H�� H�;�$�H�;�����H����H�5��	�H�;1�H����H�5����H�;1�H��H�5����H�;�����H�����H�5���H�;�H�/�H�5���H�;1�H���H�5~��H�;1�H�/���H�5l�s�H�;1�H����H�5[�[�H�;�H�\���H�5H�@�H�;1�H���H�59�(�H�;1�H�����H�5)��H�;1�H����H�5��H�;1�H����H�5���H�- H�;�H�5�H�����H�;1�H��H�5���H�;H��H�5���H�;H��H�5���H�;�����H�a�H�5��e�H�;�����H���H�5��Z�H�;H�5���������H��H�5
H��H����H��H�߹����[H�����H�5?]��ff.����H��H�=?�<�H�=8H�� �)�H�=H�c ��H�=H�p ��H�=
H�U ���H�=�H�: ���H�=�H� ���H� H�������H��H���/dev/ttychomp!rawraw!cookedcooked!getchecho=echo?noechowinsizewinsize=iflushioflushbeepgotocursorcursor=pressed?getpassconsolegeneric_readablegetcgetsclosemintime__send__wrong number of arguments (given %ld, expected 2 or 4);"��8�`��x��(��H��h������(X�\���x����H���D��h8������8�P��8����H������4X���`�������������� 8���4����X����|X����zRx�$��@FJw�?:*3$"D��0\x�p��	���������H���xF�B�B �E(�A0�A8�Dp
8A0A(B BBBK0��IA�C�G f
FAHDCA @��nE�D`W
AA8d@��F�E�A �D(�D�n
(A ABBH0����F�A�D �Dpp
 AABA(��=E�D�D c
DAA$$�9E�D�G fAA (<�]A�D Q
AALx�HH�P
H\Ll���F�B�D �A(�D0S
(D ABBK\
(F ABBA8���B�E�D �C(�G�u
(A ABBA8�l��B�B�A �A(�F@N
(A ABBH84���F�B�A �D(�D�z
(A ABBA(pD�ZE�D�D @
DAA(�x�bE�D�D H
DAA ����E�D }
AA(�8�F�A�D �s
ABG(��qE�A�D U
DAAHD��F�B�B �B(�D0�D8�DP�
8A0A(B BBBHH�4��B�B�B �E(�D0�D8�G��
8A0A(B BBBH�������� ��XE�G E
AA <8���XE�G E
AA(`t���TE�T�D IO������H�GNU���; ���
0�; �; ���o`��
��= ��
�	���o���oP
���o�o����o�;  0@P`p�������� 0@P`p�������� 0@P`p�������� GA$3a1�%0GA$3p1113 0GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY 9GA+GLIBCXX_ASSERTIONSconsole.so-2.5.9-114.module_el8.10.0+3991+5e651d4e.x86_64.debugAJ�v�7zXZ�ִF!t/��7G]?�E�h=��ڊ�2N��J�<�S�,��{��QO�e��QsU��*ˢ�g̶~q���'2����
O^
�UN����!��x,i��=��R��Yy�<{֕��sm8(���%��A�3{ ��l��4֓@�@=Wv'�a��42=�'���Ks���8u��z��9�*mf���6�yC-�	j`�A�8{᥯�M/����A��uA"�4Y��t�C:;&2ǯN��MX�8Y�'�>K�qd��c]�A�5�;RF��qq�V������~�J��r�Q�;M,W�XK;����޺�����Ml%?&�C�ZC9��H�i�_N��|`B�^�BR3�,_N7�͔����t�^MP��e�wz���K5�хFO�6�Wbd�Ȫ�?���
�4�;�!%�{XvL(�SF�뮎pĵ���ȩ�y:,��ۆ�~�ejdee�?(�J,auVcc��?c�����ȓ�k�'�����C��1�������U̡�r�������)���m�;�;cJ�%�y���*G����$f��D��:Ө@v6���ue��l�W#��K>Y��{���<�
�`�.�&�-�� ͞��Y)�%9|D5�
�$#ɕ��I�s��d�	�����NFc�r�FY(݃Jv&��%�n؛�1�Ja�A����")B����	>�q�U�
P�Z�,L"�X�N�
ɧ�D�!a�I<	B�]���5~��,A�*���D�U�G�.�1ՓC�8��
����߻���n9�5.|��d
���v��A7�\tà����D^��BwGC�V�dWV�ⶹ3�Zf��4�I
��~�$m�����sx�c���TD����2#V"�	�e�T���t�S(=�ka�W��l�(W�,r�"�i����x�b��Z��6�rpo<ej���3��{����Y��}���c��Fl���\yi":����}��儺���W�.Gҷ@x+�?���M�
;-�x/�W�}�_ȃ>�2z��
��!xEr@B�ߵj�
�ᡞ����#�㿎N��t=��p�t�qն�����$y~w���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(��`0���8���o���E���oP
P
0T�
�
�^B�h��c��@n000w``�}00
�2(0(0�(1(1�H2H2���7�7 ��; �;��; �;��; �;��; �;���= �=�@ @H�H@`@HHBD�B�G"PK/%�Z�"uPX�X�ruby/openssl-2.1.2/openssl.sonuȯ��ELF>��@X�@8	@`w`w �|�|%�|%X3< ����%��%888$$@w@w@w  S�td@w@w@w  P�td@�@�@���Q�tdR�td�|�|%�|%X3p3GNUC1��<##����f�B����� 0"$@@�	(Q�0�Au ���
@ �
`BbH�	�� P) �#�����		� ��@ �@ !�@D��@@ H!D�$`��
�P"�J$)�@N)�"DBX0!B @@@F���@� H@�
  �R��`��@@�P� �@��������������������������������������������������������������
!#$&'*,-/0467:>@ADIKOPQTU�E�K��l�I�q�η)����Bг�Z�ʮ9X�{�)���t��NsѦ��+�Jagg�-(7�WN��iƵ��/�Q\���1b��8чɌA�Z��)&DtdQ��p�<wT�僐z�7)404��^�S�+��y8Q�1a�N\��c�
�J�{(�����!�>�KGV67�߂ט��m3l�јS6‡Nq��K� �ߝ�+&�)��"5���v��w�"`��P�b�yl
�I�!I�e�R�UF�Կ�1��>�����텄�
��
z^vvD�!���P=��y�2v�*b^��G��u$.�S�q�e���y]�+�n	�
�ժ�m
!���p	�I��`��qX��o�ش7Ϳ����H��x)�19ѭdj��,;e-&�o��jb��p��I���T
��g��:�ѫ���<�\���#I
P����@��|U�	s���DcCE�? |0�X��v$.f���S��@�|��Y6�.��D[H	.ZJn�(40J�ʻ�|)*�%T���6�- I��ܛ{���И$9�<CE��~�-)
͙��:'9�<��2=���G�'_�z��|�E'E�8�/iu��X�ij�������`9E��D{���,2��v4��"�ǯ�M�rwx������ɾ)4<�G���Y�-�
�,���<-���c��6��,T��%m�[-Tm�
�}�gEӕ��t�����a��yq��ǫ�,T��k�b-����t�u$.�o�l��|�*�'�)��4p=?�+1��$s��:`#_�$��	�)i�& �GO-�Bn'&48�H<�?�T/G�
{%Q,�1�%�<w�:�&}@�4�)O*m;Vp3-[*t?�2f�~!�>�\	hE
c�)A
�-I>��/(��;�0���7��2^<��
�Bk00WDH=�1	9x50��&eG8���H��"�I2O�6�E���n%�7�@+%;��=� �0�3��p<�.�#y's�+�(�Gc$Il+�'�CP.��0F;+�((q!#�C�(�/V((u�
�
8�-�88
;s!L �)D#�5��"�FiA�!�)�,2�BL?O)6-).+�7�n#� kMA��G
5>��!$4�4?�)75s44�	p
*IHC>/�Q3WC�
�{C�D�@��~6��#*Aw�G�M@�	��'"�13*�3*�=�`-5!�@�3P!��2-9	MB<�C/&��
}�n8�H�	<�04B1���H�8@%
�U1�h��2�
	[I&�-S&.�	��G�2�+ �;G+�< N�$mB)�/Vg9��,iN�NE0�#��$<�F�%*L:-�=�-6�A�#�$Y
�;�E,k�7\.�E> �+t
, �98'�W$�5H556�,;AD*��,�
�DM9�%�?q�)N5?5�;�:''�� ��B�DF"'7J�,�.<m-:.99L4d��6�'a2!�
�!�%3�&�C�T
@6���.�.�%���HV D	#X0�/�� Q/�+A3�	�C)�g�u,q4T;� 		�+Hf*��)��6�;a��$�[C�:&d&(%H��	�	o�$�(|B��6C#@4�
�,�0��Hx.6�H�>�;}
��8�#5�<��g<0E�/�<	#H�B�}�4pa!
G� �$�v/(^�D�>��L�#��@�=eD0�)>:�
�,YU8`7@*	B�?�8����*7*�*�A�FTH�-�F�>,�Dx)�/��<#�,xu	=Tk5��!�'���E�D�)�.�I�5`4�	�U<�3
�B<2�=�<�-�h,jC�h	�+r�25a�0>c?aBg:����+���(@&�*E7�l!h
�7�X�5ESB�DI~G�3?�k �2=�jF���@+3�-�DV� &�0X%�
`��!K$��&GD5D�F�/,?:F,
�8%�"��A�<��'I(�,� YF�$4�B.$�G��4���+k�H�_�<�0�((C;-�yD�%�4�'21�.s=,�7�=?x2���%d3�A(�'S�/4f6e�6|&�E��F��4�(�=e.t$I%���H�"�D���!�"�6�'-�?
>3�=��1b�4mE�x�A�F�D���@�?)/��)B.��)!�!7H6;�84G�8��E�#�
���>��
�E��8@�T�*>j/���:3=8<�E8�F0]=�Bc@�K.;'*"1r(7
�
�(
��l�CV5b�;0�?�>�&2>4V]�3q>v�!�'�$�A*`(,iH)`)y<S�D�7�	EMG2:�4'&?9��#?W+�C8 �fO���5�v"I?$�D%�0#M	
.�)7?(��%^ N����2
Ih�%+"pW�80�v� >(��%���%�A`6�7�%V�z�����%�"@��� �*���%��i�@H�%kD����%�P�%k$��%P" "�L �%Sо��:�%��\{7"@��-p�dw��%�9P`+$�"_t@@�%Bh�%��%�*��%% I�8�%��%/�%�#p�>� �<F��m_E��%C�i�B`�%��6�0�%� ,6;`K�:p�%Aж%d'ȷ%]"x�%3@�d$��%�����=j�p�i
�%c��%��������X�%p1�{Y�AX�%6���Z'��%�1��%H �m�>jVsе%&��Q�@�%U��%��%<�%����~9�$q�@�%�pj"G��%���%$ �{Zȵ%�"p�%�F��%+8�%���%�I�%:�}G�(�%�P}6���}x9�%�"0�-0�%Hm ��-ط%�#�~Z>8�%�D�G`fsdH�%�ض%��%�/�%|0�b�1�%��0��r��#h�%'��%*`�%f�%@��%�9pjd�P�%6�PU!$0Xj�PZMP�%�1��%)0�%?��%�P,j(�%�9�,��p�)�I��%Y�%/�_��R���c"`�%HD"@�< �%�%�I�%�;j<�6�%��%0�%�>�ij�Cx�%�x�%��j{�G���%I`C��
�(�%�`�B��%� Pj X�%
��%��%h�.�0�6
ص%�P���9�PK$=�P6�!H�%m�=6�9�=��9`EP'��%��q[I��%�`�%���%Q ��z��%EEp�%y�����%�/�%���%	 �� �%�����%�%��%yȶ%� P�h>��%)8�%���%#��_�&����%e/з%__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizedOSSLrb_str_newrb_yieldrb_string_value__stack_chk_failossl_get_errorsrb_ary_newERR_error_stringrb_str_new_cstrrb_ary_pushERR_get_errorFIPS_modeossl_protect_x509_ary2skossl_x509_ary2sk0rb_protectossl_x509_ary2skrb_jump_tagossl_x509_sk2aryOPENSSL_sk_numrb_ary_new_capaOPENSSL_sk_valueossl_x509_newstderrfwrite__fprintf_chkossl_x509crl_sk2aryossl_x509crl_newossl_x509name_sk2aryossl_x509name_newossl_str_newmemcpyrb_set_errinfoossl_buf2strCRYPTO_freeossl_bin2hex__assert_failossl_pem_passwd_cbrb_block_given_pPEM_def_callbackrb_warningossl_to_derrb_funcallvossl_to_der_if_possiblerb_respond_toossl_clear_errorERR_get_error_line_datarb_warnERR_clear_errorossl_raiserb_vsprintfERR_peek_last_errorrb_exc_new_strrb_exc_raiserb_str_new_staticERR_reason_error_stringrb_str_cat_cstrrb_str_catrb_check_typeOPENSSL_sk_new_nullrb_ary_entrycX509Certrb_obj_is_kind_ofDupX509CertPtrOPENSSL_sk_pushX509_freeOPENSSL_sk_pop_freeeOSSLErrorossl_pem_passwd_valueFIPS_mode_setInit_opensslOPENSSL_init_sslrb_define_modulemOSSLrb_global_variablerb_define_constOpenSSL_versionrb_define_module_functionrb_eStandardErrorrb_define_class_underrb_internInit_ossl_bnInit_ossl_cipherInit_ossl_configInit_ossl_digestInit_ossl_hmacInit_ossl_ns_spkiInit_ossl_pkcs12Init_ossl_pkcs7Init_ossl_pkeyInit_ossl_randInit_ossl_sslInit_ossl_x509Init_ossl_ocspInit_ossl_engineInit_ossl_asn1Init_ossl_kdfrb_eRuntimeErrorrb_raiserb_string_value_cstrOBJ_txt2objeASN1Errorrb_ivar_setrb_attr_getASN1_OBJECT_freerb_usascii_str_new_staticOBJ_obj2txtrb_str_resizerb_str_set_lenrb_out_of_intOBJ_txt2nidOBJ_nid2lnOBJ_nid2sncASN1EndOfContentrb_funcallv_publicrb_intern2cASN1SetcASN1SequencecASN1GeneralizedTimecASN1UTCTimecASN1ObjectIdcASN1NullcASN1BMPStringcASN1UniversalStringcASN1GeneralStringcASN1ISO64StringcASN1GraphicStringcASN1IA5StringcASN1VideotexStringcASN1T61StringcASN1PrintableStringcASN1NumericStringcASN1UTF8StringcASN1OctetStringcASN1BitStringcASN1EnumeratedcASN1IntegercASN1Booleanrb_block_callasn1time_to_time__isoc99_sscanfrb_cTimerb_eTypeErrorasn1integer_to_numASN1_INTEGER_to_BNossl_bn_newBN_freeASN1_ENUMERATED_to_BNOBJ_createrb_num2intrb_fix2intrb_hash_lookuprb_class_superclassrb_cFalseClassrb_cIntegerrb_cNilClassrb_cFloatrb_cTrueClassrb_cSymbolASN1_object_sizeASN1_put_objectASN1_put_eocrb_convert_typerb_str_appendrb_error_arityASN1_get_objectcASN1Datarb_obj_alloccASN1Constructiverb_int2bigd2i_ASN1_TIMEASN1_TIME_freed2i_ASN1_ENUMERATEDASN1_ENUMERATED_freed2i_ASN1_INTEGERASN1_INTEGER_freed2i_ASN1_NULLASN1_NULL_freed2i_ASN1_OBJECTOBJ_obj2nidd2i_ASN1_BIT_STRINGASN1_BIT_STRING_freeBIO_s_memBIO_newi2a_ASN1_OBJECTossl_membio2strrb_str_new_frozenossl_time_splitrb_Integerrb_num2longasn1str_to_strnum_to_asn1integerossl_bn_value_ptrBN_to_ASN1_INTEGERossl_asn1_get_asn1typeASN1_GENERALIZEDTIME_adjCRYPTO_mallocASN1_TYPE_setASN1_BIT_STRING_newASN1_BIT_STRING_setASN1_STRING_newASN1_STRING_setASN1_STRING_freeASN1_NULL_newASN1_UTCTIME_adji2d_ASN1_TYPEASN1_TYPE_freerb_str_drop_bytesrb_cArrayrb_id2symrb_define_module_undermASN1rb_ary_storerb_cObjectrb_attrrb_define_aliasrb_define_methodcASN1Primitiverb_undef_methodrb_mEnumerablerb_include_modulerb_define_singleton_methodrb_hash_newrb_gc_register_mark_objectrb_hash_asetossl_obj2bioBIO_new_mem_bufBIO_ctrlBIO_freeBN_clear_freerb_check_typeddataBN_num_bitsBN_bn2binrb_memhashrb_free_tmp_bufferrb_alloc_tmp_buffereBNErrorrb_obj_classrb_data_typed_object_wrapBN_newossl_bn_ctxBN_sqrBN_bn2hexrb_cstr_to_inumBN_is_zeroBN_is_negativecBNBN_dupBN_set_negativeBN_is_oddBN_is_oneBN_cmpBN_bin2bnrb_absint_sizerb_integer_packrb_alloc_tmp_buffer_with_countBN_copyBN_hex2bnrb_string_value_ptrBN_mpi2bnBN_dec2bnrb_eArgErrorBN_is_bit_setBN_clear_bitBN_mask_bitsBN_set_bitBN_lshiftBN_rshiftBN_randBN_pseudo_randBN_is_prime_fasttest_exBN_is_prime_exstrlenBN_bn2decBN_bn2mpirb_assoc_newBN_mod_inverseBN_generate_prime_exBN_pseudo_rand_rangeBN_rand_rangeBN_ucmpBN_gcdBN_mod_expBN_expBN_mod_sqrBN_mod_mulBN_mod_subBN_mod_addBN_divrb_ary_new_from_argsBN_mulBN_subBN_addrb_error_frozen_objectBN_CTX_newrb_define_alloc_funcEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_newEVP_get_cipherbynameEVP_CipherInit_exeCipherErrorEVP_CIPHER_CTX_cipherEVP_CIPHER_flagsEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_block_sizeEVP_CipherFinal_exEVP_CipherUpdaterb_eRangeErrorossl_evp_get_digestbynameEVP_BytesToKeyOPENSSL_cleanseEVP_md5OBJ_NAME_do_all_sortedEVP_CIPHER_CTX_copyEVP_CIPHER_nidrb_class_path__memcpy_chkEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_app_dataossl_evp_get_cipherbynamecCipherossl_cipher_newDupConfigPtrcConfigNCONF_newNCONF_load_bioNCONF_freeeConfigErrorCONF_get1_default_config_fileEVP_MD_CTX_freeEVP_MD_CTX_copyEVP_MD_CTX_neweDigestErrorEVP_MD_CTX_mdEVP_DigestInit_exossl_digest_updateEVP_DigestUpdateEVP_MD_typeEVP_MD_block_sizeEVP_MD_sizeEVP_DigestFinal_exEVP_get_digestbynameossl_digest_newcDigestrb_requirerb_path2classrb_define_private_methodENGINE_freeENGINE_get_cmd_defnsENGINE_load_public_keyossl_pkey_neweEngineErrorENGINE_load_private_keyrb_iv_setENGINE_get_firstENGINE_up_refENGINE_get_nextENGINE_load_builtin_enginesOPENSSL_init_cryptoENGINE_by_idENGINE_initENGINE_ctrlENGINE_get_nameENGINE_get_idrb_sprintfENGINE_set_defaultENGINE_get_digestENGINE_get_cipherENGINE_finishENGINE_ctrl_cmd_stringcEnginerb_undef_alloc_funcHMAC_CTX_freeeHMACErrorHMAC_CTX_newHMAC_CTX_copyHMAC_FinalHMAC_UpdateHMAC_Init_excHMACrb_get_kwargsEVP_PKEY_CTX_new_idEVP_PKEY_derive_initEVP_PKEY_CTX_ctrlEVP_PKEY_deriveEVP_PKEY_CTX_freerb_check_hash_typerb_extract_keywordsEVP_PBE_scryptrb_num2ulongPKCS5_PBKDF2_HMACNETSCAPE_SPKI_freeeSPKIErrori2d_NETSCAPE_SPKIeX509CertErrorGetPKeyPtrossl_pkey_check_public_keyNETSCAPE_SPKI_verifyGetPrivPKeyPtrNETSCAPE_SPKI_signNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_printNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_newNETSCAPE_SPKI_b64_decoded2i_NETSCAPE_SPKImNetscapecSPKIi2d_OCSP_CERTIDeOCSPErrorOCSP_CERTID_freeOCSP_id_get0_infoOCSP_CERTID_dupi2d_OCSP_SINGLERESPOCSP_SINGLERESP_freed2i_OCSP_SINGLERESPOCSP_SINGLERESP_itASN1_item_dupi2d_OCSP_BASICRESPOCSP_BASICRESP_freeOCSP_BASICRESP_itOCSP_basic_add1_nonceOCSP_REQUEST_freeOCSP_REQUEST_itd2i_OCSP_BASICRESPi2d_OCSP_RESPONSEOCSP_RESPONSE_freeOCSP_RESPONSE_itd2i_OCSP_RESPONSEi2d_OCSP_REQUESTOCSP_request_onereq_countcOCSPCertIdOCSP_request_onereq_get0OCSP_onereq_get0_idOCSP_request_add0_idOCSP_request_add1_nonced2i_OCSP_REQUESTOCSP_id_issuer_cmpOCSP_id_cmpOCSP_resp_countOCSP_resp_get0OCSP_single_get0_statusOCSP_SINGLERESP_get0_idOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_get_extossl_x509ext_newcOCSPSingleResOCSP_resp_findOCSP_CERTID_newOCSP_SINGLERESP_newOCSP_copy_nonceOCSP_BASICRESP_newcOCSPBasicResOCSP_response_get1_basicOCSP_response_statusOCSP_response_status_strOCSP_RESPONSE_newOCSP_check_nonceOCSP_REQUEST_newd2i_OCSP_CERTIDGetX509CertPtrOCSP_cert_to_idOCSP_request_is_signedOCSP_response_createX509_gmtime_adjossl_x509_time_adjustrb_check_array_typecX509ExtOCSP_basic_add1_statusGetX509ExtPtrOCSP_SINGLERESP_add_extOCSP_check_validityGetX509StorePtrOCSP_basic_verifyOCSP_request_verifyOCSP_request_signEVP_sha1OCSP_basic_signmOCSPcOCSPReqcOCSPResi2d_PKCS12ePKCS12ErrorPKCS12_freed2i_PKCS12_bioERR_set_markPKCS12_parseERR_pop_to_markd2i_PKCS12ASN1_dupPKCS12_newcPKCS12PKCS12_createPKCS7_RECIP_INFO_freePKCS7_SIGNER_INFO_freei2d_PKCS7ePKCS7ErrorPKCS7_freePKCS7_verifyERR_peek_errorrb_iv_getPKCS7_dataInitBIO_writeBIO_readPKCS7_dataFinalBIO_free_allPKCS7_content_newd2i_PKCS7_RECIP_INFOi2d_PKCS7_RECIP_INFOcPKCS7RecipientPKCS7_RECIP_INFO_newPKCS7_get_signer_infod2i_PKCS7_SIGNER_INFOi2d_PKCS7_SIGNER_INFOcPKCS7SignerPKCS7_SIGNER_INFO_newPEM_read_bio_PKCS7d2i_PKCS7_bioPKCS7_dupPKCS7_RECIP_INFO_setPKCS7_get_signed_attributePKCS7_SIGNER_INFO_setPEM_write_bio_PKCS7X509_CRL_freeOPENSSL_sk_popGetX509CRLPtrPKCS7_add_crlPKCS7_add_certificatePKCS7_add_recipient_infoPKCS7_add_signerOBJ_nid2objPKCS7_add_signed_attributePKCS7_set_cipherPKCS7_ctrlstrcmprb_sym2strPKCS7_set_typePKCS7_newcPKCS7SMIME_read_PKCS7PKCS7_decryptEVP_rc2_40_cbcPKCS7_encryptPKCS7_signSMIME_write_PKCS7rb_thread_check_intsEVP_PKEY_freeEVP_PKEY_base_idossl_ec_newossl_rsa_newossl_dh_newossl_dsa_newcPKeyossl_evp_pkey_typerb_obj_is_instance_ofEVP_PKEY_newePKeyErrorossl_generate_cb_2BN_GENCB_get_argrb_thread_call_with_gvlossl_generate_cb_stopd2i_PrivateKey_bioPEM_read_bio_PrivateKeyd2i_PUBKEY_bioPEM_read_bio_PUBKEYEVP_PKEY_missing_parametersEVP_PKEY_get0EC_KEY_get0_public_keyRSA_get0_keyDSA_get0_keyDH_get0_keyEVP_VerifyFinalEVP_PKEY_sizeEVP_SignFinalDupPKeyPtrEVP_PKEY_up_refmPKeyInit_ossl_rsaInit_ossl_dsaInit_ossl_dhInit_ossl_ecEVP_PKEY_get0_DHDH_get0_pqgDH_set0_keyDH_set0_pqgDH_sizeeDHErrorDHparams_dupEVP_PKEY_assigni2d_DHparamsPEM_write_bio_DHparamsDHparams_printDH_generate_parameters_exDH_newBN_GENCB_newBN_GENCB_setrb_thread_call_without_gvlBN_GENCB_freeDH_generate_keyDH_freeDH_checkDH_get0_enginePEM_read_bio_DHparamsd2i_DHparamsASN1_d2i_biocDHEVP_PKEY_get0_DSADSA_get0_pqgDSA_set0_keyDSA_set0_pqgeDSAErrord2i_DSAPrivateKeyi2d_DSAPrivateKeyi2d_DSA_PUBKEYDSA_printDSA_generate_parameters_exDSA_newDSA_generate_keyDSA_freePEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEYd2i_DSAPrivateKey_biod2i_DSA_PUBKEY_biod2i_DSAPublicKeyPEM_ASN1_read_bioi2d_DSAPublicKeyPEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEYcDSAEC_GROUP_clear_freeEC_POINT_clear_freeEC_POINT_is_on_curvecEC_POINTeEC_GROUPeEC_POINTrb_obj_dupEC_POINT_dupEC_POINT_newEC_POINT_oct2pointEC_POINT_bn2pointEC_POINT_freePEM_write_bio_ECPKParametersi2d_ECPKParametersASN1_i2d_bioeECErrorEC_GROUP_set_seedrb_sym2idEC_GROUP_new_curve_GFpcEC_GROUPEC_GROUP_dupPEM_read_bio_ECPKParametersEC_GFp_nist_methodEC_GROUP_newd2i_ECPKParametersOBJ_sn2nidEC_GROUP_new_by_curve_nameEC_GROUP_set_asn1_flagEC_GROUP_set_point_conversion_formEC_GFp_simple_methodEC_GFp_mont_methodEVP_PKEY_get0_EC_KEYEC_KEY_printEC_KEY_check_keyEC_KEY_get0_private_keyPEM_write_bio_ECPrivateKeyi2d_ECPrivateKey_bioPEM_write_bio_EC_PUBKEYi2d_EC_PUBKEY_bioECDSA_verifyECDSA_sizeECDSA_signECDH_compute_keyEC_KEY_set_public_keyEC_KEY_set_private_keyEC_KEY_set_groupEC_KEY_dupEC_KEY_freeEC_KEY_newEC_KEY_new_by_curve_nameEC_KEY_set_asn1_flagEC_KEY_set_conv_formcECPEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEYd2i_ECPrivateKey_biod2i_EC_PUBKEY_bioEC_get_builtin_curvesEC_POINT_point2octEC_POINT_set_to_infinityEC_POINT_invertEC_POINT_make_affineEC_POINT_is_at_infinityECPKParameters_printEC_GROUP_get_degreeEC_GROUP_get_seed_lenEC_GROUP_get0_seedEC_GROUP_get_point_conversion_formEC_GROUP_get_asn1_flagEC_GROUP_get_curve_nameEC_GROUP_get_cofactorEC_GROUP_get_orderEC_GROUP_set_generatorEC_GROUP_cmpEC_POINT_cmpEC_KEY_generate_keyEC_POINT_mulrb_ary_tmp_newEC_POINTs_mulruby_malloc_size_overflowEC_GROUP_get0_generatorEC_KEY_get0_groupEVP_PKEY_get0_RSARSA_get0_factorsRSA_get0_crt_paramsRSA_set0_crt_paramsRSA_set0_factorsRSA_set0_keyEVP_DigestVerifyInitRSA_pkey_ctx_ctrlEVP_DigestVerifyFinaleRSAErrori2d_RSAPrivateKeyi2d_RSA_PUBKEYPEM_write_bio_RSAPrivateKeyPEM_write_bio_RSA_PUBKEYRSA_printd2i_RSAPrivateKeyRSA_generate_key_exRSA_newRSA_freeRSAPublicKey_dupRSA_sizeRSA_public_encryptRSA_public_decryptRSA_private_encryptRSA_private_decryptPEM_read_bio_RSAPrivateKeyPEM_read_bio_RSA_PUBKEYd2i_RSAPrivateKey_biod2i_RSA_PUBKEY_bioPEM_read_bio_RSAPublicKeyd2i_RSAPublicKey_bioEVP_DigestSignInitEVP_DigestSignFinalcRSARAND_statusrb_num2dblRAND_addRAND_seedRAND_byteseRandomErrorrb_check_safe_objRAND_load_fileRAND_write_filemRandomSSL_freeSSL_CIPHER_get_nameSSL_CIPHER_get_versionSSL_CIPHER_get_bitsossl_ssl_typeSSL_get_fdrb_io_taint_checkrb_io_check_closedrb_io_check_readablerb_io_check_writableSSL_set_fdSSL_CTX_freeSSL_CTX_get_optionsSSL_CTX_clear_optionsSSL_CTX_set_optionsSSL_CTX_flush_sessionsSSL_CTX_ctrlSSL_get_servernameSSL_get_ex_dataSSL_get_ex_data_X509_STORE_CTX_idxX509_STORE_CTX_get_ex_dataossl_verify_cb_callSSL_is_serverX509_STORE_CTX_get_error_depthX509_STORE_CTX_get_current_certmSSLcSSLSessionossl_ssl_session_typerb_during_gcSSL_CTX_get_ex_dataSSL_SESSION_up_refX509_get_pubkeyEVP_PKEY_cmpSSL_CTX_use_certificateSSL_CTX_use_PrivateKeySSL_CTX_get_security_levelSSL_CTX_set_cipher_listrb_StringSSL_CTX_get_ciphersrb_uint2bigSSL_get0_next_proto_negotiatedSSL_get0_alpn_selectedSSL_ctrlSSL_get_client_CA_listSSL_get_verify_resultSSL_set_sessionSSL_session_reusedSSL_pendingSSL_state_stringrb_ruby_verbose_ptrSSL_state_string_longSSL_get_current_cipherSSL_get_versionSSL_get_peer_cert_chainSSL_get_peer_certificateSSL_get_certificateSSL_shutdownrb_hash_lookup2SSL_writeSSL_get_errorrb_io_wait_writable__errno_locationrb_io_wait_readablerb_sys_failX509_verify_cert_error_stringSSL_acceptSSL_connectSSL_CTX_remove_sessionTLS_methodSSL_CTX_newSSL_CTX_set_ex_dataSSL_CTX_set_security_levelSSL_CTX_add_sessionstrncmpSSL_readrb_str_modifyrb_str_modify_expandrb_eof_errorSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_cert_storeX509_STORE_up_refSSL_CTX_check_private_keySSL_CTX_add_client_CASSL_CTX_set_verifySSL_CTX_set_timeoutSSL_CTX_set_verify_depthrb_eachrb_iterateSSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_alpn_protosrb_obj_freezeSSL_CTX_set_session_id_contextSSL_CTX_callback_ctrlSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_remove_cbSSL_CTX_set_client_cert_cbSSL_CTX_load_verify_locationsSSL_CTX_set_alpn_select_cbSSL_CTX_set_next_proto_select_cbSSL_newSSL_set_ex_dataSSL_set_info_callbackrb_call_supercSSLContextSSL_set_SSL_CTXCRYPTO_get_ex_new_indexrb_mWaitReadablerb_mWaitWritableInit_ossl_ssl_sessioncSSLSocketSSL_SESSION_freei2d_SSL_SESSIONPEM_read_bio_SSL_SESSIONSSL_get1_sessionSSL_SESSION_newd2i_SSL_SESSIONSSL_SESSION_printSSL_SESSION_get_idSSL_SESSION_get_timeoutSSL_SESSION_set_timeoutSSL_SESSION_get_timeSSL_SESSION_set_timeSSL_SESSION_get_protocol_versionCRYPTO_memcmpPEM_write_bio_SSL_SESSIONX509_time_adj_exmX509Init_ossl_x509attrInit_ossl_x509certInit_ossl_x509crlInit_ossl_x509extInit_ossl_x509nameInit_ossl_x509reqInit_ossl_x509revokedInit_ossl_x509storeX509_get_default_cert_areaX509_get_default_cert_dirX509_get_default_cert_fileX509_get_default_cert_dir_envX509_get_default_cert_file_envX509_get_default_private_dirX509_ATTRIBUTE_freei2d_X509_ATTRIBUTEeX509AttrErrorX509_ATTRIBUTE_countX509_ATTRIBUTE_get0_typei2d_ASN1_SET_ANYOPENSSL_sk_freeASN1_TYPE_getX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_dupX509_ATTRIBUTE_set1_objectd2i_X509_ATTRIBUTEX509_ATTRIBUTE_newossl_x509attr_newcX509AttrGetX509AttrPtrX509_EXTENSION_freeX509_delete_extX509_add_exti2d_X509X509_dupX509_newX509_cmpX509_get_ext_countX509_get_extX509_check_private_keyX509_verifyX509_signX509_set_pubkeyX509_set1_notAfterX509_get0_notAfterX509_set1_notBeforeX509_get0_notBeforeGetX509NamePtrX509_set_issuer_nameX509_get_issuer_nameX509_set_subject_nameX509_get_subject_nameX509_get_serialNumberX509_set_serialNumberX509_get0_tbs_sigalgX509_set_versionX509_get_versionX509_printPEM_write_bio_X509PEM_read_bio_X509d2i_X509_bioX509_up_refX509_CRL_delete_extX509_CRL_add_exteX509CRLErrorcX509RevX509_CRL_get_REVOKEDX509_REVOKED_freeDupX509RevokedPtrX509_CRL_add0_revokedX509_CRL_sortossl_x509revoked_newX509_CRL_get0_signatureX509_CRL_dupX509_CRL_newX509_CRL_get_ext_countX509_CRL_get_extX509_CRL_printPEM_write_bio_X509_CRLi2d_X509_CRL_bioX509_CRL_verifyX509_CRL_signX509_CRL_set1_nextUpdateX509_CRL_get0_nextUpdateX509_CRL_set1_lastUpdateX509_CRL_get0_lastUpdateX509_CRL_set_issuer_nameX509_CRL_get_issuerX509_CRL_set_versionX509_CRL_get_versionPEM_read_bio_X509_CRLd2i_X509_CRL_biocX509CRLi2d_X509_EXTENSIONeX509ExtErrorX509_EXTENSION_get_objectX509_EXTENSION_get_dataASN1_OCTET_STRING_setX509_EXTENSION_dupOBJ_ln2nidX509V3_set_nconfX509V3_EXT_nconf_nidX509V3_EXT_printASN1_STRING_printX509_EXTENSION_get_criticalX509_EXTENSION_set_objectGetX509ReqPtrX509V3_set_ctxd2i_X509_EXTENSIONX509_EXTENSION_newX509_EXTENSION_set_criticalcX509ExtFactoryX509_NAME_freei2d_X509_NAMEeX509NameErrorX509_NAME_entry_countX509_NAME_ENTRY_get_dataX509_NAME_get_entryX509_NAME_ENTRY_get_objecti2t_ASN1_OBJECTX509_NAME_print_exrb_utf8_encindexrb_enc_associate_indexrb_utf8_encodingrb_enc_sprintfX509_NAME_dupcX509Namerb_const_getd2i_X509_NAMEX509_NAME_newX509_NAME_cmpX509_NAME_onelineX509_NAME_hash_oldX509_NAME_hashX509_NAME_add_entry_by_txtrb_mComparablerb_hash_set_ifnoneX509_REQ_freeX509_REQ_delete_attrX509_REQ_add1_attreX509ReqErrorX509_REQ_get0_signaturei2d_X509_REQX509_REQ_dupX509_REQ_get_attr_countX509_REQ_get_attrX509_REQ_verifyX509_REQ_signX509_REQ_set_pubkeyX509_REQ_get_pubkeyX509_REQ_set_subject_nameX509_REQ_get_subject_nameX509_REQ_set_versionX509_REQ_printPEM_write_bio_X509_REQX509_REQ_newPEM_read_bio_X509_REQd2i_X509_REQ_bioX509_REQ_get_versioncX509Reqi2d_X509_REVOKEDeX509RevErrorX509_REVOKED_delete_extX509_REVOKED_add_extX509_REVOKED_dupX509_REVOKED_get_ext_countX509_REVOKED_get_extX509_REVOKED_set_revocationDateX509_REVOKED_get0_revocationDateX509_REVOKED_set_serialNumberX509_REVOKED_get0_serialNumberX509_REVOKED_newX509_STORE_CTX_get0_untrustedX509_STORE_CTX_get0_certX509_STORE_CTX_freeX509_STORE_freeX509_LOOKUP_fileX509_STORE_add_lookupX509_LOOKUP_ctrleX509StoreErrorX509_LOOKUP_hash_dircX509StoreContextX509_STORE_CTX_get_errorX509_STORE_CTX_set_timeX509_STORE_CTX_set_errorX509_STORE_CTX_set_flagsX509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_chainX509_STORE_CTX_set_ex_dataX509_verify_certX509_STORE_CTX_newX509_STORE_add_crlX509_STORE_add_certX509_STORE_set_default_pathsX509_STORE_set_flagsX509_STORE_set_ex_dataX509_STORE_set_verify_cbX509_STORE_newrb_block_procX509_STORE_CTX_initX509_STORE_CTX_set_purposeX509_STORE_CTX_set_trustX509_STORE_set_purposeX509_STORE_set_trustX509_STORE_CTX_get0_storeX509_STORE_get_ex_datacX509Storelibruby.so.2.5libssl.so.1.1libcrypto.so.1.1libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.7GLIBC_2.3.4OPENSSL_1_1_0OPENSSL_1_1_1	�I`���	�Iii
�Iui	�Iii
�Iti	�IuI m�I�Im�Im�I�|%p��|%0��|%�|%�|%d��|%�� }%X�0}%�,�}%���}%�I�}%���}% R@~%`�P~%p_�~%G��~%�s%��%P}`%
�p%���%%��%p� �%<�0�%p���%R���%p��%F��%��@�%�P�% ���%���%0��%��%`�`�%�p�%����%F�Ђ%�% �%W�0�%�%��%ӵ��%���%
���%���%�Ѓ% ��%'��%�@�%3�P�%����%����%���%���%@�`�%c�p�%���%J�Ѕ%� �%�0�%@5��%����%p/�%t��%�@@�%'�P�% T��%����%�b�%���%pl`�%��p�%�l��%��Ј%���%:��%B��%M��%Z� �%��0�%_�@�%q�P�%z�`�%�p�%����%����%����%����%����%͈Љ%ֈ�%ڈ�%��%���%� �%�0�%�@�%#�P�%3�`�%A�p�%M���%[���%k���%|�Ȉ%Q��%Q؈%h�%�%��%��%�`�%��%H�%�%�(�%�(�%���%�h�%�X�%���%K �%Kȉ%+0�%+؉%���%��%�p�%���%%x�%%�%�Ȫ%��%�Ȯ%�(�%�0�%�8�%��%H�%P�%X�%�ج%�h�%�x�%�x�%	�%	��%�H�%���%��%���%���%���%P��%���%#��%.��%0Ъ%2ت%��%��%0�%���%D�%F�%-�%�%�0�%[8�%@�%�H�%�P�%X�%n`�%ph�%wp�%}x�%���%���%���%���%���%���%���%���%���%�ȫ%�Ы%�ث%��%��%��%���%A�%��%��%B�%C �%>(�%�0�%�8�%@@�%LP�%4X�%4`�%6p�%x�%@��%��%O��%E��%���%T��%a��%MȬ%�Ь%d�%t�%��%���%��%�%�%��%� �%�(�%�0�%�8�%�@�%IH�%�P�%<X�%�`�%1h�%�p�%���%���%���%���%���%O��%���%���%�ȭ%�Э%Uح%F�%,�%��%(��%:�%��%C�%�%! �%W(�%\8�%�@�%iP�%�X�%
`�%�h�%8x�%���%���%���%���%���%���%���%���%$��%"Ю%�خ%�%��%*��%��%<�%=�%� �%�(�%/8�%�@�%PH�%Qh�%_p�%��%G��%?��%���%���%u��%x��%��%���%�ȯ%�Я%�د%��%H،%�%�%�%��%�%�%�%�%	 �%
(�%0�%8�%
@�%H�%P�%X�%`�%h�%p�%x�%��%���%��%��%��%��%��%��%��%ȍ%Ѝ%؍% �%!�%"�%$��%%�%&�%'�%(�%) �%*(�%+0�%,8�%-@�%/H�%1P�%�X�%3`�%4h�%5p�%6x�%7��%8��%9��%&��%:��%;��%<��%=��%���%>Ȏ%?Ў%@؎%A�%B�%C�%E��%F�%G�%H�%I�%J �%K(�%L0�%�8�%M@�%NH�%OP�%PX�%Q`�%Rh�%Sp�%Tx�%U��%V��%W��%X��%Y��%Z��%[��%\��%]��%^ȏ%�Џ%_؏%`�%a�%b�%c��%d�%e�%f�%g�%h �%i(�%j0�%k8�%l@�%mH�%P�%oX�%q`�%rh�%sp�%tx�%u��%v��%x��%y��%z��%{��%|��%~��%��%�Ȑ%�А%�ؐ%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%�ȑ%�Б%�ؑ%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%*��%���%���%���%���%���%���%���%���%�Ȓ%�В%�ؒ%��%��%��%���%��%��%��%��% �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%.��%���%���%�ȓ%�Г%�ؓ%��%��%��%���%��%��%D�%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%:��%���%���%���%���%���%���%���%���%�Ȕ%�Д%�ؔ%��%��%��%���%�%
�%�%�% �%(�%0�%8�%@�%H�%	P�%�X�%
`�%h�%p�%
x�%��%���%��%��%��%��%��%��%��%ȕ%Е%ؕ%6�%�%�%��%�%�%�%�%  �%!(�%�0�%"8�%#@�%$H�%�P�%%X�%&`�%'h�%(p�%)x�%*��%+��%,��%-��%.��%/��%0��%1��%2��%3Ȗ%5Ж%6ؖ%��%7�%8�%9��%:�%;�%<�%=�%> �%?(�%A0�%B8�%C@�%DH�%EP�%FX�%G`�%Hh�%Ip�%Jx�%K��%L��%M��%N��%P��%Q��%R��%S��%T��%Uȗ%VЗ%Wؗ%X�%Y�%Z�%[��%\�%]�%^�%_�%` �%b(�%0�%c8�%e@�%fH�%gP�%hX�%;`�%ih�%jp�%kx�%l��%m��%n��%o��%p��%q��%r��%s��%u��%vȘ%wИ%xؘ%y�%z�%{�%|��%}�%~�%�%��%� �%�(�%�0�%�8�%#@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%Rș%�Й%�ؙ%��%��%5�%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%p�%�x�%���%���%���%���%���%���%���%���%���%�Ț%�К%�ؚ%��%��%'�%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%JP�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%�ț%�Л%�؛%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%�Ȝ%�М%�؜%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%H�%P�%X�%`�%h�%p�%x�%��%���%��%	��%���%
��%��%��%
��%ȝ%=Н%؝%�%�%�%��%�%�%�%�% �%�(�%0�%8�%@�%H�%P�%X�%`�% h�%!p�%"x�%���%#��%���%$��%%��%,��%&��%'��%(��%)Ȟ%*О%+؞%,�%-�%�%.��%/�%0�%��%1�%2 �%3(�%40�%58�%6@�%7H�%8P�%9X�%;`�%<h�%=p�%>x�%?��%@��%A��%B��%���%���%D��%E��%F��%Gȟ%HП%I؟%J�%K�%L�%M��%N�%O�%P�%Q�%R �%S(�%T0�%U8�%�@�%VH�%XP�%YX�%Z`�%[h�%]p�%^x�%_��%`��%a��%b��%c��%d��%e��%f��%g��%hȠ%jР%kؠ%l�%��%m�%n��%o�%p�%q�%r�%s �%t(�%u0�%v8�%w@�%xH�%yP�%zX�%{`�%|h�%}p�%x�%~��%��%���%���%���%���%���%���%���%7ȡ%�С%�ء%��%��%��%���%�%�%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%�Ȣ%�Т%�آ%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%��%���%���%�ȣ%�У%�أ%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%2��%���%���%�Ȥ%�Ф%�ؤ%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%�ȥ%Х%إ%�%�%�%��%�%�%�%3�%	 �%
(�%S0�%8�%@�%
H�%P�%X�%`�%h�%p�%x�%N��%��%��%��%��%��%��%��%��%Ȧ%Ц%ئ%�% �% �%!��%"�%#�%$�%%�%& �%'(�%(0�%)8�%+@�%,H�%-P�%.X�%/`�%0h�%1p�%2x�%3��%4��%���%5��%6��%7��%8��%9��%:��%;ȧ%<Ч%>ا%9�%?�%@�%A��%��%B�%C�%�%D �%E(�%F0�%G8�%H@�%IH�%JP�%KX�%L`�%Mh�%Np�%Ox�%Q��%R��%S��%T��%U��%V��%W��%X��%Y��%ZȨ%[Ш%\ب%��%]�%^�%)��%��%`�%a�%b�%c �%d(�%e0�%f8�%g@�%hH�%iP�%jX�%k`�%lh�%mp�%nx�%o��%p��%q��%r��%s��%t��%v��%w��%���%yȩ%zЩ%{ة%|�%}�%~�%��%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%��H��H�yr$H��t��H����5�S$�%�S$��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h��������h�������h�������h������h������h������h������h������h��q����h��a����h	��Q����h
��A����h��1����h��!����h
������h������h�������h�������h�������h������h������h������h������h������h��q����h��a����h��Q����h��A����h��1����h��!����h������h������h�������h �������h!�������h"������h#������h$������h%������h&������h'��q����h(��a����h)��Q����h*��A����h+��1����h,��!����h-������h.������h/�������h0�������h1�������h2������h3������h4������h5������h6������h7��q����h8��a����h9��Q����h:��A����h;��1����h<��!����h=������h>������h?�������h@�������hA�������hB������hC������hD������hE������hF������hG��q����hH��a����hI��Q����hJ��A����hK��1����hL��!����hM������hN������hO�������hP�������hQ�������hR������hS������hT������hU������hV������hW��q����hX��a����hY��Q����hZ��A����h[��1����h\��!����h]������h^������h_�������h`�������ha�������hb������hc������hd������he������hf������hg��q����hh��a����hi��Q����hj��A����hk��1����hl��!����hm������hn������ho�������hp�������hq�������hr������hs������ht������hu������hv������hw��q����hx��a����hy��Q����hz��A����h{��1����h|��!����h}������h~������h�������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h���������%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%}
$D���%u
$D���%m
$D���%e
$D���%]
$D���%U
$D���%M
$D���%E
$D���%=
$D���%5
$D���%-
$D���%%
$D���%
$D���%
$D���%

$D���%
$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%�
$D���%}
$D���%u
$D���%m
$D���%e
$D���%]
$D���%U
$D���%M
$D���%E
$D���%=
$D���%5
$D���%-
$D���%%
$D���%
$D���%
$D���%
$D���%
$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%�	$D���%}	$D���%u	$D���%m	$D���%e	$D���%]	$D���%U	$D���%M	$D���%E	$D���%=	$D���%5	$D���%-	$D���%%	$D���%	$D���%	$D���%
	$D���%	$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%�$D���%}$D���%u$D���%m$D���%e$D���%]$D���%U$D���%M$D���%E$D���%=$D���%5$D���%-$D���%%$D���%$D���%$D���%
$D���%$D���%��#D���%��#D���%�#D���%�#D���%�#D���%�#D���%�#D���%�#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%}�#D���%u�#D���%m�#D���%e�#D���%]�#D���%U�#D���%M�#D���%E�#D���%=�#D���%5�#D���%-�#D���%%�#D���%�#D���%�#D���%
�#D���%�#D���%��#D���%��#D���%�#D���%�#D���%�#D���%�#D���%�#D���%�#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%}�#D���%u�#D���%m�#D���%e�#D���%]�#D���%U�#D���%M�#D���%E�#D���%=�#D���%5�#D���%-�#D���%%�#D���%�#D���%�#D���%
�#D���%�#D���%��#D���%��#D���%�#D���%�#D���%�#D���%�#D���%�#D���%�#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%}�#D���%u�#D���%m�#D���%e�#D���%]�#D���%U�#D���%M�#D���%E�#D���%=�#D���%5�#D���%-�#D���%%�#D���%�#D���%�#D���%
�#D���%�#D���%��#D���%��#D���%�#D���%�#D���%�#D���%�#D���%�#D���%�#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%}�#D���%u�#D���%m�#D���%e�#D���%]�#D���%U�#D���%M�#D���%E�#D���%=�#D���%5�#D���%-�#D���%%�#D���%�#D���%�#D���%
�#D���%�#D���%��#D���%��#D���%�#D���%�#D���%�#D���%�#D���%�#D���%�#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%��#D���%}�#D���%u�#D���%m�#D���%e�#D���%]�#D���%U�#D���%M�#D���%E�#D���%=�#D���%5�#D���%-�#D���%%�#D���%�#D���%�#D���%
�#D���%�#D���%��#D���%��#D���%�#D���%�#D���%�#D���%�#D���%�#D���%�#D���%��#DH�=9$H�2$H9�tH�~�#H��t	�����H�=	$H�5$H)�H��H��H��?H�H�tH���#H��t��fD�����=�#u+UH�=��#H��tH�=N�#����d������#]������w������H���#H���H��H��H��HE�H�
��#H��ff.���H��1��r��f���H��dH�%(H�D$1�����H�$H��tH����H�$H�T$dH3%(uH����3���S���H����1�H����H����H��H���s����>��H��u�H��[�@��H���3��H�H��H�Ѓ��f���H��H��H�=O�#�Z��f.���H��dH�%(H�D$1�H�t$�D$����|$��uH�T$dH3%(u
H�������_�ff.�@��AUATUSH��H��t}H�����A�ą�xNHc����I��E��t+1�@��H������H���s��L��H���h���D9�u�H��L��[]A\A]�DH���#H�8��H��[]A\A]�`�H���#A�H�8u�H�.�#��H�=E�H����H��	�H�=6����H�;A�Z1�H�
)�H�)������Y���@H��#��H�=��H��X���H���H�=���?���H�;A�Z1�H�
��H�����L���������AUATUSH��H��t}H������A�ą�xNHc��&��I��E��t+1�@��H������H������L��H�����D9�u�H��L��[]A\A]�DH�I�#H�8��H��[]A\A]���H�)�#A�H�8u�H���#��H�=��H��M���H��	�H�=���4���H�;A�[1�H�
��H�����A���Y���@H�Y�#��H�=p�H����H���H�=|����H�;A�[1�H�
T�H�T�������������AUATUSH��H��t}H����A�ą�xNHc����I��E��t+1�@��H�������H������L��H�����D9�u�H��L��[]A\A]�DH��#H�8��H��[]A\A]��H���#A�H�8u�H�N�#��H�=e�H����H��	�H�=V����H�;A�\1�H�
I�H�I�������Y���@H��#��H�=�H��x�H���H�=��_�H�;A�\1�H�
��H�����l���������AUI��H�=`���ATI��UH��SH��dH�%(H�D$1�H�T$�h��H��H��t`�D$�E��uuM��tH�{H� u3L��L�����H�L$dH3%(H��uLH��[]A\A]�f.�H�{��f.��D$��t����Y������4�@��UHc�SH��H��dH�%(H�D$1�H�T$�F��H�ߺ~H�5��H���?���|$��uH�L$dH3%(H��uH��[]����������H��������?H9�wN1�L�
��H��t?��A�ȃ�A��A�	E��G��LFD�FH��H9�u��f.��PH�
'���H�5�H�=0����ff.�@��AWAVLc�AUATUH��SH��dH�%(H�D$1�H������t���>H��؃����-�� tHH�YI9��H�qH��H�����H�|$dH3<%(�iH��[]A\A]A^A_��H����I9���H�q�f����Y����tu��L�d$Mc�M�I��A��L��L��H�=��������T$��uvH��tzH�H�ځ� t"H�XI9�|AH�pH���M���H�p�D���H�������1ɉ�D��H���!���*���@D��H�=.�1��'���r���f������������@H���#H�8u�H�,�#��H�=C�H���H��"�H�=����H�;A��1�H�
'�H�'��������������@���H��H�5�#1�1�dH�%(H�D$1����H��H�$�l��H�$H�T$dH3%(uH������ff.���SH�5��#H�������uH��[�H��[�����AVAUATUSH�� dH�%(H�D$1�H�i�#H�8��L�t$L�l$I��H�l$H�y�fDL��L��L��H������H��tW1�H��� ��H��HD�D$t"H�T$H��tXH��H�=8�1����DH��H�=8�1����D�3��H�D$dH3%(u!H�� []A\A]A^�fDH�\$H������ff.�f���ATUH��H��SH���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$��$H�D$H�D$ �D$0H�D$H��t.H������H�����H��u1H��tH��H�����H������n��H��uJ1�1����H����H���s���I��H��t6H��� u@������u>M��tOL��H������A���H���7���I��M��t6L�����H����H�{��뾺H�5�H���t���L�%^�������f���ff.�@��AU�ATUH��SH���e�����H����I��1��HH����H9�}NH��H��H���E�I��H�;�#L��H�0����H��t3L���c��L��H�����H�E�� u�H�EH9�|�H��L��[]A\A]�H�5��#L���Y�H���#H�5��H�81��q��H���#1�H�81��^��ff.���H��H��H�|$H��tH�|$���H�D$H� u
H���DH�x~�H��#�H�5K�H�81��������SH��H�����t�*���t.H��[Ð1�������u�H�6�#H�5�H�81����D������u�H��#H�5��H�81����f���S1�1�������H�=���N��H�?�#H��H�����H�=���+��H�;H�5�H���i�� H�=�����H�;H�5��H���F�1���H�����H�;H�5��H���%�H�;�!  H�5����H�;�H�5����H�;1�H���H�5�����H�;�H�����H�5�����H�s�#H�;H�5w�H���H�=��#H�����H�=;�#H����H�;1�H�s�H�5G��7��H�;�H�h�H�52����H�U�#H�;1�H�5!����H�=���H���#���������M�������S������I���T��������%���P���+���F��[�0�H���#H�5�H�81��x��H��H�|$H�|$���H�|$H� uH��1����H��tH���f.�H�1��u��H��u�H�|$H� t2H���T��H��u�H���#H�T$H�5��H�81�����f�H����f.����H�=����ff.���AT1�UH�-��#SH��H�=|����H�5Y�#H�ߺI���)���H�5J�#L��H������H�5 �#H�ߺ����H�5�#H��H����H�5��#H��1����H��[]A\����USH��H�5��#dH�%(H�D$1��:��H�����H�T$H�=FH��H��苿��H��H�������|$��uH�L$dH3%(H��uH��[]��	����@��AT�UH��1�S����H�0H��� ��H��H�x��H�����P��������H�Hc�� tUH�SH9�~7D�`H��Ic����H�{H� tH�{�H��D���L���~?Hc�H�����H��[]A\�DH������H�xHclj�H9�u!H�{�]���H���#H�5��H�81�����<�ff.����H��H�5i�#dH�%(H�D$1����H��H�$����H���x���Ǹ��t
�8���H�����H�T$dH3%(uH����F��fD��H��H�5��#dH�%(H�D$1��L��H��H�$�`��H������Ǹ��t
�h�H�����H�T$dH3%(uH�������fD��UH��S��H��H�5*�#H��tH���#H���H�8H��[]���H�=������H��H���#��ff.���UH��S��H��H�5��#H��tH���#H���H�8H��[]�;��H�=y��w��H��H���#��ff.���UH��S��H��H�5Z�#H��tH���#H���H�8H��[]����H�=����H��H��#��ff.���UH��S��H��H�5��#H��tH���#H���H�8H��[]�{��H�=�����H��H���#��ff.���UH��S��H��H�5��#H��tH�^�#H���H�8H��[]���H�=Y��W��H��H�M�#��ff.���UH��S��H��H�5"�#H��tH�6�#H���H�8H��[]���H�=�����H��H���#��ff.���UH��S��H��H�5��#H��tH�F�#H���H�8H��[]�[��H�=�����H��H�}�#��ff.���UH��S��H��H�5R�#H��tH���#H���H�8H��[]���H�=9��7��H��H��#��ff.���UH��S��H��H�5��#H��tH���#H���H�8H��[]���H�=������H��H���#��ff.���UH��S��H��H�5��#H��tH���#H���H�8H��[]�;��H�=y��w��H��H�E�#��ff.���UH��S��H��H�5�#H��tH��#H���H�8H��[]����H�=����H��H���#��ff.���UH��S��H��H�5��#H��tH��#H���H�8H��[]�{��H�=�����H��H�u�#��ff.���UH��S��H��H�5J�#H��tH��#H���H�8H��[]���H�=Y��W��H��H�
�#��ff.���UH��S��H��H�5��#H��tH�F�#H���H�8H��[]����H�=�����H��H���#��ff.���UH��S��H��H�5z�#H��tH���#H���H�8H��[]�[���H�=�����H��H�=�#��ff.���UH��S��H��H�5�#H��tH�6�#H���H�8H��[]����H�=9��7��H��H���#��ff.���UH��S��H��H�5��#H��tH���#H���H�8H��[]����H�=������H��H�m�#��ff.���UH��S��H��H�5B�#H��tH��#H���H�8H��[]�;���H�=y��w��H��H��#��ff.���UH��S��H��H�5��#H��tH���#H���H�8H��[]�����H�=����H��H���#��ff.���UH��S��H��H�5r�#H��tH���#H���H�8H��[]�{���H�=�����H��H�5�#��ff.���UH��S��H��H�5
�#H��tH�6�#H���H�8H��[]����H�=Y��W��H��H���#��ff.���UH��S��H��H�5��#H��tH�.�#H���H�8H��[]����H�=�����H��H�e�#��ff.���UH��S��H��H�5:�#H��tH���#H���H�8H��[]�[���H�=�����H��H���#��ff.���USH��H��H�5��#H�-��#�@���H��E1�E1�1�1�H������H��H��[]Ð��Sf�H��H�Ā�WdH�%(H�D$x1�H��)$)D$)D$ H�D$0��t>����1�H�=ݶ�����H�\$xdH3%(��H��[��H�pH�PH�HVH�PL�HL�@H�5O�1��x���^_���-���N�D$��D��Hc$��D$H�T�LH�pH�PH�HVH�PL�HL�@H�5�1�����ZY�������
Hc$�D$H�TH�H�5F�#H�T$hH�DH�D$@HcD$H�DH�D$HHcD$H�DH�D$PHcD$H�DH�D$XHcD$H�DH�D$`H��tH���#H�L$@�H�8��������H�=�����H��H���#��Hc$l�D$H�T�R���f��$����@�$�D$��$�������H�?�#H�SH�5�H�81�����H�#�#H�SH�5�H�81����ff.���USH��H��tC1��
t1����H��H��tFH������H��H���y��H��H��[]���s��H����H���#H�5��H�81��6��H���#1�H�81��#����ATI��UH��SH����t��u_H������tV�����uLH�5��#H��胦��H�5��#L��H���q���H�5��#H��H���_���H�5`�#H��1��N���H��[]A\�H��#H�5�H�81����ff.���H��(H�|$H�T$H�t$H�L$诼��H�|$襼��H�|$蛼��H�T$H� uMH�t$H��H� uMH��H�|$H� uH��� �����t4�H��(�f�H���f.�H�t$H�RH� t�H�v�H���#1�H�81�����DH��H�5u�#���H��t$H�Ǩu���H���f��k���H���H�_�#H�5��H�81��n��ff.�S@��ti@������������H����@����H�_�'�H�=��#H�����H��u;H���ò��H��H��uڸ����[�H�����u�H��t=H��u�H�]�#H���H�Ǩt	褴��[�f��;��[�f�H�Q�#H��H�u�#H��H�9�#H��H�=�#H��H���#H��q����AWAVI��AUA��ATA��UH��SH��8dH�%(H�D$(1���t�ҸDE�H�5��#L���X���H���nH;��#�aH;��#��H;��#�WH;��#���D$�L������L���D$�n���H�M�D$�� �]H����I��Ic�Ic�I9��FH�5M�#L���ų��H9~�#�8E1�E��A��A���|$��8�T$D��D��D�T$���D�T$�T$�ƉD$D��D�T$�߱��1�H�H��H�D$����D�T$D�\$I��H�@I� tI�GL�t$ D�D$D��D�֋L$L��H�D$ �/����L$D��E1���L������H�uH�E tH�uH�|$ H�����H\$ H�\$ E���I�GI� tI�GH)�H;\$�4H�T$(dH3%(L���H��8[]A\A]A^A_�@L�}�����T$D��D�����1�H�H��H�D$� ���I��H�@I� tI�GL�t$ D�D$�L$��D��L��H�D$ �<���H�uH�E tH�uH�|$ H������H\$ H�\$ E���!���L���B���H�\$ ������D$����D$����L������L������H�\$ ����fD�D$@����^��L������H�
����H�5ݮH�=�����H��#H�5��H�81�����H���#H�5��H�81��������AWAVI��AUATUSH��(H�5��#dH�%(H�D$1�L�l$���H�5��#L��H��H����E1����D$�װ��H�
F��H�?�H���ܻ��1�1�H���p���I���aH����I9��}H�CJ�<�H�|$H��tH���#H�0�g��H��uBH�|$���L��I��H�D$臻��H�t$L���j���H��� u�L;{}!H�C �fDH��� uHH�CH��L9�uD�T$L��L���g���H�T$dH3%(u8H��([]A\A]A^A_��H�����H���#H�5J�H�81�菾�����f.���AUATUSH��XdH�%(H�D$H1�H��H�D$ H�D$@��H�D$(H�D$H�D$0H�D$H�D$8�G����
H�H�ӹH�$H�D$ L�@�"�H��t
Lc�N��L�
��H��I9�tH�P9��H��t�H��H�I9�u�H���h���A�ă����@����Hc�H�-��#H�D$A�H�TH�T$H�l$H�5D�#H������H�$H�59�#H���	���H�5�#L��H�����H�5�#H��H�����H�5��#1�H���ԝ��A����H��H�\$HdH3%(�H��X[]A\A]��H�T$H����L�l$I����A��t'A����I�������A�E������H�l$H��uH�-{�#H�l$@���	���@��uH�����t�E�������H�O�#H�5תH�81��^���fDH�5��#�H����������H�l$H��u�H�-�#H�l$끺��p������H���#H�5ʪH�81���H���#H�5ʪH�81��ۻ��ff.�AWAVAUATUH��SH��H��H�L�'H�T$ H�t$hH�T$XD�D$H�|$`I��L$8L�L$0dH�%(H��$�1�H�L$\H�D$(H�D$hL�d$`辿��H�L$`����L�l$hI9���A�ƋD$\������P���0�@H���#HD��#H�D$D��T$L)�� I�ωD$�����D$���"A��t	M���VH�D$D�t$XK�l=H9��#H�;u
A���vL�L��蓫��H+H�\$I��H;y�#Ic�H�Tu
A����H�v�#H�T$H�8�ɥ��H�L$H�T$L��H��H���1�H�L$hL�l$(J�9I�H�D$0H�(H��tL�H9���H�D$ L�(H��H��$�dH3%(�kH�ĸ[]A\A]A^A_�H���#H�D$�����H���#H�D$�����D$XL;L)��D$LH�D$(L�H�D$p�@���A��!H�}�#LD�H�D$L��M�����D$8E1��D$(H�D$xH�D$@H�D$pH�D$8�@H�|$H�����M���L�L$@D�D$L��H�ߋL$(H�T$8H�D$x�K���H��H�D$xI�I)�A��!u�H���?��u�H�5��#H������H���#H9�u�K�,'@HcL$LH��L�d	H9T$��������H�E�#H�8����H��H�D$H��$�H�ڿL��$�H��$�H�D$HDŽ$�H��$�����H�5�#A��!�f1�H�����L�l$pH�L$h���D�˽��Hct$8H��I��H�t6���H�D$ H�8H�@H��H�t?L���^��H�@L���K�t?L���>��H�|$hH�@H���H�t?L������|$L��H�H�փ�����D$\H�5X�#�����tH�5I�#��u�@H�5D�#HD5D�#L������Hct$XL��H�t6���L�����L�l$h�B���K�,'H�
�#�H���H��#H�8�q���H�t$H�L$L��H��H�����H�5��#A��!������H���{������fDE1�H��H�
2�#L�D$H�DH���2���H�8H�D$H��$�L��$�HDŽ$�H��$��ޡ��H��$��H��H�����A��L�D$����H�5��#K�TH��������fDA���.H�
k�D��Hc�H�>��f.����H���R���L�����H�������ۿ��H�����H��H�E�#H�DH�8�(���H������H�|$xH�t$xH��1��D$p���I��H����H�=!�#H�T$pH���$���L��I���ٗ���|$p����DH�H�
F�#E1�H�H�Ic�H�TH9L$�����p���DH�|$xH�t$xH��1��D$p���I��H���cH�=A�#H�T$pH��蜠��L��I������|$p��t��4��@H�|$xH�t$xH��1��D$p脲��I��H���H�=��#H�T$pH���D���L��I���	����|$p���%����H���L�?�+��!��Ic�M�H��E1�I��H�;A���y���fDH�����?����v1�H�=�����H�
��#E1�I��H����H�|$xH�t$x1�H���L���H���6H��A�蕗��H�H�
��#E1��h���H�|$xH�t$xH��1��<���I��H����H�����A�Ņ���L���u���D������H������I������DH�|$xH�t$xH��1��D��I��H����H�PHc0I�}H�Ѓ���I��LE�L�D$����L��I���(���H�L�D$H�
��#���@L�L�����I�����蘯��H���@���I��H��t#L��H��蝞��L��赾��L�����I���M���L��蝾��H���#1�H�81�蚲��蕸��H�n�#H�5��H�81��}���H�V�#H�5O�H�81��e���H�>�#H��H�5\�H�81��J���H�#�#H�5f�H�81��2���H��#H�53�H�81�����f.���AWH��AVAUATUSH��HH�t$dH�%(H�D$81�H�D$ 蘽��H�|$H�D$�)���H��豮��L�8H�D$(A�� ��I��H��A��H�D$L�<$�2���L�<$1�H��M��~NL�t$0L�l$ L�d$DL��M��E1�1�H�D$0L��L�����H��H�����H�D$0I)�H�M���H�D$(H�D$0H�D$(H�$H��tL�D$ H9�uBI9�u=H�L$8dH3%(H��uIH��H[]A\A]A^A_�DH�PH�@H�T$H�$�;���H���#H�$H��H�5��H�81�賰��讶��ff.���SH��H��@H�t$dH�%(H�D$81�H�D$ H�D$(�(���H�|$H�D$蹬��H���A���H�H�D$�� utH��H��H�D$��H�T$(H�|$1�H��L�L$ A��E�H�D$H�D$0H�D$H��tH�T$ L�D$(H9�u1I9�u,H�L$8dH3%(�u2H��@[�f�H�PH�XH�T$�H���#H��H�5�H�81�覯��衵�����SH��H��@H�t$dH�%(H�D$81�H�D$ H�D$(�(���H�|$H�D$蹫��H���A���H�H�D$�� utH��H��H�D$��H�T$(H�|$E1�1�L�L$ H���H�H�T$H�T$0H�T$H��tH�T$ L�D$(H9�u4I9�u/H�L$8dH3%(u:H��@[�f.�H�PH�XH�T$�H���#H��H�5�H�81�覮��衴�����AUATUH��SH��H��dH�%(H�D$1��7���I�Ĩt`H��I��?H�W)QΠ�EH�H��H��H��
L)�Hi€QH)�Hc�H�H9����UH�D$dH3%(��H��[]A\A]�@H�5��#H�$�H����I��L��L���U���H�Ǩt>蹞��H�5J�#�EH�$�H��tBL��L���"����tH�H��p��������f�H��������fD�H�=��迨��H��H���#��H�=��蟨��H��H���#�H���H��踾���3�����Hc7H�������SH��H�|$H��t#H�|$H�����H��H��褧��H��tH��[�H�B�#H�5c�H�81��Ѭ��H�B�#1�H�81�辬��ff.���AUATUSH��H��(dH�%(H�D$1��*�H�5K�#H�߉�詝�����7H�
���I��Hc�H�>��f.�L��H�T$H�t$�n����T$H�t$1�1�茝��I��H���PL�-�#�/H�5����Ý��H��H����f�L���H������H��H�L$dH3%(��H��([]A\A]ÐI����I��/�I��H�57�M��U���I��E��H��H��u�H�_�#H�5ښH�81��n���fDL��1��Ϊ��L�-/�#I���6����H�5��#H���i���H�Ǩ���	�����Hc�L�d$H���;H�|$�k�������I��H���*H�t$H��� �YH��H����L�������I�D$Hc�L�-��#H���H	�I�\$���H�|$L�d$����蜍��I��H����H�t$H��� �H��H����L������L�-��#�G���I���d����I��H��tyL�-"�#�$���DH��耱��H���(���I��H��tPH��� ��H��H�s����L��H�T$H�t$�����T$H�t$1�1��|���I��H�������H���#1�H�81�轩��DL���0��L�-��#I�������������m���@H�~Hclj�H9�usH�v���f�H�~Hclj�H9�uSH�v���f�H�{Hclj�H9�u3H�s����H��#H�5v�H�81��!�������L��1�A�����芺��H�c�#H�5��H�81���H�˿#H�5"�H�81��ڨ��H���#H�5��H�81��¨��f���ATUH��SH��@dH�%(H�D$81��<������H��軷��1�H��I��莫��Hc�H���H�T$H��1�裠���T$H�D$0����H� ��H�@H�t$ L��H�D$(H�D$ �:���L���2���H�D$ H+D$(H9���H�L$H�T$I��H�t$H�|$(�S�������H+\$H�|$0H�����H��1�1�H���Z�H�L$8dH3%(u:H��@[]A\ÐH���f����H�5a�#H�����H�|$0H�D$0�����{���L��胍���|$���L���r���H�;�#H�5ΖH�81��J���H�
s���H�5ѕH�=������H��#H�5��H�81�������SH�5�#H���,���H��#H��H�2�
���H��u%H�5��#H������H�����uH��[����DH��[��H���#H�5��H�81�蟦��ff.�@��AW�	H�=,�AVAUL�-�#ATL�%�U1�SH��譡��H���%����H�=�H�*�#荡��H�������H�=�H���#�m���H������H�=ޕH��#�M���H���ŵ���H�=�H���#�-���H��襵���H�=��H���#�
���H��腵��H�=���9���H�=��H�c�#�&���H�=��H�H�#����H�=w�H�%�#����H�=o�H��#���H�=o�H���#�ڴ��H�5i�H�ܿ#H��#H�8�=���H���#H�/�#H�5C�H��H�H�芌��H��#H�;�H�5)�H�H�J����H�;�H�6���H�5
��ʬ��H�;�H���H�5��诬���J���H�;H�5�H��I���ջ��H�;�E��M�eI��A�$<[t&H�T-L��袻��L�����L��H��H���܃��H�;H��H��u�H���#H�5��H�詋��L�%"�#H�=�I�$袳��I�<$E1���H���ٯ��H�=���}���I�<$E1���H��贯��H�=ɓ�X���I�<$E1���H��華��H�=���3���I�<$E1��H�ƺ�j���I�<$H���H�5�賨��I�<$H��H�5�蜨��I�<$�H�,��H�5�萓��I�<$1�H�#���H�5K��w���I�$H�;H�5ē蔊��H�-�#H�=��H�E荲��H�}A��H�ƺ���H�}H�5R���H�}H�5U����H�}�����H�1�H�5J����H�}1�H����H�5���ܒ��I�$H�;H�53����H�ڷ#L�5�#H��H�2I��݌��H�=I����I�>A��H�ƺ����I�>�����H���H�5���k���I�>1�H��H�5'��S���I�>1�H����H�5���;���H�UH�;H�5���X���H�
�#H�;H�7��H�5��H������賩��H�UH�;H�5t�� ���H�
��#H�;H����H�5W�H�������{���H�UH�;H�5D����H�
i�#H�;H���H�5'�H�������C���H�UH�;H�5�谈��L�=9�#H�;�����H�j��H�5��I�����H�UH�;H�5��x���H�
�#H�;H����H�5̑H�������Ө��H�UH�;H�5���@���H�
��#H�;H�?��H�5��H������蛨��H�UH�;H�5������H�
��#H�;H����H�5s�H�������c���H�UH�;H�5f��Ї��H�
q�#H�;H���H�5I�H�������+���H�UH�;H�5>�蘇��H�
��#H�;H�w��H�5!�H��������H�UH�;H�5��`���H�
Q�#H�;H����H�5�H������軧��H�UH�;H�5��(���H�
��#H�;H�G��H�5ʐH������胧��H�UH�;H�5����H�
�#H�;H����H�5��H�������K���H�UH�;H�5��踆��H�
Y�#H�;H���H�5r�H����������H�UH�;H�5c�耆��H�
��#H�;H���H�5F�H�������ۦ��H�UH�;H�59��H���H�
��#H�;H����H�5�H������裦��H�UH�;H�5�����H�
!�#H�;H�O��H�5�H�������k���H�UH�;H�5��؅��H�
)�#H�;H����H�5ƏH�������3���H�UH�;H�5��蠅��L�-��#H�;�����H���H�5��I�E���H�UH�;H�5���g���H�
�#H�;H����H�5c�H�������¥��H�UH�;H�5P��/���H�
��#H�;H����H�53�H������芥��I�H�;H�5)����H�
Q�#H�;H�W��H�5�H�������S���I�H�;H�5$����L�5��#H�;�����H����H�5�I�����I�$H�;H�5Î艄��H�-J�#H�;�����H�#��H�5��H�E���I�}�H�S��H�5��藐��I�}1�H�z��H�5~����I�}1�H����H�5h����I�}1�H�X��H�5R��̌��I�}H�<�H�5?�襡��I�}H�(�H�53�莡��H�=a��ҫ��I�?E1��H�ƺ�
���H�}1�H�]��H�5���a���H�}1�H�$��H�5��H���蓐��H��H�y�#贌��H�u�H�=d�#�߇��H��#�H�=L�#H�0�ć��H�
�#�H�=1�#H�0詇��I�7�H�=�#蕇��H�v�#�	H�=�#H�0�z���H�;�#�H�=�#H�0�_���I�u�
H�=ϵ#�J���H�;�#�H�=��#H�0�/���H��#�H�=��#H�0����H�ݲ#�!H�=��#H�0���I�6�#H�=j�#���H��#�%H�=R�#H�0�ʆ��H�۳#�'H�=7�#H�0识��H��#�)H�=�#H�0蔆��H���#�+H�=�#H�0�y���H�B�#�-H�=�#H�0�^���H�w�#�/H�=˴#H�0�C���H�,�#�1H�=��#H�0�(���H���#�3H�=��#H�0�
���H��#�5H�=z�#H�0��H���#�7H�=_�#H�0�ׅ��H���#�9H�=D�#H�0輅��H�=�#�=H�=)�#H�0衅��H�=�#����H�=;��Ĕ��H��#H��[]A\A]A^A_�f.�@��SH��H��dH�%(H�D$1�H�?H�<$@��u	H�����u^H���v���H�<$H�7�� twH�GHcЉ�H9�uvH���H����H�$H�H�L$dH3%(��H��[�fD�����u�H�5��#H��t21�1�����H�$�z����H��H�����H������H�=O�跓��H�<$H��H�Q�#�H�ȯ#H�5��H�81��?����:���f.���U1ҾsSH��H��(dH�%(H�D$1�H�L$袪��H�D$H�T$H�xH�0�,���H��H������|$��uH�t$dH34%(H��uH��([]��
���赝��D��H�������7������UH�5�}#H��AWAVAUATSH��(dH�%(H�E�1��x��H����H��I���|����X��I��=���L�m�L�m�Lc�H��H�E�I�FH��H%�H)�H���H��H9�tH��H��$�H9�u��utL�|$I���L��L���@���9�uL��L���v��L��H���֦��H�DH�M�dH3%(uuH�e�[A\A]A^A_]�Lc�L�m�L��L���~���I���f�H)�H�L��H���#H�5��H�81��M���L���e���H�^�#H�5��H�81��-����(������ATH�5�|#USH���v��H��tmH��H���ɮ��H�b|#1�H�����I��谔��H��H��t.H���#H��H��H��s�����t
I�\$ L��[]A\�H��躮��H�ë#1�H�81�藕��H���#H�5ߋH�81�����ff.�@PX1�H��H���#H�81��W������S1�H��{#�=���H������H��t	H�C H��[����f�PXH�5m�H��H�4�#H�81�����f���UH�5d{#SH���u��H��tCH��識��H��H��tK��H���#s��H�ߺ7H�5+�H�����H��H��[]�H�ê#H�5�H�81�芔������D��H��H�5�z#�u��H��tH��菃��H��H�H�D��.���ff.���H��H�5�z#��t��H��t H���O����P��H�H����H�H�D����f���H��H�5az#�t��H��tH���x����H�H��H�Ѓ�����f���SH�5$z#�_t��H��t1H��H���_x����t1�[��H������¸��u�1����T���@��UH�5�y#SH���
t��H��tTH��H�c�#H��y#1�H�8�:���H��H������H��H��t>H�E H���{���1�H�߅�@��蛁��H��H��[]�H�"�#H�5I�H�81����H��#H�5\�H�81��ђ�����H��H�51y#�ls��H��tH���v����H�H��H�Ѓ���y���f���H��H�5�x#�,s��H��tH�������H�H��H�Ѓ���9���f���UH��SH��H��H��H�N�#H�0�N���H��u	H��1�[]�H��H�5�x#�r��H��H��t4H�5rx#H���r��H��tH��H�������u�H���[]����H���#H�5�H�81�轑��ff.�f�UH��AWAVAUI��ATSH��H��8dH�%(H�E�1�����I��H��?H�}�H�M�I�H��H��L1�H)��PH��H��H9�u�L���c}��H��H���BM����H�u�dH34%(H���;H�e�[A\A]A^A_]�f�1�H��覣��I��H=����H=���L�u�L�u�H�@H��H�E�H��H%�H)�H���H��H9�u|��t	H)�H�L�L�|$I���E1��H��L��A�L���s��L��D��L���E��|��L��H���z���H�ۋM�t]�������H����~���
����H��H��$��j���H�pL�u�H��L��H��H���x��I���c���H��#H�5o�H�81��ݏ���ؕ��H��#H�5\�H�81�谜����ATUSH�� dH�%(H�D$1��G����vH��H��
H�T$��u#H�~@�����P���H�T$��f���tKH�5�u#H���o��H�D$H���RH�|$H�����H�L$dH3%(H���)H�� []A\��u	H�����urH��#H��H�0����H�������H�5Mu#H���o��H�D$H����H�|$H�5+u#�fo��H����H�|$H���}��H���f����f������
u��&�������H�T$��������V���fDH�5�t#H���o��I��H�D$H���T����~5��
�|���H�|$�i���H�|$H���܄���������qf�����H�T$H��� tsH�jHc�H9���H�|$���L���H���D���H��������(f�H�|$���H�|$H��������`���H���#1�H�81��~���fDH����H���H�T$H��� u7H����H��Hc�H9�uTH�|$�S���L���H���Vy��H��������H�j�ͺ��s���H�$�#��H�5��H�81����H���q������H�
�#H�54�H�81��Ԍ��@��H����ATL�%ϣ#USI�4$H���ɐ��H��ut��t7I�<$1�H�s#荢��1�H��H������H��tVH�E H��[]A\����u#H�����t������
u��f��[H��]A\�H��[H��]A\�������UH��H�5�r#SH���l��H��tNH��H���7���H��t#H�5Zr#H���l��H��tAH��H����~����tH��1�[]�DH���[]�H�ա#H�5��H�81�蜋���w������UH��H��SH����t;�V|����H�5�q#H���l��H��t)��H�������H�H��H��[]���軉����������f���ATI��H�5�q#USH����k��H��t?L��A��H��u%耉����H��覞����tH��[]A\�f.��{�������b���H��#H�5�H�81�躊��f.���ATI��H�5q#USH���Fk��H��t?L��A��H��u%������H���v�����tH��[]A\�f.��;{���������H�s�#H�5��H�81��:���f.���ATI��H�5�p#USH����j��H��t?L��A��H��u%耈����H�������tH��[]A\�f.��z�������b�H��#H�5�H�81�躉��f.���UH��H��SH����t;�vz����H�5�o#H���5j��H��t.��H��H����i����tH��H��[]�D�ۇ���������H�s�#H�5�H�81��:���f.���UH��H��SH����t;�y����H�5}o#H���i��H��t.��H��H������tH��H��[]�D�[��������b�H��#H�5H�81�躈��f.���AUATUH��H��SH����to�ry����H�5�n#H���1i��I��H��tuH���A���H��n#1�H���`���I���(���H��H��t9��L��H���h����t I�m H��L��[]A\A]�D裆�����H���'���H�0�#1�H�81�����H�%�#H�5L~H�81����ff.����AUATUH��H��SH����to�x����H�5)n#H���ah��I��H��tuH���q���H�
n#1�H��萝��I���X���H��H��t9��L��H���s�����t I�m H��L��[]A\A]�D�Ӆ�����H���W���H�`�#1�H�81��4���H�U�#H�5|}H�81�����ff.����AVAUATUSH��@dH�%(H�D$81�H�D$H�D$ H�D$H�D$(H�D$H�D$0�G����)H�I��H�\$��u>H�D$H�D$������t5E1�E1�H�߃�uO�������M�H�FH�D$��u�H�FH�D$E1�H�|$A��H�|$@��ty�$w��A��H�߃�t��w����L��H��l#1��!���I�����H��H��taD��D���H���q�����tEI�^ L��H�L$8dH3%(uXH��@[]A\A]A^�f��K���A���fDE1��d���H�����H�ɛ#1�H�81�蝅��������艋��f���AVAUATUSH��@dH�%(H�D$81�H�D$H�D$ H�D$H�D$(H�D$H�D$0�G����)H�I��H�\$��u>H�D$H�D$������t5E1�E1�H�߃�uO�s������M�H�FH�D$��u�H�FH�D$E1�H�|$A��H�|$@��ty�u��A��H�߃�t��u����L��H�k#1�葚��I���Y���H��H��taD��D���H����x����tEI�^ L��H�L$8dH3%(uXH��@[]A\A]A^�f�軂��A���fDE1��d���H���0���H�9�#1�H�81��
������^~�����f���ATUS������I�Խ��t!H�>��uH�n1�H��t
@��tg�t����H�5j#L���Qd��H��ttH�}�#1�H�����H��E1�H��=�����t��u9[�]A\�f.�[1�]A\�f��ˁ����뗺1��}��H�T�#1�H�81��(���H�I�#H�5pyH�81�������SH�������uH�>@��tnH�T$��s��H�T$��DH��H�5>i#�yc��H��H��tsH���#1ɉ�H��|����t��u8H���[�f.�H��1�[��H�T$���H�T$���H���#1�H�81��Z����1��|��H�o�#H�5�xH�81��6���fD��ATUSH��������H�>@���xH�T$��r��H�T$��H�5`h#H���b��H��H������������
tc���QH��臅��H��H��tZH���'v��Hc�H9��GH��H�߉�[]A\�i���f�H�5�g#H���!b��H��H���H���]n��H��H��u�H�n�#1�H�81��B���f�����1�H����f��1�Hc�I���r��H��H�pH� uqH���f��A9�u�H��H��[]A\�H��� p��D�`��DI�1�A��Ic���q��H��H�pH� tH�pH���+���A9��]���H��H��[]A\�fDH�p�f.�H�T$���H�T$������1���z��H��#��H�5wH�81��T���H���̑��H�m�#H�5�vH�81��4���@��UH��SH��H����tk��uVH��H���H��tb�؃���tX��tS�����
t0��t+��u?H��1�1����H��H��H��H��[]馂��fDH����H����H�����u�H���#H��H�0赃��H�����u�H��#H�52vH�81��u��D��UH��H��e#1�SH��H�k�#H�8�K���H��H��t#H���+t��H��tH�C H��H��[]����}����H�2�#1�H�81����fD��UH��SH��H�?�+�H��t"H�5Ne#H��H���_��H��t#H�]H��[]�H��#H�5�vH�81��~����fD��AUATUSH��H��H�|$H�t$�c��H�5�d#H��I���_��H��twH��H���.���H��d#1�H���M���I���}��H��H��t8H��#L��H��H��H��b��H��tI�\$ H��L��[]A\A]�H������H��#1�H�81���}��H��#H�5:tH�81���}��f.���AWAVAUATUSH��XdH�%(H�D$H1�H��L�l$H�\$H�D$ H�D$H�D$(�G�L�l$0H�\$8���BH�H�չH�$H�D$ L�@�f�H��t
Lc�N��L�
��H��I9�tH�P9��H��t�H��H�I9�u�H�<$@�����{��A��E1�H�|$A��H�|$��L��E1���a��H�|$I��tH����a��I��H��H�>c#1��ǒ��H���{��H��H��tjE1�M��L��D��D��H���g����tGH�] H��H�\$HdH3%(uZH��X[]A\A]A^A_�fD�Km��A���Q���E1�E1��}���H���]���H�f�#1�H�81��:|�����v���&���fD��ATUSH��H��H�|$H�t$�a��1�H�ib#H��I�����H���z��H��t"L��H��H���S\����tH�] H��H��[]A\��J�H���”��H�ˑ#1�H�81��{��ff.�@��ATUSH��H��H�|$H�t$�r`��1�H��a#H��I���^���H���&z��H��t"L��H��H����m����tH�] H��H��[]A\���H���2���H�;�#1�H�81��{��ff.�@��USH��H��H�|$H�t$��_��H�5Ma#H��H���[��H��tH��H����g��H��H�[]H�D���ff.�@��USH��H��H�|$H�t$�_��H�5�`#H��H���"[��H��tH��H���rm��H��H�[]H�D��/�ff.�@��AUATUSH��H��H�|$H�t$� _��H�5�`#H��I���Z��H��tvH��H���Β��H�g`#1�H�����I���x��H��H��t7H���#L��H��H��H���f����tI�\$ H��L��[]A\A]�H��趒��H���#1�H�81��y��H���#H�5�oH�81��{y��ff.���AVAUATUSH��H��H�|$H�t$H�$�J^��H��I���?^��H�5�_#H��I����Y��H��t{H��H�����H��_#1�H������I����w��H��H��t<H�ݑ#L��L��H��H��L������tI�\$ H��L��[]A\A]A^�H���Б��H�َ#1�H�81��x��H�Ύ#H�5�nH�81��x��D��AUATUSH��H��H�|$H�t$�p]��H�5�^#H��I���Y��H��tvH��H������H��^#1�H���=���I���w��H��H��t7H��#L��H��H��H��U�����tI�\$ H��L��[]A\A]�H������H��#1�H�81���w��H��#H�5+nH�81���w��ff.���AUATUSH��H��H�|$H�t$�\��H�5	^#H��I���>X��H��tvH��H���N���H��]#1�H���m���I���5v��H��H��t7H�>�#L��H��H��H��r����tI�\$ H��L��[]A\A]�H���6���H�?�#1�H�81��w��H�4�#H�5[mH�81��v��ff.���AVAUATUSH��H��H�|$H�t$H�$��[��H��I���[��H�5(]#H��I���]W��H��t{H��H���m���H�]#1�H��茌��I���Tu��H��H��t<H�]�#L��L��H��H��L��qY����tI�\$ H��L��[]A\A]A^�H���P���H�Y�#1�H�81��-v��H�N�#H�5ulH�81��v��D��AVAUATUSH��H��H�|$H�t$H�$��Z��H��I����Z��H�5H\#H��I���}V��H��t{H��H��荎��H�&\#1�H��謋��I���tt��H��H��t<H�}�#L��L��H��H��L��e����tI�\$ H��L��[]A\A]A^�H���p���H�y�#1�H�81��Mu��H�n�#H�5�kH�81��5u��D��AVAUATUSH��H��H�|$H�t$H�$�
Z��H��I���Y��H�5h[#H��I���U��H��t{H��H��譍��H�F[#1�H���̊��I���s��H��H��t<H���#L��L��H��H��L��|����tI�\$ H��L��[]A\A]A^�H��萍��H���#1�H�81��mt��H���#H�5�jH�81��Ut��D��AUATUSH��H��H�|$H�t$�0Y��H�5�Z#H��I����T��H��txH��H���ތ��H�wZ#1�H�����I����r��H��H��t9H�Ό#1�L��H��H��L��R����tI�\$ H��L��[]A\A]�H���Č��H�͉#1�H�81��s��H�‰#H�5�iH�81��s��f���AWAVAUATUSH��H��H�|$H�t$�\X��H�5�Y#H��I���S��H����H��I������H��Y#1�H��H���"���H��H��Y#1�I������I����q��H��H��ti��q��H��H����H�΋#L��L��H��H��L��Q����t)I�^ L��L���I�o 1��$���H��[]A\A]A^A_�H��譋��H��襋��H���#1�H�81��r��H���#H�5�hH�81��jr��H����D��AUATUSH��H��H�|$H�t$�@W��H�5�X#H��I����R��H��tvH��H�����H��X#1�H���
���I����p��H��H��t7H�ފ#L��H��H��H���V����tI�\$ H��L��[]A\A]�H���֊��H�߇#1�H�81��q��H�ԇ#H�5�gH�81��q��ff.���AUATUSH��H��H�|$H�t$�pV��H�5�W#H��I���R��H��tlH��H������H��W#1�H���=���I���p��H��H��t-L��H��H���c����tI�\$ H��L��[]A\A]�H������H��#1�H�81���p��H��#H�55gH�81���p��D��AUATUSH��H��H�|$H�t$�U��H�5W#H��I���NQ��H��tlH��H���^���H��V#1�H���}���I���Eo��H��H��t-L��H��H����i����tI�\$ H��L��[]A\A]�H���P���H�Y�#1�H�81��-p��H�N�#H�5ufH�81��p��D��USH��H����H�t$u]H�����tTH��ƒ���tG��uBH;\$t1H�5@V#H���xP��H��H��t?H�|$�T��H��H���^��H��tH��H��[]�H���t��H���#1�H�81��o��H���#H�5�eH�81��io��f���S�p��H�7�#H�H����H�$�#H���#H�5
fH�;H��V��H�<�#H�;H�5.gH�H�`�#H��V��H��#H�5���H��H��7{��H�;�����H���H�5q_�_��H�;�H�����H�5�e�_��H�;�H�����H�5Sn��^��H�;1�H�J��H�5ze��^��H�;1�H����H�5le�^��H�;1�H���H�5]e�^��H�;1�H����H�5He�^��H�;�H�W���H�50e�k^��H�;�H�|���H�5e�P^��H�;�H�����H�5e�5^��H�;1�H����H�5e�^��H�;�H�>���H�5�\�^��H�;�H�S���H�5�\��]��H�;�H�X���H�5�d��]��H�;�H�]���H�5�d�]��H�;�H�b���H�5od�]��H�;�H�w���H�5\d�{]��H�;�H���H�5Id�`]��H�;�H���H�51d�E]��H�;�H���H�5d�*]��H�;�H�+�H�5d�]��H�;H��cH�5�c��q��H�;�H���H�5�c��\��H�;�H�/��H�5�c��\��H�;1�H����H�5̓�\��H�;�H�,�H�5�c�\��H�;H��cH�5�c�jq��H�;1�H���H�5lc�b\��H�;1�H�v��H�5Zc�J\��H�;1�H���H�5Gc�2\��H�;1�H���H�54c�\��H�;�����H���H�5*c�_��H�;�����H� �H�5c�d_��H�;�H���H�5c�I_��H�;�H�J�H�5�b�._��H�;�����H��H�5�b�_��H�;�����H�$�H�5�b�x[��H�;�����H�)�H�5�b�][��H�;�H���H�5�b�B[��H�;�H����H�5�b�'[��H�;�H�8��H�5�b�[��H�;�H����H�5vb��Z��H�;�H���H�5fb��Z��H�;�H���H�5Nb�Z��H�;�H���H�56b�Z��H�;�H��H�5#b�Z��H�;�����H���H�5b�jZ��H�;1�H���H�5�a�RZ��H�;H��aH�5�a�,o��H�;1�H�0��H�5�a�$Z��H�;�H���H�5�`�	Z��H�;[�H�	�H�5�a��Y��H��#H�5[`H�81��i��D���v�����ATUSH��H��H�|$H�t$�`��H�5P#H��I����I��H��uK�&j��H��H����H�C L���Np��H��tTE1�1�1�A�����H��H���QK����u$H��H��[]A\�H�#H�5"aH�81���h��H��~#1�H�81���h��H��~#H�T$H�5�bH�81��h��H��~#1�H�81��h��D��H�UO#1��~~��ff.���SH��H��H�|$H�t$�d��H�5O#H���H��H����H��H���R��H����L��� ucH���J����L�D$Hc�I��� t1I9@uSM�@1�1�1�A�����H���;J����uNH�D$H��[�H����H9�uI����fDH���Z���…�t��H���#H�5`H�81��g��H�Q}#1�H�81��g��H��}#H�5�_H�81��mg��ff.�f���USH��H��H�|$H�t$�c��H�5
N#H����G��H����H��H���K��H�L$H�1�� tQHc�H9Qu]H�IE1�1�1�A�����H���?I����uYH�5�#H�ߺ�vG��H�D$H��[]�f.�H��HcЃ�H9�uH��막�H��#H�5#_H�81��f��H�J|#1�H�81��~f��H��|#H�5�^H�81��ff��fD��ATUH��SH��H�|$H�t$�b��H�D$H��� umH��L�`��Hc�H9���H��H�5�L#�F��H��H��tyH���_P��H���J��� tJL��ھH���R����tH�D$H��[]A\�@L�`H�X�H�w{#H�5M^H�81��e��H�_{#H�5�_H�81��e��H��{#H�5�]H�81��ve��H����v��ff.���SH�H����c��H��H���|��1�[���UH�5L#SH��dH�%(H�D$1���E��H����H��H����Z��1�Hc���U��H��H�pH� uTH�T$H���/j������H�Hct$�� t:H�CH9�:H���If��H��H�L$dH3%(u>H��[]��H�p�f�H�����H�
�`��H�5(]H�=/]�HL���cj��H��z#H�5�\H�81��Kd��H�z#1�H�81��8d�����AWAVAUATUSH��8dH�%(H�D$(1��G�����H�H��H�D$����9H�5�~#H��H�D$ �U��H�������H�|$�`��H�D$H��� ��L�`H�XH����H�5fJ#H���>D��I��H����H���JY��Hc�H�H����H�|$ �H��1��ET��H�D$ L�xH� tL�xH�D$E1�H�D$�HcD$Hc�H��@I�I�H��~v�@K�47L��L��H��@�H�T$HN�M��HD�A���Sv����u�H��x#1�H�81���b��@H��L�`�������H�F����H�|$ H��� uCH����L9���L���d��H�D$ H�L$(dH3%(uVH��8[]A\A]A^A_��H�G�f.�H�|$ �^��H�|$ H���m��H�D$ �������p\���h��H��w#H�5�ZH�81���a��H�
^��H�5�ZH�=�Z�I��H��w#H�5"ZH�81��a��H��v#H��H�5\H�81��a��H��z#H�5}ZH�81��a��f���AWA��AVAUATUSH���dH�%(H��$�1�H�D$0H�|$ H�D$PH�D$8H�l$(H�D$XA�@�H�|$@H�l$H���PH�I�ֹH�D$ H�D$@L�H� DH��t
Lc�N��L���H��L9�tH�PD9�|�H��t�H��H�L9�u��"]��1�H�|$(��H�|$0A�H���7H�|$8H������N��H�D$H�5OG#L���'A��I��H����H�L$ L�A�� ��H�yHc�A��H9���H�IH�l$`L��D�D$H�L$�J��UE��H��H��L�d$xATD�D$,H�L$ H�t$��p��X1�ZA�����1�I��L��L���9B�����?�@L���Sk���H���Fk��H�5�z#�L���R@���H��$�dH3%(�H���[]A\A]A^A_�@I��H��A���0����@��tr�=P��A��E�������H�bx#H�5ZH�81��)l��f�H���[��H�\$(H��� u;H����H����H���M�����N��H�D$�k�����k]��A���fDH�{uPH�[������D���Y��H��t#H�5WH�81��^���!p��H�Zt#1�H�81��^���d��H�Bt#H�5YH�81��q^�����S�d��H�5�����H��H���C��H��[�f.���ATUSH�����H�����tvH��ƒ���ti��udH��H9�t;H�5�D#H���>��I��H��t2H�5�D#H���>��H��tLH��L����]����u)H��[]A\�fD�^��I��H��t9H�C �H���b��H�^s#1�H�81��]��H��s#H�5�UH�81��z]��H��s#1�H�81��g]���PX1�H��H�s#H�81��G]�����SH�5D#H����=��H��t!E1�1�1�1�A�����H���`?����uH��[�H�'s#H�5TUH�81���\�����f�PXH�53UH��H��r#H�81���\��f���H��H�5�C#�\=��H��tH���oR��H��H�H�D����ff.���H��H�5AC#�=��H��t#H���F��H���A���% HE�H����_���ff.�@��SH�5�B#��<��H��tJH��H���oF��H���@��� uH����>��[��Hc�H�D�@H����N���…�t�Hc�[H�D����ff.���H��H�5�B#�\<��H��tH���@��H��H�H�D����ff.���H��H�5AB#�<��H��t#H���E��H���gn�����m��H��H����Y���_���ff.�@AWAVAUATUSH��dH�%(H�D$x1����PH��A�̅��HH�H�D$���uH�FH��H�D$�s��H���
W��H�=�UH��H��H��1��Fc��H�|$�W��H�5uA#H���M;��I��H����H�|$�Ufo�V)D$ H�L$L�A�� �I��H��E��A��H�L$H�l$ �eI��L��H�$�D��jA�E��H��H��L�|$8AWH�L$H�t$��j��X1�ZE��1�I��L��L���K<������H�5�t#�H���~:��H��H�\$xdH3%(�5H�Ĉ[]A\A]A^A_�DH�5y@#H��H�D$H�D$�?:��H����E1�1�1�1�E��H����;����t�H�&o#1�H�81��ZY��f.�H�yHc�A��H9���H�I���@H�|$�U��H�D$H��� tH�x~"H�@�o)L$ �����tH����f�f�)D$ H��� tH�PH�pH�|$ ���F���K���H��H�p���ߺ1��
S��H��n#H�5�PH�81��X���^���j�����1��E���D����2���f���AWAVAUATUH��SH��(H�t$H�|$dH�%(H�D$1��T��H�D$H��� ��H��L�`��H�5�>#H���8��I��H����H���MB��H���<��� ��L�|$A�@�DHc�H��@I�H��~FH��@L��L��L��HN�L��1�A���k����u�H�Jm#H�5SH�81��yW��f�H�T$dH3%(H�D$uPH��([]A\A]A^A_�@L�`H�X�+���H��l#H�5�RH�81��#W��H�Dm#H�5qOH�81��W���]��fD��ATI��H��USH���t:��G����H�5�=#L���7��H��t-��H����g����uH��[]A\���+U�������B���H��l#H�5�NH�81��V��f.���ATI��H��USH���t:�EG����H�5,=#L���7��H��t-��H����V����uH��[]A\���T����������H�Cl#H�5pNH�81��
V��f.���ATI��UH��H����Stb��F����H��H�5�<#�6��H��H��t}H���$@��H���l:��� tN1ɉھ	H���TB����t!Hc�H���ED��L��[]A\�D�T�����H�8k#H�5�NH�81��gU��H� k#H�5uNH�81��OU��H�pk#H�5�MH�81��7U�����AUI��H��ATUH��SH����tt��E����H�5�;#L���5��I��H����H���J?��H���9��� t\1ɉھL���zA����t/Hc�H�5�o#L��H�T�O5��H��H��[]A\A]Ð�S�����H�Pj#H�59PH�81��T��H�8j#H�5�OH�81��gT��H��j#H�5�LH�81��OT��ff.�@��ATUS����H����H�5'o#H���GE��H����A�H��H�5�:#�4��H��H����H���D>��H���8��� ��Ic�1��D��H��H�HH� uGD��H���W@����t\H��[]A\�H�H���e���H�Ǩt$�_D��A���p����H�H�f.���Q��A���L����1��M��H�i#H�5OH�81��/S��H��h#H�5aMH�81��S��H�8i#H�5eKH�81��R��ff.�@��H��H��g#H�|$H�0��V��H��t'H�|$H�5�9#�n3��H��t_H���=��H���@H�|$��I��H�|$H� u0H���Y��H��u�H��k#H�T$H�5wNH�81��eR��DH���H�{h#H�5�JH�81��BR��f���UH��1�H��8#SH��H��f#H�8�h��H���S��H��t+H�C E1�1�1�A�����H��H���B4����uH��H��[]�H�h#1�H�81���Q��H��g#1�H�81��Q��ff.�f���H��j#SH�5�KH�H�{g#H�8�9��H��h#H�Ef#H�5�JH��H�H���8��H�!g#H�;H�5��H��]��H�;�H��H�5 H�A��H�;1�H���H�5~J�Y��H�;�H���H�5�A�QA��H�;1�H���H�5SJ�9A��H�;�����H�j���H�5�h�A��H�;�����H�?���H�5�h�A��H�;�����H�$�H�5J��@��H�;�����H�Y�H�5�T��@��H�;1�H�1�H�5�I�@��H�;1�H���H�5�b�@��H�;�H���H�5R�@��H�;�H����H�5�I�g@��H�;�H���H�5�I�L@��H�;�����H�����H�5{I�1@��H�;�H�����H�5iI�@��H�;1�H�:�H�5_I�?��H�;�H����H�5SI��?��H�;1�H���H�5DI��?��H�;�H���H�51I�?��H�;�H�Q���H�5I�?��H�;1�H�	�H�5
I�}?��H�;1�H�a�H�5�H�e?��H�;�H����H�5�H�J?���H�=�H�9J���H�=�HH��i#�!J��[H��i#����USH��H��(H�-e#dH�%(H�D$1�H�D$����H�u�R��H���H�5�i#H����1�1�H����O��H�|$H�D$�7��1�H���K��H��H����H��H�T$H���Z��H��u9�a��H���3��H�T$H��~rH��b#H�5�JH�81��M��f.���`��H��H�L$dH3%(��H��([]�D�H�=�E�I��H��H��h#�7����H�)b#H�5AJH�81��M��H���``��H�	b#1�H�81��mM��H��H�m�1f��H�5�IH��H��a#H��H�81��CM���>S��ff.���UH�5�ISH��H�c#H��d#H�;H��4��H��a#H�;H�5"nH�H�Cf#H��c4��H�-4c#H�E�7��H��H���hK��H�}H�5�IH���c��H��H�ߺW[H�5�I]��?��f.������Y�����H��3#1��nb��ff.���ATUSH������H�������H��ƒ��������}H��H9�t:H�5F3#H���,��I��H��t.H�5/3#H���,��H��teH��L����D����tCH��[]A\��sH��I��H�C H��u�H��b#H�5�HH�81��K���H���P��H�ab#1�H�81��K��H��a#H�5?IH�81��uK��D��UH�5�2#H��SH���,��H��t'H��H����.��1�H��H����*����u"H��H��[]�H�La#H�5�HH�81��K��H��a#H�5HH�81��J��ff.���SH��H��H�|$H�t$�5G��H�5�1#H���v+��H��tVH�t$H��� t$H�VH�vH���<����tH��H��[��H��H������H�Da#H�5�GH�81��kJ��H��`#H�5HH�81��SJ��PXH�5HH��H�d`#H�81��2J��f���H��H�5Q1#��*��H��t#H���-��H���7)�����p\��H��H���H�����ff.�@��H��H�51#�|*��H��tH���_-��H����=��H��H�H�D��V���fD��H��H�5�0#�<*��H��tH���-��H����8��H��H�H�D�����fD��ATI��H�5�0#U��H��SH��dH�%(H�D$1���)��H��������H�øttH��H�$�,��H���P8��H�<$��ugHc�1���9��H�$H�pH� u41�H���=�����H�L$dH3%(H�$ufH��[]A\�DH�p��f�I�$�f.�H����D��H�<$Hc���S��H�$덺1�����B��H��^#H�5FH�81��PH���KN��H�_#H�5}EH�81��3H����SH��H�|$@��u	H�����u#H�5</#�(��H����H���+��H��[Ë����u�H�|$�,?��H��H���4��H��u�1�H���H��H��H���0����� Z��H���4��H��H�$�S��H�$H��u�H��]#H�T$H�5`EH�81��vG��H��]#H�5(EH�81��^G��ff.���U��SH�ӍW�H��dH�%(H�L$1Ƀ���H�>��tm�H�$�_5��H�<$H��tH���]C��H�5&.#H���'��H��tY1�H��H���|&����t}H�4$H��u.H�L$dH3%(H��uxH��[]�@H�F�f.�H���I��H�����+C��H�C H��u�H�C]#H�5vCH�81��jF�����@��H�]#H�5�CH�81��CF���>L��ff.���UH��1�H�O-#SH��H��[#H�8�\��H���B��H��tH�C 1�H��H���%����t"H��H��[]�H��\#H�5�BH�81���E��H��\#H�5CH�81��E��ff.�@��SH�=�E�G��H�=�B�Z��H�50CH��H�Z[#H�8��,��H��\#H��Z#H�5�BH��H�H���,��H�\#H�;H�5����H��~Q��H�;�����H����H�5�5�c5��H�;�H�����H�5�;�H5��H�;1�H�|���H�5J>�05��H�;H�n\#�H�5�H�5��H�;H��HH�5�<��I��H�;�����H�@���H�5#B�S��H�;1�H���H�5B��4��H�;1�H�����H�5B�4��H�;1�[H�'���H�5�V�4��f.������fD����G�����AUH�5�+#ATUSH���$��H���+H���I��H��I���j[��H��H���������L�-x6�A�����H�=7f�/��H��H��H�� �[��H��L���[��������%I��H�{H���B��H��H����Z��H�{�B��H��H����Z���C��tBv ��u��H�=gA�*/������u3�H�=?A�
/���g���D�L����.���P���fD�H�=rI��.���4���f�H��L��[]A\A]�H��X#H�5�@H�81��B��f.���ATUSH�� dH�%(H�D$1�����H�Ӆ�utH�D$1�E1�H�D$H�5�)#H���#��H����1�L��H��H����J��H����H���$��H�L$dH3%(��H�� []A\��H�H�T$��tCH�D$1�E1�H��t�H�|$�59��H��H�D$H��t7H�|$�9��I���X���DH�F1�H�D$H��u�H��u�f�E1��+����1���;��H�}X#1�H�81��yA���tG��H��W#H�5k?H�81��\A��ff.����ATUSH�� dH�%(H�D$1����H�Ӆ���H�D$1�E1�H�D$H�5�(#H���!��H����1�L��H��H���3��H����H���"���H�5�>H��H���"��H��H�L$dH3%(��H�� []A\�f�H�H�T$��tCH�D$1�E1�H���b���H�|$�7��H��H�D$H��t3H�|$�7��I���8����H�F1�H�D$H��u�H��u�f�E1������1��l:��H��V#1�H�81��?����E��H�V#H�5�=H�81���?��ff.����AVAUI��ATUS�\E��I���+��H��tFH��L�55'#DL��1�L���U��H��H���H<��H�] H��L����V��H���1R��H��H��u�[L��]A\A]A^�ff.�f���H��dH�%(H�D$1�����t-H�$��<���H�L$dH3%(��H���f�H�H�$H��t�H���;6��H�$H�zH� tH�z�H�5=�����u1���SR����t;���1�H��H�=>��>����j����1���8���tD��H�eU#H�5�<H�81��\>��ff.����USH��H��H�l$H�t$H���5��H��H�ڿ����H��H��%#1��T��H�|$H��H� uWH���VL��H��H��tXH�E ��5����uAH���G����t?L�vS#H��1�1Ҿ�}6���hA��H��H��[]�fDH��f�H���V���H��T#1�H�81��=��PXH�5|;H��H��S#H�81��b=��f���ATH�5�$#UH��S���H��t<H��H����(��H��I���~��H��H����U��L��H��[H��]H�=f;1�A\�xM�������H��H�5�$#���H��tH���(��H��H���s;���N���ff.���H��H�5A$#�\��H��tH������H��H���3;������ff.���UH��H��SH����t;�F-����H�5�##H�����H��t)��H���?��H���[]�f.��:���������f�PX1�H��H�	S#H�81��<�����USH��H��H�|$H�t$�43��H���(��H��t<H�����H�5X##H�߉��n��H��t@��H���_A��H��t,H���M��H��[]�H��R#H�T$H�5�9H�81��~;���Y���H��Q#H�5p9H�81��a;�����USH��H��H�|$H�t$�2��H���lB��H��t<H���?N��H�5�"#H�߉�����H��t@��H���<��H��t,H������H��[]�H��Q#H�T$H�5m9H�81���:�����H��P#H�5�8H�81��:�����H��H�5A"#�\��H��tH����=����t"�H���H��P#H�5�8H�81��y:���T���@��AUI��H�5�!#ATI��US��H��H��(dH�%(H�D$1�����H����H�ōC���wyI�EH�D$��tIH�D$1�H�|$�T1��1�H��H��H���tJ����tkH�L$dH3%(L��ukH��([]A\A]�f�I�EH�D$H��tH�|$�1��H���1�렺����3��H��O#H�5�7H�81��9��H�vP#1�H�81��r9���m?��ff.�f���H��R#SH�5�8H�H�+O#H�8� ��H��P#H��O#H�5�7H��H�H�� ��H�	P#H�;H����H�;�����H�����H�5�7�,��H�;1�H���H�5�7�,��H�;1�H�����H�5t7�,��H�;�H�\���H�5a7�p,��H�;1�H����H�5�;��(��H�;1�H�|���H�5�J�(��H�;1�H�����H�5�5�(��H�;�H���H�57�(��H�;�H�.���H�508�r(��H�;�����H����H�5�6�W(��H�;�����H�H���H�5�6�<(��H�;�H�]���H�5�6�!(��H�;�����H�R���H�5�6�(��H�;1�H���H�5�6��'��H�;1�H�2���H�5�6��'��H�;�H�5�6�N��H�;�H�5z6�N��H�;�	H�5q6�N��H�;�H�5g6�vN��H�;��H�5_6�bN��H�;�H�5Z6�NN��H�;���H�5U6�:N��H�;[�H�5K6�%N��D���'9�����AVAUATI��USH��pH�$H�|$H�T$dH�%(H�D$h1��2��H����2��H�$L�A�� ��H�D$I��H�iA��H�M��� ��H�xHc�A��H9���H�XL��L�d$ �$��H��H��M��H�T$$M��H��H��RD����<��ZYH�����D$1��4��&���T$H��H�pH� tH�pL���`E��H��H�L$hdH3%(uWH��p[]A\A]A^�H�D$L�iH�iH��� �I���H��H�XA��A���L����G��H�K#H�5�5H�81��v5���q;�����AVAUI��ATUSH�� H�$H�|$H�T$dH�%(H�D$1��1��H���1��H�$L�A�� ��H�D$I��H�iA��H�M��� ��H�xHc�A��H9���H�XL���/#��H��E1�H��H�T$M��H��H��RD���n;��ZY�t$H���%��H�\$dH3%(uBH�� []A\A]A^�H�D$L�aH�iH��� �y���H��H�XA��A���|�����E���Y:��f�AUI��ATI��UH��SH���8��H��t2L��H��H���!����t8H��L��H����D��H��H��[]A\A]�Q6��H�zI#H�5�3H�81���3��H���16��H�ZI#H�5�3H�81���3��f�PXH�5t3H��H��I#H�81��3��f���UH�5�#SH��hdH�%(H�D$X1��*��H��tcH�l$H�T$H��H�������D$1��4�B$���T$H��H�pH� u&H���B��H��H�L$XdH3%(uH��h[]�@H�p���M����9�����UH�5�#SH��dH�%(H�D$1����H��tc�@1�H�����H��H�pH� u>H�T$H���Y����t$��@wKH���(4��H��H�L$dH3%(u+H��[]�fDH�p�H��H#H�5!2H�81��Z2���U8��H�
n2��H�52H�=2���fD��SH��H��H�|$H�t$�u.��H�5�#H�����H��t6H�t$H��� tH�VH�vH������H��H��[�H��H����������fD��SH�5�#H���\��H��tE1�1�1�1�H����;��H��[�����ff.����ATUSH����ueH�����t\H��ƒ���tO��uJH��H9�t:H�56#H������I��H��t3H�5#H������H��tH��L�������t(H��[]A\�H���s5��H�$G#H�5�0H�81���0��H�dF#H�5�0H�81���0����ATI��USH��H��H�|$H�t$�-��H�5�#H���P��H��t]L��H������H�t$H��� t3H�~Hcω�H9�u2H�vH��E1�H���:��H��H��[]A\��H��H�������A���y���f���S1�H�#�F��H�����H��t	H�C H��[�H��E#1�H�81���/��@��SH�\G#H�5�/H��E#H�H�;�K��H�DE#H�;H�5�/H�H�I#H��(��H�AG#H�5j���H��H���;��H�;�H����H�5�/�D#��H�;�H�����H�5d/�)#��H�;�H�z���H�5����H�;�H�����H�5&�s��H�;1�H�W���H�5u(�[��H�;�H����H�5%3�@��H�;H�3H�5�&�4��H�;1�H����H�5�.���H�;1�H����H�5�.���H�;H��.H�5�-��3��H�;[H��.H�5s&�3��f.���AWAVAUATUH��S��H��XdH�%(H�D$H1�H�=�I#�+H�D$���Q���H�EH�\$ 1ɺI��H�5�I#H�D$�J��H�|$�P*��H�D$H�8�� �,H�xHc�A��H9��_H���!*��H��H��� �bH����Hc�A��H9��/H�{��)��H�8I��� �AH����Hclj|$H9��H�D$0��=H�H�D$H����H�|$8���H�t$1�H�$�"��1��I���c@��H��H���}H���O9������L�$E1��H�ߺ������C�����|L�MH�E tL�ME����H�߾�����eC�����eL�L$I� �kI��E���H�߾�����-C������M�L$I�$ tM�L$D�D$��H�߾�����B�����QI�uI�E tI�uH�T$H���~#�����H�t$L���-��H���+��L��H�L$HdH3%(��H��X[]A\A]A^A_�Hc�H�|�H��u*����������f�H��������@��*��H�D$H����H�|$�2��H�|$H������H����H�D$���;����@H�E����H�x����M�I����H���0������H�=�+�O&���H�=�+H�|F#�7&���H�=%$H�lF#�&���H�=0BH�\F#�&��H�XF#�p���H���HD�H�|$������$��f�H�D$��u��J���H����;��H���*��H�=F#H�5�*1��H*��H���*��H�=�E#H�5�*1��+*��H����)��H�=�E#H�5v*1��*��H����)��H�=�E#H�5�*1���)����/��H���)��H�=�E#H�5�*1���)��H���)��H�=pE#H�5c*1��)��H��B#H�5�)H�81��6��H�=CE#H�5�)1��)��D��AWAVAUATUH��S��H��HdH�%(H�D$81�H�=�D#��H�D$���!���H�EH�\$1ɺI��H�5dD#H�$�[��H���c%��H���[%��H�|$I��I��I�@���#H�l$ @���H�L�d$(A����I�H�\$0����H�H��1����I��H�@I� tI�FI��� ��L�$I�OI�WI�0�� ��H��I�x��SI��M��Pj�AT��+��H�� ����H�T$8dH3%(L����H��H[]A\A]A^A_�Hc�H�|�H��uJ���������Wf�L�$H��I�W��I�0�� �i���I�pI�x�g���D�'��H�D$H���
H�|$�R��H�|$H������H����H�D$���K�����@�H�=	(�"���H�=�H��B#�"���H�=�_H��B#�"���H�=�:H�|B#�g"���H�=U H�lB#�O"��H�hB#���H���x,��H���2���L���%��I������H���$��H�������$��I������H���HD�H�|$������ ���H�D$��u��J���H�=&B#H�5^'�j&���e,��D��AVAUATUH��S��H��@dH�%(H�D$81�H�=cA#��H�D$����S�H�\$H�E1ɺI��H�5&A#H�$�=	��H���E"��H���="��H�|$H��@�����F$��H�|$ A��@���������H�|$(����Hc�1�I�����I��H�@I� tI�FH��� �H��H�S��H�<$H�7�� ��H��H����PM��E��U���ZY����H�T$8dH3%(L����H��@[]A\A]A^�f�Hc�H�|�H��u:��������/�����H�|$ A��@���%����T#����� ���D�$��H�D$H����H�|$�Z��H�|$H������H����H�D$���q����@L�GMc�D��M9���H�����@H�{Hc׉�H9���H�S����D�H�=�$�w���
H�=%H�D?#�_���H�=MH�4?#�G���H�=X;H�$?#�/��H� ?#���H���HD�H�|$��������H�D$��u����L���5��H�=>?#H�5�$�#���})��ff.�f���H��H�I9#H�5u$H�8�b)��H��:#H�5c$H��H��>#H��
��H�=�>#�����H�����H�5@$H��>#�+��H�=�>#�����H�y���H�5�#��*��H�=�>#H�������H�f�H�5$��*��f.���� �����SH��H��H�|$H�t$���H�5�
#H���6��H��tfH�t$H��� t4H�~Hcω�H9�u3H�vH�H�x�����t$H�D$H��[��H��H�������3��H�W;#1�H�81��"��H�<8#H�5F#H�81��"����UH�5D
#SH��dH�%(H�D$1����H����1�H��H���$(��Hc�H����1����H��H�@H� uQH��H��H�$��'����~[H�H�4$�� tBH�CH�SH)�H9�jH���"��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��6#1�H�81�� !��H�A7#H�5K"H�81��!��H�
#�{H�5G"H�=O"������&��@��SH�5$	#���H����H�H�@Hc0��~H�x[���fDH��6#H�8t1�1�[����H�9#��H�=(H��3��H���H�=�!�3��H�;A��1�H�
�!H������H�S6#H�5]!H�81�� ��f.���UH��H�5Q#SH�����H��t`H��H���w0��H��H���$��H��H�������t��uH���[]�@�c#��H��1�[]�H��8#H�5"!H�81����H��5#H�5� H�81��z��f.�PX1�H��H��8#H�81��W�����ATUH��SH��H����*��H��I���
��H�5x#H��H������H��tH��L��H�������t H��[]A\�H�5#H�5) H�81������q������ATUH��H�5#S�y���H��t-H��H���I/��I��H���#��L��H���#7����t H��[]A\�H��4#H�5�H�81����H��7#H�5 H�81��g�����H��H�5�#���H��tH������H��t$H��H�����H�O4#H�5YH�81����������UH�5T#SH�����H��t5H�����H���E��H��H��tMH��H����,��H�߅�t#H��[]�(��H��3#H�5�H�81�����0��H��6#1�H�81��������ff.���SH�5�#����H��t+H���#��H��H��t;H������Hc�H9�u#H�߉�[�5��H�`3#H�5jH�81��'��H���.�����f.���S1�H�R#�2��H���5,��H��t	H�C H��[��r���f���USH��(dH�%(H�D$1�����H��uGH�H�|$H�D$���H�D$H�0�� uFH��H�x���&��H��H��tMH�{ �e��H�k H�L$dH3%(H����H��([]�H�xHc׉�H9�u}H�x��
��H��H��u�����H�D$H��� u?H��H��H�D$��H�t$1��4��H��H���y���H� 5#1�H�81�����@H�PH�T$H�P�º1��%���@-���!��ff.���H��1#SH�5QH�8�!��H�3#H�?0#H�5=H��H�H�����H��4#H�;H�5iH�H��4#H�����H��1#H�51���H��H��'��H�;�����H�G���H�5��k��H�;1�H����H�5'�S��H�;1�H�w���H�5��;��H�;H��H�5�� ��H�;1�H�����H�5��
��H�;1�H�Q���H�5��
��H�;�H�����H�5e��
��H�;�H�+���H�5",�
��H�;�H�P���H�5�#�
��H�;1�H�h���H�5#�
��H�;[�H�|���H�5�p
����UH�5�#SH��dH�%(H�D$1����H����1�H��H���T��Hc�H����1��
��H��H�@H� uQH��H��H�$�"����~[H�H�4$�� tBH�CH�SH)�H9�jH�����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�1#1�H�81��@��H�a/#H�5SH�81��(��H�
�!��H�5RH�=o�������@���W������SH�5�#H��dH�%(H�D$1��{���H��tTI��H��1�1�1�����`��H�����H��H��thH�4$H���d��H�߅�t8��"��H�T$dH3%(uH��[�H��.#H�5�H�81��Z���U���0+��H�	0#H�5�H�81��8��H��/#H�5sH�81�� ����SH�5�#H��dH�%(H�D$1����H��tlH��I��1�1�1��%���H�$1��0�Hc�����H��H�$H�sHcH� u,H�x�3'��H��H�L$dH3%(u.H��[�f.�H�s��H��-#H�5�H�81��r���m��ff.�f���SH�5#H��dH�%(H�D$1����H��tl1�I��H��1�1��e���H�$1��0�Hc����H��H�$H�sHcH� u,H�x�s&��H��H�L$dH3%(u.H��[�f.�H�s��H��,#H�5�H�81�������ff.�f���ATUSH����ujH�����taH��ƒ���tT��uOI��H��H�5�"����H��H��t=H�5�"L�����H��t)H�����H��t4H�C H�����H��[]A\�H�����H�?,#H�51H�81����H��-#H�5YH�81�����ff.���UH�5�"SH��dH�%(H�D$1��j���H����1�H��H���t���Hc�H����1����H��H�@H� uQH��H��H�$�B�����~[H�H�4$�� tBH�CH�SH)�H9�jH������H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��,#1�H�81����H�!+#H�5
H�81�����H�
!��H�5H�=/�������@����*�����USH��H��H��(H�t$dH�%(H�D$1��F ��H�|$H�D$����H�5��"H������H����H��H�D$H��� tGH�PH�T$H�P1�H�t$���H��t;H�C H���5*��H��H�L$dH3%(u4H��([]�H��H��H�D$���H��+#H�5YH�81���������H��)#H�5�H�81�������ATUSH����uqH�����thH��ƒ���t[��uVI��H��H�5��"�3�H��H��tDH�5��"L����H��t0H�=�,#H���h��H��t4H�C H���W)��H��[]A\�H�����H�X)#H�5AH�81����H��*#H�5�H�81�������UH�5d�"SH��dH�%(H�D$1���H����1�H��H������Hc�H����1����H��H�@H� uQH��H��H�$�����~[H�H�4$�� tBH�CH�SH)�H9�jH�����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��)#1�H�81�� ��H�A(#H�5�H�81����H�
!�}H�52H�=O��������@��������ATUSH����uqH�����thH��ƒ���t[��uVI��H��H�5�"�C�H��H��tDH�5�"L���,�H��t0H�=x&#H���x
��H��t4H�C H�����H��[]A\�H�����H�h'#H�5�H�81��/��H��(#H�5�H�81�������SH��dH�%(H�D$1�����H��tYH�$H�5J�"H����H���������1�H���j������H�L$dH3%(H����H��[�DH�H�$H��t�H������H�5�"H����H��tHH�4$H��� t#H�~Hcω�H9�u^H�vH��������H��H������1��
��H�@&#H�5�H�81����H��'#1�H�81����������j!��f.����W�����ATUSH����uqH�����thH��ƒ���t[��uVI��H��H�5�"�C�H��H��tDH�5��"L���,�H��t0H�=('#H���x��H��t4H�C H������H��[]A\�H�����H�h%#H�5�H�81��/��H��&#H�5�H�81�������USH��(dH�%(H�D$1�����H��u|H�H�D$H��tnH�5C�"H���{�H��H����H�|$�u��H�|$H�D$���H�D$H��� uIH��H��H�D$��1�H�t$�-��H��t`H�C H���,
��H�L$dH3%(H��u$H��([]�f�H�PH�T$H�P븺1�����0��H�Q$#H�5�H�81����H��%#H�5�H�81������UH�5�"SH��dH�%(H�D$1���H����1�H��H���4���Hc�H����1����H��H�@H� uQH��H��H�$������~[H�H�4$�� tBH�CH�SH)�H9�jH�����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��$#1�H�81�� 
��H�A##H�5�H�81��
��H�
��H�52H�=O�������@��������ATUSH����uqH�����thH��ƒ���t[��uVI��H��H�5h�"�C�H��H��tDH�5T�"L���,�H��t0H�=�!#H���x��H��t4H�C H���7��H��[]A\�H�����H�h"#H�5�H�81��/��H��##H�5�H�81�������USH��(dH�%(H�D$1�����H��u|H�H�D$H��tnH�5��"H���{�H��H����H�|$�u��H�|$H�D$���H�D$H��� uIH��H��H�D$��1�H�t$���H��t`H�C H���L��H�L$dH3%(H��u$H��([]�f�H�PH�T$H�P븺1�����0��H�Q!#H�5�
H�81����H��"#H�5�
H�81������UH�5$�"SH��dH�%(H�D$1���H����1�H��H���4�Hc�H����1����H��H�@H� uQH��H��H�$���~[H�H�4$�� tBH�CH�SH)�H9�jH�����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��!#1�H�81�� 
��H�A #H�5�H�81��
��H�
���H�52H�=O�������@��AWH�5�"AVAUATUSH���r�H����H��I���n���A��~�B��L�=�#1�H�D$@��L�����I�?1�H�*�"H���r��H��I�����H���/���H��t=I�F H�|$L����� ��A9�u�H�D$H��[]A\A]A^A_�DH�D$��H�� #1�H�81��
	��H�+#H�5�H�81�����f���ATI��H�5�"USH����H��t?H�5z�"L��H���o�H��txH�����I��H��tPH��H��� ��H��t H��[]A\�H��#H�54H�81��z��L�����H�+ #H�5UH�81��Z��H� #H�5�
H�81��B��H�c#H�5U
H�81��*��f.���SH��dH�%(H�D$1�����H��tYH�$H�5�"H����H���������1�H���	������H�L$dH3%(H����H��[�DH�H�$H��t�H������H�5��"H���,�H��tHH�4$H��� t#H�~Hcω�H9�u^H�vH�������H��H������1����H�P#H�5�	H�81����H��#1�H�81��������z��f.���USH��(dH�%(H�D$1�����H��u|H�H�D$H��tnH�5��"H���[�H��H����H�|$�U��H�|$H�D$����H�D$H��� uIH��H��H�D$��1�H�t$�-��H��t`H�C H������H�L$dH3%(H��u$H��([]�f�H�PH�T$H�P븺1��u�����H�1#H�5�H�81����H��#H�5�H�81�����PXH�5�H��H��#H�81�����f���H��H�5a�"dH�%(H�D$1��L�H��t/1�1�1�I��H�����H�<$�}�H�T$dH3%(u
H�������^��ff.���UH��H�5��"SH�����H��t2H�5��"H��H�����H��t3H��H���P����H�H����[]�H�!#H�5H�81�����������UH��H�5��"SH���w�H��t2H�5k�"H��H���`�H��t3H��H��������H�H����[]�H��#H�5�H�81��x�����H��#S1�H��H��"H�8�T��H��tH�X [��d���@��AWH�5��"AVAUATUSH��xdH�%(H�D$h1����H�D$H�����	��H�|$H�D$8�����D$����H�D$`1�H�D$H�D$XH�D$ H�D$PH�D$(H�D$LH�D$0����9l$�oH�|$���G���H��H��t�L�D$H�L$ H��H�D$`H�T$(H�t$0H�D$XH�D$P�(��A�ą�x�H����H������I��H���B����L��I�����L��H�����Ic�L��H�t6�z��Hct$LL��H�t6�h��H�|$P�H��t���H��L���I��H�|$X�H��t�u��H��L���*��H�|$`�H��t�V��H��L������6��H��I����A�Ņ�~+E1��D��H��A����H���9�L��H������E9�u�L��L�������H�|$8L�����9l$�����H�T$hdH3%(H�D$8u'H��x[]A\A]A^A_�H�1#H�5�H�81��������H��#1�H�81�����PXH�5�H��H��#H�81�����f�H��#S1�H��H���"H�8���H��tH�X [����@��USH��H��H�5-�"H���$�H���H��H�5��"H���	�H��H��tM�����H��H���������t,��H�����H�=�#H���3���H��tJH��H��[]�P���H���[]�H�%#H�5�H�81�����H�
#H�5�H�81�����H��#H�5KH�81����ff.��PX1�H��H�a#H�81�������S1�H�2�"�}��H�����H��t	H�C H��[����f���AUH�5c�"ATUSH����H��tTH��H����Hc�I����I��E��~(1ې��H������H�����L��H���p��A9�u�H��L��[]A\A]��������H��H�5��"dH�%(H�D$1��l�H���E1�1�1�H��H���q
����xQ��u4H�<$H��t�:��H�L$dH3%(uH���D����d��H�#H�5�H�81��L���H�#H�5UH�81��4���H�U#H�5>H�81�����ff.��PXH�5H��H��#H�81���f���H��H�5��"���H��t!E1�1�1�1�H�������x$H�H��H�D�H��#H�5�H�81�������f���H��H�5��"dH�%(H�D$1����H��tP1�1�1�I��H���&����x6H�<$H��t!��H�T$dH3%(uH��������������H�8#H�5!H�81����ff.�@��H��H�5��"dH�%(H�D$1��|��H��tPE1�1�1�H��H�������x5H�<$H��t �S���H�T$dH3%(uH���fD����|���g���H��#H�5�H�81��_���ff.�@��H��H�5Q�"����H��tH���o�H����H��H������6���fD��S1�H��"���H�����H��t	H�C H��[��2���f�PXH�5j�H��H��#H�81�����f���AVH�5#�"AUATUS�X��H����H��H���
��Hc�I�����I��E��~FL�5�#1����H������L��H���k���H��t'H�ǃ����L��H�����A9�u�[L��]A\A]A^�H��#H�5��H�81������2���f���UH��H�5q�"SH�����H��t0H�5�"H��H�����H��t1H��H�����H��H�[]H�D�H��#H�5G�H�81����H��#H�5L�H�81����f���S1�H���"�}��H�����H��t	H�C H��[����f���UH�5$�"SH�����H��tLH��H��#1�H���"H�8�*��H��H�����H��tH�E H��H��[]�@�H��H��[]�����@��H��H�5��"���H��tH���O��H��H�H�D�����ff.���H��H�5q�"�L��H��tH�����Hc��7��H��H���������fD��S1�H�2�"�]��H�����H��t	H�C H��[����f���UH��H�5a�"SH������H��t0H�5��"H��H�����H��t1H��H���`�H��H�[]H�D�H�#H�5��H�81��������D��S1�H���"���H������H��t	H�C H��[���f���AUATI��H�5>�"UH��S��H��H��XdH�%(H�D$H1����H���uI��H�D$H�D$0H�D$H�D$8H�D$H�D$@�C����I�<$H�|$��uwH�D$H�D$��uy����H�|$ H�D$ �\���H�D$ H��� ��H�PH�T$(H�P1�H�t$(�B�H��upH��#H�5	�H�81����DI�D$H�D$��u�I�D$H�D$�2��H�|$H���%��H�|$I��1�H��t��L��H��H������H��tSH�E L�����H��H�L$HdH3%(uLH��X[]A\A]�H��H��H�D$(���=��������j�H��#H�5V�H�81������H�#H�5�H�81�����D��H��H�5��"�l��H��tH������H�H��H�Ѓ��H��
#H�5@�H�81����fD��AUATI��H��UH��SH����t\�?���H��t\H�5��"H�����I��H��t]1�L��H��"�/
��L���H�����H��t'H�E H��H��[]A\A]������H��u�E1��H��#1�H�81�������ff.���H��H�5��"dH�%(H�D$1��\��H��t<E1�1�1�H��H�t$�c����xY��u<H�T$dH3%(HcD$H�DuH���H��#H�5u�H�81��S����N���H�#H�5o�H�81��6���H��
#H�5?�H�81�����ff.���H��@��t"���Hc�1���H��tEH���f�@��uH�����t�����
t�H��1����@�+�����@��AWAVI��AUATI��H�5��"UH��SH��HH�L$H��$�L�D$(L�L$dH�%(H�D$81��D$4���H�D$H���)H�5��"L������H�D$ H����H�������$H����H��E1���H��L�h�=DH����I9�}^H�-�#L��H�uJ�<�N�$�����H���KI��H��� u�L;{}$H�-�#H�C H�u�Ð�k��$H���}����<$�E1�E1�H�l$4H�t$H��H�=J�������t$4H�D$���|H��$�H�D$��H��$�H��H�=�������L$4H�Ņ���H��M��D��UL�L$ �T$H�t$0H�|$(�G�I��XZM���1H����H�CE1�H�$�;f�H����I9���H�$J�<����������L��H����������I��H��� u�L;k}aH�C ��H�|$@����H�|$���A��H�l$4H�t$(H�=3���H�������|$4I�ą�����H�D$E1�1�fDH�|$�n��H���f��L���^���|$4����H�L$8dH3%(L����H��H[]A\A]A^A_�@H�D$1����A���W���H�|$���H�����L������H�G
#1�H�81��{�1��g����1��Q���H�mH� t+H��J�<#���H��H�5��H��H��#H�81��1�H�[ ��H�L#H�5>�H�81���H�4#H�5��H�81����F�������AUATUS��H��(dH�%(H�D$1����I�ս������tIH�>����A�1�H��t/@�����r���I���L��A�����T���H�5{�"L�����H����1�1�H�L$H��L�D$��������H�t$H�|$Hc�Hc��W������u���1�H�\$dH3%(H��u\H��([]A\A]�f�L�f1�H���P���@���?����Q����:���f.��;����B����1������H�\#H�5��H�81���H��#H�5��H�81��s�����ff.����G�AVAUATUS����H�.L�f��uLL�vH��H�5��"����H��H����L���%��I��I����L��A�������Lc��*�H�5Y�"H�����H��H����L��E1�����I��H���o�H��L��L��H��H���K���H�5�#H����j�����~[]A\A]A^���+�[1�]A\A]A^����Lc��E1�뚺���H�s#H�5��H�81��:�f.����G�AVAUATUS����H�.L�f��uLL�vH��H�5.�"���H��H����L�����I��I����L��A�������Lc��*�H�5��"H���a��H��H����L��E1����I��H���?�H��L��L��H��H�����H�5l#H����:�����~[]A\A]A^����[1�]A\A]A^���Lc��E1�뚺���H�C#H�5��H�81��
�f.���AWAVAUATUSH��xdH�%(H�D$h1�H�D$H�D$@H�D$ H�D$HH�D$(H�D$PH�D$0H�D$XH�D$8H�D$`�G�����H�H�ӹH�D$H�FH�D$ H�D$@L�@�@H��t
Lc�N��L�
��H��L9�tH�P9��H��t�H��H�L9�u�H�5i�"H������I��H���H�|$1����H�|$ I�����H�|$0I��H����H�|$8H�����6��H�|$(H��H����H��E1�I��L��L��M��L���)���H�5�#L�����x�������H��H�\$hdH3%(��H��x[]A\A]A^A_�f.�@��tJ�E��H�|$8Hc�H���h�����H�|$(H��H���h���H�L$���H�L$I���X���D��봺��j�H�+#H�5��H�81�������H��#1�H�81����f.���AWAVAUATUSH��xdH�%(H�D$h1�H�D$H�D$@H�D$ H�D$HH�D$(H�D$PH�D$0H�D$XH�D$8H�D$`�G�����H�H�ӹH�D$H�FH�D$ H�D$@L�@�@H��t
Lc�N��L�
��H��L9�tH�P9��H��t�H��H�L9�u�H�5y�"H�����I��H���H�|$1����H�|$ I���l���H�|$0I��H����H�|$8H�������H�|$(H��H����H��E1�I��L��L��M��L���y���H�5z#L�����H�������H��H�\$hdH3%(��H��x[]A\A]A^A_�f.�@��tJ���H�|$8Hc�H���h������H�|$(H��H���h���H�L$��H�L$I���X���D�k�봺��:�H���"H�5_�H�81������H�v#1�H�81���f.���H�}�"ATH�5��USH�8��H��#H�d#H�5��H��H�H�����L�%�#H�;H�5��H�#H�I�$���H�-d�"H�5]�H��H�E�q���H�}�H�A��H�5���U��H�}�����H��H�5���9��H�}�����H���H�5S����H�}�H�}�H�5A����H�}�H����H�51�����H�}1�H����H�5�����H�}1�H���H�5
����H�}�����H�S���H�5�����H�}�����H����H�5���{��H�}1�H���H�56��b��I�$H�;H�5�����H�-h#�H�l�H��H�5��H�E���H�}H�5^���H�}�H����H�5�����H�}�����H����H�56�����H�}1�H���H�5������H�}1�H���H�5����H�}1�H���H�5
����H�}1�H�9��H�5Q��}��I�$H�;H�5�����H�-�"H�5|�H��H�E�P�H�}�H� ��H�5���4��H�}�����H����H�5m����H�}�H���H�5�����H�}�����H����H�5�����H�}�H���H�5W�����H�}1�H�'�H�5�����H�}1�H���H�50����H�}�H���H�5��v��H�}�����H�F���H�5���Z��H�}�����H�����H�5I��>��H�}1�H����H�5���%��I�$H�;H�5���B��H�-�"H�5��H��H�E��H�}�H����H�5x�����H�}�H����H�5����H�}�����H�p�H�5i����H�}1�H���H�5�����H�}1�H�>�H�5F��r��H�}1�H�%�H�59��Y��H�}1�H�l�H�5,��@��H�}1�H��H�5��'��H�}1�H���H�5����H�}1�H�Q�H�5����H�}1�H����H�5������I�$H�;H�5�����H�-��"H�5��H��H�E��H�}�H����H�5/����H�}�����H���H�5���w��H�}�H�7��H�5X��[��H�}�H����H�5r��?��H�}1�H�"��H�5d��&��H�}1�H�i��H�5R��
��H�}1�H����H�5J�����H�}1�H����H�5A�����H�}1�H�^��H�5������H�;�H�5#����H�;�H�5�����H�;H�����H�5��t���H�;�H�5��`���H�;�H�5#��L���H�;�H�5*��8���H�;�H�5Q��$���H�;�H�5�����H�;�
H�5Q����H�;�H�5]����H�;�H�5������H�;�H�5����H�;�	H�5
����H�;�
H�5����H�;�H�5����H�;�H�5#��p���H�;�H�5��\���H�;�	H�5��H���H�;�H�5���4���H�;�!H�5��� ���H�;�AH�5������H�;��H�5�����H�;�H�5�����H�;�H�5������H�;�H�5�����H�;�H�5����H�;�H�5�����H�;�H�5�����H�;�H�5���l���H�;�H�5���X���H�;�H�5���D���H�;[�]H�5��A\�,���f.�f���UH�5d�"SH��dH�%(H�D$1��j���H����1�H��H����Hc�H����1����H��H�@H� uQH��H��H�$������~[H�H�4$�� tBH�CH�SH)�H9�jH�����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H���"1�H�81���H�!�"H�5f�H�81�����H�
����H�5d�H�=/�������@��������AUATUSH��HdH�%(H�D$81�H�B �D$H�D$(H�D$0����H�Ӆ��SH�H�D$���cH�D$E1�H�|$���H�t$0H��H���}���H�D$0H��H�C ���G���H�|$0H�L$ L��H�T$L�D$(������t���H�t$H���H�=y�"H�T$�o���T$I�Ņ�� H�t$ H����H�=�"H�T$��<��I�ċD$��u#H�t$(�H��tH�=#�"H�T$���H��H�|$ ���H�5U�"H�|$(�#�L��H�5��H���A���L��H�5��H���/���H��H��H�5�������|$����H�L$8dH3%(H��uzH��H[]A\A]�H�FH�D$H�������H�|$�#��I�����H�t$ A�H������A�����f��A��"����1�������H��"H�5�H�81��g�����f���ATUSH����uxH�����toH��ƒ���tb��u]I��H��H�5��"�ӽ��H��H��tKH�5��"L��輽��H��t7H�5X�"H�=Y�"H������H��t4H�C H������H��[]A\�H���@�H���"H�56�H�81����H�I�"H�5p�H�81������S1�H�"�"��H����H��t	H�C H��[�H��"1�H�81��d��@��AWAVAUATUSH���dH�%(H��$�1�H�D$@L�T$0H��$�H�D$HL�d$8H��$�H�D$PH�l$XH��$�H�D$hH�\$`H��$�H�D$pH��$�H�D$xH��$��G�L��$�L��$�H��$�H��$����H��$�1�L��L�If�H��tL�L�I�H��H�� u�H��L�A0��'�H��t
Lc�N��L���H��I9�tH�B 9��H��t�H��H�I9�u�H�|$0H�$tL���`��H�$H�D$H�|$8t
L���C��H�D$L�l$@E1�L���n�L�d$HH�D$ L���l�H�|$XH�D$(��E1�H�|$`�<H�|$h�D$H����H�|$p�D$H����H�|$x�D$H���_H���"H���"1�H�8�O�H�l$PE1�H��H��tH������I�‹D$E��M��P�D$ P�D$ PAWH�t$(H�|$ H�L$HH�T$@L�T$0�θ��H�� L�T$H�5��"I��L����M���\L�s H��L��H�5s��Ļ��H��L��H�5f�費��H��H��H�5a�蠻��H��H��$�dH3%(�H���[]A\A]A^A_�@H�����H���`��A�Dž������H�T$`H�a�"H�5�H�81��8���H���x��H��� ��A�ƅ��Z���H�T$X�fD@��tB�����D$���@@��tJ�����D$�^���@@��t"����D$�/���@�;���D$�K���f��+���D$�
���f�����D$�����
������~��H��"1�H�81��k��ff.���H���"SH�5K�H�H�+�"H�8軿��H���"H���"H�5�H��H�H�蘿��H���"H�;�����H�5��H�H���������H�;H�5I����4�H�;�H�u���H�5�����H�=��M�H�;E1�1ɺH����H�=Q��,�H�;E1�1ɺH���g�H�==���H�;E1�1�H�ƺ�F�H�;�����H�����H�5�����H�;1�[H�^���H�5V����f����7������������UH�5��"SH��dH�%(H�D$1�蚷��H����1�H��H������Hc�H����1����H��H�@H� uQH��H��H�$�����~[H�H�4$�� tBH�CH�SH)�H9�jH���
��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�t�"1�H�81��0��H�Q�"H�5E�H�81����H�
���gH�5B�H�=_��ٽ������@�������AWAVAUATA��H��UH��H�5s�"SH��H��xdH�%(H�D$h1��D$�N���H���$I��H�D$ L�l$0H�D$@H�D$(H�D$HH�D$8H�D$XA�D$�L�l$P����H�EH�}H�D$ H�|$(A��uH�D$0H�D$8�H�EH�D$0A��u�H�EH�D$8�#��H�|$8E1�H�D$H��t@���f����A��H�|$0�L���:���H�|$ I��H���(H�t$���I�NjD$���V�Z��H�����H��H���NH�T$E��L��I��L��L��蝹��L��A���R�H�5c�"L���3�E���<���H������H��tH������H��H�5��H���)�������H���\��H�5_�H��H���
���A����HE�H�L$hdH3%(��H��x[]A\A]A^A_�DH�5�H�����H�D$0H������H�|$ E1�H������E1��������A�������D������H���"H�5��H�81��Y��L���1��|$��L��� �H�51�"L����H�b�"1�H�81����H�O�"H�5`�H�81����������AWAVAUATUSH��H�$H��(H�t$H�5��"I��dH�%(H��$1��k���H����H�xI���������H�|$H�l$���1�L��I���a��I��H��u�Q���H��L������9�u9�H��L�������Å��L��L���n����t�H�5x�L���&���L�����L�������H��uAH��$dH3%(H�D$uTH��([]A\A]A^A_�f��L���������.���H���"1�H�81����H���"H�5��H�81�������ff.���AWH�53�"AVAUATUSH���"���H���H�xH��譹������H�C L�`M����L�����Ņ���Hc�虳��I�Ņ�tz1��;fDH�5��"H�=��"L�����H����I�G L��L����W�9�t;��L���ɯ��H�»"1�I��H���"H�8��I��M��u��A����H��L��[]A\A]A^A_�fDH�{�׸����uH�C L�`0M���.���H��[]A\A]A^A_���H���"1�H�81��K��H�l�"H�5`�H�81��3��H�d�"H�5��H�81����ff.���AWH�5��"AVAUATUSH��袰��H���RH�����I��H����H�����Ņ��DHc��+���I�Ņ�tt1��5H�5i�"H�=��"L�����H����I�G L��L������9�t;��L���a���H���"1�I��H�6�"H�8�V�I��M��u�������H��L��[]A\A]A^A_�fDH��"H�8tH��[]A\A]A^A_���H���"��H�=��H���H��'�H�=����H�;A�61�H�
��H���������H���"1�H�81����H���"H�5��H�81����H���"H�5��H�81��g�����SH�5�"���H���VH�xH��芶����teH�{�|�����t?H�{�n�������H�{�\�����tgH�{�N��������[�fDH�=��"H��tl[���fDH�=��"H��u�H�=b�����[H��H���"�s��H�=a�"H��u�H�=M������H��H�A�"��H�=��	���H��H�-�"�t���H�=�"H���d���H�=���	���H��H���"�D���H�=��"H���4���H�=T���O��H��H���"����H��"H�5�H�81��������ATUSH�� dH�%(H�D$1�H�B H�D$����H��uqH�>L�d$H�|$�K��H�|$H�D$�ܵ��1�1�L��H��H������H��tUH�D$H��H�C �4���H�5��H���@����H�5��H���,���H�L$dH3%(H��umH�� []A\�1�1ҾH��������L��H���O���H��u�H������H�|$���H���"H�C H�5��H�81�����1����������ATUSH����uoH�����tfH��ƒ���tY��uTH��H9�tDH�5�"H������I��H��t=H�5��"H�����H��t)H�����H��t4H�C L������H��[]A\�H�����H�:�"H�5.�H�81����H�2�"1�H�81�����ff.�PXH�5��H��H���"H�81�����f���H��H�5��"�\���H��t
H�xH�������D��H��H�5q�"�,���H��tH�@H�xH���f���������H��H�5��"���H��tH�@H�xH���6���H�W�"H�51�H�81����ff.���H��H�5�"謪��H��tH�@H�8H��駵������f�PX1�H��H�	�"H�81��������USH��H��H���K��H�5��"H��H���I���H��tH��H���)����t"H��H��[]�H���"H�5Z�H�81��c���~���ff.���S1�H�2�"�=��H���ż��H��t	H�C H��[��B���f���H��H�5a�"輩��H��t4�4H�����H��t:�8t�H���fDH�xH�����H���"H�5��H�81��������fD��AUATI��UH��SH��H��H���!��L��I���&��H��I���˶��H�5ij"H��H������H��t#H��L��L��H���c����t&H��H��[]A\A]�H�b�"H�5<�H�81��)���D���@��S1�H�b�"�
��H���է��H��t	H�C H��[�����f���UH�5��"SH��芨��H��t5H���}��H���%���H��H��tMH��H�����H�߅�t#H��[]����H���"H�5��H�81�����c��H���"1�H�81��p�����ff.�PXH�5z�H��H�t�"H�81��B��f�SH�5�"���H��t(H�xH���r�����t
��t1�[�@H�C [H�@�������H�����H��H���������ATI��UH��S���H����H�����H�����H��u�H�5��"H��tM��H��L�r1�1�話��H��[]A\Ð�H�=6����H��H�U�"��SH�5�"����H��t(H�xH��蒮����t
��t1�[�@H�C [H�@�������ATI��UH��S���H����H���X��H��� ���H��u�H�5��"H��tM��H��L�"1�1����H��[]A\Ð�H�=v����H��H���"����H���3���H��H��������ATI��H�5 �"USH������H��t"L��H���v��H��H���K����t H��[]A\�H�`�"H�5T�H�81��'���B���f���H��H��H��두��ATI��H�5��"USH��覥��H��t"L��H�����H��H���k�����t H��[]A\�H���"H�5��H�81��������f���H��H��H��두��USH��H��H�5}�"H���4���H��tKH�5��"H�=�"H���i���H��H��tjH�5
�"H������H��tQH��H�������t"H��H��[]�H�U�"H�5�H�81����H���$���H�E�"H�5+�H�81�������H�(�"1�H�81�����@��ATI��H��H�5�"US�v���H����H�5v�"H�=��"H��觻��H��H����H�5D�"L���<���H��H��tsH��H���ٻ����tDH�{輫����tL��[]A\����>��H���2H���i���L��[]A\�H�����H�Z�"H�5Y�H�81�������H�=�"1�H�81����H��"H�5��H�81��������UH��H�5��"SH���w���H��t$H��H�����H��H���,�����t"H��H��[]�H���"H�5��H�81����������SH�5$�"����H��t<H�xH��讪����t	1�[�D1�1ɾH������H�¸H��u�1�������f���H��H�5��"輢��H��t#1�1ҾH������H��H�H��H�Ѓ������ff.�@��SH��H�5q�"�l���H��tEH��tH��u"1�H���H����1��t���H��t5H��[�H���"H�5��H�81��r���H���"H�5��H�81��Z����u���D��AWAVAUATUH��H�5�"SH��(dH�%(H�D$1��ϡ��H���`I��H�l$@����@��u
H�������H�|$�G���H�T$H��� ��H�BH�ZH�D$L�-��E1�M��@L���1H����������!�%����t������D�H�qHDΉ�@�H��L)�H9�uH�t$L��H�$�'��H�$��toA��I��A��u�H���"H�5��H�81��9���f�H�BH��H�D$���R����E��������H��表��H��H�D$����@Mc�L��K�@A�t������t?H�\$dH3%(H��u'H��([]A\A]A^A_�H���"H�5��H�81�螿��������@��S1�H�2�"�}��H���u��H��t	H�C H��[����f���ATH��"USH�� H�t$1�dH�%(H�D$1�H�G�"H�8�'��H�|$H���z���H�t$H�D$H��H�����H��I������M��tZH�|$�H��t���H��L�c H�5�H���Ǡ���H�5�H��賠��H��H�L$dH3%(uH�� []A\������ff.�f���H��H�5��"����H��tH�@H�8H������H�x�"H�5R�H�81��?���ff.�@��AV��AUATUH�ՍW�S����H�>H�^��tw���H��E1�I�����I��H��H�5��"蒞��H��H����聺��H���)���H��H����H��E��H��L��L�����H�߅�tn[]A\A]A^����DL�f���H��I�����I��I��t(L��A��t�E���A���l���D�ӻ��A���Z���E1��R�����蔷�����H�`�"1�H�81�����H�=�"H�51�H�81�����@��AVAUATUSH��`dH�%(H�D$X1�H�D$L�d$�D$H�D$0H�D$ H�D$@H�D$(H�D$H�G�L�d$8���HH�H�D$H�FH�D$��u.H�D$ H�D$(H�|$ H��u3�ܿ��I���1�H�FH�D$ ��u�H�FH�|$ H�D$(H��t����I��H�|$(1�H��t@���������H�)�"H���"1�H�8���L��H���U���H�|$H�t$I������I�ƋD$������L��L��L���D���L��H��H��t}���H�k H�T$H��H�5��蜝��H�5��"L���]��H��H�L$XdH3%(ueH��`[]A\A]A^�D������D�����譵��L���%���|$������H�5(�"L�����H�Y�"1�H�81�����������AW��AVAUATUSH��hdH�%(H�L$X1�H�T$L�d$�D$H�T$0H�T$H�T$8H�T$ H�T$HH�T$(H�T$P�W�L�d$@���rH�>H�^H�VH�|$H�\$H�T$��uH�D$ H�D$(�H�VH�T$ ��u�H�F H�D$(����H��1�I������H�|$(I��H��t@�����
�����H�9�"H�ʥ"1�H�8���L��H���e���H�|$ I��H����H�t$����I�NjD$����A��L��L��L��L�����H����H�C H�T$H�5��H��襛���H�5��H��葛��L���i��H�5z�"L���J��H��H�L$XdH3%(u}H��h[]A\A]A^A_��E1��n����軷����������腳��L������|$�d��L������H�5��"L������H�.�"1�H�81�������D��AUATUSH��HdH�%(H�D$81�H�D$H�\$H�D$ H�D$H�D$0�G�H�\$(����H�.H�l$����H�D$H�D$E1�H�|$��H��H�5�"����H��H���bE1�H�|$�����H��菮��H��H���D��L��H��H���Ң������L������H���:��H�L$8dH3%(��H��H[]A\A]�H�FH�D$���H���H�~H�|$H���>���@��t]舨��H�|$A���3���H�5�H�����H�D$����H�x�ǟ����t2H�|$��H��辠��I������fD�˵��A������1�1ɾH������D���@H��DE��H�����L������H�A�"1�H�81�������N������H�
�"H�5��H�81��Ѷ��E1����f���ATH���"H�5��L�%��"USH�8I�$����H��"H���"H�5�H��H�H���H���"H�;�H�5�H�H������H�;�����H�`���H�5�����H�;�����H����H�5�����H�;�����H�
���H�5���Ω��H�=B����H�;E1�1ɺH�����H�=4��a��H�;E1��H�ƺ���H�;H�5������H�;�H���H�5{��ߥ��H�;�����H���H�5��ĥ��H�;�H��H�5��詥��H�;1�H���H�5��葥��H�;�H�b�H�5ҿ�v���H�;1�H���H�5Ŀ�^���H�;1�H���H�5���F���H�;�H��H�5���+���H�;�H���H�5������H�;1�H���H�5�����H�;�H���H�5q��ݤ��H�;1�H���H�5g��Ť��H�;�H�V�H�5W�誤��H�;�H�+�H�5L�菤��H�;1�H���H�5B��w���H�;�H���H�54��\���H�;�H��H�5!��A���H�;1�H���H�5��)���H�;�H���H�5������H�;H��H�52����H�;�����H����H�5��ݣ��H�;�����H�N���H�5k��£��H�;1�H�v�H�5&�誣��H�;H��H�5:�脸��H�;1�H�(��H�5P��|���I�$H�;H�5]�虚��H�-��"H�;H�5R�H��H�E�<��H�}H�5���<���H�}�H�,�H�5u�� ���H�}1�H�C�H�5>�����H�}H�.�H�5�����H�}1�H�3�H�5��ע��H�}1�H�Z�H�5Ľ辢��I�$H�;H�5���ۙ��H�-�"H�5��H��H�E葾��H�}�H�q�H�5ʢ�u���H�}1�H��H�5���\���H�}1�H�o�H�5���C���H�}1�H�&�H�5J��*���H�;�H�5>����H�;�H�5������H�;�	H�5������H�;�H�5������H�;�!H�5q����H�;�AH�5u����H�;��H�5˼���H�;�H�5���z��H�;�H�5���f��H�;[�]H�5��A\�N��f.�@��H���H�=<dH�%(H�D$1�H�T$�r���HcD$H�L$dH3%(uH���賶����H������H���f����׿�����USH��H����H������������t8~��ttA=�uJH��H��[]�̗��@��u3H��H��[]�e���DH��H��[]�r��f�H��H��[]��f�H�A�"H���"1�H�8����1�H�5�H�X H��H���Б��H��H��[]�H���"H�5j�H�81�讯��ff.���H���"SH��H�0�I��H��uH��[�H���"H�5!�H�81��g������SH��"1��M��H���U���H��tH�C H��1�H�5a��+���H��[�H���"1�H�81�������AUATA��H��U��SH��dH�%(H�D$1��Փ���H�Å�u4�C�����H�L$dH3%(��H��[]A\A]�D�����Ic�1�H��H�TI������HcվL��H�T����H�=��"H�T$L�������D$���x����C1��D�C1�H�=8����S������Z������$���@���G�@��SH��H��H�=~���H��dH�%(H�D$1�H�T$耙���T$��uH�L$dH3%(uH��[�H���
����|$���謳��ff.����ATUSH��dH�%(H�D$1��G����,H�H�$��t\��"���H��I��跖��1�H��H�����H��H��tBH������H������H�L$dH3%(��H��[]A\�DH�~�f.�1�1ҾH��菿��蚰��L��1�H��H���"覦��H��H��u�1�1ҾH���]����h���1�H���n���H��H���`���1�1ҾH���1����<���1�H��L��H�%�"���H��H���M���H���*���H���"H�5�H�81��L�����蝦���8������USH��H��(dH�%(H�D$1��������H������H��H��裙������~@��t�=�uH����H��tIH�D$dH3%(��H��([]�D��u�1�H�T$H��H�����H�<$tH�|$u�H��"H�5\�H�81��j���f.�1�H�t$H���A���H�|$u����1�H�t$H��聑��H�|$�]��������H���"H�5�H�81�����fD��AUATUSH��H��H�5��"H�T$H�$芋��H���7H��I��覯��H������H�|$I������H�D$H��� ��H�XHc�H9��H������#���H��H����1�L��H���
������H�4$H��� ��H��H����H���?�������H�t$��H� uoH��H��L���ȝ��H����n�����u*赭��H��1�[]A\A]��H�����H���@��u)H���[]A\A]�H�VH�v�t���H�v�H�K�"H�5۶H�81�蚩��H���"H�5��H�81��r���H�����H��"H�5n�H�81��b���H��躶��H��"H�5`�H�81��B���H��蚶��H�ӿ"H�5R�H�81��"���f���H��H�5��"載��H��tH���H�#�"H�5�H�81��ڵ��f.���SH�5��"1�1�H���8���H��uH�5k�"H���c���H��t[�H���"H�5�H�81�蔨��H���"H�5��H�81��l���ff.����AUATUSH��H��(H�T$dH�%(H�D$1��ճ��H��I��芖��H�|$I��荤��L�����1�Hc�����H��賤��H���1�L��H��H��蚇������H�t$H��� tuH�VH�vH���ՙ����tnH�uH�E tH�uL��H��H�T$�?���H��A������E��t\�t$H���#���H��H�L$dH3%(uUH��([]A\A]�DH��H�����H��軴��H��"H�5��H�81��C���H�ܽ"H�5��H�81��+����&���H���~���H���"H�5n�H�81�����H���"H�5��H�81����ff.���SH�5��"����H��tH��H��诓��H��[�H�ۼ"H�5��H�81�蒳��f���UH�5d�SH��H�p�"H�8萬��H��"H�-2�"H�5��H��H�H�E�܍��H���"H�}H�5�H�H���"H�踍��H�y�"H�}�����H�����H�5��H�����H�;H�5�����S���H�;1�H�W���H�5���;���H�;�H�l���H�5��� ���H�;�H�����H�5�����H�=C��9���H���"�-����X�����H��[]�ȧ�����USH��8H�5�"dH�%(H�D$(1��
���H���CH��H��������LH���e���H�L$H�T$H��H��H�����H�T$ H�t$H���[���覙��H�<$H��芆���H�=��H���֐��H��H��H�����H�|$�^����H�=��H��誐��H��H��H��輐��H�|$�2����H�=�H���~���H��H��H��萐��H�|$�����H�=a�H���R���H��H��H���d���H�|$ �څ���H�==�H���&���H��H��H���8���H��H�L$(dH3%(uH��8[]�H�/�"H�5��H�81������H��"H�5ƱH�81��٣��f���AUI��ATU1�SH��H�t$H�$H��t
H�|$褈��H��1�H�<$tH��萈��H��H�56�"L���.���I��H����H��������uwL��荮��I��H��tH���=���H��H��t5H��tH���(���H��H��t H��H��L��肬����t`H��L��[]A\A]�H��記��1�衘��H��"1�H�81����H��"H�5ðH�81��֢��H���"H�5ïH�81�讯��H���V���H���N���H�G�"H�5��H�81�薢��fD��AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$�[���I��1�H�|$t
H�|$�D���H��1�H�|$t
H�|$�-���H��H�5Ӹ"L���˂��I��H����H��跏������L���&���I��M��tL���֖��I��H��tOH��tH�����H��H��t<H��tH��謖��H��H��t'H��H��L��L��裖����tlH�� L��[]A\A]A^�1�L���%���H������1�����H���"1�H�81��c���H���"H�58�H�81��K���H�l�"H�58�H�81��#���L���˖��H���Ö��H��軖��H���"H�5!�H�81�������ATUSH�� H�t$H�5��"dH�%(H�D$1�胁��H����H��H���o�������H���ޫ��1�1�H�t$H��H���z���H�|$tpH�|$舅��H��I���=���1�Hc��c���H��H�xH� u;H��L���(�����xHc�H���١��H��H�L$dH3%(u\H�� []A\�DH�x�H��"H�54�H�81��
���H�+�"H�5߭H�81���H��"H�5߬H�81��ʬ���ե��H���"1�H�81��Ÿ��f���AUI��ATI��USH��8H�-U�"dH�%(H�D$(1�H���=���H���H��H���)������H��L������H��H����H���������H���q���H��I������H��H����H�¾H���*���L��H�T$ H�t$�X���H�|$H��t2���H�|$ H���ܓ��H��t9H�|$ tH��t,H��H��H���,���H�L$(dH3%(L��uUH��8[]A\A]�H��H�D$�A���H�D$H���4���H�u�"H�5�H�81��|���H���"H�5i�H�81��T����_���H�@�"H�5�H�81��G���H�h�"H�5�H�81��/���H��"H�5f�H�81��������USH��H�5��"dH�%(H�D$1��~��H����H��H��膋������H�����1�H��H��踨��Hc�H����1�蕎��H��H�@H� u]H��H��H�$膨����x_H�H�4$�� tFH�CH�SH)�H9���H�����H��H�L$dH3%(��H��[]�@H�C�f�H��H�S���H��"1�H�81�����H�1�"H�5�H�81����H��"H�5�H�81��Щ��H�
���tH�5�H�='�衄��輢��ff.����USH��H�5O�"�J}��H��t}H��H���:�����uUH��譧��H���%���H���͒��H��H��t"H��H�����H�߅�tH��[]鈦���#���H�$�"1�H�81��0���H�Q�"H�5�H�81�����H�9�"H�5�H�81�����USH��H�5��"�|��H��t}H��H��芉����uUH�����H���u���H������H��H��t"H��H���j���H�߅�tH��[]�إ���s���H�t�"1�H�81�耛��H���"H�5U�H�81��h���H���"H�5U�H�81��@�����SH��H�O�W�wH�?�vz���C1�[�ff.�@AVA��AUA��ATUSH��@dH�%(H�D$81��D$H�D$���H���y��H��H����H����覒������L�d$H�5J�"H��L�������|$H�\$D�l$D�t$H�l$ ��H���"H�t$L��H�="����-���H���e����T$(H�߅�t:�u�������H�L$8dH3%(H����H��@[]A\A]A^�f��+����D$��ug1�����D$�=���H��D��D��H���'y���D$(�q���fDH��1��ޣ��H���Ʋ���t����H��1��ƣ���d���謟���W����|$���ff.�ATH�7�"I��1�US�{���H��胂��H��tVL��H��H���k�����t'H�k H��1�H�5x��B{��H��[]A\�f.�H��1��v���H��[]A\�fD1�H��[]A\�ff.���UH��SH��H�5��"�y��H��t}H��H��臆����uUH�����H��袧��H��H��臱��H��tH��H������H��t
H��[]�H��蠢��H�q�"1�H�81��}���H���"H�5R�H�81��e���H���"H�5R�H�81��=���ff.�f�PXH�5�H��H�T�"H�81��"���f���SH��H�5��"dH�%(H�D$1��x��H��tIH��H��蛅����uVH������1�H��H���!~��H�<$H�H�Ѓ�H�L$dH3%(uH��[�H�έ"H�5��H�81�腤��萝���K���ff.���SH��H�5 �"dH�%(H�D$1��x��H��t_H��H�������uJH���n���H��1�H���}��H�<$H��t �x��H�L$dH3%(uH��[�D���������H��"H�5�H�81��ϣ��ff.�@��SH��H�5p�"dH�%(H�D$1��[w��H��t_H��H���K�����uJH��辡��H��1�H����|��H�<$H��t �x��H�L$dH3%(uH��[�D����L�������H�h�"H�54�H�81�����ff.�@��SH��H�5��"dH�%(H�D$1��v��H��t_H��H��蛃����uJH������H��1�1�H��诮��H�<$H��t�Qw��H�T$dH3%(uH��[����蜛���W���H���"H�5��H�81��o���ff.�@��SH��H�5�"dH�%(H�D$1��u��H��t_H��H�������uJH���^���H��1�1�H�����H�<$H��t�v��H�L$dH3%(uH��[����������H��"H�5ԡH�81�迡��ff.�@��SH��H�5`�"dH�%(H�D$1��Ku��H��t_H��H���;�����uJH��讟��H��1�1�H���O���H�<$H��t��u��H�T$dH3%(uH��[�����<������H�X�"H�5$�H�81�����ff.�@��UH��SH��H�5��"�t��H��t.H��H��藁����uNH���
���H������t"H��H��[]�H��"H�5��H�81�蜠��H���"H�5��H�81�蔓��H���"H�5i�H�81��|���ff.����SH��H�5�"dH�%(H�D$1��s��H��tOH��H�������u\H���^���H�t$H���a���1҅�t�|$H҃�H�L$dH3%(H��uH��[�H��"H�5�H�81��ϟ���ژ�����D��SH��H�5p�"dH�%(H�D$1��[s��H��tgH��H���K�����uRH��辝��1�H��H��H����x��H�<$t�H�L$dH3%(u;H��[�@H���@���H��1�H��u������H�`�"H�5,�H�81������"���f���AUI��ATI��US��H��H��H�5��"dH�%(H�D$1��r��H��������H�Ņ�uRH�$�Ճ��H��H�ھH���������H�L$dH3%(L����H��[]A\A]��I�}H�<$����@��t��:������@��uH�����t�����
�����H��H�$�z��1�1�1�H��I������H��H��tL���ޣ���7���f�I�E@��t�H���}���H�ǨtE谁����H�<$@���a����;����lj����H��H�����H���"1�H�81�蓐���������1�1ҾL�������!���H�=z�"1�L��H�5v�"�q��L��H���.���H���������H���q����P����1����~���H���&����k�������H�-�"H�5��H�81����@���G�ATUS����H��H�A���uH�~@���}蘀��A��DH�߃�u0�#���D����y�H��H��t0H��H�����H��t []A\�@�S���D����I�H��H��u�H���i���H�:�"1�H�81��F���fD軍��H�߃�A��t�붺�����ff.�@��USH��H��tQH��"H��H���"1�H�8���H��H���|����uaH�k 1�H�5��H���p��H��t4H��H��[]�f�軀��H��tH��H���"H�8����H�����H�i�"1�H�81��u���H�΢"H�5ߜH�81��]���ff.�f���SH��"H�5ÜH���"H�H�;�u��H��"H�;H�5E�H�H�X�"H��u��H��"�����H����H��H�5y�H�賁��H�;�����H�����H�5m~�~��H�;�H���H�5���}��H�;1�H�����H�51���}��H�;1�H�����H�5���}��H�;1�H�q�H�58��}��H�;1�H���H�5��}��H�;H��H�5��w���H�;H�̛H�5��a���H�;1�H��H�5-z�Y}��H�;1�H���H�5Ջ�A}��H�;1�H�u���H�5���)}��H�;1�H�����H�5w��}��H�;�H���H�5c��|��H�;1�H����H�5%���|��H�;1�H����H�5p���|��H�;1�H�J���H�5���|��H�;1�H�����H�5B��|��H�;1�H���H�52��~|��H�;�H���H�5ך�c|��H�;�H�4�H�5Ě�H|��H�;1�[H�k�H�5��/|��f.�D��USH��8H�5o�"dH�%(H�D$(1��Zl��H���CH��H���Fy����t�LH���Մ��H�L$H�T$H��H��H�����H�T$ H�t$H���K~�����H�<$H����l���H�=ОH���&w��H��H��H���8w��H�|$�l���H�=�H���v��H��H��H���w��H�|$�l���H�=D�H����v��H��H��H����v��H�|$�Vl���H�=��H���v��H��H��H���v��H�|$ �*l���H�=��H���vv��H��H��H���v��H��H�L$(dH3%(uH��8[]�H��"H�5K�H�81��6����A���H�b�"H�5�H�81��)���f���AUI��ATU1�SH��H�t$H�$H��t
H�|$��n��H��1�H�<$tH����n��H��H�5��"L���~j��I��H����H���jw����tuwL�����I��H��tH���~��H��H��t5H��tH���x~��H��H��t H��H��L���|����t`H��L��[]A\A]�H���~��1���~��H�j�"1�H�81��>���H�_�"H�5�H�81��&���H�G�"H�5�H�81����H���~��H���~��H���"H�5�H�81����fD��AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$�m��I��1�H�|$t
H�|$�m��H��1�H�|$t
H�|$�}m��H��H�5#�"L���i��I��H����H���v����t��L��薁��I��M��tL���&}��I��H��tOH��tH���}��H��H��t<H��tH���|��H��H��t'H��H��L��L��胀����tlH�� L��[]A\A]A^�1�L���u}��H���m}��1��f}��H�ߝ"1�H�81�資��H�ԝ"H�5��H�81�蛇��H���"H�5��H�81��s���L���}��H���}��H���}��H��"H�5\�H�81��S�����SH��H�t$H�5�"H�$��g��H����H��H����t����t��H���]���H�|$H���`���H���X���H�$L�A�� tXH�yHc�A��H9�uvH�t$H�IH��� uQH��H����1�I���S�����xQ����HD�H��[��H�t$I��H��A��H��� t�H�~Hclj�H9�uH�v��ޗ��H��"1�H�81��K���H�l�"H�5�H�81��3���H�T�"H�5 �H�81�����ff.���AUI��ATI��USH��H�-��"H���f��H��ttH��H���s������H��L���zf��H��H��tNH���js����tuqH���~��H�5֝"H�=�"H���}��H��t6H��H�¾t蒄��H��L��[]A\A]�H���"H�5a�H�81��L���H��"H�5�H�81��D���H�e�"H�5�H�81��,���H��"H�5*�H�81�����@��AUATUSH��H�5��"dH�%(H�D$1��e��H���$H��H���r����t��H��I���~��1�L��H��H���w��H�<$��L�-�"1�H��A��Hc�H����1��qu��H��H�@H� uaH�$L��H��A�Յ�x|H�H�4$�� tTH�CH�SH)�H9���H���ȅ��H��H�L$dH3%(��H��[]A\A]�fDH�C�f.�H��H�S���L�-y�"�H���H���"1�H�81��у��H��"H�5��H�81�蹃��H�ڙ"H�5��H�81�葐��H�
Z���H�5��H�=��bk���}���ff.�f���USH��H�5�"�
d��H��tH��H���p����tuWH���|��H������H���y��H��H��t$H��1�H�����H�߅�tH��[]�F������H�š"1�H�81����H��"H�5��H�81��ւ��H���"H�5ÏH�81�讏��ff.���S�wH��1�L�OL�G1�H���w H�?�b���C(X1�Z[ÐAUA��ATUSH��hdH�%(H�D$X1��D$H�D$�
���H���%a��H��H����H�����z������L�d$H�5��"H��L���|~��H�D$�|$H�\$ H�D$0H�D$D�l$(H�D$8H�l$@��H��"H�t$ L��H�=����u��H��軚���T$HH�߅�t0�p����twH�L$XdH3%(H��usH��h[]A\A]�f�����D$��uW1�����D$�8���H�|$ ����@H��1�辇��H���6����@H��1�覇���z��������DŽ���|$�^���ff.���AUI��ATI��US��H��H��H�5��"dH�%(H�D$1��{a��H���>���"H�Ņ�tRI�E�H�$��uI�}���H���lq��������H��H��u-H�>�"1�H�81��j���f.�H�$����H��H�ھtH���P������H�L$dH3%(L����H��[]A\A]�fD�uH�����t�����
tSf.��t��H�<$H��蟋��H��H�$�3i��H�t�"H��1�H��I����p��H��H��t4L��茒���W���H���~��������H��H���<����
����1�1ҾL����������1�1�1�L���l{��H��H��u�1�1ҾL��������1�L���d���H��H���t���1�1ҾL��跑���‚��1�L����^��H��H���H���1�1ҾL��苑��薂��E1�E1�1�H�=��"L��H�5��Hc��L��H��蝑��H���d����_���H�p�"H�5�H�81��~���1�����x��脄��H���"H�5q�H�81��\���H��������ff.�@ATH���"I��1�US�;���H���Cg��H��tVL��tH��H���+}����t'H�k H��1�H�58|�`��H��[]A\�f.�H��1��6���H��[]A\�fD1�H��[]A\�ff.���UH��SH��H�5\�"�W^��H����H��H���Ck����tuiH����v��H�=��"H�5`�"H���pu��H��H���5���H��t H��H������H��tH��[]�f�H��踃��H���"1�H�81��%}��H�F�"H�5��H�81��
}��H�.�"H�5��H�81����DPXH�5ƋH��H��"H�81���|��f���SH��H�5p�"dH�%(H�D$1��[]��H��tIH��H���Kj����tuVH����u��1�H��H���qo��H�<$H�H�Ѓ�H�L$dH3%(uH��[�H�~�"H�5J�H�81��5����@����K���ff.���SH��H�5В"dH�%(H�D$1��\��H��t_H��H���i����tuJH���>u��H��1�H����n��H�<$H��t �c]��H�L$dH3%(uH��[�D���謁�����H�ȑ"H�5��H�81�����ff.�@��SH��H�5 �"dH�%(H�D$1��\��H��t_H��H���h����tuJH���t��H��1�H���!n��H�<$H��t �\��H�L$dH3%(uH��[�D����������H��"H�5�H�81��χ��ff.�@��SH��H�5p�"dH�%(H�D$1��[[��H��t_H��H���Kh����tuJH����s��H��1�1�H������H�<$H��t�\��H�T$dH3%(uH��[�����L����W���H�h�"H�54�H�81�����ff.�@��SH��H�5��"dH�%(H�D$1��Z��H��t_H��H���g����tuJH���.s��H��1�1�H���_���H�<$H��t�Q[��H�L$dH3%(uH��[����������H���"H�5��H�81��o���ff.�@��SH��H�5�"dH�%(H�D$1��Y��H��t_H��H����f����tuJH���~r��H��1�1�H��诅��H�<$H��t�Z��H�T$dH3%(uH��[������~�����H��"H�5ԅH�81�迅��ff.�@��AVI��AUATU��H��SH��H�5Q�"dH�%(H�D$1��<Y��H���H��H���(f����t�$H���q��I�Ń�����t7I�>A���uM�fH��t%芎��L��H����l��I���f.�A�1���t��H���kn��H��H��tz1�H��L����j��H�<$tOH��L�
��"1�H��ATE1�L��H���O���ZY��t8H������H�L$dH3%(uaH��[]A\A]A^�@L��H���e�����u�H���i���H�J�"1�H�81��vw���1�����q��H���"H�5U�H�81��@����K}��H�l�"H�5�H�81��3w����UH��H��SH����t+�g������H��H��t+H��H�����H��tH��[]��ku�����d�H��H��u�H���T}��H���"1�H�81��v�����UH��SH��H�5\�"dH�%(H�D$1��GW��H��txH��H���7d����tucH����o��1�H��H���]i��H�<$t&�H�L$dH3%(u-H��[]�f.�H�5jtH���A���H��1�H��u���|���*���H�;�"H�5�H�81���f���ATI��USH��0H�t$H�5��"dH�%(H�D$(1��V��H���eH��H���lc����t�9H���n��1�1�H�T$H��H���'���H�|$��H�l$ 1�H��H���ih��H�|$ ��H�|$��q��H���[`��1�Hc��Af��I��H�HH� tH�HH�t$H��� tXH�~Hclj�H9���H�v1�I��I���W�������t$ L���v��L��H�L$(dH3%(uOH��0[]A\�DH��H�����H�5�rL���Ʉ��H���B���H�p�"H�5�H�81��t���z��H�S�"H�5�H�81��zt��H���"H�5K�H�81��bt��H���"H�5O�H�81��:����Ņ��H��"1�H�81��2t��f���USH��H��tQH�Ҋ"H��H���"1�H�8����H��H���a����tuaH�k 1�H�5rH����U��H��t4H��H��[]�f�苋��H��tH��H�t�"H�8�d���H�����H�i�"1�H�81��s��H��"H�5�H�81��}s��ff.�f���SH��"H�5�H��"H�H�;��Z��H��"H�;H�5��H�H�x�"H��Z��H�ى"�H���H��H�5��H���f��H�;�����H���H�5�c�8c��H�;�H���H�5�i�c��H�;1�H��H�5Q��c��H�;1�H���H�57���b��H�;1�H�!�H�5Xt��b��H�;�����H�����H�5��b��H�;H���H�5 t�w��H�;H��H�54j�~w��H�;1�H�"�H�5J_�vb��H�;1�H�Z�H�5�p�^b��H�;�H�����H�5���Cb��H�;�H���H�5���(b��H�;1�H�\���H�5W��b��H�;1�H�����H�5��a��H�;1�H����H�5���a��H�;1�H����H�5t��a��H�;1�H�<���H�5d�a��H�;�H�q�H�5	��a��H�;�H��H�5��za��H�;1�[H�M�H�5M��aa�����H�u]"1����ff.���H��]"1��ކ��ff.����e������'g�����UH�5]"H��SH���GQ��H����H�5��"H��H���a��H�5E]"H���Q��H��tQH�I�"H��H��H�����t��uH���[]�fDH��1�[]�H�(�"H�5)�H�81��p��H�H�"H�5�H�81��o��H�h�"H�5�H�81���o�����ATUH��H�5?\"SH���vP��H��uwH�5*\"H���bP��I��H����H�5��"H����`��H���O��H�5X\"H��H���-P��H��t^H��L����U��H��t6H�C H�5]�"H��H����O��H��[]A\�H���"H�5YH�81��2o��H���"H�5_H�81��o��H�K�"H�5�~H�81��o��H�k�"H�5�~H�81���n��f.���AUI��H�5@["ATA��H��USH��H��dH�%(H�D$1��ZO��H���A�D$�����H���"I�mH�0A��tGH��H�$�r��H����H��H���{���H�L$dH3%(��H��[]A\A]�@I�EH��H�$�Hr��H����H�5�Z"H���N��I��H��uH�9�"H�5�}H�81���m��H��"H�<$H�0�q��H��uxH���0j��L���h[��I��H���H���"L�H�$H��� ��H��H��H�P��L��L���Iz������L�k H�5v�"H��H���N��H������H�A�"H��L�(�NR��1�L��L��H��较��I��H��u�H���"H�5�}H�81��m��fDH�HH�P�w�����D���Yg��L���z��H�Z�"H�5}H�81���l��H��H�5�Y"�zM��H��H��������YZ��I��H���,���H��"H�5}H�81��l���r��H���"H�5�|H�81��hy��H���"H�5�|H�81��Py��ATA��H�5$Y"US�L��H����H����h��H���b��H��H��tXA��t&H��H���S��H�߃�u'[]A\�Jv��f.�H�=ɂ"H��H���~v������~��H�Ѐ"1�H�81���k��H��"H�5u|H�81��k��H��"H�5�{H�81��k��@����2���f���1��%���D��SH��H�t$H�5;X"�L��H��tH�|$H���g��H�t$H��� t7H�VH�vH����x��H�L$H��� u*H����H9�u$H��H��[�DH��H������H�Q��H�+"H�5�{H�81���j��H�"H�5�zH�81���j��f.���AWAVAUATI��H�5zW"UH��S��H��H��hdH�%(H�D$X1��7K��H����L�l$L�D$L�|$ L�t$(L�l$0�C�L�D$8L�|$@L�t$H���
I�$�H�D$H�D$0H�p��H��t
Hc�I�<�H�:��H��H9�tH�P9�|�H��t�H��H�H9�u�������H�|$@��t%@���yH������l������^L�D$��Q��L�D$I��L���N��L��H���N��L��I���N��L9-��"�zH�Z�"H��L��H�
H���Q��H��H����H�] H��H�t$XdH34%(��H��h[]A\A]A^A_�H�|$@����@��uH�����t�������H�e�"H�0�
m��H��tHH�|$H�5�U"�I��H���H���fs��H��H���e���H��|"H�5�yH�81��h��f�L���Q��1�1�1�H��I���P��H��H��tL���W{������f��P��H9��"��H9�"��H9j�"�-�}��H��H�����N��H��H������H�S|"H�5�xH�81��
h��f.�1�1ҾL���z���k��H�53�"1�1�L���H��L��H���z��H���n���L���_��H���#n�����\k�����'���O��H��H����H�Ǿ�s���H���c��������a��H���)����`~��H������H�i�"H�5�|H�81��@g�������a��H�@�"H�5]xH�81��g��H�(�"H�5A|H�81��f��H��"H�5y|H�81���f��H�}"H�5�{H�81���f��H�{"H�5�wH�81��f���l��H��z"H�5�vH�81��f��H��z"H�T$H�5�wH�81��}f��H��z"H�T$H�5ZwH�81��`f����USH��H�5�|"�F��H��tUH��H����S��=���H���P��H����b��H���w\��H��H��tTH��1�H���BX��H�߅�t#H��[]�0p��H�|"H�5�rH�81���r���x��H��z"H�52wH�81��e��H��z"H�5\vH�81��e��H��{"H�5�vH�81��e��ff.�AWAVAUA��ATI��UH��SH��H�5|"�
F��H����H��H���R��=��^H���O��H��H���KO��H���*H����N�����H��E1��|��I��H��tH���E{��L��I���Y��I���a��H���:[��H��H����A��tHM��t[H��L�
`z"L��1�ATH��E1�H���Cg����XZH��uPH��[]A\A]A^A_��n��@H��H��M��t%�E������@H��H���}�����f��KZ������"w��H�+y"��H�5�uH�81��(d��H�y"H�5�tH�81��d��H��x"H�5zH�81��c��H��x"H�5�yH�81���c��H�z"H�5(uH�81���c��H��y"H�5�pH�81��p��������������SH��H�t$H�5+z"H�$�"D��H����H��H���Q��=���H���+M��H�|$H���_��H���_��H�$L�A�� t6H�t$D�AH�IH��� u:H��H��1�I�ك��LA����uAH��1�[�H�t$I��H��A��H��� t�H�~Hclj�H9�u:H�v1�I���A����t���uH���[�H��w"H�5tH�81��b���
t��H��x"H�5�sH�81��rb��H��x"H�5_oH�81��Jo��f.���USH��(H�t$H�5�x"dH�%(H�D$1���B��H���H��H���O��=���H����K��H�|$H���Q^��H���x��H����H���(K��1�Hc��R��H��H�HH� tH�HH�t$H��� tMH�~Hclj�H9�uLH�v1�I��L�D$��\����u9�t$H���c��H��H�L$dH3%(u2H��([]ÐH��H�������r��H�7v"H�5�rH�81��6a���1g��H�v"H�5�rH�81��a��H�:w"H�5arH�81��a��H�"w"H�5�mH�81���m��f���ATUH��H�5w"S�yA��H����H��H���eN��=���H���J��H��H�5M"I���@A��H��H��tN1���lL��H��H�xH� u,E1�L��H���Yd����xcH��Hc��k��H��[]A\�f�H�x��H��y"H�5�oH�81��"`��H�Cv"H�5jqH�81��
`��H�+v"H�5�lH�81���l��H��t"H�5�qH�81���_��f.���UH��SH��H�5lv"�g@��H����H��H���SM��=�ukH���tI��H��H��t3H�5�K"H���,@��H��tvH��H���\M����uH��H��[]�D1�H���>M����v�H�2t"H�5�pH�81��1_��H�Ru"H�5ypH�81��_��H�:u"H�5lH�81���k��H�jx"H�5�nH�81���^��f���USH��H�t$H�5zu"�u?��H����H��H���aL��=���H���~H��H�|$H��u#1�H���Y`����w5H�D$H��[]��H�|$�fC��H��H��H���(`����u$H��t�H�8s"H�5pH�81��7^�����u�H�D$H��[]�H�@t"H�5goH�81��^��H�(t"H�5�jH�81���j��ff.�@��UH��SH��H�5|t"�w>��H��tOH��H���gK��=���H���G��H�5mJ"H��H���B>��H��tJH��H���RK����u"H��H��[]�H��s"H�5`jH�81��Kj��H�Dr"H�5>oH�81��C]��H�tq"H�5!mH�81��+]��H�Ls"H�5snH�81��]����AUI��ATI��USH��H�-�s"H���=��H��tsH��H���J������H��L���z=��H��H��tMH���jJ��=���H���F��H���R��H��H��tZH�¾�H���[����t&H��L��[]A\A]�H��r"H�5biH�81��Mi��H���=��H�>q"H�5knH�81��=\��H�&q"H�5HnH�81��%\��H�Fr"H�5mmH�81��
\��H��p"H�5nH�81��[��DUSH��H�Ss"H�|$H�0�_��H��tIH�|$H�5�H"�p<��H��H��ty�s=��H��H����H��H���lI����tqH��H��[]�fDH�|$��R��H����a����tf���V��H��H��tDH�Ǿ�p��H�߾�)]��H��H��[]�H�po"H�5kH�81��'[��H���o<��H�p"1�H�81��[��H��o"H�59mH�81���Z��@��AWAVI��AUATI��U��H��SH��L�-|q"dH�%(H�D$1�L���d;��H���H��H���PH�����\��������I�>A�H�<$��uM�~H����H��p"H�0�x^��H����H�<$L����:��H��H����H����G��=���H���C��H���O��H��H��tYH�꾘H���Y������H�L$dH3%(L����H��[]A\A]A^A_�fDH�$�{;��H��H��u�H��n"1�H�81��Y��H�	q"H�<$H�0�]��H����L���<N��H��I����B��H�o"L��1�H��I����_��H��H��t
L���*l���9���1�1ҾL����k����\��L��1�L��H��n"�Z��H��H��u�1�1ҾL���k���\��1�L���7��H��H��u�1�1ҾL���zk���\��1�L���+l��L��H���k��H��������b\��f�H�<$���H������1�����R��H��n"H�5~eH�81��ie��H��n"H�5�iH�81��aX��H���9��H�Bm"H�5ojH�81��AX���<^��H�%m"H�5|jH�81��$X��@��U1�1�H��AWAVAUATSH��(dH�%(H�E�1��=��Lc�I��L9��H��H��H��H��H���H)�H��H9�tH��H��$�H9�u�%���H�\$L��H���H���0=��H����L����9��I��E��~wE�l$�I��I��J�+H�E�f��;��i���L�kI���9��L��I����U��L��H���n���M��tL���U��H��L��H���n��L��L���vn��H;]�u�H�M�dH3%(L��uDH�e�[A\A]A^A_]��H)�H�L��&���H���Bh��H��l"H�5iH�81��V���\��DATH�Gm"I��1�US�l��H���?��H��tVL�⾘H��H���{U����t'H�k H��1�H�5�T�R8��H��[]A\�f.�H��1��e��H��[]A\�fD1�H��[]A\�ff.�SH���'>��H9r"tH9r"t%H9�q"u#�[�D�[�f��[�H��n"H��H�5�kH�81��U��ff.���AWAVAUATI��H�5�A"UH��SH���,6��H����H�5lq"H��H���F��H�5*B"H���6��H��H����L���.���E1�1�H��L�=n"��H��A��M��I��I��H��tMH��1��E��M�I��H�HH� u*M��D��H��H���yI��H��tH��L��[]A\A]A^A_�f�H�H��H�3n"H�5;gH�81��T��H��h"H�5�dH�81��T��H�n"H�5\dH�81��T��f���UH�5�@"SH��H���5��H��t@H�5[p"H��H���E��H�5A"H����4��H��tJH��H���!>����u"H��H��[]�H��m"H�5�cH�81��
T��H�k"H�5�fH�81���S��H�#h"H�5�cH�81���S��f.���UH�54@"SH��H���g4��H��tJH�5�o"H��H����D��H�5i@"H���A4��H��tTH�ml"H��H��H��WE����u"H��H��[]�H��l"H�5*cH�81��PS��H�Ij"H�5�eH�81��8S��H�ig"H�5cH�81�� S����UH�5�?"SH��H���3��H��tJH�5�n"H��H��� D��H�5�?"H���3��H��tTH��k"H��H��H���j����u"H��H��[]�H�!l"H�5zbH�81��R��H��i"H�5MeH�81��R��H��f"H�5fbH�81��pR��PXH�5SbH��H��f"H�81��RR��f���UH�5�>"H��SH����2��H��tpH�5+n"H��H���PC��H�5�>"H���2��H��tEH��H����8����t��uH���[]�@H��1�[]�H��h"H�5�dH�81���Q���R���H�+k"H�5�aH�81��Q��f.���UH�5d>"SH���:2��H��t7H���-N��H����G��H��H��tOH��1�H���K��H�߅�t#H��[]�[��H�e"H�5,aH�81��6Q���d��H�be"1�H�81��Q��H�Oe"H�5�aH�81��Q��fD��H��H�5�="�1��H��tH���\��H��H�H�D��^���ff.���UH�5�="SH���Z1��H��tAH��H���*7��H��H��t"H����V��H��H��[H��]�iA��f�H���[]����ff.�@��UH��H�5="SH����0��H��tH��H������H�߉��L��H��H��[]����ff.���H��H�5�<"�0��H��tgH���.����t*��tE��t0��H��c"H�5HfH�81��O��fDH�=�k"H���p_��H�=�k"H���`_��H�=�k"H���P_������ff.���USH��H�50<"H���0��H��t3H��H���u��M����H���X[��H��H��[]�fD�@���������f.���H��H�5�;"�/��H��tH���J��H��H�H�D��n���ff.���H��H�5�;"�l/��H��tH����K�����a��H��H���<M���'������SH�5T;"H��dH�%(H�D$1��/��H��tJ1�H����/��H��H�$�P3��H�1g"H��H��H��e����u7H�L$dH3%(H�$uH��[�H�Mb"H�5�]H�81��N���S��H�0b"H�5�`H�81���M�����SH�5�:"H��dH�%(H�D$1��k.��H��tJ1�H���</��H��H�$�2��H��f"H��H��H���O����u7H�L$dH3%(H�$uH��[�H��a"H�5J]H�81��TM���OS��H��a"H�5?`H�81��7M�����AUATI��H�5�9"UH��SH��H�T$H�$�-��H��tSL��H�5h9"H���-��I��H��tiH�|$��1��H��I����1��L��L��H��H���-����u&H��H��[]A\A]�H��`"H�5�\H�81��L��H��`"H�5�_H�81��L��H��e"H�5A\H�81��gL�����UH��H�5!9"SH��H����,��H��u/H�59"H����,��H��tKH����V��H��t&H�C H��H��[]�H�A`"H�5*_H�81��K��H�)`"H�5�\H�81���K��H�`"H�5�[H�81���K�����UH��H�5�8"SH���W,��H��tDH�5k8"H��H���@,��H��tEH�ld"H��H��H��P������HD�H��[]�H��_"H�5<[H�81��FK���������ATI��UH��H�5,g"S�V<��H�5g"H��H���D<��H��H���I���H��u[1�]A\�DL��H�5^7"�+��I��H��tTH��H�5G7"�+��H��H��t=H�5�7"H���k+��H��tAH��c"L��H��H�
H���^E���¸��t�[]A\�H��c"H�5OZH�81��uJ��H��^"H�5SZH�81��]J��ff.�f�PXH�5�[H��H�d`"H�81��2J��f���SH�5�`"��*��H��t1H��H���7��=�u7H����3��H���4��[H��H�H�Ѓ��H�
`"H�5�VH�81��V���|���ff.����SH�5d`"�_*��H��t.H��H���O7��=�uLH���p3��H���83����u�[�H��_"H�5iVH�81��TV��H�M^"H�5�\H�81��LI��H�m_"H�5�ZH�81��4I��@��SH�5�_"��)��H��t1H��H���6��=�u7H����2��H���`��[H��H�H�Ѓ��H�
_"H�5�UH�81��U���|���ff.����SH�5d_"�_)��H��tAH��H���O6��=�uGH���p2��H���_��H��tH��[�
*��f.��[�H��^"H�5VUH�81��AU�����ff.������w?H�Ѕ�t L����uH�V1�L��H����f�A��1�L��H���x�P�1��KB��ff.���UH��H��SH�����H��H��t3H��H����H��H��t H���<����t/H��H��[]�f.�H����(��H�q\"1�H�81��uG��H�^\"H�5�ZH�81��]G��ff.�f���UH��AWAVAUI��ATA��H��SH��H��H�5%c"dH�%(H�E�1��A8��H�5z3"H��H��x����'��H����H��x���H�5�3"I���'��H��h���H����H��]"H�8�2��H��x����H��H������H�53"H���G'��I��H���1H�E�H�}�H�M�H��X���H�E�A�D$�H�}�H�M����I�EH�E�A��uH�E�H�E��fDI�UH�U�A��u�I�UH�U��uH�����t
�����twH��`����+��1�H�}�I��tH��`���H����*��H��H��^"M��L��L��H��h���L��H������H�M�dH3%(H����H�e�[A\A]A^A_]�H�Ǿ��U��H�}����U��H�E�L�(A�� �%L�hH�U�H��� �]H����H��L9��2L����E��H��`���I���9H�E�H��@���H�E�J��H��H�E�H��H��H���H���H)�H��H9�tH��H��$�H9�u��t	H)�H�L�H�T$H���H��P���M����H�E�E1�H��H����D�H��J��H��H���H�E��x)��H��P���H�u�H��`���J��I����[��M9�} H�E�H� u�H�@ �I��A������I����J��H�M�H��H���H�M�H��H��H%�H�E�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�L�d$I���I�E�M�4$E1�H��`���I��8�I�H��J�<�H�50"�<$��K�D�H���$I��L9�`���tH�E�H� u�H�@ ��1�H�}�tH��X����I(��H��H�'\"L��M��L��H��H��h���L��P����0��M��ZH��@���Y�����&S��H��H����S���;���H�B���H��������I9�wvJ��H�}�L��H��H��H���H��@����h+��M��H��H���H��P��������H�E�L��H��H��H��H����8+��I�����H��������I9�w
J���ƾL����7��H��["H�5RH�81��BB����D���<���KR��H��H����?R��H��["1�H�81��B��H�["H�5�XH�81���A����G��H� V"H�5�QH�81���A���UH��1�H��."SH��H�'Y"H�8�W��H��H���DL��H��tH�C H��H��[]�H��U"H�5fRH�81��yA��f�H�iX"ATI��H��-"UH��1�SH�8�NW��H��L��H���'��H��t&H�C H���_���H�5(]"H��H���!��H��[]A\�H�~Z"H�5BQH�81��@��ff.�f���SH�5�-"�!��H��t)H��H���7��H��tH��H��[�N���fD�[��<�ff.����USH��H�5?W"�:!��H��tYH��H���*.��=�u_H���K*��H��H���*��H��H��t H����2��H��H��H��[]�����H���[]�H�MV"H�5MH�81��M�����ff.�@��SH�5�V"� ��H��tAH��H���-��=�uGH���)��H���X2��H��tH��[���f.��[�H��U"H�5�LH�81��L���<���ff.����UH��SH��H�5V"� ��H��t1H��H���-��=�uOH���()��H���4����u"H��H��[]�H�RU"H�5LH�81��	L��H�T"H�5bRH�81��?��H�"U"H�5IPH�81���>��f���USH��H��tQH�BU"H��H�pU"1�H�8�T��H��H���[,��=�u_H�k 1�H�5�<H��� ��H��t2H��H��[]��; ��H��tH��H��T"H�8���H�����H�AS"1�H�81��E>��H��R"H�5�QH�81��->��ff.�f���AUH�5�QATUSH��H��R"H��T"H�;H��r%��H��R"H�;H�5bQH�H�U"H��O%��L�% W"H�9T"H�5>QH��I�$H��+%��H�-U"I�$H�5#QH�;H�E�
%��L�-�T"H�}H�5�-L�%tT"I�UI�$��$��H��Q"I�<$H�5�-H�I�U��$��H��V"H�=�PH���L��H�=�PH�]Y"�L��H�=�P�L��H�=�PH�6Y"�L��H�=�PH�Y"�~L��H�=�PH�Y"�kL��H�=�P�_L��H�=�PH��X"�LL��H�=�PH��X"�9L��H�;�H�5pPH��X"��S��H�;�H�5aP�S��H�;1�H�N�H�5�N�20��H�;�H�s�H�5�J�0��H�;�����H�H�H�5�,�|,��H�;�H�
��H�5�2�a,��H�;1�H����H�5�P�I,��H�;�H�
��H�5�O�.,��H�;1�H��H�5�:�,��H�;�H����H�5�O�+��H�;1�H�����H�5w:��+��H�;�H����H�5S=��+��H�;1�H�<�H�5�H�+��H�;1�H�$�H�5�I�+��H�;H��HH�5<O�r@��H�;H��IH�53O�\@��H�;1�H�����H�5�I�T+��H�;H��IH�5QN�.@��H�;1�H�"�H�5(N�&+��H�;�H����H�5�N�+��H�;�H�\��H�5�N��*��H�;�H���H�5�N��*��H�;�����H�6�H�5I�*��H�;H��HH�5 <�?��H�;1�H����H�5`'�*��H�;1�H����H�5�;�t*��H�}H�5)���dF��H�}�����H�D��H�5�*�H*��H�}�H���H�5�0�,*��H�}�H��H�51�*��H�}H�1H�51��>��H�}1�H�����H�5�L��)��H�}�H�P�H�5�L��)��H�}1�H���H�5kL�)��H�}1�H���H�5<L�)��H�}1�H�e�H�5yM�y)��H�}1�H��H�5kM�`)��H�}�H���H�5YM�D)��H�}1�H���H�5KM�+)��H�}�H�{�H�5EM�)��H�}1�H���H�5|I�(��H�}�H���H�5'M��(��H�}1�H�}�H�5M�(��H�}1�H����H�5$:�(��H�}1�H����H�5c%�(��H�}1�H���H�5�9�v(��I�<$H�5���fD��I�<$�����H�&��H�5�(�J(��I�<$�H�
��H�5�.�.(��H�=�L�bG��I�<$E1�1�H�ƺ�C��I�<$�H�l�H�5�.��'��I�<$H��.H�5�.��<��I�<$1�H�,�H�5L�'��I�<$1�H����H�5L�'��I�<$1�H�*�H�5�K�'��I�<$1�H�a�H�5�K�u'��I�<$1�H���H�5�K�\'��I�<$�H�\�H�5�K�@'��I�<$�����H���H�5.�$'��H�=�K�XF��H��R"H��[]A\A]�fD��USH��XH�5OM"dH�%(H�D$H1��:��H����H��H���&$������H�����H�L$H�T$H��H��H�t$�;N��H��H�T$(H�t$ �)��H�L$@H�T$8H��H�t$0�F���*��H�|$H������H�=�&H����!��H��H��H���!��H�|$�t���H�=�'H���!��H��H��H����!��H�|$�H���H�=~2H���!��H��H��H���!��H�|$ ����H�=IH���h!��H��H��H���z!��H�|$(�����H�=ICH���<!��H��H��H���N!��H�|$0�����H�=CLH���!��H��H��H���"!��H�|$8����H�=LH���� ��H��H��H��� ��H�|$@�l���H�=�KH��� ��H��H��H���� ��H��H�L$HdH3%(uH��X[]�H��J"H�5�AH�81��xA���:��H��J"H�5}KH�81��k4��ff.���AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$�+��I��1�H�|$t
H�|$���H��1�H�|$t
H�|$���H��H�5�J"L�����I��H����H���!������L���v��I��M��tL���(��I��H��tOH��tH���(��H��H��t<H��tH���|(��H��H��t'H��H��L��L����?����tlH�� L��[]A\A]A^�1�L���(��H����(��1���(��H�_I"1�H�81��33��H�TI"H�5-JH�81��3��H�<I"H�5@H�81���?��L���(��H���(��H���(��H��I"H�5JH�81���2����AUI��ATU1�SH��H�t$H�$H��t
H�|$���H��1�H�<$tH�����H��H�56I"L���.��I��H����H��� ����uwL���
��I��H��tH���='��H��H��t5H��tH���('��H��H��t H��H��L���"����t`H��L��[]A\A]�H���'��1��'��H�H"1�H�81���1��H�H"H�5�HH�81���1��H��G"H�5�>H�81��>��H���V'��H���N'��H�GH"H�5�HH�81��1��fD��AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$�[��I��1�H�|$t
H�|$�D��H��1�H�|$t
H�|$�-��H��H�5�G"L������I��H����H���������L�����I��M��tL����%��I��H��tOH��tH���%��H��H��t<H��tH���%��H��H��t'H��H��L��L��������tlH�� L��[]A\A]A^�1�L���%&��H���&��1��&��H��F"1�H�81��c0��H��F"H�5]GH�81��K0��H�lF"H�58=H�81��#=��L����%��H����%��H���%��H��F"H�5\GH�81��0����AWAVI��AUATU��SH��H��dH�%(H�D$x1�H�=;L"�}H�D$L�d$ H�D$8H�D$PL�l$(H�D$0L�d$XL�l$`H�D$h���+Hc�H�|�H���i�����1ҹ����H�H�D$���eH�CH�D$ ��tH�SH�|$8H�T$(L�D$@1ɺH�5�K"H�|$0�l��H�=}K"H�\$@H������>�������H9�t(H�=QK"H�\$@H���3�>�������H9���H�|$H���H�5oE"L��I���d��I��H����H�|$����L��H�D$��*��L����*���$+��H��H����H�T$1�H�t$8M��H����%������H�|$8E1���������������_H�|$8E1�����������=H�|$81�M�����������H�t$(H��� ��H�VH�vH����������H�t$ H��� �\H��H����H���/�����!�D1��H����:��1�H�L$xdH3%(��H�Ĉ[]A\A]A^A_�@��������'��f�H��H�����Z���H�|$@@���A������E���D�[,��H�D$8H��t�H�|$8���H�T$8�u������H��t���H���HD�H�D$8���
���X���H�T$�_���@�H�=�,�������'��H��H��H"�[<��H9�������M���D����H����9�������DH�VH�v����H�=�C�'���	H�=�CH��H"�o'��H��H"�N���H�={C��O'��H��H�]H"���H�T$ ���fD�[*��������H���,9��H�EE"1�H�81��+�����X���H��A"H�5�8H�81��8���1��D��AUATUSH��(H�5+B"dH�%(H�D$1����H���%H��H���������H��L�d$����H�t$L��H��H�����H�|$tH�|$t	L�-j@"�L�-�B"1�H��A��Hc�H����1�����H��H�@H� u^H�D$L��H��A�Յ�xiH�H�t$�� tOH�CH�SH)�H9���H���3,��H��H�L$dH3%(��H��([]A\A]ÐH�C�f.�H��H�S���H��C"1�H�81��P*��H�q@"H�5JAH�81��8*��H�Y@"H�5%7H�81��7��H�
�B��H�5�AH�=g+�����/��ff.����AVI��AUATU��H��SH�� H�5�@"dH�%(H�D$1��l
��H���+H��H���X�����4H���G��I�����t7I�>A���uM�nH��t%�?��L��H�����I���f.�A�1���%��H�����H��H����H�T$H�t$L�����H�|$tUH�|$tMH��L�
�>"1�H��AUE1�L��H���m1��ZY��t6H���3��H�L$dH3%(u_H�� []A\A]A^�f�L��H��������u�H���;��H�"B"1�H�81��(���1�����"��H��>"H�5u5H�81��`5���k.��H��>"H�5e?H�81��S(����USH��H�5�>"����H��tH��H��������uWH����	��H����$��H���m��H��H��t$H��1�H���(A��H�߅�tH��[]�&2���:��H�ZA"1�H�81���'��H��="H�5�>H�81��'��H��="H�5�4H�81��4��ff.���AUI��ATI��USH��H�-%>"H�����H��ttH��H���
������H��L�����H��H��tNH��������uqH������H�5n<"H�=w<"H�����H��t6H��H�¾�&��H��L��[]A\A]�H�="H�5�3H�81���3��H�U@"H�5�/H�81���&��H��<"H�5�=H�81��&��H�%@"H�5%>H�81��&��@��SH��H�OH�W�wH�?����C 1�[�ff.�AWA��AVAUATUH��SH��HdH�%(H�D$81��D$H�D$���I����$��I�����M����M��I������
1�M��u�����@tXH��s��L����,����u�L����>��L��E1��q7��L���>��H�L$8dH3%(L����H��H[]A\A]A^A_��k������H�\$H�5<"L��H����!���|$L�l$L�d$D�|$ L�t$(t|H��>"H�t$H��H�=�������L���.>��L���6>���T$0���a���L����6���D$��uLE1��I����D$�r���L��E1��6��L����=��L����=������L��L��D��L������D$0��i(���|$�>���*��ff.�ATH�G;"I��1�US�:��H���
��H��tVL��H��H���{#����t'H�k H��1�H�5�"�R��H��[]A\�f.�H��1��3��H��[]A\�fD1�H��[]A\�ff.���UH��SH��H�5�:"���H��t}H��H�������uUH�����H���R8��H��H���<��H��tH��H������H��t
H��[]�H���P5��H�="1�H�81��#��H��9"H�5�:H�81��u#��H��9"H�5b0H�81��M0��ff.�f�PXH�5O:H��H�d9"H�81��2#��f���SH�5�9"����H��tH��H�������u'H������[�H�9"H�5�/H�81���/�����ff.���SH��H�5p9"dH�%(H�D$1��[��H��t_H��H���K����uJH���>��H��1�1�H���_2��H�<$H��t���H�T$dH3%(uH��[�����L(�����H�h8"H�54/H�81��/��ff.�@��SH��H�5�8"dH�%(H�D$1����H��t_H��H�������uJH�����H��1�1�H���1��H�<$H��t�Q��H�L$dH3%(uH��[�����'���G���H��7"H�5�.H�81��o.��ff.�@��SH��H�58"dH�%(H�D$1����H��t_H��H��������uJH������H��1�1�H���0��H�<$H��t���H�T$dH3%(uH��[������&�����H�7"H�5�-H�81��-��ff.�@��SH��H�5`7"dH�%(H�D$1��K��H��t_H��H���;����uJH���.��H��1�H������H�<$H��t ����H�L$dH3%(uH��[�D����<&�����H�X6"H�5$-H�81��-��ff.�@��SH��H�5�6"dH�%(H�D$1����H��t_H��H���
����uJH���~��H��1�H���1��H�<$H��t �C��H�L$dH3%(uH��[�D����%���7���H��5"H�5t,H�81��_,��ff.�@��SH��H�56"dH�%(H�D$1����H��t_H��H��������uJH������H��1�1�H���6��H�<$H��t���H�T$dH3%(uH��[������$�����H��4"H�5�+H�81��+��ff.�@��SH��H�5P5"dH�%(H�D$1��;���H��t_H��H���+����uJH�����H��1�1�H���O6��H�<$H��t���H�L$dH3%(uH��[�����,$������H�H4"H�5+H�81��*��ff.�@��SH��H�5�4"dH�%(H�D$1����H��t_H��H���{����uJH���n���H��1�1�H���5��H�<$H��t�1���H�T$dH3%(uH��[�����|#���'���H��3"H�5d*H�81��O*��ff.�@��UH��SH��(H�5�3"dH�%(H�D$1�����H���|H��H����
������H�����H�T$H�t$H���`��H�|$t(H�|$�tH�L$dH3%(uAH��([]�@H�5�H���,���H��HE���H��2"H�5�)H�81��z)���"���0������G�ATUS����H��L�&��tA�L��A��tN�.
��H�މ����H��H��tNH��H�����H��t>[]A\��H�^H��t���tAH�L��A��u����H�މ����H��H��u�H���-��H�_5"1�H�81�����H�����H���d�����������AUI��ATA��H��USH��(H�5B2"dH�%(H�D$1��-���H����H��H���	�����WH������1�1�H�t$H��H���43��H�|$�A�D$�����I�EH�D$A����A�H�|$�g��H���/��1�Hc�����H��H�PH� tH�PH�D$H�8�� �}H��H�p��Hc�H9���E��H���{)������Hc�H���(��H��H�L$dH3%(��H��([]A\A]�fDI�}@��t&�A��A���H���f�H�pH�x�fD���A���"�����D�����H��3"H�5�1H�81��	��H�*0"H�51H�81�����H�0"H�5�&H�81���&���T+��H�M3"1�H�81�������ff.����AUI��ATA��H��USH��(H�5B0"dH�%(H�D$1��-���H����H��H��������WH������1�1�H�t$H��H���41��H�|$�A�D$�����I�EH�D$A����A�H�|$�g��H���/
��1�Hc���	��H��H�PH� tH�PH�D$H�8�� �}H��H�p��Hc�H9���E��H���������Hc�H���(��H��H�L$dH3%(��H��([]A\A]�fDI�}@��t&�A	��A���H���f�H�pH�x�fD���A���"�����D�����H��1"H�5�/H�81��	��H�*."H�5/H�81�����H�."H�5�$H�81���$���T)��H�M1"1�H�81�������ff.����AUI��ATI��U��H��SH��8H�5@."dH�%(H�D$(1��+���H����H��H���������H������1�1�H�t$H��H���2/��H�|$�|H�T$ H�t$H���
��H�|$��H�|$ ���E����I�EA�H�D$��uI�}@�������A��H�|$�,��H����
��1�Hc����H��H�PH� tH�PH�D$H�8�� ��H�pH�xHc�H9���E��H���������Hc�H������H��H�L$(dH3%(��H��8[]A\A]�fDH�5bL���9&��H������H��/"H�5�-H�81�����H��H�p���f����k��A���
��������2��H��+"H�5�"H�81��"��H�3/"H�5K-H�81����H��+"H�5�,H�81�����'��H��."1�H�81��r���m��ff.�f���AUI��ATI��U��H��SH��8H�5�+"dH�%(H�D$(1�����H����H��H����������H�����1�1�H�t$H��H����,��H�|$�|H�T$ H�t$H���D��H�|$��H�|$ ���E����I�EA�H�D$��uI�}@�����i��A��H�|$����H�����1�Hc��Z��H��H�PH� tH�PH�D$H�8�� ��H�pH�xHc�H9���E��H���C
������Hc�H�����H��H�L$(dH3%(��H��8[]A\A]�fDH�5L����#��H������H�H-"H�5o+H�81�����H��H�p���f������A���
���������
��H��)"H�5o H�81��Z ��H��,"H�5�*H�81��R��H�s)"H�5L*H�81��:���$��H��,"1�H�81��"�����ff.�f���AUI��ATI��US��H��H��H�5�)"dH�%(H�D$1���H��������H��uRH�$�5
��H��H�ھH���������H�L$dH3%(L���|H��[]A\A]��I�EH�$������t�H���)�����f��uH�����t�����
��fD����H�<$H������H��H�$�c���H��'"H��1�H��I�����H��H����L���$���!�����I�}��t�H���e���@��tEH��H����V���H�������H���5�H��H������H�+"1�H�81��v��fD���H��H�$�ƒ��1�1ҾL����#�����1�1�1�L���y��H��H���M���1�1ҾL���#������1�L���=
��H��H���!���1�1ҾL���#�����1�L������H��H�������1�1ҾL���d#���o��1�1�1�L���A�H��H������1�1ҾL���4#���?��1�L����!��L��H���Z#��H�������H��)"H�5�H�81��Y��f�1һH�����������1����
��H�M&"H�5H�81����H���!���~������f���AWAVAUATI��UH��S��H��HdH�%(H�D$81�H�=,"�H�D$�����FI�$�I�D$L�D$ 1ɺH�5�+"H�D$���H�=�+"L�l$ H�����;��A�����I9�t)H�=�+"L�l$ H���+���A�����I9���H�|$(�}���H��I�����H��I������H��Hc�H�T$�W���H�|$I���Z��H�t$1�����H�����H��H����1�H�t$M��L��H���U������H�|$E1���������P���ZH�|$E1�D����-���7H�|$1�M��������H�t$H��� ��H�VH�vH���1������H�uH�E tH�uH�T$H���)������H�t$H�����H���K��H��H�L$8dH3%(��H��H[]A\A]A^A_�DHc�I�|�H��uB����������7�H��H�����W���H�|$ @�����\���A���=���@���H�D$H����H�|$����H�|$H������H����H�D$����I�$�y����H�=
A������Y��H��H�?)"����I9�������\���@H�=�$��'��H��H�)"�X�����H�=$����	H�=$H��("����H��("�������A���D���H���HD�H�|$�������f�H�D$��u����H�����H��%"1�H�81��"�����ff.�f���USH��H��tQH�z#"H��H��""1�H�8��!��H��H�������uaH�k 1�H�5�	H����H��t4H��H��[]�f��+��H��tH��H�#"H�8���H�����H�%"1�H�81��u��H��"H�5-#H�81��]��ff.�f���SH��!"H�5#H��"H�H�;��H��$"H�;H�5�"H�H�X""H���H��""�����H�u�H��H�5yH����H�;�����H����H�5m�����H�;�H�)�H�5����H�;1�H�q�H�51���H�;1�H�9�H�5����H�;1�H�!�H�58���H�;�����H�f�H�5����H�;H��H�5�t��H�;H��H�5�^��H�;1�H����H�5*��V���H�;1�H���H�5��>���H�;�����H�/�H�5�!�#���H�;�����H��H�5�!����H�;�����H���H�5�!���H�;�����H�.�H�5�!����H�;�����H�s���H�5�!���H�;�����H�X��H�5v!���H�;1�H�@�H�5����H�;1�H�x�H�5��l���H�;1�H���H�5��T���H�;1�H���H�5��<���H�;1�H� �H�5��$���H�;1�H�X�H�5�����H�;1�H���H�5���H�;1�H���H�5�����H�;�H����H�5=���H�;�H����H�5� ���H�;�H����H�5| ���H�;1�H���H�5_�s���H�;�H�5_ �O��H�;�H�5Y �;��H�;�H�5T �'��H�;[�	H�5J ���f���H���S����H�H��H�Ѓ��f���UH��SH��H��H�|$H�t$����H�����H�|$H�7�� u!H��H�����)��H��H��[]��H�GHcЉ�H9�uH����H��H��[]�H�����ff.�@��H��H�|$H�t$�i��H�|$H�7�� u!H��H�������H�D$H����H�GHcЉ�H9�uH���H�D$H���H���/��ff.�@��UH��SH����tF�i�����1�Hc��m���H��H�xH� tH�x���B����t7���tH��H��[]���������H��"H�5�H�81��'��H��"H�5�H�81����ff.�@��H��H��H�t$�K��H�|$�1���H�����H�������t
�H���H�E"1�H�81�������H��H��H�t$���H�|$���H���y������t
�H���H��"1�H�81��g�����H�="SH�5H�8�U��H��"H�o"H�5�H��H�H���H��"H�;�H�5�H�H������H�;�H�>���H�5�����H�;�H����H�5�����H�;�H����H�5����H�;�H�����H�5����H�;1�[H�����H�5��x���������UH���SH��dH�%(H�D$1���H��H�����H������H��H�����H����H�����H��H���t��H�t$H������H��Hc�H�t6�W��Hct$H��H�t6�E��H�T$dH3%(u
H��H��[]��	��fD��AUI��ATUSH��(H�_D�gdH�%(H�D$1��"	��I�H�D$L9�s,DH�k�H��H��H��K�H�|$H�����I9�w�H�5�!"I�}�H�L$���H�|$H�D$���H�D$H��� u3H����H��H���w*H�L$dH3%(uH��([]A\A]�@H�P������H�=>!"H�5�1������H�9�� u!H��H��H���Hc�H9�u�:1��fDH�AH�yH���P���ff.�f�UH��SH��H�5�"��H��tsH��H��������xH���[]�H�5�"H���Y�H���1��H�hH�����H�����H������uH�����u�H�=_ "H�5�����H�"H�5�H�81�����ff.���������H��"1����ff.���ATUSH������H�������H��ƒ���tw��urH��H��H�5@�!��H��I���0
��L��H���%�H��t/@��tH��H�L���K���H��[]A\�H���8���H����L��T��#���H��[]A\�H���S����ATUS����H��ujH�.H��H�5��!�h�I��H��taH��"H��H�0�]��H����H�5�"H��tX1�1�H�������tsH�L��H����H��[]A\�f�H�5I�!H����I��1�����L��H����H��[]A\�@�H�=��o���1�1�H��H��H�"�y���u�H�����L��H���B�H��[]A\ú1��>���H��"H�5�H�81�����fD��USH��H�5��!H���W�H���tH��H�H��1ɾ*�j�H��H��[]�H�����H������USH��H�5P�!H����H���tH��H�H��1ɾ,��H��H��[]�H�����H������H��H�5�!���1ɺ��!H������H���ff.���AT1�USH��H��dH�%(H�D$1��D$�r��H��t\�5�"H��H���\���I����L��H��H������H������H��H������H�T$H��H�=A��HcT$��u!1�H�L$dH3%(u*H��[]A\�fDH�5y"H�TL�����������ATI��H�=T���UH��SH��H��0dH�%(H�D$(1�H�T$H�t$H�t$L�D$D�L$ �j�H�ƋD$��uOH��� u/H��H��H�u���H�L$(dH3%(uTH��0[]A\�DH�VH�U�V��f.��5�"L���"��HcT$H�5�"H��H�T�������=��ff.�f���AVE��AUI��ATI��UH��H�5�"SH��L���6�E��M��L��H��H��H��[]A\A]A^�������AVE��AUI��ATI��UH��H�5R"SH��L�����E��M��L��H��H��H��[]A\A]A^������H���H�|$����H�|$1�����H�5�"H����H��tH�5�"H�L$�H�����H���f.���S�H��H�|$�h��H�|$1��l��H�5�"H��H��t51�1�H���a���H��tH�5<"H�L$�H���B���H��[�@�H�=�#����H��H�="�ff.���S�H��H�|$����H�|$1�����H�5�"H��H��t51�1�H������H��tH�5�"H�L$�H�����H��[�@�H�==#�w���H��H��"�ff.���ATI��5E"UH��S���1�H�=nH����H��1�H��t<H�CH� uH�C H�8�b���I�$H� u%H�[ H�{��H�E�[]A\�f.�H����f.���USH��H�5�"H�|$��H�5&"H����H��thH�5�"�H�L$H������H��H���w
��1�H���}��H��H������H���e��H��H�����H��H��1��X��H��[]Ð��AVAUATA��UH��SH��dH�%(H�D$1����H������5�"H��H���Z���5�"H��I���I��H�5�"H��I����H�5�"H����E��tH�����u3H��D��L��������H�L$dH3%(��uiH��[]A\A]A^�@H�������u�H�������Å�u�H�T$H��H�=?E1���HcT$H��A�ą�t�H�5/"H�TL���r�������ff.���UH��SH��(dH�%(H�D$1��~��H������5�"H���F
��H�5�"H����H�����tH��H�����H�����H�5�"H�\$H�$H��t7H�(
"H��H�8���H�T$dH3%(uEH��([]�f��H�=	�O�H��H�u"�1�H�=7�2���������fD��ATA��U��SH��@�5�"dH�%(H�D$81��d��H�T$H�t$D�d$$H�D$H��H��"H�=o�l$(H�D$�D$ �	�HcT$��u0H��1�H��t���H�L$8dH3%(u)H��@[]A\��H�5y"H�TH�����1���������U1�1�SH��H��(H�wH�?dH�%(H�D$1��S���H��tmH�H�5+"H��H��H�$HcSH�TH�T$HcSH�TH�T$�����H���+��H��H���@�9CuH�L$dH3%(H��uH��([]Ð1����g������AVI��AUI��ATU��SH��H��dH�%(H�D$1�H�"�D$H�8���5Z"H����
���I���q��L��H��H���c
��Hc�L�����H��H���M
��H�T$H��H�=.����i�HcT$H����H��
"H��H�0�g��H��tBH�5#
"H���C��H����A�EH�L$dH3%(��H��[]A\A]A^Ð1���@L�%�
"��H�=��I�$�g��I�$� �H�=��M��I�<$�1�A��H�
&H����Y������@H�59"H�TL���|��1��S�������H��
"H�5jH�81������ATUH��SH��H��dH�%(H�D$1��D$������uwH�V
"H�8���5�"H���>
��I��H�T	"H�8���H��H�����H�] ����L��H��H�����H��H�����H�T$H��H�={������H�D$dH3%(urH��[]A\�DL�%i"��H�=��I�$���I�$�#�H�=z
����I�<$�1�A��H�
�H�\�������������ff.�@��ATUH��SH��H��dH�%(H�D$1�H�'	"�D$H�8���5s"H������I��H�"H�8�u��H��H����H�] ��l��L��H��H���^
��H��H���S
��H�T$H��H�=�����o��HcT$��u&1�H�L$dH3%(��H��[]A\��H�5�"H�TL���,����f.�L�%"��H�=�I�$���I�$� �H�=:�u��I�<$�1�A��H�
NH����������������AWAVI��H�5��!AUATU��H��SH��H�����I�čE����I�>M�n����H�D$����H�������H��ƒ����������*���L��I������L��I������I��H�����M����L��L����������E1���tdL��L���I������L��L���v�����M��t1�L���XL�����H��tJH��H��[]A\A]A^A_�I�FH�D$�#���f�H�|$��I���H���9���������H�5�	"L���y��H�="H�5
1���H��	"H�5�
H�81��l���H��	"H�5�H�81��T���H�5U	"L���%��H�=�"H�5�1��@�H�51	"L�����H�=�"H�5{1���ff.����H��H�5��!���H���D���H��H�H�D����AUATUH��SH��dH�%(H�D$1�����H������xH�E�ƒ����f���]H��H��tNI��A��u	H�����ucI��H�$L�����H�5M�!H�����L��H����H��H���/�����H�L$dH3%(H����H��[]A\A]�D�����u�1�1�L�%}
����H�$H��pDH����I9���L��H���-����uH�����t�����tw�H���(��H�<$H������H��� t$H��H����H��L9�I���� u�H�C�f�H�SH��L9�~�H�<$�L���r�H���DI������1�H��������H�����$�H�=�"H�5������AUH�5��!ATUSH�����H�����H��taH��H���.��Hc�I���C��I��E��~01�f���H������H���K�L��H�����D9�u�H��L��[]A\A]�DH��[]A\A]��f���ATH�5S�!US���H�����1�1ɾH��H��� ��H�@H���L�dH�=
"H���`���L��H��H�����1�1ɾH������H�@H���L�dH�=�	"H���|���L��H��H������1�1ɾH�����H�@H��eL�dH�=q	"H����K���L��H��H���}��1�1ɾH���<��H�@H��IL�dH�=	"H�������L��H��H���1��1�1ɾH������H�@H���L�dH�=�"H���8���L��H��H������1�1ɾH�����H�@H���L�dH�=u"H�����g���L��H��H�����1�1ɾH���X��H�@H��uL�dH�=!"H���`����L��H��H���M��1�1ɾH�����H�@H��YL�dH�=�"H��������L��H��H�����1�1ɾH�����H�@H���L�dH�=y"H�������L��H��H�����1�1ɾH���t��H�@H���L�dH�=%"H����7���L��H��H���i��1�1ɾH���(��H�@H���L�dH�=�"H�������L��H��H�����1�1ɾH������H�@H��iH�lH�=}"H��tH���H��H��H������H��[]A\�DH�=M�	��H��H��"����H�=�����H��H�"�H�=o�
��H��H��"�0���H�=B���H��H��"����H�=��o�H��H��"�X���H�=��
�O�H��H��"���H�=���/�H��H��"���H�=����H��H��"����H�=
����H��H�m"���H�=<����H��H�U"�<���H�=���H��H�="����H�=����H��H�%"�d���H����I�����H����I���4���H����I������H�����I�����H�����I�����H�����I���$���H����I�����H����I�����H����I���p���H����I������H���x�I���X���H���h�H�������H��H�5Q�!���1�1ɾ+H���+��H�@H�xH�DH���f�H��H����@��H��H�5�!���1�1ɾ-H������H�@H�xH�DH���f�H��H�����@��H��H�5��!�l��H����H��������?H9�w
H�DH���H��H����ff.��PXH�5�1�H��H�=�"�e�DPXH�5�1�H��H�=�"�E�DPXH�5H��H�T�!H�81��"�f���H��(H�5Y�!dH�%(H�D$1����H��t>H�t$H��H�T$����t$���t
H�|$���H�L$dH3%(u
H��(��t�����ff.�@��H��(H�5�!dH�%(H�D$1��,��H��t>H�t$H��H�T$����t$���t
H�|$�>��H�L$dH3%(u
H��(����/�ff.�@��H��H�5Y�!dH�%(H�D$1����H��t@1�H��mH�������H��tH�<$���H��H�t$dH34%(H��u
H����r�����ff.�f�PX1�1�H��H�=�"��f.���USH��H��H�t$H�5��!���H��tN1�H�|$H��t
H�|$���H��1Ҿ7H���d�H��t8H�T$H�5s"H�����H�D$H��[]�H�0�!H�5�H�81����R���f���H��H�5)�!���H��tH���o��H��H�������~���ff.���H��H�5�!�L��H��tH�����H��H�H�D��>���ff.���UH��SH��H�5��!���H��t1H�5�!H��H������H��tGH��H�������u"H��H��[]�H�B�!H�5�H�81��	�H�=r"H�581����H��!H�5��H�81����ff.����H��H�5	�!�l��H��tH�������H�H��H�Ѓ���Y���f���H��H�5�!�,��H��tH�����H��H�H�D�����ff.���USH��H�5��!����H��tfH��H������H�����H�����H�8uH��H��[]�f.��H�5��H����H���D��H��H���9��H��H��[]����f.���H��H�5��!�\��H��t)H�����H��tH��H���.��fD�H����9���f���H��H�5��!���H��tH������H��H���������ff.���AUATUSH��H�5c�!����H��t}H����H��H��tYH���I�Hc�I���^��I��E��~+1�@��H����ÿ��H���;��L��H���0���D9�u�H��L��[]A\A]�DH��A�[L��]A\A]��O���ff.�@��USH��H�5��!����H��tDH�����H��H��t%H�����H��H�����H��H��[]���H��H��[]�����ff.����H��H�5I�!���H��t)H����H��tH��H���N��fD�H������f���SH�5��!�_���H��t6H��H���?�����x
H������w�[���+��[��/���ff.�@��ATI��USH��H��H�?dH�%(H�D$1��� �H����Hc�H9��������woH�t$�L��@�l$���H�sH� u-H��L������H�L$dH3%(u&H��[]A\�@H�s��f.�H�{������H�=�!H�5�1�������1�@��uH�����t
�����t�@H��H�5��!�4���H����H�����ff.�f�AVAUATI��USH��H��0H�t$H�|$dH�%(H�D$(1��_��H�5@�!H��蠾��H���tH�5@�!H��H��1����H��I�����L�hL�����H���T���H�t$H�>H���� ��H����Hclj�H9����t`H����H��H�����H��Ɖ��K���~0��u[L����������M����A�}����x���@��u@Hc�H�DH�T$(dH3%(��H��0[]A\A]A^���u�6������H�=E�!H�5�1������H�~�)����H�v�8����M��t{H��!H����1�H�=�����H�D$H��L��H�L$�L�d$H�D$�����@���@L����������M����A�}����}���f�H�I�!H��td1�H�={��V��H�D$H��L��H�L$�H�D$�W������f�1��	���f��H�==����H��H��!�%����H�=������H��H��!�|���H���!�p���H���!�d������H���!H�50�H�81��[���V�������ff.����ATI��UH��S��H��dH�%(H�D$1�H�$��7���H�uL������H�L$dH3%(��H��[]A\�Hc�H�|�H��u
����t��H���H�$H��t9H���Y��H�<$H��u��H��t7H�$��t��@H���HD�H�$���������H�$��u��E����I�f���1�����DAWAVI��AUATI��UH��SH��H�5b�!H�$�褺��H�5E�!H��襺��H���>H�5E�!H��H���
��H�����L�hL�����H��1�A��H�5�!H��A������H����E����D��H���~�������~1����L�������xM����A�}�&���@��u+�D$�����L$�����u�������H�߉L$�t��H���\���L$H�$I��D�H�=g�!H�5��1�����f���u��&��H�ŋ��t
H�<$��@H�����D�EH�$�H�=�!I��1�H�5(����L����������M����A�}�>�����f�H������H��H����H����H��I��H�K�HD�M��LD�����H�����H���h��ATI�ٹUD�1�H�5��H�T$H�=e�!����H�-�!H��H��[]A\A]A^A_�H�-�!��H�$�u��H�$H�Ǩt$�������H���!H�5k�H�81����������
��%�D��UH��S��H��dH�%(H�D$1�H�$��~uHc�H�|�H��uG����uOH�$H������H�5}�!H���H��H�����H�L$dH3%(uXH��[]�@�K��H�$H��u1�1����F��fDt���@H��耾��H�<$���H��HD�H�$�o������ff.���SH���#��H�5��!H��1�H��[�J���f.���UH��S��H��dH�%(H�D$1�H�$��~uHc�H�|�H��uG����uOH�$H�����H�5}�!H���H��H������H�L$dH3%(uXH��[]�@�;��H�$H��u1�1����6��fDt���@H���p���H�<$���H��HD�H�$�o������ff.���SH�����H�5��!H��1�H���[�:���f.���U��SH��H��dH�%(H�D$1������t��uH�D$dH3%(uZH��[]�@�5V�!H�����H�5[�!H��H�$�'��H�5��!H�����H��t�H�53�!H��H���;�������@��SH��H�t$@��urH�����tiH��ƒ���t\��uWH�5z�!�5���H�|$H������H�L$H� t*H�I1Ҿ\H���7��H��tH�D$H��[��H�����������USH��H�5�!H���Ǵ��H�5��!H��H��赴��H��t#H��H���վ������HE�H��[]�H���!H�5w�H�81�����D��USH��H��H�5��!H���T���H��H���9��1ҾH��H���g��H��t
H��H��[]������U1�H�R�!SH���X�H�����H�����H��t6H��1ɺ�!H�����H�] H��H�ߋ5\�!�w��H��H��[]�H�=v�!H�5v�1�������USH��@��uYH�����tPH��ƒ���tC��u>H��H�5��!�f���H��H���u�&����H�����H��H��[]�f��k����������f���USH��H�5`�!H������H�5��!H��H������H��t#H��H���E������HE�H��[]�H�N�!H�5��H�81����DAWAVAUATUSH��H�|$H��������t����H��[]A\A]A^A_��@����@����H�|$H�-�!���L�|$H�="�M�'M�wM��I��A�� A��M��t*I�WI�w脼��������H����thH�}M��u�L��L�����H��1�[]A\A]A^A_��H������g��������
tA@��t	���N���襹��H�D$�?���H�	�!L��H�5o�H�81�����D�S��H��[]A\A]A^A_�@Hc�H��!H���D����f���ATUH��SH��H�5{�!�6���H��I���k���H����a���1�HcӾ{L����=���H��t!1�Hcվ|L���&���H��t[�]A\�H�=��!H�5���$��H�=��!H�5������AWI��AVAUA��ATUS��H��HdH�%(H�D$81����H�D$���0�tH�.A�H�D$H��@���G���H�|$��Lc��G1�L���{���H�D$H��@��u-H�����t$H��ƒ����s�H���d@1��������AH�5��!L�����I��H���gH�5�!L��L�=	��@���H��H�$��H�@H��H�D$����L��������H�t$H� �qH��L�������L��Ɖ���������Ic�L�>��f�Hc�L�t�I������t�����'H�.H�FH�D$H��@�����������H�|$��Lc������H�|$���H�|$H��� ��H����L9����N��H�|$���@H�|$Hc����H�D$H�L$8dH3%(�#H��H[]A\A]A^A_���G����nH�.��tH�D$A����H�FA�H�D$����@L��H)����H�|$��H�G�;����H�v����E����H�h�!H����1�H�=���y��H�D$H�<$H��H�L$ �H�l$ H�D$(L�t$0�o�����f.���H����DL��H�4$�$��H�4$H��I��H�D$�����8����ZH���!H����1�H�=�����H�D$H�<$H��H�L$ �H�l$ H�D$(�����m�������H���y��������L����������.���f�L�������+E���`H�D$�x��������DL���h�����E���_H�D$�x������DH�|$H�4$�b����S�H�4$I��H�D$H��u.M����L�t$���H�.��������f�M���LD�L�t$�����������D�
H�=�����H��H�M�!����H�=���_��H��H�%�!�`�����A�������H��!���H��!����H�=B�!H�5��1��������H���!H�5|�H�81�����"�H�.��������������1�贫���������"���������R���f���1��E���D��AUATUSH��dH�%(H�D$1�@���H��H�������H���ƒ���������H�5�!蝪��H�5��H��H���+���H�5��!H�����H������,
H�5��!H�����H�$H��tH��诸��H��I��H��衾��L������H�5R�!H��誺��H�$H��t&H�5�!H���PI��L�����1�1�H���j���H�5#�!H��E1��h���H�$H��tH������I��H�5��!H���D���H�$H��tKH�����I��M��t;H��t6L��H��������c	L��H���'������v	H���������S	H�5��!H�����H�$H�������H�������H��у�����E1��C�H����I9���H��J�<�����H��H���8�������H�$I��H��� u�L;`}UH�@ ��@�H�L$dH3%(H���PH��[]A\A]�f�H�����H��H���Ͱ�����&H�5��!H�����H�$H��t4I��L������H�5��!H��I���ϸ��H�$H��u,L��1��3fDH�5��!H��詸��H�$H��tE1�I��L��豾��H��L	�H����H�5S�!H���s���1�H�$H��tH�Ǩ��������H��H�;�����H�5��!H���7���H������H�5��!H������H�$H��t���H�H��H���L��H�5��!H�����H�$H��tH�Ǩ�x�#����H���Y���H�5�!H��躷��I��H�$H��tZ1�1��d���H�=��!H��L��H��I��蘻��H�5��!L��H�����L��H�5|��H������H�
�!H�8�H�5��!H���D���H������H�5y�!H���)���I��H�$H��t_1�1��ӱ��H�=�!H�u�L��I��H������I�$�� �ZH��I�t$��H��������XH�w�!H�8��H�5�!H��讶��H�������H���:���H�5�!H��苶��H�$H��t3H�����H�4$H��� �)H��H����H���F������H�5��!H���?���H������H�5��!H���$���H�����ulH�5}�!H���
���H������aH�5:�!H����H�$H��t(H��H�����5贼��H�}�!H�(H�����k���fDH�5	��H��衩��H�J�!H�8�t���L�%��!��H�=��I�$�o��I�$��H�=��U��I�<$�1�A��H�
.�H�ԯ�a�������@H�5���H���i���H���!H�8����L�%Y�!��H�=p�I�$����I�$��H�=j�����I�<$�1�A��H�
��H�L��٨���q���@H�5���H���!��H�:�!H�8����L�%��!��H�=�I�$�_��I�$�!�H�="��E��I�<$�1�A��H�
�H�Į�Q�������@H�5���H���������@H��L��H���ҹ�����h���H�=������W���f�H��H�5f��H���.��H�g�!H�8����L�%��!��H�=�I�$���I�$��H�=���r��I�<$�1�A��H�
K�H���~������f�H�VHc�H9��dH�v�����H��H�5��H�����H���!H�8����L�%N�!��H�=e�I�$����I�$��H�=������I�<$�1�A��H�
��H�A��Φ���a���f�I�T$Hc�H9���I�t$���D軿��������@���������@H�����H���<����H�=Ʊ�O���H��H���!H�$���@L�%i�!��H�=��I�$���I�$��H�=#�����I�<$�1�A��H�
��H�\�������@H��!��H�=�H����H��$�H�=|��w��H�;A��1�H�
V�H����脥�������L�%��!��H�=��I�$�'��I�$� �H�=B��
��I�<$�1�A��H�
��H�������������H�=�!H�5��蜿��H�����H�=��!H�5��1�����H�=��!H�5���l���H�=��!H�5N��Y���H�=��!H�5���F���H�=��!H�5��1��1���H�=��!H�5������ff.���AUI��ATA��H��USH��H��H�57�!dH�%(H�D$1�芟��H����A�D$�����I�mA���
M�eH�5��!L���R���H�5��!L��H��I���-���L���5�H�5��!H����H���}����t(H�5j�!H�$H����H��H��豿��H�5��!H��H���Ϟ��L���G���H��H���
H�C �5U�!H��H���f��H�5��H���w���H�5��!L�������5*�!H��H���7��1�1����H��H�L$dH3%(��H��[]A\A]�@H�5��!H��t\H�E�!1�1�H�8���I��������	H�=�迸��H��H�u�!����	H�=��蟸��H��H�M�!����H�=������H��H�=�!�����D���n���H�=w�!1�1�������H�=b�!H�5r�1����@��AT�USH��H�|$���H�|$1����H�5
�!H��H���׭��H�5�!H���ȭ��H��t9H�5��!H��H�L$����H��H��!H��H�0���H��uH��upH���H��[]A\��H�����H�5y�!H���ٜ��I��H��tPH��H�5�!�œ��L��H������H�5X�!H��H��蕜��H��H��[]A\�H���!H�53�H�81��ѻ��H���!H�5��H�81�蹻��f���AT�H�=G�US����H�=9�H���!�϶��E1�E1�1�H�-�1�1�H���!������!����E1�E1�1�1�H�'�1�蚞���x�!���eE1�E1�1�1�H����q����K�!���TH���!H�5��H�;���H�-��!H�;H�5�H�E���H�}H�5ʧH�9�!H�2�!H��2���H�}H�5��H��H�
�!����H���!H��H���!H�2���H�}H���!H�5�����H���!H��H���!H�2�Ϥ���J���L�%��!H�}H�5��I�$诡��H���!H�5��H��H��f��H�;H�5��'���H�=���F���H�;E1���H������H�=.�����H�;E1���H������	H�=E���H�;E1���H���l���H�=���˴��H�;E1���H���C���H�=��袴��H�;E1���H������H�="��y���H�;E1���H�������H�=u��P���H�;E1���H�������H�=Y��'���H�;E1���H������H�=>����H�;E1���H���v���H�=��ճ��H�;E1���H���M���
H�=��謳��H�;E1���H���$���H�=��胳��H�;E1���H������H�=���Z���H�;E1���H�������H�=���1���H�;E1���H������H�=������H�;E1���H������H�=���߲��H�;E1���H���W���H�=��趲��H�;E1��H�ƺ�.��H�=��!�H�5���v���H�=���u���H�;E1���H�������
H�=T��L���H�;E1���H�������
H�=��#���H�;E1���H������H�=����H�;E1���H���r���H�=���ѱ��H�;E1��H�ƺ�I��H�;H�S�H�5��蓻��H�;H���H�5���}���H�;�H���H�5�����H�;1�H���H�5l��Z���H�;�H���H�5���?���H�;�H� �H�5���$���H�;1�H����H�5������H�;�H���H�5|���H�;1�H�u���H�5t��٥��H�;�����H�j��H�5k�辥��H�;1�H��H�5V�覥��H�;H�G�H�5F�耺��H�;�H�59��l��H�;�H�57��X��H�;�H�58��D��H�;�H�59��0��H�;�H�58����H�;�H�5m����H�;�H�5������H�;�H�5�����H�;�H��H�5��դ��H�;�H�F�H�5�躤��H�;1�H�>��H�5��袤��H�;�H�Ӵ��H�5��臤��H�;1�H����H�5���o���H�;�H�P���H�5���T���H�;1�H����H�5���<���H�;�����H�����H�5���!���H�;1�H����H�5���	���H�;�H����H�5�����I�$H�}H�5���
���H���!1�H�=��!H�5��H����H�;H�5����謿��H�;�����H�=�H�5�董��H�;H�5��R��H�;1�H����H�5���j���H�;�����H����H�5H��O���H�;1�H�S��H�5P��7���H�;�����H�X��H�5&�����H�;�����H�]�H�5������H�;�����H�2�H�5�����H�;�H�G��H�5���ˢ��H�;�����H�,��H�5������H�;1�H����H�5�����H�;1�H�,��H�5��耢��H�;1�H����H�5���h���H�;1�H����H�5���P���H�;1�H����H�5���8���H�;1�H���H�5��� ���H�;1�H�t��H�5t�����H�;1�H���H�5X���H�;1�H����H�5H��ء��H�;�H�	��H�5=�轡��H�;1�H����H�5.�襡��H�;1�H�Y��H�5��荡��H�;�H����H�5	��r���H�;1�H����H�5���Z���H�;1�H�^��H�5���B���H�;1�H����H�5���*���H�}�H�5�����H�}�H�5������H�}�H�5������H�}�	H�5������H�}H�5��H�����H�}�	H�5�����H�}�!H�5�����H�}��H�5���m��H�}�H�5���X��H�}�H�5���C��H�}��H�5���.��H�}�H�5�����H�}�H�5�����H�}�H�5������H�}�H�5t�����H�}��H�5v�����H�}�H�5}����H�}��H�5|����H�}H�5��H����H�}�H�5y��l��H�}�H�5p��W��H�}� H�5g��B��H�}�H�5`��-��H�}�@H�5Y����H�}�H�5R����H�}�H�5V�����H�}�H�5������H�}�H�5�����H�}�H�51����H�}�H�5:����H�}�H�5?����H�}�H�5F��p��H�}�H�5?��[��H�}�H�5C��F��H�}�H�5A��1��H�}�H�5=����H�}�H�59����H�}�H�50�����H�}�H�5,�����H�}�H�5(�����H�}�H�5 ����H�}�H�5����H�}�H�5����H�}�H�5��t��H�}�H�5���_��H�}�H�5���J��H�}�	H�5���5���	H�=���4���H��謼���
H�=��H��!����H��茼���
H�=��H���!��H���l����H�=��H���!�ԧ���H�=Y�H���!輧���H�=��諧���H�=��H���!蓧���H�=��H�P�!�{����H�=��H�0�!�c����H�=v�H��!�K����
H�=k�H���!�3����H�=a�H���!�����
H�=Z�H���!�����H�=M�H���!����H�=G�H�p�!�Ӧ���H�=!�H�P�!軦���H�=�H�0�!裦���H�=�H��!苦���H�=�H���!�s����H�=
�H���!�[����H�=��H���!�C����H�=��H���!�+����H�=��H�p�!�����H�=��H�P�!����H�=��H�0�!����H�=��H��!�˥���H�=��H���!賥���H�=��H���!蛥���H�=��H���!胥���H�=��H���!�k����H�=��H�p�!�S����H�=��H�P�!�;����	H�=��H�0�!�#���[]H��!A\�H��!H�5��H�81�诩��H�п!H�5��H�81�藩������lj�����USH��H�5��!dH�%(H�D$1��
���H����1�H��H���D�������Hc�1��"���H��H�@H� tH�CH��H��H�$����H��� t7H�CH�4$H�SH)�H9�4H���{���H��H�L$dH3%(u8H��[]ÐH��H�4$H�S����H�
x���H�5��H�=�耐��蛮��H�=$�!H�5��1�膨��H���!H�5 �H�81��n���ff.���ATUSH��H� H�t$��H���!H��H�|$H�0���H��u@H�|$�~���1�1�1�H��I���ݨ��H��H��teL���ݺ��H�k H��H��[]A\�DH�5)�!H�|$臈��H����H���F���H��H��u�H�=G�!H�5�1�詧��f�1�1ҾL���/����:���H�=Ӽ!1�L��H�5��!�2���L��H���G���H���a���H�o�!H�5��H�81��F���H�=��!H�5H�1��1���H�R�!H�5��H�81�����f���H���!1����ff.���USH��H�5g�!芇��H��t5H���}���H���%���H��H��tOH��H�����H�߅�t#H��[]���H���!H�5:�H�81�舦���c���H�=�!H�5��1��n���H�=��!H�5��1��Y���f�PXH�5�H��H�d�!H�81��2���f���H��H�5��!dH�%(H�D$1��D$贆��H��t.H�t$H���R����t$H���֖��H�T$dH3%(u
H����|����ǫ�����H��H�59�!�\���H��t3H���ߦ��H�@H�xH�DH���fDH��H���d�������ff.�@��ATUH��SH��H�5ӹ!���H��t6I���t!H�H��L��諍��[H��]A\�_����H��蠪��H�������fD��H��H�5y�!dH�%(H�D$1�茅��H����H�����H�ǸH��t;H�@H�xgH�D?H�5#�!H�$H��t2H���!H��H�8��H�T$dH3%(u2H���fD�H�=��觟��H��H���!��3�����<���������ATUH��SH��H�5��!�Ƅ��H����I��H�#�!H��H�0踼��H��u#��t>H�H��L��� ���[H��]A\����@H�5Q�!H��t$H��1�1��(���H���u�H���8���H����H�=���ߞ��H��H�
�!�H���!H�5�H�81��k���ff.���AUATI��USH��H�-з!dH�%(H�D$1�H�����H����H��L��H���Ƀ��H��H��tuH��H���f���H�t$H��I���V���H��I��蛚��H���葚��9�t1�H�L$dH3%(u*H��[]A\A]Ë$;T$u�L��L���|�����H�����蜨���G���H���!H�51�H�81�����ff.�@��USH��H��@��udH�����t[H��ƒ���tN��uIH��H�5��!H�k �߂��H��tLH�5c�!H�=Ժ!H������H��tH�C H���C���H��H��[]�H���a���H�=z�!H�5���ޡ��H���!H�5x�H�81��ơ��fD��USH��H�57�!�Z���H��t5H���M���H�����H��H��tOH��H���B���H�߅�t#H��[]鰫��H���!H�5
�H�81��X����3���H�=ܿ!H�5��1��>���H�=ǿ!H�5��1��)���f���H�m�!SH�5��H�H��!H�8�{���H�l�!H��!H�5{�H��H�H��X���H�;H�5����H�W�!����H�;�H�S���H�5L����H�;�H�(���H�5x��ܐ��H�;�H����H�5ȗ���H�;1�H�e���H�57�詐��H�;�H����H�5��莐��H�;1�H�r���H�5��v���H�;�H�����H�5���[���H�;1�H����H�5���C���H�;1�H�g���H�5���+���H�;1�H����H�5������H�;1�[H����H�5}����f.���UH��H��SH��(dH�%(H�D$1�H�\$H�T$H��螥���t$H��1�H���͑��H�L$dH3%(uH��([]��A������H��!SH�5H�H�8�5���H�޵!H��v����1���謉���g����"����m~���X����#���H�;�H�5������H�;�H�5H�����H�;�H�5�����H�;�	H�5@����H�;�H�5T��ϵ��H�;�
H�5h�軵��H�;�H�5a�觵��H�;�H�5j�蓵��H�;�H�5r�����H�;�H�5w��k���H�;�H�5z��W���H�;�H�5~��C���H�;�H�5��/���H�;�H�5 �����H�;�H�54�����H�;�!H�5H���H�;�#H�50��ߴ��H�;�%H�5H��˴��H�;�'H�5\�跴��H�;�)H�5h�裴��H�;�+H�5|�菴��H�;�-H�5���{���H�;�/H�5���g���H�;�1H�5���S���H�;�3H�5���?���H�;�5H�5���+���H�;�7H�5������H�;�9H�5������H�;�;H�5�����H�;�=H�5���۳��H�;�?H�5���dz��H�;�AH�5��賳��H�;�eH�5��蟳��H�;�	H�5��苳��H�;�H�5���w���H�;�!H�5���c���H�;�AH�5���O���H�;��H�5���;���H�;�H�5���'���H�;�H�5������H�;�H�5�����H�;�H�5�����H�;�H�5���ײ��H�;� H�5���ò��H�;�@H�5��诲��H�;��H�5��蛲��H�;�H�5��臲��H�;� H�5���s���H�;�@H�5���_���H�;�H�5���K���H�;�H�5���7���H�;�H�5���#���H�;�	H�5������H�;�H�5�����H�;�
H�5�����H�;�H�5���ӱ��H�;�H�5��迱��H�;�H�5��諱��H�;�H�5��藱��H�;�H�5��胱��H�;�H�5���o���H�;�	H�5���[���H�;�H�5���G���H�;�
H�5���3���H�;�H�5������H�;�H�5�������6���H���^���H�;H�5��H������W���H���?���H�;H�5��H���Ͱ�����H��� ���H�;H�5��H��记���Y���H������H�;H�5��H��菰���
���H�����H�;H�5��H���p����;x��H���×��H�;H�5}�[H���P������W������UH�5��!SH��dH�%(H�D$1��y��H����1�H��H��贔������Hc�1�袉��H��H�@H� uRH��H��H�$胔����~\H�H�4$�� tCH�CH�SH)�H9�kH�����H��H�L$dH3%(uoH��[]ÐH�C�f.�H��H�S���H���!1�H�81�� ���H�A�!H�5��H�81�����H�
���(H�5��H�=O��������@��AUH�5��!ATUSH��(dH�%(H�D$1��fx��H����I���e���H��H���YL��1��x��A�Ņ�~%���L�������H��H��蘟��A9�u�1�H���}������Hc�1��7���H��H�@H� ��H�t$H��H�D$��|������H�H�t$�� ttH�CH�SH)�H9���H��耘��H������H�5��!H�\$H��t_H��!H�L$�H�8�.���H�L$dH3%(��H��([]A\A]��H��H�S���H�C�L�����H�=��跑��H��H��!�H���s���H�ī!1�H�81��@���H���!H�5��H�81��(���H�I�!H�5��H�81�����H�
y��H�5��H�=W���}�����ff.����AWAVAUI��H��ATUSH��H���!H�t$H�3�ԙ��H����H�5T�!H����H�|$���H�Ǩ������H�5"�!��H����H�|$蕆��H�Ń���H�Ã���H������y������kH�5܃!L����u��I��H����H���v������L�m�Sf�H����H9���L��H�<�H������L�pH��I���1|��L�����L���蟏��L�������z��H�E�� u�H9]~PH�E �f.��k���H�5,�!��H���
����H�=S�踏��H��H��!���f�H�D$H��[]A\A]A^A_�@L���u��A�����1�1�H��1��̑��I��H��t9I�E L��M���U�������H�=��?���H��H���!�E�����y��H�L�!1�H�81��ȓ��H���!H�5��H�81�谓��H�|$H��s���H��H�5�H��H��!H�81�腓��H���!H�5�H�81��m���H�F�!H�5&�H�81��U���D��UH�5�!SH����s��H��tZH���t��H��H���r{����u.�ɏ��H���q���H��H��tFH��H����~��H��H��[]�0������Y���H��[H��]�{���H���!H�5d�H�81��Ò��H�4�!1�H�81�谒����ATUSH����ujH�����taH��ƒ���tT��uOI��H��H�5(�!�#s��H��H��t=H�5�!L���s��H��t)H��菈��H��t4H�C H��莈��H��[]A\�H��螖��H�O�!H�5��H�81�����H���!H�5�H�81����ff.���USH��H�t$H�5��!�r��H��tBH�|$H������1�H�����H��H��tXH��H���6���H�߅�t)芝��H�D$H��[]�H���!H�5�H�81��v����a���H��!H�5v�H�81��Y���H�ʦ!1�H�81��F���fD��ATI��H�5�!U��H��SH��H��0dH�%(H�D$(1��q��H�D$H���U�E����8I�<$H�|$��uuH�5~�!M�d$H�|$ H����H�l$ �H��H���&���H�5G�!L�d$ H����H��H������H�L$(dH3%(H����H��0[]A\Ð�+���H�|$H�D$輌��H�D$H��� tH�PH�T$H�PH�t$H�|$�Ss��H�T$H�S H��u�H���!1�H�81�����f��H�=7��O���H��H���!�O����H�=��/���H��H�u�!����H��H��H�D$���y��������
���H�˥!H�53�H�81�蒏��荕��ff.�f���S1�H�"~!�m���H���E���H��t	H�C H��[�H�Ȥ!1�H�81��D���@��UH��H��}!1�SH��H�C�!H�8����H��H��t#H���K���H��tH�C H��H��[]���˂����H�Z�!1�H�81��֎��fD��H��H�5q}!�lo��H��tH���H�Ӥ!H�5;�H�81�蚎��f.���SH���!H�5��H�6�!H�H�;��u��H�ܣ!H�;H�5��H�H���!H���u��H�a�!H�5����H��H�����H�;�����H���H�5�~�d~��H�;�H�U���H�5��I~��H�;�H�����H�5��.~��H�;1�H�����H�5��~��H�;�H����H�5��}��H�;1�H�����H�5_|��}��H�;1�[H���H�5�z��}��f.����Ǣ�����AWAVAUI��ATUH���SH��1�L�eH��腝���:H����H9�}TL�5%�!L��I�6H�<�L�<��&���H����H��H�E�� u�H;]}L�5�!H�E I�6��f.�H�5�{!L���qm��H��H��u��@H������1�H���~���H��u�E1�L�e�0H����I9�}<L��J�<�蘠�������H��H���l����tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=���H��H�5��H��H�g�!H�81����H���!1�H�81����H�m �H��!H�5ԽH�81��̋��ff.����UH�5�z!SH��dH�%(H�D$1��Jl��H����1�H��H������Hc�H����1��a|��H��H�@H� uQH��H��H�$�ҏ����~[H�H�4$�� tBH�CH�SH)�H9�jH��躌��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H���!1�H�81����H��!H�5мH�81��Ȋ��H�
���H�5̼H�=��r��褐��@��ATUSH����uoH�����tfH��ƒ���tY��uTH��H9�tDH�5vy!H���k��I��H��t=H�5_y!H���j��H��t)H����m��H��t4H�C L��艟��H��[]A\�H��艎��H�:�!H�5	�H�81�����H���!1�H�81����ff.�PX1�H��H�q�!H�81��lj�����S1�H��x!譟��H�����H��t	H�C H��[����f�PXH�5��H��H���!H�81��r���f���UH��H�5qx!SH���j��H��t[H��H���!H��H�0�]���H��uH��1�[]��H�51x!H����i��H��t5H��H���9o���¸��u�H��[]�H��!H�5�H�81��߈���J���f.���UH��H�5�w!SH���gi��H��t)H��H���ǜ�������H��H����h����t"H��H��[]�H���!H�5y�H�81��q������ff.����AUH�5cw!ATUSH���h��H��tpH��I���V����Ņ�xPHc��j��I�Ņ�t-1����L����k���H����q��L��H���h���9�u�H��L��[]A\A]�fDH��[]A\A]�q����<���ff.����USH��H��H���;���H�5�v!H��H���Ih��H��t5H��H���y������tH��H��[]�fD����H��1�H��[]�����f.���UH��H�5Qv!SH����g��H��t[H��H��跗��H��H�����H��H�������t��uH���[]�@裊��H��1�[]�H���!1�H�81��׆���B���f���ATUH��SH��H���J���H��I���t��H�5�u!H��H���Mg��H��tH��L��H���zg����t H��[]A\�H���!H�5n�H�81��f���������ATUH��H�5_u!S�f��H��t-H��H���ɖ��I��H������L��H��蓄����t H��[]A\�H�8�!H�5�H�81����H���!H�5�H�81�������H��H�5�t!�|f��H��tH���?o��H��t$H��H���g��H�ϛ!H�5��H�81�薅��������ATUH��H�5�t!S�)f��H��t/H��1�H���W}��H��H��I���i���L��t�g��H��[]A\�����g��H�Ԛ!H�5d�H�81��#�����H��H�5!t!�e��H��tH�����H��t$H��H��鞆��H��!H�5޶H�81��ք�������ATUH��H�5�s!S�ie��H��t/H��1�H���|��H��H��I���v��L��t��f��H��[]A\�����f��H��!H�5��H�81��c�����H��H�5as!�d��H��tH���_���H��t$H��H���ޅ��H�O�!H�5�H�81������1������UH��H�5s!SH���d��H��t$H��H���׋��H��H��謗����t"H��H��[]�H��!H�5��H�81�趃���������H��H�5�r!�Ld��H��tH���g��H��t$H��H���>o��H���!H�5n�H�81��f���������UH��H�5ar!SH���c��H��t$H��H���'���H��H���\�����t"H��H��[]�H�?�!H�5�H�81������!������H��H�5r!�c��H��tH�����H��t$H��H���n��H��!H�5��H�81�趂���������UH��H�5�q!SH���Gc��H��t+H��H��观��H��H�����H��H��豒��H��H��[]�����f���H��H�5aq!�b��H��tH���_���H��H���3i�����ff.���AWAVAUATUSH��H�����H��I�����H��I�����H��I���5���H��I������H��H��蟚��H��M��M��AWL��H��H��H�=[�1�����H��[]A\A]A^A_�ff.�f���UH�5�p!SH���*b��H��t=H���~��H����w��H��H��tUH���%g��H��H�0�m��H�߅�t#H��[]�x���H�Y�!H�5(�H�81�� ������H���!1�H�81������#�����ATI��USH���t=H��H�H��x\H�5�o!L���a��H��t0H��H��蓅����tH��[]A\��H���8���H������H���!H�5��H�81�膀��H��!H�5ԲH�81��n���ff.���H��H�5ao!�`��H��t3H���s��H�@H�xH�DH���fDH��H����������ff.�@��UH�5o!SH���`��H��t5H���|��H���5v��H��H��tMH��H��肎��H�߅�t#H��[]��H�ѕ!H�5��H�81�����s���H�,�!1�H�81�������ff.���UH�5tn!SH���
`��H��t5H���{��H���u��H��H��tMH��H���2m��H�߅�t#H��[]�`���H�A�!H�5�H�81�������H���!1�H�81���~������ff.���ATUSH�� dH�%(H�D$1�H�B H�D$����H��uIH�>L�d$H�|$�[���H�|$H�D$��g��1�1�L��H��H���z���H�T$H�S H��t$H���D���H�L$dH3%(H��ubH�� []A\�1�1ҾH���א�����L��H�����H��I��H�D$H�C ��M��u�H���!1�H�81��}���1��Ox�����f.���UH��H��l!1�SH��H�#�!H�8軓��H��H��t#H���;a��H��tH�C H��H��[]����{����H�"�!1�H�81��v}��fD��H��H�5ql!�^��H��tH���H�s�!H�5B�H�81��:}��f.���SH�54l!��]��H��tH��H���o}��H��[�H�+�!H�5��H�81���|��f���SH�\�!H�5O�H���!H�H�;�Kd��H�d�!H�;H�5=�H�H��!H��(d��H��!H�5��H��H��߈��H�;�����H�����H�5m��l��H�;�H���H�5Es�l��H�;1�H���H�5ei�l��H�;1�H����H�5�}�yl��H�;H��}H�5	t�S���H�;1�H����H�5�}�Kl��H�;1�H�����H�5���3l��H�;�H����H�5\��l��H�;1�H�,���H�5M��l��H�;1�H�D���H�5&���k��H�;�H����H�5.���k��H�;1�H�q���H�5��k��H�;�H�����H�5��k��H�;1�H�����H�5��k��H�;�H����H�5��gk��H�;1�H�����H�5ѭ�Ok��H�;�H� ���H�5���4k��H�;1�H�����H�5���k��H�;�H�-���H�5���k��H�;1�H���H�5}y��j��H�;�H�*�H�5Y|��j��H�;�H���H�5��j��H�;�H��H�5���j��H�;�H�y�H�5*��}j��H�;1�H���H�5~�ej��H�;�H���H�5���Jj��H�;�H��H�5��/j��H�;1�H�����H�5�x�j��H�;[�H�G�H�5q�i��f.�����g������AWAVAUI��ATUH���SH��1�L�eH��赉���:H����H9�}TL�5U�!L��I�6H�<�L�<��V}��H����H��H�E�� u�H;]}L�5�!H�E I�6��f.�H�5ih!L���Y��H��H��u��@H���k��1�H���^c��H��u�E1�L�e�0H����I9�}<L��J�<��Ȍ�������H��H���X[����tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=����H��H�5�tH��H���!H�81��-x��H���!1�H�81��x��H�m �H�5�!H�57�H�81��w��ff.����AWAVAUI��ATUH���SH��1�L�eH�������:H����H9�}TL�5��!L��I�6H�<�L�<��{��H����H��H�E�� u�H;]}L�5Î!H�E I�6��f.�H�5�f!L���X��H��H����H���}���I��H��u
�H���XY��L���Pa��H��u�E1�L�e�0f�H����I9�}<L��J�<��X��H��H��I���t����tqI��H�E�� u�L;m}H�E ��DH��而��H��H��[]A\A]A^A_�I�H�E tLH��J�|=�c���H��H�5	sH��H�ߊ!H�81��uv��L���X��H�>�!H�5��H�81��Uv��H�m �H�p�!H�5r�H�81��7v�����AUH�5�e!ATUSH����V��H����H��I���B���H���J����Ņ�xTHc��\X��I�Ņ�t11�L�������ރ�H���T��H���l��L��H���(���9�u�H��L��[]A\A]�fDH�y�!H�8tH��[]A\A]�${��@H��!��H�=aH�萈��H��
�H�=���w���H�;A�1�H�
��H��`��Z���H�C�!H�5E�H�81��
u��f.���UH�5dd!SH��dH�%(H�D$1��U��H��toH���}q��H���%k��H��H��tDH��1�H���0t��H�$H��H�0�q`��H�߅�t��~��H�L$dH3%(u7H��[]��Y���H�J�!1�H�81��ft��H���!H�5��H�81��Nt���Iz��f���ATUSH����urH�����tiH��ƒ���t\��uWH��H9�tGH�5vc!H���T��I��H��t@H�5_c!H���T��H��t,H��誆��H��H��t4L���|��H�k H��[]A\�H���&x��H�׉!H�5٦H�81��s��H�o�!1�H�81��s��ff.�PX1�H��H�I�!H�81��gs�����S1�H��b!�M���H����Q��H��t	H�C H��[����f���UH��H�5�b!SH����S��H��t)H��H���'��������H��H���U����t"H��H��[]�H�
�!H�5�H�81���r���L���ff.����AUH�5#b!ATUSH���VS��H����H��I��蒊���Ņ�xLHc���T��I�Ņ�t)1���L����;|��H���3\��L��H���ȉ��9�u�H��L��[]A\A]�fDH��!H�8tH��[]A\A]��w��@H���!��H�=�]H��0���H���H�=e�����H�;A��1�H�
?�H��]��$W���H��!H�5�H�81��q��f.���UH�5a!SH���:R��H��t5H���-n��H����g��H��H��tMH��H���~��H�߅�t#H��[]�{��H�q�!H�5s�H�81��8q������H��!1�H�81�� q�����ff.���UH�5t`!SH���Q��H��t5H���m��H���Eg��H��H��tMH��H���rZ��H�߅�t#H��[]�{��H��!H�5�H�81��p��胃��H�t�!1�H�81��p������ff.���UH�5�_!SH���Q��H��t5H���
m��H���f��H��H��tMH��H���v��H�߅�t#H��[]�pz��H�Q�!H�5S�H�81��p����H��!1�H�81��p���{���ff.�PXH�5�H��H��!H�81���o��f���UH��H�51_!SH���gP��H��t[H��H���7���H��H���|t��H��H���aQ����t��uH���[]�@�#s��H��1�[]�H�;�!1�H�81��Wo���b���f���AUI��H�5�^!ATI��USH��H����O��H��t6L��H���z��L��I���b]��L��H��H���D�����t&H��H��[]A\A]�H��!H�5�H�81���n���U���D��ATUH��H�5/^!S�iO��H��t-H��H���O��H��H��I���;l����tH���O���H��[]A\����L���P��H�K�!H�5��H�81��bn��f���ATUH��H�5�]!S�N��H��t/H��1�H���'f��H��H��I���	d��L��t�}P��H��[]A\�� ����kP��H�܃!H�5��H�81���m����H��H�5Q]!�N��H��t)H���}��H��tH��H���no��fD�H������f���ATUH��H�5�\!S�9N��H��t/H��1�H���ge��H��H��I���n��L��t�O��H��[]A\��`����O��H��!H�5۠H�81��3m����H��H�5�\!��M��H��t)H��迂��H��tH��H���n��fD�H������f���UH��H�5A\!SH���wM��H��t$H��H���t��H��H���M����t"H��H��[]�H���!H�5��H�81��l���������H��H�5�[!�M��H��tH���ol��H��H���X���^���ff.���ATI��USH���t=H��H�H��x\H�5�[!L����L��H��t0H��H����h����tH��[]A\��H���xq��H����^���H���!H�5�H�81���k��H���!H�5�H�81��k��ff.���H��H�5[!�<L��H��t3H���~��H�@H�xH�DH���fDH��H���Du���_���ff.�@��ATUSH�� dH�%(H�D$1�H�B H�D$����H��uIH�>L�d$H�|$�v��H�|$H�D$�LT��1�1�L��H��H���JX��H�T$H�S H��t$H���}��H�L$dH3%(H��ubH�� []A\�1�1ҾH���7}���Bn��L��H����~��H��I��H�D$H�C �S}��M��u�H�?�!1�H�81��[j���1��d���Jp��f.���H��H�5�Y!��J��H��tH���H�C�!H�5E�H�81��
j��f.���UH��H�aY!1�SH��H�+�!H�8����H��H��t#H���|��H��tH�C H��H��[]���KH����H�z!1�H�81��i��fD��SH���!H�53�H�6�!H�H�;��P��H�<!H�;H�5a�H�H���!H���P��H��!H�5���H��H��u��H�;�����H���H�5�Y�dY��H�;�H���H�5�_�IY��H�;1�H�M���H�5���1Y��H�;�H�����H�5Z��Y��H�;1�H���H�5K��X��H�;1�H�"���H�5m��X��H�;�H�����H�5E���X��H�;1�H�?���H�5'��X��H�;�H�����H�5��X��H�;1�H�L���H�5ll�X��H�;�H�����H�5��eX��H�;1�H���H�5Dk�MX��H�;�H���H�5̛�2X��H�;�H����H�5���X��H�;�H�h���H�5_y�W��H�;�H����H�5�p��W��H�;1�H����H�5�T��W��H�;1�H�]���H�5-i�W��H�;H�iH�5A_�l��H�;1�H�����H�5i�W��H�;1�H�g�H�5�k�kW��H�;�H�|�H�5���PW��H�;[�H���H�5��4W��@���Y�����UH�5�V!SH��dH�%(H�D$1��ZG��H����1�H��H���G��Hc�H����1��qW��H��H�@H� uQH��H��H�$�G����x[H�H�4$�� tBH�CH�SH)�H9�jH����g��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�Tz!1�H�81���e��H�|!H�5�H�81���e��H�
����H�5�H�=g�M���k��@��UH�5�U!SH���JF��H��tZH���-R��H��H����M����u.�)b��H����[��H��H��tFH��H���.Q��H��H��[]�o�����w��H��[H��]��c��H�\{!H�58�H�81��#e��H�ty!1�H�81��e����SH��H�t$H�5+U!�E��H����H�|$H���p��H�|$H�D$�1a��H���YJ��H�t$H��� t,H�~Hcω�H9�u+H�vH����u����t H�D$H��[�H��H�������u��H��x!H�5��H�81��fd��H��z!H�5c�H�81��Nd��ff.���ATUSH����ujH�����taH��ƒ���tT��uOI��H��H�58T!�D��H��H��t=H�5$T!L���D��H��t)H���R��H��t4H�C H����V��H��[]A\�H���.h��H��y!H�5��H�81��c��H��w!H�5�H�81��c��ff.���AUATUSH��(dH�%(H�D$1��G�����H�H��H�$H�FH�D$���zH�^H���~Z��H�|$�_��H���lH�<$H� �9H��@k��A�ą�u%H�<$H� �XH���Oi��A�ą��\H�����H��NH�=�HD��Va��H�t$H��H�D$��S��H�|$��Y��H�5cR!H���;C��H��H���#H��z!H��R!1�H�8�gx��H��H�5Ֆ1�I���cr��H��tH���\��H��H��H����D��H�L$H� ��H��D��H��H���o��H�C0H��I���pG��M����M�e L��H�T$dH3%(��H��([]A\A]ÐH�������H���Y��H�|$�^��1�����H�I�v����H��������[��H��u!H�$H�5˕H�81��\a��H�}w!H�5L�H�81��Da��H�L$H��u!H�5��H�$H�81��#a���g��ff.����gH�5#��KT��ff.���UH�5Q!SH���A��H��tqH���}]��H���%W��H��H��tF1�1�H��H���M����tH��H��[]��j��@H��� F��H��H����U��H��H��[]�j��H��t!1�H�81��d`��H��v!H�5a�H�81��L`��ff.����H��H�5aP!��@��H��tH���oJ����H�H��H�Ѓ��H�/v!H�5�H�81��_��fD��USH��H�t$H�5
P!�@��H��tBH�|$H���W��1�H���_��H��H��tXH��H����H��H�߅�t)�k��H�D$H��[]�H��u!H�5��H�81��v_���ak��H��s!H�5��H�81��Y_��H��s!H�5דH�81��A_���PXH�55�H��H�Tu!H�81��"_��f���ATI��USH��H�5�N!�?��H��t)H��L��H�5��H����@��H���u��H�E H��[]A\������ATI��USH��H�5�N!�f?��H��t)H��L��H�5[�H���@��H���N��H�EH��[]A\��C�����ATI��USH��H�5;N!�?��H��t)H��L��H�5�H���L@��H����j��H�EH��[]A\�����ATI��USH��H�5�M!��>��H��t)H��L��H�5�H���?��H���j��H�EH��[]A\������SH��H��PdH�%(H�D$H1�H�D$H��H�D$(H�D$H�D$0H�D$H�T$ H�D$8����H�D$ 1�L�@ �&�H��t
Lc�N��L�
��H��I9�tH�9��H��t�H��H�I9�u�H�4$H��tH������H�t$H��tH�����H�t$H��tH���A���H�t$H��tH������H��H�\$HdH3%(uH��P[ú1��9W����b��@��U1�H��L!SH���r���x�8H�5ʐH���_N��H��t9H��H��E1�E1�1�1�1��#P��H�] H��H�5��k>��H��H��[]�H��r!H�5D�H�81��I\��f���AUATI��H�5^L!U��H��SH��H��XdH�%(H�D$H1��<��H�D$ H���H�D$I��H�D$8H�D$H�D$@�E�L�l$0����I�<$H�<$����H�D$H�D$�����dg��L��H�$�W��H�$H��� �HH�PH�T$H�PH�t$H�|$ �\l��H�T$ H�S H����H��o!1�H�81��G[���I�D$H�D$���r���I�D$H�D$H�5�y!H�|$(H����L�d$(�H��L���i\��H�D$H�5�y!H�D$(H��tcL��H���C\����u*H�D$H�5�y!H�D$(H����L��H���\��H�L$HdH3%(H����H��X[]A\A]�f��H�=���U��H��H�-y!��H�=���U��H��H�y!�2���H��H��H�D$������	H�=#��gU��H��H��x!�T��������WT��H�p!H�5�H�81���Y����_��f.���S1�H��I!�o��H���d��H��t	H�C H��[�H��m!1�H�81��Y��@��SH��H�5�I!�,:��H��t1�H�����H��@���p��H��[�H�~o!H�5Z�H�81��EY��D��UH��H�aI!1�SH��H�+q!H�8�o��H��H��t#H���KG��H��tH�C H��H��[]���;c����H�:m!1�H�81���X��fD��H��H�5�H!�l9��H��tH���H��n!H�5��H�81��X��f.���ATH��o!H�5��UH�-4o!SH�H�}��?��L�%�q!H�}H�5u�H��l!H�I�$��?��H��p!H�5d���H��H��yd��H�;�����H�:���H�5�H�^H��H�=��g��H�;E1�1ɺH����c��H�=���qg��H�;E1�1ɺH���c��H�=}��Pg��H�;E1�1ɺH���c��H�=W��/g��H�;E1�1ɺH���jc��H�=���g��H�;E1��H�ƺ�Fc��H�;�H�'���H�5���G��H�;�H�����H�5z��G��H�;�H�Q���H�5t��eG��H�;�H���H�5j��JG��H�;�����H�k�H�5T��/G��I�$H�}H�5K��K>��H��n!H�5��H��H��c��H�;�����H�c���H�5<G��F��H�;�H�H�H�5hM��F��H�;�H�}���H�5���F��H�;�H�B�H�5~��F��H�;�H�����H�57��{F��H�;1�H�o�H�5�G�cF��H�;1�H����H�5�D�KF��H�;1�H�����H�5m��3F��H�;1�[H��]H�5�BA\�F������W�����UH�54F!SH��dH�%(H�D$1��:6��H����1�H��H���$T��Hc�H����1��QF��H��H�@H� uQH��H��H�$��S����~[H�H�4$�� tBH�CH�SH)�H9�jH���V��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��m!1�H�81���T��H��j!H�5��H�81��T��H�
���H�5��H�=�U�y<���Z��@��AWH�5E!AVAUATUSH��(dH�%(H��$1��5��H����H��I���[��A����Hc��6��H�D$E����1�L�d$�TfDL���R��I��H�����C��HchH���Vj��L���H�l-H��1�H���Lh��H�|$H���?k��A9�ty��L���B��H��H����H���Y���L��H���,P������L����[�����l�������e��H���R��I���`���DH�Ai!H�8t8�X��H�D$H��$dH3%(H�D$��H��([]A\A]A^A_�H��k!��H�=�>H��3f��H���H�=���f��H�;A�_1�H�
؈H��>��'8���g���H��k!1�H�81��R��H��h!H�5��H�81��R���X��f�ATI��H�5C!US�-3��H��ttH��� O��H����H��H��H��tI1�L��H��H���f����xM��u��tH��[]A\�w\��H���e��H��j!H�5C�H�81��R��H��j!1�H�81��R��H�%h!H�5݇H�81���Q��ff.����S��A���H����1��H�߉��oV��H��[�f.���USH��H�����H��H���cj��H���;��H��H��H��H��[H�5��1�]�H��ff.���ATUSH����ujH�����taH��ƒ���tT��uOI��H��H�5�A!��1��H��H��t=H�5�A!L���1��H��t)H���\��H��t4H�C H����R��H��[]A\�H���NU��H��f!H�5��H�81���P��H��i!H�5��H�81��P��ff.���AUATI��H�5A!UH��S��H��H��8dH�%(H�D$(1��1��H�D$H����������t|M�,$����L���G��H��H����H�5o!H���=H�e!H�8��3��I��H��L��1��jd��H�5�n!I��H����L�p1�1�H����:��H�L$(dH3%(H���"H��8[]A\A]�f�L��M�d$�cG��H��H��tI��u��a����L���@[��H�|$ H�D$ ��K��H�T$ H��� tnH�BH�RH�D$H�t$H�|$�H;��H�T$H�U H���b���H��g!1�H�81��#O���H�=�?H�D$�ZJ��L�L$H��H��m!����H��H����H�T$H��늾H�=%�� J��H��H��m!����1����I��H��d!H�5��H�81��N���T��fD��S1�H�?!�}d��H����:��H��t	H�C H��[�H�0g!1�H�81��TN��@PXH�5.�H��H�dd!H�81��2N��f�UH��H�5�>!SH����.��H��t(H�5�>!H��H���.��H��t)H��H��H��[]�Z��H�d!H�5ǃH�81���M��������H�����H�������x��H�H��H��H��H���f���UH��SH��H��H��H�~b!H�0�Q��H��u	H��1�[]�H��H���5����¸��u�H��[]���SH��������t"H�6H��t@��t[H��H�H��[���H�5�=!H���-��H��tb1�1�H����I��H��H��tfH���hA��Hc�H9�unH��H�߉�[�d���H��H�T$��J��H�T$H��H��[H�������1��G��H��b!H�5{�H�81��L��H�Se!H�5�H�81��rL��H����]��f.���H��H�5�<!�,��H��t3H���7��H��������?H9�wH�DH���fDH��H���Q�����ff.�@��H��H�5�<!�,��H��t3H���G��H��������?H9�wH�DH���fDH��H���$Q���_���ff.�@��AWAVI��AUATA��USH��H��XdH�%(H�D$H1�H�=mj!�_H�D$ A���|�9H��H�D$H�CH�D$L�D$0�1�H�5%j!�p.��H�|$�fB��H�|$H�$�hG��H�D$H�5�i!H�j!H�D$(H����H��_!H�8�.��H�L$(�H��H���3L��H��H�|$0A�����H��4t@�����;��A��H�|$8E1�H��4t@�����`;��A��H�5;!L���+��I��H����H�\$L�A�� �%I��H��A��H���D�D$���;��D�D$��H��H��E��L��AUH�t$�+O��ZY���H�L$HdH3%(L���6H��X[]A\A]A^A_�Ic�H�|�H��ubA���H�H�D$H�CH�D$H�k1�L�D$0�H�5�h!��,��H�|$��@��H�|$H�$��E��H��������d���@�H��H��H�D$ H����A��t��1fD�G��D�D$�������H�{Hc�A��H9��fH�[����@�H�=s�GD���H�=�AH��g!�/D��H��g!�l����KG��A���&����;G��A���6���A��A������DH�|$ �>0��H�l$ H��A�D$�H��uLH��twH�|$ ��{H�H�D$H�CH�D$�����������H�=�~�C��H��H�-g!�I���H���HD�H�|$ A������D���cB��H�D$ ��~A����H��`!H�5Z~H�81���G��H��H�D$H�CH�D$����������M���*Y��H��]!H�5�}H�81��G��H�H�D$H�CH�D$����ff.����ATUH��1�SH��H��H��0dH�%(H�D$(1��N��H��I���N���H��H���tW��1�H���zN���H��H�D$�hN���H��H�D$�VN��H�D$ H��t;H�t$L���9����H�L$(dH3%(��H��0[]A\��H�D$H�5�e!H�L$H��H�D$�G��H�D$ H��u�H�5[e!H��tH�g[!H�8�7*��H�D$ �r���D�H�=�|�A��H��H�e!���6L��fD��UH��H��6!1�SH��H�[!H�8�\��H��H��t#H���Q��H��tH�C H��H��[]���+2����H��^!1�H�81���E��fD��H��H�5A6!�\&��H��tH���H��[!H�5{{H�81��E��f.���UH�=|SH���T��H�#\!H�5	|H�ed!H��\!H�;H���,��H�^!H�;H�5|H�H��^!H��,��H�	^!H�
Z!H��H�2H��/��H�;H�5j����EQ��H�;�����H�F�H�55�*5��H�;�H�k�H�5�;�5��H�;�����H����H�5`{��4��H�;�����H�E���H�5<��4��H�;1�H���H�57{�4��H�;1�H���H�5bC�4��H�;1�H���H�5�2�4��H�;�H�b���H�5s;�v4��H�;H�d;H�5X;�PI��H�;�H�a���H�5F;�E4��H�;1�H���H�5O[�-4��H�;1�H�q���H�5�z�4��H�;1�H�	�H�5�0�3��H�;�H�54z��Z���48���H��H���*���H�=�C�c/���'H��H���s/���H�=)z�B/���'H��H���R/���H�=�{�!/���'H��H���1/���H�=�y�/���'H��H���/���H�=�y��.���-H��H����.���H�=�y�.���-H��H����.���H�=�y�.��H��-H���.��H�;H��H�5�x��Y��H�;�H�5p�Y��H�;�/"H�5ry�Y��H�;�?H�5fy�Y��H�;H���
H[H�5Uy]�uY��D����:�����AWAVAUI��ATUH���SH��1�L�eH���ER���:H����H9�}TL�5�Z!L��I�6H�<�L�<���E��H����H��H�E�� u�H;]}L�5�Z!H�E I�6��f.�H�5y2!L���1"��H��H��u��@H���7��1�H���N0��H��u�E1�L�e�+H����I9�}4L��J�<��xS��H��H���;����tdI��H�E�� u�L;m}H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=�Y��H��H�5Y=H��H�/U!H�81���@��H�&Y!1�H�81��@��H�m �H��V!H�5�wH�81��@��@��UH�5t1!SH��dH�%(H�D$1��!��H��toH���
=��H���6��H��H��tDH��1�H���`X��H�$H��H�0�,��H�߅�t�eJ��H�L$dH3%(u7H��[]���R��H�jX!1�H�81��?��H�V!H�5=wH�81���?����E��f���UH�5�0!SH��dH�%(H�D$1��Z ��H����1�H��H���,��Hc�H����1��q0��H��H�@H� uQH��H��H�$��+����~[H�H�4$�� tBH�CH�SH)�H9�jH����@��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�dW!1�H�81���>��H�U!H�57vH�81���>��H�
�v��H�52vH�=@�&���D��@��ATUSH����urH�����tiH��ƒ���t\��uWH��H9�tGH�5f/!H�����I��H��t@H�5O/!H�����H��t,H���F��H��H��t4L����6��H�k H��[]A\�H���B��H�GT!H�5muH�81��>��H�oV!1�H�81��=��ff.�PX1�H��H�IV!H�81���=�����UH��H�5�.!SH���g��H��t$H��H����O��H��H���8����t"H��H��[]�H��S!H�5�tH�81��v=��������AUH�5S.!ATUSH�����H����H��I����?���Ņ�xLHc����I�Ņ�t)1���L����F��H����G��L��H���xT��9�u�H��L��[]A\A]�fDH��R!H�8tH��[]A\A]�tB��@H�QU!��H�=h(H���O��H���H�=p��O��H�;A�c1�H�
�sH�L(���!���H��R!H�5�sH�81��Z<��f.���UH��H�51-!SH������H��t[H��H���L��H��H���@��H��H���E����t��uH���[]�@�?��H��1�[]�H�KT!1�H�81���;��H��Q!H�5sH�81��;��ff.�@��AUI��H�5�,!ATI��USH��H���=��H��t6L��H���
G��L��I����)��L��H��H���t����t&H��H��[]A\A]�H�sQ!H�5�rH�81��:;���E���D��ATUH��H�5,!S����H��t-H��H���K��I��H����?��L��H���#;����t H��[]A\�H�Q!H�5.rH�81���:��H�0S!H�5=rH�81��:�����H��H�5�+!�L��H��tH���G��H��t$H��H���^��H��P!H�5�qH�81��f:���q������UH��H�5A+!SH�����H��t$H��H���'B��H��H���9����t"H��H��[]�H�?P!H�5eqH�81��:���������H��H�5�*!���H��tH���/��H��t$H��H���%��H��O!H�5qH�81��9��������ATI��USH���t=H��H�H��xoH�5{*!L���3��H��tCH��H����H����tH��[]A\��H����>��H���H��Q!H�5�pH�81��;9��H�\O!H�5�pH�81��#9��H��Q!H�5qkH�81��9��ff.���UH�5�)!SH�����H��t5H���5��H���5/��H��H��tMH��H���<��H�߅�t#H��[]��B��H��N!H�5�oH�81��8���sK��H��P!1�H�81��8�����ff.���UH�5T)!SH���
��H��t5H���4��H���.��H��H��tMH��H���"Q��H�߅�t#H��[]�`B��H�AN!H�5goH�81��8����J��H�dP!1�H�81���7�����ff.���S1�H��(!��M��H����H��H��t	H�C H��[�����f���ATUSH�� dH�%(H�D$1�H�B H�D$����H��uIH�>L�d$H�|$�+C��H�|$H�D$� ��1�1�L��H��H����N��H�T$H�S H��t$H���J��H�L$dH3%(H��ubH�� []A\�1�1ҾH���I���:��L��H���G+��H��I��H�D$H�C ��I��M��u�H�?O!1�H�81���6���1��1���<��f.���H��H�5�'!�L��H��t3H����4��H�@H�xH�DH���fDH��H���T@��H��L!H�5�mH�81��L6��ff.����H��H�5!'!����H��tH���H�CL!H�5imH�81��
6��f.���SH�lM!H�5�mH��L!H�H�;�[��H�<N!H�;H�5C9H�H�O!H��8��H�yK!H�5���H��H���A��H�;�����H���H�5)&��%��H�;�H����H�5U,�%��H�;1�H���H�57�%��H�;1�H�u���H�5]"�%��H�;H��6H�5-�c:��H�;1�H����H�5�6�[%��H�;1�H�O���H�5�X�C%��H�;�H�4���H�5lg�(%��H�;1�H����H�5yg�%��H�;�H�Q���H�5fg�$��H�;1�H�	�H�5*g��$��H�;1�H����H�5Y3��$��H�;�H�6���H�556�$��H�;�H�����H�5�E�$��H�;�H���H�5=�t$��H�;1�H�����H�5�k�\$��H�;�H���H�5�k�A$��H�;[�H����H�5�k�%$��D��H�������������UH�5�$!SH��dH�%(H�D$1��:��H����1�H��H���D&������Hc�1��R$��H��H�@H� uRH��H��H�$�&����~\H�H�4$�� tCH�CH�SH)�H9�pH���4��H��H�L$dH3%(utH��[]ÐH�C�f.�H��H�S���H�$K!H�5�jH�81���2��H��H!H�5�jH�81��2��H�
lk�H�5�jH�=�3�t���8��ff.�@��AWAVAUI��ATUH���SH��1�L�eH���B���:H����H9�}TL�5EJ!L��I�6H�<�L�<��F6��H����H��H�E�� u�H;]}L�5J!H�E I�6��f.�H�59#!L�����H��H��u��@H����$��1�H���nB��H��u�E1�L�e�0H����I9�}<L��J�<��E�������H��H��������tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=�J��H��H�5�-H��H��E!H�81��1��H�^I!1�H�81��
1��H�m �H�%G!H�5�hH�81���0��ff.����ATUSH����ujH�����taH��ƒ���tT��uOI��H��H�5�!!�S��H��H��t=H�5�!!L���<��H��t)H���oC��H��t4H�C H�����H��[]A\�H����4��H�F!H�5ThH�81��F0��H��H!H�5xhH�81��.0��ff.���UH��H�5a!!SH�����H��t)H��H���D�������H��H���'����t"H��H��[]�H��E!H�5�gH�81��/��H�H!1�H�81��/��ff.���AUH�5� !ATUSH���6��H����H��I���b#���Ņ�xLHc�����I�Ņ�t)1���L�����A��H�����L��H���F��9�u�H��L��[]A\A]�fDH��D!H�8tH��[]A\A]�4��@H��G!��H�=�H��B��H���H�=Eb�A��H�;A��1�H�
�fH�|�����H��D!H�5�fH�81��.��f.�PXH�5{fH��H��D!H�81��b.��f���ATUH��H�5�!S���H��t/H��1�H���'&��H��H��I���y<��L��t�}��H��[]A\�����k��H�LF!H�5�fH�81���-����H��H�51!���H��t)H���1��H��tH��H���n/��fD�H����)���f���ATUH��H�5�!S�9��H��t/1�H��H����,��H��H��I����;��L��t��%��H��[]A\������%��H��E!H�5�eH�81��3-����H��H�5q!��
��H��tH����6��H��H������~���ff.���S1�H�2!��B��H����7��H��t	H�C H��[�H�E!1�H�81��,��@��UH��H��!1�SH��H��C!H�8�B��H��H��t#H���k?��H��tH�C H��H��[]���K7����H��D!1�H�81��F,��fD��H��H�5�!����H��tH���?��H��tH���H�6B!H�5dH�81��+��H�>D!1�H�81���+��f.���SH�LC!H�5<dH��B!H�H�;�;��H��C!H�;H�5&dH�H��D!H����H��B!H�5����H��H���7��H�;�����H�����H�5	���H�;�H�u���H�55"���H�;1�H�
���H�5�/���H�;�H�����H�5�]�f��H�;1�H����H�5�c�N��H�;�H�����H�5�T�3��H�;1�H�7���H�55/���H�;�H�<���H�5�]���H�;�H�����H�5�]����H�;1�[H����H�5�����f.�f���SH��H�� H�5�I!dH�%(H�D$1�H�GH�$H�GH�D$H��t'H�;�H���+��H�T$dH3%(u$H�� [�H�=�J�O%��H��H�I!���/��ff.���SH����1��H��tH����1��H�5�B!H���;��H���_3��H��tH���R3��H���>��H��[�+������:�����SH��H��H�5Fb�i��H��[�@��ATE1�UH��SH��H�t$H��tH���'��H�|$� ��I��H�57!H����	��H��H��tQ�B��H��H���7+��H��t)E1��L��H���
����uH��H��[]A\�H�b>!1�H�81���(��H��>!H�5�aH�81��(��ff.���ATE1�UH��SH��H�t$H��tH����&��H�|$���I��H�5w!H���	��H��H��tQ�B'��H��H���w*��H��t)E1��L��H���J����uH��H��[]A\�H��=!1�H�81��(��H�'>!H�5�`H�81���'��ff.���H�]=!S1�H��H�x!H�8�=��H��tH�X [�H��=!H�5�`H�81��'��ff.�f�PXH�5�`H��H��=!H�81��r'��f���H��H�5!���H��tH���9��H��H�H�D����ff.���ATI��H��UH��S��/���t6H�H��H�5�!L�����H��t)H��H��1��>��H��[]A\��H���h,��H�����>���ff.���USH��H�5`!H���W��H��t3H��H���u�%����H�����H��H��[]�fD�S����������f.���ATUH��SH���t-I��I�H�5�!H������H��t L��H���-��H��[]A\�H���+��I�����~���ff.���H��H�5�!���H��t)H�����H��tH��H�����fD�H����)���f���H��H�5Q!�L��H��tH���	��H��H����
�����ff.���H��H�5!���H��tH���/��H��H�H�D����ff.���H��H�5�!����H��tH���_7��Hc��1��H��H���#���f���fD��AUH�5�!ATUSH�����H���H���5��H��H��t}H���8��A�ą�xNHc����I��E��t+1�@��H����{��H������L��H����;��D9�u�H��L��[]A\A]�DH�9:!H�8t+H��[]A\A]��)��@H��A�[L��]A\A]�@H��<!��H�=�H��87��H���H�=%]�7��H�;A�P1�H�
$]H����,	���t���H��9!H�5�\H�81��#��ff.�@��UH�5D!H��SH���7��H��tcH�5KH��H���3���5�B!H��H���
��H���7����t��uH���[]�f���&��H��1�[]�H��8!1�H�81��#�����f.�PX1�H��H��8!H�81��"�����S1�H��!��8��H���.��H��t	H�C H��[����f���USH��H��H����8��H�5�!H��H���I��H��tH��H�������u"H��H��[]�H��8!H�5J[H�81��b"���M���ff.�f���USH��H��H����.��H�5D!H��H������H��tH��H��� ����u"H��H��[]�H�+8!H�5�ZH�81���!������ff.�f���H��H�5�!�|��H��tH����3����u"�H���H��7!H�5�ZH�81��!�����PXH�5eZH��H��7!H�81��r!��f���ATUH��SH���t-I��I�H�5`!H�����H��t L��H���H#��H��[]A\�H���&��I�������ff.���UH��SH��H�5
!H�����H��t-�5@!H��H���7��H��H��H�5[H����H��H��[]��-���ff.�f���SH�5�!H��H���I��H��tqH��H�5*���H�߾�h���H�ߺH�5�Y�d��H�ߺH�5�)�P��H�ߺH�5�Y�<��H�ߺH�5Y�(��H��[����ff.���S1�H�!�5��H�����H��t	H�C H��[�����f���ATUSH�� dH�%(H�D$1��G����hH�ոH����H�5�>!H�,$H�T$H�D$H����H�5!H��H�8�� ��H���G������H�5�FH���`/��H�5�FH��H���>��H�5O>!H����1�1�H��� ��H��I�����H�5hXH��H�����H������H�5S(H��H������H����H�5;XH��H������L��H�L$dH3%(u}H�� []A\�D�;���V���fDH�F����H�=� ����H��H��=!����H�=�'���H��H�m=!�"���������<$��ff.����AWAVAUATUSH��XdH�%(H�D$H1�H�D$H�D$0H�D$ H�D$8H�D$(H�D$@�G����5H�.H��H�l$��uH�D$ H�D$(�H�FH�D$ ��u�H�FH�D$(H�5R!H���J���I��H����H�5�!H���/���I��H����L�d$ 1�I��tL��� ��H��H�|$(E1�H��tH�T$����H�T$I��L��L��L���(������H�5�UH���%-��H��tH��H������H�5�DH���-��H�5xDH��H�����L��H�5�DH������H��H�L$HdH3%(upH��X[]A\A]A^A_ú����H��2!H�5�UH�81����H��2!H�5XUH�81��p��H�5a5!L���1.��H��1!1�H�81��N���I"��f���ATI��H��USH���t2�
����H�5�
!L������H��t ��H�����H��[]A\�D�s�������Z�f.���ATI��H��USH���t2�����H�5l
!L���d���H��t ��H���u��H��[]A\�D���������f.���ATI��H��USH���t2�E����H�5l
!L������H��t ��H�����H��[]A\�D����������f.���ATI��H��USH���t2������H�5
!L�����H��t ��H�����H��[]A\�D�S�������:���f.���AVAUATUSH��@dH�%(H�D$81���H����H��L�l$I����L��H��H�=������T$I�ƅ�����H�t$ L��L�d$ H�H�=��L�t$0H�Ѓ�H�D$(����H�ŋD$����I�F H����H���^,����tN1�H�L$8dH3%(��H��@[]A\A]A^�����.��H�=OT1��X"��H���,����u��H�߉D$�;����D$�D��.��H�=7T1��"���[���1�H��������d����g�����ATU��SH��5�8!H���	��H��tH�ډ�[H��]A\�#���D�%Q8!H�����H��D���~ ��H��uɉ�[]A\�f���H��H�5!���H��tH���H�/!H�5�QH�81�����f.���ATE1�E1�1�UH�R1��S�����7!����E1�E1�1�1�H��Q�������7!����H�-/!H��/!H�5RH�}H�����L�%�1!H�}H�5�QH��-!H�I�$���H��-!H�=�?H��'��H�;E1�1ɺH����#��H�=GQ�y'��H�;E1�1ɺH���#��H�=+!�X'��H�;E1�1ɺH���#��H�=Q�7'��H�;E1�1�H�ƺ�r#��H�;H�5x�����#��H�;�����H����H�5
���H�;H�5E�y,��H�;�H�:���H�5Q���H�;�H�����H�5�P�s��H�;�H�����H�5�P�X��H�;�H����H�5�P�=��H�;�H�^�H�5y@�"��H�;�H�#�H�5�P���H�;�H�H�H�5�P����H�;1�H���H�5�P����H�;�H�%�H�5{P���H�;�H���H�5v!���H�;�����H�_���H�5����I�$H�}H�5:P���H��+!H�5!�H��H��V"��H�;�����H����H�5��;��H�;H�5��*��H�;1�H�0�H�5���H�;1�H���H�5O���H�;1�H�0�H�5�N����H�;�H���H�5�O����H�;1�H�=�H�5����H�;1�H���H�5xO���H�;1�H���H�5lO���H�;1�H�%�H�5aO�i��H�;�H���H�5�N�N��H�;�H�����H�5�N�3��H�;�H��H�5�N���H�;[�]H���H�5R>A\���H�,!H�5kOH�81����H�,!H�5NH�81��y����H��H���OSSL_DEBUG: empty sk!ossl.c [%s:%d]
items in sk < -1???inlen <= LONG_MAX / 20123456789abcdef(null)error on stack: %s (%s)error on stack: %sTurning on FIPS mode failedTurning off FIPS mode failedOPENSSL_init_sslOpenSSL2.1.2OPENSSL_VERSIONOPENSSL_LIBRARY_VERSIONOPENSSL_VERSION_NUMBEROPENSSL_FIPSfips_modefips_mode=OpenSSLErrordebugdebug=errorsto_derpassed data is not valid String???password must not be longer than %d bytesobject in array not of class ##type##OpenSSL 1.1.1k  FIPS 25 Mar 2021ossl_bin2hexinvalid OBJECT ID %liOBJ_obj2txt%2d%2d%2d%2d%2d%2dZbad UTCTIME format: "%s"%4d%2d%2d%2d%2d%2dZunknown time formatutcASN1_INTEGER is NULL!invalid tag classtag number not specifiedossl_asn1.cto_aArrayillegal EOC octets in valuemust specify tag numberinvalid tagging methodvalue is too shortinvalid length for BOOLEANinvalid BOOLEAN/%nil expectedunsupported ASN.1 typeASN1_TYPE alloc failurei2d_ASN1_TYPEp0 - p1 == alllenASN1_get_objectEOCUNIVERSALCONTEXT_SPECIFICAPPLICATIONPRIVATEIMPLICIT@value@tag@tagging@tag_class@indefinite_length@unused_bitsASN1ASN1Errortraversedecodedecode_allUNIVERSAL_TAG_NAMEASN1Datainfinite_lengthindefinite_length=infinite_length=initializePrimitiveConstructiveeachBooleanIntegerEnumeratedBitStringOctetStringUTF8StringNumericStringPrintableStringT61StringVideotexStringIA5StringGraphicStringISO64StringGeneralStringUniversalStringBMPStringNullObjectIdUTCTimeGeneralizedTimeSequenceEndOfContentregistersnlnoidshort_namelong_nameINTEGERBIT_STRINGOCTET_STRINGNULLOBJECT_DESCRIPTOREXTERNALREALENUMERATEDEMBEDDED_PDVUTF8STRINGRELATIVE_OID[UNIVERSAL 14][UNIVERSAL 15]SEQUENCESETNUMERICSTRINGPRINTABLESTRINGT61STRINGVIDEOTEXSTRINGIA5STRINGUTCTIMEGENERALIZEDTIMEGRAPHICSTRINGISO64STRINGGENERALSTRINGUNIVERSALSTRINGCHARACTER_STRINGBMPSTRING|X��4X���W��TY���Y���X���X���Y���Y���Y���W���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���V���V��c���`���`��a���a���a���b��c��c��c���`��c���a��c��c��c�� b�� b���a���a���a���a���a��Xb��`���a���a���a���a��c���a��ossl_asn1prim_to_derto_der_internalbad GENERALIZEDTIME format: "%s"explicit tagging of unknown tagp - (unsigned char *)RSTRING_PTR(str) == total_lengthindefinite length for primitive valueType mismatch. Bytes read: %ld Bytes available: %ldType mismatch. Total bytes read: %ld Bytes available: %ld Offset: %ldCan't convert nil into IntegerCan't convert nil into Booleanunused_bits for a bitstring value must be in the range 0 to 7indefinite length form cannot be used with primitive encodingBIO_new_mem_bufBN wasn't initialized!BN_bn2binossl_bn.cBN_dupBN_bin2bnbignum too longinvalid radix %dDon't know how to coerceCannot init BN_CTXBNErrorinitialize_copynum_bytesnum_bits+@-@+-mod_addmod_submod_mulmod_sqr**mod_expgcd<=>ucmpeql?===zero?one?odd?negative?pseudo_randpseudo_rand_rangegenerate_primeprime?prime_fasttest?set_bit!clear_bit!bit_set?mask_bits!<<>>lshift!rshift!to_sto_ito_intto_bnmod_inverseOpenSSL/BNCannot convert into OpenSSL::BNCipher already initialized!Cipher not initialized!iv must be %d byteskey must be %d bytesunable to set AEAD tagossl_cipher.cout_len <= RSTRING_LEN(str)key not setdata must not be emptyout_len < RSTRING_LEN(str)cipher does not support AEADunable to set IV lengthCipherErrorciphersresetpkcs5_keyivgenfinalauth_data=auth_tag=auth_tagauth_tag_len=authenticated?key_len=key_leniv=iv_len=iv_lenblock_sizepadding=auth_tag_lenkey_setOpenSSL/Cipherunsupported cipher algorithm (%li)authentication tag not supported by this cipherdata too big to make output buffer: %ld bytessalt must be an 8-octet stringiterations must be a positive integerarguments for %li#encrypt and %li#decrypt were deprecated; use %li#pkcs5_keyivgen to derive key and IVAEAD not supported by this ciphercouldn't set additional authenticated dataunable to set authentication tag lengthretrieving the authentication tag failedunsupported cipher algorithm: %liossl_cipher_updateossl_cipher_finalOpenSSL for Rubywrong argument (%li)! (Expected kind of %li)wrong config formaterror in line %dConfigErrorDEFAULT_CONFIG_FILEossl_config.cEVP_MD_CTX_newDigest initialization failed.EVP_DigestUpdateEVP_DigestFinal_exDigest initialization failedDigest::ClassDigestErrorfinishdigest_lengthblock_lengthOpenSSL/DigestDigest CTX wasn't initialized!Unsupported digest algorithm (%li).ENGINE wasn't initialized.NUMERICNO_INPUTprivateopensslOPENSSL_init_crypto#<%li id="%s" name="%s">no such digest `%li'no such cipher `%li'EngineErrorloadcleanupenginesby_idcipherload_private_keyload_public_keyset_defaultctrl_cmdcmdsinspectMETHOD_RSAMETHOD_DSAMETHOD_DHMETHOD_RANDMETHOD_CIPHERSMETHOD_DIGESTSMETHOD_ALLMETHOD_NONEOpenSSL/Engineno such builtin loader for `%li'HMAC_CTX_newHMAC_CTX_copyHMAC wasn't initializedossl_hmac.cbuf_len <= EVP_MAX_MD_SIZEHMACErrorhexdigestOpenSSL/HMACossl_hmac_digestlength must be non-negativeEVP_PKEY_CTX_new_idEVP_PKEY_derive_initEVP_PKEY_CTX_set_hkdf_mdEVP_PKEY_CTX_set_hkdf_saltEVP_PKEY_CTX_set_hkdf_keyEVP_PKEY_CTX_set_hkdf_infoEVP_PKEY_deriveEVP_PBE_scryptiterationsPKCS5_PBKDF2_HMACKDFKDFErrorpbkdf2_hmachkdfSPKI wasn't initialized!ossl_ns_spki.cnewlen <= lenChallenge.length <= 0?NETSCAPE_SPKI_verifyNETSCAPE_SPKI_set_pubkeyNetscapeSPKIErrorto_pemto_textpublic_key=challengechallenge=OpenSSL/NETSCAPE_SPKIossl_spki_to_derCert ID wasn't initialized!ossl_ocsp.cBIO_newi2a_ASN1_OBJECTOCSP_CERTID_dupd2i_OCSP_SINGLERESPASN1_item_dupResponse wasn't initialized!Request wasn't initialized!d2i_OCSP_BASICRESPd2i_OCSP_RESPONSEOCSP_request_add0_idd2i_OCSP_REQUESTOCSP_single_get0_statuscertificate is not revokedd2i_OCSP_CERTIDOCSP_cert_to_idOCSPOCSPErrorRequestadd_noncecheck_nonceadd_certidsigned?createstatus_stringbasicBasicResponsecopy_nonceadd_statusresponsesfind_responseSingleResponsecheck_validitycert_statusthis_updatenext_updaterevocation_timerevocation_reasonextensionsCertificateIdcmp_issuerserialissuer_name_hashissuer_key_hashhash_algorithmRESPONSE_STATUS_INTERNALERRORREVOKED_STATUS_NOSTATUSRESPONSE_STATUS_SIGREQUIREDRESPONSE_STATUS_SUCCESSFULRESPONSE_STATUS_TRYLATERREVOKED_STATUS_CACOMPROMISEREVOKED_STATUS_KEYCOMPROMISEREVOKED_STATUS_REMOVEFROMCRLREVOKED_STATUS_SUPERSEDEDRESPONSE_STATUS_UNAUTHORIZEDREVOKED_STATUS_UNSPECIFIEDNOCERTSNOINTERNNOSIGSNOCHAINNOVERIFYNOEXPLICITNOCASIGNNODELEGATEDNOCHECKSTRUSTOTHERNOTIMEV_CERTSTATUS_GOODV_CERTSTATUS_REVOKEDV_CERTSTATUS_UNKNOWNV_RESPID_NAMEV_RESPID_KEYOpenSSL/OCSP/CERTIDOpenSSL/OCSP/SINGLERESPOpenSSL/OCSP/BASICRESPOpenSSL/OCSP/RESPONSEOpenSSL/OCSP/REQUESTSingleResponse wasn't initialized!RESPONSE_STATUS_MALFORMEDREQUESTREVOKED_STATUS_AFFILIATIONCHANGEDREVOKED_STATUS_CERTIFICATEHOLDREVOKED_STATUS_CESSATIONOFOPERATIONossl_ocspreq_to_derossl_ocspres_to_derossl_ocspbres_to_derossl_ocspsres_to_derossl_ocspcid_to_derPKCS12 wasn't initialized.ossl_pkcs12.cPKCS12_parse@key@certificate@ca_certsASN1_dupUnknown PBE algorithm %liPKCS12ErrorOpenSSL/PKCS12ossl_pkcs12_to_derPKCS7 wasn't initialized.ossl_pkcs7.c@dataPKCS7_verify@error_stringNegative number of recipient!Negative number of signers!signedencryptedenvelopedsignedAndEnvelopedCould not parse the PKCS7PKCS7ri wasn't initialized.PKCS7si wasn't initialized.Could not add recipient.Could not add signer.must specify a booleanunknown type "%li"PKCS7Errorread_smimewrite_smimetype=detached=detacheddetached?cipher=add_signersignersadd_recipientrecipientsadd_certificatecertificates=certificatesadd_crlcrls=crlsadd_dataSignerInfoSignersigned_timeRecipientInfoenc_keyTEXTDETACHEDBINARYNOATTRNOSMIMECAPOpenSSL/PKCS7/RECIP_INFOOpenSSL/PKCS7/SIGNER_INFOOpenSSL/PKCS7OpenSSL::PKCS7#get_signer_info == NULL!signeddatasignedAndEnvelopedenvelopedencrypteddigestossl_pkcs7_to_derpkey is emptyCould not parse PKeyparameters missingpublic key missingPKEY wasn't initialized!EVP_VerifyInit_exEVP_VerifyUpdateEVP_VerifyFinalPrivate key is needed.EVP_SignInit_exEVP_SignUpdateEVP_SignFinalPKeyErrorprivate?OpenSSL/EVP_PKEYOpenSSL::PKey::PKey can't be instantiated directlyTHIS IS NOT A DH!qpub_keypriv_keyDH_set0_keyDH_set0_pqgincomplete DHDH already initializedDHparams_dupossl_pkey_dh.cFailed to generate keyNot a DH key!DHErrorgeneratepublic?exportparams_ok?generate_key!set_pqgset_keyossl_dh_to_derTHIS IS NOT A DSA!DSA_set0_keyDSA_set0_pqgDSA already initializedossl_pkey_dsa.cDSA PUBLIC KEYNeither PUB key nor PRIV keyincomplete DSAPrivate DSA key needed!Not a DSA key!DSAErrorsyssignsysverifyossl_dsa_to_derEC_POINT is not initializedEC_GROUP is not initializedEC_POINT_is_on_curveEC::Point already initializedEC_POINT_dupEC_POINT already initializedinvalid second argumentEC_POINT_newEC_POINT_bn2pointEC_POINT_oct2pointBIO_new(BIO_s_mem())EC_GROUP_set_seedEC_GROUP_newEC_GROUP_dupunknown curve name (%li)unable to create curve (%li)EC_GROUP_new_by_GF*wrong number of argumentsTHIS IS NOT A EC PKEY!EC_KEY_printoutlen=%dECDSA_verifyPrivate EC key needed!ECDSA_signECDH_compute_keyEC_KEY_set_public_keyEC_KEY_set_private_keyEC_KEY_set_groupEC already initializedEC_KEY_dupEVP_PKEY_assign_EC_KEYinvalid curve nameEC_KEY already initializedEC_get_builtin_curvesEC_POINT_point2octEC_POINT_set_to_infinityEC_POINT_invertEC_POINT_make_affineEC_POINT_is_at_infinityEC_GROUP_get_cofactorEC_GROUP_get_orderEC_GROUP_set_generatorEC::Group already initializedEC_KEY_check_keyEC_KEY_generate_keyNot a EC key!ECErrorECGroupPointGFpGF2mGFp_simpleGFp_montGFp_nistGF2m_simpleuncompressedhybridNAMED_CURVEEXPLICIT_CURVEgroup=private_key=private_key?public_key?dh_compute_keydsa_sign_asn1dsa_verify_asn1curve_nameasn1_flagasn1_flag=point_conversion_formpoint_conversion_form=seed=degreeinfinity?on_curve?make_affine!invert!set_to_infinity!to_octet_string@groupOpenSSL/EC_POINTOpenSSL/ec_groupEC_GROUP is already initializedunknown symbol, must be :GFp_simple, :GFp_mont, :GFp_nist or :GF2m_simpleunknown symbol, must be :GFp or :GF2munknown argument, must be :GFp or :GF2mcan't export - no public key setcan't export - EC_KEY_check_key failedunsupported point conversion form %+li (expected :compressed, :uncompressed, or :hybrid)unsupported point conversion form: %d, this module should be updatedbns must be 1 longer than points; see the documentationTHIS IS NOT A RSA!dmp1dmq1iqmpRSA_set0_crt_paramsRSA_set0_factorsRSA_set0_keysalt_lengthmgf1_hashautoossl_pkey_rsa.cRSA already initializedincomplete RSAprivate key needed.maxNot a RSA key!RSAErrorpublic_encryptpublic_decryptprivate_encryptprivate_decryptsign_pssverify_pssset_factorsset_crt_paramsPKCS1_PADDINGSSLV23_PADDINGNO_PADDINGPKCS1_OAEP_PADDINGossl_rsa_to_derRAND_bytesRAND_bytes is not supportedRandomRandomErrorrandom_addload_random_filewrite_random_filerandom_bytesstatus?Selected protocol name must have length 1..255verify_hostname requires hostname to be setSSL SESSION get callback enteredSSL Session wasn't initialized.SSL SESSION remove callback enteredSSL SESSION new callback enteredcertificate does not contain public keyAdvertised protocol must have length 1..255SSL session is not started yet.%s SYSCALL returned=%d errno=%d state=%s%s returned=%d errno=%d state=%s: %s (%s)%s returned=%d errno=%d state=%sOpenSSL does not support tmp_ecdh_callback; use #ecdh_curves= insteadSSL NPN advertise callback addedSSL ALPN select callback addedSSL_CTX_set_session_id_contextSSL SESSION get callback addedSSL SESSION new callback addedSSL SESSION remove callback addedSSL TLSEXT servername callback addedservername_cb must return an OpenSSL::SSL::SSLContext object or nilSESSION_CACHE_NO_INTERNAL_LOOKUPSESSION_CACHE_NO_INTERNAL_STOREOP_DONT_INSERT_EMPTY_FRAGMENTSOP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONOP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONOP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGOP_SSLREF2_REUSE_CERT_TYPE_BUGOP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGSSL is not initializedSSL_set_fdarg must be Time or nilverify_certificate_identityossl_ssl.cpublic key mismatchSSL_CTX_use_certificateSSL_CTX_use_PrivateKeySSL_CTX_set0_chain:SSL_CTX_set_cipher_listcache_numconnect_goodconnect_renegotiateaccept_goodaccept_renegotiatecache_hitscb_hitscache_missescache_fulltimeoutswrite would blockread would blockSSL_set_sessionSSL_writesyswriteSSL_acceptSSL_connectSSL_CTX_newSSL2unrecognized version %+liSSL_CTX_set_min_proto_versionSSL_CTX_set_max_proto_versionSSL_readsysreadSSL_CTX_check_private_keySSL_CTX_add_client_CAcan't set verify locationsSSL NPN select callback addedSSL_CTX_set_alpn_protosSSL ALPN values addedSSL already initializednonblock=callcallback_stateossl_ssl_ex_vcb_idxSSL_get_ex_new_indexossl_ssl_ex_ptr_idxossl_sslctx_ex_ptr_idxSSL_CTX_get_ex_new_indexExtConfigSSLErrorWaitReadableSSLErrorWaitWritableSSLContextHAVE_TLSEXT_HOST_NAMEssl_timeoutssl_timeout=set_minmax_proto_versionciphers=ecdh_curves=security_levelsecurity_level=enable_fallback_scsvsetupfreezeSESSION_CACHE_OFFSESSION_CACHE_CLIENTSESSION_CACHE_SERVERSESSION_CACHE_BOTHSESSION_CACHE_NO_AUTO_CLEARSESSION_CACHE_NO_INTERNALsession_addsession_removesession_cache_modesession_cache_mode=session_cache_sizesession_cache_size=session_cache_statsflush_sessionsoptionsoptions=SSLSocketOPENSSL_NO_SOCKconnect_nonblockaccept_nonblocksysread_nonblocksyswrite_nonblockstoppeer_certpeer_cert_chainssl_versionpendingsession_reused?session=verify_resulthostname=tmp_keyalpn_protocolnpn_protocolVERIFY_NONEVERIFY_PEERVERIFY_FAIL_IF_NO_PEER_CERTVERIFY_CLIENT_ONCEOP_ALLOP_LEGACY_SERVER_CONNECTOP_TLSEXT_PADDINGOP_SAFARI_ECDHE_ECDSA_BUGOP_ALLOW_NO_DHE_KEXOP_NO_TICKETOP_NO_COMPRESSIONOP_NO_ENCRYPT_THEN_MACOP_CIPHER_SERVER_PREFERENCEOP_TLS_ROLLBACK_BUGOP_NO_RENEGOTIATIONOP_CRYPTOPRO_TLSEXT_BUGOP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_1OP_NO_TLSv1_2OP_NO_TLSv1_3OP_MICROSOFT_SESS_ID_BUGOP_NETSCAPE_CHALLENGE_BUGOP_MICROSOFT_BIG_SSLV3_BUFFEROP_MSIE_SSLV2_RSA_PADDINGOP_SSLEAY_080_CLIENT_DH_BUGOP_TLS_D5_BUGOP_TLS_BLOCK_PADDING_BUGOP_SINGLE_ECDH_USEOP_SINGLE_DH_USEOP_EPHEMERAL_RSAOP_NO_SSLv2OP_PKCS1_CHECK_1OP_PKCS1_CHECK_2OP_NETSCAPE_CA_DN_BUGSSL2_VERSIONSSL3_VERSIONTLS1_VERSIONTLS1_1_VERSIONTLS1_2_VERSIONTLS1_3_VERSIONexceptionwait_readablewait_writabletmp_dh_callbacknpn_protocols_encoded@cert_store@ca_file@ca_path@verify_mode@verify_depth@verify_callback@client_ca@renegotiation_cb@cert@extra_chain_cert@client_cert_cb@tmp_ecdh_callback@timeout@session_id_context@session_get_cb@session_new_cb@session_remove_cb@npn_select_cb@npn_protocols@alpn_protocols@alpn_select_cb@servername_cb@verify_hostname@io@context@hostnameSSL3TLS1TLS1_1TLS1_2TLS1_3OpenSSL/SSLOpenSSL/SSL/CTX���3�����
��3���
���
��SSL Session already initializedi2d_SSL_SESSIONossl_ssl_session.cno session availableunknown typeBIO_s_mem()SSL_SESSION_print()SessionErrortime=OpenSSL/SSL/Sessionossl_ssl_session_to_derV_OKV_ERR_UNABLE_TO_GET_CRLV_ERR_CERT_SIGNATURE_FAILUREV_ERR_CRL_SIGNATURE_FAILUREV_ERR_CERT_NOT_YET_VALIDV_ERR_CERT_HAS_EXPIREDV_ERR_CRL_NOT_YET_VALIDV_ERR_CRL_HAS_EXPIREDV_ERR_OUT_OF_MEMV_ERR_CERT_CHAIN_TOO_LONGV_ERR_CERT_REVOKEDV_ERR_INVALID_CAV_ERR_PATH_LENGTH_EXCEEDEDV_ERR_INVALID_PURPOSEV_ERR_CERT_UNTRUSTEDV_ERR_CERT_REJECTEDV_ERR_SUBJECT_ISSUER_MISMATCHV_ERR_AKID_SKID_MISMATCHV_ERR_KEYUSAGE_NO_CERTSIGNV_FLAG_CRL_CHECKV_FLAG_CRL_CHECK_ALLV_FLAG_IGNORE_CRITICALV_FLAG_X509_STRICTV_FLAG_ALLOW_PROXY_CERTSV_FLAG_POLICY_CHECKV_FLAG_EXPLICIT_POLICYV_FLAG_INHIBIT_ANYV_FLAG_INHIBIT_MAPV_FLAG_NOTIFY_POLICYV_FLAG_EXTENDED_CRL_SUPPORTV_FLAG_USE_DELTASV_FLAG_CHECK_SS_SIGNATUREV_FLAG_TRUSTED_FIRSTV_FLAG_NO_ALT_CHAINSV_FLAG_NO_CHECK_TIMEPURPOSE_SSL_CLIENTPURPOSE_SSL_SERVERPURPOSE_NS_SSL_SERVERPURPOSE_SMIME_SIGNPURPOSE_SMIME_ENCRYPTPURPOSE_CRL_SIGNPURPOSE_ANYPURPOSE_OCSP_HELPERPURPOSE_TIMESTAMP_SIGNTRUST_COMPATTRUST_SSL_CLIENTTRUST_SSL_SERVERTRUST_EMAILTRUST_OBJECT_SIGNTRUST_OCSP_SIGNTRUST_OCSP_REQUESTTRUST_TSADEFAULT_CERT_AREADEFAULT_CERT_DIRDEFAULT_CERT_FILEDEFAULT_CERT_DIR_ENVDEFAULT_CERT_FILE_ENVDEFAULT_PRIVATE_DIRV_ERR_UNABLE_TO_GET_ISSUER_CERTV_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATUREV_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATUREV_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEYV_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELDV_ERR_ERROR_IN_CERT_NOT_AFTER_FIELDV_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELDV_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELDV_ERR_DEPTH_ZERO_SELF_SIGNED_CERTV_ERR_SELF_SIGNED_CERT_IN_CHAINV_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLYV_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATUREV_ERR_AKID_ISSUER_SERIAL_MISMATCHV_ERR_APPLICATION_VERIFICATIONATTR wasn't initialized!ossl_x509attr.csk_newargument must be ASN1::SetASN1::Set has non-array valueX509_ATTRIBUTE_dupX509_ATTRIBUTE_set1_objectoid=value=AttributeErrorAttributeOpenSSL/X509/ATTRIBUTEossl_x509attr_get_valueossl_x509attr_to_der#<%li: subject=%+li, issuer=%+li, serial=%+li, not_before=%+li, not_after=%+li>CERT wasn't initialized!ossl_x509cert.cX509_set_pubkeyX509_set_notAfterX509_set_notBeforeversion must be >= 0!CertificateErrorCertificateversion=signature_algorithmserial=subjectsubject=issuer=not_beforenot_before=not_afternot_after=extensions=add_extensionOpenSSL/X509ossl_x509_to_derCRL wasn't initialized!X509_CRL_add0_revokednum < 0???ossl_x509crl.ccount < 0???X509_CRL_set_nextUpdateX509_CRL_set_lastUpdateCRLErrorlast_updatelast_update=next_update=revoked=add_revokedOpenSSL/X509/CRLEXT wasn't initialized!ossl_x509ext.cASN1_OCTET_STRING_setX509_EXTENSION_dupcritical,unknown OID `%li'@config%li = %liOBJ_txt2objX509_EXTENSION_set_object@crl@subject_request@subject_certificate@issuer_certificateCTX wasn't allocated!critical=ExtensionErrorExtensionFactoryissuer_certificate=subject_certificate=subject_request=crl=create_extExtensioncritical?OpenSSL/X509/EXTENSIONossl_x509ext_to_derOpenSSL/X509/EXTENSION/FactoryName wasn't initialized.ossl_x509name.cname entries < 0!X509_NAME_print_ex#<%li %li>X509_NAME_dupOBJECT_TYPE_TEMPLATEX509_NAME_onelinelocX509_NAME_add_entry_by_txtDEFAULT_OBJECT_TYPE[]NameErroradd_entryto_utf8hash_oldcountryNamednQualifierDCdomainComponentemailAddressRFC2253ONELINEMULTILINEOpenSSL/X509/NAMEossl_x509name_to_derReq wasn't initialized!ossl_x509req.cX509_REQ_set_pubkeyX509_REQ_set_versionRequestErrorattributesattributes=add_attributeOpenSSL/X509/REQossl_x509req_to_derREV wasn't initialized!i2d_X509_REVOKEDossl_x509revoked.cX509_REVOKED_dupX509_REVOKED_set_serialNumberRevokedErrorRevokedOpenSSL/X509/REVX509_REVOKED_set_revocationDateossl_x509revoked_to_der@timeSTORE wasn't initialized!STORE_CTX wasn't initialized!STORE_CTX is out of scope!certs in chain < 0???ossl_x509store.c@error@chainstctx_ex_verify_cb_idxstore_ex_verify_cb_idxX509_STORE_get_ex_new_indexStoreErrorStoreverify_callback=flags=purpose=trust=add_pathadd_fileset_default_pathsadd_certStoreContexterror=error_depthcurrent_certcurrent_crlOpenSSL/X509/STORE_CTXOpenSSL/X509/STOREStoreContext initialization failureexception in verify_callback is ignoredX509_STORE_CTX_get_ex_new_index;�7�g���0���@�� P��4���H���\���x ��@��`�����0�,��|����P�4��L���0��`��`���<��x ��������0��P���,`�X`���@�����`�D��p ������������@���  ����L ���x `���� �����  ���� ����(!��T!@����!�����!����!`���"����0" ���\"�����"���" ����"p��� #�L#����|#P���#����#����#��0$���|$@	���$��%p��\%p���%p���%����%����%`��&P��T&���&����&�+���&�,��'`-��H'p-��\'�-��p'�.���'�/���'�/���'�/��(0�� (�0��L(�0��h(1���(P1���(�1���(@2���(�2��)�2�� )`3��X)P5���)@8���)P8���)�8��*�9��P*�9��|*`:���*�:���*`;��+�;��,+`<��X+0=���+>���+�?��, A��X,B���,�B���,�D��-�E��@-F��l-pF���-@G���-�H��$.�I��X.J���.pJ���.�J���.�K�� /�L��d/PM���/ N���/O�� 0�O��d0�P���0�Q���0�R��01�S��l1@T���1U���1�U��2�[��02�[��D2�\��x2�\���2�]���2�^���2�_��3�_��,3�`��X3�c���3�f��4�f�� 4�g��P4�g��l40h���4Ph���4�h���4�h���4Pi��5�i��5�i��85�l���5�l���5�l���5n��6�n��86o��d6�o���6�p���6 r��7�r��7`s��H7Pv��h7�w���7�x���7�x���7�x���7�y��8 z��D8�z��h8�z���80{���8p{���8�{���8�|��9�}��09�~��\9p���9Ѐ���9���9��9`���:����@:@���t:�����:�����:�����:����;���@;P���\;����x;��;����;�����;P���<����4<����p<0����<@����<�����<����L=P����=p����=����=���=P��� >����<>@���l>���> ����>�����>����(?�����?�����?P����?`���@���0@0���\@����@�����@�����@0���A����0A���LA����xA����A0����A`����A��A���$B ���8B�\B�����Bp����B0����BP���C`���CP���@C���pC0����C@����C����C0���D@���D���HD���tD0����D@����D����D���E0���<E ����E��E ����E0���FP���$F����@F0���lF�����F����F0��GP�� G���<G`��tG����G����G0���G��H �� H���<H ��XH���tH���H0���HP���H��I���4I���PI ���I`���I����I����I@��Jp��$J@��dJ����J@���J���Jp���J ��TK����K����K��0L@���Lp���L0�MP�,M`�@M��|Mp��M���M��,N��HN��\N�pN ��N0��N�O��PO����O����P@���DPp���xP0����PP����P�����P�����P���Q0���4QP���PQ����|Q��Q`����Q��Q ���R����<R���XR���|R0����R�����R��Rp���S����0S�\S��pS`���Sp���S0���S0��T���DT���`T@��|T����T����T���U���8U���TU���U
���U0��,VP��hV���V`���V����V����Vp��<W���XW��tW����W���Wp���W���X��HX����X0���X����X0��Yp��(Y���XY@!���Y�"���Y$��ZP%��8Z'��tZ`(���Z)���Z�)���Z�)��[�+��X[,���[�,���[�,���[�-��\@.��,\�.��P\�/��t\P0���\1���\�1���\@2��]�2��0] 5��l]6���]�6���]@9���]�:��^0<��P^�=���^?���^@���^�A��0_`B��\_�B���_D���_�F���_PG��@` H��l`@H���`�H���`�I���`@J���`�J��a�K��<aPL��`a�M���aPN���aO��b�P��<b�Q��hbT���b T���b@T���bPT���b`T���b0U��c0V��@c�X��|cpY���c�Y���c�Y���cPZ���c�^��Hd�_��td`a���d�a���d�b��e0d��<e@e��le0f���e0g���eh���e i��8f j��pf�l���fpn���fo��0gpo��Xg�p���g@q���g�q���g�r��(h�r��Dhps��|ht���hPt���h�t���hu��(i�u��Piv��|i@v���i�v���i0w���i�w���i�x��8jPy��dj�y���j�z���j�z���jP{��k�{�� kP|��<k�|��`k0}��xk�}���k@����k����l ���,lp���Pl����l�����l0����l�m`���@m����lm@����m�����m���0n�����n ����n����o����8o����to�����op����o��� p����Lp��hp@����p��p�����pP����p���q����8q`���\q����q�����q�����q`���r`���<r`���xr�����r����r���,s���|s�����s@����s`����s�tp���8t���dt`����t�����t�����t�����t`����tP��4u���HuP��tu`���u����u0���uP�� v���Lv���xv0���v���v����v0��4w���pw����wp���w���w���x0��(xP��lx@���x���x����x`��<y���py���y���y0��z��Dz����z����z����z@��{��� {���<{���X{���t{p���{����{p��{���{ �|`�,|��H|@�t|���|���|P��|��}�� }��p}��}P��}���}�� ~��8~��|~���~���~��p�H��d������P����P�(���T� ������؀p�T����������ԁ�������������8�0��t�`	����������������(���\� ��p�����������P��ԃ���� �� �� ��<��!��l��"����P#��Ԅ�#���p%�� ��%��L�,��h�,��|�0-����0/����1��0�`2��h� 3�����3��Ć�5�����5���@6��@��6��\��7��x��7����P9��؇p:���0;��4�P;��P��;��l��;����@<�����<���P=��<��=��t�@>�����>��܉0?����?��$��?��P�@@��l��@����A����`A����A����B��(�`B��D��B��p��B�����C��܋D����D��4�E��T��E����0F����0G����G����G��(� H��D�pK��`��K��t� M�����N���P��\��P�����Q�����Q��Ԏ�Q���PR���pS��l�T�����T��ď U���@U����U��D�@V�����V���� W��ؐpW�����W��$�0X��D��X��p��X����pY�����Y��ؑ�Z���[��(��[��T�0^��p�@^����`_����`����`����a��<�d��x� d�����d��ē e����e����e��(�@f��T��f�����f����0g��ؔ@h�����h��(�@k��h��k�����k����@l��̕�l���Po���`o��,��p��X��r����0s��ؖ`s����s���pt��L��v�����v�����v����@w���pw����w��8��x��l�y����py�����}����~��@�P��l�����������̙�����@���D�`���p� �����@��������������8�`���p�����`���؛�������� �`���<����h�������0�����`���ܜ`����Ў��0����L�@���h�P���|�`�����������0�����8�p���d�����������О �����p������H� ���d�`�����И����0���ȟ�����0��������(�����<�����X�p�����0���������ܠ���������P���@�����l������`���������ԡ��� ����p���l������ �����P���ܢ�����0���4�����P�����l������`���ģ����0������4�Ш����0���������ܤ��P���4�����x������P���̥zRx�$�M��`;FJw�?:*3$"D ���P;\��p��"�0���,��MH 
A�`��<E�v����HO��������QH ~
AL���iF�B�A �A(�D0S
(D ABBFU
(A ABBELh���iF�B�A �A(�D0S
(D ABBFU
(A ABBEL���iF�B�A �A(�D0S
(D ABBFU
(A ABBE8<���F�L�D �D(�D@a
(A ABBK(D���mE�D�G0P
AAAp���bH�����F�B�E �B(�A0�D8�DPn
8A0A(B BBBH�0��RH D
A�t��)E�W
DD@����F�B�B �A(�A0�DP�
0A(A BBBG T@��qF�A�G �G�8x����F�G�A �D(�D0x
(D ABBA�@��_H j
F����nE�Y
B�����E��
E����D q
K(<��(<H���F�C�H �sAB(h���|E�A�D0e
AAA,����F�F�F ��
ABF����jH \
A�$��jH \
A(�x��UE�D�F _
AAH((���UE�D�F _
AAH(T���UE�D�F _
AAH(���UE�D�F _
AAH(�H��UE�D�F _
AAH(�|��UE�D�F _
AAH(���UE�D�F _
AAH(0���UE�D�F _
AAH(\��UE�D�F _
AAH(�L��UE�D�F _
AAH(����UE�D�F _
AAH(����UE�D�F _
AAH(���UE�D�F _
AAH(8��UE�D�F _
AAH(dP��UE�D�F _
AAH(����UE�D�F _
AAH(����UE�D�F _
AAH(����UE�D�F _
AAH( ��UE�D�F _
AAH(@T��UE�D�F _
AAH(l���UE�D�F _
AAH(����UE�D�F _
AAH(����UE�D�F _
AAH$�$��?E�A�G lDA@	<��BE�K�f
AII�E�[�A��E�[�A�(\	H��}E�A�D q
DAH,�	����F�D�D �h
ABA�	���H0u
C�	���RDb
JI
A(�	����A�k
Dm
CF
JH 
���iB�B�E �E(�D0�D8�Dp�
8A0A(B BBBEHl
��vF�B�E �B(�A0�A8�D`(
8A0A(B BBBI<�
��F�B�A �A(�D�c
(A ABBIL�
|��	B�B�B �B(�A0�D8�J��
8A0A(B BBBDLH��bF�E�B �B(�A0�A8�D�
8A0A(B BBBF ���E�GP�
AC ����E�GP�
AK8���mF�B�A �D(�G@q
(A ABBE�� 0��bE�D l
AA8T@��F�B�A �A(�GP�
(A ABBB0���F�A�D �D`�
 AABB �p���qE�A
JD
EH����2
F�N�B �I(�H0�C8�D@�8A0A(B BBB 4
���E�G |
AG(X
���{E�H�G@Z
AAA�
���
��	(�
��hE�J
M������
D,�
L���F�H�A �[
ABA���AAF$���.E�c
A@���AAK(\���{E�H�D G
DAA�<��2H]
H�`��>Hf
K����7Hc
G����LE�c
H(�����E�H�D X
DAA$P	��7Hc
G@t	��7Hc
G4\�	���E�D�J X
CAA~
FAA,�
���A�C
F���F���
J0�����F�A�A �D@�
 AABB�|��Dx���B�H�A �B
ABHn
DBDD
DBA4T����E�K�D B
CAFD
FAA(�(��^E�G�D t
DAG(�\��vF�K�A �p
ABK(����vF�K�A �p
ABK(��vF�K�A �p
ABK(<X��vE�G�D u
DAF(h���vE�G�D u
DAF8����F�B�A �G(�D0e
(D ABBF8�����F�B�A �G(�D0e
(D ABBF@(���F�B�B �A(�A0�Dp
0A(A BBBJ@Pt���F�B�B �A(�A0�Dp
0A(A BBBJ8�����F�A�A �u
FBKA
CBJ(�d���E�D f
FKD
CIP����F�A�A �D0�
 FABN�
 DABAJ
 DABG(P����E�D�G M
GAK(|X��jE�M�D l
DAI(����ZE�D�D m
AAA8�����F�B�A �A(�G@x
(D ABBALd���F�B�B �B(�A0�A8�D�=
8A0A(B BBBG0`����F�A�A �G0J
 DABA0� ���F�A�A �G0J
 DABA(�|��QE�A�G0u
CAF(����QE�A�G0u
CAF8 ����F�B�A �A(�G@w
(D ABBA@\x���F�B�B �A(�A0�G@�
0D(A BBBA8����F�B�A �A(�G@w
(D ABBA8�����F�B�A �A(�G@w
(D ABBA@<���F�B�B �A(�A0�G@�
0D(A BBBA@\����F�B�B �A(�A0�G@�
0D(A BBBA@�t���F�B�B �A(�A0�G@�
0D(A BBBA8� ���F�B�A �A(�G@y
(D ABBAH � ��F�B�B �B(�A0�A8�GP�
8A0A(B BBBA8lx!���F�B�A �A(�G@w
(D ABBA8�"���F�B�A �A(�G@m
(D ABBA8��"���F�B�A �A(�G@m
(D ABBA( #���E�A�G0a
DAAL�#���E��
XlX)��	0�T)���F�A�A �G0i
 DABA�*�� �*��E�G �
AD(��*���E�A�G0�
AAK0�+���F�A�D �D0�
 AABEL�,�� E�Z(h�,��E�H�D0�
AAHH��-���F�B�B �B(�A0�A8�Dp�
8A0A(B BBBH\��/��F�E�B �B(�A0�A8�G�A�P�U�C�p
8A0A(B BBBE@�2��&E�`,\�2���F�A�A �n
ABG�X3��AAF�\3��WE�t
A��3��AAK��3��2H]
H��3��AHs
A �3��eE�t
OR
F<H4��2H]
HXl4��AHl
H\t�4���B�B�B �B(�A0�A8�G���V�P�C�N
8A0A(B BBBF��6����6��H��6��ZF�B�B �B(�A0�D8�D`�
8A0A(B BBBE(H�7��vF�G�A �v
ABI(tP8��vF�G�A �v
ABI,��8���F�D�J �[
ABF8�D9���F�H�A �D(�D0n
(D ABBB,�9��AF�A�A ��
ABD<;���H {
E(X�;���E�M�D A
DAA�<���L��(��>���E�A�G@�
AAF(�D@���E�H�D nIH��@��	�@��,$�@���F�A�A �y
ABD(T�A��uE�K�D k
DAA ��A���E�G H
DH�PB��AAK�TB��AHl
H��B��:He
H��B��:He
H0�B��-F�K�F �D0�
 AABF H�C���E�D u
AA(l�D��E�C�J0�
AAE(�|E���E�M�D u
DAA��E��UE�=� G��
�G��	8 G��fF�I�A �A(�D0/
(D ABBA0H LH��TF�A�A �D@�
 AABH0| xI��tF�A�A �D@�
 AABJ8� �J��sF�B�E �A(�A0�Y(D BBB� K���H E
C(!�K���E�A�G0�
DAG4!�L��AAK(P!�L��]F�H�D �r
DKE|!�L��2H]
H�!�L��2H]
H(�!M��^E�G�D n
FAK�!DM��AAF(�!HM���E�A�G0U
AAA(("�M���E�A�G0U
AAAT"0N��LHf
A8p"dN��F�L�D �A(�IPw
(A ABBC�"8O��{L�^�"�Q��	T�"�Q��_F�B�B �D(�A0�D���U�I�A�N
0A(A BBBAL8#�R��F�B�E �A(�A0�DP�XU`IXAP`
0A(A BBBD8�#lS���B�E�D �D(�D0n
(D ABBE�#�S��AAK(�#�S���E�H�D�p
AAE($8T���E�H�D0n
AAG 8$�T��jE�G D
DD\$(U��4E�i
A,x$LU���F�A�A �i
ABA0�$�U���F�D�A �G0_
 DABH�$8V��<E�c
A�$\V��sE�[L%�W���F�B�B �B(�A0�D8�F�s
8A0A(B BBBD`d%`\��F�B�B �B(�A0�D8�F��G�B�B�I�c
8A0A(B BBBDL�%_���F�B�B �A(�D0�Fp�xG�FxApc
0A(A BBBC&�a���H�4&Pb��	 H&Lb���E�G [
AH(l&�b��E�H�D0�
AAA �&�c���E�h
KR
F4�&xd���E�K�D x
FAEI
CAA�&�d��AAF,'�d��oF�A�D �C
ABA(@'$e��yF�A�K �s
ABAl'xe��OHe
E(�'�e���E�H�D x
AAE�'f��fE�w
E�'df��.E�c
A(�'xf��%E�A�D@�
AAD(|g���L�l(4(�h��E�H�D0�
AAA`(�i��	 t(�i���E�K l
AA �(�j���E�K t
AK �((k���E�K t
AK,�(�k���F�A�A �n
ABA()Tl��E�H�D0�
AAA<)Hm��	(P)Dm���E�A�J@�
AAD,|)n���F�A�A �u
ABA(�)�n��E�H�D0�
AAA�)�o��	,�)�o���F�A�A �u
ABA *p��&E�D p
AF@*$q��	,T* q���F�A�A �u
ABA(�*�q��E�A�D@�
AAC(�*�r��E�H�D0�
AAA�*�s��	,�*�s���F�A�A �u
ABA( +t��E�A�D@�
AAC(L+�t��E�H�D0�
AAAHx+�u���F�I�B �B(�A0�A8�DP�
8A0A(B BBBF,�+�v���F�K�A �H
ABA �+0w��&E�D p
AF(,<x��E�A�D@�
AACD, y��AAK`,$y��bH O
A(|,xy��mE�K�D v
DAA(�,�y��mE�K�D v
DAA�,z��,H�^
AL�,z��`F�I�B �B(�A0�A8�D�
8A0A(B BBBA@-$|��AAK\-(|��,H�^
A4x-<|���E�A�Q _
DAED
FAA�-�|��AAF�-�|��.E�c
A8�-�|��xF�I�A �A(�D0T
(D ABBA$.@}���H b
F@.�}��AAK\.�}��WHl
Fx.<~���H X
H�.�~���H Y
G�.D��:He
H�.h��.E�c
A�.|��AAK</����F�I�B �A(�A0�s
(D BBBA(D/���~E�K�D p
CAFp/D���.E�c
A4�/X���lE�H�D }
DAEI
DAA�/����2H]
H�/����:He
H�/؀��.E�c
A(0��kE�K�D p
CAFD00���.E�c
A<`0D����F�B�K �D(�I�F
(A ABBD�0Ԃ��JHc
G8�0����F�B�G �D(�D0T
(D ABBD�0|����H \
A1 ���lH^
J\01t����F�B�E �B(�K0�D8�D�x�G�\�A�
8A0A(B BBBE8�1��F�B�A �A(�FP�
(A ABBJL�1���&I�B�B �A(�A0��
(A BBBIF
(C BBBAL2����&I�B�B �A(�A0��
(A BBBIF
(C BBBALl2؊��&F�B�B �B(�A0�A8�D�i
8A0A(B BBBKL�2����&F�B�B �B(�A0�A8�D�i
8A0A(B BBBK,3�����M�H�A ��FI(<3(���E�H�D0�
AAAh3���	8|3���NF�B�A �A(�Dp�
(A ABBD,�3,����F�A�A �|
ABA�3����<E�c
A`4���F�B�B �B(�A0�A8�G�#�E�E�B�b�{
8A0A(B BBBEh4|���.L��4����	�4����	(�4����E�H�D0�
AAA�4|���	L�4x����F�B�B �B(�G0�K8�G��
8A0A(B BBBFL<5���eF�B�B �B(�A0�A8�G� I� �
8A0A(B BBBC`�5(���uF�I�B �B(�A0�A8�D@�
8D0A(B BBBGc
8A0A(B BBBE`�5D����F�I�B �B(�A0�A8�D@�
8D0A(B BBBGQ
8A0A(B BBBE(T6�����E�l
GM
K^
R0�6�)F�A�A �D@�
 AABA,�6��F�A�A �s
ABA�6����AAK7����+HY
E7����/H]
E87����BH]
ET7��.H\
Ep7�AAF(�7����bE�A�J o
DAA�7<���.E�c
A�7P���jHq
GH
E8�7�����F�B�D �D(�J0K
(D ABBA08�.E�c
A(L8����E�H�D x
AAEx8l���AAK �8p���?A�j
EE
E�8����HI,�8����}F�D�D �M
ABB 9��?A�j
EE
E,$9���}F�D�D �M
ABBT9P���HI(l9X���^F�K�A �k
ABA�9����(�9����^F�K�A �k
ABA�9����(�9�����E�A�Q O
DAA8:L����F�N�A �h
ABHc
ABA(T:���_E�K�D h
DAA�:D���WE�e
F�:����AHm
G�:����{E�@
AH�:����F�B�B �B(�A0�K8�D`s
8A0A(B BBBA$;����.E�c
A0@;�����F�H�A �D@�
 AABAt;P���AH\
E<�;����,F�D�B �A(�G0�{
(A BBBJD�;t����F�B�B �A(�A0�D�z
0A(A BBBFL<���+F�D�B �B(�A0�A8�D��
8A0A(B BBBI8h<����F�B�A �A(�Dp�
(A ABBD,�<���F�V�A ��FI�<p���MH 
A�<����HN=����	X=�����E�A�D p
DAII
DAJD
DAGD
DAGt
DAAx=,���9L�T
A�=P���ME�t
A8�=�����F�B�G �C(�D@F
(A ABBF�=8��� >4���dE�Q v
AA0$>����hF�A�A �D0z
 AABF(X>����*E�A�G@s
AAFL�>�����F�B�A �A(�G@�
(C ABBIY
(F ABBD�>P��6HU
A�>t��dE�n
A8?����F�B�A �A(�GP�
(A ABBFH?��>E�`
A,d?@��E�H�D AA(�?0���E�A�DPe
AAA8�?���:F�E�A �C(�D@�
(D ABBA@�?����F�E�B �D(�A0�DP�
0D(A BBBA0@@��>F�A�A �D@�
 AABF8t@���F�E�D �A(�D`�
(A ABBA(�@���TE�A�D0�
AAE(�@����E�A�D W
AAE(A<���E�A�D W
AAE4A���!E�[@PA����B�E�E �A(�A0�Dp�
0A(A BBBJ@�A ���B�M�A �B
ABKN
ABGFAB(�Al���E�D�D U
AADB��AAK  B���E�D h
AA DB����E�D h
AF hB���E�D h
AF �B����E�D j
AD �B$���E�D j
AD �B����E�D j
AD(�B<���E�D�D y
DAA $C����E�D n
AA HC,���E�D i
AE8lC���,F�E�D �A(�I@x
(A ABBI,�C����I�A�A �e
ABE(�C\���E�A�D N
DACD���qE�Y($DP���E�A�DPe
AAA8PD���:F�E�A �C(�D@�
(D ABBA@�D����F�E�B �D(�A0�DP�
0D(A BBBA �D$��5E�D �
AI8�D@��F�E�D �A(�D0~
(D ABBA80E��F�B�A �A(�D@�
(A ABBG(lEh��E�A�D Y
AAE$�E��/E�VC LCA8�E�rB�E�A �A(�D��
(A ABBJ8�EH��F�E�D �A(�I@�
(A ABBG@8F���B�M�A �B
ABKN
ABGFAB(|F��E�D�D g
AAJ�F��AAK �F���E�D h
AA �F,��E�D h
AF G���E�D h
AF 0GD��E�D j
AD TG���E�D j
AD xG\��E�D j
ADL�G���F�E�B �A(�F0�D@�HNPOHA@`
0A(A BBBE(�G(�oE�G�D m
AAA(Hl��E�D�D0f
AAK0DH��F�D�A �DP
 AABF(xH���E�A�D N
DAC�H0�_E�G�Hp��H|��H��	I��	4I���E�K�D V
FAGD
CAA,LI�F�A�K ��
ABA8|I��F�L�G �A(�G@|
(A ABBE,�I,����B�K�A �@
ABO�I�����I���� J�����E�D ]
DFL4JP���`F�B�B �B(�K0�D8�I�f
8A0A(B BBBD(�J`����E�A�D _
AAET�J����B�B�B �E(�D0�D8�D@�HNPQHA@L
8A0A(B BBBIK����,K����6E�D �
CAB
FA(LK����gE�A�D@�
AAB,xK��F�A�K ��
ABC(�K����E�D�D `
DAF4�K����E�A�D0[
AAIN
AAA(LX���E�D�D Z
DAA88L���F�E�D �A(�D0}
(D ABBA4tL����A�A�D0V
DAGC
DAAH�L����F�B�E �B(�D0�F8�DP�
8A0A(B BBBG,�L,��{E�G
M�����'
H@(M|���B�M�A �B
ABKN
ABGFAB$lM���bA�i
FF
JF
AH�M��F�B�B �B(�K0�D8�D@�
8D0A(B BBBC(�M����E�H�G D
DAA(Nh	���E�H�G N
DAA(8N�	���E�H�G N
DAAdNp
��AAK4�Nt
���E�K�D H
FAED
CAA(�N�
���E�H�D z
AAE�N`��2H]
H4O���aE�H�D i
DDND
FAA(8O���BE�K�D c
DAA$dO����HS
EK
EK
E(�OH��VE�A�N h
DAG�O|��2H]
H�O���9Hd
H �O����E�K b
AA PP
���E�K b
AA88P�
���F�B�K �D(�D@\
(D ABBA(tPp���E�K�G s
DAA(�P���E�K�D K
AAA8�P8���F�D�K �h
CBFg
ABAQ���AAK$Q���dE�t
N@QD���E�~
A\Q���dE�t
N xQ��tE�|
OF
A�Qh��UI(�Q����E�G�D p
DAK,�Q��yE�C
F���E�G��
A(Rd��WA�M�D g
DAA(<R���sI�K�F �}
ABA hR���DE�h
KF
A4�R���E�A�D J
GALD
FAA �R���tE�|
OF
A(�R����E�D�D |
DAA(SP���E�A�D P
DAA8@S���jF�I�A �A(�D0N(A ABB(|S!��EE�A�Dp
AAA@�S<#���F�E�B �D(�A0�DP�
0D(A BBBA8�S�$��:F�E�A �C(�D@�
(D ABBA@(T�%���F�E�B �D(�A0�DP�
0D(A BBBALlT�&��kF�B�E �B(�A0�C8�J�t
8A0A(B BBBE8�T�*���F�B�A �A(�DP�
(A ABBBL�T\,���F�E�B �A(�F0�DP�XN`OXAP`
0A(A BBBC(HU�-���E�A�D Y
AAE8tU@.���F�E�D �A(�D0~
(D ABBA�U/��"E�\H�U/���B�E�B �B(�A0�D8�D��
8A0A(B BBBD@V�0���B�M�A �B
ABKN
ABGFAB(\V�0���E�D�D U
AAD�Vl1��AAK�Vp1��RE�o
A �V�1���E�D j
AD �V@2���E�D j
AD W�2���E�D j
AD ,WX3���E�D h
AF PW�3���E�D h
AF tWp4���E�D j
AD �W�4���E�D j
AD �W�5���E�D j
AD(�W6���E�D�D@|
AAE,X�6���I�A�A �J
ABH8<XX7���F�E�G �A(�DP
(A ABBG8xX9���F�E�G �A(�DP
(A ABBG8�X�:��CF�E�D �F(�D`R
(A ABBG8�X�<��CF�E�D �F(�D`R
(A ABBG8,Y?��F�E�D �A(�I@x
(A ABBILhY�A���F�B�B �B(�D0�D8�F�
8A0A(B BBBF(�Y|E���E�A�D N
DAC�YF��~E�hZpI��HO4ZxI���E�D�G0{
DAH[
DAATZ�I��qH x
H`
A(tZ0J���E�D�D ~
DAH�Z�J��OH s
A�Z�J��IH m
A�ZK���L���Z�K��	([�K���A�I�D0�
DAA84[`L���F�E�A �A(�DP�
(A ABBEp[M��C~(�[PM���A�D�D d
FAD�[�M��	�[�M��8�[�M���F�A�A �q
ABDa
ABAD\PN��F�A�A �r
ABCh
ABEB
ABA(\\(O��ME�A�N f
DAA(�\LO��ME�A�N f
DAA�\pO��2Hi0�\�O���F�C�A �G0�
 AABG0]4P���B�K�D �GPf
 AABF84]�P��IF�E�E �D(�K0�^(A BBB8p]�P��IF�E�E �D(�K0�^(A BBB�]Q��VH M �]PQ���E�I T
AE �]�Q���E�I T
AE,^(R���F�J�D �^
ABK$<^�R���E�A�D0�AA@d^S��F�B�B �D(�D0�D@�
0A(A BBBE(�^�S���E�D�D@�
AAJ0�^�T���F�D�C �D`�
 AABI(_,U���E�E�G@�
AAB@4_�U���F�E�E �A(�C0�G@�
0A(A BBBB0x_W��1F�A�D �G0�
 AABF0�_(X��YF�A�D �G0�
 AABHH�_TY���F�B�L �B(�A0�F8�GP�
8D0A(B BBBA,`[��(HX8D` [���F�B�A �D(�D@�
(A ABBFH�`�\���F�I�A �A(�D0d
(D ABBFD(A ABB,�`]��F�H�A ��
ABF�`�b��LHu
CGac��LHu
CG<a8c��DHl
DG\ahc��AAMxalc��AAM�apc��AAK�atc��qH0^
A�a�c��qH0^
A�a<d��sH `
Ab�d��AAH( b�d���E�A�G0a
AAALbe��2H]
Hhb,e��2H]
H(�bPe���E�D�D |
DAA�b�e��7Hc
G�b�e��2H]
H4�bf���E�A�D v
DAKk
DAA cdf��GHe
KI
A@c�f��2H]
HL\c�f���F�B�A �A(�D0k
(D ABBFD
(G DBBA4�cg��dE�A�D x
DAII
DAA�cPg��GHe
KI
A d�g��QE�s
HK
A0(d�g���F�D�A �G0�
 AABE\dhh��Cd[@td�h���B�B�B �D(�A0�G`"
0A(A BBBD0�dLk���F�D�D �F0L
 AABD�dl��Tel���B�B�E �B(�D0�D8�DP
XI`]K
8D0A(B BBBA(Xeln���E�D�F0j
AAE�e o��&E�\(�e4o���E�D�F0j
AAE�e�o��&E�\(�e�o���E�C�G0r
AAE fpp���E�D n
AH(8f�p��kE�A�N |
AAA(df q��ME�A�Q k
DAA(�fDq��xE�J�D J
DAA(�f�q��nE�A�D N
DAC(�f�q��kE�A�N |
AAAxg r��gB�B�B �B(�A0�A8�DP_
8A0A(B BBBI�
8C0A(B BBBHa
8A0A(B BBBE,�gs���F�A�D �U
FBAL�gts���B�E�B �E(�A0�A8�F�
8A0A(B BBBIh�x��$h�x��88h�x��2F�B�A �A(�D@B
(A ABBJ8th����,F�E�G �A(�G@C
(A ABBE@�h����'F�F�A �D0z
 IABIO
 DABA,�h����F�M�A ��
AIA$i����	(8i����E�A�D0�
AAB0di����GF�A�A �D0_
 DABF�i����(�i�����E�A�D 
AAE�i���AAK�i ���iH V
Ajt���QHq
GG
E(0j����ZF�A�D �k
DBL\j���H �
G,xj�����F�A�D �F
DBI8�j<����F�B�D �A(�D@�
(A ABBA(�j��E�A�G d
DAA(kt����E�A�D 
AAE<k��vL�W(\kH���_E�G�D@G
AAA�k|���0L��k����	(�k����E�H�D0�
AAB8�k�����F�I�A �A(�DP%
(A ABBHH lD����F�B�B �H(�A0�A8�DP�
8A0A(B BBBE4ll�����E�H�D E
DAEK
ADE,�l��F�A�A �n
ABA(�l�����E�A�D0U
AAA0m����F�K�F �GP�
 AABB4m����<E�c
A(Pm����jE�M�D l
DAI|m����6HU
A�m���E���m ���	H�m����F�B�B �E(�A0�I8�M@�
8D0A(B BBBA(np���E�H�D0�
AAA,@nd����F�A�A �s
ABApn�AAF�n����.E�c
A�n���AAK4�n����E�K�D h
CAHn
AAA(�nx���dE�K�D m
DAAL(o�����F�I�A �A(�D0[
(D ABBGD
(A ABBE4xo���fE�A�J t
DAGI
FAA4�oD���~E�K�D x
FAEI
CAA,�o����oF�A�D �C
ABA(p̴��yF�A�K �s
ABADp ���OHe
E(`pT���mF�A�K �u
ABA�p����OHe
E(�p̵��mF�A�K �u
ABA�p���OHe
E(�pD���_E�K�D h
DAAqx���OHe
E(8q����_E�K�D h
DAAdq��OHe
E(�q���NE�K�D o
DAA�q8���2H]
HL�q\����F�B�B �B(�A0�A8�G@@HHP[8A0A(B BBB(r�����E�H�D @
AAE(Dr����F�D�A �z
ABHprt���QHq
GG
E(�r�����E�H�D x
AAE(�r����E�H�D x
AAE0�r|����F�A�A �D@�
 AABA(sH���jE�M�D l
DAIHs����6HU
Ads����>E�`
A�sԺ��EE�(�s���	H�s����F�B�B �E(�A0�I8�M@�
8D0A(B BBBAH�sX����F�B�B �E(�A0�I8�M@
8D0A(B BBBALHt���&F�I�A �A(�D0k
(D ABBGQ
(A ABBI(�t�����E�H�D0n
AAA,�t@���F�A�A �v
ABA�t���AAFu���.E�c
A(,u���dE�K�D m
DAALXu,��F�I�A �A(�D0[
(D ABBGQ
(A ABBI(�u����E�H�D x
AAE(�u`���E�H�D x
AAE(v����E�H�D x
AAE,v(��AAK4Hv,��~E�K�D x
FAEI
CAA8�vt��{F�L�D �A(�G0v
(D ABBA(�v���nF�A�K �s
ABA(�v���mF�A�K �u
ABAw@��GHe
KI
A(4wp��mF�A�K �u
ABA`w���GHe
KI
A(�w���_E�K�D h
DAA�w��2H]
H(�w<���F�D�A �z
ABH�w���QHq
GG
E0x����F�A�A �D@�
 AABAHx���6HU
A(dx���jE�M�D l
DAI�x$���E���x���	(�x���E�H�D0�
AAA4�x����E�H�D E
DAEK
ADE $y���E�D r
AD,Hy����F�A�A �n
ABA8xyL��bF�B�A �A(�DP�
(A ABBB�y���4�y����E�H�D y
DAIW
DAEz��JHc
G(z8���E�A�D0U
AAAHz���AAK(dz���MF�D�A �y
ABA(�z���MF�D�A �y
ABA(�z��MF�D�A �y
ABA(�z,��MF�D�A �y
ABA {P��E�G`�
AA(8{<���E�J�D V
DAA<d{���fF�B�K �F(�G��
(A ABBC�{���<E�c
A�{���KE�m
A(�{(��jE�M�D l
DAI|l��6HU
A,$|����F�O�H ��HIT|0��	(h|,��E�H�D0�
AAAL�| ���F�I�B �B(�A0�A8�G�F
8A0A(B BBBA,�|����B�K�A �C
ABE}P��&E�`$0}d��BE�A�G \JJ,X}����F�A�A �n
ABA8�}��
F�B�K �D(�I`�
(A ABBC�}���<E�c
A�}��AAK(�}��_A�K�D e
GAE(~L��.He0@~d��ME�D�J X
CAAZAA0t~����E�D `
GH|
FFV
DH�~<�QHq
GG
E�~|�QHq
GG
E\�~��$F�B�E �B(�D0�A8�G�e�K�K�A�c
8A0A(B BBBD0H��:F�A�F �JP�
 AABH(|��jE�M�D l
DAI���6HU
A,��KE�H�D 'FH� �	H���F�B�B �E(�A0�I8�M@�
8D0A(B BBBA(T�`��E�H�D0n
AAA(����E�H�D0�
AAA,�����F�A�A �v
ABA܀x�AAF(��|�_E�K�D h
DAAL$���F�I�A �A(�D0[
(D ABBGQ
(A ABBI4t����E�K�D x
FAEI
CAA8����{F�L�D �A(�G0v
(D ABBA(�,�yF�A�K �s
ABA���OHe
E(0���_E�K�D h
DAA\���OHe
E(x���F�D�A �z
ABH(�����E�H�D x
AAE(Ђ�E�H�D x
AAE��h�.E�c
A0�|�F�A�A �D@�
 AABAL�H�dHq
GG
El���6HU
A����+E���������	(̃��!E�H�D0�
AABH����F�B�B �E(�A0�I8�M@�
8D0A(B BBBA,D� ����F�A�A �n
ABA(t�����rE�K�D m
DAAL�����F�I�A �A(�D0[
(D ABBGQ
(A ABBI����AAK(����mF�A�K �u
ABA8����GHe
KI
A(X�L���mF�A�K �u
ABA������2H]
H������<E�c
A(�����jE�M�D l
DAI����VHb
A�`���dE�L $������E�G0Q
ABH����OE�Ed�P���	x�L���E�V0��P����F�D�D �D0m
 DABA0Ȇ����F�D�D �D0m
 DABA��h���CL�^
A�����AAK4�����2H]
H(P����bF�G�D �t
ABH(|����VE�A�N h
DAG(��<���RF�A�D �q
ABAԇp���GHe
KI
A�����2H]
H����2H]
H,���:He
H\H����AF�I�A �A(�D0l
(D ABBFQ
(A ABBID
(G DBBE4�������E�K�D B
FACI
CAA�T���AAF��X���.E�c
A(�l���cE�A�J p
DAA(D�����cE�A�J p
DAAp��MHg
A��(��AAK(��,��RF�A�D �q
ABA(ԉ`��SE�D�N q
DAA�����E��
A ���.E�c
A0<�(���F�A�A �D@
 AABFLp�����F�B�B �B(�A0�A8�D�d
8A0A(B BBBA(��D��VF�G�A �q
ABF(�x��VF�G�A �q
ABF(����VF�G�A �q
ABF(D����VF�G�A �q
ABF@p���YF�B�B �A(�A0�Dp�
0A(A BBBH4��0��^F�A�C �\
DBLbAB�X��6HU
A,�|��GF�I�O ��
FPEGNU�p�0��|%d���X��,���I�� R`�p_G��s��P}
���%�p�<�p�R�p�F���� ��0��`����F��%W��%ӵ�
��� �'��3���������@�c��J���@5��p/t��@'� T���b��pl���l����:�B�M�Z���_�q�z������������͈ֈڈ������#�3�A�M�[�k�|�fIuI�I�I�8
؁�|%�|%���o`�p�
	J��%�X����	���o���oX����o�o�����of��% 909@9P9`9p9�9�9�9�9�9�9�9�9:: :0:@:P:`:p:�:�:�:�:�:�:�:�:;; ;0;@;P;`;p;�;�;�;�;�;�;�;�;<< <0<@<P<`<p<�<�<�<�<�<�<�<�<== =0=@=P=`=p=�=�=�=�=�=�=�=�=>> >0>@>P>`>p>�>�>�>�>�>�>�>�>?? ?0?@?P?`?p?�?�?�?�?�?�?�?�?@@ @0@@@P@`@p@�@�@�@�@�@�@�@�@AA A0A@APA`ApA�A�A�A�A�A�A�A�ABB B0B@BPB`BpB�B�B�B�B�B�B�B�BCC C0C@CPC`CpC�C�C�C�C�C�C�C�CDD D0D@DPD`DpD�D�D�D�D�D�D�D�DEE E0E@EPE`EpE�E�E�E�E�E�E�E�EFF F0F@FPF`FpF�F�F�F�F�F�F�F�FGG G0G@GPG`GpG�G�G�G�G�G�G�G�GHH H0H@HPH`HpH�H�H�H�H�H�H�H�HII I0I@IPI`IpI�I�I�I�I�I�I�I�IJJ J0J@JPJ`JpJ�J�J�J�J�J�J�J�JKK K0K@KPK`KpK�K�K�K�K�K�K�K�KLL L0L@LPL`LpL�L�L�L�L�L�L�L�LMM M0M@MPM`MpM�M�M�M�M�M�M�M�MNN N0N@NPN`NpN�N�N�N�N�N�N�N�NOO O0O@OPO`OpO�O�O�O�O�O�O�O�OPP P0P@PPP`PpP�P�P�P�P�P�P�P�PQQ Q0Q@QPQ`QpQ�Q�Q�Q�Q�Q�Q�Q�QRR R0R@RPR`RpR�R�R�R�R�R�R�R�RSS S0S@SPS`SpS�S�S�S�S�S�S�S�STT T0T@TPT`TpT�T�T�T�T�T�T�T�TUU U0U@UPU`UpU�U�U�U�U�U�U�U�UVV V0V@VPV`VpV�V�V�V�V�V�V�V�VWW W0W@WPW`WpW�W�W�W�W�W�W�W�WXX X0X@XPX`XpX�X�X�X�X�X�X�X�XYY Y0Y@YPY`YpY�Y�Y�Y�Y�Y�Y�Y�YZZ Z0Z@ZPZ`ZpZ�Z�Z�Z�Z�Z�Z�Z�Z[[ [0[@[P[`[p[�[�[�[�[�[�[�[�[\\ \0\@\P\`\p\�\�\�\�\�\�\�\�\]] ]0]@]P]`]p]�]�]�]�]�]�]�]�]^^ ^0^@^P^`^p^�^�^�^�^�^�^�^�^__ _0_@_P_`_p_�_�_�_�_�_�_�_�_`` `0`@`P```p`�`�`�`�`�`�`�`�`aa a0a@aPa`apa�a�a�a�a�a�a�a�abb b0b@bPb`bpb�b�b�b�b�b�b�b�bcc c0c@cPc`cpc�c�c�c�c�c�c�c�cdd d0d@dPd`dpd�d�d�d�d�d�d�d�dee e0e@ePe`epe�e�e�e�e�e�e�e�eff f0f@fPf`fpf�f�f�f�f�f�f�f�fgg g0g@gPg`gpg�g�g�g�g�g�g�g�ghh h0h@hPh`hph�h�h�h�h�h�h�h�hii i0i@iPi`ipi�i�i�i�i�i�i�i�ijj j0j@jPj`jpj�j�j�j�j�j�j�j�jkk k0k@kPk`kpk�k�k�k�k�k�k�k�kll l0l@lPl`lpl�l�l�l�l�l�l�l�lmm m0m@mPm`mpm�m�m�m�m�m�m�m�mnn n0n@nPn`npn�n�n�n�n�n�n�n�noo o0o@oPo`opo�o�o�o�o�o�o�o�opp p0p@pPp`ppp�p�p�p�p�p�p�p�pqq q0q@qPq`qpq�q�q�q�q�q�q�q�qrr r0r@rPr`rpr�r�r�r�r�r�r�r�rss s0s@sPs`sps�s�s�s�s�s�s�s�stt t0t@tPt`tGA$3a1�8�GA$3p1113��ׁGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113��kGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��blGA+GLIBCXX_ASSERTIONSopenssl.so-2.5.9-114.module_el8.10.0+3991+5e651d4e.x86_64.debug�5c,�7zXZ�ִF!t/��̷#�]?�E�h=��ڊ�2N��ER�U	�o�'鞐2�r8h���a��uD�S����0�
�|p9�Ѻ�Ȕ���e9D�����#_����8�H�#��W��h��¸7rV��α`��h\{�.�ں+�d$-O��
r%ȵũS���`/@�oh:7�R�;�O���ܫ��'��g�i��� u�]@��r�Mj�2Ek]A�Δ��\�|6Zc��-%tڀ�S~�'�c�m[)�UO&��)�l��N:�g8[z,8��7(ܝluZ��V�M��N��{w�G&	���Wv,o	��Q��l7���;"�|{�
�Gћv�׽Q����[����� :�SWjxp,9�X��C���hM����y���g:/40��Tyρ����A{'�ğ�=*� `�������xwѶ�[�k@���HK]z͍���z��6��~*ظ�)��s�̚�&��j�S�9�Psw�㻤 J�'�vNp�Y�'q�+�f*�638r��fH�K
�!Xp�~l�0�2��I�O���xQ6�}��l	j9�雑j�V��t�(ȟ}��lw�6��ݿ�Q���W��k}���͓�x1�X�u�`ફ
I{����0��&�#y��ݦ��;ί�0��;W�@$
>�;_<�S�7�bfڢBG2���X�8�S{�΋�|YDVs�T�ixm�o�0v����,yי��]�z-��:w����w��t��5w�e�;7h˼s����:nrzG�8���Um��3V��� �mBq��M�����1����_��Z�#�������N��+
��{z�xdwS�D^�r���	�Fg�@2�r�X��)6~>�܈�f�ʮ{@���U.��Z�ɛIド�	�	љL��&@��/���ƿ�F�}@�:� �`w�5){�A�["�T���2�(A��<H�2��FZ�)q�2;b�E�"�uΧ�����5��{��d{��aC�t��J�/�c�I�β׊8k��u���=���#)U���-w���	�~�;C!�*���~�] i���j�)�;Q�,9�<B�r�bXR��Z�ꙏ"�՚.��x�f�ar�������3�x�K�_zV�/P��x�$���W�4���Z��t�Ό�G~��G��|}i��_���{��JЂ@�`g���6����i���TT��hN�^�ͧ�#!.��(�b���q���~�����,�Z�?�).������!�r���U�؋�-oYCeP	�TOg+�۹T��`ʺ,5��&౶}�XQ�2����4�����~�r�K�y�Ѹ��?�r>��_-�
��|��\��s�g؛�wz"�<�⛔��q���7��~O�+[��Ћ��\��m-ShXS���-�����8B�6���wVڿ9<��pf���A��+ú���>��W�1�+�����6��W��MjT=#'zF\.�bA�*�س�K��ts��=�~nܷ �W�����/糜0��f�pו�4��61�&��I�8�� �ub�`����uˣ�0�D@�4�m���B��#�Fq�طE�E���YҴ�$���r�?t�ې
�K�<w�V�U����3J�':C���)�U�@�Cī��ʂG�f�#�^f�z�r������G����Hp�mT��f�h����֐BB8K���Ezx"���z*20�,%�7�<���s�}~����"٨������U��q���	^��uq�͞bYL%'�wfwS�s̙��V!dC��R,>��u���}�#�e&s���xơ��Yh��4�����8♠@�~ډu��ͬ�X$���r
,[(��lC�ʟ�T��������;g��N��ܣ�G�ޭ=q)�[8Y�)�`E#=��zWw��QF�
�d���rv�4����0�m���D[�
��;Oq�_�yg�!�5n/�e=�p�8\mO�?g���AFҖ��`�9���<��D���*�v�c�F~@s���-'����������%�E�9��$8��Ia��NW�y�,�<C�9�ΐ�Y���}�\�c��SA6���T/�?�s���Z<e��!oA�O�e[E[���TH��d��Q��absݛV���4E�“g �� ,���1�L�Di�	D?nr�n�̕z#�(��?{D߈���{��m�9
�2���D��Bv��W�8��BY���#��x�gi�L6�?�'�.�}]$�t �u��
8��/�,���fe�|ddr�y}����@�d�4
.� ��h���?[M�DGR��{�͚�kC"��xJ���(�{�}��b�cS���~��ay7N�[�`�0�ɢ�Oq~���#+f�#Ja-�7ɞ��ڥ�8l���X���1�{�.��֢nXe�4b�6�������$K��RQw�85?&��=(����؊�z�,_)s��|��� HiI�
U�+i]���{�>@5�q�̸^��s��P��]�I<H���^���<=��̫=���z�~����T�&��*E�Q;_I�xpu��Ja�����0ͥ��/��O�6Ӥ�:g��ݦ'|�JذFC���p���������`���sU�BM�B�=w��{��l�KL�;Ռ>�N@mq��ߏ/�N2�g�w�8k�r�aY��n~G�1K̷�'g�zj޷C~�Շ�����y��H;�)��T���w��7��p)R6�l8]0�.���A4�>���mXAe�=޷q���lpx��6��p�{��;s ���^)��D���'8&�ʼnE���rf!59h'PS x�7B��e�"�Qֱ���k~nl[�zK;��D`X�s*h<4^��F5�;�-��W��b��퍢���n۔T���N�0�o){.=�4�`�ƸZ&�N�1��ش_�3E?!m�'R��#Ӆ�q{'��}��v��Hxji�����&���}��9W�<��%��Y�����br�6dP�j�8��n���,
pL��Ѳl�Gʖ�[p|�_�Ưy9g(8D�le�a�|�	����:�8>jX�DT]�=�W�]����U�O�:�����������%���lU�z��Q�u���dc�/F��qvaE���cɢ��<�Yh-=�.�DHgɨ�ZT�z�5U(�	���#�

�3�s��&��}D\2C��Jq�Z�[�*Y�h1�͞���'/�Q�V��;��V���
a�O�W�/�i�ݤ�A�3n~�ƿc��hAxB�xo~Z�
i��a�}ܫ��&�#�[�Ǣ,���M�C?�����74��)��6�����0���ЃN��_�+8��)0�+I�3��a�Jd� ��h�2u�ɜ�Ljxs�ABx��$P}��9�O'�t���bc��Tq���%����G�#���s�m˹L�Qr�y�:��~^�|��
��s1j�NoǸ9>5���H+��Xj�\:��}$�����}��w	�l�}�������7FM��k��gsr�0u�;A�e��Ɠ&���;V����k��)�"�*A7�>ܑ�5&�u�3��߫@C��ԛ}���Ov�YX�gN_�]ÅD��[\	�摿�+�7G�,j�k��,q��֚��R���_S�ٗ.�:���������Ӊ*�X� Q93��e텞J����$Re�\�k\+mT	�u��f��}���<��0~�#���|Ӈ6�[<���OWp։�{����pwz>7�y�N�4tUV����
$U��|x�;
�R_�U�mir�;�{��u�W�~��Ѫ�ưKt�'��e�tn���Д�1+�5��;�+�4�߭Ѕ5c�	�%�V埼�?��ޛ(�S'{�)�h����~#��3��bF~�h;o��C��^Ն���_+�܌��aI<+c�a[%C~��rEA$��C]e�p�r�\u���A�j�+�2�|��V\�h ���;��Kw��k;Z�)��_���9�11k����;1�`��j|,
�o�K��^9,���_�i[�Oe��/�pe;%j�k���\��7�/�68) ��[G�[-�����w��gDk�&�=�wi���s�W�]���(yo��϶�͝ȋ$�5=���\vQ�M ����Fh�ϰ���Y�J�5���}�����������e��ڱg��l��7À4��|�����^5�l��
�མ4�N��N�y��������sM��s�>uՕg!�U��J��&�6�la��9��
۱א�O��Ń�]z�lUP;-��kur�b{�����#Țw��~����q�`��ա��Da�J�Q�zS���.#�s��}A]�\L�]�>,S�&n�l�����Ǧϗ��˪"��S�H\��:/��Cʬ���cC�J��9��H�}��Ÿ�yz�[�S��OC15��Y�%�9��k�"�������R�X( �4^%�����(��a=��/����,��?h��N�o��5�R�Ym5��Y'�����g��`�c�G8�R"Ȉ�Yu�I@�|o\�I&*.�����V�Sj�*C�Ҋ�{cLW�'��~ӷU����]�1d��,{FG
�tڡ��Z@�)� K~3�u�I�6P6=l;W����G`�ˢ��-r>_@���[-t77�+}�W|_�V�J�"�4�T�'U������uL���j�E�ؖ|���f���t�w���'{la���yM�t���̬��q��ģ��vt��{</? %�&H�[�w��W$� _%S�A(�롸���t8�i�9�hWQg�"��(�pJ�ܔ��9�	F����������|m�o�k�m�3g�S�6��	��K���'8.��^�b{_�3�$+�r���ɾξm�h��yb7Ǔ���b\���9?E��>(�|�.����Ѧ<d;ә��މ�M��=�uG���(,��Q��l�&Աk߲��?�%.?rK�+h��T5�]T=��Ыj�b�>��o�]G	�:�A
 :JOt(mD�y%�e�g��j���E�Д��X���Y�1іǯ�(�`!�|6/{?�`#V(��CF�,�*HB�j)���$��z6횇drބ�O͋dwn�.�2�Su`���?��˜Xg�/�	VCx=����!�Z4���W*�+
��0���m	�aA������e6��
HM �Oͤߋ9�����5��ʐ�NMƥ�p�6\�
�r>�<_��0+�C�ՓN`���C&�Έ&x��A�%�N)x3��-�ws�9Hs
*!\��z��2J�W���?�,��+a��ä�\;���,`�J�#�ըg���V����{��N��~2� �Mv��r�Q����+2v_��gs!ψJ�~�$�7I����"DU�9�҂�
0^�L���}O[�I'�������j�b�s�(�-�_�V�� �;V�p��<��MC_�#��y��H��U����?�e��*��,V�Ji��T��"{�P:�G�T���9����[�-���'HSKGv����,��=}��F6�
MG1�h�z����=FA�obgl���}�[��Ϟ��x08�CC]�(G�Q�e��K&
�g"�uw��ol�<]e��w)�F����~ELcRS�䪠$��N!��N��݀/��_li�9?���������r�X�mk�<�٩M��kh0$@EyQ6&�A1v(�}�&��l�/����i����%n�j��ۦ�~��*h�+����G��,P�Sa'3�T�hU�JR�w.EAB�X�!�x�_�D]!_�Ց�靅�\i�9��ۚ�.��Wc�f{�CK�E%0�5�c��b��Z�qa�G
ű�I�\0`1���_}����/R\�6�3����Q6���`�nfU�Zr��e����{�N���`y�9�L`f˼$M�ê�TP��!�c>���J���@&�
c�f(؁��_扑�֥D�
\��`z��^�Y�e6�1E�t h�f�X�x�Z;�K���G)ٮ�!�n6"�&D�`l�-����yyk�e|kVh�G,�Q2�Fp�T�����:����"����`8�|���~�b��p�����yq/o��g����@�*�گ�����(׹-�D]�3�;��LO׳�2t\=�*�O+�b�����T�����,A@���XyOXB������|�q���e���
c'w��7A�:4�?F�ù#Ob㐙�w9����v
�10�^��d0a��.��׮=���.X\�D[�GU��:�j��?�H�A��(��>�HڃT�$jtDs)o[��:��S�	|jNE���X5��n)�q�\�����.	�jXM��gC�
�¸,[
ő.�(vo�`ې��h(�?n������E���(<�'���X�!^ڈD��B��1�ںw���o�}����8e��W�Hk,��x8���)�HQG�x#6�v�� F�v�N��=f��Tߕ&�N	+�ɢc��Y-���x�:W'M���;H�OH�@z�+��&{zjeIZ����K��&x��b�e�'1��̤�+|��x��h�sj�v���Ѭ1S�&�[�b�R����7�I�0��~����S��ۓ� mwU�d�}��;ّu�+�

Ơ�x��Ke����4�D^�Hkİ��.�O�ũQS����q���?{x�B��2�X8��S!�����{E����jU��*�����S��_��T��9�������B�|>�d6/��#*����V™�6�m�\ U�/���H�Ft�33]����ۮ���?~mMT1��,ET����r��L�a�#��JLI[�ak��%�����?/�j�TVGkn:U{��{|�Yw6|QyS#.$�0����3� v׍��خ
B���������u��C���Z��t���bk��[#��<��AR�!���cg|'&���2��;7l�V(�{fH���G�*_{���NV.�t�i��\��Mَ!'�Rb���$��K4
����-�U�h���(���@5�x�]���hI��#�	�{Oz��M��~�D<J�Z�����T9S�W�J���5I
�phו�9��g5G�Wv�h��<�o�
��`Q�p���|�ǺH.�-�5�.���T5�P��BEKVZ!�XK��%���-Yn���������#�%�����.�穱2��ĭ��zoס��$KU�'�N������tn�,����p[`�t��y��ћ��Z̔��cw
(�1�n�G�1��7�
SM��G�tԫ�vGZ0� ��z��[Z4k��%��̰'��Ƨ|�<����)6��$���	~�kn��	��&<��+p��Sv<(\�L2)�y�Y~N^���z��eZG20w�P�����i8��
�s@#l[�&��8!�#��V
j�H[���Q�7}V��9{OB�
��"(�>/o ��ד,�
9����/����e{�5劄�h��=5���Ē��$v�ā{i���vb��X0T��f�d]5Mʜ�g,$ɂm��)��E$.b��	^8�cK&�����,7�e	�u�f�3������s���^�e�xQH���j舌�^��
�ڎ硉rAȊ������1/�G��h�4�/k��.M��+P����YU;�`��E3�b�e��ĴQd[��(�?'��'( ����^e��`�L利�X�;-F�'����l��t��b*��n�Nߗ��P��C�A��#�S�+�<R'���w?�^�ַ�	|�+�G�?������.e5��ʹ֮��R؈D�9iq��kK�{1	��v.��Yx�É�
د�	^6Kf��n�\�B�d"kɬ���7�ܕH������b��P��Z��	]�$����"1�)'�`�ps�}��>Ǚ��N��`�
7U�^�Vp'�Te�5 �}f�f׻���;kcS��h퇼տ�0]W�v5��=�W\x:%^{�P�?�؃��#]>ޞ�2�۶3�yba��"���S���mbx0�V�����Yf›����kcȮY��I��7J�6�Pk�pmt�;Ϻ�?�b�M�+h')&���A��9nb火�t����K�`%~���YU��c��N��?����k7�=����P��v�*é\5��-2ƕ�(m9�"_�gf��;�\n:�a�9[Fi2lķ-��e�=��:,���yj)��|
���t�7�����|�'���N��/O�[����]c���is�Wxa�;�X�ڒ1�IɴJ�/'�Z�&���_�����}�ǥutcɶ�̊�L2zi����;����R3��DT�a�MX�D����Ǔ&�5j'��tE���'���0`�'���~�&��ik�d͑)�N;�,�+g�l7�(A�?R[Y^��ǁܪv��zB�́6$
�C��N��@�4�<��'h�_~�S�7���9
�w��q�b��F��-��;Os�+W<d,��,.�c��Ӳ\J.����[�<&���ē>j�Jfۚ��.��8�|�1}ʮK<�M{�,%��_T�`!��@�)�HP�p�Q��uP�c��#�-��)��1!�A���6z�������p��ŀ0���h�I,�e3%-��qR.� �v�#A���Lv"��ҳ�p�'ƈL�ge[$|��I��amlʇ5�⟗�1�mĜ塺��,@��T��>Z)��B~F�e��R:�-7t��f�,�>
g��T(����K4r�o�7lfv��w�f%9I
o^�����lne��pj�9��Ah����
"w��4�PWע��̥�-�$�w�N
7R����m�pav�4�P./=r=�$�
�&O=����������8�]� �|MD�t:t2`��^�Eov?�UJw#z6����m���@��2�	\��� Y<K/D�G���zձ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``,(��h0�p�p	J8���o�����E���oX�X��T���^B�����Xh�8�8c99`;nptptP;w�����}؁؁
���@O �@�@�����8��@w@w ��|%�|��|%�|��|%�| ���%�����%��(#��%�� ���e��DH��#4�"PK/%�Z����n�n"ruby/json-2.1.0/json/ext/parser.sonuȯ��ELF>@�g@8	@pTpT �[�[ �[ X� \\ \ ��888$$PTPTPT  S�tdPTPTPT  P�td Q Q Q��Q�tdR�td�[�[ �[ XpGNU�L��&��=CL*�S�B�9;�@ �;>BE���|ŷ|!�qX$� l����,�����U\wqI[�����N �q�;5�X��i���C`��, �F"2v�|�` ��a ��>��` __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeruby_xfreerb_gc_mark_mayberb_str_buf_newrb_str_resizerb_ary_new_caparb_ary_pushrb_hash_foreachrb_ary_entryrb_funcallvrb_str_catrb_str_internrb_utf8_encodingrb_enc_associate__stack_chk_failrb_enc_raiseruby_xrealloc2ruby_xmalloc2rb_check_typeddatarb_string_valuerb_enc_getrb_ascii8bit_encodingrb_str_conv_encrb_str_duprb_check_hash_typerb_extract_keywordsrb_id2symrb_hash_arefrb_error_arityrb_eArgErrorrb_raiserb_check_typerb_fix2intrb_eTypeErrorrb_data_typed_object_zallocruby_xmallocrb_class_new_instancerb_ary_newrb_hash_newrb_cstr2inumrb_str_new_cstrmemcpyrb_hash_asetrb_cstr_to_dblrb_float_newInit_parserrb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_path2classrb_define_alloc_funcrb_define_methodrb_const_getrb_intern2libruby.so.2.5libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4�ui	�����ii
��[ ��[ p�[ �[ �[ �F�[ ��[ @�[  �_ �_ �_ �_ �_ 2�_ 3�_ 4^ ^  ^ (^ 0^ 8^ 	@^ 
H^ P^ X^ 
`^ h^ p^ x^ �^ �^ �^ �^ �^ �^ �^ �^ �^ �^ �^ �^ �^ �^  �^ !�^ "_ #_ $_ %_ & _ '(_ (0_ )8_ *@_ +H_ ,P_ -X_ .`_ /h_ 0p_ 1x_ 4�_ 5�_ 6�_ 7�_ 8�_ 9�_ :��H��H�qL H��t��H����5�J �%�J ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3��������%EG D���%=G D���%5G D���%-G D���%%G D���%G D���%G D���%
G D���%G D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%}F D���%uF D���%mF D���%eF D���%]F D���%UF D���%MF D���%EF D���%=F D���%5F D���%-F D���%%F D���%F D���%F D���%
F D���%F D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E DH�=�E H��E H9�tH��E H��t	�����H�=�E H�5�E H)�H��H��H��?H�H�tH�uE H��t��fD�����=�E u+UH�=ZE H��tH�=A ����d����]E ]������w�����H�
V5H���x=�WH���x0H��H	��WH���xH��H	��WH���xH��H	�ø���f.���H�G`H�@H��h�ff.�@��USH��H��H�o`H�}H��t�A���H���9���H��H��[]�+���ff.���SH��H�?����H�{ ����H�{8���H�{@���H�{H���H�{X[���f�AWI��AVAUI��ATUSH��1�H��8H�$dH�%(H�D$(1����H�$I�EL�{I9��A�?"��1�KP��ufI�}�S4��t�C0����H�7�� ��H�w�8�����I�O�HD�H�\$(dH3%(��H��8[]A\A]A^A_�DL�cXI�����t���i���I�uI��H�����H�5
L��L�������L���;���H������I���I�UH�5\D H��H�L$H�T$�����H��I�E�����H�����7���@H��M��M�fL9���A�F<"t4<\uM�fL9���A�F<u�&<��M���f�I�OI��L9�r��M9��OL�ɀ9\L�Iu�L9����A<f���<r��J<t�r<u��I�F�I9��wH�yH�$���H�$I��%�H=��L�II�F�I9��i�y\�H�5�'���yu��H�yH�$���H�$L��I��
%�H��E��L�I��H��H��I	�I	�L�кH�t$$H�����D$$L��H����?�Ȁ�D$%L��A��?H��A�ʀ��?D�T$'�Ȁ�D$&�d@<\��<b��<"t|M��M9������L��L)�L��H�����I�mH����M������@�H�5�%<nu�H��L�$�t���L�$M�yM���L���@�H�5�%��f��H�5�%��f��H�5�%�f�H��L��H��L�L$L)�H�$����H�$L�L$�A<f�����H�5Q%�p����H�5<%�_�����H�5%�G�������I�E�j���f��K���I�}M��H���'�������f�L�II��w&D�T$$�H�t$$��f�����fDI�����I�����fI���������D$$?�H�t$$���DI�NH9���A�F<@����0<	��I�NH9��|A�F<@����0<	��I�NH9��dA�F<@����0<	wxM�fL9��PA�F<@����0<	�R���M��1��	���fDL��A��?�H��A�ʀH�t$$��D�T$%�D$$����fD<F�M�����a<�B���I�����D<F�R�����a<�G�����<F�[�����a<�P�����<F�������a<������X����L�кH�t$$H�����D$$L��A��?H��A�ʀ��?D�T$&�Ȁ�D$%�%���DI�׽����1�����I�׽����I�׽���I�׽���I�׽����I�׽������H�? ����M����H�+$H��H��1����H��> ���M����H�C$H��H��1��v���fDATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H���;�I�\$I�D$[]A\�@H�?����I�$I�D$I�L$�ff.���AVI��H�5�8 AUI��ATA��H��USH�� dH�%(H�D$1��x�H�8��H�D$H��A�����3I�H�$H�C(dH�5�= 1�1��CPH�=�= �U�H�C8H�C H�C@H�CHI��L�����H��H�����I�����I9����-�H��I�����H��L��H����H��L��H�,$��H�$H��� uiH����H�SH�PH�L��H�SH�L$dH3%(�H�� []A\A]A^��Ic�I�|�H��ubA��A��������(�H�PH�SH�P�f�@��u
H�������H����H���]�H��H���B��<���D��H�D$H����H�|$��H�|$H����A��H����H�D$A����I�H�$H���S���H�=�; L�d$���L��H��H�5�; I��H�D$��H������"�C(dH�=�; ��L��H��H�5M; I��H�D$�`�H��������C,H�=F; �q�L��H��H�5; I��H�D$�"�H������^�C4H�= ; �3�L��H��H�5�: I��H�D$���H��������CPH�=�: ��L��H��H�5�: I��H�D$��H������zL��H�����H�C H�=|: ��L��H��H�5M: I��H�D$�`�H������LH�C8H�=5: �p�L��H��H�5: I��H�D$�!�H�������H�C@H�=�9 �1�L��H��H�5�9 I��H�D$���H�������H�CHH�=�9 ���L��H��H�5�9 I��H�D$��H������OH�CX�Q���f.�H�E�ƒ����!������#�������H���HD�H�l$��D����DH�D$A��u����@H�599 H�=z9 1�1��	�H�C �u���L��H���E�1�H���‰SP�S4���
���H������H��7 H�5�H�81��}�DL��H����H����������C4���f�L��H�����H����������C,�$����L��H����I��H�����u~�C(����fDL��H�����H�����HD�H�CX���DL��H���e�H�C@���@L��H���M�H�C8���@L��H���5�H�CH����H�Ǿ��L����C(�4���H�X6 H�5�H�81��g����f���H��H�5A2 �\�H�8H��t	H���K�H�6 H�5hH�81��#���AUATUS�H��dH�%(H�D$1�H��4t&I��H�5]7 H��I��1�1�L����H�����u#1�H�L$dH3%(��uIH��[]A\A]�@1�L�����H��H��H�5�6 H�$���H�����t�L��L������������UH�T1 �hSH���%�� H�h H�����f�@H�@H�H�E`H��H��[]�ff.�@AWAVAUATUSH��XdH�%(H�D$H1�H9�tMH��I��H��I��H�j��A�<n���Hc�H�>���H��DH��H9�u��E1�H�|$HdH3<%(L����H��X[]A\A]A^A_Ã�0��	w��H�CH9��{�	H�5�H��������]A�O,����H��5 L�c	I�널H�CH9��s����{n�i���H�CH9��\����{f�R���H�CH9��E����{i�;���H�CH9��.����{n�$���H�CH9������{i�
���H�CH9������{t�����H�CH9�����{y����A�W,���
H��4 L�cI�����H�CH9�������{a�����H�CH9�������{N�����A�G,����H��4 L�cI��v���A�@I�W@�lj$A�G(����9�����H�=v4 H�511�����H�CH9��#���E1�{a����H�CH9������{l����H�CH9�������{s���H�CH9������{e����I�L�c�����H�CH9������E1�{r�����H�CH9�������{u�����H�CH9���������{e�w���I�L�c�g���@A�G(E�`I�W8H�D$ A9��B���:H�=c3 D��H�51����f�L��H��H��L����I��H��LD�����H�CH9����K��*tR��/t����8
�����H��H9�u�����f�H��H�XH9�������@<*t�</�����H��DH��H9�������8*u���@H�CH9��s���E1�{u�i���H�CH9��\����{l�R���H�CH9��E����{l�;���I�L�c�+������
�@�����������	���f�H����1�1���I�H9�tE�;{H��u=L�BL9�t4�B<"���<
t< ��L��L�BL9�u�f.�I������H���&1�1��=�I�H9��b�;[�YH��H�
JL�bL9����r�F�<n����Hc�H�>���0@��	���H�D$(H�D$H�D$0H�D$D�$H�L$H��L��H�D$(L���|���I��H���NI�@H�t$(I�>�5H�t$0H�L$�H�5G0 ��I�E�H�PH9�t%�H��,tAr��
t	�� �lH��H�PH9�u�I�������
�G����L��L�bL9����J�A�<nw�H�5���Hc�H�>�����/���]��H��I��LD��	���fD</��<}�(A�wP����I�8I�w L�$I�>��	H�t$0H�L$0�H�5P/ ��L�$H��tyH�5Z/ H�=�/ L�d$0�L��L�$H�D$0�`�H�5�/ 1�1�H��H���J�L�$H�����t.I�H�5\/ L��H��H�D$0��L�$I��I��M��LD��#�����	�������I���z@H�PH9��{����@<*tC</t��D�:
�S���H��H9�u��Q����H��H9��C����<*t�</�(���@H��H9��#����:*u���@������fDI��L9���A�<$*u�I��L9���A�$<*t�</u�f.�L�����L���*���L�bL9����B<*t�</��I��L9���A�<$
u��L�bL9�to�B<*tA</ucDI��L9�tUA�<$
u��}���I��L9�t=A�$<*t�</�`���fDI��L9�tA�<$*u���@��
�g���@���B���H��- ��M�๠H��H��H��1��J�f.�������fD���Y���fDI�_H9�������<-��<0����1I��<w6I��L9���A�$<E��<e��<.����0<	v�DI�_�<-�j<0�y��1I��<v���f.�A�$��0<	w	I��L9�u�I�o`M��H�EI)��E�H�����H�EH�U�
�I�G`H�EH�x�s�I���I�LD��F���L�BL9�������B<*tK</t���f�A�8
�`���I��L9�u��h����I��L9��S���A�<*t�</�-���I��L9��3���A�8*u�����	<���������H�D$ L�-H�$H�D$(H�D$H�D$0H�D$H�$H��L��L��A�G0��A�G0H�������H�H�H�AH9�������Q�� ��
��/�l��:�KH�pH9��~����H�Q�n�d��IcT�L�>���0��	�T���@H�L$E��H��L��H�D$(�d�H���+���I�8H�t$ H�D$H�T$(I�>�H�t$0H�L$H�5=* H�T$8��n�L�D$I�@�L�@L9������P��,t?�Q��
t	�� �UL��L�@L9�u����f.�<
t��	<������L��I��L9�������B< t�~�<"�����</u�L�BL9��]����B<*t6</t�L���A�8
t�I��L9�u��8���I��L9��+���A�<*t�</t�I��L9�����A�8*u��Ҁ�
������������H���e���H�pH9�����@<*t4</t
�����>
t�H��H9�u����H��H9�������<*t�</t�H��H9�������>*u�����
�GH���������/�
��}������	��������U�����,����I��M�o`L��H)�I�EH�$�xL���0�I�EI�U�I�G`I�EI�HH�x�0�'�I�HH�L$0H�5( �H�D$0�X��I���I��������L��I�_H9��{������f�I�D$H9�t�A�T$��+t��-uI�D$H9�t�A�T$��0��	�:���H��H9������E�!�����e������.�������0��	v����f���	��������/����H�AH9������Q��*tJ��/t������8
�p���H��H9�u����H��H9��������*t�/�D���H��H9�������8*u���@H��L�`L9�������@��0<	��������@H��L�`L9�������@<E�����<e�����<.�����I�D$H9������A�T$��0��	�������L�`L9�����@<E�o���<e�g���<.����0<	�����L��L�`L9�u����L�cL9������C<0����1<�V������L�cL9�����C<0����1<�������H��L����H�}L��H}H���`��LmI�o`����>��L�$�V���L�@L9��X��@<*tH</t�G��A�8
�{���I��L9�u��(�I��L9���A�<*t�</�P���I��L9����A�8*u������L�D$���L���/���L���O���I�������B���M��I����H��L����H�$I�}H��I}�v��H�$IEM�o`�X����0����0��	���}���I���u���H�-8% ���I�ع�H��H��H��1����H�-% ����I�ع���H�-�$ ���L�C����<,���������D��UH�5$ SH��dH�%(H�D$1�H�$�"��H�8�H�XH�hH�
yH�H9����3�V�n����Hc�H�>���0@��	wp�E1�H��H��H��H����H����H���D��
t��	��w3H��H�XH9����P�� t�/u�H�XH9�t�@<*tL</taH��H��# ���I��H��H��H��1��m��DH��H9�t��<*t�</t�@H��H9�t��;*u��؀;
�l���H��H9�u��@��H9������H�t$dH34%(H�$��H��[]�H��f�H��H9�������I���fDH�SH9��6����s@��*tI@��/tH�������:
t�H��H9�u�����H��H�ZH9�������R��*t�/t�H��@H��H9������:*u���@@��
�E���@���\�������r��H��  H�5/H�81�����f.���H��H�=d����H�=d�`��H�5]H��H�W" �Z��H��  H�5UH��H��q��H�=2H�#" �^��H�=1H�" �K��H�=" H�5��H��! ����H�=�! �����H���H�5�2��H�=�! 1�H���H�5����H�=�! 1�H�5�H������H�5�  H���
H�=�! ���H�5�  H�X! H����H�=h! ����H�5�  H�-! H���LH�=E! ����H�	! H�R  H���	H��  H�3  H����H��  H�  H����H��  H�� H���dH�=� H��  �/H�� H����H�`  H�� H����H�A  H�� H����H�"  H�c H���ZH�  H�D H���#H�� H�% H����H�� H� H����H�� H�� H���~H�w H�� H���GH�x H�� H���H�Y H�� H����H�* H�k H����H� H�L H��toH�� H�1 H��t4H�� H�����H�=����H��H�� �����H�=d���H�� H�� H���@�H�=9�w��H�� �t����H�=�W��H�� �A����H�=��7��H�� �
����H�=����H�x �����H�=����H�` ����H�=q����H�H �e����H�=K���H�0 �.����
H�=���H� ����H�=��w��H� ����H�=��W��H�� ����H�=��7��H�� �R����	H�=j���H�� �����H�=>���H�� ����H�=����H�� ����H�=����H�p �����	H�=����H�X �H����H�=��w��H�@ �����H�=c�W��H�( �����
H�=5�7��H��H�
 �����H�=����H��H�� �I�����H��H���

	"\already initialized instanceuninitialized instancenesting of %d is too deep%u: unexpected token at '%s'-Infinityjson/commonJSONExtJSON::ParserErrorJSON::NestingErrorinitializeparsesourceNaNMinusInfinityjson_creatable?json_createcreate_idcreate_additionschrmax_nestingallow_nansymbolize_namesobject_classarray_classdecimal_classmatchmatch_stringkey?deep_const_get[]=[]<<newJSON/Parser%u: incomplete unicode character escape sequence at '%s'%u: incomplete surrogate pair at '%s'options :symbolize_names and :create_additions cannot be  used in conjunction�����������������������������������������������������������������������������������������������������������������������P����������������������������������`�������������������������������������P������������������������p���n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n���n���n�n�n�n�n�n�n�n�n�n���n���n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n�n���n�n�n�n���n�n�n�n�n�n�n�n�n�n�n�n���n���n�n�n�n�n�n�n�n���n�n�n�n�n�n�n���n�n�n�n�n���n�n�n�n�n�n���������������������������������������������L���������������������L���N���������������������������������������������������L���������L�������������������������L���������������������L���������������L�����������L�������������L������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`���`��`�`�`�`�`�`�`�`�`�`��`���`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`��`�`�`�`��`�`�`�`�`�`�`�`�`�`�`�`��`�`�`�`�`�`�`�`�`�`��`�`�`�`�`�`�`��`�`�`�`�`��`�`�`�`�`�`��������������������������������������������������	�������

��������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������;�P�������������� ��`��0���L�������P�����(@��d����p����zRx�$����PFJw�?:*3$"D���@\���Vp��$���5E�A�G ^DA�(��>E�tH�L���B�E�B �E(�A0�A8�Ip�
8A0A(B BBBF,����B�D�D �V
ABE@D@��>F�L�E �G(�A0�DP
0A(A BBBH�<��=HX
E8�`���F�B�A �A(�I@R
(A ABBE$����QE�M�D uDAH���B�B�B �B(�A0�A8�D��
8A0A(B BBBA(T��VE�H�D0p
AAA ����H�
IC
EGNU��p�[ �F�@ ��H
�D�[ �[ ���o`��
��] �h
P	���o���o����o�oT���o\ �������� 0@P`p�������� 0@P`p�������� 0@P`p����GA$3a1H�DGA$3p1113��DGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�GA+GLIBCXX_ASSERTIONSparser.so-2.5.9-114.module_el8.10.0+3991+5e651d4e.x86_64.debugY҈�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�s�Ah6o���[��>��o[���5;��>�PG
@/�k5�i�XpkcX?T�r3[J��F���J�Y�s?�?>M�f���~�)�$��/���+S�k�Rx`l�z3�����'�/���9>4���U���;���Y����������
�r"K!������K�(u�vc�;�?�'�����4�f�\\I�)�Q���L��v�}�0�)!�H��=�x
!�&�����pu��R�.ڌM�Bl�-��Md��dE��fGu��������K��,�؂:�)�A����u� 0�䯕�/�r�D8�|�X`�K�I�eL̴�@�]<�=Z�D|ړ�)�r�o۽M<AЄ�4�dv-N��)�[��E+����Xw��^�\Pf[^0�\�+���3Zv�����:�q�=(�/Z�Z�csߜ2�i�/���	�ї=>h8��s�"��)� �ޥo�5ɸ+�������s �"i'.��<D`�&�G�V]dE��\d�&H����(�EqxJ�#�e4����~�=��:w
c7�-�$�x�(�>���-����B)�I�{SɅ������l�<_�+�<�P���o��P7������4d���P�%7�h�{��D�P��� �R��)*$��@88�>�ָ��%�M���"
��΄���l��$�ǂ�����&�x]6+��>�w���\3h!�Nժkh}�^7��-��]M�s#��Od�A�R���O0a��O��,�C�^���,3C�=q�_�o�y�O��� ���x֚6#Sٱ^ءM��iGĸە�yp����C�|�b���W�Q:�C�F7��S��
����j�-�؀�υ�H�k�n�S��yƔ����7�:���S�C�ۭ]���C�s�)I0$����3Ig��G�v��HE�3�>h��>���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0���8���oTT~E���o��@T

P^Bhh�hHHcppPn��@w�*}�D�D
��D�D@ � Q Q���Q�Q��PTPT ��[ �[��[ �[��[ �[h �\ \���] �]��` �_���a`�_H0bDtb�hf"PK/%�Z��АА%ruby/json-2.1.0/json/ext/generator.sonuȯ��ELF>�@Љ@8	@�n�n P{P{ P{ �� �{�{ �{ ��888$$`n`n`n  S�td`n`n`n  P�td8a8a8aQ�tdR�tdP{P{ P{ ��GNU<��t�Z��.�DzH5��pC�@$�CEFBE���|�qX�t�)��ee b�/�������a�Z�r�U��B� ��C4�W�����O��'{���:�K, �n�F"'m�s���� � ��  �N�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_funcallv__stack_chk_failrb_check_typeddataruby_xfreeruby_xmallocruby_xrealloc2ruby_xmalloc2memcpyrb_str_newrb_utf8_encodingrb_enc_associaterb_check_typerb_str_new_staticrb_hash_arefrb_hash_newrb_obj_classrb_class_namerb_hash_asetrb_str_duprb_str_catrb_str_concatrb_str_internrb_sym2idrb_ivar_setrb_ivar_getrb_ary_entryrb_string_value_cstrrb_iv_getrb_str_substrrb_id2symrb_intern2rb_check_convert_typerb_convert_typerb_error_arityrb_data_typed_object_zallocrb_string_value_ptrrb_path2classrb_raiserb_eArgErrorrb_float_valuerb_cHashrb_cArrayrb_cStringrb_cFalseClassrb_cIntegerrb_cNilClassrb_cFloatrb_respond_torb_cTrueClassrb_cSymbolrb_obj_is_kind_ofrb_const_getInit_generatorrb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_define_alloc_funcrb_define_singleton_methodrb_define_methodrb_define_aliasrb_cRegexplibruby.so.2.5libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4�ui	���ii
'P{ `X{  `{ `{ �{ �^�{ ��{ Ph p x � � 
� � � $� &� -� .� 7� 8� 9� ;� B�} �} �} �} �} �} 	~ 
~ ~ ~  ~ (~ 0~ 8~ @~ H~ P~ X~ `~ h~ p~ x~ �~ �~ �~  �~ !�~ "�~ #�~ %�~ '�~ (�~ )�~ *�~ +�~ ,�~ /�~ 0�~ 1 2 3 4 5  6( :0 ;8 <@ =H >P ?X @` A��H��H�qj H��t��H����5zh �%{h ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2��������%Ee D���%=e D���%5e D���%-e D���%%e D���%e D���%e D���%
e D���%e D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%�d D���%}d D���%ud D���%md D���%ed D���%]d D���%Ud D���%Md D���%Ed D���%=d D���%5d D���%-d D���%%d D���%d D���%d D���%
d D���%d D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c DH�=Id H�Bd H9�tH��c H��t	�����H�=d H�5d H)�H��H��H��?H�H�tH��c H��t��fD�����=�c u+UH�=�c H��tH�=_ ����d�����c ]������w����H�7H��thv$H��tNH��u8�R�1��€��?v2�f�H��u��B�<A�������	Ѓ��1��DH�W@�B��H�1���?w�H���J�1����w�����tKv���t$���u/���v��f����u���w��D���w��f.�1����o����W��������`����fD��H�?��t
H�GH�H�t	H�WH�DH� t	H�W(H�DH�0t	H�W8H�DH�@t	H�WHH�DH�WPH��tHBH�WXH��tHBH�W`H��tHB�ff.�@��H��H��H�5>c �dH�%(H�D$1�H��c H��H�$�v���H�T$dH3%(uH������ff.����H��H�51] ����H���H��H�D�ff.���H��H�5] ���H�@xH��H�D�ff.���H��H�5�\ ����xqH�H��H�Ѓ��f.���H��H�5�\ ����xpH�H��H�Ѓ��f.���H��H�5q\ �\���H�xhH�H��H�Ѓ��f���H��H�5A\ �,���H�@hH��H�D�ff.�SH��H�H��t���H��[���D��SH��H�?H��t����H�{H��t���H�{ H��t���H�{0H��t���H�{@H��t���H�{PH��t���H�{XH��t�w���H�{`H��t�i���H��[�`���SH��H���HDؿ ���f�@H�@H�[ÐATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H���{���I�\$I�D$[]A\�@H�?��{���I�$I�D$I�L$�ff.�H��t3UH��SH��H��H���B���H��H��H������H��[]�D1�H���f�USH��H��H�wH����H��H���?����z���H��H�����H��H��[]�D��USH��H�50Z H������H�߾H�H���t���H��~H���H���[]�ff.����USH��H�5�Y H������H�߾H�H���$���H�]xH���[]�@��USH��H�5�Y H�����H�߾H�����H��H�H�EhH��[]�fD��ATUH��H�5_Y S�I����H��I�����H�uH��% u;H��I�|$@H���H��u5H��t���I�D$@[�]A\�f.�H�]I�|$@H��t�H��t����H�E% H�}H��tH�}H���
���I�\$HI�D$@�[]A\�fD��ATUH��H�5�X S����H��I�����H�uH��% u;H��I�|$0H���H��u5H��t�=���I�D$0[�]A\�f.�H�]I�|$0H��t�H��t����H�E% H�}H��tH�}H���J���I�\$8I�D$0�[]A\�fD��ATUH��H�5�W S�����H��I���)���H�uH��% u;H��I�|$ H���H��u5H��t�}���I�D$ I�D$([�]A\ÐH�]I�|$ H��t�H��t�H���H�E% H�}H��tH�}H�����I�\$(I�D$ �[]A\�fD��ATUH��H�5W S�	����H��I���i���H�uH��% u;H��I�|$H���H��u5H��t��I�D$I�D$[�]A\ÐH�]I�|$H��t�H��t��H�E% H�}H��tH�}H������I�\$I�D$�[]A\�fD��ATUH��H�5_V S�I�H��I����H�uH��% u;H��I�<$H���H��u5H��t��I�$I�D$[�]A\�H�]I�<$H��t�H��t���H�E% H�}H��tH�}H������I�\$I�$�[]A\����SH��H��H��dH�%(H�D$1����H�=�7��H��H����H�=_5H�����H��H��H�5
[ H�$�L�H�T$dH3%(uH��[�����ATUH��SH��dH�%(H�D$1�����H��H���!�H���y�H�5�Z 1�1�H�=G[ I�����L��H��H����H�=�4�@�H��H��H�5^Z H�$��H�=�6H����H��H��H����H�T$dH3%(uH��H��[]A\����f���AV1�I��1�AUATUSH��H��H�� H�5LZ dH�%(H�D$1�I���$�H��H����H�56H�����L��H��H�5{Y I��H�$���H�����u_�H�=�3�N�H��H�����H����H����L��H��H����H�L$dH3%(u2H�� []A\A]A^�L��H��L�,$H�5�X L�t$�`�����f���AT1�1�USH��H��H��H�5CY dH�%(H�D$1�I����L��H��H�5�X H��H�$��H�����t5L��H��H�,$H�5oX ���H�T$dH3%(uCH��[]A\�H�=�2�/�H��H����H����H�����H��H���y����f���AWAVAUI��ATUSH��(dH�%(H�D$1��f�H�5?R L��H���$�H�5�V H��H����1�1�L��E1��"�I��H�D$H�$��H����I9���L�=	X L��L���>�1�1�L��H�����H�H�D$�� �&H����H�<$H�T$I����L��H����H�T$H�|$�I��H���?�H���w�L��H��H����I�$�� �\���I�D$I9��^���H�sH�;���H�=CW I����L��H��H���e�H�sH�{��H�=W I���Y�L��H��H���;�H�s(H�{ �~�H�=�V I���/�L��H��H����H�s8H�{0�T�H�=�V I����L��H��H�����H�sHH�{@�*�H�={V I�����L��H��H�����{pH�=JV M���I��H��A��H��L�����{qH�=V M���I��H��A��H��L���m�L�chH�=V �m�O�d$H��L��H���J�L�cxH�=�U �J�O�d$H��L��H���'�H���H�=YU �$�H�\H��H��H����H��H�L$dH3%(uFH��([]A\A]A^A_��H�P������H�=�/�g�H��H��S �G�������AVAUI��ATI��H�5IO USH��dH�%(H�D$1���H�
?/�L��H�8/H����H��H����H�=U �G�H��H����I��H�������H�=�T �!�H��H���v�I��H������7H�=�T ��H��H���P�I��H�������H�=rT ���H��H���*�I��H������kH�=TT ��H��H����I��H������H�=T I����L��H��H�EhdH�5�S I��H�$� �H�������H�=�S �H�L��H��H�ExH�5�S I��H�$���H������&H�=?S �
�L��H��H�5PS I��H�$��H�������H�=aS ���H��H���)�H�=BS H������Ep��H��H����H�����L���EqH�T$dH3%(��H��[]A\A]A^�f.��H���s�M�4$A�� �bM�t$I�|$I�v�/�L�uH�E����f�L��H����I��H������6����H��I���M������L��������L��H���E�I��H������&H�Ex���f�L��H����I��H�������H�Eh�E���f��H����M�4$A�� �bM�t$I�|$I�v�O�L�u8H�E0���f��H���S�M�4$A�� �M�t$I�|$I�v��L�uHH�E@�W���f��H����M�4$A�� ��M�t$I�|$I�v���L�u(H�E ��f��H�����M�4$A�� tNM�t$I�|$I�v��L�uH�E���fDH�
^+H�R+�L���e�H������DI��I�|$A��I�v�DI��I�|$A��I�v�V���f.�I��I�|$A��I�v���f.�I��I�|$A��I�v���f.�I��I�|$A��I�v���f.��H��I����L�uh�c�����H��I���L�ux������f���ATI��H�50J U��H��SH����H�@hdHǀ���wuI�4$H��tH�����H��[]A\ú1������ff.�@��H��I ����ff.�ATI��H��UH��SH���K�H�{H��H{L����Hk[]A\�ff.�@ATH�5gI US�P�H���H�����H�kXI��H���)H�EH�����H�EH�U�,H�EH�k`H���H�EH�s H��t
H�S(H�����H����H�EH�U�:H�sH�EH��t	H�SH��uhH�kPH��tqH�E�H���R�H�EH�U�,H�s@H�EH��t	H�SHH��uL��[]A\��H�{P���L��[]A\��H�{`���H�kPH��u����H��H�CP�H���x���H�k`�/�������H��H�CX����f���v�H��H�C`���f.���H�(f������N��f������N�у�f��������N�F���DI���������SH��+H�� dH�%(H�D$1�H��I��H��?L��I��I1�I)��f�L��L��L�II��H��H��H�I)�B�I��A�A�H��u�H��yH�AA�-L��I��L��L9�v#f���0H��H��@�q�P�H9�w�M)�uH�D$dH3%(uH�� [�L��L���
������V�fDUH��SH��(H�t$H�\$H��dH�%(H�D$1���H�L$H��� u0H��H�\$��H�L$H��u-H�D$dH3%(u*H��([]�H�QH�\$H�L$H��t�H��H���z��������UH��SH��H��H�>��H�H��uH��[]�DH�uH��H�D$�7���H�D$H��[]�ff.�1�H�=&�R�f���H��H�5�E ��H�x@H��tH�pHH���&�fDH���f.���H��H�5qE �\�H�x0H��tH�p8H�����fDH���w������H��H�51E ��H�x H��tH�p(H����fDH���7������H��H�5�D ���H�xH��tH�pH���f�fDH��������H��H�5�D ��H�8H��tH�pH���'��H������AWAVAUATI��UH���SH��H��HdH�%(H�D$81���H�CH�SL��H�5�J H�L$(�"H��J �H�CH�D$(�)��}��H�(H�D$�� ��L�xH�h�\uL��D$4f�t$2L9���A�H�
j(I��f���A��L�H9��L�5�'L�d$2L�-�'DD��L��A�pHc��u�����A����E��Kc�L�>��DH�(�� ��L�`H�h�\uE1�L�-d#E1��D$4f�L$2H�����K�<<�<��P����5H�5'��Hc�H�>��A�L�5!#L��L)���L��L��H������M�OM��L9�w�L��L)�tK�4H��H�����H���C�H�CH�S�"H�CH�D$8dH3%(��H��H[]A\A]A^A_��L��A�L�5�"L)��k����K�4H��L�D$�w���L�D$�I���DA�L�5F"�&���fDA�L�54"����fDA�L�5""���fD�00A�L�t$2f�T$4f�Ѓ�f��A�D��A�T�D$7�T$6���@H��L�`���7���1�A�I��H�H��H��A�I��H�H��A�I��H�H��H��A�I��H�H��A�I��H�Ic�H�
�%H+�H������H��(��H=��3H�B�H��_��H��"��H��\�a�H�5!H������DL9��oA�H�
T%I��f���A��L�H9�����H�=� �>��H�5�#H��1����D1������1�����f�1�����f�1��
���f�A��I��H������H��L�x���%����<"tt<\tX��H�
�$f�4����I�I9��M������������f.�H�= �t��H�5M#H��1�����A�L�5����fDA�L�5����fD�H��H�T$��H�CH�sH�T$�H�CL9������H�D$H�D$ H�D$���@�H�5yH���t����W����H�B�H����IcD�L�>����H�5*H���4���������H�5H�����������H�5�H�����������H�5�H����������H�5�H��������H����wJH����L��H��H��H�D$H��
f��(���I���H�D$��f��f��$��L��H���*����=���H�=N���H�5�!H��1�������1����ff.����ATI��USH9��$H��H�5�= ���H��H�5�= H�����H��H�����oE�oHM�oP U �oX0]0�o`@e@�ohPmP�op`u`�oxp}pH���H���H�sH�;�n�H�sH�{H�E�]�H�s(H�{ H�E�L�H�s8H�{0H�E �;�H�{@H�sHH�E0�*�H�{PH�E@H��tH�wH�����H�EPH�{XH��tH�wH�����H�EXH�{`H��tH�wH���|���H�E`L��[]A\�H��@ H�5�H�81�����ATI��UH��H��SH��H�����E�$$1�1�H�5gB H���D$�I��E��u"�D$f(�fT
�!f.
�!wf.�zBH��H��H��[]A\�O���H��H�D$����H�D$H�=&B �^H�5WH��1����H��H�D$���H�D$H�=�A �aH�5(H��1������SH��H��H�5�A 1�1����H��[H�����ff.�f�AUI��ATI��UH��SH��H��dH�%(H�D$1���������؃����:H���`���gH�CH�? H9��H�,? H9��H��> H9�vH����H����H��������H����H������������
��H��L������E@H������d���H��tuH���U���H��> H��J���DH��H��L��L���GH�D$dH3%(��H��[]A\A]��H�a> H�����H��L��H��r��H�	> H������H��= H9�@H�5�? H�������t=H��H��L�,$H�5�? �����H��H�����H��L������K���f�H�5�? H��1�1�����H��H������H�uqH��L���������f�H��H��L��L�����f.��H�5�L���l�������H�5�L���L�����H��< H�������H�5yL��������H��< H�����H�	= H�����H�upH��L���!����E����'���AWAVAUI��H��ATUH��SH��XH�B@L�zH�T$H�D$8H�BHH�t$ H�D$@H�H�RhH�D$H�APH�xH�@H�|$HH�yxH�D$H�wH�|$0H�t$(H�qxH��t	H9����H�����H�EH�U�[H�EH�|$8tH�|$@�}�D$01�D�`�QDH����H9�}RH�|$t���H�|$��H��L��H������H�T$H�t$ H��H������I�E�� u�I�EH9�|�H�D$H�T$0H�|$8H�PxtOH�|$@��L�l$M��t9H�D$0H��~/A��1��
D��A9�tM��t�L��L��H����R�A9�u�H�����H�EH�U�]H�EH��X[]A\A]A^A_�H�|$(�,���E1���A��E9�����M��t�H�t$L��H�������@H�T$H�t$HH���������H�T$@H�t$8H����L�l$M���#����W���H�T$@H�t$8H�����l���H�����H�D$H�=a< H�5�H�PxH�T$H��H�Px1��:��f.�AWAVI��AUATUH��SH��hH�B0M�nxH�L$8H�ZH�D$ H�B8H�t$H�D$@H�H�RhH�$I�FXH�HH�@H�D$0I�F`H�L$XH�HH�@H�D$(I�EH�L$PH�D$HI�FxH��t	H9��q�H��E1�A�����H�UH�E1�H�5�: H�|$8�{1�H�E�L��L�t$I�����H����I9���H�|$0t	E����H�|$ tH�|$@��H�<$�0L��L���=��H�5�: 1�1�H��I�������H��H�D$���H�D$H�T$H��H�t$H���+���H�|$(�H�|$8L��I���.��H�T$H�t$H��H�����I��� �5���I�GI9��8���L�t$H�|$ M�nxM�e�M�fxtLH�|$@�L�4$M��t7M��~2A��E1��
@A��E9�tH��t�H��L��H��A���@�E9�u�H�����H�EH�U�}H�EH��h[]A\A]A^A_�fDH�|$H����E1���A��E9������H��t�H�4$H��H�������DH�T$(H�t$PH���������H�T$@H�t$ H�����V���f�H�T$0H�t$XH���~��"���H�T$@H�t$ H���g�L�4$M�������������I�FxH�=-9 H�5�H�P�1�I�Vx���ff.�@ATI��USH���Q�H��H�5�2 H�����H��L��H��H���.���[H��]A\���f���USH��H�����H��H�5t2 H���\��H��H��[]�f���UH��SH��H��H��H��dH�%(H�D$1��5��H��t H�T$dH3%(H����H��[]�f�H�6 H��H�0���H��u)H�="8 H��t<H�5]7 1�1�����H����H��H��H�$H�5�7 ����H���H�=8 H�5�7 ���H��H��7 ��,��ff.����S��wS�uH�H�=�7 H�����H�5V1 H��H���;��H������H�5�H��H���|�H��[����1��'�����S��wS�uH�H�=U7 H�����H�5�0 H��H������H���c��H�5fH��H����H��[�3���1�������S��wS�uH�H�=�6 H������H�5v0 H��H���[��H������H�5�H��H����H��[�����1��G�����ATUS��wWI�ԸuH�H�=o6 H�����H�50 H��H������H��H���z�H�sqL��H��H���X�[H��]A\�L���1�������ATUS��wWI�ԸuH�H�=�5 H���7���H�5�/ H��H���u��H��H���
�H�spL��H��H����[H��]A\�����1��`����USH����w}H�ӸuH�H�=�5 H������H�5/ H��H�����H����H���u#H��H���X�H��H��[]�j��f.�H�H��H���B�H��H��[]�D���1��������AUATUSH����w_I�ոuH�H�=�4 H���!���H�5z. H��H���_��H��I�����L��L��H��H��H������H��H��[]A\A]����1��B��f���AUATUSH����w_I�ոuH�H�=i4 H�����H�5�- H��H������H��I���t�L��L��H��H��H������H��H��[]A\A]�>���1�����f���ATI��U��H��S�{���H��H������H��L��[��]A\�J���f.���ATI��H�5�3 1�U��H��1�S�`����w9H�ýuI�,$H�߾���H�=�3 H�����H��[]H��A\�B����1������@��SH�=�
H��dH�%(H�D$1��+��H�=i
�O��H�5�
H��H�.3 �Y��H�5�
H���J��H�=�H�3 �G��H�=o
H��2 �4��H�=�2 H�5�H��2 H�X0 H��@��H�5��H��H��2 ���H�=�2 �H����H�5"
���H�=�2 �����H���H�5
����H�=e2 �H�)�H�5����H�=F2 1�H��H�5����H�=*2 �H�N��H�5����H�=2 1�H���H�5��f��H�=�1 �H�S��H�5��G��H�=�1 1�H�'�H�5��+��H�=�1 �H�X��H�5����H�=�1 1�H���H�5t����H�=y1 �H�]��H�5_����H�=Z1 1�H�1�H�5N���H�=>1 �H�b��H�58���H�=1 1�H�f��H�5&�z��H�=1 �H����H�5�[��H�=�0 1�H����H�5�?��H�=�0 1�H����H�5��#��H�=�0 1�H�c��H�5����H�=�0 1�H���H�5�����H�=t0 �H���H�5�����H�=U0 1�H����H�5����H�=90 �H����H�5����H�=0 �H�N��H�5��r��H�=�/ H��H�5��H��H�=�/ 1�H���H�5�	�<��H�=�/ H��	H�5o	���H�=�/ �H����H�59���H�=�/ �H����H�5����H�=m/ �H�q���H�5����H�=V/ H�5�
���H�5�
H��H�)/ �l�������H�P���H�5�
H�����H�=/ H�5��>�������H�b���H�5�
H���S��H�=�. H�5�
��������H�����H�5�
H���%��H�=�. H�5~
���������H���H�5X
H�����H�=x. H�5X
��������H�H���H�5*
H������H�=J. H�50
����H�:��H�5
H��H�. ���H�=
. �����H�����H�5�	�u��H�=�- �����H���H�5�	�V��H�=�- 1�H�V��H�5�	�:��H�=�- H�5�	����H����H�5�	H��H��- ���H�=�- H�5�	���������H�v���H�58	H������H�=X- H�5�	��������H����H�5
	H�����H�=*- H�5g	�f��H�5������H�3���H���{��H�5, H����H��* H�8���H��+ H���<H��, H��+ H���H�v, H��+ H����H�W, H��+ H����H�8, H�q+ H���`H�, H�R+ H���)H��+ H�3+ H����H��+ H�+ H����H��+ H��* H����H��+ H��* H���MH�~+ H��* H���H�_+ H��* H����H�+ H�y* H����H��* H�Z* H���qH�+ H�;* H���:H��* H�* H���H��* H��) H����H��* H��) H����H�=�) H��* �`H��) H���0H�i* H��) H����H�=q) H�B* ��H�U) H����H�* H�6) H���]�H�=H��) ���H�) H�$H���H�=c���H��H��H���B��H�=�( H��* ��H��( H����H�~* H��( H��tZH�* H�* H�D$dH3%(��H��[�fD�	H�=a���H��H�) �
�����H�=����H�( �fD�H�=��_��H�( �V����H�=v�?��H��' �&����H�=H���H��H��' �����H�=���H��' ����H�=�����H��' �O����H�=����H��' �����H�=����H�p' ����H�=~���H�X' ����H�=u�_��H�@' ����H�=9�?��H�(' �N����H�=���H�' �����	H�=����H��& ����H�=�����H��& ����H�=����H��& �r����H�=x���H��& �;����H�=K����H��& �����
H�=6�_���H��& �����	H�=�?���H�h& ����H�=�����H�P& �_����H�=x���H�8& �(����	H�=C����H� & ���H�=���H�& ����H�=����H��% ����H�=�����H��% �L����H�=(�_���H��% �����H�=}�?���H��% �����H�=�����H��% ���辽����H��H���C*@instance_variablesto_hashHashto_h0123456789abcdef\n\r\t\f\b\\\"JSON::GeneratorErrorunallocated JSON::State%u: %li not allowed in JSONnullfalsetruenesting of %ld is too deepjson/commonExtGeneratorJSON::NestingErrorfrom_stateinitializeinitialize_copyindentindent=spacespace=space_beforespace_before=object_nlobject_nl=array_nlarray_nl=max_nestingmax_nesting=check_circular?allow_nan?ascii_only?depthdepth=buffer_initial_lengthbuffer_initial_length=configuremerge[][]=generateGeneratorMethodsObjectto_jsonArrayIntegerFloatStringincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassMULTILINEto_snewallow_nanascii_onlyunpackcreate_idextendkey?__send__respond_to?matchkeysduputf-8findEncodingencodingencodeSAFE_STATE_PROTOTYPEJSON/Generator/Statepartial character in source, but hit endsource sequence is illegal/malformed utf-8source sequence is illegal/malformed utf8����������������������������������X��8�������������0123456789�0� � �� �� ���������������;B���8H���`8���x�������������8����h��������Ƚ������4(���LH���hȾ�������������ȿ������$X���L����t���������X����D���|����(��������P����������x��@���T����h�����������(�� x��T���h�������H����������	x��X	����	����	����	��
H�d
x��
���
����48�T��t����������,�h������H��zRx�$ȱ��@FJw�?:*3$"D��0\�����p���������TH F
A�D���%HW�\���"HT�t���&HW�����&HW����'HX����"HT0Ժ��A�ULغ���E�vh<���/A�m,�P����B�D�D �V
ABE(�����>F�D�O WAAF��$�Ļ��;A�A�G lDA$ܻ��DE�A�N hFA$0���<E�A�N `FA$X���:E�A�N cAA4�4����F�A�K �K
FBKFAB4������F�A�K �K
FBKFAB4�D����F�A�K �T
FBBFAB4(̽���F�A�K �T
FBBFAB4`T����F�A�K �R
FBDDAB �ܾ���E�O t
AA0�H����F�A�D �D0�
 DABA@���F�I�B �A(�A0�JP�
0A(A BBBD04�����F�E�A �J0t
 AABBHhL���
F�B�B �E(�A0�A8�D`�
8A0A(B BBBH@���F�B�E �K(�A0�D@
0A(A BBBK(����aF�K�F �x
ABA$0��(8<��1B�G�D �`AB8dP���B�H�A ��
ABHM
ABH����K �����K�K0�
AD(�����A�D�D@Y
AAD0��EA�D�G0T
AAFZAA8��L��6H]
KDl8��9H]
KD�X��9H]
KD�x��9H]
KD����9H\
LDL�����B�B�B �B(�D0�I8�G��
8A0A(B BBBH,<��XF�D�A �1
ABA0lH���B�D�G �G0N
 GABE����#A�Z8�����B�E�D �D(�G@+
(A ABBIL����vB�B�B �H(�A0�D8�D��
8A0A(B BBBALH���!B�B�E �B(�A0�D8�D�#
8A0A(B BBBG(����>B�D�A �lDB$����.E�A�G [DA(�����E�D�M0u
AAC	���iE�S
E8	���iE�S
EX	,��iE�S
E,x	|��pF�A�A �Q
DBE,�	���pF�A�A �Q
DBE4�	����E�A�D R
DAOR
DAE8
d��~F�B�A �A(�D0V
(D ABBE8L
���~F�B�A �A(�D0V
(D ABBE(�
���6F�D�F �\CB(�
�lF�M�H �x
AEE �
D��E�K  	
AGGNU�` `{ �^�P��
d[P{ X{ ���o`@	�
1�} �P@	���o���o���o�or
���o�{ P`p�������� 0@P`p�������� 0@P`p�������� 0@P`pGA$3a1q[GA$3p1113pb[GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYpJGA+GLIBCXX_ASSERTIONSgenerator.so-2.5.9-114.module_el8.10.0+3991+5e651d4e.x86_64.debug��Hr�7zXZ�ִF!t/����]?�E�h=��ڊ�2N���% ���TC���
(;���'5+�^��#\�zÑ5��C�t�LD�W��K���oh:�	
np��_�[��7�'eԦ���#�
����;i�"\�"ϕ\��3(x��W��c[���m�!�pQ�h��̍��z$:W]�Vr�˫��k�2�D�S����5f��DZ�hԛ���E7'��(�Nr�G�n��H�r��m��a�m��-�Rr .c�n_�:�������v���)㘜�$����p���z{j��ٽv���T`�|�gN�΍�΍Gu���c�o�.�y,�G�(���.i����&������!(���T(��Z��e�K\#���-�K���:����NQ��R�F�\5#�ѿ��v�3��S������`��u��a�77kH@�KuƁx�t��BY���DJѥC��?Rb���N#�Xmk|�s8��7e�GZ�R+x)�
MsW,kc*#g\��A��g[8��X���f=΄?&�jN��N61���:~R�\[�=,҂j��+�vX��� �N�2�V��u��FB|#�q2J!�v^�'��}��I4gJ%��@�^�h�y�%̷�z��h�<�9��/C��(!GFH$��M��؄Pv/��[����a�Un`ɩ���cd��
|�;���07ok�LI�#eμb���Jͽq����\s�jg���Y�ПVL��^|>n<������U'�Q�"��1��uA�_>?<��@c[/.z��q�坽�Q������!0pk�a�S_-$ �T5�䡝�G?/��l_�/��K�`�ڮq@�CAs�լ�����'(���\l������
�@��l�a뷌g�¨#?F��{�hI`�*�V�l<���Z��ћҀ�j��/㉡܃�����G�5�I�1�OX���԰�w���IT�7��E_#�AM�4
�S2�B$��WM�)�(hJ�=��R~ʵi�LO�#����E���
�F�c�X�Qa�Y�qV�'e�����4��c4����L��9,���+����A\w�;���
FO]To�{�k8*_��br�Ӆ��yc\���	���H9ra�ug<�c��C�?zd�M��l]
�F��ʚ�-�?'R��K�x�<f�k�V���魙��߀i�=���y+����Qq�8��W�Ӷ�-��g��a��~ՌFdJ��ׄ�˺N��_��T�:Ģ^�X�cU����s��ȏ`m�j�em8��v��w�����3�=j��kl!��E�L�cld5"3���8ǖmh/��?��s�`}���S1�א��2Yɧ��)���F�5ò�򽏁p>X��+�ݲ5|�n���,�	ڬ�|!
���x�l���q���Y�K�;�ކ�
�qJ�4��1�#Io��'�J���Oq{l��<&-m�f�/�☥��B�WhF5F]$P|�ip�b�4��1��dD��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0@	@	18���or
r
�E���o@T@@^BPP�hc@@@n��0w���?}d[d[
��[�[� �8a8a�XcXc�`n`n �P{ P{�X{ X{�`{ `{h ��{ �{���} �}0�� ���`�H0�Hx�4��"PK/%�ZXIv� C C#ruby/bigdecimal-1.3.4/bigdecimal.sonuȯ��ELF>�'@�;@8	@�� p*p*!p*!�� �*�*!�*!��888$$���  S�td���  P�td   ��Q�tdR�tdp*p*!p*!��GNUto�d!�����Ev��O�^�@h@@^cBE��|��X��=��|/�\��؁�9�w�qX������ "���s���-M:�K���`�.���UXq����y 	#�dC����E"=��_��.jT��/���c�I�0���, ��SF"�z?#\ �0!�H1!0�G�P1!v0!�@1!U0!�0!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegOne_ABCED9B4_CE73__00400511F31DgZero_ABCED9B1_CE73__00400511F31Druby_xfreerb_thread_currentrb_thread_local_asetrb_inspectrb_str_duprb_str_catrb_exc_new_strrb_exc_raiserb_obj_classrb_class_namerb_warningrb_str_new_staticrb_call_superstrlenmemmove__sprintf_chkrb_thread_local_arefrb_num2ushortrb_id2symrb_hash_lookup2rb_check_string_typestrncasecmprb_eArgErrorrb_raiserb_sym2strruby_xreallocmemcpyrb_fatalrb_check_typeddatarb_yieldrb_protectrb_jump_tag__stack_chk_failrb_num2ulongrb_uint2bigrb_eFloatDomainErrorruby_xmallocmemsetrb_str_tmp_newrb_str_resizerb_warnrb_str_new_cstrrb_data_typed_object_wraprb_string_value_cstrrb_check_safe_objrb_eTypeErrorrb_bugrb_num2intrb_fix2intrb_error_arityrb_big_packrb_sym2idrb_rational_numrb_rational_denrb_typeddata_is_kind_ofrb_big2strrb_cBigDecimalrb_float_valuerb_funcallvrb_num_coerce_binrb_int2bigrb_intern2rb_str_newsqrt__errno_locationruby_strtodrb_float_newrb_assoc_newrb_num_coerce_reloprb_num_coerce_cmprb_memhashrb_eZeroDivErrorrb_ary_new_caparb_ary_pushrb_Rationalrb_num2longrb_thread_check_intsrb_eMathDomainErrorrb_big_cmpruby_snprintfroundrb_dbl2bigrb_mBigMathInit_bigdecimalrb_cNumericrb_define_classrb_define_alloc_funcrb_define_global_functionrb_define_singleton_methodrb_define_constrb_define_methodrb_define_modulelibruby.so.2.5libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.14GLIBC_2.4GLIBC_2.2.5�ti	�����ii
�ui	�p*!�(x*!@(�*!�*!�*!���*!�*�*!�(�/!�/!	�/!c�/!�/!_�/!�/!d�/!,�/!.�/!1�/!Q�/!S�/!U�/!b�/!W�,!�,!-!-!-!-! -!(-!
0-!8-!@-!
H-!P-!X-!`-!h-!p-!x-!�-!�-!�-!�-!�-!�-!�-!�-!�-!�-! �-!!�-!"�-!#�-!$�-!%�-!&.!'.!(.!).!* .!+(.!-0.!/8.!0@.!2H.!3P.!4X.!5`.!6h.!7p.!8x.!9�.!:�.!;�.!<�.!=�.!>�.!?�.!@�.!A�.!B�.!C�.!D�.!E�.!F�.!G�.!H�.!I/!J/!K/!L/!M /!N(/!O0/!P8/!R@/!TH/!VP/!WX/!X`/!Yh/!Zp/![x/!\�/!]��H��H��!H��t��H����5�!�%�!��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR��������%e
!D���%]
!D���%U
!D���%M
!D���%E
!D���%=
!D���%5
!D���%-
!D���%%
!D���%
!D���%
!D���%
!D���%
!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%�	!D���%}	!D���%u	!D���%m	!D���%e	!D���%]	!D���%U	!D���%M	!D���%E	!D���%=	!D���%5	!D���%-	!D���%%	!D���%	!D���%	!D���%
	!D���%	!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!D���%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D�% H�%f.�f�H�=A!H�:!H9�tH��!H��t	�����H�=!H�5
!H)�H��H��H��?H�H�tH��!H��t��fD�����=�!u+UH�=�!H��tH�=!�����d�����!]������w������H�GH��(�ff.�@���!�fD��H�����B f����f����f�����f���Uf�����L�Bf�H�M��t6�J$f���H*��Y
���X�I��v�J(f���H*��Y
u��X�H�RH��H�f��fW�������H�1�H�����!f.�z,u*H�
!�H�:!��^�fW:���!��H��!f��f.�ztJ�
l!H��!f.��z%u#�H��!��^�fW
���
6!�^���!�1�H��@�!f.P��h����b���H�E!�H�r!��^���!�;�����!f.
�zuH�B!���^���!������H��ff.�f���H��t�B���f��ff.�@US��H��H�-)!�l�����H��H��[H�TH��]�C���SH��H��@��u	H�����u4���H������!H�51�H�����H��H�����H��������H�����H����@��H��H�=�1��J����H�=��H������D��U1�H��S��H�=$�H������H��H���[]���H��tS�G �Pf��w�I� H��s�DH�W�>FH�D�u�H�OH�D�H��xH9�s�H)�H��H��@��f�H��H��H��H)�H��ff.�@f��tf��tEf���t�O1�f����t�f��NaN��@f��uJ������t|�0.0�Ã�t[��u�+H��H�Infinity�FH�����-0.0��F�H�-InfinitH��yf�F��@� H�����+0.0��F�� 0.0��F�AVAUATI��USH���=���H��t^I�����tTI�>(1�1��1fD<.tD���<Et3H��H�jL9�w@L9�s!H���H��t<-w�I��H�js�L9�r�[]A\A]A^ÐH�j1����I��H�{H��L��H)�H���'���� 1��AWI��A��AVAUATUSH��H��(H�<$� H�T$��H�t$�@�����u,f�{ x4A����H�D$A��u'H��H�@�+�@H��([]A\A]A^A_�A�-I�A�0.L�x�E1�f�H�$A�����H�@H�D$H���?f�H�$�	��F�l�$�D��1���A��A������tOH��t
�A9�r�D��1�H�
��L����H�����I��1��y���L����1�I��f.�I��L9d$�q���H�4$A��H�F�N$L������w���������I�����9�w�@��0uI��A�A��0t�1�H�
���L��H��������H�|$�����H�t$H�|$H��([]A\A]A^A_�{���H�t$H�F� ���H�4$�.H�F�N$L�������U�����SH�!�c�H��H�����H��tH��[�Y�f�H��!�4�H��H����[�ff.�f�H���VUSH��H��H�=.!�1���H�ߺ4H����H��H��4��H����<�2�u$H�����tH��H��������H�݃�tH���b�H��H���H��H��� ��H�BH�ZH����H��u8�H�5U�H���:�����H�5/�H�������H��� H�8H��tnH��H�5>�1��U�DH��[]���DH��H�Z��H���w����H�5��H�����u��H��[]���;���H�5��1����f.�H���h�H��H��H����f.�H�� H��H�8�H���fD�듐��f�SH�� �3�H��H����H��tH��[�)�f�H��� ��H��H�����1�[�USH��H��H�FH�4�$��H��tFH�SH��H�s$H�}$H�PH�CH��H�EH�CH�E�C f�E �C"f�E"�%�H��H��[]��F���H�5��H�=��1��1���ATUH��H�5� SH���F�H�5o� H��I���4�H9�tH��L���D���H�C H��[]A\����USH��dH�%(H�D$1����H�T$�H�=8� ���i���H���^����|$��uH�L$dH3%(H��uH��[]��W����f�SH�P� ��H��H���(�H��t"�tH�[�f�H��[����H�� �d��H��H���D�1�[�ATUSH�����H��H��������?H9�w*H�\L�%� �!�H��L��H����H��[]A\�H����H����ff.���USH��dH�%(H�D$1��!���H�T$�H�=� H���8�H��H���]����|$��uH�L$dH3%(H��uH��[]��&����PXH�5�H��H��� H��H�81���ff.�@H��f��tf��t-f���tH�����H�=�������H�=1��������H�=�����SH���W�H��tH��1�H����[����H�5%�H�=8�1���f�PXH�5"�H��H�� H�81����f�UH��S��H���P���f�� t*f��t5H�H��rH��H�=ӿ1��$�@H�������H��1�[]��SH��f��tf��tQf���t+H�[�fDH�5ٻ��o���H�[�f.�H�5���O���H�[�f.�H�5ɻ��/���H�[�f.��G �Pf��w�IH�����H��s��F �Pf��vKH�WH�NH�GH9FHCFH9�t�H��H)�H)�HH�H�s�H��H�5ھ����H��H���IH�����H��s��Df�����f����f�����f��A��D	�f��tcf���t]�����������C���f����A��G$H�5��H�GfD�G �����fD��tT������t���f����f��~G��1��G$H�5�H�Gf�O ����D������tZf���`����������G$H�Gf�w H�5)���g������f.��Vf����k���f�f�������f������Df������C���f.��Pf����+����f��~Lf��~L��G$H�Gf�W �a���f�f��~f��������f���$�������f��~�������G$H�Gf�G ����ff.�f�H�OL�1H��~;H��~'I�@H����H��������H�H��H����L�G��DH��y�I�@H����H�AH��v�H��H�H��H���f� �G$H�G��f�w H�5)������f�M����H��������H�I��H���N���fDf� ~1��G$H�Gf�W H�5����x����������G$H�Gf�G ��fDM��~#H��������H�I��H���
����'���DH��H�I��H���������f.�H��H�I��H��������:���f������f�O ���f��O �Af��w#�]H��s���G$1�H�G�f�H�W�f.�H�B�D�D�$E��u2H��H��u��G$H�Gf��~f�1�f�W �f.��w$H�W��urU1�SH���H��H�u�L�$��t�H��tH)�H��H��H�W�����uH��[]�f������f�G 1��H�CH�t�(H�{$H������ʸ�ff.�f�AWAVAUATI��USH��H��8���H�{H���8��8��H��H��H��H��H��	I��I��M���A�$L����	��wfDH�������	��v� t�#��H��t#H���8��8��H��H��H��H��H�BI9�LG�H��L�L$���H�x���L�L$H� I��H�h���H��1�E1��D����tJ��D�R�A����< ����0��
H��<_��I��J�|H���D����u���
H�=ܸH����������	H�=��H��������d�
H�=��H����������H�=&�H���������E<-�t�D$1�<+@���L5��������0��	��1��@�у�0��	��H��H���L5��u�H�l$(I��I��1�E1�H��L�D$ H���8��8��H��H�L$H��M��H�B�LD�I9�IC�H��$H�D$H������|$H�L$I��H�D$L�D$ A�D$$I�D$I�D$��A�fE�T$ 1�H�S�I�|$$L�D$H�L$�[�H�L$L�D$H����H�D$(�<-�ZH�D$E1�<+u
H��A�1�L�t$L�\$(I��������L�D$ �w�L��H�H��H����H�4�H��H��	��O�4H��M��H�L��A��0Mc�M)�I9���H�H�r�H��/H����H9���I��L9���H��H��u�K�1�1���f.�H���i�����w����H�h������(��y���H�@I���@$H�@f�h H��8L��[]A\A]A^A_�f�H���~�����D$��������fDH��~;L��H�H��H����������H�t$L�t$�D$L�D$ H��L��'@H��H�H��H������D$L���E<-�i�D$1�<+u	I���I���8��8��E1�H��A��1�G�\��L�3L��H��?H��L1�H)�H��I��H��H��H��H��H9��_�D$���K1�I9����A�D�$I9�v6H��w01�f.��4��D
H��H���Dp�A�D�$H��wI9�w�I9��H��M��tVM�T�$1�@H���&L9��A�
H����<�A�H��H���Ly�A�
H��wL9�r�L9���H�D$H9��GH�P�H��wI���B$fD��H���H��	u�B$H�D$L��H�r�q�qI�D$L��I��?H��1�L)ʃ|$��I�T$������fA�D$ ���1�L���o����f.�H���g����H��H9T$�T1����f.�H��I��1�H9T$����H���+H���
����1���.�o�T5E1�E1��J���!�{H�A�I��I!���1�1�@��tM���*H��u	H���J�\I��I�L�H�\$(����f.�A�����fE�L$ �:����I9�w�6fD��t�|
0��H��L9�r�M��t#��t1��
fD��tA�<0��H��L9�r�������E����A�D$$�|$I�D$�T�fA�|$ H�5,�����P���f�I���D$��������f.�H�BH�D$���f�J�<�$L�L$A���L�L$I���@$L�HH�@fD�h �x����(�������I��H�@�@$H�@f�X �C����(��E1�I��H�@�@$H�@fD�X ����H�T$H�=ɭ1�L�L$ H�T$���H��H�T$L�L$ ����H�t$L�t$�D$L�D$ L��i���H��A�H�D$��������T5L�F�����ʃ�0��	��L����H������0��	��T
I��H�yI)���u�M����1�E1����1�M����A�D$$�|$I�D$u^�fA�L$ �{����T5L�VM�ӍJՁ�u	�T5L�^��01�J�t��	w?DH����SЀ�	v���������fA�T$ ���������fA�t$ ���L���.��H�57�H��H�U� H�81��3��1�1�E1����H�t$L�t$�D$L�D$ L�����H�ο�@����1�� ���H�t$L�t$�D$L�D$ H��L�����M�������H�D$H�����L�ƿE1�����ATI��1�UH��H��H�[� S���L��H��H�����H�C H�[]A\�ff.���H��H��1�1����H�H���@��ATUH��SH��0H�t$H�|$dH�%(H�D$(1����H�|$I���e��A�$����I����:����0��	��1��I����:t ��0��	��Hc�H��H�AA�$��u�H�C�H��	H��L��HG�H�����H��H�H�D$H��v"H���8��8��H��H��H��H9WvH��H�W�w ���H�T$(dH3%(u;H��0[]A\�1�H��L�����H��H�H�D$��H��� H�5��H�81��������f�SH��H��uH�GH�p�H��tHH���A$�P�Q$���ɚ;veH�����D�$�P�T�$H�����ɚ;vA-�ɚ;�D�(H���uھH���%��t�C$�H�C[�H���f�H����[ÐAWA��AVAUA��ATUSH��HH�GL�$�I���L��L�_H�r�q�qH��L��H��?H)�1�I��H�T$I9��y�D�$A�H�JH��L���$H��H��I��H)�H�D$8I)�L��H)�H�D$M����E1�1��f��؍�H���L9�|�k�d1҉D$�$��A��1������D$$D������H���������A)�I9�vT�t�$��K���	���i�ʚ;9����K�#D�t�$���	����i�ʚ;9���H��I9�wً$1�1�J�|$L�D$0�t$H�D$L�L$(�$H�������R��fA��L�L$(L�D$0wiH���E��Jc�H�>��@f� �G$H�G�NA�1�fD� H��H[]A\A]A^A_�D�$E��t1�f�} ���DM����1�D��H���I9�}�ɚ;�nM����f�} H�E�E$H�E�7�f�M H��H�EM��tYH���8��8��L��H��H��HUH��I)�t8�U$1ɾ�KfD��ҁ��ɚ;v��	H�E����H��I9�uۉU$H��H�[]A\A]A^A_�@�F�f������L�_1�M������G$I��L�\$�A��E1�A��$H�D$8H�D$�t���fDH�D$1�J�|$L�$L�D$H�������~��fA��L�$L�D$�����H�߭E��Jc�H�>��D�����f�U ����f�B�\�$H��������D$$A��w�B���D�\$$E���4���@��M���-����f.�A��������@B�D�$H�t$H���Z����O���DA�����1�fD�w ���fDD�4$�D$$E1��D$
����<$�������f�} ������D�,$E��������Y����A���N����x����t$$���<���H�|$8u1M���d���B�D� �������Q���A�������8��������؃������#���ff.�D�W$E��tWH�GA�����H��H��L��I)�D��A����A��	w	�D�щ�I��A�����	w�I�P������f�1��ff.�f�ATUH��SH����H��I���6���tbM��tMH��t@H��H���8��8��I�T$H��H��1�H��H9�w&��[L��H����]A\�-���DH�]�f�1�[]A\�f��������f�AVA��AUI��ATA��UH��S��L��H�����I�����u5E��t0f��w*H�O�Hc�H�>��f�A����vf�} x []A\A]A^��A����v�f�} ~�H��L�����[H��]A\A]A^�%�DA���E�#w��DA���d�w��DA���E�#w�A��e�A����w�A��t���A����w��j���f.�f.��&f(�fT
��f.
Z���f��f.��ATf(�USH�� f/�wfW
d��%,�f/����"�1���^�H��f/�s�L�g1�H��H�$�T$J���L$�D$�F���L$f���T$f/���M����1���I9����Y�f��H,ɉʉL�$H���H*��\�f/�w�I9�vd�l$L�`�����f/�vj�YʺL�cf�S H�k�H,ɋT�$�f������G$H�Gf�O �f��t$1�I�D$�f/��������Y�f�S 1�L�cH�k�H,�M��u�H�� H��1�[]A\�G����f/���G$H�GvA�fD�G ������f�w �fD�%h�1��~�f/��j���@�Y�H��f/�w��S���DE1��G$H�GfD�O �1�����AVAUATUS�F H��f����A��f����f������Pf����H�VL�nH��H�$H�v$H�W�D���f����AOą���L9o�LFo���������L�o�N�4�f�G�L������A��
t)L9m��L�1ҋM$M��t�U L��H����L�kK�D�[]A\A]A^ÐD���C$��f��H�CDN�E��~@�1�f�s []A\A]A^�@�G$1�H�G1�f�{ []A\A]A^�������1�f�K �D���G$��f��H�GDN�E��~0��f�W �S���D1�H�����L�k�6���D�����f�G ��#���ff.�f�ATI��UH��S�Ӻ
�:���H��v��L��[H��]A\���f�[1�]A\�f��N$��tyH�FH��~pH�V�N H9�ssH)�H�GH�GH9�HG�1�f����������H�Wf�G H�FH��tH��H�H��L���L�$A�L�$H��H9�u��	�f�����fD�G$H�Gf��~�f�W �f������f�G �fDAWI��AVI��AUM��ATI��UH��SH��L�D$�Y��I�WH�|$P�E$H�L$XI�^H�uI+_L�M9VMCV��H�~�L�D$I9���H��I�uH���8��8��H��I�FH��H;EsRI�$I�OH�EH�4H9���H�KH9���H)�H�H�I�H�H9���A�D� H�L$XM�U��/@I�<$H9�r�A�D� H�L$P�뛐I�I�FI��I�$M�UI�FL�UH��H�E�����H�����HD�H��H��[]A\A]A^A_�DI�M�U��I�����M�U�AWAVAUA��ATI��UH��SH��H��H�v dH�%(H�D$81�����H�� �Ƀ��M�1҅�tOA�T$ �M �r�A��f���u]f�����C$H�Cf���lA��fD�[ @H�\$8dH3%(H���iH��H[]A\A]A^A_�f�f���_E1�A���H�EA��G�t6�I9D$���*M�D$H�}I9�H��IF�H��t5�E$A9D$$�|��1��f�D�\�$E9\�$wd��H��H9�u�I9�wP��A��1�f��M���@���f��NǍDp���u+A��C$�	H�CfD�S ����@M��1�f��A���E1�f��fD�K A��H�L$ G�|?�E��E�|G�H�D$fE����PL��H��H��H�D$ PL�L$@L�D$8���_AX�D$H����L�D$(I������L$L$H�|$ H�t$0�L$M��t3J�H9�r�f�J�H9���I��H��B�T�$�T�$M��u�H9��dI��I)�I�H���D�$I9�u�1�H����H��I��A�D�$B�D�$1�H��tnJ�L� H���f��1�H��H��tKH��AD�$=�ɚ;v�-ʚ;����DD���f��DN�A����~���fD�k ����I)�M��tBD� 1�fA����������f�C H�C1�H��t�T� �L$1�H���9���H�CH���4���@PH��H��L��H�D$ PL�L$@L�D$8�	���Y^�D$H����!L�D$(I�����t$�L$�9�r)�1҉t$H�|$ J�4H�L$0H9��nM��tMA�ʚ;A���fDJ�4A�H9���I��D��H��B+T�$D)҉T�$M��uѺH��H9�v'H��A�ʚ;D��H��H��)к�D�$H9�r�E1�H9���@H��tFH��H)�L��H���@)�1�A�t�$H��t"H��A�t�$9�s�ɚ;���f�H)�H��t)T� M9���1�fA�} E�����D�D��1�A����������f�C �E���D��H��H������H�CH�����DI��L���p���D�L��H�����H�CH���S���vfDH��H��A�D�$�D�$H9�r�M�������L��L��H��H��L�<�L��M�I��!@)кʚ;D)�A�D�$H����A�D� H��D�L�$E�D9�r�)�1�D)����8E1��H��H��A�T�$�T�$H9�r�M���H��L�L� L��L)�M�T�1��f.�A�1�I��H��t*A�T� H��T�$�=�ɚ;v�-ʚ;A����DL)�L)�I���B���f.�L)�L)����DfA�|$ ~w�f�S ���f��L��H���0����p����L��H���������H��H9����������D���_����y���f.������f�C �,���I��1��������AW�AVAUATI��UH��H�� SH��H��H�v �G�����%A�D$ �U �Hf�������Jf������I�|$H�|$H���L�mI���GH�|$L9���H�D$N�<(H�CI��H��H�|$H9��tH�EH��H�CI�t$�������H�D$8f�} A�D$ ��f������������f�C N�4�1�H�{$L���U��H�|$L�{�{I�E�N�L3 1�L�t$H�D$ H�D$I�SZ��/�DA��KL�d$(I��H��H�D$I�G�H�D$0�M�~�L9d$��L�\$ L��H+|$H�D$I9���H�t$(L�D�$�f.�H��I��L9���A��t�$H��H��H��	H��I��H��H���ʉ�Hi�ʚ;H)�A1���ɚ;v���	��A����
i�ʚ;)�A�1��t�M��t�AA�L����A�A�=�ɚ;w%�z���f.��L�$щL�$���ɚ;�Z������	��A���i�ʚ;)��L�$H��H���u�H��I��L9��7���fDI��M��I��L9d$����H�|$8��H�����H�|$8�H����H�����H�D$8H�@H��H[]H��A\A]A^A_�f���f�����C$�H�Cf�S H��H[]A\A]A^A_�K�<�H�5]����I��H�EL��I�FI�t$�:�����EL�����H��H1�[]A\A]A^A_�L��I��H�D$H��L��I������A�|$$����I�|$����1�f��H��H���T���H�\$8������}$�����H�}�����f��L��H�����ҍT����H�\$8����f�f�����������C$f�C �H�CH��H[]A\A]A^A_�H�D$0L)�L9d$ rL��I��H+|$�%���f�M��1�� ���f�������������r���1�H���W�H�\$8�1���H�\$8L���0���AWE1�I��AVAUATI��UH��SH��H��X�F$H�FfD�V A�w H�T$@H�Q ��������A�W A�L$ �r�A��f�����f���f���]f���]��E$H�Ef�E H�|$@A�D$ f� ��f������C$H�Cf�S fDH�EH��H��X[]A\A]A^A_�f����I�D$H�D$HH����H�EH�|$@H�D$0H�wH�CH�D$H9����C$H����H�V��DH�ȋL� �L�$H�HH9�u�H�D$H9T$v�H���D� H9�u�1�H�|$0H�T$0�<@H���D� H9�u�A�D$$H�D$8Hi�ʚ;H�|$HH�D$ H�D$v(A�D$(H�D$8HD$ 1�H�t$ H�|$H��H�H�D$H�D$H�t$0H��H9�HG�H�D$H����H�D$HA�I�SZ��/�DH�<�L�p�H�|$(f�J��I�uH�<�G$����Hi�ʚ;D�_(L�H9D$ ��H9D$��H9t$0�%1�H�t$8D
(M�L$M�I��L;L$�LH�|$(L��B�L�$E1�H��L��L��M��GfD��ʚ;F�D)�L�$H���L�$E��tD9�se��ʚ;D)�A��L�$L��H)�I9�r\A�t� 1�I��H���ɚ;vH��H��	H��I��H���Љ�Hi�ʚ;H)։�H9�r�)�A��fDL��D)�E1�H)��L�$I9�s�D)��L�$B�D�$J�T� =�ɚ;v-ʚ;H���B�B���B=�ɚ;w�L;l$�����H�D$0�H��H�EH�D$@H�@H�E������]H��X1�[]A\A]A^A_�DI��L;l$�B����1�H�t$D
$I��I�D$M�L����L�\$HI�UI��v<�,A9|$,�B���r,M��K�<+I��O����E�T�$D9T�$����w	H��H9�u�I�D$L�P�O�LL9L$�sL)�L��1�M���&fDʚ;�D)��D�$H��L��H)�L9�w A�|� �D�$D�7D9�r�)�1�)���fDH�A$���A$���f���`f���`A��E$H�EfD�E H�5����*��H��X[H�]A\A]A^A_�I�t$H��H������������H�t$@A�D$ f�~ �Lf������������f�E H�����H�D$L�|$@H�߾H�CI�GH�C�,�����.���1�fA� H����������f�C �������f�������������E$H�Ef�u ���A�|$$����I�|$�����L�|$@1�f��H���T�L�����fA� �}���������C$H�Cf�K �~���f�������������E$H�Ef�} ���E1��E$H�5���H�EfD�M ���H��1���f�������f�������������������A�D$$H�D$8Hi�ʚ;H�|$HH�D$ �������H�=�1��{���ff.���H������ATUSH��dH�%(H�D$1��?��H�T$�H�=�� ������H���Ã���wIL�%2� �}�����H�TL��H���Z����|$��u.H�L$dH3%(H��uH��[]A\�fD�������d����Ϲ��ff.�@��ATI��U��S�^����w@H�H�\u!I�<$H��t@��u �˸����x,Hc����H��[]A\���˼���޺1����;���H�� H�5��H�81���H��dH�%(H�D$1�@��tv����u^H��H���H��t1������t'@��t!�����
u0H���k���H�$H�Ѓ�H�L$dH3%(u.H���@1���u�H�H��H�Ѓ���1�H�����t���.���ff.�H��@����@������������H����@��tH��4������������H;6� ��H;!� ��H;� ��H;�� ��H;�� ��H;�� ��H;�� ��H;�� ��H;�� ��H;y� ��H;d� u/�H����H������C�������Ѓ���v�H�D� H�5�H�81������봐��f���f���f���y���fD��i���fD��U�W���SH������H�>����/@��uY�����Ä�uY�������H���H���#����Ѓ�������H����H�\H��[]�D����Ä�t����H����H��t
H�����t�‰ǃ���H����D������Y����t��%����H����E�����6����t��%����H����E��ؼ�������t��%���H����E�赼������H����H�\H��[]�fDH�n@����������D��H��H�\H��[]�fDH�-�� ��H�\�Դ��H��H��H��趴��H��H��[]ú��-���H�� H�5��H�81����H��� H�5τH�81��ͳ��ff.�f�AWAVI��AUI��ATA�4U��SH�@H�H��dH�%(H��$�1�H�D6H�$A��tRA��� D�������I��tKA��tEI��4t?A�������w1H�^�Hc�H�>���I�����u�I��t	M��u�@����1�H��$�dH3%(��H��[]A\A]A^A_�DM����I��4�]M9�t�L��������H�����H������I��H��t�H�$H���L��H�T$�]���A�w L��I������H�T$I��H���[H�׃������Lc�M������L��L���}3I�����DH�5� L��聲��������I�F �����
L����H�D$8H�XH� tH�XH��襲��H��H�x
H��� H�������f.�M����I�������L���e������f(�fT
��f.���f��f.�z��H�5X� L��1�1��4���I������@H�\$pM��1�H��I��H�
�����H�� H�޿H��k������fDH�L$0H�T$(L��H��H�D$(��+H����H��� H���yL��L���.���I���>���fD1�L�L$���H�
u� L�L$H�5�H�D$H�I�yL�L$����L���H�����I��H�L�T$H�D$@���L���H�����I��H�H�D$H�x���L�T$H�5ƒI��H�I�RH�D$PI�FIGH�JH��H9�HF�H�
׼ H�|�	H�H��O��L�T$L��H�H��L��H�T$XL����H�|$�'�������L�T$L�L$��L��L��L�T$�%��L�T$A�r L�����I�����������4���fDL��� ���H�������M�������H�=�迳��H��H�� �g���H�� L��H�8�~���fDH�|$(�w �z��H���8I���������L���z���H�5�H��H�� H�81��Ϯ���H��� 1���$H��
���$H��H�$���H�$����
��f��H�X� �^�H�f/�wH�5��L�������a���H�50�L������M����&����1������USH��HdH�%(H�L$81Ƀ���H��H������H���F���H�5��H��H�H��H�D$����1�H�p2�!���H�D$H�D$H��� tH�D$H�XH�EH�
���H��H�����L��1��a���H���i���1�1�H��H�4蹸��H���Q���H�|$H��褮��H�D$H�L$8dH3%(u)H��H[]��H�\$H���|����1��f�����������H��H������W����P 1�f��tf��t�f���tH���fD1�H���f����H��H����������P �f��t1�f�����H�D��H���D��H���H���������f�x H�H��������H���H��������H�@ H��H�D�����H�����H���g����p$H�P���tBH���������H�Һ�H��H�H�DH����w�H��H��H��H��H9�w�Hc�H�DH�����S�H�����H��@dH�%(H�D$81����H�5E�H��H�H��H�D$謴��1�H���¯��H�D$H�D$H��� upH�t$H��1�1�H��苶��H�D$H��� u>H�|$H������H�|$H���c���H�D$H�L$8dH3%(u)H��@[��H�D$H�x�DH�D$H�p��Ы����S�H�����H�������@ ��f����HD�H��[�ff.���H���H����������@ ����f��H�H�����ff.���U�H�����SH��8dH�%(H�D$(1����H�5�~H��H�H�$H�EH�<�H��� H�H��z��H��H��H�H��H�D$����H�D$(dH3%(u�s H��8H��[]�R���轪��ff.�f���U�H�����SH��8dH�%(H�D$(1����H�5�}H��H�H�$H�EH�<�H�]� H�H�����1ɺH��H��H�H��H�D$����H�D$(dH3%(u�s H��8H��[]髼������fD��AW�AVAUATI��H�����USH��XdH�%(H�D$H1��:���H��H�H�D$ H�EH�<�H�?L��A���.聭�����SH�H�5}H��H9�HC�H��� H�H�����I��H�H�D$(�E �ƒ�f���Mf����Cf�����LH�}�qI�GH�5m|H9EH��I��LCeH�<P���H�5M|H��K��I�<DH��s���H�t$H��M�oH�|$I���
���H�L$�D$H�r�q�qH��H��H��H��H��?H��H�9��8��8H��H)�H�t$H)�H�I��H9�tH���^���D$I��I��?I�I�f���Q�f.��!f(�L�����Mw�I��IF�K�T�I�GH��H��dH�C�dHM�E1�H�D$�~DI�GH�CL��H��L��H����������L��H��L�����H�5� L��H�����C ��f���t]�L��H��L�������L��L�����I��L;t$t/I�GH�I9��w���M�oL���o����3�������fDA�G M�oH�߉�f��1�)�fA�G �ا��M��tL���˧��A�w L���ι��H�L$HdH3%(��H��X[]A\A]A^A_�H��L�����A�w 뻐1�A�G$H�5
z� I�GfA�W ����A�w 닐�}$�����H�}�z����A�G$�I�GI�GfA�G �I����1�A�G$H�5{y� I�GfA�O 萸��A�w �����a����L����L$�q����L$����fD��U�H�����SH��8dH�%(H�D$(1��e�H�5nyH��H�H�$H�EH�<�H�ݱ H�H��Z��H��H��H�H��H�D$����s ��f��1�)�f�s H�D$(dH3%(uH��8H��[]����芥��f.���AT�H�����USH��@dH�%(H�D$81���H�t$ H�|$H��H�H��H�D$0�V������H�D$ f��H==��H=����<H�5�yH���=���1�H���S���H�D$(H�D$(H��� �=H�D$(H�h1�1�H��H��������1�H���I�����A�<$"�D$u(f��f.���f(�fT�f/��w@�C����l�H�5�t��L$艶��f�{ �L$���� f.�z�u�H�9� �H�f� ��^��ְ �@�D$�զ��H�L$8dH3%(��H��@[]A\���H���f.�H�5Qt����f�{ f��8����؂�s���뜐H�l$(H�����f��@� f.���������H�y� �H��� ��^�fW���� �����D���@��U�H�����SH��8dH�%(H�D$(1��u�H�5~vH��H�H�$H�EH�<�H�� H�H��j�������H��H��H�H��H�D$���H�D$(dH3%(u�s H��8H��[]�=���訢�����H���H�����dH�%(H�D$1����H�H�$H�L$dH3%(u'H�PH�@H���4ҍ<�Hc�Hc�H�t6H�|?�����4���@��SH��H��H�� dH�%(H�D$1��������@��t=�H������L�H�8H�<$H�D$dH3%(��H�� H��[餣��@H�����t������t-��u�H�C �H�@H�4����H�8H�<$�f������H��p H��H�$���H�L$dH3%(uH�� H��H��[�����9���f�AVAUA��ATI��UH��H�����S�ӺH��0dH�%(H�D$(1��X�I��H�H�$@����@���z������H��H���H����@�����E��������H�,xHc�H�>��fDI�F1�H��H�4����H�H�T$H�T$A�V f�����H f����f���@��f��@��	�f���
f����@���7f������*��"��H��w��Hc�H�>��fDH�5٦ H���q�����u}��*��"�QH�2x��Hc�H�>��D1ҾH���	�H�H�T$H�T$A�V f���3������*t1�H�L$(dH3%(� H��0[]A\A]A^Ð1�H�����H����H�H�T$����f�H������V����}���fDH�� H���@�H�D$(dH3%(��H��0H��L��[]A\A]A^酡��DH��� H��uľH�=r�c���H��H��� ��H��� H���H��L������H��������������I���_����H�I� H����H�D$(dH3%(��H��0H��L��[]A\A]A^魟��D��)�@��EЅ���������*��H�؀�"��H�
�v��Hc�H�>��D�q�z��f���thf���_f����f����H�xI9~�?��f���������*��"�gH�
w��Hc�H�>��1��i���f�f���f���H�����*��"�%H�Ww��Hc�H�>��fD����fDH�����������f�H���~����~���f�H����r����h���H��DH�H���Z���@�H�=
p�g���H��H��� �����H�=�o�?���H��H�}� �8����H�=�r����H��H�U� ����f���Q�������f���*��"�'H��v��Hc�H�>��1��Q���f���s�����*��"��H�Aw��Hc�H�>��f��~z��*��"��H��w��Hc�H�>��L�HM�FM9�L��IF�H��t+�p$A9v$w�r31��DD�T�$E9T�$w�rH��H9�u�M9�s/f����������f��~���*��"w\H��w��Hc�H�>��v*f���:�����*��"w5H�#x��Hc�H�>���I�����*��"wH��x��Hc�H�>��H�=�k1�����H�����fD���G����f����>����f����L���f����<���f����=���f����*���f���AU�I��ATUSH��H�����H��8dH�%(H�D$(1����I��H�H�$�؃���������1�H�����H����H��H����H�EH�5�mH�D$H�EID$H�<�H�� H�H�莽��H��L��H��H�H��H�D$�%��H�D$(dH3%(���s H��8H��[]A\A]�[���H������a��������t1���N���I�D$�H��H�4����H���D���f.���H�����H��H���%���H�D$(dH3%(uH��8H��L��*[]A\A]�ț���3�����AUATI��UH��H��SH��(dH�%(H�D$1������˜��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]����@1��9���L��H��I�����L��H��� ���H��H��������H��H�H�$�ݤ��H��H�������H�D$dH3%(u)�u H��(H��[]A\A]�٪��f�����;����1����<���ff.����AU�I��ATUSH��H�����H��8dH�%(H�D$(1��K�I��H�H�$�؃����C��t^1�H�����H����H��H����H�Ef�} H�D$t
fA�|$ uhI�$H�L$(dH3%(��H��8[]A\A]�DH�����t����������u�I�D$�H��H�4���H���|���fDH��L���5���I��H�����H�<�H�� H�5vjH�H��{���H��H�H�D$M����fA�|$ �C$H�C����f�S H�D$(dH3%(��H��8H��[]A\A]�'������H�����H�����fDH�a� H�5�i�
H��չ��H��H�H�D$L�����H��H���G���s �q���fDH�D$(dH3%(u3H��8H��L��-[]A\A]鎘��fD����������f�C �(��������AUATI��UH��H��SH��(dH�%(H�D$1������{���Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]�T���@1����L��H��I���;���L��H���Х��H��H�������H��H�H�$荡��H��H����迿��H�D$dH3%(u)�u H��(H��[]A\A]鉧��f�蛔���;���������ff.����AU�I��ATUSH��H�����H��8dH�%(H�D$(1����I��H�H�$�؃����C��t^1�H�����H������H��H����H�Ef�} H�D$t
fA�|$ uhI�$H�L$(dH3%(��H��8[]A\A]�DH�����t����������u�I�D$�H��H�4��N��H���|���fDH��L�����I��H�����H�<�H��� H�5&gH�H��+���H��H�H�D$M����fA�|$ �C$H�C����f�S H�D$(dH3%(��H��8H��[]A\A]�ץ�����H�����H�����fDH�� H�5�f�
H�腶��H��H�H�D$L��H��H������s �q���fDH�D$(dH3%(u3H��8H��L��+[]A\A]�>���fD����������f�C �(���萒����AUATI��UH��H��SH��(dH�%(H�D$1������+���Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]�T���@1�虢��L��H��I���;���L��H��耢��H��H������L��H��H�H�$�=���H��H�����o���H�D$dH3%(u)�u H��(H��[]A\A]�9���f��K����;���葑��蜣��ff.��ATUSH�� dH�%(H�D$1��G�����H�H�\$��tWA�1��tu���a�؃�����H��H���H��tZ��tU�������wHH��nHc�H�>��L�fL��A����貔�����cH�\$Hc��u�H�����u�H�|$�ʏ��H�t$H� ��H�vH�������Tf.�H���x�����of(�fT
�of.���H����I�����H��H�����H�L$dH3%(��H�� []A\�f��ˏ���4���fDH�5�� H��葏�����5���H�D$H�@ �fDH���;�����H�����H���$���y���H��� 1���D$H��#����D$H��H�D$�0���H�D$�@������Ǒ��股��H��� H�5�bH�81��z���H������H�5`H��H�y� H�81��W����2���f���AUI��H�5� ATUH��S��H��H��dH�%(H�D$1�軏����L��I���n���H��H��s H��H�$�h���H��u3M��tL���F���H�] H��H�+H�L$dH3%(uH��[]A\A]ÐH��L���u���H����苎��ff.���ATH�c� I��1�US��H��dH�%(H�D$1�H�G� H�8藍����L��H�����H��H��s H��H�$贠��H��u'H�] H��H�+H�L$dH3%(uH��[]A\�@H��1��Μ��H�������@��AWAVAUATUH��H�����S��H�׺H��XdH�%(H�D$H1����I��H�H�D$ ���.��H�5JbL��1�1�H�D$试��H�$H��1�轐��H�D$H�D$H��� �gL�t$I�����>A�} ��L���������fA�} �S����L���FI�^A�+�9�H�}H��H�|$��H�$uH�����t�������@�����e������XH�1�H�$H�5daL��1��Ԕ��H�ƐH�<$H������H�D>�1�H��H�t�����H���C��<0t�<.�H�<$tH�4$L���ޕ��fDL��� ���H�|$H���s���H�D$H�t$HdH34%(��H��X[]A\A]A^A_�H�$��L��L���7����DH�D$L�p���f�蛏������fDA�-I�^I�mM�]H���I��E1�A�����M��u`��M��x^E�E$H��H�
[]1�H������L�\$�E���H���M���L�\$A�����H�M��u�.H��I��M9���I��M��t�C�D�$H�s	���1�H����0�׈C���A�����H9�u��DH�S
H��u�.H��H�S	@H�Z�H��y�e���f�H��H�C�@�0H9�u��fDL)����0.H�sf��H�D�H�SH)�H�KfDH�B�@H���@�0H9�u�H�P	H9�u�H��H��H��H��H)�H�����H�\	����0f�����I�^A� �f���H�|$�$���H�|$I��臉��I�$�� ��1�+u(I�T$�I����H�$H��H�DB�H�$I�$I���������ʍA���v� t߃�0��	vƃ�߀�F�����H�5�\L���ˑ��H����H��H���������I�T$�I��뙺1���襋��H��� H�5\H�81��]����8������U�H�����SH��dH�%(H�D$1��e��H��H�H�] H�$H��t(H���t"H�L$dH3%(H�Du+H��[]�fDH�EH�}$H�4��c���H1�H]�襈��D��AW�AVAUATI��USH��H�����H��xdH�%(H�D$h1�����I��H�H�D$�؃��������1�H�����H�����H��H����H�EH�� H�5�[H�D$H�EIEH�L�4�L��O�t6�u���H�L��H�5�ZI��H�H�D$ �X���H�L��H�5�ZI��H�H�D$(�;���H�L��H�5dZI��H�L�D$H�D$0����H��L��L��I��H�L��H�D$8�M��I�D$H�H�5�ZL�,�M�L���ߪ��H�H�5�ZL��I��H�L�$H�D$@辪��L�$1ɺH��H�L��L��H�D$H轷��L��H����L�D$H��H��L��L�$�+���L�$L��L���L����H�D$hdH3%(��A�v H��xL��[]A\A]A^A_�E���DH������^��������ti���K���I�E�H��H�4�����H���B���H�� H��tTH��L�����H��teH�L$hdH3%(uPH��x[]A\A]A^A_�@��H���~��H�����fD�	H�=_Y蟉��H��H��� �������f�AWAVAUI��ATI�ԺUSH��H�����H��hdH�%(H�D$X1����I��H�H�D$�؃���������H��1�H���������H��H����H�H�D$A�F f���+�K f���f����f������Qf�����H�5� H�4$H�f����f�������f�����I�NI�FH�sH��?H1�H��?H)�IFH��H�CH1�H)�HCH�5/XH9�HB�L�|�	L���+���K�|?H�5UWH��H�H�D$ H�$H�����H��L��H��I��H�L��H�D$(�<��H�EH�5�WH�<�H�$H�H��Χ��1ɺH��I��H�L��L�L$H�D$0�̴��L�L$H��L��L���I��������L��L��H�������E L�L$��f���tfA�~ �C �<f���<M�$�I�mH�L$XdH3%(��H��h[]A\A]A^A_�H�����������������������I�FH�ߺH�4�����H������f��t2f���t,��f�����H�?� H�5�VH�81��N���fDH�-� H�5NX�H�U茦��H�UH�55XH��H�H�D$ ��l���H�I�$�I�]H�T$(����f�H�ߺ����H��H���I���1�����f������H��� L�ι����L��蘵��H��H��荕��H�5�UH�<�H�$H�H�����H��H��I��H�L��H�D$8�U���M�<$�M�u�e���H�!� H�5�U�H�H�$葥��fA�~ H��H�H�D$ ~Vf�{ ~V��E$H�Ef�U H�$H�5W�H��G���H�I�,$I�E�H�T$(����Df�{ ~�������E$H�Ef�E ��H�5�T����H�I�$�M�uH�T$ ���DH�5�T�迤��H�5�TH��H�H�D$ H�$H��+�������ff.����UH��SH��H��8dH�%(H�D$(1�H�L$H��H�$H�D$��H��u-�%H��H���M���H�\$(dH3%(u1H��8[]�fDH�$H�|$H��w H�D$H�H�D$������w������UH��SH��H��HdH�%(H�D$81�H�L$H��H�$H�D$�R���H��uUH�֌ H��t)H��H��覂��H�L$8dH3%(umH��H[]���H�=^S臃��H��H��� �H�$H�|$H��w H�D$H�H�D$�F���H�<$H���w �6���H��H���{�������@��AV�AUI��ATI��H�����USH��`dH�%(H�D$X1����H��H�H�D$0D������_A���
1�H�����L�����H��H���VH�H�UH�5�QH�KL�-�� H�D$8H�EH��?H��?H1�H)�HEH��H�CH1�H)�HCH9�HB�I�UL�t�L���;���I�UK�|6H�5aQI��H�H�D$@����H��H��L��I��H�L��H�D$H�O���I�$�s$H�$I�EH�D$H�H�D$����H�D$XdH3%(��A�t$ H��`L��[]A\A]A^齐��DI��������A�$����t/������H�E�L��H�4��Q��H������f���L���.��H��H��������/L��L���B���H��tTH�L$XdH3%(u?H��`[]A\A]A^��A�E$1�L��Hi�ʚ;H��I�T$A�T� 1������������X}���]�����AW�H�����AVAUATUSH��XdH�%(H�D$H1��}��H�5�QI��H�L��H�D$ �C���1�H���Y���H�0H�D$H�t$�� �PH��H�D$A�D$ f���Uf����f������Pf����Ff��H�D$�w�-0�@f�H�D$��<-�<N�H�\I�D$HD�A�t$$���tFH����H���������H��H�H�lH����w DH��H��H��H��H9�w�Hc�H�l	���|��H��H��I����~��H�\$L��H����~��H�|$��{��H��H��� |���L���~��H��L���~��L��H�t$HdH34%(��H��X[]A\A]A^A_�f�H�D$H�@H�D$A�D$ f�������H�D$�NaN����H�|$I��f���I�D$H�D$H�����1�DE�|�$A�	���+fDL��1�H��H���������I��H��H��H��A��tKH��t
�I9�r�L��1�H�
�LL��H��H�����I��1��~��L���z��1�I��DH��H9l$�i���A�~�0A������f.�I��A�A�~�0t����@L�|$I�oH���Gz��H��L��H��H���|��A�A�H���������L�w�-����@�0f����H�InfinityH�D$H�0�@�j���DH�-InfinitH�D$H�0�yf�p�E�����y��ff.���AW�H�����AVAUATI��U1�SH��dH�%(H�D$1������x H�����f�{ �K$@��H�C1�H�l-���t4H��H����w'H��������̺�DH��H��H��H��H9�w�L������H� ��H��L�hM�eA�� ��I��A��H�5�� I��M)�H���L��1�1�I����y��I��H����M����H�5E� O�t6L�4$H���L�����y���*L��L���H�$�xy���H���{y��H�|$dH3<%(�H��[]A\A]A^A_��H�@ �#����M�e�0����I)�H�5�� O�d$L�$$H����L������x��L��H���x���w���f��H�=MK�o{��H��H�e� ����L����*H��H�,$�x��I��������H�=
K�'{��H��H�
� ������H�=�J�z��H��H�� �L����Kw��ff.���AW�H�����AVAUATI��USH��HdH�%(H�D$81��j��H��H��} H�D$�v����M$��t_H�EH��H����w)H��������̺��H��H��H��H��H9�w�H��~ H��	J1�f�} ��H�D�H��H�D	��H�|$8dH3<%(�=H��H[]A\A]A^A_��L������H� ��H�@ H�5Ȃ L�`H���S1�1�L���'w��I��I�$�� ��H����I��I��L�t$M)�f�} �7M����H�5W� O�|?L�|$H���:L�����v��L��L��*H�D$�v���ƒ���t"�����H�����������������H��� H�5�GH�81��t��@H�������M�d$�9���fDI)�H�5�� O�d$L�d$H����L����v��H�5�� H�D$H����L��L����u���?�����H�=MH�ox��H��H�M� ���L��L���*H�D$�����u��I������H�=H�)x��H��H�� ����H�=iG�	x��H��H�׀ �^����H�=�G��w��H��H��� �����5t��D��AUATI��UH��S��1�H��8dH�%(H�D$(1�胄�����WI����I�<$@���3�w��A��H��H������'���H�50GH��H�H�$H�EH�<�H�� H�H�����L��H��H�H�D$�	���Ic̺H��H������H�D$(dH3%(���s H��8H��[]A\A]�܅��@H��H�����蔾��H�5�FH��H�H�$H�EH�<�H� H�H�艖��L��H��H�H�D$�v���1ɺH��H��脣���s H���h���H�L$(dH3%(u3H��8H��[]A\A]�v���fD�[r��A�������1�����t���r����AUATI��UH��S��1�H��8dH�%(H�D$(1�������WI����I�<$@���3�v��A��H��H�����臽��H�5�EH��H�H�$H�EH�<�H��} H�H��|���L��H��H�H�D$�i���Ic̺H��H���v���H�D$(dH3%(���s H��8H��[]A\A]�<���@H��H�������H�5�DH��H�H�$H�EH�<�H�l} H�H����L��H��H�H�D$�ց��1ɺH��H������s H���ȃ��H�L$(dH3%(u3H��8H��[]A\A]����fD�p��A�������1����Es����p����AUATI��UH��S��1�H��8dH�%(H�D$(1��C������WI����I�<$@���3�nt��A��H��H��������H�5�CH��H�H�$H�EH�<�H�_| H�H��ܓ��L��H��H�H�D$�ɀ��Ic̺H��H���֠��H�D$(dH3%(���s H��8H��[]A\A]霂��@H��H������T���H�5]CH��H�H�$H�EH�<�H��{ H�H��I���L��H��H�H�D$�6���1ɺH��H���D����s H���(���H�L$(dH3%(u3H��8H��[]A\A]�6���fD�o��A�������1����q���Po����AVAUI��ATI��U��SH��0dH�%(H�D$(1��{������Å�tDI�<$����@��uH�����t�������@�����r��Lc���1��I���H�����L��I������H�5BI��H�H�$I�D$H�<�H��z H�H�����L��H��H�H�D$��~��1���L��H�������u H�����H�L$(dH3%(�:H��0H��[]A\A]A^����I�\$@������q��Lc��u
H�������H���׵����1��n~��L��H�����I���7���H�5@AI��H�H�$I�EH�<�H��y H�H��,���L��H��H�H�D$�~����L��L��H���(���H�D$(dH3%(uo�u H��0H��[]A\A]A^�����m��Lc��^���������C���H���y�����>�����l��������y��E1���"����1����Yo���m��@��AWH��AVAUATUSH��H���H�T$HdH�%(H��$�1�����H�H�|$H�|$����tK�����؃�����H��H���H��t0��t+�������wH��JHc�H�>��@H�����u�H��x H��H�8��s��D�{n��H�D$�u���H�t$1�H��肷��H��t��X f�\$>H�H�\$H�\$H��f�|$>H�$y	�f�P H��w H�5?�H��S����p H���W~��H�x H��H�D$@�G ��f����RH�L$XI��I��H��H�L$(H�L$P�H���������H�L$0fD�p$H�P1Ʌ�t.H��H����w!��f�H��H��H��H��H9�w�H�G�$��t8H����H��H������f�H��H��H��H��H9�r�H)�H��L�<$H��?H1�H)�I)��!k��M����H�t$L��I�������I��H�@L��CO�|?H�@H���L�l-I����L��A�����Bn��Lc�M���t��L��L�����I��L��L��H���s��I�} I���G ��f�����I�D$ ���H�5
q H���i���������H�C �X f�\$>f���Lf����Bf�|$>����H��u H�|$H�5�<H��B���1��@$H�@f�H H�D$X1�H��H��+|���WH���l��f(�fT
�Hf.
�H��f��1�f/�������H�t$��讴���p H����{��H��$�dH3%(�H���[]A\A]A^A_�1�H�����H���h�������K��A�!I��H�@H��L���H���g��I��I���F���H�L$(H�T$0L��L��H�D$P���H����H��u H���[L��L���k��I���.����+h������fD1�L�D$ ��x��H�
Ut L�D$ H�5�;H�D$H�I�x���L���H�����I��H�H�D$`聳��L��H�����I��H�H�D$h�b���I�WH�5�:I��H�H�JH�D$pI�EIFH��H9�HF�H�
�s H�|�	H�H��>���L��L��H�H��H�T$xL���u���H�|$�x���s��L�D$ L����L���#���A�w L���z��I������fDL���0f��I�����L�d$@f�|$>�,I�D$ �p$H�P��t<H���������H�Һ�H��H�������H��H��H��H��H9�w�H)L$H�@H�\$H�� H�DH�t$HL��H�D$H�t����}����H�|$P�w �:y��H���b�I���H���f.�H)����H�yr H�|$H�5+9H������@$H�@f�p H�D$X�H��H���x������H�='9��i��H��H�
s ���H�|$HH��ts@��uV�e��Hc�H�����H�|$@L���S����f.������1ҾH���%������H�|$�d�������|i��Hc���D$>���0���H�|$@H�L$XH�T$PL��H�D$P���H���*H�Zr H���5H�|$@H��L����g���
���1���u��H�{H�5�8H��H�(q H�計��H�|$@�H�����I��H�H��$��d���L��H�����I��H�H��$��B���I�UH�5�7I��H�H�JH��$�I�D$IFH��H9�HF�H�|�	H��p H�H�����L��L��H�H��H��$�L���N���H���t����p��L��H��������A�u L����v������H)D$�O���H�|$P�w ��v��H���������H�=7�g��H�q ����
d��H�;p H�5�4H�81��c���u��ff.�f���AWAVAUATUSH��HdH�%(H�D$81��G�����I��L�.��u_H�~H��tU@�����>c��Hc�H������L��L�����H�\$8dH3%(��H��H[]A\A]A^A_�fDH�L$H��L��L��H�$�M��H���DH�
p H���L��L���e������f���h���fD1��is��H�-�n H�{H�5G6I��H�U�K���L���H�����I��H�H�D$����L��H�����I��H�H�D$���I�WH�585I��H�H�JH�D$ I�EIFH��H9�H�UHF�H�|�	H��υ��L��L��H�H��H�T$(L������L���r���n��L��H����軌��A�w L���t������H�=�4�e��H��H��n ����f�H�<$�w �ct��H�����U������d����s���a��ff.�f���AWH��AVAUATUSH��H��H�|$0H�T$(dH�<%(H��$�1��uD�u H�����tH�H�D$�D$����
�H�qm H�5�4H�81��H`���H�l$(H�H���9��tJ�����؃����eH��H���H��t/��t*�������wH�=?Hc�H�>��H�����u�H��l H��H�8�%h��DH���d����:
H��$���<H��HDŽ$��ja��H�������	H�l H�5�1H�81��f_��fDH�5)g H���_�����r���L�c 1�A�L$ �Af��������f��@��f���@��	�f�����Ʌ���@����H��k H�5�2H��H��H���H�D$x��H��H��@$H�@f�H �+r��H��$�dH3%(��	H��[]A\A]A^A_þH���e^��H���-c��1�H�H����H��?	����1�H�����H��薪��I��M���s���A�t$ L���q��H�5M2�H��H��j H��~���H�T$HH�T$x�p H���xq��H�52�H�D$HH��j H��H���H�T$PH�T$x�p H���Bq��H�}H�D$PH�D$@H�|$H�D$xH�@H��^H�D?A�L$$H�D$@E1����I�D$L�,�H����w&H��������̺�@H��I��H��H��H9�w�I����L��$�L��1�H��H��1L���\��H��i L��H�l$@H��k����p H���op��H��H��H�����H��H�t$HH�����H�t$HH��L�d$@H������H��I���L��A���\�]a��Lc�M�����OH��H������H��H�D$XH�D$xH�T$@H��H���#��H�D$XH�D$`H�D$xH�D$hH�\$`H�D$xL�K H�\$hA�A ��f���� H�L$xL�l$8L��H��H�L$ A�I���������D�p$H�P1Ʌ�t&H��H����w���H��H��I��H��H9�w�E�A$I�AE��t6H����H��I�������H��H��I��H��L9�w�H)�H��L�|$H��?H1�H)�I)�M����H�T$@H�|$XI�l$H��I���0���H��H�@L���O�|?H�@L��L�d-I���$L��A���a�_��Lc�M����ZL��H���?��H��H�|$`H�t$h����H��H�D$`H�D$hL�H A�A ��f����:H�G I�����H���v^��f��1��f.�f(�fT�:��D�1�f/���f.l:��1�f.����E1��F���H�|$(�n]��H������H��1�H���H��?����f�����A�!H��H�@L����H���Y��I��I������H�L$ H�T$pL��H��H�D$p����H����H��g H���L��H���(]��H�������;Z�����fD1��j��H�
jf I�}H�5�-H�D$H���}���H�����H��I��H�H��$�蘥��L��H�����I��H�L�T$H��$��q���L�T$H�5�,I��H�H��$�I�WI�D$IBH��H�JH9�HF�H�
�e H�|�	H�H��D}��L�T$L��L��H�H��H��$�L���s���H�|$�j����e��L��L�����&���A�w L���	l��H������L���8X��I���@���L�l$8H�t$P衾��H�D$`M�������H�T$(H�|$0����H��H�@L���K�|-�H������c����p H���k��H��H���<���H�|$`H������?���f.�H�|$p�w �Rk��H���z�H�����f�H)��.�����H�=�+�/\��H��H�ue ����H�L$xH�T$pH��H��H�D$p���H����H�Be H���/H��H����Z��H��������W�����1��h��I�H�5�+I��H�d H��{��H��H�����I��H�H��$��F���H�ߺH�����H��H�H��$��$���I�VH�5o*H��H�H�JH��$�H�CHEH��H9�HF�H�|�	H��c H�H��z��H��L��H�H��H��$�H���1���L����g���c��L��L�������A�v L����i��H������E1��[���H�|$��U�������E1���H��b H�5�)H��H��sz��H�D$xH�1��@$1�f�P H��H�@�\i���,���f.���f/�s���u���H������I���i���H�|$p�w �i��H���F��H������L���FU��H���Z����H��H��辡��I���#���H����Y��H�������H��$���<H��HDŽ$��W������H�=	)�Y��H��H��b ���H�����	���������D��g����U��H�b H�5�&H�81���T��H��a H�5�&H�81���T��fD��AWAVAUATUSH��xdH�%(H�D$h1��G�����I��L�>�����H�����L��诠��H��H�H�D$@H�CA�H��H�$f�{ ��H�D$0H�-�3H�D$M��A���;E��A���}D�������eI���1A���'I��4�A��������HcD�H�>��f�L�v�L��H��������H��H�H�D$@I���?���A����L��H�f�{ H�$�=���H�U` H�<$H�5�'H���w��H�D$0E1��@$1�H��H�@H�fD�x �f���H�\$hdH3%(�H��x[]A\A]A^A_�DL���pW�������8�ƒ����vH��H���H���e<�]������������
�=L���V��I�������	�����L��H���H����A����A������	���W	��
�����H�5Z L���R����tkH�t$L���H�D$0���=L��H���±��H������L�����I��M��A������I�������I��t	M�����L���ZU��H�5$H��H�q^ H�81��Q���L���pU���D$�5U���L$f.���
��
��1f/���f/
�1���L,�O�|����E1��C ��f����<M����L��H����H�5_ H�L$8�L��L�L$H�D$8��R��L�L$H�������������H��] H�5�$H�H�<$�,u���p H���0d���{���L����S��H�$�U����f(��Q��I���Y����H����������H�5e^ H�L$8�H��H�D$8�:R��H����������������L��D��H��?H��A��ueM����I�������A�����
��
�����~���u�H�L$8�<L��H�D$8�Q��1�H������…�tH�4$�L�����I���d���A�A�A��C ��f����VL���H��?����M���A���	L��H���H���5A��A���'A���A������:������
��H��[ H�H�5^#�4���f�D��E�����c���M����I�������A�����
��D������t	����L��D�L$�{R��f��1�D�L$f/�������@H������
���H�5m\ H�L$8�L��H�D$8�BP��H����������������L���R��I������fDE1�L��H�������6���@D�ȃ����Y���H�L$8��<L��D�L$H�D$8��O��D�L$H������������Y���H��Z H�<$H�5W!H��r��H�D$0f�{ H��A��@$�H�@fD�h ���A���C���D�������C���L��H���H���2���A���(���A���������������
����M���cA���AD�������+L��H���H���A���A������,������
���C f���nf����dM����M���5I������(A�����
�L���1���H�Ũ�O��������GH��H���H���6@���,�E�����Q
���O��
�L�d$8��<H��H�D$8L����M��D��D����H������(����
A�����
��
������
����
L���<L��H�D$8�M��H������������(f�{ �f���L��荓�����V�����I��}�IE�H�/X H�f���pH�5���o��I��H�H�D$H�s �Ff�����M����f���D	M���3
A�A�E$�I�EfE�U I����L���A^�����@H�������l���f.�H���O������H�������L���f����������L���LN��f��1�f/������f.�A���������������
����H��t]E1��B���f�I��������H�5X H�L$8�L��H�D$8��K��H��������������������L��H�5�W H�L$8�L��L�L$H�D$8�K��L�L$H�������������	L���U���DL��L�L$��M��L�L$��I���H���@�������L��L�L$�M��L�L$H�D$L���!M����o���H�H���b���H�D$��U���H�H���H������DI�1�I�������L���OM�������H���������L��L��H�H����������L��H���v���L��L�L$�M��L��H���}L��L�L$������H�H�������@�������H�H������������1�I�����^���D��D�����eM����I������}A�����
�	�����n���eH�L$8��<L��H�D$8��I��H������������wf�{ ��������rM��uI�����tA�����
�rH�wT H�H�5m�����uvM������I���������A�����
������H�t$0L��H�$�!J��H�T$0H�$H�҃��������A������@$�����H�@fD�p �N���M��uI�����t�A�����
t���u�L��H�H�҃��L��H�����L��H��?���I�H�D$(A�A ��f�������H�$L�L$H�@H�H�i�7L�%ZS H�3H�l-H��I�<$��L�L$H��I�9H��H������H�$H��H�@H���H�T	I�<$H�����H�T$(H�T$0H�T$(���f����f����f����&���H�{��M�����bH�D$����I��I�EH�5lH�|��_��H�5[H��H�@H��H�|	�_���H��L��I���mu��I��L�|$���H��H���Nu��H�|$��A��
f.�I��H��H��L���_����L��H���u��K�?H;D$v�L��H)L$H��L�|$L��L���)����L��L����t��M���r���H�|$���M��tL���GF��H���?F��I��tA�u f����f��t
f�����A�u �������������L���mH��f��1�f/�������A�E$�I�EI�EfA�E �|���H�0Q H�<$H�5�H��h��f�{ I��������M��uI�����tA�����
t|H�Q H�5�H�81��C��M�O ���L���#���I����H�CH��H�5H��H�H��H���h��I��H�H�D$H�z���A�����
�AH�t$0�L���XF��H�D$0H�Ѓ������A�E$�I�EfA�m �x���M��uUI����������A�����
u4H�t$0�L����E��H�D$0H�Ѓ�H��O H�������d������Q���L��H�H�Ѓ���M���U���L��A�E$H��I�E��	�M���;���O��fA�} I��������fDE1�A�E$I�EfE�E ���H�<$�B��H������H���
B��L�%O H�3H��I�<$��H��H����A��L�L$H������gO��H�$L�����h���X����L����A��H���F������&�L�����A��H���F������������M���A�������A�����A�E$�����I�EfE�M ���M��u7I���������A�����A�E$�����I�EfE�e �����u�L��H�H�Ѓ�����H�D$�T���H�{�.����{$�$���fA�E f�{ �A�E$I�EI�E����A������fA�E ���������fD�A�E$�I�EfA�] ����A��t�A�����A�E$�����I�EfE�] �������~��fA�M ��������fA�u ��������H�*N L��H��L�������H��L���o���3���H��������H�5N H�L$8�H��H�D$8��A��H����������������H��H�H��������I�������A�����
�k�����E���<L���<L��H�D$8�\A��H��������������H�9L H�<$H�5�H��c��L��H���S�������f�{ �E$H�E��f�E �u H���R��������+B������������fA�U ��H���?C��H��I���B������H�H�����A�����I�I��������L���s>��H���;C�������f�{ �E$H�E�H���f�E ���C���L���&B��f��1�f/��������L���>��H����B�������L��H��?����>��L��H��?�r�L����A��f��1�f/����X�L����=��H���B�����;���H��H���H�t$H�t$���H���ff.����U�H�=SH��dH�%(H�D$1��A���H�=H��K ��A���H�=
H��K ��A��f�f.�J H��K zuH�GJ ���^��
�J f.�J z$u"H��I �H�J ��^��
�J �
uJ �J f.�zgueH��I H��I f.��~%���
�^�f(�fW��
/J ztJf.��z4u2���^�fW��
J �Df.�ztH�AI ��^��yI H�5Z�H���U��H�5�H�J �mU��H�=�H��I H��H H�0��@��H��H H�5�`��H��H��@�������H�5;���H�=��>��H�;�����H��D��H�5��>��H�;�����H���H�5q�>��H�;�����H����H�5��~>��H�;1�H�RA��H�5T�f>��H�;�H�`��H�5D�K>��H�;1�H��C��H�52�3>��H�;1�H��K��H�5�>��H�;1�H���H�5�>��H�;1�H��L��H�5��=���H�=�
�;��H�;H�5H���X?��H�;��5wH�5��D?��H�;��H�5��0?��H�;�H�5��?��H�;�H�5��?��H�;�	H�5���>��H�;�H�5���>��H�;�!H�5���>��H�;�H�5��>��H�;�H�5��>��H�;�H�5��>��H�;�H�5��|>��H�;�	H�5��h>��H�;�H�5��T>��H�;�
H�5��@>��H�;�H�5��,>��H�;�H�5��>��H�;�H�5��>��H�;H�����H�5���=��H�;�H�5���=��H�;H�����H�5���=��H�;�H�5��=��H�;H�����H�5��=���	H�=n�9��H�H��H�$�E���H�;H�5>H���c=���H�=��9��H�H��H�$����H�;H�5:H���,=��H�;�����H�=���H�5 �q;��H�;�H��H��H�5�V;��H�;1�H�����H�5�>;��H�;�H�����H�5��#;��H�;�H�$���H�5��;��H�;�H�����H�5���:��H�;�����H����H�5���:��H�;1�H�����H�5��:��H�;�����H�����H�5��:��H�;1�H�C���H�5��:��H�;1�H�+���H�5V�o:��H�;1�H�����H�5E�W:��H�;1�H���H�52�?:��H�;�H�P���H�5�$:��H�;�H���H�5�	:��H�;1�H��<��H�5�
��9��H�;1�H�����H�5�
��9��H�;�H�
���H�52�9��H�;�H����H�5�
�9��H�;�H��H�5�
�9��H�;�H�Y���H�5v
�m9��H�;�H�>���H�5]
�R9��H�;�H�����H�5�
�79��H�;�H�����H�5�
�9��H�;1�H��|��H�5
�9��H�;1�H��|��H�5
��8��H�;1�H�P���H�5���8��H�;1�H�����H�5��8��H�;�H�����H�5��8��H�;1�H�Ջ��H�5��8��H�;�����H���H�5��n8��H�;1�H����H�5��V8��H�;�����H�G��H�5t�;8��H�;�����H����H�5_� 8��H�;�����H�a�H�5I�8��H�;�H�6���H�5]	��7��H�;�H����H�5���7��H�;�H���H�5��7��H�;�H�Ś��H�5��7��H�;�H�����H�5��~7��H�;�H����H�5��c7��H�;�H�T���H�5~�H7��H�;�H�)���H�5^�-7��H�;�H�����H�5E�7��H�;1�H�f���H�5R�6��H�;1�H����H�57��6��H�;�H�����H�5%��6��H�;1�H�����H�5�6��H�;1�H�s���H�5�6��H�;1�H�+���H�5�
�6��H�;1�H���H�5�
�g6��H�;1�H�����H�5�
�O6��H�;1�H�#���H�5�
�76��H�;�����H���H�5�
�6��H�;�����H�݄��H�5�
�6��H�=�
�57��H��? �H����H��H�5t
H���5��H�;�H���H�5Z
��5���H�=R
�47���H�=Q
H��@ �7���H�=
H��@ �7���H�=
H��@ ��6���H�=�	H��@ ��6���	H�=�	H�q@ �6���	H�=�	H�Q@ �6���H�=�	H�1@ �6���H�=�	H�@ �t6���H�=	H��? �\6���H�=�H��? �D6���H�=�H��? �,6���H�=�H��? �6���H�=O	H�q? �5��H�]? H�D$dH3%(uH��[]��92����H��H��� can't be coerced into BigDecimalBigDecimal.ver is deprecated; use BigDecimal::VERSION instead.BigDecimal.new is deprecated; use Kernel.BigDecimal method instead.Computation results to 'NaN'(Not a Number)Computation results to 'Infinity'Computation results to '-Infinity'invalid value for BigDecimal(): "%li"Conversion from String to BigDecimal overflow (last few digits discarded).load failed: invalid character in the marshaled stringERROR(VpDivd): space for remainder too small.second argument must be true or falsefirst argument for BigDecimal.mode invalid%li can't be coerced into BigDecimal without a precisionBigDecimal to Float conversionUndefined operation in BigDecimalCmp()can't omit precision for a %li.Zero or negative precision for expComplex argument for BigMath.logZero or negative argument for logwrong argument type %li (expected scalar Numeric)a non-integral exponent for a negative base1.3.4%lue%zdinvalid rounding mode: nilinvalid rounding mode: %lifailed to allocate memory%snegative precisionExponent overflowComputation results to 'NaN'Exponent underflow+Infinity-Infinityexponent overflow#0Divide by zeroargument must be positiveinvalid rounding mode-0div%zu:sqrt of negative valuesqrt of 'NaN'(Not a Number)#1<=>>=<=precision too large.Fremainderdivided by 0divmodto_i**precision must be an Integer21E%ld0#BigDecimal.exception_modeBigDecimal.rounding_modeBigDecimal.precision_limit.5BigDecimalnewdouble_fig_loadversave_exception_modesave_rounding_modesave_limitVERSIONBASEEXCEPTION_ALLEXCEPTION_NaNEXCEPTION_INFINITYEXCEPTION_UNDERFLOWEXCEPTION_OVERFLOWEXCEPTION_ZERODIVIDEROUND_MODEROUND_UPROUND_DOWNROUND_HALF_UPROUND_HALF_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_EVENSIGN_NaNSIGN_POSITIVE_ZEROSIGN_NEGATIVE_ZEROSIGN_POSITIVE_FINITESIGN_NEGATIVE_FINITESIGN_POSITIVE_INFINITESIGN_NEGATIVE_INFINITENANinitializeinitialize_copyprecsaddsubmulthashto_sto_intto_rsplit+-+@-@/quo%moduloclonedupto_fabssqrtfixroundfracfloorceilpower===eql?<nonzero?coerceinspectexponentsignnan?infinite?truncate_dumpBigMathexploghalf_updefaulthalf_downhalf_evenbankerceilinghalf�P��1S���P���R��~R���P��S��DS���P��|R���P���R��VR���P��S��dS���T��\U���T��$U��U���T���T��4U��$v���t���t���t���t���t���u���t���u���t���t��u���t���t���t���t���t���v���������������������������������|������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0������������������������������������������������������ ����� �������������������������������������������p���$���ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ�������������ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ��ߋ����ߋ��ߋ��ߋ��ߋ����������S���S���S���S���S���S���S���S���S���S���S���S���S���S���S���S���S���������������S���S���S���S���S���S���S���S�������S���S���S���S����������NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��k���p���p���NJ��NJ��NJ��NJ��NJ��NJ��NJ��NJ��p���NJ��NJ��NJ��NJ��k���(���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;�����߆����;���;���;���;���;���;���;���;���߆��;���;���;���;���߆������������������������������������������������������������������������S���X���X�����������������������������������X�������������������S������#���#���#���#���#���#���#���#���#���#���#���#���#���#���#���#���#���̄��̄��Dž��#���#���#���#���#���#���#���#���Dž��#���#���#���#���̄��������������������������������������������������������������������������;���@���@�����������������������������������@�������������������;�����������������������������������������������������������������������������������������������������������������l������������������������������������������������������(���#���(���������������������������#���������������#�������\���\���\���\���\���H���\������\���\�������\���\���\���\���\���H���?���������������������������������������������������������������������������������������������P�������������������������j���������������������������������P���������������������&�.>�C��]r2<��������?e��A��C����������;�q ���`����$����$���p%����%���%���%��,�'��@�'��T(��|p(����(����(���P)���0*����*��<�,���P-��� /��p/��(�/��T@0����0���1���p1���1��,2��H`2��d�2����2��� 3����3���04��@6���7��09��hD���PD���pD����E��,	PF��L	0K���	�K���	0L��
0M��T
�O���
0Q��pQ��L0R��`�S����Z��`_����f��4
�f��H
@g��|
�g���
ph���
�i���
�k��0pq��|�r����r���s���@s���ps���s��(�t��Lu��h@u����u����v���`z��({��TP}����}���`~���`������p��������������������Ѕ������`���8p�������������<��������`���$���`�����`�������������� ���0���\@����Ц��@P����`�������(����x@��������$����t�������`�xzRx�$h��@FJw�?:*3$"D���0\x!��p�!��
��!���|!���x#��$��#��-A�A�F SDI��#��\A��#��+H^$�#��-E�F�M IFA@�#��qT`$���<h,%���B�B�B �D(�A0�l
(A BBBBd��%��B�H�B �B(�A0�A8�G`M
8A0A(B BBBAW
8A0A(B BBBED'��SA�a
Nb@0�'���K�A�G 
A�A�JvAAH��H ��t)��PA�a
N_(�@)��A�A�G V
DAA(��)��HF�A�K �rAB(��)��nE�A�D0W
AAA$�)��`A�e
JD
L_(@4*��UB�A�A �}
ABD(lh*��oE�A�D0X
AAA��*��!AAK��*��MDU
A��*��7A�[
A�+��AAK$+��YA�D�F ICA(0T+��vA�X
GU
KU
KU\�+���]Ut ,���.���4��/����C�D xAAC��L ��a��H��0��B�B�B �B(�D0�A8�Gp�
8D0A(B BBBJ( T;��5B�F�N �[ABLh;��HS0dp;��7F�A�D �DP�
 AABA�|<���A��
DVd��<���B�E�B �E(�A0�A8�D��
8A0A(B BBBA�
8F0A(B BBBE tA��c84�A���B�A�D �K
JBJK
ABJLp$B���B�E�E �D(�D0�M
(A BBBH\
(D BBBJX��B��Ot�E�A �D@
���h@���{ F�A�B�D@���x���X@���`�D���B�B�B �A(�A0��
(A BBBBl
(A BBBEX
(A BBBI4�F��7B�D�D �Y
DBGACB�F���H��F��mB�E�E �E(�D0�D8�DP 
8D0A(B BBBFl�G��B�B�B �E(�D0�D8�G��
8A0A(B BBBC�O�P�B�u�O�P�A����N���B�G�B �B(�D0�H8�G��
8A0A(F BBBAs
8A0A(B BBBA|
8C0A(B BBBA�
8A0A(B BBBD| 	�R��B�H�B �B(�D0�D8�G��
8A0A(B BBBA�
8C0A(B BBBF:
8A0C(B BBBA�	DY��0�	@Y���F�A�A �D0y
 AABG(�	�Y��}F�D�C �x
ABH
Z���D o
E0
�Z��zD�
ILL
\���E�F�D f
LAF�
LAG_
IAGf
DAAH�
�]��B�B�E �E(�G0�C8�T��
8A0A(B BBBF(�
�b��E�A�D`�
AAI�c��GMl
GF4d��;MmL(d��)H]d@d��(HZ|Xd��pT[ ��d���E�PP�
AI�le��2E�l��e��2Hf(��e���E�M�DPn
DAE(,f���E�M�DPu
DAELD�f���F�G�B �B(�K0�A8�D��
8A0A(B BBBD(�0j���E�M�DP�
DAE0��j��<F�M�A �D`{
 AABI(��l���E�M�DPs
DAE 
4m��lH D
[,<
�m���E�J0T
DIv
GEll
Xn��B�B�E �D(�K0�K`�
0A(A BBBBh
0G(A BBBJ�
0G(A BBBJ�
t���
t��t���s��,�s��@�s��LT�s��}F�J�A �A(�N`�
(D ABBHz
(L ABBEL� u��F�B�D �G(�DPD
(G ABBIi
(D ABBN`��u��@F�J�A �A(�N`�
(A ABBF�
(D ABBL|
(L ABBKLX�w��F�B�D �G(�DPD
(G ABBIi
(D ABBN`�|x��@F�J�A �A(�N`�
(A ABBF�
(D ABBL|
(L ABBKLXz��F�B�D �G(�DPD
(G ABBIi
(D ABBN0\{��NB�A�A �D@J
 AABJ8�4}���F�L�A �D(�I@h
(A ABBB0��}���F�M�A �F0e
 AABEL~���F�B�B �B(�A0�K8�N��
8A0A(B BBBD(Pt����E�M�D0I
AAGd|؂���F�G�B �B(�D0�A8�N��
8D0A(B BBBJq
8A0A(B BBBE$zRx��������,���
L ��B�B�B �E(�I0�A8�N�
8A0A(B BBBD(pt����E�D�GPW
AAG(����E�D�G`^
AAHX�����=F�G�E �K(�A0�D�1
0D(A BBBJ�
0A(A BBBH zRx�������(�
��
L\H����F�N�B �B(�A0�A8�D��
8A0A(B BBBCH�����uF�N�B �B(�D0�C8�DPJ
8A0A(B BBBIH�����F�N�B �B(�D0�A8�D��
8A0A(B BBBILD�����F�B�D �D(�H`�
(D ABBI�
(D ABBKL����F�B�D �D(�H`�
(D ABBI�
(D ABBKL� ����F�B�D �D(�H`�
(D ABBI�
(D ABBKX4p���LF�B�E �D(�C0�D`�
0D(A BBBL�
0D(A BBBEL�d���	F�E�B �B(�A0�A8�J��
8A0A(B BBBAH�4���3F�B�B �B(�A0�A8�D�u
8A0A(B BBBGL,(����F�E�B �B(�A0�A8�J�
8A0A(B BBBAL|ذ���F�B�B �B(�A0�A8�D��
8A0A(B BBBF�x��$H [(����GE�M�D0)
AAAGNU��(@(�*!���*�(�� 
x�p*!x*!���o`8�

�,!�X`�	���o���o���o�oB���o�*!P`p�������� 0@P`p�������� 0@P`p��������    0 @ P ` p � � � � � � � � !! !0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"@�@�?GA$3a1 ��GA$3p1113�'w�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�(w�GA+GLIBCXX_ASSERTIONSbigdecimal.so-2.5.9-114.module_el8.10.0+3991+5e651d4e.x86_64.debugs@��7zXZ�ִF!t/����]?�E�h=��ڊ�2N���(^ ��SĎ0�F����N>�J�rѹ�pL�!�O}�}OMJ��fk�>u1��
��g;���+a/�+���8 �!�B�7�זD2�g��7��L�=�)crG�_=�����*�G��G�BA����ڍe��_�^�X�3;h�M�����Ւ�ۆad��*���*ʆ���{��%��f6y&�h`#�ɑ?G��n��g�J�5�豧�
�N:�fj���{$\��D��j�U�;�v(��?��K,CePЌ���V�s���5���ޛ��L!<5F��d���^N�	�.ԲS,��U'��(�懄���{��+d��KF���cM��r�ALj*���G>�/\~�az�$*�*/@cM�5\�5N�Yf�
y���R�vU���FA_��:.ǩ�4₥��K��L�#�k{��MY��ԋ��-�@��C��v� �U��'�P�bsc�呞@3�g *!~kI�`Q�(��Q׸�>'��q��!� cG�@��~
�����}��s�B�΍M�di�L4�_W��€b�ܥ5E����]|���z�Oo}��l?M�70�N�W�_�/Sj\Z�-3�vf�_Ԗ6C�/�)�ػ��W6�L#CI�������j�Z\F�r�n�I(�l0^.��;ÓJ��5p�#�f��06J��5$frX�_�y�K���Ѝf�X};N�7�.`��.��;���ݫ+��X�w&_�Z����;6P���?�+�6\��%��m<ar�����|=J�<I[�=kn�W�^���nIB�LGJ���2�B�
������1���k+���WcI��oQ��LJ��������N��]��TV��bv<������Kh���	Jm���ȧC���d0m��s	���v�����q�,3-�H�Do{y9ղ��g��Y+gd+2L
������f�M����T��!��4�����_�;Ӹyr��v���29�*sk�I?��6R�3H��J��m��-P�JZ"G��@.l)��Ҭl��d��fJ�7�y$(�G6p�
�!�GH��2���e+m=����0g���7p������ms��e����Gy͖��
v���'N�T�׋���Ƚ��.��C6,�E�f�2��6��A�)H���+��&v8O�ߔ�%x��Y�Ŕ?�w�p�:�FO��߰�D��4k�)�ba�X�3�FP��������A	�v��H�����^���墾.���5��x���oP*='�u�x�D
{x.��I�z�S���#�ĺ.1ā�g �P�z��@kCƪE1�����6a�癒��(J�0fb2�h�Š��O�↭���V����� 7�ÚE�
u���?�)��Y����wG�o��Xm�4�ά�ޠ��	'
"Øf��q�
�U�T���"Et=V-�^���NU~d͌�fɹЕ��� wr7Q���Sr�t�7��<�aƉ����d�2�a�l�|�4%P�I�PjgT�����p*����ּ[c�����~�E����
�oP��"�-�D&ΝX��N���Dx5Dq��_|�k!��N�L���4]�]c	�N�+������J"��/�9��:�5��,(�^B$u=��2��r9�sdk���w|�W�P�7{��$R(��NH��O�Z֧�����}��;�S҅��vL��Sxmb��Wڙ.�X�gJ���܏ X��6w����z��w4�k�)���kz��W�W�qr�gG(*/M
�b�>����\eL㏏rQUq�'���@����~f����6j��F "o���^�t����!'�Ԣ�K�|`�s������XF��4f�8t��a�e�c5��v(�Y�K^4A6u�|,�ba|S�S0�R�3�x�m8��4M�{�v_��4�T9�#����d��o�o��B���ISr&���#J�k�����?��Ej��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``D(���	088
8���oBB�E���oPT``�^BXX�h  c@@@n�"�"0w�'�'��}x�x�
�������  ������� �p*!p*�x*!x*��*!�*h ��*!�*���,!�,(�0!0�0!08�P1a0H
`2H�2�:(PK/%�Z���}`�`�ruby/psych-3.0.2/psych.sonuȯ��ELF>�,@`z@8	@ee �i�i �i 8� �j�j �j 888$$�d�d�d  S�td�d�d�d  P�td�[�[�[��Q�tdR�td�i�i �i 8PGNU8b��3{�$~��`5X$�6B_� B��L0H	�_gjx�
BE��"a��j������
��|�S��E6
Z�qXH���8�
��\F��GU�� ��X�.A���F,�W\}�O@~fq��P!g ���1��P��d�u2��5��I�9��&K�)=���[n, ����F"�fc�%�f�@=%�p ��W��`S-��q �Xq �q ��-N�Xt�xq p y`q �hq �pq __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeyaml_get_versionrb_ary_new_from_values__stack_chk_failInit_psychrb_define_modulemPsychrb_define_singleton_methodInit_psych_parserInit_psych_emitterInit_psych_to_rubyInit_psych_yaml_treerb_check_typeddatayaml_emitter_deleteruby_xfreeyaml_emitter_set_canonicalrb_data_typed_object_zallocyaml_emitter_initializeyaml_emitter_set_unicodeyaml_emitter_set_indentyaml_emitter_emitrb_eRuntimeErrorrb_raiseyaml_alias_event_initializerb_check_typerb_utf8_encodingrb_str_export_to_encrb_string_value_cstryaml_mapping_end_event_initializeyaml_sequence_end_event_initializeyaml_document_end_event_initializeyaml_stream_end_event_initializerb_fix2intrb_num2intyaml_emitter_set_widthyaml_stream_start_event_initializerb_attr_getrb_enc_str_newrb_funcallvyaml_sequence_start_event_initializeyaml_mapping_start_event_initializerb_string_value_ptryaml_scalar_event_initializeyaml_document_start_event_initializerb_ary_entryruby_xcallocrb_string_valuerb_ivar_setyaml_emitter_set_outputrb_error_arityrb_cObjectrb_define_class_undercPsychEmitterrb_define_alloc_funcrb_define_methodrb_intern2cPsychParserrb_const_get_atrb_class_new_instanceyaml_parser_deleterb_funcallv_publicmemcpyrb_utf8_encindexrb_default_internal_encodingrb_iv_getyaml_parser_initializerb_respond_torb_ascii8bit_encindexrb_usascii_encindexrb_enc_find_indexyaml_parser_set_encodingyaml_parser_set_inputrb_cIOrb_obj_is_kind_ofyaml_parser_parserb_protectrb_str_new_cstrrb_enc_associate_indexyaml_event_deleterb_jump_tagrb_str_newrb_ary_newrb_ary_new_from_argsrb_ary_pushrb_enc_get_indexyaml_parser_set_input_stringrb_to_encoding_indexrb_str_new_staticrb_usascii_str_new_cstrePsychSyntaxErrorrb_exc_raiserb_define_constrb_requirerb_const_getrb_path_to_classrb_obj_allocrb_iv_setrb_define_module_undercPsychVisitorsToRubyrb_define_private_methodrb_interncPsychVisitorsYamlTreelibruby.so.2.5libyaml-0.so.2libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4�ui	��� ii
+�i 0-�i �,�i �i �i kZ�i �.@j "[Pj @A�o 
�o 
�o j�o (�o h�o c�o d�o k�o 9�o K�o P�o l�o U�l �l �l �l �l �l �l �l �l 	�l �l �l m m m m  m _(m 0m 8m @m Hm Pm Xm `m hm pm gxm a�m �m �m �m �m  �m !�m "�m #�m b�m $�m %�m &�m '�m )�m *�m +n ,n -n .n / n 0(n 10n 28n 3@n 4Hn 5Pn 6Xn 7`n 8hn :pn ;xn <�n =�n >�n ?�n @�n A�n B�n C�n D�n E�n F�n G�n H�n I�n J�n L�n Mo No Oo Qo R o S(o T0o U8o V@o WHo XPo YXo Z`o [ho \po ]xo ^��H��H��N H��t��H����5�K �%�K ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1�������%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%}E D���%uE D���%mE D���%eE D���%]E D���%UE D���%ME D���%EE D���%=E D���%5E D���%-E D���%%E D���%E D���%E D���%
E D���%E D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%}D D���%uD D���%mD D���%eD D���%]D D���%UD D���%MD D���%ED D���%=D D���%5D D���%-D D���%%D D���%D D���%D D���%
D D���%D D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%}C D���%uC D���%mC D���%eC D���%]C D���%UC D���%MC D���%EC D���%=C D���%5C D���%-C D���%%C D���%C D���%C D���%
C D���%C D���%�B DH�=yC H�rC H9�tH��B H��t	�����H�=IC H�5BC H)�H��H��H��?H�H�tH��B H��t��fD�����=C u+UH�=�B H��tH�=�< �����d�����B ]������w������H��8dH�%(H�D$(1�H�T$H�t$H�|$���HcD$H�t$�H�DH�D$HcD$H�DH�D$HcD$H�DH�D$ ����H�L$(dH3%(uH��8��~���ff.���H��H�=u+���H��A 1�H�5f+H��H�H�?����z����������[���H���B���f���H��H�5�; ���Hc��H��H�D�ff.���H��H�5�; �|���Hc��H��H�D�ff.���H��H�5Q; �L����x|H�H��H�Ѓ��f.���SH���C���H��[����f.���SH��H�5; ���1�H��H��@���*���H��[�D��UH��: ��SH�����H�X H��H�����H�߾�i���H�߾�l���H��H��[]�f�SH�������t[�H�b@ H�SH�5�)H�81����D��ATUSH��H�ĀH�t$H�5E: dH�%(H�D$x1��0���H�|$I��H��u:1�H�l$H������H��L���x���H��H�T$xdH3%(uCH��[]A\�@��N����)���H�|$H���,���H�D$H��t�H�|$���H����
���ff.�f���ATH�5�9 USH��H��pdH�%(H�D$h1�H���r���H��I�����H��L������H�T$hdH3%(uH��pH��[]A\����ff.���ATH�5#9 USH��H��pdH�%(H�D$h1�H������H��I������H��L���\���H�T$hdH3%(uH��pH��[]A\��+���ff.���ATUH��H�5�8 SH��H��pdH�%(H�D$h1����1�H��H��@��I��H������H��L�����H�T$hdH3%(uH��pH��[]A\����ff.�@��ATH�538 USH��H��pdH�%(H�D$h1�H������H��I���g���H��L���l���H�T$hdH3%(uH��pH��[]A\��;���ff.���USH��H�5�7 H�����H��H���t�'�����H���m���H��H��[]�����������USH��H�5p7 H���g���H��H���t������H���=���H��H��[]��;����������ATUH��SH��H�57 H��pdH�%(H�D$h1�����H�߾I���b���H�߃�t:�e�����H��H������H��L���=���H��H�T$hdH3%(uH��p[]A\Ð���������f���ATI��UH��SH��H�5�< dH�%(H�D$1�����H�����L��H��H����H��H��H�5�< H�$���H�Ǩt"���H�\$dH3%(uH��[]A\�@�����l�ff.����AWAVAUATI��UH��SL��H��H�t$H�$dH�%(H�D$x1�����H�|$I��H��t�����H�|$L�����H�D$H�<$H��t���H�<$L������H�$H��H�5l5 �g�H�߃�I����������E1�M��A��E1�H�<$tH���e�I��1�H�|$t
H�|$�N�H��L�d$L��A��D��L����L��L���j���H��H�T$xdH3%(u#H�Ĉ[]A\A]A^A_�D�����s�����ff.�@��AWAVAUATI��UH��SL��H��H�t$H�5�4 H�$dH�%(H�D$x1��m�I����H�|$I��H��t���H�|$L����H�D$H�<$H��t���H�<$L���{�H�$H�߃��������E1�M��A��E1�H�<$tH����I��1�H�|$t
H�|$��H��L�d$L��A��D��L����L��L������H��H�T$xdH3%(u&H�Ĉ[]A\A]A^A_���{���p������ff.�@��AWAVM��AUM��ATUH��SH��H�T$ H��$�H�L$H�t$(H�5$3 dH�%(H��$�1���H�|$(�I���j��E�H�|$(H��I���E�H�|$ H�D$(H��t��;�H�|$ L����H�D$ H�|$H��t���H�|$L����H�D$H�߃���������H�D$(M��A��M��L�A��E��E��A�� ��I��D�����D$H�|$(��1�H�|$H��tH�|$H�D$�P�H�L$H��1�H�|$ t!H�|$ H�L$H�T$�*�H�L$H�T$H��L�|$0SE��AVD�D$L���E�XL��ZL���8���H��H��$�dH3%(u.H�Ĩ[]A\A]A^A_Ë@�D$�N���@�����������ff.�@��AWAVAUATI��USH��H���H�|$0H�t$H�5D1 H�L$8dH�%(H��$�1��'�H��H�D$(��H��� ��H����H����I������H�D$ 1�L�|$PH�D$E1�H�|$8A��H��� �>H�D$H�@H��H�ٸH�\$ H�t$HL��HN�H����H�|$(L����H��tH���'�H��$�dH3%(H�D$0�tH���[]A\A]A^A_�f�H�D$H�@H���5���H�\$1�H�����H�߾H�����H���H�����{�H�߃��D$H�{�f�D$LI��������� ��L��I���0�I�$�� �cI�D$H�D$L�|$�E1�L�����H�D$ H��M���kI�D$H�l$PM��H�D$H�D$@H�$�H����L9��o���H�D$N�4��L����I��� ����I�NI�FH�L$@H�@H�<$H��I��H�D$P��H����H�|$@L���G�H�|$PL��H�D$@�5�H�<$H�D$P��H��H�C����H�C�L;|$��I�$�� �?���M9|$�����I�D$ �?���f.�H�������@�k����fD�[��[���fDH����H�D$����I�~~(I�F H�H�L$@�
���I���<���H�\$ L�|$P�-���H�|$ ��H��3 H�5~H�81��7��B�f���AWAVAUI��H�5�- ATU��H��SH��H����I�čE�����M�u����I�mH�5�3 1�1�H�����H�5�3 1�1�H��I����H�5�3 1�1�H��I����L��A��H���������L���)�L��A��u`�+���L�����1�H��L��@���O�H�5x3 L��H���m�H��L��H�5P�����H��H��[]A\A]A^A_�f��K����������s��������c���SH�=��H�53H��H�&2 H��H���H��H�5H����H�
2 H�5s�H��H����H�;�����H�Y���H�5���H�;�H���H�5���H�;1�H���H�5��z�H�;�H�{���H�5��_�H�;�H��H�5��D�H�;�H�U���H�5��)�H�;�H�����H�5���H�;1�H�R�H�5���H�;�H�����H�5}���H�;1�H���H�5s���H�;�H���H�5d��H�;1�H���H�5R��H�;�H���H�5A�u�H�;1�H�Y�H�54�]�H�;�H���H�5%�B�H�;1�H���H�5�*�H�;�H��H�5
��H��0 H��tcH��0 H��0 H����H��0 H��0 H����H��0 H�w0 H��tjH��0 H�\0 H��t/H�x0 [�fD�H�=��O�H�P0 �fD�	H�=1�/�[H�0 H�00 ���H�=��H��/ �y����
H�=���H��/ �F����H�=���H��/ ����f.����SH�5�) H�� dH�%(H�D$1��K�H�5�/ H��H��tlH�
/ H�8�
�Hc��H��H��H�L	H�$Hc��H�L	H�L$Hc��H�L	H�L$��H�T$dH3%(u+H�� [�D�H�=]��H��H�=/ �t�����ff.���SH����H��[�:�f.���H�5�/ 1�1���ff.����H�5�/ 1�1���ff.����H�5E/ 1�1��l�ff.����H�55/ 1�1��L�ff.����H��H�5)/ �dH�%(H�D$1�H�GH�?H��H�$�	�H�T$dH3%(uH�����ff.�@��H��H�5�. �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H��H�5�. �dH�%(H�D$1�H�GH�?H��H�$�I�H�T$dH3%(uH����O�ff.�@��H�OH�5�- H�?����@��H�OH�5�- H�?���@��H�OH�5�- H�?���@��H�OH�5�- H�?��t�@��H�OH�5Y- H�?��T�@��UHc�H��SH�TH��H��(H�5�- dH�%(H�D$1�H�L$H�T$��=�H�H�D$H��u#H�t$dH34%(�uLH��([]��H�|$�~�H�L$H��� u!H����H�H��H���,��f.�H�Q�����D��AWAVAUATI��U��SH��H��xH�T$HdH�%(H��$h1��D$|����D$ ��H��H�5�H�D$0�!�H�ÍE����EI�<$H��$����%I�D$H�D$hH�|$HH�5G% ���I��H��H�D$���L�����H��$�1ɉL$$@��u"H�����tH���H��������D��D$$H�5�+ �������	H�5�* L��$�H����1�1�L����H���|
�����f�9��
9l$ �u
H�=��(��9�tH�=���1�9�@�ƍ4vL�t$L��$�L����H��$�H�5����L����H��) H��$�H�0�u�H������DD$$�D$$H��$L��$�H�D$H��$0L�l$|H�D$L�5�H�|$L��������Hc�$�Hc�$�H�=�H��$Hc�$�Hc�$�H�t6H�TH��$H�t$H�L	H�DH��$L��H��$H��$ �{���$�
�z��$�Ic�L�>��@H�59* �,�����	H�5%* H��$�1�1����H�D$h���f�H��$�A�H��tI���T$$I�ą�t�uH������,	D�t$ L����H�D$0H��tL��H����I��H��$��H��tN��H�ŋD$$��t@��uH���������t$ H���,�H�D$0H��tH��H���G�H�Ń�$�Hc�$�H��$0H�=��H�L��$8H�t$H��H�TH��$@��H��$PL��H��$H�DL��H��H�=[������L������|$|���������f.�H��$�A�H��tI���t$$I�ą�t�uH�������D�t$ L���<�H�D$0H��tL��H���W�I��H��$��H��tF�M��L$$H�Ņ�t�uH�������f��t$ H�����H�D$0H��tH��H����H�Ń�$�Hc�$�H��$0H�=����H�L��$8H�t$H��H�TH��$@��H��$PL��H��$H����f�H��$�H��$����D�L$$H��E��t.�u*H�����t"H��ƒ�����H���f��t$ H����H�D$0H��tH��H���/�H��H��$��H��tU�%�D�D$$H��E��t�uH��������t$ H��H�L$(��H�t$0H�L$(H��tH������H��H��$�A�H��tbH�L$(����|$$H�L$(I�ą�t�uH������s��t$ L��H�L$(�?�H�t$0H�L$(H��tL���X��H�L$(I�ă�$�Hc�$�H��$0H�=1���H�H��$8H��H�t6H��$@����$�H��$`H�H��$PH�t$L��H��L��$H��H��$X���DH��$��H��tJ����D�T$$H��E��t�uH������@�t$ H���\��H�D$0H��tH��H���w��H��H��$0L��H�t$H�=����H��$8�x���Hc�$�H��$0L��H�=����H�t$H�DH��$8�G�������H�D$(H��$�H����HcPHc0�1�H�TH�t6�p��H�D$@H��$�H���"H�D$@���$�H��$0H�t$H�=���H��$8H�D$(H��$@�HE�L��H��$H���fDL��H��H�=���~��L���f���|$|�������H��$hdH3%(H�D$H�H��x[]A\A]A^A_�@���$��H��$0HE�H�t$L��H�=��H��$8����fDL��H��H�=+����fDL��H��H�=������fDH��$�H9�����H�\$PL�d$0L�l$`D�l$$L�|$XI��H�}�H��tY�u��H��E��t-�u)H�����t!H��ƒ�������H�f.��t$ H������M��tH��L�����H��H�}�H��t\���H��E��t&�u"H�����tH��������i��H��t$ H��H�T$8���M��H�T$8tH��L�����H��H�޿1�H���$��H�|$(H���G��I9�����H�\$PL�|$XL�l$`���f.�����H�D$@�v����H��$����H��$�H�=�H��$�����H�=������H��$�A�����9D$ �9��A9�������H��$�H������H��$�H��$�H��$�H��$��H�|$H��$��R��H��$�H��� uRH��H�p��H�|$����g�����H����������@�H����������@H�PH�p�H�����������9����������H��ƒ����T��I�$�x���H��ƒ����g��H����H��ƒ����{��I�$�G���H�E�ƒ�������H�E�9���H��ƒ����(��I�$���H��ƒ����;��H�E����H��ƒ�������H�E�*�����H�E����	H�=y	���H�D$h���H�=h	����H��H�( �;�H��$���=���H��$���+���H��$�������H���V�������f��H���!������@�H���i����.���@�H����������@�H�����������@�H�������q���@�H����������H�\$H�L$hH�CHH�{H�PH�CPH��$0Hc�H�D$H��H�TH�H��$8H�DH��$@HcCH�DH��$H�H��t����H��$PH�D$H�x8�H��t���H��$XH�� H��t?H��H� H��$0�H�8�G��L�t$H��L������L������H������H�=����H�G 맺����|��������SH� �����H�x H�����H��[�f���UH�5MSH��H�-8 H�	 H�}H����H�& H�5����H��H����H�;�H�5
�x��H�;�H�5��d��H�;�H�5��P��H�;�H�5��<��H�=����H�5� H����H�}���H�� H�;�����H�5�H�H�'��"��H�;1�H�&�H�5��
��H�{ H���
H�� H�\ H����H�� H�= H����H�� H� H���eH�� H�� H���.H�g H�� H����H�H H�� H����H�) H�� H����H�
 H�� H���RH�� H�d H���H�� H�E H����H�� H�& H����H�� H� H��tzH�s H�� H��t7H�X H��[]�f��H�=@�o��H��H�% �P����H�=G�O��H�� H�	 H��[]�f.��H�=���H�p �i����
H�=����H�X �6����H�=�����H�@ ����H�=����H�( �����H�=^���H� ����H�={���H�� �Z����H�=�_��H�� �#����H�=��?��H�� ����
H�=����H�� ����H�=����H�� �~����H�=�����H�� �G����H�=����H�h �����H�=����H�P ������H���T��@��UH��H��SH���k��H��H�5�H��H���F��H��H��[]�ff.����ATH�=gUS�|��H�-� H�5_H��H��H�U���H��H�5RI���m��H�UH�5HH��H������H��H�5;H������H�N �H�5'H��H�H�5����P��[L��]�H����H�5
A\�1�����SH��H��H�|$H�T$�e��H���]��H��H�����H��[�ff.����SH�=x���H�5�H�����H�5H��H�� H��H����H��H�5�H������H�� �H�5xH��H�H�R���[�|����H��H���Psychlibyaml_version%stag tuple must be of length 2HandlerEmitterinitializestart_streamend_streamstart_documentend_documentscalarstart_sequenceend_sequencestart_mappingend_mappingaliascanonicalcanonical=indentationindentation=line_widthline_width=iowritePsych/emitterMark@handler<unknown>external_encodingUTF-16LEUTF-16BEnewParserANYUTF8UTF16LEUTF16BEpsych/syntax_errorSyntaxErrorparsemarkreadpathemptyevent_locationPsych/parserP�����@�p�`�(��8�mesgClassLoaderVisitorsVisitorToRubybuild_exceptionpath2classYAMLTreeprivate_iv_get;�18������������h��(���@���X���p���H�������������� ���Th�������X���������H���|(���x�����L����H����H��p��������������(�����8H�Th�h��|������������x���4����P�������(�����������	zRx�$����FJw�?:*3$"D(���\����H@t
Ax��NHA�8��%HW�P��%HW�h��&HW����E�L����+E�e$���NE�M�D rDA<���+A�M
A0X����F�A�A �G�`
 AABE0�`��eF�H�A �G�B
 DABA0����eF�H�A �G�B
 DABA0����qF�A�K �G�K
 DABA0($��eF�H�A �G�B
 DABA(\`��IE�A�N c
DAD(����IE�A�N c
DAD0�����F�A�D �N�a
 AABB0����F�D�D �D0m
 AABELp��AF�B�B �B(�D0�D8�J�
8A0A(B BBBFHlp��AF�B�B �B(�D0�D8�J��
8A0A(B BBBI\�t���F�B�E �E(�A0�D8�G�[�E�N�D�e
8A0A(B BBBAL���F�B�B �B(�D0�A8�J�
8A0A(B BBBJHhD��=F�B�B �L(�A0�F8�G@�
8D0A(B BBBJ$�8��%E�t
Gr
V �@���E�K0�
AF���E�L���0���D��X��l ��QH C
A�d��QH C
A����QH C
A�������������($(��E�G�L@V
AAHLP���F�B�B �B(�D0�C8�J��
8A0A(B BBBE�<�'E�a<�P�-E�H�D #
AAJC
AAK�@�$<�4E�G�D ^DA(8T�F�H�A ��DUd��4E�G fA���tE�jGNU�0-�,�i kZ�."[@A���� 
DY�i �i ���o`
�
5�l �0P�	���o���o���o�o6���o�j !! !0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&GA$3a1� QYGA$3p1113@-DYGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113 .�XGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@-�XGA+GLIBCXX_ASSERTIONSpsych.so-2.5.9-114.module_el8.10.0+3991+5e651d4e.x86_64.debug3�l�7zXZ�ִF!t/����]?�E�h=��ڊ�2N��� ���W�R�|�$*s��6�4 ��,VJ�v,N'4���v.�;��
Nץnf)I�L3�;Aۥ�-��0\sjպ�a�)0g���2;���s�L0,��w8��!.��[f��-f��!?��^$�f�;T�dϙ�2�2P=�T�3�������a�r������p+\[�'IY�&�\�w�0�����h�3�:�F������O��.�`���Y���U/���3南�Y��}"�y��p+^v���k|C�I�]��3:�#�B�HlȏOӾ��q�#~����2���*9�kOKl��ɫ���˧�.URL��OA�(�f���pj�3���+"J$�]���9Q���O(Q��dqY�`#A�0!��4��/TJB�^�7�g��/��!W�hn1����4�����)4��K�?$MgFa0��4���d5��3n*-�g�^��lڲ[�!�̱ڸ����Sx��S��I�ϝ.Qr`�Y��wAd.�2���%�Xx.��8�x�6�:�ޙ�3�&�A.P�gZZ��ڻ욗����+dhU��<��i3��6amU�����\�
{����h�fl�K�ꭍQ�p��y�k���OS��;�XX�6��e��CrG��OIT�
;.�2�h-&~�#:���K&�/3է�����4J��Ez63��Q�V��z߮ᠷ�������ٟB�ؼ��V�����F~�������p��=�(�B���v���,��~����2/�����7��zT�o�	M���S���A��IY�zu��t�=R��t���%��i��I�)y�;��
W�Ea{�텈}.���na��>��)ٜ-��̛����
���p��cO?8��v�,ouC���H.��X��ؽddطWN�5�-~0qÄ�d ��u��g���څj�{*�<�M��Щ|��sX��H���}ϚܜZ&�l��@�<��CO{<n5�^���\)�8|��U6ھ 2Wc"��NbKj]^�)՗\s��X'�N��b��vv��	!��R�J��RZ����i��~�Fg�s�z�����`f�����1<�ɋ�R<�u�z�l�H�5��"t�E
��_ۡ/<j����!Ԏ2� iU�w����	�'S����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``d(��8
0

58���o66�E���o@TPP�^B00�h� � c� � �n�&�&�w�,�,�,}DYDY
�TYTYd��[�[��P]P]���d�d ��i �i��i �i��i �i� ��j �j��l �l`�p �o���q`�otDHt�8y"PK7v�Z��W�����ruby/psych-4.0.4/psych.sonuȯ��ELF>�,@�z@8	@�b�b �i�i �i XX hjhj hj   888$$�b�b�b  S�td�b�b�b  P�tdpYpYpY��Q�tdR�td�i�i �i XpGNU϶������=�)���*c�`� B��HH	�`hkx�
BE��"a��j������
��|�S��E6
Z�qXH���8������_Ur �#p]�X��c?�t
}���S-,��,G�"� O.�I�"��/�tJY�"�"a����;�i^��n������, �C7�F"�y{H =�f��>rp ��U���S���p ��p ,�p �`.X��VZ��p  p ��p *�p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeyaml_get_versionrb_ary_new_from_values__stack_chk_failInit_psychrb_ext_ractor_saferb_define_modulemPsychInit_psych_parserInit_psych_emitterInit_psych_to_rubyInit_psych_yaml_treerb_define_singleton_methodrb_check_typeddatayaml_emitter_deleteruby_xfreeyaml_emitter_set_canonicalrb_data_typed_object_zallocyaml_emitter_initializeyaml_emitter_set_unicodeyaml_emitter_set_indentyaml_emitter_emitrb_eRuntimeErrorrb_raiseyaml_mapping_end_event_initializeyaml_sequence_end_event_initializeyaml_document_end_event_initializeyaml_stream_end_event_initializerb_fix2intrb_num2intyaml_emitter_set_widthyaml_stream_start_event_initializerb_unexpected_typerb_attr_getrb_utf8_encodingrb_enc_str_newrb_funcallvyaml_alias_event_initializerb_str_export_to_encrb_string_value_cstryaml_mapping_start_event_initializeyaml_sequence_start_event_initializerb_string_value_ptryaml_scalar_event_initializeyaml_document_start_event_initializerb_ary_entryruby_xcallocrb_string_valuerb_ivar_setyaml_emitter_set_outputrb_error_arityrb_cObjectrb_define_class_undercPsychEmitterrb_define_alloc_funcrb_internrb_define_methodyaml_parser_deleterb_funcallv_publicrb_ull2inummemcpyyaml_parser_initializerb_intern2cPsychParserrb_const_get_atrb_class_new_instancerb_utf8_encindexrb_default_internal_encodingrb_iv_getrb_respond_torb_enc_find_indexrb_enc_get_indexyaml_parser_set_encodingyaml_parser_set_input_stringyaml_parser_parserb_protectrb_ascii8bit_encindexrb_usascii_encindexyaml_parser_set_inputrb_str_new_cstrrb_enc_associate_indexyaml_event_deleterb_jump_tagrb_str_newrb_ary_newrb_ary_new_from_argsrb_ary_pushrb_to_encoding_indexrb_str_new_staticrb_debug_rstring_null_ptrrb_const_getrb_usascii_str_new_cstrrb_exc_raiserb_define_constrb_requirerb_path_to_classrb_obj_allocrb_iv_setrb_define_module_undercPsychVisitorsToRubyrb_define_private_methodcPsychVisitorsYamlTreelibruby.so.3.1libyaml-0.so.2libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby31/lib64ui	1���=ii
H�i �-�i �-�i �i �i #X�i P/ j �X0j `A�o �o �o k�o *�o i�o d�o e�o l�o L�o Q�o V�l �l �l �l �l �l �l �l �l 	�l 
�l �l 
m m m m  m (m `0m 8m @m Hm Pm Xm `m hm pm xm h�m �m b�m �m �m  �m !�m "�m #�m $�m %�m c�m &�m '�m (�m )�m +n ,n -n .n / n 0(n 10n 28n 3@n 4Hn 5Pn 6Xn 7`n 8hn 9pn :xn ;�n <�n =�n >�n ?�n @�n A�n B�n C�n D�n E�n F�n G�n H�n I�n J�n Ko Mo No Oo P o R(o S0o T8o U@o VHo WPo XXo Y`o Zho [po \xo ]�o ^�o _��H��H��N H��t��H����5jK �%kK ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]���������%�E D���%}E D���%uE D���%mE D���%eE D���%]E D���%UE D���%ME D���%EE D���%=E D���%5E D���%-E D���%%E D���%E D���%E D���%
E D���%E D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%}D D���%uD D���%mD D���%eD D���%]D D���%UD D���%MD D���%ED D���%=D D���%5D D���%-D D���%%D D���%D D���%D D���%
D D���%D D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%}C D���%uC D���%mC D���%eC D���%]C D���%UC D���%MC D���%EC D���%=C D���%5C D���%-C D���%%C D���%C D���%C D���%
C D���%C D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���H���?���f.�DH�=�B H��B H9�tH�fB H��t	�����H�=�B H�5�B H)�H��H��H��?H�H�tH�mB H��t��fD�����=uB u+UH�=JB H��tH�=�; ����d����MB ]������w������H��8dH�%(H�D$(1�H�T$H�t$H�|$���HcD$H�t$�H�DH�D$HcD$H�DH�D$HcD$H�DH�D$ ���H�L$(dH3%(uH��8��N���ff.���H�������H�=�(�b���H�;A 1�H�5�(H��H�H�5����@��������v����1���H���������H��H�5�: �|���Hc��H��H�D�ff.���H��H�5�: �L���Hc��H��H�D�ff.���H��H�5�: �����x|H�H��H�Ѓ��f.���SH������H��[���f.���SH��H�5A: ����1�H��H��@�����H��[�D��UH�: ��SH�����H�X H��H���f���H�߾�9���H�߾����H��H��[]�f�SH�������t[�H��? H�SH�5'H�81��u���D��ATH�5�9 USH��H��pdH�%(H�D$h1�H������H��I���7���H��L�����H�T$hdH3%(uH��pH��[]A\�����ff.���ATH�5#9 USH��H��pdH�%(H�D$h1�H�����H��I���W���H��L������H�T$hdH3%(uH��pH��[]A\����ff.���ATUH��H�5�8 SH��H��pdH�%(H�D$h1��"���1�H��H��@��I��H�����H��L�����H�T$hdH3%(uH��pH��[]A\��/���ff.�@��ATH�538 USH��H��pdH�%(H�D$h1�H�����H��I�����H��L���,���H�T$hdH3%(uH��pH��[]A\����ff.���USH��H�5�7 H���G���H��H���t�����H������H��H��[]�������f���USH��H�5p7 H�����H��H���t�g�����H������H��H��[]������f���ATUH��SH��H�57 H��pdH�%(H�D$h1�������)���H��I��H�����H�߉��A���H��L������H��H�T$hdH3%(u	H��p[]A\����D��ATI��UH��SH��H�5�< dH�%(H�D$1����H���Z���L��H��H����H��H��H�5�< H�$�!���H�Ǩt"�U���H�\$dH3%(uH��[]A\�@������ff.����ATUSH��H�ĀH�t$H�5�5 dH�%(H�D$x1��p���H�|$I��H��u:1�H�l$H����H��L�����H��H�T$xdH3%(ulH��[]A\�@@��u	H�����u�����H���H��u��G���H�|$H���:���H�D$H���y���H�|$���H���i�����@��AWAVAUI��ATUH��SL��H��H�t$H�55 H�$dH�%(H�D$x1��}�I�����H�|$I��H����H�<$H����H�߃����4�E1�M���A��E1�H�<$tH���F�I��1�H�|$t
H�|$�/�H��L�l$L��A��D��L���&���L��L�����H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_�f�@��uIH�����t@H���H��u4L�����H�߃�H�$�D��������?���@��u	H�����u��W����H���H��u�L����H�D$������ff.�f���AWAVAUATI��UH��SL��H��H�t$H�$dH�%(H�D$x1��D�H�|$I��H����H�<$H����H��H�5:3 ���H�߃�I������E1�M���A��E1�H�<$tH����I��1�H�|$t
H�|$��H��L�d$L��A��D��L���3�L��L�����H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_��@��uIH�����t@H���H��u4L���U�H�$�(���@�s����=���fD@��u	H�����u����H���H��u�L����H�D$������D��AWAVM��AUM��ATUH��SH��H�t$(H�5�1 H��$�H�T$ H�L$dH�%(H��$�1��L�H�|$(@��t��'��H�����t�I��H���H��u��c�H�|$(H��I���S�H�|$ H�D$(H��t(@��u�H�����t�H���H��u�L��� �H�D$ H�|$H��t4@���u���H������h���H���H���X���L�����H�D$H�߃�����M����A��1�M����E���D$H�D$(L�A�� ��L�xH�|$(���1�H�|$H��tH�|$H�D$�C�H�L$H��1�H�|$ t!H�|$ H�L$H�T$��H�L$H�T$H��L�l$0SE��AVD�L$L���8�XL��ZL���k���H��H��$�dH3%(u/H�Ĩ[]A\A]A^A_�I��M��A���G����{�����������AWAVAUATUH��H�5�/ SH��H���H�|$H�L$dH�%(H��$�1��<�H�D$@��t�H����@H�����t�H�EH�ƒ�H��u�� ��H����H����H�������E1�E1�L�l$PH�EE1�H�|$A���� ��H����H��H�t$H�L��HN�L��L����H�|$L���)���M��tL���,�H��$�dH3%(H�D$��H���[]A\A]A^A_�fDH�EH���M���1�H�����H��I�����L��A��I��ue��L��A���D$Hte�~�D$LH����������8�H�D$ ��uH�;H����H��t8�H����f�H�E������+�L��A���D$Hu����� �{H����H�<$����1�H�<$I��I���wH�CL�t$0L�t$ L�l$@H�D$(L�d$PH�l$8H��fDH��� t0H����H9�� H�D$(H�<�@��t)����H9k��H�C H�<�@��u�H�����t�H�H�ƃ�H��u��� �����H�wH�GH�t$@H�@L��I��H��H�D$P�V�L��L�d$ �I�H�|$@L�����H�|$PL��H�D$@��L��H�D$P�}�L��I�G��q�I�G�H;,$����L�t$0H�l$8L�l$ �Y����H�~?H�G H�0H�t$@�a���H�CH�$H�����L�t$0H�l$8L�l$P����L�l$P����L�t$0L����H�N2 H�5�H�81��������AWAVAUI��ATUH��H�5, S��H��H��������I��L�e��u;H�5D2 L��L�����L��L��H�5�����H��L��[]A\A]A^A_�D����H�]H�5�1 1�1�H���X�H�5�1 1�1�H��I���B�H�5�1 1�1�H��H���,�L��A��H��u@���L������H���t9�D���L���j�1�H��L��@������0������f��{��ź��������SH�= ���H�5KH��H��0 H��H��s�H��H�54H���a�H�z0 H�5s�H��H���H�;�����H�Y���H�5�m�H�;�H�.�H�5��R�H�;1�H��H�5��:�H�;�H�;���H�5���H�;�H�P�H�5���H�;�H���H�5����H�;�H�:���H�5����H�;1�H���H�5���H�;�H�w�H�5���H�;1�H���H�5���H�;�H�d�H�5|�h�H�;1�H���H�5j�P�H�;�H���H�5Y�5�H�;1�H�Y�H�5L��H�;�H�>�H�5=��H�;1�H���H�52���H�;�H�[�H�5"���H�="��H�=H�/ �p�H�=�H�/ �]�H�=�H��. �J�H�=�H��. �7�[H��. �f.�@��SH�����H��[��f.���H�5
/ 1�1���ff.����H�5�. 1�1����ff.����H�5�. 1�1���ff.����H�5}. 1�1���ff.����H��H�5q. �dH�%(H�D$1�H�GH�?H��H�$�Y�H�T$dH3%(uH����O�ff.�@��H��H�5. �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH������ff.�@��H��H�5�- �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H�OH�51- H�?���@��H�OH�5!- H�?����@��H�OH�5	- H�?����@��H�OH�5- H�?���@��H�OH�5�, H�?���@��ATI��UH��SH��H�� dH�%(H�D$1�H��������?H9�w\H�DH�5�, H�L$�L��H�D$�y�H�H�D$H��u7H�t$dH34%(�u[H�� []A\�f�H���H��fDH�|$��H�L$H��� tH�QH�H��t�H��H���B��H��������f���SH�t% ����H�x H���~�H��[�f���UH�5D% SH��(dH�%(H�D$1��Z�H��H�H+ H��u$H�-%@�H���s�H�$+ H��t�H��H��* H�8��H���H��H��������?H9�wtH�D?H���H�$H��������?H9�wmH�D?H���H�D$H��������?H9�w=H�D?H��H��H�D$��H�L$dH3%(u*H��([]�@���느����f������@��AWI��AVAUATI��US��H��hH�T$HdH�%(H��$X1��D$l���D$$�u�H�5�L��H�D$(������F
I�<$H��H�|$p���I�D$H�D$P���
H�|$HH�5�# ��H��H��H�D$��H����H�5	* H�|$p������H�|$p�E�H�D$pH�=�H�D$x�O�H�=|���A�H�|$xA����9D$$��
9���
A9��
��H�|$xH���w�H�T$xH�D$xH��$�H�T$x�H�|$H�D$p���H�D$pH��� �
H�pH�PH���l
H�|$�`�H��$�L�=eH��������?H�$H�D$lH�D$H��$�H�D$@H�4$H�|$������7
H��$�H9��AL�d?H��$�H9��L�t?H��$�H9���L�l?H��$�H9���H�D?H�T$H�t$H�=i���H��$�L��$�L��$L��$H��$�\���$�
����$�Ic�L�>��DH�5!( �����	H�5
( H�|$p1�1����H�D$P����DH�y' L�d$pH��u(H�q��H����H�L' H��t�1�1�H��L����H���u�y����B�9\$$�U9��MH�=$����9�tH�=���1�9�@�ƍ4vH�\$L�d$pH������H�T$pH�5F���H�������f�H��$�H�����
��t$$H��I����H�t$(H����L��A����H��$�I��H��t$����t$$H��I���{�H�t$(L����I��Hc�$���$�H��$ H�=����H�H��$ H�TH��L��$(H��$@H�T$��L��$0H��$8�\��@H�<$�O��|$l���;����n��fDH�T$H��H�=I����$����f�H��$�H�������t$$H��I����H�t$(H���cL��A����H��$�I��H��t$����t$$H��I���k�H�t$(L�����I��Hc�$���$�H��$ H�=���H�H��$ H�TH��L��$(H��$@H�T$��L��$0H��$8�L������H��$�H��$��[��t$$H��I������H�t$(H���L������H��$�I��H���b�����t$$H��I�����H�t$(L�����H��$�I��H���_����t$$H��I���Y��H�t$(L���|��I��$�Hc�$�H��$ H�=���H�H��$ H��H�L	L��$(����$�L��$0H�H��$@H�T$H��L��$8��H��$PH��$H������@H��$�A�H��t,�����t$$H��I�����H�D$(H��tL��H�����I��H�T$H��$ H�=��H��$ L��$(����K�����$���H��$ HE�H�T$H��$ H�=���H��$(�a������@����I��H��$�H����HcPHc�H�tH�T1����H�D$@L��$�M���lH�D$@��$��H��$ H�=����H��$ H��$(�HE�H�T$L��$0H��$8����[���H�T$H��H�=a����H�<$����|$l���D���H��$XdH3%(H�D$H�YH��h[]A\A]A^A_�f�H�T$H��H�=A��<�������Hc�$�H�T$H��$ H�=�H��$ H�DH��$(������DH�T$H��H�=���������������,���fD���I���������I�������{��I�����A�H��$�A�H�������^���t$$H��I�����H�|$(��������fDA�H��$�A�H���p�������t$$H��I������H�|$(�P����;���fDH��$�A�H��t�����t$$H��I�����H��$�A�H���)�������t$$H��I���^������f�H��$�H�D$0I9��~���H�l$XH�l$(��c���t$$H��I�����H��t~L��H���4��I�|$�I��H��t)�-���t$$H��H�D$8����H�T$8H��H�����H��L���1�I�����L��H�����L9d$0tDI�<$H���o���A�I�|$�H��t�����t$$H��H�D$8�l��H��H�T$8t��H�l$X���fD���H�D$@�t����H��$�H��t�n���t$$A�H��I��������A�A����H��H�p����������H����������H�D$x����H�D$x����@�	H�={���H�D$P��H�D$x��c���H�=�H�T$H�4$����H�T$H�4$�q���H�D$H�HHH�@PH�$H�XH� H�iH��u L�%H�L���R��H�� H��t�H��H�l H�8���I��H�D$PH��$ H��������?H9��H�D-H��$(H��������?H9���H�DH��$0H�D$H�xH��������?H9���H�D?H��$8H�D$H�x�H��t����H��$@H�D$H�x8�H��t���H��$HH� H��u H�]�H���[��H�� H��t�H��$ �H��L���7��L�|$H��L������L������H�������"���J���H���������H�������������B������ff.�f���H�� SH�5�H�H�� H�8���H�� H�5��H��H�����H�;�H�5����H�;�H�5s�z��H�;�H�5d�f��H�;�H�5X�R��H�=T���H�;�����H���H�5L�K��H�;1�H�O�H�5:�3��H�=3����H�=,H� ����H�=H�� ���H�=�H�� ���H�=�H�� ���H�=�H�� ���H�=�H�� �u��H�=�H�o �b��H�=mH�T �O��H�=aH�9 �<��H�=]H� �)��H�=WH� ���H�=RH�� ���H�=SH�� ����[H�� ����H�����@��UH��H��SH�����H��H�5QH��H�����H��H��[]�ff.����ATH�=US����H�-� H�5H��H��H�U�_��H��H�5I������H�UH�5�H��H���7��H��H�5�H���%��H�N �H�5�H��H�H�5������[L��]�H����H�5�A\������SH�=`�/��H�5yH���@��H�5sH��H�� H��H����H��H�5~H�����H�� H�[���H��H���Psychlibyaml_version%stag tuple must be of length 2HandlerEmitterinitializestart_streamend_streamstart_documentend_documentscalarstart_sequenceend_sequencestart_mappingend_mappingaliascanonicalcanonical=indentationindentation=line_widthline_width=iowritePsych/emitterMark@handler<unknown>external_encodingUTF-16LEUTF-16BERSTRING_PTRSyntaxErrornewParserANYUTF8UTF16LEUTF16BEpsych/syntax_errorparsemarkreadpathemptyevent_locationPsych/parser����������t�,������|���mesgClassLoaderVisitorsVisitorToRubybuild_exceptionpath2classYAMLTree;�1�����������h`������P��(���@���X���p���0����������� �� ���T����������� �����|@��� ������0@��|`��0�,p�x�����0��P��p������ P�<��X��l�����0��P��0��`���8P����0����@���������0���	zRx�$����FJw�?:*3$"D����\h���H@t
Ax���XHK� ��%HW�8��%HW�P��&HW�h��E�L�l��+E�e$���NE�M�D rDA<���+A�M
A0X���eF�H�A �G�B
 DABA0����eF�H�A �G�B
 DABA0�4��qF�A�K �G�K
 DABA0����eF�H�A �G�B
 DABA((���GE�A�N c
DAD(T���GE�A�N c
DAD0���{F�A�D �N�X
 AABAzRx�����$��0����F�D�D �D0m
 AABE0����F�A�A �G�`
 AABEHP4���F�B�B �E(�A0�D8�J��
8A0A(B BBBCH�x���F�B�B �B(�D0�D8�J��
8A0A(B BBBH\����F�B�E �E(�A0�D8�G���E�N�D�e
8A0A(B BBBDLH|���F�B�B �B(�A0�K8�J�
8A0A(B BBBGH����8F�B�B �E(�A0�K8�I@A
8D0A(B BBBF����rE�eP�E�L T�4`�Hl�\x�p��QH C
A���QH C
A��QH C
A�P��\��h�t���0(���F�D�D �G@m
 AABJ\8�'E�a(xL�E�H�D@�
AAEL�@��
F�E�B �B(�D0�A8�I�O
8A0A(B BBBJ����L����$(|�4E�G�D ^DA(P��F�H�A ��DU|�ZE�TGNU��-�-�i #XP/�X`A��R!
�V�i �i ���o`��
h�l �0��	���o���o@���o�o`���ohj 0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'GA$3a1!	WGA$3p1113�,�VGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�.�VGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�-�U
GA*FORTIFY�.�VGA+GLIBCXX_ASSERTIONSGA+GLIBCXX_ASSERTIONS�-�Upsych.so-3.1.7-8.el8.x86_64.debug�E�S�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�	�����a[O�s��(;���'5+�!w�NM�d�M��*��{�fd�~Q��t ʇVz�(|ҭ���M���9����5|�&?R�0.L2���Ş%��s�&������3e4�a _xnִDoL)��"�0OK2�'�eD��Y�X�W�d���CA�7�����ST"�+\��nO'1�Ց��29~��k�0�|�W�g���M��7X4���6z���'��p��+��Á@�m�Do��r�S�spf��]n=]S.m��|��D����Fd���xX�lg���K����Q�YmӅ�#�f��(�_�T%�e��}j��L���a�KT�6j�dwnu��UO䥓��*�/r�+*�Wb\G;����pݬ�s�ۇ�k N��G���>��Fյ����!Z�XZ6�^ٟ�z*��3��脙�<e)
b_�v�y$����t	��!�
�?Íf�۠����&�nΑN�"�q�8�Ty��mƃ�^5K7�c���hJq8�ü��J3����rʳ�����ʚ��U;%;"����D�&<��o�W���_VAD��5���ydl���	9����|���T�q�^�T��P��v)�F��T,~�uנ�`o�<�E2$UiG���D��tq,�*77O
�ac=L͞vI�^�����H�-��\��0[����n��J��@�e�1c��~�j8��&��G�	����� ,S��b�0����n�LII�
��z�t�����^|h(��$��w��T��S��*����i��L��I��'�	wKBä
	.�����J^Q���6<�m}D�XW^݈98��#tUR�?=U��,�D���s����Ϸ��4ѷ%�敏�BEr ��t��q۫��*N�omC���Џ�����9P+�Y�^�e�.��ژ!/J?+0[�Q���O'�I�]�C��	��B�0,��RA����Ϫ�F�B��ðͯ�6O��_~��;�
ݯ뭃���\�U.Y=|��5����+�|��p�ǔx1Ϝ�P��[͋d�C��4�K�.�X3vy6�iO� KOO&o)nH���:���2 �ճ9���w��' �]�H�(�e-�Bs�ؚ��Fl�Z\d�	��#HK_�&q�x�f0��%��o�@�sTm+�������	�'�ī���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o```(��8
0��h8���o``�E���o@@@T���^B00�h!!c ! !�n''�w�,�,
*}�V�V
�WWa�pYpY��[[���b�b ��i �i��i �i��i �i� �hj hj ��l �l`�p �o���p`�o|dt(�t��y"PK7v�Z#ruby/psych-4.0.4/gem.build_completenu�[���PK8v�Z(ruby/bigdecimal-3.1.1/gem.build_completenu�[���PK8v�Z�9�@�@�#ruby/bigdecimal-3.1.1/bigdecimal.sonuȯ��ELF>03@�@8	@ЉЉ ��!�!P  șș!ș!888$$������  S�td������  P�td8i8i8iLLQ�tdR�td��!�!GNU5{�p��6~�F���U��X�z�@j�  z�BE��|��X��=��|mt2���؁�9�wxGI�qXu���ũ�����+we�(���w9 ���=�������}?$p�p@U���Fqv�Y7�F�g�!���� �]f���S�����)"��J0"C"�}��1,���fe������Q���, �bNV�B�yF"x��#���@�!�!g$
��!��:�V�!U�!�`i��@�!}�PV^`$�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegOne_ABCED9B4_CE73__00400511F31Druby_xfreeruby_xmallocmemsetrb_obj_classrb_class_namerb_str_duprb_str_catrb_exc_new_strrb_exc_raiserb_inspectrb_thread_currentrb_thread_local_asetstrlenmemmove__sprintf_chkrb_thread_local_arefrb_num2ullrb_ull2inumrb_yieldrb_protectrb_jump_tag__stack_chk_failrb_num2ushortrb_fatalrb_eFloatDomainErrorrb_raiserb_eArgErrormemcpyrb_bugrb_num2intrb_fix2intrb_error_arityrb_cBigDecimalrb_data_typed_object_wraprb_freeze_singleton_classrb_check_typeddataruby_xreallocruby_malloc_size_overflowrb_id2symrb_hash_lookup2rb_check_string_typerb_sym2strstrncasecmprb_debug_rstring_null_ptrrb_sym2idrb_eTypeErrorbigdecimal_parse_special_stringstrncmprb_str_tmp_newrb_str_new_cstrrb_str_resizerb_warnrb_absint_sizerb_big_cmprb_num2ulongrb_num2longrb_big2strrb_float_valueBigDecimal_dtoa__memcpy_chkrb_cstr_to_inumrb_cFloat__memset_chkrb_cSymbolrb_cIntegerrb_cTrueClassrb_cNilClassrb_cFalseClassrb_string_value_cstrrb_typeddata_is_kind_ofrb_eZeroDivErrorrb_num_coerce_binrb_intern2rb_assoc_newrb_rational_numrb_rational_denrb_ll2inumrb_str_new__errno_locationruby_strtodrb_float_newrb_ary_new_caparb_ary_pushrb_funcallvrb_Rationalrb_usascii_str_newrb_memhashrb_category_warnrb_num_coerce_cmprb_num_coerce_reloprb_check_convert_typerb_complex_imagrb_complex_realrb_keyword_given_prb_opts_exception_prb_to_intrb_hash_duprb_big_signrb_num2llrb_thread_check_intsrb_eMathDomainErrorruby_snprintfroundrb_dbl2bigrb_big_packrb_mBigMathsqrtInit_bigdecimalrb_ext_ractor_saferb_cNumericrb_define_classrb_undef_alloc_funcrb_undef_methodrb_str_new_staticrb_define_constrb_gc_register_mark_objectrb_define_modulerb_define_methodrb_define_global_functionrb_define_singleton_methodBigDecimal_strtodstrchrldexpBigDecimal_hdtoalibruby.so.3.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.3.4GLIBC_2.4/opt/alt/ruby31/lib64� ui	������ti	�ii
�ui	��! 5��!�4�!�! �!�\8�!�\P�!�\h�!6\��!�Z��!�6��!058�!�!H�!	P�!X�!`�!h�!p�!x�!{��!&��!���!<��!>��!A��!J��!W��!g��!jȟ!kП!o؟!s�!x�!��!�!�!�!�! �!(�!0�!
8�!@�!H�!
P�!X�!`�!h�!p�!x�!��!��!��!��!��!��!��!��!��! Ȝ!!М!"؜!#�!$�!%�!'��!(�!)�!*�!+�!, �!-(�!.0�!/8�!0@�!1H�!2P�!3X�!4`�!5h�!6p�!�x�!7��!8��!9��!:��!;��!=��!?��!@��!B��!Cȝ!DН!E؝!F�!G�!H�!I��!K�!L�!M�!N�!O �!P(�!Q0�!R8�!S@�!TH�!UP�!VX�!X`�!~h�!Yp�!Zx�![��!\��!]��!^��!_��!`��!a��!b��!c��!dȞ!eО!f؞!h�!i�!l�!m��!n�!p�!q�!r�!s �!t(�!u0�!v8�!w@�!y��H��H��y!H��t��H����5v!�%v!��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A�������%eo!D���%]o!D���%Uo!D���%Mo!D���%Eo!D���%=o!D���%5o!D���%-o!D���%%o!D���%o!D���%o!D���%
o!D���%o!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%}n!D���%un!D���%mn!D���%en!D���%]n!D���%Un!D���%Mn!D���%En!D���%=n!D���%5n!D���%-n!D���%%n!D���%n!D���%n!D���%
n!D���%n!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%}m!D���%um!D���%mm!D���%em!D���%]m!D���%Um!D���%Mm!D���%Em!D���%=m!D���%5m!D���%-m!D���%%m!D���%m!D���%m!D���%
m!D���%m!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%}l!D���%ul!D���%ml!D���%el!D���%]l!D���%Ul!D���%Ml!D���%El!D���%=l!D���%5l!D���%-l!D���%%l!D���%l!D���%l!DH�=!"1��"���H��H�=�"1�L�D$L�L$H�$�#���H��H�$L�L$L�D$� =L����H�=�%�����%��UH�5>#SH���H��dH�%(H�D$1����H�ߺH���ZH��H�H�]H�$H��������?H�<�H9�w	Hk�H����$���H��H��������?H�EH�<�H9�w	Hk�H������H�L$dH3%(t����H��H��H��[]�F���H�=�"1�����H�%f.�@H�=�k!H��k!H9�tH��j!H��t	�����H�=�k!H�5�k!H)�H��H��H��?H�H�tH��j!H��t��fD�����=Uk!u+UH�=�j!H��tH�=�c!�����d����-k!]������w������H�GH��(�ff.�@���!�fD��H�����B f���*f����f�����f����f�����L�Bf�H�M��t6�J$f���H*��Y
30�X�I��v�J(f���H*��Y
0�X�H�RH��H�f��fW90�����H�1�H���H��/H��H��f���i!f.�/ztH�i!��^y/��i!�1�H��H�a/H��H��H�:/H������H��f���H��t����f��ff.�@SH�����H��1�H�����[���O f��t'f��tQf������y1�f���t�f.��NaN��@f��uJ������t|�0.0�Ã�t[��u�+H��H�Infinity�FH�����-0.0��F�H�-InfinitH��yf�F��@� H�����+0.0��F�� 0.0��F�SH��H��@��uEH�����t<���H�����H�������!H�59H���Q���H��H���6���H���>���������US��H��H�-�h!�k���H��H�TH��[H��]�E���DH��tS�G �Pf��w�I� H��s�DH�W�>FH�D�u�H�OH�D�H��xH9�s�H)�H��H��@��f�H��H��H��H)�H��ff.�@AVAUATI��USH�����H��t^I�����tTI�>(1�1��1fD<.tD���<Et3H��H�jL9�w@L9�s!H���H��t<-w�I��H�js�L9�r�[]A\A]A^ÐH�j1����I��H�{H��L��H)�H������ 1��AWI��A��AVAUATUSH��H��(H�T$��H�<$H�t$�$�����u0f�{ x8A����H�D$A��u+H��H�@�+��H��([]A\A]A^A_�A�-I�A�0.L�x�E1�f�H�$A�����H�@H�D$H���?f�H�$�	��F�l�$�D��1���A��A������tOH��t
�A9�r�D��1�H�
,L����H�����I��1��I���L���!�1�I��f.�I��L9d$�q���H�4$A��H�F�N$L������w���������I�����9�w�@��0uI��A�A��0t�1�H�
��L��H��������H�|$�����H�t$H�|$H��([]A\A]A^A_�{���H�t$H�F� ���H�4$�.H�F�N$L�������U�����SH�he!��H��H���H���H��t"�tH�[�f�H��[���H�)e!���H��H����1�[�ATUSH�����H��H��������?H9�w*L�dH��d!��L��H��H���c�H��[]A\�H�����I����ff.���USH��dH�%(H�D$1��!���H�T$�H�=�b!H���8�H��H���]����|$��uH�L$dH3%(H��uH��[]������SH�Hd!���H��H����H��tH��[��f�H�d!��H��H����1�[���USH��dH�%(H�D$1����H�T$�H�=(b!���y���H�������|$��uH�L$dH3%(H��uH��[]����R�f�ATA��UH��S���/���f�� tE��t$H�H��r$H��H�=�1��C�f��u�[1�]A\�@H��a!H��H�5�H�81����DH�OL�1H��~;H��~'I�@H����H��������H�H��H����L�G��DH��y�I�@H����H�AH��v�H��H�H��H���f� �G$H�G��f�w 1�H�5����M����H��������H�I��H���N���fDf� ~1��G$H�Gf�W 1�H�5�����fD������G$H�Gf�G ��fDM��~#H��������H�I��H���
����'���DH��H�I��H���������f.�H��H�I��H��������:���f������f�O ���f��O �Af��w#�]H��s���G$1�H�G�f�H�W�f.�H�B�D�D�$E��u2H��H��u��G$H�Gf��~f�1�f�W �f.��w$H�W��urU1�SH���H��H�u�L�$��t�H��tH)�H��H��H�W�����uH��[]�f������f�G 1��H�CH�t�(H�{$H���z��ʸ�ff.�f�AWI��AVI��AUM��ATI��UH��SH��L�D$���I�WH�|$P�E$H�L$XI�^H�uI+_L�M9VMCV��H�~�L�D$I9���H��I�uH���8��8��H��I�FH��H;EsRI�$I�OH�EH�4H9���H�KH9���H)�H�H�I�H�H9���A�D� H�L$XM�U��/@I�<$H9�r�A�D� H�L$P�뛐I�I�FI��I�$M�UI�FL�UH��H�E������H�����HD�H��H��[]A\A]A^A_�DI�M�U��I�����M�U��F f�����R f����f���@��f��A��D	�f��tef���t_@����������L���f����A��G$1�H�5�H�GfD�G �����D@��tS������t���f����f��~N��1��G$1�H�5�H�Gf�O ��r���f�������tbf���_���f�������G$H�Gf�w 1�H�5/��%���D��f.��Hf�����d���f�f����f�����Df������<���f.��Jf�����$����f��~Lf��~L��G$H�Gf�W �a���f�f��~f��������f���$�������f��~�������G$H�Gf�G ����ff.�f�SH��H��uH�GH�p�H��tHH���A$�P�Q$���ɚ;veH�����D�$�P�T�$H�����ɚ;vA-�ɚ;�D�(H���uھH���E�����t�C$�H�C[�H���f�H�������[ÐAWA��AVAUA��ATUSH��HH�GL�$�I���L��L�_H�r�q�qH��L��H��?H)�1�I��H�T$I9��y�D�$A�H�JH��L���$H��H��I��H)�H�D$8I)�L��H)�H�D$M����E1�1��f��؍�H���L9�|�k�d1҉D$�$��A��1������D$$D������H���������A)�I9�vT�t�$��K���	���i�ʚ;9����K�#D�t�$���	����i�ʚ;9���H��I9�wً$1�1�J�|$L�D$0�t$H�D$L�L$(�$H�������R�fA��L�L$(L�D$0wiH�jE��Jc�H�>��@f� �G$H�G�NA�1�fD� H��H[]A\A]A^A_�D�$E��t1�f�} ���DM����1�D��H���I9�}�ɚ;�nM����f�} H�E�E$H�E�7�f�M H��H�EM��tYH���8��8��L��H��H��HUH��I)�t8�U$1ɾ�KfD��ҁ��ɚ;v��	H�E����H��I9�uۉU$H��H�[]A\A]A^A_�@�F�f������L�_1�M������G$I��L�\$�A��E1�A��$H�D$8H�D$�t���fDH�D$1�J�|$L�$L�D$H�������~�fA��L�$L�D$�����H��E��Jc�H�>��D�����f�U ����f�B�\�$H���#�������D$$A��w�B���D�\$$E���4���@��M���-����f.�A��������@B�D�$H�t$H���Z����O���DA�����1�fD�w ���fDD�4$�D$$E1��D$
����<$�������f�} ������D�,$E��������Y����A���N����x����t$$���<���H�|$8u1M���d���B�D� �������Q���A�������8��������؃������#���ff.�D�W$E��tWH�GA�����H��H��L��I)�D��A����A��	w	�D�щ�I��A�����	w�I�P������f�1��ff.�f��G �Pf��w�IH�����H��s��F �Pf��vSH�WH�NH�GH9FHCFH9�t�H��H)�H)�HH�H�s�H��1ҿH�5,���H��H��f��IH�����H��s��ff.�f��G f��tf��tAf���t#�f.�@�ֿH�5�	�{�@�ֿH�5�	�c�@�ֿH�5�	�K�ff.�SH��U!�S�H��H����H��tH��[�	�f�H��U!�$��H��H�����[�ff.�f�ATUH��SH�����H��I������tbM��tMH��t@H��H���8��8��I�T$H��H��1�H��H9�w&�O���[L��H����]A\���DH�]�f�1�[]A\�f��������f�AVA��AUI��ATA��UH��S���L��H�����I�����u5E��t0f��w*H��Hc�H�>��f�A����vf�} x []A\A]A^��A����v�f�} ~�H��L�����[H��]A\A]A^���DA���E�#w��DA���d�w��DA���E�#w�A��e�A����w�A��t���A����w��j���f.�PXH�5�H��H�\R!H�81����f���H������ATUSH��dH�%(H�D$1����H�T$�H�=�Q!���&�H���Ã���wHL�%YS!����H�TL��H�������|$��u0H�L$dH3%(H��uH��[]A\���K�����������ff.�@AVAUATUS�F H��f������f����f������Pf����H�VL�nI��H�W���f����OŅ���L9oLFo��M�������L�oI��f�G ����
t.M9l$��M�1�A�L$$M��tA�T$ L��H���m���L�kK�D�[]A\A]A^����C$��f��H�CN��~S�1�f�s []A\A]A^���G$1�H�G1�f�{ []A\A]A^�H�$H�v$L�����O��������1�f�K �t�������G$��f��H�GN��~+��f�W �<���1�H������L�k�$���D�����f�G �����DATI��UH��S�Ӻ
�:���H��v��L��[H��]A\���f�[1�]A\�f��N$��tyH�FH��~pH�V�N H9�ssH)�H�GH�GH9�HG�1�f����������H�Wf�G H�FH��tH��H�H��L���L�$A�L�$H��H9�u��)�f�����fD�G$H�Gf��~�f�W �f������f�G �fDAWAVAUA��ATI��UH��SH��H��HdH�%(H�D$81������Ƀ��%�1҅�tOA�T$ �M �r�A��f���uef�����C$H�Cf���tA��fD�[ @H�\$8dH3%(H���qH��H[]A\A]A^A_�f.�f���_E1�A���H�EA��G�t6�I9D$���*M�D$H�}I9�H��IF�H��t5�E$A9D$$�|��1��f�D�\�$E9\�$wd��H��H9�u�I9�wP��A��1�f��M���@���f��NǍDp���u+A��C$�	H�CfD�S ����@M��1�f��A���E1�f��fD�K A��H�L$ G�|?�E��E�|G�H�D$fE����PL��H��H��H�D$ PL�L$@L�D$8��_AX�D$H����L�D$(I������L$L$H�|$ H�t$0�L$M��t3J�H9�r�f�J�H9���I��H��B�T�$�T�$M��u�H9��dI��I)�I�H���D�$I9�u�1�H����H��I��A�D�$B�D�$1�H��tnJ�L� H���f��1�H��H��tKH��AD�$=�ɚ;v�-ʚ;����DD���f��DN�A����v���fD�k ��{���I)�M��tBD� 1�fA����������f�C H�C1�H��t�T� �L$1�H������H�CH���,���@PH��H��L��H�D$ PL�L$@L�D$8�i�Y^�D$H����!L�D$(I�����t$�L$�9�r)�1҉t$H�|$ J�4H�L$0H9��nM��tMA�ʚ;A���fDJ�4A�H9���I��D��H��B+T�$D)҉T�$M��uѺH��H9�v'H��A�ʚ;D��H��H��)к�D�$H9�r�E1�H9���@H��tFH��H)�L��H���@)�1�A�t�$H��t"H��A�t�$9�s�ɚ;���f�H)�H��t)T� M9���1�fA�} E�����D�D��1�A����������f�C �E���D��H��H���J���H�CH���}���DI��L���p���D�L��H������H�CH���K���vfDH��H��A�D�$�D�$H9�r�M�������L��L��H��H��L�<�L��M�I��!@)кʚ;D)�A�D�$H����A�D� H��D�L�$E�D9�r�)�1�D)����8E1��H��H��A�T�$�T�$H9�r�M���H��L�L� L��L)�M�T�1��f.�A�1�I��H��t*A�T� H��T�$�=�ɚ;v�-ʚ;A����DL)�L)�I���B���f.�L)�L)����DfA�|$ ~w�f�S ���f��L��H������p����L��H��������H��H9����������D���_����y���f.������f�C �,���I��1��������AWE1�I��AVAUATI�̹UH��SH��H��X�F$H�FfD�V L��H�T$@L��������A�W A�L$ �r�A��f�����f���f���bf���b��E$H�Ef�E H�|$@A�D$ f� �f������C$H�Cf�S f�H�EH��H��X[]A\A]A^A_�f����I�D$H�D$HH����H�EH�|$@H�D$0H�wH�CH�D$H9������C$H����H�V��DH�ȋL� �L�$H�HH9�u�H�D$H9T$v�H���D� H9�u�1�H�|$0H�T$0�@@H���D� H9�u�A�D$$H�D$8Hi�ʚ;H�|$HH�D$ H�D$v(A�D$(H�D$8HD$ 1�H�t$ H�|$H��H�H�D$H�D$H�t$0H��H9�HG�H�D$H����H�D$HA�I�SZ��/�DH�<�L�p�H�|$(f�J��I�uH�<�G$����Hi�ʚ;D�_(L�H9D$ ��H9D$��H9t$0�%1�H�t$8D
(M�L$M�I��L;L$�e��H�|$(L��B�L�$E1�H��L��L��M��GfD��ʚ;F�D)�L�$H���L�$E��tD9�se��ʚ;D)�A��L�$L��H)�I9�r\A�t� 1�I��H���ɚ;vH��H��	H��I��H���Љ�Hi�ʚ;H)։�H9�r�)�A��fDL��D)�E1�H)��L�$I9�s�D)��L�$B�D�$J�T� =�ɚ;v-ʚ;H���B�B���B=�ɚ;w�L;l$�����H�D$0�H��H�EH�D$@H�@H�E�.����_H��X1�[]A\A]A^A_�DI��L;l$�B����1�H�t$D
$I��I�D$M�L����L�\$HI�UI��v<�,A9|$,�B���r,M��K�<+I��O����E�T�$D9T�$����w	H��H9�u�I�D$L�P�O�LL9L$����L)�L��1�M���&fDʚ;�D)��D�$H��L��H)�L9�w A�|� �D�$D�7D9�r�)�1�)���fDH�A$���A$���f���bf���bA��E$H�EfD�E 1�H�5����h�H��X[H�]A\A]A^A_�I�t$H��H�����������H�|$@A�D$ f� �Nf������������f�E H���-�H�D$L�|$@H�߾H�CI�GH�C�Z����,���1�fA� H����������f�C ������f�������������E$H�Ef�u ���A�|$$����I�|$�����L�|$@1�f��H���T�L����fA� �x���������C$H�Cf�K �|���f�������������E$H�Ef�} ���E1��E$1ҿH�EH�5O�fD�M ����H��-���f������f�������������������A�D$$H�D$8Hi�ʚ;H�|$HH�D$ �������D��ATI��US�����H��������?H9�wOH�l��x]uH��[]A\�@��uJI�<$H��t�@��u3�>����x?Hc����H��[]A\�f.�H�����H����[���˺1����[��H�@!H�5��H�81��3��AVH��9!1�AUATUSH��H�� dH�%(H�D$1�H�y?!H�8�I��I��H����H���ɚ;�H���D$H�SZ��/�DH�D$H��	H��H��H��H��Hi�ʚ;H)�H��tm��1�L�l$E1�H�SZ��/�DL��VH��M�pH��H��	H��H��I��H��H��I��H��H��Hi�ʚ;D��)�H���ɚ;��L��M���H��H��H��H��	H��H��H��H��H��H��H��H��H��Hi�ʚ;H)Љ…�u	H���ɚ;w�H���ɚ;��H���@���fD�(����H�@H�@H�@f�p �X$L; uI;D$ tFI�D$ L� A��u8I�����t/I�$H�ƒ�H��tH�€�I�|$I�$t
���D@H�|$dH3<%(L���IH�� []A\A]A^�@�(����H�@H�@H�@�@$f�x �O���f��$�����H�@H�@H�hf�P ����@J�<�(L�����J��L�pH�x$L�pI��H�hK�t�f�H ��s��ur�����������H�H�H$��L�D�L�D�L�@,I��L)��H)�����������1ɉσ�L�>M�89�r��t���fDL���@��������ыT��T��N�������H��x���fDSH�����H�5P6!H��H�����������f�P H��[��H�4�$H��tcSH��H����H��tKH�C H���u?H�����t6H�H�у�H��t'H�р�H�{H�t��uH��H�D$�{��H�D$H��[��+��ff.�USH��H��H�v�n���H�sH��H�pH�CH�EH�CH�E�C f�E �C"f�E"H��H��>u1H��H��u
H��H��[]�H�}$H�s$����H��H��[]ÿ����ff.�@H��tzATUSH��H�=T<!���H�ߺ4H������H��H��4t>H��t8<tL�uH�������H������H���8H��H�H���0�[]A\�����H���p��H��H��H��� ��L�eM����H�EH����H��u8�H�5�L���9�������H�5��L���������H�n:!H�8H��t}H��H�5�1����@H�H�ƒ�H���U���H��H�������T���L�eH�����[�����H�5�L�������u��[]A\�fDH�5�1��
��H��9!H�8�f���H�=S����H�E�� ����D�뮐��f�H��H��H��@��tOH��H���H��tH��t@��u@��tB�,���Ѓ�����H�F9!H�5�H�81��e��DH��t�H���H��u��Z��H;k:!tqH;Z:!txH;I:!toH;8:!tvH;':!tmH;:!��H;:!tgH;�9!t^H;�9!teH;�9!t\H;�9!�b����H���D���f����f����f���f���f���f���U��SH����~H�>��t ���������N��fD�@��uU�����ń�uU=�T��H��tH���D����Ѓ������`���H��H�\H��[]�fD�����ń�t����H��t�H��t
H����@��t��%����H����E��������@��t��%����H����E�����[��@��t��%����H����E�����7����t��%���H����E��y�����H����H�\H��[]�f�H�-A8!��H�\����H��H��H�����H��H��[]�H��6!H�5^�H�81�����H�^���H�6!H�5e�H�81����ff.���AVH�5O�E1�AUATL�%�/!UH��M��S�H��H�������t)I��I��I����I�]I�uH��H�������u�H�T�
��t@����	��v�� u�H���
��u�(����K�vA�T�H�@�@$H�@��t-��t�����f�P �	�1�[]A\A]A^þf�p ��1�f�H ��f�AWA��AVAUATUH��SH��H��8�L$�P��H�}H���8��8��I��H��H��H��H��	I��I��H���n�H�މ���	��w�H�������	��v� t�#t]M��u0H��H�4$���H�4$H��I��tHH��8L��[]A\A]A^A_�fDH���8��8��I��L��H��H��H�BI9�LG��H���f�H��H�t$H�D$���H�x���H�t$L�D$H�H�D$ H�$�� �^H�D$ L�h��P�A�E����<-������؉$H�F�1�H��I�|I�>��*���0��	�\H���LH��I�|H������&	E��uD��A��	A��v4�� t/��_u�H�����L������9wI��r�E�����M��1�E1�L�l$�J�T%H�L$H���8��8��H��H��H��H��M��LD�I9�LB�J��$H���U���<$H�L$I��L�p�@$H�@�A�fD�P I�@$1�H�S�H�L$H��L�$H�D$���H�L$L�$H���dH�D$�<-�SH�D$1�<+u	H���H9��3H�D$1�L�$I��������H�H��zDL��H�H��H���H��I��H��	��L�H��M��H�L��A��0Mc�M)�I9���H�L�X�H��/H����I9���H��H9��L��H��u�H�E1�1���L�hM����������fDA�DE����E1�1�E1�E1�H�D$H��u	M����L�|$K�D
H�D$M�����L�A�
���.�[H�D$(E1�H�D$A�
���D��!�E1�1�E1�E�D��A��	A��v�� uH�t�H���ƒ�	��v� t�����E���_���H���T$(����>���M���5���f�D�\$E���
���H������H�5��H��H��0!H�81�����E��u�J�<�$����I��L�p�@$H�@f�X ���f�H���$1��N����$H��A�E<-�p�D$1�<+u	H���I���8��8��E1�H��A��1�G�\�fDL�L��H��?H��L1�H)�H��I��H��H��H��H��H9����$���H�t$1�H9���@�H��w.H9�v)1�D�<�A�D
H��H���DxЉH��wH9�w�H9���H��M��tXM�T�$1�fDH���L9��A�
H����<�A�H��H���Ly�A�
H��wL9�r�L9���I9���I�V�H��wI���B$��H���H��	u�B$L��I��?M�pL��H�r�q�qL�$H��1�L)ʃ|$��I�P������fA�@ ����L�$H�|$ 1�L�$�Y���L�$����H��H��I9��B��1�����H��I��1�I9����������H���7����H������L�r����A�I��H�I!�M���hL�JL�XK�L
J�<I��H�L$�A�
��+����L�XH��J�<D�I�|1�D�E��tXE��uA�ƒ�	����A�� ��A��_��A�ƒ�0��	�wH��F�TH��I�|I��D�E��u�A��V���H���H�D$�������f�M��~;L��H�I��H����������H�|$L�$�$I��H�����H��H�I��H�����A�����fD�H ���H���D$��������H9�w����tA�|
0��H��H9�r�M��t"��t1��	D��tA�<0��H��L9�r������GE���>�|$A�@$I�@���fA�x 1�H�5<��L�$�#��L�$�q���H��H��E1��I�|H�T$���tEE��uD��A��	A��vi�� td��_t>��0��	��H���LI��I�|H�����u�E1�1�E1�H�D$(���M��tD�LD��A��0A��	v�E�������L�|$�1�L�l$M����H�|$L�$�$H��H����E���c���L�|$K�D
H�D$M����1�M��������|$A�@$I�@���fA�H �N���H�|$L�$�$I��H����H��tB�DA�ƒ�0��	�J���E������L�|$�M��;���E1�1��X���E1�1�E1�E1�H�D$(H�D$�r��������fA�p �3��������fA�P ���L�����H�t$L�$�$H�<.���M�������H��A�����H�D$(L����N�L��A����1�E1�E1�H�D$�L���ff.�AVI��1�AUI��H��H��#!ATE��U��SH���X���A��@��L��L��H���B�H��tDH;uH;C t9H�C H���u-H�����t$H�H�у�H��tH�р�H�{H�t��tH��[]A\A]A^�@H��H�D$軺��H�D$��@USH��H��8dH�%(H�D$(1���t2H��H��g�H��H�L$(dH3%(H���9H��8[]�fDH�t$H��賻��H�߾H�����H��������xH��wAH���)���H����H���@�|$H��H��wH�����H�����H���m����H�߾
�s���H�8H�D$H��� t`H�pH��tgH�zH�(!H��
A��H��E���H�T$H�T$ H�H�5�!!H�T$H���t���1�H���J����DH�pH�����H�=��H�t$迶��H�T$H�t$H�:�� �o��������ff.�@AWAVAUATA��UH��SH��H��XdH�%(H�D$H1�褹��f.���f(�fT
��f.
����f��f.�zVuT���H��'!�^�f/�wH��'!@H�L$HdH3%(H����H��X[]A\A]A^A_�f.�H�����H����1�H��H�L$��@��H�T$L�D$��k���H�\$H��H)�A�݃���A��L�d$ �H��H��L��聶��H��虵���L$���=I�4D9���H���8��8��D)�Lc�H�00000000L��H��H��H��L��H)‰Ѓ���������t�0���H�L��1Ҿ
�D H���$���H���8��8��H��H��H��L��H��H��H��H��H�,���H�5�!H��H���%����L$H�h������������f�P �w����f/��H��%!vH��H�5E!���1�H������A����H��%!���E��������DE��t���HH���/H�����������H��$!H�H�%!H�5��H�81��2���f�Hc�H���;���E1�L�d$ �F����H���8��8��A)�H�00000000Mc�L��H��H��H��L)�H�P	��������t�0���&H�D$PL��
H��D�1�胱���9��8H�NjD$�H������)�Hc��e�����*A��A�9��8A)�A��A��D��D�D$A�����Hc�D�ƍ�H��)�D��A��H��A��Lc��D)�M�,Hc�H)�L�<�M��M)��L��K�<,�0���L��1Ҿ
B�D< �Ӱ��H������H�$!�
���@L�F��H�>I��H�|�L)ƍ2�����������1��ƃ�I�<09�r�����H�~��H�H��H�L�H)��2����������1�A����J�9�r����f.�A���9��8I�<�0D��A�����D)�Hc�H�,�H��H)����L��1Ҿ
�D, 1����H�����K�<4H��L��L�D$�,����L��L��0����L�D$������0000�D�0000����0000�D�0000�F���f�D�00�:�����f�D�00����膰��H�O"!H�5E�H�81��n���H�G"!H�����H� "!H�����H��!!H����H��!!H����H�����uH�������H��!!H�����H�S����H���H���H��HD�E1���H�Y!!SA���H��H����H��tH��H��1����H�[�D�[�f���UH��SH��8H�t$H�|$dH�%(H�D$(1��d��������H����:����0��	��1��@H����:t��0��	��Hc�H��H�Q���u�H�S�H��	�H��HG�A�H��H������H��H�H�D$H��v"H���8��8��H��H��H��H9UvH��H�U1�H�����H�EH�t$(dH34%(uDH��8[]�H��A��1�H���\���H��H�H�D$�H��!H�5��H�81��g����b���f���SH��H��H�|$H�t$�5���H��A�1�H��1�����H�øH��t
1�H�����H�H��[�AW�AVAUATUH��SH��H��HH�t$�=�����9H�D$�U �@ �Hf�������Jf������H�|$H�H�|$H���&L�eI���VH�|$L9���H�D$N�< H�CI��H��H�|$ H9��sH�EH��H�CH�D$H�p�l�������H�D$8H�D$f�} �@ ��f������������f�C N�,�1�H�{$L���ݭ��H�|$ L�{�sI�D$�L�t$ N�L+ E1�H�D$(H�D$I�SZ��/�DA��KH��H�D$I�G�H�D$0�M�~�L9l$��L�\$(L��H+|$H�D$I9���H�t$L�D�$�f�H��I��L9���A��t�$H��H��H��	H��I��H��H���ʉ�Hi�ʚ;H)�A1���ɚ;v���	��A����
i�ʚ;)�A�1��t�M��t�AA�L����A�A�=�ɚ;w%�z���f.��L�$щL�$���ɚ;�Z������	��A���i�ʚ;)��L�$H��H���u�H��I��L9��7���fDI��M��I��L9l$ ����H�|$8��H���6���H�|$8�H�����H������H�D$8H�@H��H[]H��A\A]A^A_�f���'f���'��C$�H�Cf�S H��H[]A\A]A^A_�K�<���H�5���(�I��H�EL��I�EH�D$H�p�ܺ�����GL���|���H��H1�[]A\A]A^A_�L��I��H�D$H��H�l$H�D$���H�|$�$����H������1�f��H��H���T����H�\$8����}$�����H�}�����f��H�t$H�����ҍT��Q��H�\$8����f������������C$f�C �H�CH��H[]A\A]A^A_�H�D$0L)�L9l$(rL��I��H+|$����f�M��1�����f�������������j���1�H���G��H�\$8�!���H�\$8L���%���AWAVI��AUI��ATI��USH��H�5�!H��xdH�%(H�D$h1��J���H�5�!H��H��H�H�D$ 萨����u<���[��u
H������9H�؃�H��uH�ߺ1����H��H�5I!H���A���1҅�u+H�L$hdH3%(H���H��x[]A\A]A^A_�DH�5	!H��衩��I��H�H�D$(�E f����A�W f����f���f������Jf������f���f����u��f����X1�L��H�t$�i
1�H��H�t$�Z
L�d$L9d$� LMd$A��H�5��I�� LB�H�<!H�I�|$��K�|$A��H��H�H�5|�H�D$0H�!H��V�L��H��H��I��H�L��H�D$8�z��H�CA��H�5D�H�<�H��!H���1ɺH��I��H�L��L�D$H�D$@���L�D$L��L��L����������L��H��H�������C L�D$��f���tf�} A�G �of���oM�E�I�����DH���H��
��H��� �H�������H��!H�5!H��蚧��H�5�!H��I�E臧���I����f.�f��t�f���t��Jf����uH��!H�5�H�81��"���f�f����f����H�=/!H�5�!����I�EH�= !H�5i!�����I�����H�ڃ�H�����H������H�����H�EH�ߺH�4��H������fDf���y���H�=�!H�5�!蔦��I�E�t���f�������I�pL��L�D$���L�D$�����H��!I��I�@L��L��I�D$���L��H���{���A��H�5��H�<�H�v!H�H����L���H��H��H�H��H�D$H����M�e�I�.�	���@H��!�+���@H�=�!H�5"!轥���I�EI�.����臤�����UH��SH��H��8dH�%(H�D$(1�H�L$H��H�$H�D$���H��u-�%H��H��轧��H�L$(dH3%(u5H��8[]�fDH�$H�\$1�H�H��H�D$H�H�D$���H�������ATUH��SH��H��@dH�%(H�D$81�H�L$H��H�$H�D$�@���H��u[H�!L�%�H��u!��L���S���H��!H��t�H��H��H�����H�L$8dH3%(uJH��@[]A\�H�$H�\$1�H�H��H�D$H�H�D$����H�+H�$1�H������H�;H��葥������f.�AWAVAUATUH��SH��HdH�%(H�D$81�H���u9�����H�L$8dH3%(�{H��H[]A\A]A^A_�f�H���8���H����I��H��������?H9�wNH�\H���Q���H��H��tXH�߃�u@���Hc�H���W��H��L���B�m���f�H���8���H��������f�H�L$H��H��L��H�$���H����H��!H���H��u"f��H��蓦��H�\!H��t�H��H��L���)�������@1�詯��L�5�!H�{A��H�5\�I��I��1�L��H�����I��H�H�D$�I��H�H�D$H���H����H��@��uH��������H���sI�T$A�H�5��H��H�H�D$ H�EH�DI�UH9�H�JI�HF��H�|�	H���H��L��H�H��H�T$(L�����L��踮������H��L�����u���1�L���{���I�E���f�H�E��H���O���H���HF��=���DH�$1�H���:���H�;��q����(���@��t?H��teH��tw@��ue@��tGH�c!H�H��!H�5J�H�81�����C���H�����uH��u�H�~!H���H�W��H��!H��H� !H��H�l!H��H�@!H��ATU��SH��H��dH�%(H��$�1�H��H�����HH�H��H�����H��H���H��tjH��te�����tWH�߉��5�H��H�5�
!H���3���H��$�dH3%(�?H�İ[]A\�H�5i
!H���a�����u�D���1��@H��t�H�������w�H��Hc�H�>��@H�߉����H���l���fD�
H���;���H�0H�D$�� t{H�HH�XH�q
H���~H�߉��L�H��H�D$H�D$H�D$����DL�d$ H���1�I��H�
q��L��������L����H������H��H�X��H��
��H�=3�H�t$�g���H�t$�g���踝��H��!H��H�8薧��fDUH�պSH��H�����H��dH�%(H�D$1����I��H�H�$A�@ ��f��w�]H��r5I�@H���hA�L� H�p���t���H�~�A�L�$��uCH��H��u�H��tH�H��tH�EH�D$dH3%(��H��[]��E�H$E���xA�	A������DA��D��A��A���A��	w���R��A�����E1�A������9�t�*fD�Љ�A������9�u��A��A�����	w�I�PH��xc�	tMc�L)�H��tH9���H�L�H�H�H���"���I�PH����1�H9�}
H)�Mc�H��L)�H�E���f.�H��H��H��H)�1�H��	������E�H$H�x�A�L� H��E�����A�	�����H��H���t���H��Mc�H�I��M)�H9�IL��X����H��Mc�H�L)��k���E�H$H��H��E�������A�	���E1�����C�����SH�� dH�%(H�D$1�H�T$H�t$�x���H�|$H�@H�xDH�\?H�@H�|$H�x;H�|?H���n���H�L$dH3%(u(H�� [���;���H���fD�+���H���衚�����H��1�dH�%(H�D$1�H������H�<$H�@H�xH�D?H�L$dH3%(u
H��Ð�˘�����D���@��H��1�dH�%(H�D$1�H���~���H�<$H�@H�xH�D?H�L$dH3%(u
H��Ð�k��������@��USH��HdH�%(H�L$81Ʌ�x��v
�1�����H��H������H���	���H�5Z�H��H�H��H�D$���1�H�p2�ĝ��H�D$H�\$H� uyH��H�EH�
O��H��H�����L��1��H���H��� ���1�1�H��H�4�Ф��H������H�|$H���{���H�D$H�L$8dH3%(u(H��H[]��H�[H��u�H�=:��s����q����ɘ��f����H��H����������P 1�f��tf��t�f���tH���fD1�H���f����H��H����������P �f��t1�f�����H�D��H���D��H���H��������f�x H�H��������H���H������W���H�@ H��H�D����H���H������'����H$��tPH�@H�<�H����w"H��������̺�H��H��H��H��H9�w�H�@H�H�D?yH������H���fD��S�H�����H��PdH�%(H�D$H1����H�5��H��H�H��H�D$ 茡��1�H���R���H�D$H�D$H�pH� t	H�pH��trH��1�1�膢��H�D$H�XH� t	H�XH��t3H��裖��H�|$H������H�D$H�L$HdH3%(u<H��P[�H�=������f.�H�=�H�t$���H�t$�s����P�����S�H�����H������@ ��f����HD�H��[�ff.���H���H������g����@ ����f��H�H�����ff.���U�H�����SH��8dH�%(H�D$(1������A�H�5��H��H�H�$H�EH�<�H��!H�H��?��H��H��H�H��H�D$艷��1�H���O���H�H�L$(dH3%(uH��8[]��0�����U�H�����SH��8dH�%(H�D$(1��u���A��H�5�H��H�H�$H�EH�<�H�R!H�H����1ɺH��H��H�H��H�D$袶��1�H��許��H�H�L$(dH3%(uH��8[]�艔��f���U�H�����SH��8dH�%(H�D$(1����A�H�53�H��H�H�$H�EH�<�H��!H�H������H��H��H�H��H�D$�D����C 1�H�߉�f��1�)�f�C ���H�H�L$(dH3%(uH��8[]��ɓ��f���AT�H�����USH��0dH�%(H�D$(1���H�t$H�|$H��H�H��H�D$ ������
H�D$H==��H=����H�5�H�����1�H��臗��H�D$H�D$H�hH� t
H�hH���#1�1�H��H��贞������1�H���I���̔��A�<$"�D$u'f.����f(�fT
�f/
��w+�s���H�L$(dH3%(��H��0[]A\�fD1�H�5?���-���f�{ xn�f��)������D$������y���f.�1�H�5���ݡ��f�{ f��f����6��ѕ���Y���@���軕���C���fDH�=K�脒�������ڑ��f.���U�H�����SH��8dH�%(H�D$(1���A�H�5��H��H�H�$H�EH�<�H��!H�H��?�������H��H��H�H��H�D$蔱��1�H���J���H�H�L$(dH3%(uH��8[]��+���ff.���AW�H�����AVAUATUSH��XdH�%(H�D$H1��]�H�5��I��H�L��H�D$ �S���1�H������H�0H�xH�D$H�|$H�t$�� tH�@H�D$H���	A�D$ f����f���f����.�Pf����(f��H�D$���-0�@f�H�D$��<-�XA�L$$H�l<N�HD����I�D$H��H����w,H��������̺�f.�H��H��H��H��H9�w��#���H��H��I��蕓��L�|$L��L��腓��H�|$蛏��L��H�������L���c���H�tH�@H�yH�����H��L���<���L��H�|$HdH3<%(�-H��X[]A\A]A^A_�fDH�t$I��f����I�D$H�D$H�����1�DE�|�$A�	���+fDL��1�H��H���������I��H��H��H��A��tKH��t
�I9�r�L��1�H�
��L��H��H�����I��1�謓��L��脎��1�I��DH��H9l$�i���A�~�0A�����f.�I��A�A�~�0t����@�莏��H��H��I������H�\$L��H����H�|$����H��H���{����L���Α������@H�D$�NaN���L�|$I�oH��迍��H��L��H��H�����A�A�H������q���f�L�v�-�e���@H�=��$��������0f�����H�InfinityH�D$H�0�@����DH�D$�yH�-InfinitH�8f�p�����#�����AW�H�����AVAUE1�ATI��USH��dH�%(H�D$1��W��H��H���ש��f�} �M$A��1�O�l-���t3H�EH��H����w"H��������̺�H��H��H��H��H9�r�L���e���H� �(H��L�pM�&A�� �M�fH�� I��M)�H��u#H�-E��H������H��� H��t�L��1�1�H��訍��H��I��I����(M����K�D?H�$H�W� H��u#H���H��賐��H�4� H��t�H��H�ƿ�B����*L��H��H�$�)����H���,���H�L$dH3%(��H��[]A\A]A^A_�f�I��A�����H�@ �����I)�K�D$H�$H��� H��u!H�(���H����H�|� H��t�H��H�ƿ肌��L��H��臌���V���f�H���*H��L�,$�W���I�����躊��f.���AW�H�����AVAUATI��USH��HdH�%(H�D$81�����H��H�H��H�D$�b����M$��t[H�EH��H����w%H��������̺�H��H��H��H��H9�w�H��~ H��	J1�f�} ��H�D�H��H�D	��H�|$8dH3<%(�EH��H[]A\A]A^A_��L�����H� �+H�@ L�pH�� H��u L�%���L���s���H�� H��t�1�1�H��L������I��I��� ��M�vI��L�d$M)�f�} ��M����K�D?H�D$H�}� H��u)H�0�f��H����H�T� H��t�L��H�ƿ肊��L��L��*H�D$�h���H�ƒ�H��t$�����H����������H���H�������H�A� H�5V�H�81�萇��H�������H����I�������I)�K�D6H�D$H��� H��u H�W��H���#���H��� H��t�L��H�ƿ貉��H�D$H�f� H��u*H��f.��H���ӌ��H�<� H��t�L��H��L���d�������L��L���*H�D$�����:���I���S���蝇��ff.�f���AUI��ATUH��S��1�H��8dH�%(H�D$(1�胕�����xI����H��H�������A��H�5�H��H�H�$H�EH�<�H��� H�H�����L��H��H�H�D$����1ɺH��H���Ө��1�H���٣��H�D$(dH3%(��H�;H��8[]A\A]��������I�}@�����D���I��H��H��������A��H�5[�H��H�H�$H�EH�<�H�� H�H����L��H��H�H�D$�T���IcͺH��H������1�H������H�H�L$(dH3%(�+H��8[]A\A]�D���I���R����1�������Ѕ����AUI��ATUH��S��1�H��8dH�%(H�D$(1��Ó�����xI����H��H��������A��H�5\�H��H�H�$H�EH�<�H�� H�H����L��H��H�H�D$�U���1ɺH��H������1�H������H�D$(dH3%(��H�;H��8[]A\A]�C�������I�}@����脄��I��H��H������-�A��H�5��H��H�H�$H�EH�<�H�
� H�H��W��L��H��H�H�D$蔒��IcͺH��H���Q���1�H���W���H�H�L$(dH3%(u/H��8[]A\A]�f��+���I���R����1����%���������AUI��ATUH��S��1�H��8dH�%(H�D$(1��������xI����H��H������.�A��H�5��H��H�H�$H�EH�<�H�� H�H��X��L��H��H�H�D$蕑��1ɺH��H���S���1�H���Y���H�D$(dH3%(��H�;H��8[]A\A]�������I�}@�����Ă��I��H��H������m�A��H�5ۮH��H�H�$H�EH�<�H�J� H�H����L��H��H�H�D$�Ԑ��IcͺH��H��葤��1�H��藟��H�H�L$(dH3%(u/H��8[]A\A]�f��k���I���R����1����e����P�����AWI��AVAUATI��US��H��HdH�%(H�D$81�葟�����d����I�<$���bM�d$�9��=����@����芁��Hc�A��uI�����tI�$��H����L�����A��1��ŏ��L���H�����I����A��H�5l�I��H�H�D$I�D$H�<�H��� H�H��&��L��H��H�H�D$�c���A��H��L��H���!����@H�D$A�1��2����H�����L��I���k��H�5߬A�I��H�H�D$I�D$H�<�H�F� H�H����L��H��H�H�D$�Ў��H�L$��L��H��荢��E��u81�H��莝��H�H�L$8dH3%(��H��H[]A\A]A^A_��1�H���V���H�D$8dH3%(��H�;H��H[]A\A]A^A_�|���@@��t2@��u`����E1�H�A��H�D$���f��������fDH�����t�H���H��u��6���1�A��� ���L���$���A������跄��랺1���跂������A����f���AWAVAUATUH��H�����S��H�׺H��XdH�%(H�D$H1�����I��H�H�D$ ���C��H�5��L��1�E1�H�D$蟉��H��1��5��H�D$H�D$L�pH� t
L�pM����������L��L��L��艊��L���~��H�|$H���4��H�D$H�t$HdH34%(��H��X[]A\A]A^A_�@H�}H�|$����I��A����@���!�~�����qLc�1�H�5�L��1��̈��H��f�M������J�D.�1�I��H�t������L��L���������2���fA� x{����L��urI�^A�+�h�H������Z���H���H���J���H�|$�|��H��� ��1�+��H�P�H���fDA�-I�^I�oM�_H����I��E1�A�����M��up�f�M��xfE�G$H��H�
�1�H������L�\$L�$�1���H���	}��L�$L�\$A�����H�M��u�.H��I��M9��I��M��t�C�D�$H�s	���1�H����0�׈C���A�����H9�u��DH�S
H��u�.H��H�S	@H�Z�H��y	� @H��H�C�@�0H9�u���fDH���C��<0t�<.��M���o���L��L���=����_���H�=����|���6�����ʍq���v�� t��0��	��K�L�L�lJ�H�H����u����f�L)��@�����0.H�sf���H�D�H�SH)�H�KfDH�B�@H���@�0H9�u�H�P	H9�u�H��H��H��H��H)�H�����H�\	����0f��
���I�^A� �����I���������߀�F����H�5;�L��詅��H�����H�P�H������H��H���������1����~��H��� H�5+�H�81���y����z��@��U�H�����SH��dH�%(H�D$1����H��H�H�] H�$H��tPH���tJH��x-H��������?H!�H�L$dH3%(H�DuAH��[]�@H��H	���f�H�EH�}$H�4��+{��H1�H]��z��ff.�f���H���H�����dH�%(H�D$1��W��H��p H�$�Vf��w�]H��r<H�PH����L� H�r���t�2f.�H�V��L�$��u,H��H��u�H�t$dH34%(�H���fD�x$����A�	A������	��׉�A��A�����	w�Mcȅ�����A�����A������9���1���Љ�A������9�u�ȃ�A�����	w�Hc�H�<�L)�H)�H�@H�xH�D?�8����H�D$dH3%(uIH���w���
����x$�L� H�օ��*���A�	�J���1�떋x$H�օ��
���A�	�5����Zx��f.���USH��H��H��8dH�%(H�D$(1�H���H����@��u	H�����uA�H������p��H�8H�<$H�D$(dH3%(��H��8H��[]�gz���H���H��t,H��u�H�C �H�@H�4����H�8H�<$��1�����1�H��H�H��H�D$�w���H�D$(dH3%(uH�}H��8H��[]��y���Pw��AVAUI��ATI��H�����U��S�ӺH��0dH�%(H�D$(1����I��H�H�$L��H��A����L��H���H����H����A����A����1�1�L���4��H�H�T$H�T$A�V f�����H f����f���@��f��@��	�f����f�����@����f������*��"��|��H�	���Hc�H�>��@H�5�� L���u����uM��*��"�!H�^���Hc�H�>��DH��t�I�$������w�H���Hc�H�>��1�H�����L���?��H�H�T$H�T$A�V f���������*tf.�1�H�L$(dH3%(�AH��0[]A\A]A^�DI�F1�L��H�4�����H�H�T$���f�H��� H�U�H����f��H���z��H��� H��t��f�H��� H��H����f��H����y��H�t� H��t��aDH�i� H�;�H��uD�H���y��H�D� H��t�H��L��L���v��H�������������H��H�L$(dH3%(�H��0L��L��H��[]A\A]A^��w��fDH��� H��u%H�9�D�H���x��H��� H��t�H�L$(dH3%(��H��0L��L��H��[]A\A]A^�v�����)�@��EЅ�������*��H�؀�"�z��H�
ʥ��Hc�H�>��D�q�z��f�����f���3f���^f����H�xI9~���f������*��"��y��H����Hc�H�>����f���D��*��"�^y��H�=���Hc�H�>��1����f�f����f���z�����*��"�y��H�����Hc�H�>��fD�����fDH������������f�H��������f�H����������H��D�H�B���f.�f������d���f���*��"�~x��H�u���Hc�H�>��1��f���������*��"�Qx��H�Ԧ��Hc�H�>��f������*��"�(x��H�7���Hc�H�>��L�HM�FM9�L��IF�H��t*A�v$9p$r�w61��@D�T�$E9T�$w�r H��H9�u�M9��L���f����������f��������*��"��w��H�B���Hc�H�>���Dq����*��"��w��H�����Hc�H�>��H���}���ff.����G���f����>���f����L���f����<���f����=�r���f����*�b���f���AU�ATI��USH��H�����H��8dH�%(H�D$(1�����H��H�H�$H�؃�H������u	H�����u[1�H�����H�����I��M���VI�EfA�} H�D$tf�} unH�EH�L$(dH3%(�aH��8[]A\A]�H���H��t$H��u�H�E�H��H�4��A��I���@�1�H���)��I���r����L��H������I��H���tdH�<�H�	� A��H�H�5l�H��D���H��H�H�D$M��u]f�} �C$H�C���f�S �K�A�H��� �H�5��
H����H��H�H�D$�����L��H��H�����1�H�����H�����f�H�D$(dH3%(u+H��8H��L��-[]A\A]�Fr��fD�����f�C ��n����AUATI��UH��H��SH��(dH�%(H�D$1������ks��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]���@1��I|��L��H��I���k���L��H���0|��H��H������l��H��H�H�$�]���H��H�����ω��1�H���Պ��H�EH�L$dH3%(uH��([]A\A]�fD�[m���;����m�����ff.����AU�ATI��USH��H�����H��8dH�%(H�D$(1�����H��H�H�$H�؃�H������u	H�����u[1�H�����H�����I��M���VI�EfA�} H�D$tf�} unH�EH�L$(dH3%(�aH��8[]A\A]�H���H��t$H��u�H�E�H��H�4��!��I���@�1�H���	��I���r����L��H�����I��H���tdH�<�H��� A��H�H�5L�H��$���H��H�H�D$M��u]f�} �C$H�C���f�S �K�A�H��� �H�5��
H��³��H��H�H�D$�L��H��H���Ď��1�H���ʈ��H�����f�H�D$(dH3%(u+H��8H��L��+[]A\A]�&o��fD�����f�C ��k����AUATI��UH��H��SH��(dH�%(H�D$1������Kp��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]���@1��)y��L��H��I���k���L��H���y��H��H������L��H��H�H�$�=���H��H����识��1�H��赇��H�EH�L$dH3%(uH��([]A\A]�fD�;j���;����j���܉��ff.����AU�ATI��USH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H������u
H�������1�H�����H���n��I��M����I�E�A�H�5̕H�D$I�EHEH�<�H�<� H�H�艱��L��H��H��H�H��H�D$萻��1�H��薆��H�H�L$(dH3%(��H��8[]A\A]�@H���H��t,H���K���H�E�H��H�4����I���B���D�1�H�����I���&����H�D$(dH3%(uH��8H��L��*[]A\A]�l����h�����AUATI��UH��H��SH��(dH�%(H�D$1������m��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]����@1��v��L��H��I�����L��H���v��H��H��������H��H�H�$譅��H��H��������1�H���%���H�EH�L$dH3%(uH��([]A\A]�fD�g���;�����g���L���ff.����AW�AVAUATI��USH��H�����H��xdH�%(H�D$h1����H��H�H�D$H�؃�H���$��u
H�������1�H�����H������I��M���
I�EA�H��� �H�50�H�D$I�EHEH�L�4�L��O�t6���H�L���I��H�A�H�5�H�D$ �Ǯ��H�L���I��H�A�H�5��H�D$(蟮��H�L���I��H�A�H�5��L�L$H�D$0�r���H��L��L��I��H�L��H�D$8薐��I�D$H�A��H�5\�H�,�H�H���-���H��H��I��H�A�H�5/�L�$H�D$@����L�$1ɺH��H�L��L��H�D$H����L��H���5���L�L$L��H��L��L�$�޷��L�$L��L���L���Lj��1�L���͂��I�H�L$hdH3%(��H��x[]A\A]A^A_��H���H��t,H������H�E�H��H�4�����I������D�1�H������I������H��� H��u%H�-S�D�	H���j��H��� H��t�H��H��L���h��H���=���1�1����H�%��d��ff.�@ATI��U��SH��H�� dH�%(H�D$1�H��wB���H��t1����H�L$dH3%(��H�� []A\��H�5�� H����c������H�5�� H��I����%�he��H��� 1�H��H��� H�8�}c��H��1�H����H��H;uH;C tBH�k H�]��u5H�����t,H�H�ƒ�H��tH�€�H�{H�t
��uH���g��1�H���ƀ��H�E�!���D��uw��u	H�����u]H�؃�H���H�
��H����H���:h�����H�������H���H����H�D$�p�H���H��
u,H��贫�������Cd��1�H������H���u����H�ڃ�H��ttH��tnH����H��tpH���O���H�\$H�|$��a����L��H���Ȳ���'���������H���`f��H�5y�H��H��� H�81��a��D��L��H��蓬�����H���c�����H��H���H��tH�����t���H�5� H�L$�H��H�D$�c��H�����������tRH���Wd����L��H���*����i���D��L��H�������R���H�����t�H�����t+��t=��
�|���H��� H�5O�H�81��`��DH���Xf���t�H���|�����H�������h����a��H��H��t H���H��tH��H����HE�H��� H�5��H�81��A`�����AUATUS��H���������+d��Hc�H��L�d��xb�����uL�e��u.��\d��H�����A��H��D��L��[]A\A]���DH�m��u���%d��H��A���c��H�ètCH��H�y�E��uRH���[]A\A]�fDL���_��H�ǃ��m����;����H����_����t�H���`��H���b���H�
� H�5\�H�81��,_��ff.����AVAUI��ATUSH��H�5�� H��H��pdH�%(H�D$h1��a��H�5d� H��I��H�H�D$@�Q_����u=������u
H������rH�؃�H�����1�H��裩��H��H�5	� H���_�����H��H�5�� �`��1�L��H��I��H�H�D$H���1�H��H�t$���H�$H9\$� HM\$A�L�-�� �H�5��H�� I�UHB�H�{�Ѧ��I�UH�|A�H��H��H�5ŠH�D$P覦��L��L��H��H��H�H��H�D$X�ʈ��H�EA�v$H�D$H�H�D$I�H�D$ ���u1�H���{��H�EH�L$hdH3%(��H��p[]A\A]A^�fD�/H��L����a��H��u��d��DH���H��
u<H��謦��H�����@�C$1�H��Hi�ʚ;H��H�U�T� 1����]|���c���H�ڃ�H���F���H���<���H��tH���@���I�D$�H��H�4��ʺ��H���"����]��ff.�f���AWAVAUATUH��H��SH��H���H�T$HdH�%(H��$�1�����H�H�|$H�|$��	H��H�����H����H��H���H��t|���d��tnH����`��f(�fT
U�f.

��"f��1�f/��…���H�t$���>���1�H��H���y��H��f�H��uH�t� H��H�8�f��f�H�������w�H��Hc�H�>���{]��H�D$����H�t$1�H���¼��H��t�H��@ H�\$H�\$f�D$>H��H�\$f���dA�H��� �H�5���H��ϣ��1�H��H����x��H�L�C H�\$@A�@ ��f�����L��H�L$XI��I�܋p$�H�L$0H���������A�x$���DH�@H��H����w"��f.�H��H��H��H��H9�w�t7I�@��H��H��H������@H��H��H��H��H9�w�H)�H��L�l$H��?H1�H)�I)��x[��M����I����H�t$L��A�!��I��H�@H���L�d-I����L��A���x�_��Lc�M���S�	L��L���~���I��L��L��H����M�D$ I��A�@ ��f����bI�G A�x$�p$�������1Ʌ�����Z��L�l$H�t$L�����I��H�@L���L���X��I��H�@H��.���H���X��I��I���(���H�L$0H�T$PL��L��H�D$P�w���H����H�w� H��uf��H�=���^��H�X� H��t�L��H��L���%]��I����H�5� H���X��������H�C �P f���Jf����@f������H�|$H��� �A�H�5�H����1��@$H��H�@f�H H�\$X1�H��H��v��H�H��$�dH3%(��H���[]A\A]A^A_�f.��z���1�1�H���/����h���1�H�����H�������R���@1�L�L$(�f��L�L$(A��H�D$ H��� H�5a�I�yH��5���L���H�����I��H�H�D$`趸��L�L$(I��H�H�D$hL���H��tL��A��u#I�����tI�$��H��u
I���IF�L��L�L$(�\���I�VA�H�5��I��H�H�D$pI�D$H�DI�UH9�H�JHF��H�|�	H�� H�H��k���L��L��H�H��H�T$xL��蒁��H�|$ �e����t��L�L$(L����L���Ps��1�L���Vt��M�e���D��V�����fDL�d$P1�L���)t��I�<$�p��I���}���L�|$@f�|$>�I�G �p$��tAH�@��H���������H��H��H�����8f�H��H��H��H��H9�w�H)L$H�@H�\$H���H�DH�t$HL���H�D$H�4������O�l-����fDH)��.���H�|$H��� �H�5*�A�H��
����H���@$H�@f�p �������(���H�|$�T���h���H�|$HH����@�����U��Hc�H���}��H�|$@L���������H��H�t$X�H�D$X�f�H�5� H��H���V��L�t$H�5� H��L���V��I9�u!H�C �H�\$f�P �<����\Z���r���H��H������H�C ��H�|$@H�L$XH�T$PL��H�D$P�ƫ��H����H��� H��H��u�H����Y��H��� H��t�H�|$@H��L���qX������1��b��H�{A��I��H�4� H�5��H��}���H�|$@�H�����H��H�H��$����I��H�H��$�L����H��tH��A��u"I�����tI���H��u
H���HF�L��觴��I�UA�H�5�I��H�H��$�I�FH�DH�UH9�H�JHF��H�|�	H�g� H�H�贛��L��H��H�H��H��$�L����}��L����a���+q��H��H�����o��1�H���p��H�E���H)D$����H�\$P1�H���p��H�;�����v���H�=� H�5^}H�81��\R���r���RS��f���AWAVAUATUSH��HdH�%(H�D$81���~oI��H���u_H�L$H��H��L��H�$褩��H��tWH�$1�H����o��H�;�9��f�H�L$8dH3%(uiH��H[]A\A]A^A_Ð��tY���U��@H�Q� H�-�~H��uD�H���cW��H�,� H��t�H��H��L���U����bR��H�~H���5���@��t&�IW��Hc�H���JuH��L�����K�����Q���ؐ1��9`��L�5�� H�}A��H�5�}I��I����L��H�����I��H�H�D$�B���I��H�H�D$H�؃�H��tH���u"H�����tH���H��u
H���HF�H�ߺ��I�T$A�H�5T}H��H�H�D$ H�CH�DI�UH9�H�JI�HF��H�|�	H��
���H��L��H�H��H�T$(L���1{��L���9_���n��H��L�����l��1�L���m��I�E�����Np��ff.���AWAVAUATUSH��HdH�%(H�D$81����gH��H��������OL�fM��L��A�����5P��H�H���?�dI����L��M�����YU��Lc�M����71��`^��I�|$A�L�5�� �H�5|I��I����H��H�����I��H�H�D$�h���H��H�H�D$H�؃�H��tL���u"H�����tH���H��u
I���IF�H�ߺ����H�UA�H�5{{H��H�H�D$ H�CH�DI�UH9�H�JI�HF��H�|�	H��1���H��L��H�H��H�T$(H���Xy��L���`]���l��L��L�����k��1�L���#l��I�E�f.�H��H�����H�L$8dH3%(��H��H[]A\A]A^A_�f���S���Q���H�L$H��H��H��H�$�[���H��uLH�_� L�%�zH��u�L���sS��H�<� H��t�H��H��H���	R���o����N������H�$1�H���\k��H�;����J������PQ���;N���m��fD��AWH��AVAUATUSH��H��H�|$0H�T$(dH�%(H��$�1ɨuD���H�������H�D$(H�H�D$��H��
��H�|$(��N��I����L�d$(I�M����H��H����H��H���H���CH���:���,���(H���;Q��f��1Ҹf.�f(�fT����E�1�f/���f.9��1�f.����1��@���H�s� A��L��H�5�xH�讔��H��H�D$x�1�H��H��C$H�Cf�S �i��H�H��$�dH3%(�iH��[]A\A]A^A_�DH��t@H��������XH���Hc�H�>��1�H�����H��跬��H��H����H�� H��H�8�V��H�� H�5TxH�81��K��H���P��H��$��H��HDŽ$��<���H�����bM���xH�5I� H���AK����t�H�k 1��M �Af��������f��@��f���@��	�f�������p����H���FJ��H���nP��1�H�H����H��?	�����H�	� H�5�uH�81��@J��H��1�H���H��?���L��H�����uʺL��H��肫��H������f.���f/�s����	��1����	H�Y� A��L��H�5�vH�蔒��H��H�D$xH�1��C$1�f�C H��H�C�g��H����1�H���g��H��� H�]A��H�5w�H��.���I��H�D$HH�D$x1�L���Gg��I�EA��H�5�v�H�D$HH��� H����I��H�D$PH�D$x1�L���g��I�EI�L$H�L$H�D$PH�D$@H�D$xH�@I�L�d$8�^H�D	�M$H�D$@H�D$ ����H�EH�<�H�|$ H����w0H��������̺�f�H��H��H��H��H9�w�H�|$ H�D$ H���hL��$�H�ؾH��L��H��u1���G��H��� �L��A��H�l$@H��ސ��1�I��H���f��I�4$H��H����H��H�t$HH���2��H�t$HH��H�l$@I���=��H��H���aH������M��Lc�M���c��L��H���r�I��H�D$XH�D$xH�T$@L��L�����H�D$XH�D$`H�D$xH�D$hL�d$`H�D$xM�L$ L�d$hA�A ��f����3L��L��H�@H��������̋p$E�A$���^f�H�@H��H����w"��f.�H��H��H��H��H9�w�E��t6I�A��H��H��I�����EH��H��H��H��L9�w�H)�H��L�|$H��?H1�H)�I)�M����H��H�T$@H�|$XL�lI����L��A�!�c��I��H����H��L�,hI����L��A�����L��Lc�M������L��L�����H��H�|$`H�t$hH���Z��H��H�D$`H�D$hL�H A�A ��f�����H�G E�A$�p$�������1�E������L�|$H�T$@H��L��H�|$XL�t$8L�lL�|$���I��M����H�D$L�tH������f.�L����D��I��I������H�L$xH�T$pL��L��H�D$p轜��H����H��� L�5�qH��u��L����J��H��� H��t�L��H��L���iI��H�������H�@L��L�|$M�4����I��M���<���L���!D��I���I���f��;E���i���fD1��S��I�A��H�D$H�ֶ H�5GqH������H�����L��I��H�H��$�蝥��I��H�H��$�L���H��tL��A��u#I�����tI�E��H��u
I���IF�L��L�T$�E���L�T$A�H�5�pI��H�H��$�I�RI�EH�DI�VH9�H�JHF��H�|�	H�� H�H��M���L�T$L��L��H�H��H��$�L���ln��H�|$�rR���a��L��L�����/`��1�L���5a��I�6�0���DL�l$p1�L���a��I�}�`���H������L��DH�t$P���H�|$ H�D$`�7���H�T$(H�|$0����H�\$ H��H�@H��MH�|�H���������1�H��H���`��H�3H�����H�|$`H����������H)�����H�|$��A�����H�L$xH�T$pH��L��H�D$p���H����H�� H�-#oH��uD�H����G��H��� H��t�L��H��H���F��I���b���H�D$ ���B���*���1���P��I�~A��I��H�1� H�5�nH��z���L��H�����H��H�H��$����I��H�H��$�H�؃�H����L����u
H�������H�ߺ踢��I�T$A�H�5nH��H�H��$�H�CH�DH�UH9�H�JHF��H�|�	H�w� H�H��ĉ��H��H��H�H��H��$�L����k��L����O���;_��L��H�����]��1�H���^��L�e����H���H���E���I���IF��3���H�\$p1�H���y^��H�;���I������H�|$ ��?��H������1�H��踡��H�����`��	���������)A��H�ڲ H�5;kH�81��@��1�1�1�1�1����H�˲ H�5�jH�81���?��f.���AWAVAUATUSH��xdH�%(H�D$h1����/H��L�>����H�����H������H��H�H�D$@H�D$H�CH��H�$f�{ ��H�D$0L�-�wH�D$M��A��u>M��I����M��u,L����C��H�5�jH��H�k� H�81��?��f�I��t�I��t�I��4t�A���hA��t�L����C���D$�?���L$f.��1�+��wf/���f/
�w���H,�L�|�?���fD�������B���I��������"���IcD�L�>��L���C�����H�����tH��H���H��t��3H�5� H�L$8�H��H�D$8�@��H�������������L��H��?A��u@I���H��
�"	L����H��t
H����L���B��f��1�f/���D���A�A��C E1�f�����L��A�H��?���&L��H��M���O
L��H���H��tH��t	M���H�5� H�L$8�L��H�D$8�?��H�������������H�s� A��H�H�5�i��H�5Y� L���Q=���������H�t$L���H�D$0�^����=L��H���N��H�������L���ڲ��I���+���f�H������Q���H����������l��
�0���L���;A��I�����H�����tH���H��t
A���dH�5� H�L$8�L��H�D$8�>��H������������kL���A��I�����fDf(���<��I���p����H�1� H�<$A��H�5�hH��k���H��H�D$01��C$1�H��H�CH�f�k �qY��H�H�L$hdH3%(��H��x[]A\A]A^A_�E1��C ��f���uXA�������M����L����H���L����?��f��1�f/���E1�����H���������f�M��I��M����L��H���H����M����M���D$A����H�5j� H�L$8�L��H�D$8�=��H�������������H�ܬ A��H�5�gH�H�<$����1�H��H���9X��H�������D$M���~���I���������b��
��M���yH�5�� H�L$8�L��H�D$8�c<��H������������gH���I����H����������H�������������
�_���H�4$�L�����H�$H�L$�D$I��H��H�H��HD�H�$�C ��f�������A�������E1�I����������I���H��
��L����H�����H�����H�L$8��<L��H�D$8�g;��H�������E1����X���H���k>����`���H���W������E1�L��H����������L���9>���t	H������I�������E1�������
�c����C f���sf����iM���bM����I�������I���H��
��H��艤��H�Ũ��	H���H��tH�����t
@����H�5�� H�L$8�H��H�D$8�O:��H������������@���L�d$8��<H��H�D$8L���:��L����H������L
L��H��?H��u;I���H��
��L����H��t
H���9L���<��f��1�f/������L
f�{ ����I�����
�]
H�t$0�L���:��H�D$0H�Ѓ������H�Y� A��H�5-dH��x����I�1�I�������L��L�D$�;�������H�L�D$H������L���0<��������H�H������x���fDL����#6��H���K<�����HE1�E1�H��� H�<$A��H�5cH���~��H��H�D$0f�{ H�E��A��E$H�EfD�U 1�H����S��H�E�f���L��M��I��H������L��H���H����M����I��A�������L��H�H���������L���m:��I��A������H�E1�H������L���;��I��A����H�E1�H������w���fDM����M������I���������I���H��
����I�����
��H�t$0�L���8��H�D$0H�Ѓ�������A������E$H�EfD�] �����L���q4��H���:������I����IE�H�� H�f���<A���H�5Ea� }��H�I��HcD$H�T�@�C �Pf����gM���`f����M���	A�D$$�I�D$fA�|$ H�|$�}1�L����Q��I�$�i���M��A����M����L����H����L���8��f��1�f/�������f�{ �����M���`M�������I����������I���H��
�r���I�����
�cH�t$0�L����6��H�D$0H�Ѓ�H��� H����,A������E1��c���H������I�������������
�������I�EH�D$(A�E ��f����O���H�@H�$H�L�a�NH�-� H�3O�d$L��H�}�T�H��I�}H��L�����H�$H��H�@H���H�T	H�}H�����H�T$(H�T$0H�T$(����1�I��������L����7�������H�����������M���D$�W���H�L$8��<L��H�D$8�h4��H����������'�f���uf����f�������H�{��M���{��H�D$����I��I�D$��H�5K^H�|��n����H�50^H��H�@H��H�|	�n���H��L��I���fR��I��t{�H��H���PR��I����A��	fDI��H��H��L���׃���L��H���R��K�6I9�s�L��H��L��L��I)�誃���L��L����Q��M���H�|$��oM��tL���\2��H���T2��H�|$�����A�D$ f������f���u���f����k����N��H�$L�����QH���R���L��H��M����L��H���H���N���H���E���L��H�H�Ѓ��,���L��H��?�Y���L��H���k���I�����H�|$�D$��M�o �y���A�D$$�I�D$I�D$fA�D$ ���H�$H�|$�L��H�AHE�1�H�$���I���(�A�D$ ���H�<$��.��H�����L����.��H�-�� H�3H��H�}��L��H���.��I�����L��H��M����L��H���H��t	H���H�k� H�A��H�5<\��H�J� H�<$A��H�5�[H��w��f�{ H�������M����M��u
I�������H�<� H�5%ZH�81��s.��H����������H������(������
������]������#����c���H�CH��A�H�5[H�<�H�H������I������8���I���H��
�L����H���(���H������H�L$8��<L��H�D$8�?0��H�������������H���������M������A�D$$L��I�D$H�Ѓ�	�M���|�����fA�T$ �S���A�D$$1�I�D$fA�L$ �@���L��H��?H��u;I���H��
��L����H��t
H���L����1��f��1�f/����������H�L� H�<$A��H�5�YH��u��H��I�����
��H�t$0�L���20��H�D$0H�Ѓ�����f�{ �E$H�E��f�E �s���H��H�H���������p���H���8�������H���1����r�H�H���e�H���1����U�H�H���H���fD�����L��H�H�Ѓ�����L���+��H���1��������M���lI���������L��H���H��������s���DM���A���Z���A�D$$�����I�D$fA�t$ �U����H�����L��觌���D$H�H�@H�T$HH��H$�H���H�D$���A�D$$A�I�D$fE�L$ �������fA�D$ ����H�{�+����{$�!���fA�D$ f�{ A�D$$I�D$I�D$�����A�������fA�D$ �����fA�D$ ���s���A���W���A�D$$A�����I�D$fE�D$ �F���I������b����)���H�� L��H��L���%U���H��L���EK���g���I���H��
�e������f�{ �E$H�E�l���f�E ������u�L��H�H�Ѓ��)��������L��H�H�Ѓ���H�F�H��H��I��H�D$���H��H�H�D$@I�����H�D$�tH�H�$����H�|$�N+��H�$���fA�D$ ���2����L����(��H���/�����(���L���<L��H�D$8�}+��H�����������L���<L��H�D$8�N+��H��������������L���p(��H���.�����a��)��ff.���H��H���H�t$H�t$��H���ff.����AW�AVAUATI��H�����USH��xdH�%(H�D$h1�芉��H��H�H�D$@H�EH�<�H�?L��A������-��H�H����H��A��H9�H�5�THC�H�:� H�H���p��I��H�H�D$H�E �ƒ�f���yf����of������H�}��I�E�H9EH�5�TH��I��LCeH�<P��d����H�5�TH��K��I�<DH��sd��H�t$0H��H�|$8I��I�EH�D$�u/��L�t$0�D$8H�r�q�qL��L��H��L��H��?H��H�9��8��8H��H)�H�L$0H)�H�I��H9�t)�D$8��_H��I���^�I��?I�I��D$8f���Q�f.��\f.��$f(�fT�_f.p_�f.���f/�f(�wfW~_�
N_f/����\_E1���^�I��f/�s�M�M1�I�}$�T$(�D$ J���d$L�L$��'���D$ f��L�L$�d$�T$(f/���M����1��f�I9����Y�f���H,ȉ�A�L�$H���H*��\�f/�w�I9��gf/�L�H������h�YºM�MfA�U M�}�H,�A�T�$1�L���D���D��%���5���fD�H��L���PF��1�L���C��I�EH�\$hdH3%(��H��x[]A\A]A^A_��E1�1�H�5DR� A�E$I�EfE�U �]5����R����A�E$I�EfA�M H�t$Mu�H��L�<�HF�I�EH��I��dH�C�dLL�E1��,�L��H��L���-H��I��L��L���iE��M9�tbI�EH�H9D$sH�D$I�EL��H��L��H�CH���O�������L��H��L����G��H�5�� L��H����v���C ��f����r���A�E H�߉�f��1�)�fA�E H�D$I�E�m%��M�������L���\%���w�����}$����H�}�����A�A�E$I�EI�EfE�M �3���f/�A�E$I�E���fA�} ����1�f/�I�A��������Y�fA�U 1�M�MM�}�H,�M����������fDE1�1�H�5%P� A�E$I�EfE�] �U3������
�[E1���[f/��q����Y�I��f/�w��[���D�����fA�u ����f�E1�A�E$I�EfE�E ���1�����'#���B���d$�'��f���d$������U�SH��dH�%(H�D$1��!���H�=gO�'���H�=pOH��� �'���H�=qOH�ؕ �{'��f�f.�� H��� �������H�5�N�^����H�55O�H�� �^��H�= OH�� H��� H�0�B'��H��� �����H�5���H�=�NH��$��H�;�H%��H��tQH����H�������<��H�&� H�8�<�H�A� ��^�Y��� �$���H������dH��u�H�8� H�8H�5qNH����%��H�;�H�s��H�5WN�+$��H�;�����H��Z��H�5�L�$��H�;�����H�QR��H�5pN�#��H�;1�H�i(��H�5N��#��H�;�H�^q��H�5N��#��H�;1�H�&0��H�5�M�#��H�;1�H�^@��H�5�M�#��H�;1�H�6/��H�5�M�z#���H�=�M�y ��H�;H�5�MH���w%��H�;��5wH�5�M�c%��H�;��H�5�M�O%��H�;�H�5�M�;%��H�;�H�5�M�'%��H�;�	H�5�M�%��H�;�H�5�M�$��H�;�!H�5�M��$��H�;�H�5�M��$��H�;�H�5�M��$��H�;�H�5�M�$��H�;�H�5�M�$��H�;�	H�5�M�$��H�;�H�5�M�s$��H�;�
H�5�M�_$��H�;�H�5�M�K$��H�;�H�5}M�7$��H�;�H�5rM�#$��H�;H�����H�5oM�
$��H�;�H�5nM�#��H�;H�����H�5mM��#��H�;�H�5nM��#��H�;H�����H�5oM�#���H�=uM���H�H��H�$�d���H��H��� �%���H�=�J�d��H�H��H�$�0���H��H�v� �����	H�=M�0��H�H��H�$���H��H�Z� ����	H�=�L���H�H��H�$�ȼ��H��H�� ����H�=#L����H�H��H�$蔼��H��H��� �U��H�;H�� H�59K�"��H�;H�Տ H�5mL�"��H�;1�H�#��H�5YL�A ��H�;1�H�5���H�5�H�) ��H�;1�H�����H�59L� ��H�;1�H����H�5L���H�;1�H����H�5L����H�;�H�����H�5	L����H�;�H�W���H�5�K���H�;�H���H�5�K���H�;�����H�q��H�5�H�u��H�;1�H�١��H�5�K�]��H�;�����H�����H�5�K�B��H�;1�H�Ƒ��H�5qH�*��H�;1�H�����H�5lK���H�;1�H�&���H�5[K���H�;1�H����H�5HK����H�;�H�����H�53K����H�;�H�H���H�5K���H�;1�H�@#��H�5K���H�;1�H�����H�5�J�|��H�;�H�=���H�5�G�a��H�;�H�r���H�5�J�F��H�;�����H����H�5�J�+��H�;�H��v��H�5�J���H�;�H��v��H�5sJ���H�;�H�F���H�55G����H�;�H�+w��H�5�F���H�;1�H�s:��H�5,J���H�;1�H�[:��H�5J���H�;1�H����H�5J�w��H�;1�H�+���H�5�I�_��H�;�H�@�H�5�I�D��H�;1�H�H���H�5�I�,��H�;�����H�
���H�5�I���H�;1�H�u���H�5�I���H�;�����H����H�5�I����H�;�����H�?���H�5uI����H�;�����H���H�5_I���H�;�H�Y�H�5�E���H�;�H�����H�5�E�r��H�;�H�Ө��H�5I�W��H�;�H�����H�5�H�<��H�;�H�����H�5�H�!��H�;�H�r���H�5�H���H�;�H�G���H�5CE����H�;�H����H�5#E����H�;�H��H�5
E���H�;1�H�ق��H�5hH���H�;1�H�����H�5MH���H�;�H�f���H�5;H�j��H�;1�H�N���H�5*H�R��H�;1�H�����H�5H�:��H�;1�H�n���H�5H�"��H�;1�H�&���H�5�G�
��H�;1�H����H�5�G����H�;1�H�f��H�5�G����H�;�����H�{���H�5�G���H�;�����H�~��H�5�G���H�=�G���H�)� �H�%���H��H�5�GH����H�;�H�t��H�5pG�h���H�=hG�g���H�=gGH��� �O���H�=GH�|� �7���H�="GH�\� ����H�=GH�<� ����	H�=GH�� �����	H�=�FH��� �����H�=�FH�܉ ����H�=�FH��� ����H�=(FH��� ����H�=
FH�|� �w���H�=�EH�\� �_���H�=�E�N���H�=lFH�+� �6��H�� H�D$dH3%(�ZH��[]�@H�x���H�� H�8��H�y� H�8�|�H��� H�8�l�H�ɇ H�8�\�����f.�f�1�����u������u�������u�������u������x��� ��@D��ff.��1���t��uP��tU����f��u�����u������u������u������u����u� Ð��D�����ff.�f�H��(L�WdH�%(H�D$1�HcGM��E�A�M�Y�D����� ��)‰��
����M9�sTA�Q���tR��D�lj�A��)����A��I�A�D	�����?H�� I9�s
A�A����	�H�����H!�H	��1҅�urD�ǁ��?H�� H	�H�|$�D$H�D$dH3%(u_H��(�f.��D��1�)�����?H�� M9�sA�Q���HA��A	�L	���D�lj�1�����?H�� �[������ff.��ND�WA9���AWL�F1�AVAUATU�i�Lc�SH�_I��O�$0I�A�$E�D�HD��A��D$�E9���A��M��I��E1�1��I��A�S�E�
I��I��L�I�Չ�H�I�� I)�L��E�J�H�� H�у�M9�s�E�E���	I�V�H9�s$E�V�E��t�DD�
E��uH����H9�r�o�NA��A9���Hc�H��H�L��f�H9�sH��H���291t�rp��H�މD$�1��I��A�H��H��H�H)�H�ЉV�H�� ��M9�s�Hc�H���2��u*H�B�H9�v�J���t����uH����H9�r�o�D$�[]A\A]A^A_�@�w����D$�[]A\A]A^A_�1��DD�W�NA9��&�����fDUS��H������H�H� Hc�H��H��t8H�4�H�H���H�H��H9�u�H�:H���H�>H9���H��H��u�ٽH�5�� ��H�
m� �E�H�H�<�'I��H��I���H�>H���H�x� H��H9�t:H��H��H)�H��L�H= vЉٽ��E�H�H�<�'H������H�‰Z�jH�BH��H��[]�fDUH���SH��H��(�D$dH�%(H�D$1������D$I��fH~�fH~�f~D$H�� ������։ρ���EωL$����H�|$����u_�T$A�Q�T$E1���A�QA��A��E�A����������U�5)‰H�\$dH3%(L����H��([]�D�T$� )�����L$	�A�I����T$�DH�|$�^����T$A�A�A�� A�Q���w���-2�EIc�A�|�����A��A)�D��f������@AWI��AVAUATI��USH��LcoLcvE9�|D��I��Mc�I��Lc�C�.1�A9\$@��A|$�W���Hc�L�XI�,�L��I9�s@�H��H9�w�I�I��N�,�K�4�L9�r�^f.�I��I9�vKH��D�W�E��t�L��M��E1ɐI��A�P�D�1H��I��L�L�I�щQ�I�� L9�w�D�	I��I9�w���~�u�H�U���t�H���
��u��u�XH��[]A\A]A^A_��AVI��AUI��ATUH�nSHcFH�_D�gA)���H��H�H��
@H9��H��H���89:t���A�}����IcU1�D�`H�pI��L��IcVH�|��
�L��H���S�H��L�VH)ʋM�H)�H��A��A�R�H�� ��H9�w�I9�v;L��H��@H���V�H��H)�H��A�ӉW�H�� ��I9�w�I�q�H)�H��L�E��uf�H���A����t�D�@[]A\A]A^�DA��,���H��H��A�H��L��M��I�������1��)���H�@[]A\A]A^��H��t4HcWH�5`� ��~�)f�HcWH��H��H��H�<�H9�u��fD�{
��ff.�AWA��AVA��A��AUATUH��SH��D�e�E�E�A�\$9�~����9���z���I��H�xE��~#A�O�H��H�D�f�H���B�H9�u�H�|�HcEH�uL��A��ta� E1�D)�fD�D��H��H����D	‰W�D�F�A��I9�w�E��D�DE�E�eH������H��L��[]A\A]A^A_�D�I9�vץI9�w���f.�AUHc�1�ATUHc�SH��H��D�g��D�H��H�H�ʼnD�H��H�� A9��H��tD9c~&Icĉl�A�D$�CH��H��[]A\A]�f��C�x�E���I��HcCH��H��uH��L������Icĉl�A�D$�C�I�}H�s������fDAV��AUI��ATUS��H��������M��tNH�-~ H����M��E1��@�t.H�}H��t;H����t�L��H������L��I������M��u�H��L��[]A\A]A^�fDH��H������H��H�L���H�}I��H��t��=���L������H�.CH��4�1��j���I���>���f������H��H�qH�E1�H�E�H�-2} H������H��H�D$����H�D$H������ff.�@��AWI��AVAUM��ATUSH��H�t$dH�%(H��$�1��x��H��A�A�uH�D$(@��-�G@��Hc�H�>��f�A�u�D$0@������I��E1�@��0�@��L��σ�/����9�1�E1�E1��*C�4�D�tq�H���A���Ήσ�/����9�fA��~�A��Ӎ��TQ��ʐ�D$0f�H�D$H��tL�8�D$0��tfW�@H��$�dH3%(�6H�Ę[]A\A]A^A_�fDA�u�D$0@������f�H�D$H��t�L�8��I��A�u@��-�����D�D$0E1�@��0���A�u����<X�fA�]��t���H�=FB���H��t�I����0�	f�H�-$B�������?�D$I���D$ �!fDA��L�������T$H���JH)�f��I��E�u�����H*��Y��Y�A�XL$�L$�T$E��u��D$��M���7���~���1�E1�E1�f.���.���p�NЃ�	���L�PE���8
L�Ѓ�0���D)�@�H���8��0t��1�����Y��0I�¾�\$HC��I��D�4O1��	�A�uI��@��0t�@����A��P���D���@��E���D$HE��I��1��p@��+��@��-�H��1ۍ~Ѓ�	��L��1�E�����+\$HE��I�lj\$4E����D��f�A����H*�AN�f�D$A��	���A�H�5o?f��H��H*��Y��X��D$A����D��)�D$4�D$�����D$��tH�H�$?�|$�Y<��|$�d$�D$�z=4���D$�������D$�1�H�=�>D�t
�Y׾�Hc�H����u�fH~�@��HDD$H�D$H�Z>��H�\$H�؉�H�� -PH�� H	�H�T$�YD$fH~�f�D$H�� ��%�=�|�=�|��H���������D$H�D$�t$�t$ �@H���0��0t�~�1��:����x�n�H�pD�W�A��	w@f�D�D�H��B�lG��>D�G�A��	v�H��H)�H�����N��
H���݅�D���������\$�\$ A�P�9��81������A��	~�f����9��D�D$8��A��	D�D$8H��D�p�@��I��
A�	E9�}2E�H�H��E)�O�t
f�I��A�U��
H�ǃ�0���M9�u�H��D�d$H�|$41�L�|$`A)�DI�IljD$8H�CH�D$hH�D$|H�D$XH�D$xD�d$HH�D$P�{��I��HcCH��H����	H�t$XH�|$P�D$ ���I�����H��H�H�E�D$x���&	�|$HD�|$8D�,8�L$|+D$�43�����|�6)ȋ|$A�LD�A9�D�<��AN�D9�AODž�~)�A)�A)ŋt$H��~3H��L$L�B���L��H��H����L��H�D$@����H�D$@�L$LI�ą�~
L����M���I��D�\$4E��~�t$8L����I��E��~L��D���!���I��E��~H��D������H��L��L���@�HcU�xD�@I���@9��CH��H�pH�H�L
�
@H9��H��H���9t��M��L�|$`E����H�������H�T$ ��H�T$H�� A�Ё�������E�UE��u	����L��D�D$4�C�HcUD�D$4�HI��)х��\H��H�pH�H�L
�H9��?H��H���9t��+�|$���mD�������X��p�[fDH�P9�\$ H�D$�~D$�Y�fH~�f�\$H��uH�D$(�"L���.�L���&�H����H����L�����D$�_���A	������I��f��G����\$4��t��b�|$4��	D�‹\$4�%)�D)�ډT$9��*����H�T9�D$D)�Hc�)��Y�Hc��Y����@�D$HE��1��D$4I���q����D$HD��1Ƀ�߃�Eu#��f�	�D	������E��I��A�����@E��1�A�������H��A�w���DM�u	A�D$�L�t$8M�l
H�D$@H��D��f�I��A�V��
H�ǃ�0��M9�u�A��H�|$@H��H�D$8L�l8�2����I��E�uA��0t�A��H�=�8���H�������f��t6������D$�T$A��.��E�eE������E��H�=�8�D$ D���j����D$ H������I�����T$�5	H�-r8D���D$ ��E���^	A��H���T$�����T$H���-	H)�f��E�eI�����H*��Y��YR8�XL$f.T$ �L$z�u��D$ M��H�-�7�D$�	E�fI��A��H��M�����H��u��D$A���A��P����A�M�,)ωʉ�����1�)���I�����0��	���A��1�D������	w<��I���DB�A�UA��rЁ�/~܃�	w�I��A�U��0��	v�����~���D�D$HD��1Ƀ���<��A�zI�BD�W�A��	�-���I�����|$4�����D�d$HH�6�D$A)�Ic��^���D$�؉ƒ�tHc�H�
�5�|$�^<��|$���D$�<����t$������j�D$��E�H�51�@��t	�Y�H���u��fH~�HDD$H�D$��t:H�� �k�����)��~ �����4�B�7H��4H�D$�|$f��f.��|$ ����H�D$(f��"��f����H��$�L��D�D$L�5�H��$�H��fI~��D$@��A�W+U��fH~��L$@�$�+�$�D�D$L����L���D��H�� �H�� H	�H�D$@�~L$@�^��u5f/��SE�����
�2H��?H�t$H�� ���������t$��t_���wW�#5f/�r1�,��
Y2��t��f���H*�f(�E��ufWa2fH~�H�։�H�� ���)�H�� H	��d$ H�T$�T$fH~�H�� �����@H�� H�T$�D$�Y��X�fH~�f�D$H�� H���9�u�L$���?L����L����H����L�����l$�l$ ���fDD�|$8D�l$HA)�����fD�Y
4f(�E��ufWw1fH~����DH�t$hI�~�����H���DfH~����H�� ��)�H��H�� H	�H�L$@�~D$@�+���@M��L�|$`E����H�D$H��A��H�� �с�������A��t>�|$ fH~�H�� �����@H��H�� H�D$�X|$�|$ f�|$D�T$��������1������PH���t$H�T$H�� �T$H	�H�t$H�� �\$�������H�� H�T$�D$�Y��X�fH~�f�D$H�� �ց�������|v`H��������H9T$ �-H�T$�"����H�������H�T$ H����H���OH���
�/������P�|$H��H�� H	�H�|$���f��,�f��*��\�E����H�������H�T$���2f/������M��L�|$`���� /f/����Y
�1f(�fW*/���DE��1��D$H1����E1�1�E1�1��D$H1��p�����1f/��~���f/
v1���k���1��~���M��f����H�D$(�"H��H�D$�D$��E�����A���A��P������D��0�
�0����D$ ���HcT$4H��/�D$�Y��`��N���0�Z����FL$H����D�1��A�K��G�4���E�9�t��~��������D�ރ���L�������P�T$�D$H�� H	�H�T$�t$�t$ ��A�MI�����A���1���f�H�������H�T$ ��H�D$H�� I����D�¹������������H�� H	�H�T$�\$�\$ �{���1Ƀ��Q������G�F����T$��A��0�����I��E�e��A��0t�E���q�E������6/���D$ E�e�8����D$ �@��������D$���\$ fH~�H�� �����@H��H�� H�D$�\\$f.,�\$ f�\$����������H�D$���D�L$�����E��t�с�����w���k)ω���D9����������H��H�� H�D$�|$�|$ �6���H�D$(M��L�|$`�"H��H�D$�Q�H�\$�������H�����!�H!�H	�H�L$����M��L�|$`�7����� ����!�H�� H�D$����%����|���ff.����AWf(�AVAUATUSH��x�|$�t$H�T$(L�D$0dH�%(H�D$h1�fH~�f�D$H�� �Å�����f(�%�=��=f�f.���f(�H�t$`H�|$d�L$ �T$�����T$�L$ ��H����fH~�fH~Ћt$`E1�H�� ������H���?H�� H	�f��H�D$�D$f��*��Y
-�\�,�Y�,�X�,�X�f/��D,��1��)�D�p�A����Ic�H�5�+��f/���A���D$L�D$8E����E��� D�d$ E��D$�D$��	�����~	��1ۉD$�|$�����D$�D$H�������y�D$D$ ��D$\�����D$@O�����Hc��D$X�v��e���H�D$(����H�\$0A�0I��fD�H��tH�@H�H�t$hdH34%(L���H��x[]A\A]A^A_Ð���fH~��H�؉�H�� H	‰�%�H�T$�T$=�����H�D$(fH~��'H�������H�����	�	�nH�V)I���I�D�
H��H�����u�H�\$0H���7����5���@�D$L�D$8E���F���A�A)�D�t$8E1�E���5����P�|$�D$H���D$���9�D$\�x���D$@Hc��D$X�T$P�P�I��"\$X��
�D$ �T$P����
�É�H�)�����Љ�������f(��^<*H�5�(��t���t�Y��H���u��^��|$L��t�
'f/���f�ɋL$@�*��Y��X
�)fH~�fH~�H�� ��-@H�� H	…����t$ �|$@�,�f��H�T$�W�Hc�L�
P(�\$I�_�A$ыT$H�*ȃ�0�\����(�
)A��^��\�f/�w{�-`&f(��\�f/���
���D�G��%:)I�T�f(��\�f/���
H9���Y�f��H���Y��,��*؃�0�C��\�f/�v��F�D$ �{f��D$��T$�x��|$ I�NjD$d���T$�q������D$�\$\�\$@�D$X�D$P3E��u	�6+D$`�\$8�A���d���D$HI��H�I�E�t$8��~E��~D9���AO�)�)�A)Ɖt$8�t$��t7�D$H���v	L����H��H��I���`��H��H�D$����H�D$H�ſ����H��H�D$H�H�GE���B�|$XtH�������H�D$�V
�D����� )ƒ���)�T$8�Aօ�~
H������H��E��~H�|$D�����H�D$�D$L����H�\$HcC9E�}H��H�uH�H�T��H9��_H��H���9t��K�D$ H��1Ҿ
�X���H�ŋD$H�����D$\�����D$@L��D�d$@L�t$��H��1Ҿ
����H��L��H��H�������0�C�D�EE��u
�}����D)�D9�|�A��E1��H�����H�t$H�ŋUHcF)…��0
H��H�MH�H�T�
�H9���H��H���290t��S��n
�

f.��t$`�T$d�2�� ��� )�f~���f��A��H*�fH~�fH~�H�� �����H�� H	��I���@D��D)d$8��D�d$ E1�D$����D����aH�_#I���N�f��
H��H�����u�H�t$0H���J���H��B���f��D$L�D$8E���W�������f��@)���f~������	������D$H���f���A*�f.�z�����A����������@D�t$@E���bD�\$H�D$ E�������D$8���L�l$E����	�D$@M��L�|$@��I�\I��H�\$8�H�t$L���s��E�g�ōX0IcEA)���H��I�OH�I�T�fDH9���H��H���:98t�A���H�t$H�|$�^���P��� 
A�����HcPE�GA)�u>H��I�wH�H�L�f�H9���H��H���99:t�E�A��H��D�D$H�e��E��D�D$H���|$�eE���xI��A�^�L;t$8��L��1Ҿ
�q��1Ҿ
L��I��L;l$���T��H�|$1Ҿ
I���@��H�D$���fDH��D�D$H�����|$D�D$H�B	�D$����E���5	D	��a����l$L��L�|$@A��D�MI�^E��u
�}��E�����H�����H�t$H�ŋUHcF)…��c	H��H�MH�H�T��H9��`	H��H���290t�riA��9����D�d$A��1�PfDH�t$H�|$�y���H���!���H�������|$��A��L��I�^L�|$@A��9�<A��E�&M��L�l$��fDH�t$H�|$���D�PE�������A��������I��H�D$����f���*��Y��X
Z!fH~�fH~�H�� ��-@H�� H	�fD�\8!H�T$�L$f/��;fW
3f/����D$Pf�T$�|$ �D$d������HcD$ H�x�‹D$����D$@����5�Y
� A�H�D$f/L$��D$ I�_A�1H�|$�k��M��tL���^��H���V��H�D$(�t$ ��0H�D$0H���c�H��[�f��|$�\$H��	ڈT$X��������\$8E1�����f.��D$P������D$8A��x���D��T$ H�w�ډփ������Y���H�5f(�1��@��t	�Y����H���u�@���a���f(��X���D���x���|$XH�D$��E1�H�t$�F�D$X��H��|��[��� )‰����D�D$����������\$@����H�|$1Ҿ�K���UH��H�D$Hc@)…���H��H�MH�H�T�H9��[H��H���9t��G�$���fDf(¸�V�f��t$H�����H�����@�D$X��D$\�D$@�D$���Y�f�f.�����L��fD��
�f(��X�f/�w�\�f/����D$P��	������C��t$ �DL9��f�B�H��H�S�<9t���h���f(¸��H�������H�t$H���H���H��H�� ���6�����A��E��A��#�������H�D$E1�D$L���؉D$ ����L������I������H�D$H�� ��u����HcT$ f(�f��I�_H����H�փ��^��t$ �,�f��*���0A��Y��\�f.��$�D$@�����D$@�%���I�L�fDH9����Y�f�H��f(��^��,�f��*��P0�S��Y��\�f.�z������H�À{�0H�C�t��y�A����$����G�H���%LI�|�D�C�H��H9�������Y�f��f��H���,��*ȃ�0�\�f.�z�������@�S��oI9��(�P�H��H�C���9t�|$P��t��t
���DH�|$���M���O���M���>���M9��5���L������(���fD�S�H��H�C���0t��A�9�9M��L�l$��������t$ �x����t$@������|$\���?����%8��f�ɋ\$ �*��Yčs��Y��X
fH~�fH~�H�� ��-@H�� H	��3�A��D$��D	�������.���f�H�D$E1��=���A�1�D$ ��A�}���H��IcEH��H���`�H������H�D$����A�0L���C��D$ ���A��L��M��H�\$8L�|$@L�l$��A���S��Y������L��1Ҿ
�u��I�ŋD$\���6�D$@����X�f/����A�H�������D$�������D$\�(�D��A��I�^��L��L�|$@A��9�F�����1��DO�E�&M��L�l$���H�ljl$A��L��L�|$@���A����E���5����l$L��A��L�|$@�uI�^����������D$\�\$ �D$@�,������������f�H�{I�u�����f(����f.�H�������������������A����������3�����D$�����{����D$\���A��������
����T�����������T$f��D$ I�Of(��^��,�f��*��P0A��Y��\�f.�{'�|$@�U���H��������<)‰��[���H��������ff.���AWI��AVAUM��ATfI~�UHc�SH��H��(dH�%(H�D$1�fH~�H�� �����f(�fT
f.
���f.���f.��DL��H��4����L�d$�T$�Y�fH~�fI~�H��4-A��������}Lc�Hc�� ��L��U�H�� ��
�b��N�0H�HE����1L9������fDH��EM��tI�mH�\$dH3%(�H��([]A\A]A^A_�D-�A����d����A���������<L��E��N�0�1H�� �
����	�H�� I	�L�L$�D$�X��\�fH~�fA~�H�� ���)�A��H�H��L9��1������H���������4;@�q�D��A����	�L9�u؅������x0����
�H�Հ|(�0H�U�t�����D%���E���H�� I	�M�����A�����	����nH�
��IH����1H��H��@�2@��u�M���|���I�U�s���A�����������A������0f�M���8���H�PI�U�+��������A����������aH�
)�NH���@�1H��H��@�2@��u��[��������4������!�����H��H��� can't be coerced into BigDecimalComputation results to 'Infinity'Computation results to '-Infinity'Computation results in 'NaN' (Not a Number)Computation results in 'Infinity'Computation results in '-Infinity'ERROR(VpDivd): space for remainder too small.second argument must be true or falsefirst argument for BigDecimal.mode invalidinvalid value for BigDecimal(): "%li"Conversion from String to BigDecimal overflow (last few digits discarded).can't omit precision for a %li.load failed: invalid character in the marshaled stringBigDecimal to Float conversionBigDecimal#precs is deprecated and will be removed in the future; use BigDecimal#precision instead.Undefined operation in BigDecimalCmp()can't convert %s into BigDecimalUnable to make a BigDecimal from non-zero imaginary numbercan't convert %li into BigDecimalZero or negative precision for expComplex argument for BigMath.logZero or negative argument for logwrong argument type %li (expected scalar Numeric)a non-integral exponent for a negative base%lue%zd%sExponent underflowExponent overflowComputation results to 'NaN'negative precisionDivide by zeroargument must be positiveRSTRING_PTRinvalid rounding mode: nilinvalid rounding mode: %liinvalid rounding modeexponent overflowprecision too large.#0divided by 0divmoddiv%zu:to_i**F<=>>=<=remaindertruefalseto_strStringprecision must be an Integer21E%ld-0sqrt of negative valuesqrt of 'NaN'(Not a Number)#1BigDecimal.exception_modeBigDecimal.rounding_modeBigDecimal.precision_limit.5BigDecimalnewinterpret_looselydouble_fig_loadsave_exception_modesave_rounding_modesave_limit3.1.1VERSIONBASEEXCEPTION_ALLEXCEPTION_NaNEXCEPTION_INFINITYEXCEPTION_UNDERFLOWEXCEPTION_OVERFLOWEXCEPTION_ZERODIVIDEROUND_MODEROUND_UPROUND_DOWNROUND_HALF_UPROUND_HALF_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_EVENSIGN_NaNSIGN_POSITIVE_ZEROSIGN_NEGATIVE_ZEROSIGN_POSITIVE_FINITESIGN_NEGATIVE_FINITESIGN_POSITIVE_INFINITESIGN_NEGATIVE_INFINITE+0+Infinity-InfinityNANprecsprecision_scalen_significant_digitsaddsubmulthashto_sto_intto_rsplit+-+@-@/quo%moduloclonedupto_fabssqrtfixroundfracfloorceilpower===eql?<nonzero?coerceinspectexponentsignnan?infinite?truncate_dumpBigMathexploghalf_updefaulthalf_downhalf_evenbankerceilinghalf��]���������D�p�������������/���p���p�������`���a0���0���0���0���0���0��1���0���0���0���0���0���0���0���0���0���0��`1���\������������������������������������������������������Y���Y���Z���������������������������Z���������������Y��|Z���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[��DZ���Y��DZ���[���[���[���[���[���[���[���[���Y���[���[���[���[��lY��`W��X��X��X��X��X��PX��X���W��X��X���X��X��X��X��X��X��PX���[��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��2��h[��X[��HX��2��2��2��2��2��2��2��2��@[��2��2��2��2��cY���Z������������������������������������������������������X���W���W���������������������������W���������������X��Z������������������������������������0W��0W��KX������������������KX����������0W���Y������������������������������������������������������W���V���V���������������������������V���������������W���Y������������������������������������V��3W��V������������������3W����������3W���X��v��v��v��v��v��v��v��v��v��v��v��v��v��v��v��v��v���V���U���U��v��v��v��v��v��v��v��v���U��v��v��v��v���V���W�����������������������������������������������������U��U��V��������������������������V��������������U���X��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^��^���U��tT��tT��^��^��^��^��^��^��^��^��tT��^��^��^��^���U��hW������������������������������������������������������S��U���S��������������������������U��������������U���k��Ql��Ql��Ql��Ql��Ql��Bp��Ql��oo��Ql��Ql���l��Ql��Ql��Ql��Ql��Ql��Bp��Q{����������������������1}�������|�����������|����������������������t}��~���0���0���0���0���0���$���0�������0���0������0���0���0���0���0���$��������&�.>�C��]r2<��������?��C��e��A�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������X�������p���}NaNInfinity��ؗ�Ҝ<3���#�I9=��D��2�����[%Co�d(h��7y�ACn����F��?�O8M20�Hw�Z<�s�Ou�?$@Y@@�@��@j�@��.A�cA�חAe��A _�B�vH7B��mB@�0�B�ļ�B4&�kC��7y�AC�؅W4vC�Ngm��C=�`�X�C@��x�DP����KD��M��D0123456789abcdef0123456789ABCDEF��7y�AC��?�?@�����A�5�����?5�5�?�5�����?�?aCoc���?��`�(��?�y�PD�?<�s�Ou$@@@`;L�����hH������|���
V��,��$ ����������(���8�������������(���<��TH��|����x������8���`H����������x�����0���D���|���8���������d(�x���8�����(�	(�P	H�l	X��	��	��
��P
��d
���
��������������(����L(��������X����(��(
��h
����
H
��0���\����(���h������h���H ���� ��$�!��X8%���('����)��(*��(�*��D�*��`,���X,����,����,����,���x-��x.��8�.��T�.��l�/���H0���1����2��$�3��P�7���:���8=��8�>����@���xB��(8E����I����J��xL��TxM����S��8�S��L�S��`�S��t�S���T���T���(V��8W��PHY���XZ����[��@�\����_����c���d��d(g���xq��4�s����v����� H���px����ȡ�������X���د��0���L������H���h���Xط���(����(�����D(����������( zRx�$����FJw�?:*3$"D�����\H��pT��
�P���L��N��������A�V������t��YA�$���+A�A�G PID0���q<D0���B�B�B �D(�A0�l
(A BBBBd����B�H�B �B(�A0�A8�G`M
8A0A(B BBBAW
8A0A(B BBBE$�H��`A�e
JD
L_(���UB�A�A �}
ABD(@���oE�A�D0X
AAAl���PA�a
N_(�(��nE�A�D0W
AAA(�l��kB�D�D �|
CBE�����4�L����C�D xAAC��L ��a��H0$��mB�E�E �E(�D0�D8�DP 
8D0A(B BBBF|H���T���A��
DVd�����B�E�B �E(�A0�A8�D��
8A0A(B BBBA�
8F0A(B BBBEL��c,����]WD0��eX���SA�a
Nb8x����B�A�D �K
JBJK
ABJL� ���B�E�E �D(�D0�M
(A BBBH\
(D BBBJ���AAK ���04����F�A�A �D0w
 AABI`hL���B�B�B �A(�A0��
(A BBBDi
(A BBBHX
(A BBBA4����7B�D�D �Y
DBGACB����lL��B�B�B �E(�D0�D8�G��
8A0A(B BBBK�O�P�B�u�O�P�A�|���B�H�B �B(�I0�D8�G��
8A0A(B BBBA�
8C0A(B BBBF<
8A0C(B BBBA$zRx��������,t���4DP��F�D�A �e
ABEj
ABK@|��=B�K�B �A(�A0�GP�
0A(A BBBE���9Q�g ���uN�D \AA�4D��A�A�G N
DADQ
DAA@8���H�A�A �g�A�B�T ����
ABG|8�GG�
F@�l��E�C�D {
IAG�
LACf
DAA<����F�L�B �H(�G0��
(A BBBAH	��uB�E�B �B(�A0�D8�Gp�
8D0A(B BBBG zRx�p������(&���P@�	�����B�G�O �D(�C0�D@h
0A(A BBBE(�	����A�A�GP~
AAGH
t���B�B�B �B(�D0�D8�G��
8A0A(B BBBK\
��W`�j
FF(|
X��>E�D�DP�
AAA�
l��PE�G BA��
����B�G�B �B(�A0�D8�G��
8A0A(F BBBAs
8A0A(B BBBAJ
8C0A(B BBBA�
8A0A(B BBBDH`����B�B�E �E(�D0�A8�N��
8A0A(B BBBF(�H���E�D�GPW
AAG0�����F�A�D �G`�
 AABAHx��]B�B�B �B(�A0�D8�D�{
8A0A(B BBBJ0X����B�A�C �J��
 AABA(�H��]A�I�N0�
AAH �|���E�D0m
AI����\H F
B�<��\H F
B(
���E�A�D`�
AAH@
t��GMl
GF`
���;Mmx
���)H]�
���(HZ�
���zHc
EI �
\��E�P`�
AD�
8��2E�l\��2Hf( ����E�M�DP�
AAA(L����E�M�DP�
AAA(x|���E�M�DP�
AAA0����F�M�A �DP

 AABG(�����E�M�DP�
AAALP ���F�N�B �B(�A0�A8�D��
8A0A(B BBBGHT$��fF�N�B �E(�D0�A8�DP�
8A0A(B BBBJH�$&��F�N�B �B(�D0�A8�D��
8A0A(B BBBIL��(���F�E�A �D(�H`�
(A ABBH�
(A ABBFL<h*���F�E�A �D(�H`�
(A ABBH�
(A ABBJL��+���F�E�A �D(�H`�
(A ABBH�
(A ABBJd�H-���F�E�B �B(�D0�A8�F��
8A0A(B BBBIe
8A0A(B BBBIHD�/���F�B�B �B(�A0�K8�N��
8A0A(B BBBE(�4���E�M�D0[
AAE ��4���H �
G�
E$�"����E�H�L0�GA46��E�A�JP_
DALq
DAEp@�6��5B�B�E �K(�C0�K`�
0A(A BBBF
0J(A BBBKI
0J(A BBBF zRx�`�����(���x<��t<��p<��(l<��<h<��Pd<��Ld`<��F�G�D �A(�N`�
(A ABBD,
(L ABBKL� >��F�B�D �G(�DPD
(G ABBIs
(A ABBGL�>��F�G�D �A(�N`�
(A ABBD,
(L ABBKLT�@��F�B�D �G(�DPD
(G ABBIs
(A ABBGL�`A��F�G�D �A(�N`�
(A ABBEd
(L ABBEL��B��F�B�D �G(�DPD
(G ABBIs
(A ABBGLDPC���F�G�B �B(�D0�A8�N�

8A0A(B BBBH0�F���B�D�C �G@L
 AABHL�lI��F�B�A �A(�F0R
(G ABBJv
(F ABBGD<J��sF�B�E �A(�A0�Q��
0A(A BBBG zRx�������(H���
L�<L��N
F�B�B �B(�A0�G8�J��
8A0A(B BBBAH�<V��bF�B�B �B(�A0�A8�D�r
8A0A(B BBBBL4`X���F�B�B �B(�A0�A8�D��
8A0A(B BBBCL��Z��F
F�E�B �B(�A0�A8�J��
8A0A(B BBBFL��g��UF�B�B �B(�A0�A8�D�x
8A0A(B BBBD$�~��$H [L<�~��HF�G�B �B(�K0�A8�D�E
8A0A(B BBBH,���$
E�F�D0�
AAE���R�4���s�����5D0�
Kl��R�H�B �B(�A0�G8�d
0A(B BBBEK0A(B BBBD������H8������$p$����A�A�F �DA(�����\A�I�G@�
AAFD�0���B�E�B �B(�D0�A8�D@�8A0A(B BBBL���hB�E�E �A(�E0�
(A BBBF@(A BBB\(���EHpd����B�E�I �B(�A0�D8�D@�
8D0A(B BBBF8�����B�G�A �D(�G0H
(D ABBJ@�����1B�D�E �A(�A0�F@c
0D(A BBBGL<�����F�E�B �E(�A0�A8�G�,
8A0A(B BBBGL�ر���F�F�B �B(�A0�A8�D�N
8A0A(B BBBBH�x��VF�E�B �E(�F0�D8�G`
8A0A(B BBBFGNU� 5�4�!�\�\	�\	����6\�Z�605�����%
8T�!��!���o`(�
؛!
���	���o���o@���o�o4���oș!�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'P'`'p'�'�'�'�'�'�'�'�'(( (0(@(P(`(p(�(�(�(�(�(�(�(�()) )0)@)P)`)p)�)�)�)�)�)�)�)�)** *0*@*P*`*p*�*�*�*�*�*�*�*�*++ +0+@+P+`+p+�+�+�+�+�+�+�+�+,, ,0,@,P,`,p,@�@�?�!GA$3a1�%ETGA$3p111303$GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p111306TGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY05$GA+GLIBCXX_ASSERTIONSGA+GLIBCXX_ASSERTIONS0�
GA*FORTIFYbigdecimal.so-3.1.7-8.el8.x86_64.debug�D��7zXZ�ִF!t/��#�]?�E�h=��ڊ�2N��'����v_I�	���<��=�B��?�,S�2�MP��Dca���j]�����
�|���+��
%�	�9Ȋ:�5~czg�����2��oq@s�Bp��[����+S���U��tz"�N�V��.b�T�SϬ��p{���jy���=�[��� ��}>�΁��j@K-�2����,8H\����f��c�R�T<��hLYǣ�E���-$t������S1Js��>*����Ǎ���T�}2NO���;��:
f�E�K��>p�v۔"����뒡f�,�1�x���y;Y��c���o�/*_l���3�v߈��M6��)kD�.�b��h��BD����XjW�c��(���D�B`c`�k�a`���Q;ԋ)mŪ�����c����n-�(�Z`�8�������T�>�ÈN�L+�)NؔH�;>�1 �=ʯ_��J���y��Fy��-Sh��Q����X�̢�/.�|�o���!�J~��_��-n�g�N�6niޭ�g����a	�|i
!���=��Y�d��F\&dt���И��/F�|Ɍ|���d�t���\��jY,�qT?��֟������+����X>8I�$-�2�w�	f=(�9��-#(�i�S���c��|\M}�71�o�x�������Ni%�k�ϲ!��è�~[�f�í�:�4��D�"A&��SŘSP�D�r�6X�Q���f3������?�3��ӝ󭛏���5ׄ��|�)Iq��AO�B����F${�.{�M�1�/i^7���g
�n�<�"��ɐ��"��9�䂃���Z�E�<�E��J��5%�{4��F�)V{%
�C_�f���	)�ЮF�3HsIJR,ðwƭm��@��i�����&�Do��%�y��<�ķ�}�=vl�D�I0	�ͦ'c�e���Hmb?��dRo���қ5��:߯3U�\�b�������,�]ЪP���y�>��w�R�]Yz]~����}��#[6�O��ó#6�-*'+�_�[��q��̈����p�ҰY!�T�H_��N����VN�ٔ���p�OA�!o�J~s�61OZq�g��ˍ��p��e���z����ɜƷ�Q⏜�+�����I�V�\�2s�4x�۠�)�2���X4��kQ�e�{�n"��\6����j3|74>����"��'l��@W���Bb����������_��v��-�@R:?X�Ϛ�i{��9~-�>�yH��kI8��Oa\*1~�f��J�~�X�Ag�����[צq�]���r�%:��0�잜�> a%�X�������;˷����t�@��ZQ��@ˈ�P V��.ɛMǠ��~qӃ4�z=��bP����U�c�恽&zi|P(�XL����5�/a��Ek>��t/�N�EJ�k�Wd`�(�[��wt~�b�0����#�vH�寢e�_�ƕ�����ʭ�%`+i�G���=��7�|�ѸF�!�j)?\��`��z)}
V'G�X�ǧY{/�P戠�M[�q��û}�9��,�.��*�2��*���E�*�{���q
��<m�W�䛉h�Wn	k�\��m��8�H�N�LS1K��ŧ��&��U���҆��������<�]�%0=qK~��u9U�L�ӯ��BsDY�W1!K>�B.C�%.(*�u��u� 3��`|
�_�/t�opRr���W�mTZ+pdDr��D�k�6�6�A��4┺n%|1K�
zA��v4�tW[a�ӎn�8��c`����7�p�/��,6�K�|?�o;8HJV>ȹ�E�+z�{š��a�n��'�aTtd88�2�T���O��:���Z5�W��_��~'�M65�g�'aON�F���RP����B�����#�uߏ;'Op�e5K�κh�@��R$'	���^�؀�>,��r�m4+�I����$���:f��8��=��;�(,�$�q�{g�a�щ�l���}lٖ�Җ��b��X�A�K����
�K_1����r�v��茱�;S�{�q@��)�T����/�6bi3�ݧ�͹�+�4���W����b��Ǝ�	|�D��R�䈋/�7!�_�)T춥�ަ�<=�G��i�F5��M������e*F�K�&�Gn�[�Yq��-@BE��Ft8��c�ydn��b
�Z�=�z-�l���Fѽ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``P(��x0((8���o44
E���o@@pT���^B��
h�%�%c�%�%�n�,�,�w0303!}8T8T
�`T`T� �8i8iL��m�m(����� ��!����!����!�� �ș!ș�؛!؛��!�@�@�!@��
 ��a@�l
��,ؤ	ح(PK8v�Z���

 ruby/ruby-lsapi-5.6/gem_make.outnu�[���current directory: /builddir/build/BUILD/opt/alt/ruby31/share/gems/gems/ruby-lsapi-5.6/ext/lsapi
/opt/alt/ruby31/bin/ruby -I /opt/alt/ruby31/share/rubygems extconf.rb
current directory: /builddir/build/BUILD/opt/alt/ruby31/share/gems/gems/ruby-lsapi-5.6/ext/lsapi
make DESTDIR\= sitearchdir\=./.gem.20240125-1070040-bnsuut sitelibdir\=./.gem.20240125-1070040-bnsuut clean
current directory: /builddir/build/BUILD/opt/alt/ruby31/share/gems/gems/ruby-lsapi-5.6/ext/lsapi
make DESTDIR\= sitearchdir\=./.gem.20240125-1070040-bnsuut sitelibdir\=./.gem.20240125-1070040-bnsuut
current directory: /builddir/build/BUILD/opt/alt/ruby31/share/gems/gems/ruby-lsapi-5.6/ext/lsapi
make DESTDIR\= sitearchdir\=./.gem.20240125-1070040-bnsuut sitelibdir\=./.gem.20240125-1070040-bnsuut install
PK9v�Z&ruby/ruby-lsapi-5.6/gem.build_completenu�[���PK9v�Z��H.H.ruby/ruby-lsapi-5.6/lsapi.sonuȯ��ELF>T@'@8	@H�H� ��!�!� ��!�!888$$(�(�(�  S�td(�(�(�  P�td��������Q�tdR�td��!�!0
0
GNU���,��2jj�d�8���/۰C�	H�‚3@(�L�`���q�CS�l����P*�f�R�������������������������������������������������n�}�'3qѮl>�&��Sɶ��
���ܮʼnSO��`��[is�|&߱R����D�/y7ř����k���Պ e�Y����&09=��By:%/�=��ejO�z�J�6�'��l#mNU�L�C�B�1�{�!�\�$�O#W��2�3S=ap��b�U�0��6�������aD7�jp#�7����ĴDI���Ί=\���4y�ݾCE���к�Q��u���o��	��r�SѮ����Io���|q%h6	󝵛���'
���=��qX�[�u�	� 	f�� #	�	��@
�y��sOT	�����
0
����[�����e	�^k�	�&����'!{

2�	RT�	s��
�? +(��>�n��	���-�
LH�	�
".���
"�
"$7x�
WK
�X
�6
�A	���A�.	9&��4�, �2���F"���	��E9
��
k
r��G����|F�PqD`��%
��S�@��
5Pui~����z@!	b��.p��	�!��]��Z\ f��n@�v �1�@q
Y��`pp�@@��`���rl�zj�U��|����-�pr]�0�	��n�`qY�n�0�5Ѓ�o�w$�p~l!@tUU
E�u�rS� n7�`nT��(����P�� ��0|F��qJ�`�p0�!�p}�I���@���p�!b��g���Џ@C�"!�l���6�n�������7�!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizecompareValueLocationset_skip_writesigactionsigemptyset__stack_chk_failreallocfcntlacceptsetsockoptmmapmemsetsetsidread__errno_locationclosewritevkillgetppid__ctype_b_locstrncpystrchrstrcasecmpstrtolgetaddrinfomemcpyfreeaddrinfoinet_addrLSAPI_Log__vfprintf_chk__snprintf_chkgetuid__fprintf_chkgettimeofdaylocaltime_rwaitpidforksystemexitlsapi_perrorstrerrorLSAPI_is_suEXEC_DaemonLSAPI_StopLSAPI_IsRunningLSAPI_Register_Pgrp_Timer_CallbackLSAPI_InitRequestmallocgetpeernamedup2LSAPI_Initgeteuidsignalg_reqdlopendlsymLSAPI_Is_Listen_rLSAPI_Is_ListenLSAPI_Reset_rLSAPI_Release_rfreeLSAPI_GetHeader_rLSAPI_ReqBodyGetChar_rLSAPI_ReqBodyGetLine_rmemchrmemmoveLSAPI_ReadReqBody_rFlush_RespBuf_rLSAPI_GetEnv_rstrcmp__ctype_toupper_locLSAPI_ForeachOrgHeader_rqsortLSAPI_ForeachHeader_rLSAPI_ForeachEnv_rLSAPI_ForeachSpecialEnv_rLSAPI_FinalizeRespHeaders_rLSAPI_Flush_rLSAPI_Write_Stderr_rgetpidgetcwdmemccpy__realpath_chkLSAPI_Finish_rLSAPI_End_Response_rLSAPI_Write_rLSAPI_sendfile_rsendfileLSAPI_AppendRespHeader2_rstrlenLSAPI_AppendRespHeader_rLSAPI_CreateListenSock2socketbindlistenunlinkLSAPI_ParseSockAddrLSAPI_CreateListenSockLSAPI_Init_Prefork_ServercallocsetpgidsysconfLSAPI_Set_Server_fdLSAPI_reset_server_stateis_enough_free_memLSAPI_Postfork_ChildLSAPI_Postfork_ParenttimeLSAPI_Accept_Before_Fork__fdelt_chkusleepsched_yieldLSAPI_Set_Max_ReqsLSAPI_Set_Max_IdleLSAPI_Set_Max_ChildrenLSAPI_Set_Extra_ChildrenLSAPI_Set_Max_Process_TimeLSAPI_Set_Max_Idle_ChildrenLSAPI_Set_Server_Max_Idle_SecsLSAPI_Set_Slow_Req_MsecsLSAPI_Get_Slow_Req_MsecsLSAPI_No_Check_ppidLSAPI_Get_ppidLSAPI_Init_Env_Parametersgetenvgetpwnamdlerrorsetrlimit__fxstatsetreuidLSAPI_ErrResponse_rlsapi_MD5Initlsapi_MD5Updatelsapi_MD5FinalgetpwuidsetgidsetgroupssetuidstrtollprctlinitgroupsLSAPI_Accept_rLSAPI_Prefork_Accept_rsigaddsetsigprocmaskLSAPI_Set_Restored_Parent_PidLSAPI_Inc_Req_Processedselectrb_str_newrb_hash_asetrb_gc_markmunmaprb_string_valuerb_string_value_ptrrb_eval_string_wraprb_str_new_staticruby_strdupmkstempftruncaterb_str_buf_newrb_str_catrb_num2intrb_fix2intmemmemrb_yieldrb_gc_writebarrier_unprotectrb_io_putsrb_ary_detransientrb_unexpected_typerb_obj_as_stringrb_debug_rstring_null_ptrrb_f_sprintfrb_intern2rb_funcallvs_fn_add_envrb_ruby_verbose_ptrrb_define_global_constrb_default_rsrb_exec_recursiverb_output_fsrb_output_rsrb_lastline_getInit_lsapichdirrb_stderrrb_cObjectrb_const_getrb_global_variablerb_define_classrb_data_object_zallocrb_stdoutrb_stdinrb_hash_new__memcpy_chkrb_define_methodrb_define_global_functionrb_define_singleton_methodlibruby.so.3.1libm.so.6libc.so.6__environ_edata__bss_start_endGLIBC_2.14GLIBC_2.15GLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5GLIBC_2.3/opt/alt/ruby31/lib64���H���Sii
^ti	hui	tii
��!�T�!�T�!�!!��!Q�!��!W� !^�(!c�0!i�8!n�@!t�H!{�P!��X!��`!��h!��p!��x!���!���!���!���!���!���!��!
��!��!-��!6��!D��!M��!a��!G��!l��!|�!�� !��(!��0!��8!��@!��H!��P!��X!�`!�h!'�p!4�x!>��!J��!W��!g��!z��!���!���!���!���!���!���!���!	��!��!��!��!)��!9��!X!�!�!�!�X!`!h!p!�x!��!��!!�!3�!��!=�!I�!K�!R�!V�!V�!W�!��!��!m�!|�!��!�
!
!� 
!(
!0
!�8
!@
!H
!P
!X
!�`
!h
!	p
!
x
!�
!�
!
�
!�
!��
!�
!�
!�
!��
!��
!�
!�
!�
!�
!�
!�
!!�!!!� !�(!�0!8!@!�H!P! X!"`!#h!�p!$x!%�!&�!��!'�!(�!��!)�!��!��!��!*�!+�!,�!-�!.�!��!�!�!�!/!0 !1(!�0!28!�@!�H!4P!5X!6`!7h!8p!9x!:�!<�!>�!?�!@�!A�!��!B�!C�!D�!E�!F�!G�!��!H�!��!J
!L
!M
!N
!O 
!�(
!P0
!Q8
!�@
!SH
!�P
!TX
!U`
!Xh
!Yp
!Zx
![�
!\�
!]�
!^�
!��
!_�
!`�
!��
!a�
!b�
!c�
!d�
!e�
!f�
!g�
!h�
!i!�!j!k!l !�(!�0!n8!o@!pH!qP!rX!s`!�h!tp!ux!v�!x�!y�!z�!{�!}�!��!~�!�!��!��!��!��!��!��!��!�!�!�!�!� !�(!�0!�8!�@!�H!�P!���H��H��� H��t��H����5*� �%+� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a�������%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݿ D���%տ D���%Ϳ D���%ſ D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݾ D���%վ D���%; D���%ž D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݽ D���%ս D���%ͽ D���%Ž D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݼ D���%ռ D���%ͼ D���%ż D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݻ D���%ջ D���%ͻ D���%Ż D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� DH�= ������%f.�H�=�� H��� H9�tH�&� H��t	�����H�=�� H�5�� H)�H��H��H��?H�H�tH�m� H��t��fD�����=E� u+UH�=J� H��tH�=.� �y����d����� ]������w�������ff.����n� Ð��H�GH+F�Hc�AVI��H�@AUATL�$�USH��tQH��H��tIH��I��L9�r�0H��I9�v'�KH�SM��sH�;�Յ��[]A\A]A^��[D��]A\A]A^ø������ff.�f����=~� �D���� Ð��OAWD�D�_AVAUATUSD�6�^�nA��x�j׋G3GD!�3G��V���\$�ЋW�^$��D�D1��\$�!�3WA��ʋN��F���p $E��‰L$�A1�A1�D��D�^!�D1�G��;�ν�D�\$�D�E��D�V���D�T$�A!�A1�E�E���|���A��
1�A�D!�E��1�D�D��*ƇG���D1�D�!�A��1�A1�D�D�N���D�L$�E��	F0�D��!�D�nA1�D1�D�G���F�E��D�f ���D�d$�D�^(A!�A1�E�E��ؘ�i��A��
1�A�D!�1�D�D����D��ʋ^0��D1�D�!�A��1�D�E���[��D����1��!�D1�D�D�N,��A1��D�L$�G����\�E��A!�D�f8A1�E�D��"�k��A��
1�A�D!�1�D�D�N4��E���q����D�D1�!�1�D�E���Cy�D����1��!�D1�D�D�V<���1��G��!�I!�1�D�D�D$��
�E��b%���1�!�1�D�D�D$��E��@�@���1�!�1�D�D�D$���	�E��QZ^&��1�!�1�D�E��6�Ƕ����1�!�1�D�D��]/։���1�!�1�D�E��SD���1�!�1�D�E��
��؉���	�1�!�1�D�D�D$��E��0����1�!�1�D�D�D$���E�����!��1�!�1�D�E���7É��1�!�1�D�D�D$��	�E���
��1�!�1�D�D�D$��A��0�ZEA��A1�A!�A1�A�A���㩉�A��A�D1�!�1��t$�D������D��1�!�A��
�ogD1����	�1�D!�F���L*�1�D�D$�Ή���1�A��A!���B9��A1�DD$�A��A�D1���D$�����q���D�D1�1�‹D$�����0"a�mD���1�G��8�1�Ɖ��1��1�D�D�D$��	E��D꾤���1�1�D�D�D$�A�����KA���A1�A��5`K��A1�AЉ�A��p���A��1�A�D1����D1�D�1��A��	�~�(D����	1�G���'���1�����1��1�D�D�D$�A���0��A���A1�A1�AЋT$�A����2���A�1�D1�֋T$��	��
9��ى�D�D1����1��D�����1�1��C���|�A��A1��A1�A��D$�A����0eV�ĉ�A�1�D1��A��D")��D�t$��	��D�	�D1��A��
��*CD������G���#���	�1����
���	�1�D�D��9��������Ή��	��1�D�D���Y[e��\$���	�1�D�E�������D�t$�����	щ�1���D�E��3}���D�\$�
���	�1�D�D�D$���E���]����	�1�D�E��O~�oA���A���D��	�1�D�E��
��,���D�T$�����	�A��1�A��D�E��6C���D�t$���
��A���N�	�1�A���~S�A��D�E��A����A	�A1�A��5�:�A�D��A��A�D	�1�Љ�3���*�\$���D�	�D1��D��F���ӆ�[��
��]A\�A]A^	�1������։�	�1�DƉ�A�4A_���OW�G�O�W��ATI��1�U��SH��dH�%(H��$�1�H��H����H�<$t)H��$�dH3%(u<H�Ġ[]A\�f.�H�{��1�H�މ�DŽ$�L�$$�l���u�DH�
y� H�A(H�Q8H9�s;8u�fD98tH��0H9�w�1�Å�tH�P0H;Q0v�H�Q0�Df�H�@$@@�@,�������DUHc�SH��H��H��H�@���H��t#H�SPH�H+S@H�C@H�H�SPH�CH1�H��[]ø������f�U1҉�1�S���H������t��t/H��1�[]�fD��t��H���‰߾[1�]�r�f�����ff.�SH��dH�%(H��$�1�H�T$H�t$�D$�D$��&�Ã��tf�|$t'H��$�dH3%(��u0H�Ġ[�f�H�L$A���Ǿ������ff.�f��� ��Hc�H�vL��H�L9���H��H)�H����S�Nf.�E��������L�I؃�H��L�G�L�E�C�H�D�G��w�I9�thH��H)�H��~SH�pH�2H�pD�H�2H�pD�XH�2�pA��E�L�@��L�Ic�A���pD�Hc�L�M�L9��i��������[�f��0��u�H��[H�1�ø����Ë��u�H��H�1��f�AVAUE1�ATUH�-�� SH�}(t[D��]A\A]A^��EEA������!Lc�@���D��
 DI�E1�1�A���Mc�L���b�H��H���t]L��1�H���|�K�vH�](H��H�]0H�H�]8H�CH��� H��� H�CH��H�|� H�}� ���[D��]A\A]A^�H�=�pA�����1����H���H���H+��Hcp�G )�H����H��xsH9�AVHN�AUATUI��SHwH��D�wH���L��H��D���z�I��H���u!�|��8u
��� ��u�D��[]A\A]A^ÐH��~���[]A\A]A^ø�����fDUSH������tMH���������u���8u
�0� ��u�H�i� �E����H��t�(H��� H��t�@��H��[]�ff.�@AWAVAUATUSH�������ж ��t8A��A��I����A��f�I�7D����#��Å�-���tx��� ��u�D��D)�H����[]A\A]A^A_��A)�E��~ڋn� ��t�I��f�H��)�I���~�H�PHc�H9�v�HI�H)H�x���������t���s����E)�E��AO��r���1��k���S�e� ��t-�=W� ��t+1��D����u��[�8������1�[�@��9�[����ÐAVAUATUH��SH��H��PdH�%(H��$H1���H��
fDH��H��DB u�L�d$@��H��L���T��D$@Ƅ$?</tc<[����:L��f�E�5�H������|$@*H�X�zH�5�mL����A�ƅ��;�EM�����H�}�lf�uL�����1�H��$HdH3%(�QH��P[]A\A]A^�D�
M�l$�]f�ML����H�����|$A*H�XA���1��;:�
��1�H�H����H�Í@�=����E��uf��1�f�]�Y���D�Ef�1�H�T$)D$H�L$L��D$H�)D$ )D$0H�D$�*���upL�d$H��A�T$I�t$��L�����L��E1�M��������EA���<�����EE1�M���"����::A�D$M��fA�$�
����������������AUI��ATU��SH��(H��$�H��$�L��$�L��$���t@)�$�)�$�)�$�)�$�)�$�)�$�)�$)�$dH�%(H��$h1����t�=ݶ ���ML�d$`L��@��@��u��������L9���H��� H�;H�L$HL��H��$P�D$HH�D$PH��$p�D$L0H�D$X��H��$hdH3%(��H��([]A\A]�H��� H��L�kH�����L�¾d1���C�H�HÁ��K����-0� ��H��H�ߺUA��L��j�dH�����1���H�H�XZL9�����H��H�� M��1�L)�H��j�H�;�w����f�H��1�L�d$`H�����H�t$H������uI��������D$�L��L�j�P�D$PD�L$(1��^�Y^Hc�L��L����H�D$L��p�L���P�D$P�D$$P�D$0P�D$<P�D$H��P�D$TD��l1���H��0Hc�L�����/�ff.�@��AWAVAUATUSH��(dH�%(H�D$1�H�=� �.�D$�H�l$L�5UiL�-RiL�%p@�H������v�A�Dž����T$�Ѓ���<~$��M��L������D��ME�1����D;=(� t�D;=�� tUD�����H��H��t�H�H1����@�1@�Ɖ�@����H�ҳ H��t�(H�2� ��h�K����V� �����9����H�5	� H�N0H�V(H9�s*D�A�H�A�E��t�DH��0�8��u.H��H9�r�H�F0H�D$dH3%(uH��([]A\A]A^A_�H�N0�����D$�@�1�D$�X���H�� H���D����C���ff.��AWAVAUATUH��SH��H��(�=�� dH�%(H��$1���t1������thH�C(I��I��D�3L+cI)�H�C D�{H)��=��D$��H��E��E��AT��H�5on�AU1�U�L$,�,�H�� ���u� ��t)H��$dH3%(ulH��([]A\A]A^A_�@D�H�\$H���H�߹�AQL�yn�$��XH��Z�����t
1���fDH�=�f�����5�DAWAVAUATUSH��L�+� I�Z(M�j0L9��H�|$E1�E1�E1�@��B��ve�CA�l$����A�BD)�A;B�E9r�
��� ��~ H�SH�L$��H�H)�H9���fD�CA��f��A��H��0I9�w�A�R��D)���1�)ȃ��H��[]A\A]A^A_�fDH�C H�t$H)�IcBH9����C��i�gf��f����)���f9�u�ΰ �����Cf��~pH�5im�1��M��;�	�����tp�CA��L�ݯ A��f�C�5���fD�C��f�C�����A�������H�51m�1�����;��1����u�����8u��L�e� ����H��E��E��D��[H�5m]�A\1�A]A^A_��fDH�t$H����������@E1�E1�E1��z���f.���UH����S��H����H����H��I��[H�5Qd�1�]��f����� 1���u1��=� ������ު Ð���Ҫ �D��H�=ͮ �@��ATUSH��dH�%(H��$�1�H���}H�H��H�1�HLJ	H�ى�H��H)����	���H�H�{`���I��H���0H�CxH�S`L�c`� L�H)�H�CxH�CpL�H)�H�CpI��$H�Ch��H�C8H�C(H����H I���H��H�C0H��(L�cxL�cpH����l��������twH�T$H�t$���D$������t
�}���8kt0�����1��kH��$�dH3%(uiH�Ġ[]A\�fD�+����C�����C�1����1������H�=tb��1���1����#���_���fD���������ff.����S�e� ��t	1ۉ�[����H�5L��
�� �Ƭ �e�H�5>��
�T�����������H�=� 1��8����tI�� �T��H�=�a�ά ���H���c���H�5�aH����H��� ��[É��D�����1��?������H�=u� �0����H�W(H�w`HLJ�H��HLJ0H���H�W�H�VH�W�H�W�H�W�H�W�H��)���81����H�����SH��H�H��t�
��H���H��t���H���H��t����H�{@H��t����1�[�fD��H��tG��wBL���Hc�A�T�4��t/Hc�A�pH���H�H€:t
�H���H���1��ff.�f���H��tP��tJSHc��H��;��}H�S�HH������[������~	Hc���и����[Ã����AWAVAUATUSH�Z�H�H��H�D$H���:�G�����H���%H����I��H���I�����I��I��L��fDA���)�Hc�H����L9�Hc�IO�IvI���
H��L�����H��tML)�H��L��H�XH��H�����A��I��A�$��D)��EH��[]A\A]A^A_��L��H��H��H����A���L�|$I���I)�A���M���?����D���L���L�Hc�H��~�A����-���H��1��|���������v���@��AVAUATUSH������I����H��H����H��H����H���H+��E1�H����H9�Hc��HO؋��)�H�H��~)H9�H�wH��HN�H�H��I�����E��L�L)�H��t6�E�u@H��H��D���J��H���u4�O���8u
�`� ��u�M��t-M��[L��]A\A]A^��H��~�I�H�H)�u���I�������D��H�O(H�W8H��LJLS���H)ʍB����H�GpH�0H�pH�@H�wp��~Hc�H�HH�� H�P�H�O8H�Gp����AWAVAUATUSH��H���H�T$H����H��H�<$�I��H�=�\�������HcB$H���H�@H�,�H9�r�Zf.�H��H9�vGH�3L���L����u�H�CH��[]A\A]A^A_�H�D$L9��I��M9���f.�1�H��[]A\A]A^A_��H�$1�L�={� L���@A�l�4��tI�4�L����������H��H��u�H�D$HcP 1���~�H�$H��L���M�tM9�s�H���H�$I�D$H�D$@IcMIcmH,$L�|
L9��)���A�\$���)����K��H�8H�D$�'���-t	��_����H��H��I9�t�����H�U:�t������8����IcUIcEH$H€:����������H�$Hc�Hc�A�VH��H€:�������@��AVAUATUSL��$���H��H�$L9�u�H��dH�%(H��$@1�H����H��H����H���H����H��E1�L�
� L�kh�f�H���Hc�HcT�4��t7�qH��M���
H��Ic�A��H��L�E��H�TD�T�tH��H��u�H���HcP ����H���H��L�L9���Ic�I��H��L��f�H��H�� I9���HcHHc0A��H���LcPI��HcHH��B�D�BH�J�HH�2�JA��u��H�
�� � L������$DI��H�
f� Ic� L���n��E��taE1��@A��I�� E9�~CA�MI�UI��A�uI�}�Ӆ��H��$@dH3%(u6H��@[]A\A]A^��D����1���@Ic��U������������ff.����AWAVAUATUSH��XH�t$ H�T$dH�%(H��$H1�H����I��H����1�E1�L�-�fH��L�%�� H��H���Hc�HcT�4��t/�HH��A��A�t�I�<�H���L�D$A�ׅ��4H��H��u�H���D�t$<HcB ���L���H��L�H�D$0I9���H�\$(L�t$@fDH�D$(A�l$Ic$A�HTTPH������A�F_L�<H�D$��O�Hcʼnl$8I�H�D$I9���M�nI��I�o�I���_@��-t���H���A�E�L9�u�H�D$I�D�t$8L�D$�L��IcD$IcT$HT$���H�D$ A�L$�Ѕ�~"I��L9d$0�-���H�l$(H����B D$<H��$HdH3<%(u'H��X[]A\A]A^A_�DI�F�v��������������ff.���H��t7H��t2H���D�@$1�E����H���H��H��D�����������f.���H��t7H��t2H���D�@(1�E����H���H��H��D���S��������f.���H����H�O`H��tz����Ѓ�tr��L�G@������H�WPL9�vH�wpL)��L�H��H�V�H�wpHc�0H�T�H�Q�����,H��(LJ(LSH�1�H�Oxø�����f.���H����H�GpH+GxH�������G�����SH�������H�C(H9C8tH�����H�SpH+Sx1�H����~J�
� �����u$�{H�sx����9��~H�{�������ǃ�H�S`H�SxH�Sp[�f�H�G(H9G8�c���1�������l���LJ�H�W(H�W8H�W`H�WxH�Wpø�����f���AWAVAUATUSH��XH�t$dH�%(H�D$H1�H���.H�=�� ���GI�������;��H�G(H9G8t
H�$���H�$H�D$L�|$L�d$H�$H�l$ I��H��L)�H����H��@�@L�|$0HO�L�d$ �D$LS�BL�jH�T$8I׋z� �D$D��H�D$(H�l$��uA�~H�4$D����H�I9�~�I�~��H��L)�H���L��H+D$��H�t$����H�L$HdH3%(uH��X[]A\A]A^A_�H��������4��@AWAVAUATUSH��H�$H��dH�%(H��$1�H��I��I���5��H��8����H��I��H��aHD����A������AW�H��SA���1�AVL�{R�AU�c���H�� H��=O�Hc�M��t7L���?��1�H��$dH3%(u&H��[]A\A]A^A_����f�����?��ff.�@AT�~f�A��UH��SH��dH�%(H��$1�H�|$H��)$H���H�H��� ��xH��$dH3%(u?H��[]A\É�I��D��H�5�Y1��
��1�H�5�QH���i������������ff.�f�ATUSH��H�$H��H�$H��dH�%(H��$ 1���� �����?/H��H�����H������H���bH�ߋH����������!�%����t�¹�����D�H�WHD���@�H��H)��</��)�Hc�Hc�H�1�H���>��H���JL��$�H��L���}��H�����H�=�PL������������AH��1��2���Ń������uRH�=ۚ H9�t
H��t���H��1�����H��� H��$ dH34%(����H�� []A\�fD����T����������>���@�������4�����
�+����H��H�5X1�������r����r���DH�߹����������S���fD����������H��H�5�W1����������C����H��tv�����t]S��H��tC�uWH�C(H9C8tH������H�CpH�� H��H�H��H�@����H�Cp�P��H�����1�[�@���s��뢸�����ff.���H��������u��u1��f�S��H��tR�ubH�C(H9C8tH���0��H�CpH�e� H��H�H��H�@����H�Cp���H�{�:����������1�[��1�H�O@H9OPv����닸��������AWAVAUATUSH��H����H���|���I�֨�,���aH��H�t$H����>��L�{8I��H�C0L)�H9��>L�t$L+{(L��A�@L��L�f�I��M)�M����K�H��@���σ��LSL�Cp�N���I�H�D���I�0H��I�@H�KpM��~H�C(M�xI�H E1�I�@H�C8H���L�1H��M�L�I�H��H�KpH9��e���H���=�����thI��L��M)�M���U���I9�t
H��������tDL+t$H��L��[]A\A]A^A_�DM��@�@M)��(������������I�������H�t$H��L�����Hk8�f.���H�������������AVL��AUI��ATI��U��S���H���u\��H�߉���K��A�D$�{L��ǃLS�������H��u0�{L��[L���]A\A]A^�x����;������[H�����]A\A]A^�H���ff.���AWAVAUATUSH��H����H�������H����������D$����0��xI��H��I��H������Lc��\�CHc��T���
t��
u(��H�DLc���L�H����
t�
t�L�������~6Hc�A�T���
t��
u#��H�@��~A�L�H����
t�
t�E�<A�G=���I�|$PH�H�TI9T$Hs7H��I+t$@L������2%�)�)���������I�|$PL��H��Hc�A���o��Mt$PH��L��I�FI�D$PA�:I�|$P�M��M�D$PI�I�@I�D$PA�Ic�$0fE��T8H�Ѓ�A��$0�D$H��[]A\A]A^A_��D$������ff.����H���
H����B�=����������0���AUATUSHc�H��f��D�A��<
t<
uH���؅�u�H��[]A\A]�I��H�PH��H�DI9D$Hs3H��I+t$@L������2%�)�)��������tQI�|$PH��H��A��� ��I\$PH�CI�D$P�Ic�$0fE��T8H�Ѓ�A��$0H��1�[]A\A]ø�����S������D��AUATA��UH��SH���?dH�%(H�D$1��D$f����f��
t1�����f����H�L$dH3%(����H��[]A\A]ÐA�1Ҿ����Ã��tʼnǺ�1��Կ��H�L$A��ߺ�訿����u#D��H��������uD����������o���輾���߻����D� H���:��D�e�O����A��k���DH�}A�n葾���}�N����3�����H��t����������ff.����U��SH��dH�%(H��$�1�H��H�������u/��H���U��H��$�dH3%(uH�Ę[]���������褿��@��1�H�=�� t������AUATA�'USH����� ��'DN�uD�������� H���@�A�����H��H�>� H����H��tH�-�� �T���ڐ �9����ƉljÐ �*���U����D�k H�-� D�cE��u<�����D�����SuG�CH�,H�C���1�H��[]A\A]�@A�|$�C�{�˸�����ك�ÉS�ff.�@��H�u� H��t�8�ff.�f���H�U� �BH�B(H�R8H9�s��H��0H9�w�H��� H��t	���H��� H��t	����fD��H�}� H�H;� �wH��H�H;� �����ff.�@��ATUSH��H�� dH�%(H�D$1�H��� D�`豼��H�SX�;� ���H�kXH�-?� �b���H�g� ������ �� H�� H��� H��tH��� 1�1���H�-� �E��H��� H��t��{1��F���H� ��uH��� H��tA�D9 ~�&� �$� ��ut�;���u]H�LS�[H��H�$��O�D$�ʻ���H��߉D$觻����� 1�H�L$dH3%(u)H�� []A\�D�+��������������t���@�����H�E� SH���@H�Xt1����H�SXH�BH�B�{�۽���C����1�[���AWAVAUATUSH��HH�� H�|$H��$�L�edH�%(H��$81����H����L��DŽ$(H��$�艾��H��� H���u������cH����L��DŽ$(H��$��K���H�ċ H���7������H�h� H����������H��� H��
�������H�Њ H���������H�D$1�E1�L�d$ �ڋ L�|$ǀ��D$H�� H��t	H�=�� ��1�����I��L9�t71���������L���P���C��t�S�����D$fD�V�F���H�� �L��H�1���H�Hc;�ƺ���;M��L��H�D$H�D$�����������?)ѺH��1�H	T� 1��� �Ń�������������8��1�H�5�� �譸��1ҿH�5� 蚸��1ҿH�5l� 臸��1ҿH�5�� �t���1ҿ
H�5� �a���H��$8dH3%(���kH��H[]A\A]A^A_�fDH�ъ H��udD�C�S�K�
D9���H��� A�����H��tD��H�5�H1��V�������|����� M��� �������fDD�0D�CE��~�E��~����E���D軺��A��u���D$�t$9��/������������D�;�)��A��H�D$D�pA���uc袶���0���k������b���H�=Z?D�������j���f.�H�=*?�����������H�=�G�����������1�1����H�\$H�CX�������������=�{ �f����=�{ �D��H�ň H��t�x�ff.����H��� H��t��x�x����H��� H��t��~�x����H�e� H��t��~�x����H�E� H��t�x�ff.�����=ֈ �D���ƈ �D����� Ð����� �D��AUATUH��H�=�=SH��8dH�%(H��$(1��=���H��tH��� �H�=(� ��H�=�=����H���E1��
H��螹������H�=�=���H��t�
1�H���v������ H�=�=�ij��H��H��t�
1�H���M���I��A�ą��WE1�H�=�=萳��H��t�
1�H��������� H�=p=�j���H��tH�Ǻ
1�������_���H�=^=�C���H������ H�=U=�$���H��tH�Ǻ
1�谸�����)����Ķ������H�=0=��H����1��
H���x������OH�==�ò��H��tH�Ǻ
1��O������ش��H�==蜲��H��tH�Ǻ
1��(���������H�=�<�u���H��tH�Ǻ
1��������ʺ��H�=�<�N���H��tH�Ǻ
1��ڷ����蓲��H�=�<�'���H��t�=���H�=�<����H��t�
1�H��蝷����� ���_H�=�<���H��t�
1�H���o������ D��� ��� �r� E����H�=�<�ٶ��H�����=R� ��u	�P�E� �5;� ����H�=�<�c���H�����
1�H������� �…�t�� �����H�9w H�H����H�H����D�ք L��<L�
<L��<�C�
H��L���������t@H�ֹL����€���D	�t%H��tAH�H��t9�H��L���������u�H��fDH�JH��H�J�H��u�H�H��u�1ۉ�H��$(dH3%(��H��8[]A\A]�fD�� H��膲���D����<G�~A��<MED�A������s���D��H�H�� �_�����豲�����@H�= :�ܯ��H���������fDH�=|9輯��H����������fDA���f��@�[� �#���f�諳�����fD1�E��H������n���H��u �8������H�={:路��H��H�� H����H�5h:H���Ŷ��H��H� ����H�����-ǂ ������H�5D:H��萶��H�5G:H��I��H�|� �w���H�5::H���h���H�55:H��H�O� �R�����~H�5$:H���>���H�'� H�=H� H���~A�ԅ��L���H�=�A���H�=!� 褮��H�� �$���@H��H�$H�D$�b������DH��H��$���$��̯�����t
议��1҃8k�‰� ����H�=�8�ܭ��H��t1��
H���h�����~��� H�=�8貭��H��t1��
H���>�����~�X� H�=�8舭��H��H���iH�Ǻ�1�1�諵���Ã����H�T$�ƿ���������D$(?���H�5� ���ȱ��H�������W���H��� H��t�xc�@d�x��@�D�
�� E���9���D��� E���)����Z���f�H�=�7贬���n� H���K����]����
b� ��u
�T� '�J� �������8� '������� �)���f��Յ�tbH�� H���-�������DH��H�5V?�1�������S�����������A��Hc��~���L�%� H��H�� �a����s����Å�t��=� �������r ��u
�| �5� ������`���H��H�5�>�u���H��H�59>�1��U����������H��H�5A>�F���ff.����AVI��AUE��ATI��UH��SH��t��4H��u!�(fDH��H���t���H��L����G���H�]H��u�M��tE��L�����[1�]A\A]A^ÐIc�L��L���������H�#Eg����H�GH�H��ܺ�vT2H�G����AWAVA���AUI��ATUH�oSH��1�H���G�O�@�ƉWD���������W��?t;A�ĉ�D��H��H�|�@D)�A9�rhA��G�t4�L��L�����H��L���9���A��?vWE�f�A��I��I��I�H�޺@H��H��@�ܱ��H��L������L9�u�A��?D��L��H��H��[]A\A]A^A_鬱��I�������ATL�fUH��S�FH�����?��L�H�z���?)ƒ�w=��t1������9�r�L��H������f�CAD$AD$ I�D$0��71�)�����H�CH��L��H�CP�?����oH�{1�H��MH�H�CPH)��KX���H�[]A\�ff.�f�AWAVAUATUSH��dH�%(H��$�1�H��t^� �I���A�����f�Mcg I�oA�_@L��H����#���H���uM�(����8u
�=9x ��uٽ����H��$�dH3%(����
H�Ĩ[]A\A]A^A_�f���~�A��A������u���I���ALJ�f�8LS�|�x�r�@t�P�Hf�@�H�P�X���N������	M�g���A;G �ZA���9�~u���E�o)�H�Hc�I��H��L��D������H���u$�����8������5$w ��u�����������A��M�gA���9��I�D$,H�D$Hc�I�I���D�hA�����h(A9��}A�� �/Hc�I���H�4@H���5���H���A���I���I����h$A9��}A�� ��Hc�I���H�4@H�����H����A���I���I���H�l$�p(I���L��H�����������I���I���L��p$�������hM���Ic@���o9��gIcP���[9��SIcp���G9��?IcH���39��+I�H�H�H�H�I���H�T$I���Ic@ H)�I���H��H��I���H��H�H���I���H�I���IcHI���H�H��H�D$I9���E����1�D�L�4��t9�d�<B�9�ZH��H��u�IcP ���kI���H��H�H9�r*�RP9�!�P9�P9�H��H9��-�9�~�H�51�1�荮��H�5�0�1����w����>���f�H�� ��H��� ���I�GA�G  I�������P�Hf�@	f�@
�H�H�P�P�H�H�P�P�H�H�P�P�H�H�P�P�H�H�P�Pf�@f�@f�@�H�H#�P�P �H �H'�P#�P$�H$�H+�P'�P(f�@f�@!f�@%�H(�P+f�@)I������1��
fDI���HcȋL�4��t#f�BI���H�T�4�
�rf�B@�2�JH��H��u�M���IcP ����I���H��H�H9������pH��@�p��p�H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��H�H9�w�M���A�pI����b���Ic@I���H����0�Zv ALJ���t`�v 
�u A�������u 1������L��Hc�蟩��I��H������I�GA�o I����u���I���D�%�u D�-�u �B(A��A���1Ic�H�4II���L��I�
�9�H�qH�=�-����������I�J�D�B(�9�xH�qH�=�-���������XI�J���B(��$�A�D$I���KA�zH�L$�;M�bfo/u L�t$ L���AoL$AT$M�l$)�$�蘪��� L��L������H�L$�L��H����L��L�����H��$�I�D$H��$�I3L$H1�H	���D�$$D�l$E����D��D�l$�â��H�=dt I��H��������I��D���%t ���M���H�=t t"L��D��L������Ń����������P�|$�W��������E��t$A9u��H�t$��~��������D�������Ń�����5�s ���$A�?D�5�s ���t� ���A�����H�5e)L���
���H��tH�����H��s f�)�s �#���A��H�5f 1�����H��@�������H�5
+�1��9�������L�����H��������
1�H���o���I������H�5�2�1���H�53�1��ݨ��D�%�r ��r D��D$����H�=�r I��H��tZE���W����7����E1�1�1�1���ͤ����������H�=%3������H�5P*�1��`�������E��|$菦�������M���2����;�����|$�g��������E������1�H�5_*L���u������I�}臧���Ń������1�H�5!*L���K�����fD�=�q ������-�q ��q E���D$A�����I���F������H�5f)�1�膧��������H���H)���H�5(1�H��1��a�������1�H�5�)L�����������
����ܟ��1�H�5�1L�������A�#��L��H�
#3H�m �w������1�H�5^)L���a����ff.����AVAUATUSH��dH�%(H��$�1��D$H���H���ѡ������	�;1�L�l$L�d$L�t$H�k�l����rl �����{�ul�;�����L��L���D$�����C�����H��p H��t�@��H�dp H��t��{1�����f�|$���=�o u|H���4��tH��舴��H���0�����k ���d���1�H��$�dH3%(u}H�Ġ[]A\A]A^�D胜�����������������������{�H�5)b �,���H���f����ы{L���A�����;����۝��ff.���AWAVAUATUSH���D�=do dH�%(H��$�1�E���xH��� ���H�-�n H�����}����$o ;^a �DH�-5o H��t1��1���H�ED��j E���H��$L�|$PD�cA����:E1�A�f�D�
ej E����D��n E��tH��n H��t
�@f����L��H��1���H�Ic��W���D��H�D$PH�D$X����A���?)ѺH��H	��D9#��1�1�A�|$M��H��j D9#������H�5n H��t
�@D9#��5` A��D9���1�葳��������f������H��$�dH34%(���'	H���[]A\A]A^A_��K���L��$�H�����DŽ$hM�l$H��$�L��謞��H��$L��H��H�D$@菚�����AH����L��DŽ$hH��$��e���H��$�L��H��H�D$0�H������PH��$�L��H��H�D$8�#������+H��$`L��
H��H�D$(������H��$ L��H��H�D$H�ٙ��A�Dž���H�D$PE1�L�l$`H�D$H��$�H�D$H��$`H�D$f�D�%�k E����H�l H��t	H�=�g ��1��d���I��L9�t<1��ձ������L���5����E���D�uE���M��E1���V�&���H��g �L��H�1���H�Hc}襚���}L�D$L��H�D$PH�D$X�����������?)ѺH��1�H	T�`1�vg ���������������8�����H�t$(1ҿ
荘��������x������=�����������_����5k ��tH�6k H��t
�@f���,���D9#�
D������C�����H�k H��t�@��H��j H��t�D�c1�D���N����
Pf �����=j �����{�H�5�\ ���H����������H�Qj H��t�*H��j H�������B���(���@H�aj H��t�@��H�j H����������@蛖���8�B����-���DA��D9�����M�����=�e ������荟����������=fe �����H��i �
H��t��D��H��i H��t�
�A9����������H�ai H��tD��҉T$$D�E~:E��~5���7����T$$A��諙��A�����蜙��A��u������D�E�U�M�
D9�vH�i A�����H��tD�H�5'�1�覞������̞�������D$�g����0������������H�=� �G����T$���fD�}蠩���C�����1��m���H�|$I�����H�|$���H�T$H�t$1��`������6�����������1�EM��tA�M�gM�g�{E1��C����C����H�t$1ҿ�����������H�=$)�'������f��;�	���������>���fD�D$$�_����0���d������T$$�W���H�=�T$�7����T$����fDD�#A�����������fD�~g ���R���D�c E���B���H�Kg H���2����9�b �����{�H�5�Y 蠔��H�{�w������H�=�'�F������蜓��H�=�'�0莖��M������A����H������…��
H�{����H���Ƙ���lb ���������H�=��Ԛ��������������H�t$1ҿ脒������H��e �����f ���L�=�f �hf H�Ef �Gf H��e H��tH��W 1�1���L�=Gf A�G��H�f H��t��{1�蝦��D�-�a E��uH��e H��t!�E�9~�za �xe �����;���t�ؕ�������H�t$@1ҿL��$��ْ��H�t$01ҿ�Ȓ��H�t$H1ҿ跒��H�t$81ҿ覒��H�t$(1ҿ
蕒���kH�LSH��$���&��$�讒���L��$�舒���yd �e ���H�=�"�*���������%���諚���������,���H�=�%�����Q���H��d H��t*f�C1��C�D$�C���C�Ӗ���T$H�C(H�C ��d ����֒��fD���=�d ��d �ff.�@��H�E` ������f.�f�����fD����h H���ff.���H�V H���H+���H���HO��D��H������1��f���1��f���ATI��H��US��Hc��H���Hc�L��H���:���H�=3h H��H���ؔ��[�]A\�ff.���H�飕����H��H�=QU ����H���f���H��H�=1U �܏��Hc5�g ;5_ H�=�g |6�a���H�vg �����H�rg ��kg H���fD�����f����?��I�H�=�T ���H���H+��9�M�1���~+H��Hc�Hc5	g H5�f �ѐ����~�f H���f��ff.�@��H��H�=QT �̏�����tH�H��H�D��H���ff.���H��H�=T 茕��H��] H�����H��H�=�S 蜏��H��] H�����H��H�=�S ��������tH��] H��H�����SH��H�\$H�t$H���E���H���]���1�H���#���H��[�ff.�f���AWAVAUA��ATI��U��SH��H���<Q��~v<R��<Su"�H�=2%H���������@Mc�L��L��誕��Hc�H��I��蜕��H�=�e L��H���:���H���[]A\A]A^A_�fD<Pu��
H�=�$H�������u��ƀULc�u��H�=|$H��������t����?H���,���I��H���H��A��L)�A)�Mc�H��L��H�L$���	H�=1$H�$�K���H�$H�=�d H���x���H�L$L��H��踔���H�=$H�$����H�$H�=�d H���@���1�A�??L����I�L���y����H�=�#I���Ս��H�=^d L��H���������fD�
H�=p#H��������r����:�i������@A�L�%��Q���fDO�<4L��E1�����=�c �t1��@H�9Q H����=�c ����t�USH��;=[ ��H�=y_ �4���H��H��虑���Ń����H���v���H�����HcOc ��H���ݍ������E1�A���H��1�����H�c H�������裎��1�H��[]�f.�Hc������H��b H��u�H�=�"�{������@��b 1��H�=I"�T������=�����fD蛊���8�4���H�پH�!I��H�#P H�81�衒��H�������N���H�=�!�����܍����1���f���AU1�ATUH��S��H���V������������-b ��+b Hc�D�%�a �(���I�Ņ�t"D)�A�DI�D9�uD��������H��L��[]A\A]ÐD)�Hc5�a H��H5�a Hc��D����a ���H��L��[]A\A]�@H�}@��u&�����xU�-oa �aa )�9�O���T���賒���ؐD9�Hc5Fa L��DN�H5(a Ic��Ћ��D%)a �U���@H��A�[L��]A\A]�ff.��AWAVL�5�` AUATUSH���f�D9-�` ~N��}���D�-�` M�&�H�[ Hc=�` D��)�I��L�Hc�H��蚍��H��t�L)�D)��XHc�H��豍��I�ą�~Hc5s` H��H5Y` H������[` H��L��[]A\A]A^A_�f���H��1��a�����tH���#����H���fD����_ SH����_ ���2f����H������_ 9�_ }1������uٿ��f�H��[�ff.���AUATUH��SH��dH�%(H�D$1�����H��E1�I���G@H����I9�}HH������H��uj�� tUH�CJ��H��L��I��H�$�u���H��� u�H�CI9�|�H�L$dH3%(�uVH��[]A\A]�@H�C �f.�H���Ȏ��H���H�=��_���H��H��H�$�����t���@��1��f���USH��@��t����fDH�����t�H���H��u�H�t�H��H�_ H��@��uH��uNH���f���H�H�k�� t*H�pH�PH��tEH�;��H��H�[]H�D�f.�H��H�p����H�H��H�у�H��t��@H�=�H�T$H�4$裈��H�T$H�4$����SH������H��[�ff.���SH���s���H��H������[Ð��UH��SH��H��dH�%(H�D$1���uH�����tH�H�ƒ�H��tsH�����蒎���D$@��uyH�����tpH�E��H��ucH�}t\H�E H�t$�H�8�PH��H�����HD�H�L$dH3%(u_H��[]Ð�� u+H�S���y�����D$@��t��H������f�H�{�R���H�SH��u��7���������4���@SH��dH�%(H�D$1�H�|\ H�$H��W H��u%H� D�H���;���H��W H��t�H�=8\ H��H���(���H�D$dH3%(uH��[�譅��ff.�f���USH��H�=OI �*�������tyH�=�[ H��t�?���H��[ �����H��[ ��[ �y���9�[ uI1�H��[ ����H�-�H H�;H��H�u譋��H�uH�;H���~���H��R H��H��[]�D�:[ H��V H��u'H�
��H������H��V H��t�1�1�H�ƿ�����h���f���H9ER tH����ATUH��S���
���L� ����H�5�Z H�=�H�������L� H�IV H��u%L�%uD�L���{���H�$V H��t�H�=�Z H���H��[]A\�g������AWAVAUATUH��SH�����C���G�H��L�-�L�d��tf�H�������H��ubfD����H��I��H���5���I��� ��M�~M����I�FA�|�
tH��F H��H�0���H��L9�t[H�;@��t�H��u�fDH�=x����H���f.�H�����u5H��H��H��H�=��������L9�u�H���[]A\A]A^A_�fD��t��.���fDM�~H�����H���L���ȃ��I��� �0�����f.�H�F H��H�0�.����ff.����AVAUATUH��SH��dH�%(H�D$1�������I��H�6A���L�5y�H�H�������H��u4H�����A9�~NH��E H�0H��tH�����I�t�H��@��t�H��u�@�L��裁��H��H���h���A9��H�LE H�0H��u;H�L$dH3%(�uPH��[]A\A]A^ÐH���H��t��a����H�������fD�c���I��A�H��H�$�����I���f���AUATUSH��轂�������H�=dH�FW H�GW �EW �~��H��t8�
1�H��H������H�Ņ�~�MH���E���H�������-�N H�=�G~��H��H��tH��臀��H��H=��`�Xfof��R )�R H�=E1��}��H��t1��
H��1�艃����@��H�=�C 趄���q��H�=��|V �}��H����H�����������H�vC H�W�H�H��C H�H�kV H��Q H��u L�%C�L���#���H��Q H��t�L�%C H��I�<$�Ԅ��H�5�Q H�V H��u4L�-f.��L���ӆ��H��H��Q H��t�H��U 1�1�H�����H�=�U H��U 螄���H�=��
���H�=�I���~��H�=�U L��H���'����H�5�H�=��/���I�4$H�=��φ��1�H�F���H�5�H��H�-U 考������H�=U 1�H�(�H�5��<���H�=�T �H�Y���H�5�����H�=�T �H����H�5g���H�=�T �����H����H�5N�߂��H�=�T �����H����H�55���H�=�T �����H����H�5衂��H�=bT �H�~���H�5肂��H�=CT 1�H�B�H�5��f���H�='T 1�H�&�H�5��J���H�=T 1�H���H�5��.���H�=�S �����H���H�5�����H�=�S 1�H���H�5���H�=�S 1�H���H�5w�ׁ��H�=�S 1�H���H�5`軁��H�=|S 1�H���H�5H蟁��H�=`S 1�H��H�51胁��H�=DS 1�H���H�5�g���H�=(S 1�H���H�5�K���H�=S 1�H���H�5��/���H�=�R 1�H��H�5�����H�=�R �H�`�H�5���H�=�R �����H�����H�5��Հ��L�%�? H�=�R �H�{�L���c~��H�-�? H�
�? H�=�I H�P H��I H�JH�*H�ER H��? H�H�\? H��,���H�=-R L��H���~��H�
B? H�=cI H�P H�XI H�JH�*H�����$z��H�(�z��H��P���H��Q 1��B���H�5�Q H�=��}��H�3H�=���}����y��H�(H��[]A\A]�DH�P�H��H�=UM �~��H��wH�CM H�.XXXXXXH�(���H�t+��H�=Z�����u��b����H�=)Q 1�H���H�5s�l��H�=
Q 1�H�l�H�5m�P��H�=�P 1�H�0�H�5`�4������H�=��L����R����H�=���w��H���6����B���fD�mH���z��H���^����KH���z��H��t��
�-�G �G����kH���mz��H��u�-�G �*�����H��H���Anonymous mmap() failedlocalhost%02d:%02d:%02d [%s] [UID:%d][%d] %.*syesnosystem()%s, errno: %d (%s)
/dev/nulllibpthread.sopthread_atforkHTTP_[UID:%d][%d] %s:%s: %s
LSAPI: jail() failure./etc/Can't set signalsaccept() failedLSAPI_STDERR_LOGPHP_LSAPI_MAX_REQUESTSLSAPI_MAX_REQSLSAPI_KEEP_LISTENLSAPI_AVOID_FORKLSAPI_ACCEPT_NOTIFYLSAPI_SLOW_REQ_MSECSLSAPI_ALLOW_CORE_DUMPLSAPI_MAX_IDLEPHP_LSAPI_CHILDRENLSAPI_EXTRA_CHILDRENLSAPI_MAX_IDLE_CHILDRENLSAPI_PGRP_MAX_IDLELSAPI_MAX_PROCESS_TIMELSAPI_PPID_NO_CHECKLSAPI_MAX_BUSY_WORKERLSAPI_DUMP_DEBUG_INFOnobodyLSAPI_DEFAULT_UIDLSAPI_DEFAULT_GIDLSAPI_SECRETLSAPI_LVE_ENABLEliblve.so.0lve_is_availablelve_instance_initlve_destroylve_enterlve_leavejailPHP_LSAPI_PHPRC=packetLen < 0
packetLen > %d
Bad request header - ERROR#1
ParseRequest error
SUEXEC_AUTHSUEXEC_UGIDLSAPI: setgid()LSAPI: initgroups()LSAPI: setgroups()LSAPI: setuid()Bad request header - ERROR#2
lsapi_accept() errorPragma: no-cacheRetry-After: 60Content-Type: text/htmlDEBUGNOTICEWARNERRORCRITFATALAcceptAccept-CharsetAccept-EncodingAccept-LanguageAuthorizationConnectionContent-TypeContent-LengthCookieCookie2HostPragmaRefererUser-AgentCache-ControlIf-Modified-SinceIf-MatchIf-None-MatchIf-RangeIf-Unmodified-SinceKeep-AliveX-Forwarded-ForViaTransfer-EncodingHTTP_ACCEPTHTTP_ACCEPT_CHARSETHTTP_ACCEPT_ENCODINGHTTP_ACCEPT_LANGUAGEHTTP_AUTHORIZATIONHTTP_CONNECTIONCONTENT_TYPECONTENT_LENGTHHTTP_COOKIEHTTP_COOKIE2HTTP_HOSTHTTP_PRAGMAHTTP_REFERERHTTP_USER_AGENTHTTP_CACHE_CONTROLHTTP_IF_MODIFIED_SINCEHTTP_IF_MATCHHTTP_IF_NONE_MATCHHTTP_IF_RANGEHTTP_IF_UNMODIFIED_SINCEHTTP_KEEP_ALIVEHTTP_RANGEHTTP_X_FORWARDED_FORHTTP_VIAHTTP_TRANSFER_ENCODING%04d-%02d-%02d %02d:%02d:%02d.%06d Child process with pid: %d was killed by signal: %d, core dumped: %s
Possible runaway process, UID: %d, PPID: %d, PID: %d, reqCount: %d, process time: %ld, checkpoint time: %ld, start time: %ld
gdb --batch -ex "attach %d" -ex "set height 0" -ex "bt" >&2;PATH=$PATH:/usr/sbin lsof -p %d >&2Force killing runaway process PID: %d with SIGKILL
Killing runaway process PID: %d with SIGTERM
Children tracking is wrong: Cur Children: %d, count: %d, idle: %d, dying: %d
LSAPI: LVE jail(%d) result: %d, error: %s !
Invalid custom stderr log pathFailed to open custom stderr logCan't set signal handler for SIGCHILDReached max children process limit: %d, extra: %d, current: %d, busy: %d, please increase LSAPI_CHILDREN.
LSAPI: failed to open secret file: %s!
LSAPI: failed to check state of file: %s!
LSAPI: file permission check failure: %s
LSAPI: failed to read secret from secret file: %s
LSAPI: Unable to initialize LVERequest header does match total size, total: %d, real: %ld
LSAPI: missing SUEXEC_UGID env, use default user!
LSAPI: SUEXEC_AUTH authentication failed, use default user!
LSAPI: lve_enter() failure, reached resource limit.prctl: Failed to set dumpable, core dump may not be available!sigprocmask(SIG_BLOCK) to block SIGCHLDsigprocmask( SIG_SETMASK ) to restore SIGMASK in childfork() failed, please increase process limitsigprocmask( SIG_SETMASK ) to restore SIGMASKCache-Control: private, no-cache, no-store, must-revalidate, max-age=0PID<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>508 Resource Limit Is Reached</TITLE>
</HEAD><BODY>
<H1>Resource Limit Is Reached</H1>
The website is temporarily unable to service your request as it exceeded resource limit.
Please try again later.
<HR>
</BODY></HTML>






	


QUERY_STRINGREQUEST_URIPATH_INFOREQUEST_PATHSCRIPT_NAMEftruncate() failed. 
File mapping failed. 
Memory calloc error[...]RSTRING_PTRreplacesrandSTDERRreopennilLSAPI_MAX_BODYBUF_LENGTHLSAPI_TEMPFILEXXXXXXRACK_ROOTchdir()to_hashCGI/1.2eval_string_wrapLSAPIacceptaccept_new_connectionpostfork_childpostfork_parentprocessputcwriteprintprintfputs<<flushgetcgetsreadrewindeacheofeof?closebinmodeisattytty?syncsync=RACK_ENVGATEWAY_Irewindable_input.rbNTERFACE/tmp/lsapi.XXXXX;�| [���e��0Pp��0q��H@q��\Pq��p`q����q����q���r���`y��@�y��t`z����z���{����{���|��4�}���`~����~�����L���tp����@���4����0����p���X	�����	Њ���	���	��	����	����
����,
����@
����T
���h
`����
�����
 ����
��������H���\0����`�������`��t ��������������0���
0���x
���
 ����
����`���80����������(����0����P����������L���`p���t����� ����`��������(����<����P����d��x���� ����@����P����`����p������������D����@����0����������\�������������� ���4��H0��\@��pP���`���������������P�����$��D ��\@��tp�����������`��0����`�������������P�d����� ��0�$��H��t`����� �4zRx�$W���
FJw�?:*3$"D�a���
\�l��p�l����l��
L��l��sE�I�B �E(�A0�z
(A BBBIA
(D BBBA�m���m��@�l��YG�J�B �B(�A0�A8��0F(B DBb0Tt���B�F�C �G�
 AABK�tt��k(��t��GA�D�J n
AAA4��t��UA�G�K R
CAGL
JCG u���A�G�]
AJ $�u��t��
CKF�LH�v���B�B�E �A(�H0�H
(D BBBD�
(D BBBAP�$w���v�F�B �A(�D0�D
(A BBBBL(A BBBA�����$��w��aA�A�D XAAH�w���B�B�B �B(�A0�A8�D@N
8C0A(B BBBH$`lx��OA�f
QC
EH@��x��YB�B�B �A(�D0�J��
0A(A BBBFx��z���F�E�A �C(�G�
 
(A ABBDM�
I�
c�
A�
��
E�
M�
A�
k�
E�
E�
E�
E�
H�V�
HH}���F�B�B �B(�A0�A8�D``
8A0A(B BBBDl�x~��+B�B�B �B(�A0�D8�J�Y�H�P�C�	M�i
8A0A(B BBBEL�T�M�D�d8��6B�B�B �B(�A0�A8�DP�
8A0A(B BBBG
8J0H(G DBBK$l���7E�F�F IIO�(����4����0����,���4�(����F�A�A �G�>
 AABG �����E�O
D�
A@\���
TX���hT���Y|����JE�D�ԃ��S � ���]P�h
HXA�H�\���lF�B�B �B(�A0�A8�LP�
8A0A(B BBBH<����F�B�B �A(�A0��
(D BBBI\P���i`p����F�B�B �B(�A0�A8�DP~
8A0A(B BBBAk
8A0A(B BBBHL�h���$F�B�B �A(�A0�H��Q
D���
0A(A BBBHL$H���F�B�B �B(�A0�A8�G��
8A0A(B BBBFt���F�T���F������$�����n�C�X�J�L��lF�B�B �B(�A0�A8�D�A
8A0A(B BBBA`(	����B�B�B �B(�A0�A8�G� I� K� I� L� N� N� w
8A0A(B BBBI0�	�����B�M�D �G�L
 AABA<�	,���=B�A�A �G� L�@I�@U
 AABG$
,����T�WE�H�G� (
�����a�g
HS�HL
 ����F�B�B �B(�A0�A8�DPS
8D0A(B BBBFT�
�����b�I�E �D(�C0�P
�(F� B�B�B�MQ(H BBBA�����H�
����F�B�B �B(�A0�A8�DP�
8A0A(B BBBAT<����C�B�A �A(�G0`
(A ABBD�
(C ABBAJ����8�x���-F�B�D �D(�D@T
(A ABBB�l���(�x���lE�C�G�F
AAIL����!c�B�G �A(�D0�
(A ABBEX����D0����`����t����Z��10� ���pF�A�A �G@7
 AABF�\���@L�sL�����F�B�B �B(�A0�A8�G��
8A0A(B BBBG<
P���P
L���d
H���x
T����
`����
l����
x����
�����
�����
|���x���<t���	F�B�A �K(�G�
(A ABBG<XD����F�E�E �D(�D0�M
(C BBBB�����(H������F�B�H �E(�A0�E8�I@�
8A0A(B BBBE(�D����F�E�D ��ABH$���B�B�B �B(�A0�A8�G��
8A0A(B BBBJDp|����F�B�B �A(�A0�G�
0A(A BBBFL����
F�B�B �B(�A0�A8�G��
8A0A(B BBBA��������4����
H����\����+p�����������(�����BF�G�A �kFB���
���HU��gHQ
G <��ayd8���2HW
IIX��� HWp��� HW����-Hd����3E�D hAH����F�B�B �E(�D0�C8�GPm
8F0A(B BBBG4����o�A�D �
AAKp��P ��\D(��4F�D�A �D(�F0`
(D ABBBj
(D ABBEl(G DBBD����B�B�I �B(�A0�A8�D@�8D0A(B BBB����*HP
HI���UK�I8(����F�B�A �D(�D@�
(A ABBEd���(x����E�A�D0r
CAP�H��E�L�L��E�Y(�P��E�D�G0�
AABzRx�0�� 8X�� 8���A�D w
AA(\p���E�A�D �
DAF,�D���Z�A�D �r�A�B�H����tF�B�B �B(�A0�D8�D@�
8F0A(B BBBG@���7F�B�B �A(�D0�D@�
0A(A BBBB8H���SF�B�A �A(�D0�
(A ABBFGNU��T�T�!��Q���W�^�c�i�n�t�{������������������������
��-�6�D�M�a�G�l�|�������������������'�4�>�J�W�g�z���������������	����>
$��!�!���o`��
��	!��.h&p	���o���o�%���o�oP$���oD�!�>�>?? ?0?@?P?`?p?�?�?�?�?�?�?�?�?@@ @0@@@P@`@p@�@�@�@�@�@�@�@�@AA A0A@APA`ApA�A�A�A�A�A�A�A�ABB B0B@BPB`BpB�B�B�B�B�B�B�B�BCC C0C@CPC`CpC�C�C�C�C�C�C�C�CDD D0D@DPD`DpD�D�D�D�D�D�D�D�DEE E0E@EPE`EpE�E�E�E�E�E�E�E�EFF F0F@FPF`FpF�F�F�F�F�F�F�F�FGG G0G@GPG`GpG�G�G�G�G�G�G�G�GHH H0H@HPH`HpH�H�H�H�H�H�H�H�HII I0I@IPI`I,����LSLSLSLS������������������)�9�X!�!��GA$3a1�>1�GA$3p1113Tt�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113��#�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�Tt�GA+GLIBCXX_ASSERTIONS
GA*FORTIFY����GA+GLIBCXX_ASSERTIONSlsapi.so-5.6-1.el8.x86_64.debug"SIz�7zXZ�ִF!t/��?3]?�E�h=��ڊ�2N�uI�=�'�n��_Cj�7��
E�kc�xUK�^I#A��!߱�Z�L}ހ��H�@�?�T���?�%��ٛ430�kUP|����m�$�1Mz�I�~F�/h��]s��'���Q�w���r͔p�ه��#�D�*��$Gu�%h5���a�ÿ�����w��(�7�]��_ ̎wz��%�#�p���t�tڨJ3�3�d-�XW=��}��O�^6� �AF�X
{��`�z�Et3E�7,=�ע��L���樵��*��{�K���҆��Ԛ�"��r;Z�|,���u9�� /��$48��;�Qv�^D^H��_�ȧ0G!�#���U�N+��%��(#�t�n.��6)[�+�����z�n�VYNg�/�"I8�2<}��㭌i���U��f�|�m�]����^	\�ט�r�^M@�b��ۙ\��@�iPؙѼ�^RG����l�O��&��ޤ�뚔,�K�fyv0���vW�sPv�5\���A?-j��J�O)�e%P/L�r�Y��D�_E�ڄ��/��<��,�G��L�^�9�¨Aп�����3�+��;���Ɖ��w}��l2�&W�"�Ԡ�Q��u�A��Ȅ�V��?�$H���8�f��u�iݖ���c*U�{{�N�,������Qe]��M-���ha��@���3p���#�ɠ^]�|+`�c��
���:k��n�kU���3S��	"�F�K*��(Qө�������{h[Fl���W�6�ϣ��L�.�A��������h�%��m�x�\fT@����5C�Ia�P]I0;%x��-K�J{��l\E��E���I'�񊻈��T��u��KX`��,��.���g逼b��\ɺ8*�� i̜P�ށL��ϕ^��R�*���Bco90��Is-��y�&j�ㅕ���۰�(���;������gn�����j������=et�C�߾f������.� �A)]�]E�RЌ�c,�'Ҵ�U6A`	�V��
l^�A��<�[e�aM<�j��g�Gئ�}�~M��	?C�������`�8B'����81��\���ds�A�ϰ][����sa�&_Q`�3�*�8q��q����o�m�,��I�`-E����yōta��|�3�LT��N^�2Na��܏_ �@i3I�w@;�mK<�R��~aU��x#������%e�����8M5���Jp�<a�\�?������i���UP��8:΁��������$<�m�:�+t��ok��E�YR{�<��cԁҷ�q�W�}���_�6/%iZ���rWa����9,N�ABE��R����U��9��m�m�,�'(�JY���&��hU�M��rI���=�C�
C��C2��In۴��b���~S[;���=+`���j`��͛�6/��j��$���H.�����3a��(�[����
'u�.���&T������H���v�/�f���e4�<�t��W�*�E`�QZ)ا��'��-���uGm6�r�o`x?Օ�ՓY���f0ǎ��ڽ��<�K����Dj���{L��p%�J��N��.�c�փpM�l*�XY��9�9��r��ж��§��L���H�Z�ֈ���թ�s���S4]@�U��ḧ�)LK0�]���Bǭ_p�%��I
��?	�a�
jZ���x��yc�j��S�y��Ӈ�O܈�ϽIl�:�^7	
�lǪ�x��Y�)�t�\����A
�ً�XsoNc	AO���Z_Չ������^���
u�Xz�D�OUïX����</4�DZ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``p(���0���8���oP$P$�E���o�%�%pTh&h&p^B�.�.�h�>�>c�>�>�
npIpI�
wTT#~}$�$�
�@�@�p �������������(�(� ��!���!���!� ��!���	!�	�!�	 ��!�� ��"a�d
D$ht�%(PK9v�Z[��1��ruby/ruby-lsapi-5.6/mkmf.lognu�[���have_library: checking for -lsocket... -------------------- no

LD_LIBRARY_PATH=.:/opt/alt/ruby31/lib64 "gcc -o conftest -I/opt/alt/ruby31/include -I/opt/alt/ruby31/include/ruby/backward -I/opt/alt/ruby31/include -I.    -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection conftest.c  -L. -L/opt/alt/ruby31/lib64 -Wl,-rpath,/opt/alt/ruby31/lib64 -L. -Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed  -m64   -Wl,-rpath,/opt/alt/ruby31/lib64 -L/opt/alt/ruby31/lib64 -lruby  -lm  -lc"
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: int main(int argc, char **argv)
4: {
5:   return !!argv[argc];
6: }
/* end */

LD_LIBRARY_PATH=.:/opt/alt/ruby31/lib64 "gcc -o conftest -I/opt/alt/ruby31/include -I/opt/alt/ruby31/include/ruby/backward -I/opt/alt/ruby31/include -I.    -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection conftest.c  -L. -L/opt/alt/ruby31/lib64 -Wl,-rpath,/opt/alt/ruby31/lib64 -L. -Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed  -m64   -Wl,-rpath,/opt/alt/ruby31/lib64 -L/opt/alt/ruby31/lib64 -lruby -lsocket  -lm  -lc"
/usr/bin/ld: cannot find -lsocket
collect2: error: ld returned 1 exit status
checked program was:
/* begin */
 1: #include "ruby.h"
 2: 
 3: /*top*/
 4: extern int t(void);
 5: int main(int argc, char **argv)
 6: {
 7:   if (argc > 1000000) {
 8:     int (* volatile tp)(void)=(int (*)(void))&t;
 9:     printf("%d", (*tp)());
10:   }
11: 
12:   return !!argv[argc];
13: }
14: 
15: int t(void) { ; return 0; }
/* end */

--------------------

PK:v�Z"ruby/json-2.6.1/gem.build_completenu�[���PK;v�Z�<�~�~"ruby/json-2.6.1/json/ext/parser.sonuȯ��ELF>0@�w@8	@8]8] 0k0k 0k �� �k�k �k 888$$]]]  S�td]]]  P�td�Y�Y�Y��Q�tdR�td0k0k 0k ��GNU+����2�a�2G_I�I�A�F�@ �FIBE���|ŷ|!�qX�f[�� �Ty���4q���&��UD_���U1��u�� #e���""�"u�H��E*�`��, �OF"��:��Vp i�p Z�I]p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeruby_xfreerb_gc_mark_mayberuby_xrealloc2ruby_xmalloc2rb_check_typeddatarb_str_duprb_eTypeErrorrb_raiserb_funcallvrb_ary_entryrb_ary_push__stack_chk_failrb_data_typed_object_zallocruby_xmallocrb_error_arityrb_keyword_given_prb_string_valuerb_enc_getrb_ascii8bit_encodingrb_utf8_encodingrb_str_conv_encrb_hash_duprb_id2symrb_hash_arefrb_enc_associaterb_eArgErrorrb_debug_rstring_null_ptrrb_fix2intrb_unexpected_typerb_enc_interned_strmemcpyrb_utf8_str_newrb_str_internrb_enc_raiserb_ary_new_caparb_hash_foreachrb_freeze_singleton_classrb_class_new_instancerb_ary_newrb_hash_newrb_cstr2inumrb_respond_torb_str_new_cstrrb_hash_asetrb_cstr_to_dblrb_float_newrb_class_namestrrchrrb_str_substrrb_path_to_classrb_sym2idrb_mKernelInit_parserrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_path2classrb_gc_register_mark_objectrb_define_alloc_funcrb_internrb_const_getrb_define_methodlibruby.so.3.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby31/lib64L���nii
yui	�0k 8k �@k @k `k �Nhk �pk �xk p�o �o �o �o %�o <�o =�o >�o ?�m �m �m �m �m �m 	n 
n n n 
 n (n 0n 8n @n Hn Pn Xn `n hn pn xn �n �n �n �n �n �n �n  �n !�n "�n #�n $�n &�n '�n (�n )�n *o +o ,o -o . o /(o 00o 18o 2@o 3Ho 4Po 5Xo 6`o 7ho 8po 9xo :�o ;�o ?�o @�o A�o B�o C�o D�o E��H��H��Y H��t��H����5ZW �%[W ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=���������%uS D���%mS D���%eS D���%]S D���%US D���%MS D���%ES D���%=S D���%5S D���%-S D���%%S D���%S D���%S D���%
S D���%S D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%}R D���%uR D���%mR D���%eR D���%]R D���%UR D���%MR D���%ER D���%=R D���%5R D���%-R D���%%R D���%R D���%R D���%
R D���%R D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���H������f.�DH�=�Q H��Q H9�tH�^Q H��t	�����H�=yQ H�5rQ H)�H��H��H��?H�H�tH�5Q H��t��fD�����=5Q u+UH�="Q H��tH�=^L �����d����
Q ]������w�����H�
f9H���x=�WH���x0H��H	��WH���xH��H	��WH���xH��H	�ø���f.���H�GhH�@H��p�ff.�@��USH��H��H�ohH�}H��t���H�����H��H��[]���ff.���SH��H�?���H�{ ���H�{@���H�{H���H�{P���H�{`[���f�ATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?�����I�$I�D$I�L$�ff.���H��H�5�J ���H�8H��t	H������H��N H�5M,H�81������AUATUS�H��dH�%(H�D$1�H��4t&I��H�5�O H��I��1�1�L������H�����u#1�H�L$dH3%(��uIH��[]A\A]�@1�L���V���H��H��H�5�N H�$���H�����t�L��L�������q������UH��I �pSH���%���� H�h H�����f�@H�@H�H�EhH��H��[]�ff.�@��AVI��AUI��H�5[I ATU��H��SH�� dH�%(H�D$1����H�8�����������f.�H��Hc�M�d��������I�EH�D$��u�H�C(dH�5N 1�1��CXH�=AN �d���H�C@H�C H�CHH�CPL�d$L�����H��H�����I�����I9��7�:���H��I�����H��L��H������H��L��H�l$�q���H�D$H��� � H�PH�hH�SH����H�L��H�kH�L$dH3%(��H�� []A\A]A^�L�����I�ă������I�EH�D$�������I�����H�=�L H�l$���H��L��H�5�L I��H�D$�@���H��������C(dH�=�L �q���H��L��H�5_L I��H�D$����H��������C,H�=XL �3���H��L��H�5!L I��H�D$����H��������C4H�=�K ���H��L��H�5�K I��H�D$���H��������C8H�=�K ���H��L��H�5�K I��H�D$�H���H��������CXH�=�K �y���H��L��H�5gK I��H�D$�
���H������VL��L������H�C H�=PK �3���H��L��H�5!K I��H�D$����H�������H�C@H�=	K ��H��L��H�5�J I��H�D$���H������iH�CHH�=�J ���H��L��H�5�J I��H�D$�F���H������
H�CPH�=cJ �v���H��L��H�5dJ I��H�D$����H�������H�C`���fD@��tbH�����H����H��H��������f�H��H�h��H�S���@H�51J H�=rJ 1�1����H�C ����H�����t�H�EH�ƒ�H��t���t��{���DL��L���m�H������;�C(����DL��L���E�H����������C,�"����L��L���%�H�CH���@L��L���
�H�C@�4���@L��L����H����������C8�N����L��L�����H����������C4���L��L����1�H���‰SX�S4���I���H���@���H�VH H�5_'H�81����DL��L���m�H�����HD�H�C`���DL��L���E�H�CP���H�=i%�p�H�D$�;�����.���H�������C(������H��G H�5%H�81��Q�UH��AWAVI��AUI��ATSH��8�U��M�dH�%(H�E�1�H��H)�H�E�H=��H�E�H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���H�D$H���H�E�L�}�M��1�M9�w�qDI9�vWI��A�<$\I�\$u�M9�vL��L)���I�A�D$<f����<\�t<b�\<"�DI��I9�w�L9��L��H+]��M��������H�}�H��H����H�}�����U�����H�u�dH34%(�H�e�[A\A]A^A_]�f�<r���<t��<u�n���I�E�H9��HI�|$�;���I��%�H=��wI�\$I�E�H9���A�|$\�H�5$��DA����t1��ƒ��A�D9�r�L�sI�L�����fD<n����H�5	#��f��H�5�"�f��H�5�"�f��H�5�"�f��H�5�"�w�����H�5�"�_����H��L��L��H�M���H�M��"���D�H�5v"�'����H�}�H���l�H�}���_���H�}�H�E��Q��U�H�E����N���H�����A���DL)��>M�L��H+]�����I�\$I��w+D�EĿH�u�����H����H�E��-���I���v:I������I�������E�?�H�u��M���H)�H�L�����L��A��?H�uĿH��A�Ȁ��D�EňE�����A�|$u����I�|$I�\$��L��I��
%�H��E����H��H��I	�I	�L���H�u�H�����E�L��H����?�Ȁ�E�L��H����?�Ȁ�E�D����?�Ȁ�E����H��L��L��������L���H�u�H�����E�L��A��?H��A�Ȁ��?D�EƃȀ�E��G���H�}��w(H��C �9�M��	H��"H��H��1���H�}��d������H�}��w(H��C ��M��H�"H��H��1����H�}��"���AVAUI��ATUH��SH��H��dH�%(H�D$1�H�wH9����>"��E1�EX����H�m`H����������I�uI��H���}�H�5�H��L�����L�����H�������A����H�CH�t$dH34%(�\H��[]A\A]A^�H��L�`L9������H��"tS��\uL�`L9������H��u�����9L���f��EXA�������1��t�����M0��u1�u81҅���H�{L������UXI�E����L���4���@�}41ɺ�������I�UH�5�A H��H��H�$���I�E����H�pH9�����H��@����0��	��H�pH9������H��@|��0��	weH�pH9������H��@r��0��	wCL�`L9������@<@i��0<	����L��E1������F~���a���y���H���������F~���a���{�����D��F~���a��v���f�<F�a�����a<�V����H��A��h���H��A��Z���H��A��L���H��A��>���H��A��0���H��A��"�����H�m`H������:���L��A�����AWI��AVI��AUATUH��SH��XdH�%(H�D$H1�H9�tLH��H���M�A�<n����Hc�H�>��fDL��DH��H9�u�I��A��
@I��A�A�W8��tI�>@��uvH�����uuA��ugH�t$HdH34%(L����H��X[]A\A]A^A_�f�L�mL9�����E<*�C</�j��A�O8����E1��H�H�ƒ�H���x���H�€�H�H��d������[����+��Q�����0��	��f.�H�EH9��#�	H�5�H��������A�,����H�z> L�m	I��1fDL�mL9�����E1�}n�����L�mL9������}f�����L�mL9��'���}i�}���L�mL9������}n�b���L�mL9�����}i�G���L�mL9��<���}t�,���L�mL9�����}y����A�,��H��= L�mI��Mf�L�mL9�����E1�}a����L�mL9������}N�����A�w,����H�L= L�mI����A�@I�WH�Ɖ$A�G(9�������H�== ��1�H�5�����L�mL9���
��E1�}a�3���L�mL9��C���}l����L�mL9������}s�����L�mL9��6���}e���I�L�m�,�L�mL9��c
��E1�}u�����L�mL9������}l�����L�mL9��2���}l�}���I�L�m��@L�mL9��+
��E1�}r�K���L�mL9��f���}u�0���L�mL9������}e����I�L�m�b�A�G(E�`I�W@H�D$ ����A9���H�=�; D��H�5'1��2�f�L��H��H��L�����I��H��LD�A�G8�������I�>A�@�����������I��I�mH9�����A�E<*t�</�;���I���I��L9��V
��A�}*u��fD��A�}
�����I��L9�u�A�	����DH����1�1���I�H9�tE�}{H��u<L�BL9�t3���B<"��U<
t< �y
L��L�BL9�u�DI�������
�a������n���I��E1����H���f1�1���I�H9����}[��H��H�
�L�jL9��z���r�F�<n�S��Hc�H�>���0@��	�MH�D$(H�D$H�D$0H�D$D�$H�L$H��L��H�D$(L���\���I��H���
I�HH�t$(I�>��H�t$0H�L$�H�5�8 ��I�D$�H�PH9�t-���H��,tD����
t	�� ��H��H�PH9�u�I������
������L��L�jL9��p���J�A�<nw�H�=H��Hc�H�>�������fD������fDI�oH9��;����E<-��	<0����1I��<w5I��L9��c��A�$<E�g<e�_<.����0<	v�I�o�E<-�p	<0����1I��<v����f���A�E��0<	w	I��L9�u�I�_hM��H�CI)��
�H���"�H�CH�S�
�I�GhH�CH�x��I���I�LD��J����I��L9����A�}*u�I��L9�����A�E<*t�</u�f�L���[���L��DH��I��LD����L�jL9������B<*t�</���I��L9�����A�}
u��L�jL9�t���B<*tI</uoDI��L9�ta��A�}
u������I��L9�tA��A�E<*t�</�����f�I��L9�t!��A�}*u���@��
�����@������H�w6 ���M���H��H� H��1���fD��/����]�����	������I���D</��<}� E�OXE����I�@I�w L�$I�>��H�t$0H�L$0�H�5?5 ��L�$H��tXH�5I5 H�=�5 L�d$0�L��L�$H�D$0���H�5x5 1�1�H��H�����L�$H������	f�I��M��LD�����H�PH9��<������@<*tW</t����fD���:
����H��H9�u�����DH��H9������<*t�</�����H��H9��������:*u����K��t�����,�}���I��I�PH�5�3 �����	I�GPL�-�3 H�$I�GI�OhL��H)�H�AH�t$��H�ϾH�L$��H�L$H�AH�Q�I�GhH�AH�xM���<�$�H�<$H�L$(L��H�D$(�Y��I���I�������L��I�oH9���������I�D$H9�t���A�T$��+t��-uI�D$H9�t���A�T$��0��	�r���H��H9��������E�U�����e�L�����.�������0��	v����fDH�D$ L�-�H�$H�D$(H�D$H�D$0H�D$H�$H��L��L��A�G0���A�G0H������H�H�H�AH9���������Q�� �P�A��/����:��H�pH9���������H�Q�n����IcT�L�>���0��	�T���H�L$E��H��L��H�D$(�`�I��H���,���I�@H�t$ �'H�D$H�L$�H�D$(I�>H�t$0H�5�1 H�D$8���L�D$I�@�L�@L9��������P��,tD�w��
t	�� �{L��L�@L9�u�����<
t��	<�����f�L��I��L9��x������B< t�~�<"�n���</u�L�BL9��Q������B<*tB</t�<�����A�8
t�I��L9�u��$���I��L9�������A�<*t�</�{���I��L9��������A�8*u��ƀ�
�����������H���A���H�pH9��������@<*t<</t������>
t�H��H9�u����H��H9���������<*t�</t�H��H9��n������>*u�����
�OH�������/����}�������	���y����,���@L�BL9��������B<*tW</t����fD��A�8
���I��L9�u����@I��L9�������A�<*t�</������I��L9��������A�8*u�����	<�|������H��L�`L9��������@<E����<e����<.�����I�D$H9��������A�T$��0��	�L�����L�`L9���������@<E�{���<e�s���<.�+��0<	�����L��L�`L9�u�����H��L�hL9��1������@��0<	������A��V�DA��F�DA��6�DA��&�DA�
��DL�mL9��[����E<0�.��1<������;�L�eL9��~������E<0����1<���#�����	����������H�AH9�������Q��*tN��/t���@���8
�d���H��H9�u���H��H9���������*t�/�4���H��H9��{����8*u���H��L���
��H�{L��H{H���J��LcI�_h���A����A����A����A����A���A������L�$����@��u6H�����t-H�H�ƒ�H��tH�€�H�~H�t	����H�t$ H�T$(I�>L�D$���L�D$���L�@L9�������@<*tF</t�{���A�8
�����I��L9�u��_�I��L9��R���A�<*t�</�����I��L9��1���A�8*u���L�����L���8���I��A���I�H�5-, L��H�ߺH�D$0���L�$I�����A��z�A��o�A��d�A��Y�A��N�������^��I�����I���$������H��H�D$H�L$���H�L$H�D$H�T$H�yH��Hy�H��H�L$H�D$HAI�Oh����I�PH�5�* ������t*I�GPL�-�* H�$����A���A�
��I�P@����I��H�$I�������H���H��t/E1����H��L�D$�O��H�t$ L�D$���A��F����I��H�@H�D$I�E tI�EH�D$H����H�|$�:�9��H����1�H�P�L��H+T$H�D$���H�����H�L$H�$I�EH��H��H+t$�� tqI�EH)�L��H������H�����H������I�����E1�H�$���I����<,�n�������0��	�k���H�=�����9���H�����H�!) L��H�H�$���H���z��I���?���H��) �&��L�E����V�A���A����H��) ���I���'�H��) ����I�����E1������UH�5�# SH��dH�%(H�D$1�H�$�"��H�8�6H�XH�hH�
	H�H9����3�V�n����Hc�H�>���0@��	wx�E1�H��H��H��H����H����H���D��
t��	��w;H��H�XH9������P�� t�/u�H�XH9�t���@<*tl</t9H��H�n( ���I��[H�H��H��1����D���;
t�H��H9�u��@H��H9�t����<*t�</�a���@H��H9�t����;*u���H�ӐH��H9������q���fD��H9��[���H�t$dH34%(H�$��H��[]�@H�SH9��.������s@��*t=@��/tdH������H��H�ZH9��������R��*t�/�i���H��fDH��H9��������:*u������:
�/���H��H9�u����D@��
����@����������2��H��% H�5DH�81����f.���H����^��H�=����H�=����H�5�H��H��& ���H��% H�5�H��H����H�=tH�y& �D��H�=sH�^& �1��H�=R& H�C& ����H�=7& ����H�=;& H�5�������H�=(& �����H�<��H�5.���H�=	& 1�H�����H�5����H�=�% 1�H����H�5����H�=����H�=�% H������H��H��% �.��H�=}����H�=�% H�����H��H�i% ���H�=����H�=y% H�����H��H�7% ����H�=��n��H�=�H�% �[��H�=�H��$ �H��H�=�H��$ �5��H�=�H��$ �"��H�=y���H�=yH��$ ���H�=pH�}$ ����H�=mH�b$ ����H�=gH�G$ ����H�=`H�,$ ���H�=[H�$ ���H�=NH��# ���H�=HH��# �~��H�=:H��# �k��H�=6H��# �X��H�='H��# �E��H�=H�o# �2��H�=H�T# ���H�=�H�9# ���H�=�H�# ���H�=�H�# H��������H��H���uninitialized instancealready initialized instanceRSTRING_PTR
\"	
nesting of %d is too deep%u: unexpected token at '%s'-Infinityjson/commonJSONExtJSON::ParserErrorJSON::NestingErrorinitializeparsesourceNaNMinusInfinityjson_creatable?json_createcreate_idcreate_additionschrmax_nestingallow_nansymbolize_namesobject_classarray_classdecimal_classmatchmatch_stringkey?deep_const_get[]=[]<<newtry_convertfreeze-@JSON/Parseroptions :symbolize_names and :create_additions cannot be  used in conjunction%u: incomplete unicode character escape sequence at '%s'%u: incomplete surrogate pair at '%s'0�������������������������������������0�������������������������0�����������������������������������������������������������������`����������������������������������������������������������������������������������������P������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��������������������� ������������������������������������������������������� ��������� ������������������������� ��������������������� ��������������� ����������� ������������� � ������������������� ��0�����������0��h��������������������������0�����0�������������0�����������0��������0������0�������0�������������������������������������������������	�������

��������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������;�����������t���������P��@���\ ���`������p���������������Hp�tzRx�$(����FJw�?:*3$"D��\���Vp���$����5E�A�G ^DA���>E�t,�,���B�D�D �V
ABE����=HX
E8����F�B�A �A(�I@R
(A ABBE$P$��QE�M�D uDA@x\��?F�E�L �A(�F0�DPE
0A(A BBBA zRx�P�����(4��,� �� A�C
D��E�J��V
C@$��@B�B�E �A(�D0�G@�
0A(A BBBDHh���B�E�E �B(�A0�D8�D��
8A0A(B BBBJ(����E�H�D0�
AAE���HGNU��@k �N��p3BL�@
M0k 8k ���o`�	�
��m �ph	���o���o����o�o.���o�k p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@GA$3a1@MGA$3p11130MGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYMGA+GLIBCXX_ASSERTIONSparser.so-3.1.7-8.el8.x86_64.debug9k���7zXZ�ִF!t/����]?�E�h=��ڊ�2N����$����.u!��A��ʴm��dV�{��cDa@3
lq��z�qj�}�o�[�[���n��e%��%�B�
�-[��lX�>Mq��mDd�D�"F��)�X!L�c�	��F}�`�i4�Ϟ��\o�X�����I+�W
Z���^�z���fVT���7�LVs��	
�Mk�j/#��%N��ꉲѯ�&c�<�v^��ʹ*�p���s]P�IY���1(�zw$��=Fk��\�
�+'՚B���~�l���I�_}TSù�ã�(x��q���tA}'��2�����ɗ|�4Twg}� ��J�t�b�Pn��}��H����XD��|a[lZ܄_��A*��>L��6��^!��E���LĢ#��S%k����Z~&�
�0�@�mj�
��j����u��P�Fh+^��1U���Q�K-t�gA:�iD�~�j�i�������G>N�y�
�p�N��h�n�>����zI�Jk��k�t�@≘�����ՍR9P�M)�`m���}�/K(c	
���&�p�ܣx����}��Ѻ�w�+����k�Fv�%�eG���P��&�AK�(��{[ݼq`��7�����=Elf�f�WxOe��l���t7T��W��7�	��5Dl��w��u29 
��镞�,6����n��j:�c���3����Z�Լ���ch��b�@B�Y~��.��
o�TK���f�_
�I��J̕P9�30��b�]0,��O͹��1D�/UQ�9Е��lQ��j�[���IMlT�&Z��o�Η�l��$��}.�lg�0���\�tYׄ�5�>p`�YG.N��r$,Bx�_D~��ӛ�#\u����E���,w���*[>�U���7q��8�D$p��Z�BTD�}�T/�˸�3����~2Nִ�
..�3��(��/�������ӏ��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0�	�	�8���o..�E���o��@Th^Bpp�h@@c``�nPP�w00�.}MM
� M M` ��Y�Y��ZZ��]] �0k 0k�8k 8k�@k @kh ��k �k��m �mH�p p���p`pHHr(pr|v"PK;v�Z6����%ruby/json-2.6.1/json/ext/generator.sonuȯ��ELF>�@�@8	@vv �z�z �z  h{h{ h{ 888$$�u�u�u  S�td�u�u�u  P�td8g8g8gTTQ�tdR�td�z�z �z GNU�8�����@�v�
��)�L�@$�LNOBE���|�qX�t�)���C} %5X$���X�o��8�hU�c��|s ���o�C/Sm"u~"-��N��?��_>���, c�F"�(�Qi���� ��� �� ��X�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddataruby_xfreeruby_xmallocruby_xrealloc2ruby_xmalloc2rb_str_newrb_utf8_encodingrb_enc_associaterb_funcallv__stack_chk_failrb_hash_newrb_obj_classrb_class_namerb_hash_asetrb_str_new_staticrb_str_duprb_str_catrb_str_concatrb_str_internrb_sym2idrb_ivar_setrb_attr_getrb_data_typed_object_zallocrb_obj_is_kind_ofrb_cHashrb_class_new_instancerb_intern2rb_ary_entryrb_string_value_cstrrb_iv_getrb_str_substrrb_id2symmemcpyrb_enc_getrb_usascii_encodingrb_str_export_to_encrb_enc_str_asciionly_prb_path2classrb_raiserb_debug_rstring_null_ptrrb_error_arityrb_string_value_ptrrb_float_valuerb_hash_foreachrb_eArgErrorrb_unexpected_typerb_hash_arefrb_check_convert_typerb_convert_typerb_cFloatrb_cFalseClassrb_cArrayrb_cStringrb_cIntegerrb_cNilClassrb_respond_torb_cTrueClassrb_cSymbolrb_id2strInit_generatorrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_gc_register_mark_objectrb_cObjectrb_define_class_underrb_define_alloc_funcrb_define_aliasrb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby31/lib64�ui	�����ii
��z � �z P { {  { �d0{ �#8{ �!x � � 	� � � � #� *� 4� 7� @� A� B� D� K�} �} �} �} �} �} �} 
�} �} �} 
�} �} �} �} ~ ~ ~ ~  ~ (~ 0~ 8~ @~ H~ P~ X~  `~ !h~ "p~ $x~ %�~ &�~ '�~ (�~ )�~ +�~ ,�~ -�~ .�~ /�~ 0�~ 1�~ 2�~ 3�~ 5�~ 6�~ 8 9 : ; <  =( >0 ?8 C@ DH EP FX G` Hh Ip J��H��H��g H��t��H����5�e �%�e ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!�������%�a D���%�a D���%�a D���%�a D���%�a D���%�a D���%�a D���%�a D���%�a D���%}a D���%ua D���%ma D���%ea D���%]a D���%Ua D���%Ma D���%Ea D���%=a D���%5a D���%-a D���%%a D���%a D���%a D���%
a D���%a D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%}` D���%u` D���%m` D���%e` D���%]` D���%U` D���%M` D���%E` D���%=` D���%5` D���%-` D���%%` D���%` D���%` D���%
` D���%` D���%�_ D���%�_ D���%�_ D���%�_ D���H���������H���������H��������H�����f.�f�H�=` H�` H9�tH�~_ H��t	�����H�=�_ H�5�_ H)�H��H��H��?H�H�tH��_ H��t��fD�����=�_ u+UH�=z_ H��tH�=�Z ����d����}_ ]������w����H�7H��thv$H��tNH��u8�R�1��€��?v2�f�H��u��B�<A�������	Ѓ��1��DH�W@�B��H�1���?w�H���J�1����w�����tKv���t$���u/���v��f����u���w��D���w��f.�1����o����W��������`����fD��H�?��t
H�GH�H�t	H�WH�DH� t	H�W(H�DH�0t	H�W8H�DH�@t	H�WHH�DH�WPH��tHBH�WXH��tHBH�W`H��tHB�ff.�@��H��H�5Y ����H���H��H�D�ff.���H��H�5�X ���H�@xH��H�D�ff.���H��H�5�X �|����xqH�H��H�Ѓ��f.���H��H�5qX �L����xpH�H��H�Ѓ��f.���H��H�5AX ����H�xhH�H��H�Ѓ��f���SH��H�5X ���H������@r�[�f.���H��H�5�W ����xrH�H��H�Ѓ��f.���H��H�5�W ���H�@hH��H�D�ff.�SH��H�H��t�N���H��[�E���D��SH��H�?H��t�+���H�{H��t����H�{ H��t����H�{0H��t����H�{@H��t��H�{PH��t���H�{XH��t�w���H�{`H��t�i���H��[���SH��H���HDؿ �&���f�@H�@H�[ÐATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?����I�$I�D$I�L$�ff.�USH��H��H�wH����H��H�������*���H��H���?���H��H��[]�D��H��H��H�5�Z �dH�%(H�D$1�H�j[ H��H�$����H�T$dH3%(uH�������ff.����ATUH��SH��dH�%(H�D$1�����H��H������H�����H�5zZ 1�1�H�=[ I���O���L��H��H���q����H�=�;���H��H��H�5>Z H�$�����H�=�=H���Q���H��H��H���#���H�T$dH3%(uH��H��[]A\��2���f���AV1�I��1�AUATUSH��H��H�� H�5,Z dH�%(H�D$1�I�����H��H������H�5=H������L��H��H�5[Y I��H�$�W���H�����u_�H�=�:���H��H�����H���[���H�����L��H��H���U����H�L$dH3%(u2H�� []A\A]A^�L��H��L�,$H�5�X L�t$������)���f���AT1�1�USH��H��H��H�5#Y dH�%(H�D$1�I�����L��H��H�5qX H��H�$�m���H�����t5L��H��H�,$H�5OX �J���H�T$dH3%(uCH��[]A\Ð�H�=w9�o�H��H�����H���<���H�����H��H�������R�f���H��R ������ff.�1�H�=T9��f���H��H�5�R �|�H�x@H��tH�pHH���V���fDH���f.���H��H�5aR �<�H�x0H��tH�p8H������fDH���w������H��H�5!R ��H�x H��tH�p(H������fDH���7������H��H�5�Q ��H�xH��tH�pH�����fDH��������H��H�5�Q �|�H�8H��tH�pH���W����H��������UH��SH��H��H��H��dH�%(H�D$1��u�H��t H�T$dH3%(H��ubH��[]�fDH��U H��H�0�>�H��t)H��H��H�$H�5sV ��H���f�H��V 1�1���H����6�fD��AWAVAUI��ATUSH��(dH�%(H�D$1���H�5�P L��H���d�H��H�bU H��u&L�%�6fD�L����H�<U H��t�1�1�H��L���P�E1�I��H�D$H�$�@H����I9���L��L���=�H�5�U 1�1�H���
�H�H�D$�� �IH�PH�<$H�T$I����L��H���h�H�T$H�|$�I��H���=�H�����L��H��H�����I�$�� �b���I�D$I9��d���H�sH�;�@�H�=�T I�����L��H��H����H�sH�{��H�=�T I�����L��H��H���i�H�s(H�{ ���H�=}T I����L��H��H���?�H�s8H�{0���H�=KT I���s�L��H��H����H�sHH�{@��H�=T I���I�L��H��H�����{pH�=�S M��(�I��H��A��H��L�����{qH�=�S M���I��H��A��H��L����H�ChH�=�S L�d���L��H��H���x�{rH�=S M���I��H��A��H��L���P�H�CxH�=S L�d��L��H��H���-�H���H�=�R H�\�e�H��H��H����H��H�L$dH3%(u H��([]A\A]A^A_�DH���������ff.�@ATI��H��UH��SH�����H�{H��H{L����Hk[]A\�ff.�@ATH�57M US��H���H���1���H�kXI��H���)H�EH���<���H�EH�U�,H�EH�k`H���H�EH�s H��t
H�S(H�����H����H�EH�U�:H�sH�EH��t	H�SH��uhH�kPH��tqH�E�H�����H�EH�U�,H�s@H�EH��t	H�SHH��uL��[]A\��H�{P���L��[]A\��H�{`���H�kPH��u������H��H�CP�H���x���H�k`�/��������H��H�CX����f�����H��H�C`���f.���H�2f������N��f������N�у�f��������N�F���DI���������SH��5H�� dH�%(H�D$1�H��I��H��?L��I��I1�I)��f�L��L��L�II��H��H��H�I)�B�I��A�A�H��u�H��yH�AA�-L��I��L��L9�v#f���0H��H��@�q�P�H9�w�M)�uH�D$dH3%(uH�� [�L��L���
�������fDUH��SH��H��H�>�|�H�H��uH��[]�DH�uH��H�D$����H�D$H��[]�ff.�AWAVI��AUI��ATI��USH��H��8dH�%(H�D$(1��<�H�CH�SL���"H�C���H����H9�t���H9�t���L��H���|�I��I�.E�mL��H��� A�<$��L�t$H���I��H�����\uL��D$$f�|$"I9��A�H�
X4I��f���A��L�H9��<L�=�3L�d$"f�D��L��A�pHc������-A���uE��Kc�L�>��DH����M�fH�����\uL���D$$E1�f�t$"���E1ɉD$H�����K�<4�<�i�P����5H�53��Hc�H�>��A�L�=�.L��L)���L��L��H������M�NM��I9�r�L��L)�tK�4H��H������H���c�H�CH�S�"H�CH�D$(dH3%(�cH��8[]A\A]A^A_��L��A�L�=j.L)��k����K�4H��L�$�8���L�$�K����A�L�=$.�&���fDA�L�=.����fDA�L�=.���fDf��H�5�-���00f���f�L$$A���L�|$"��D$'�T$&����M�fM���I�n�&���f.�1�A�I��H�H��H��A�I��H�H��A�I��H�H��H��A�I��H�H��A�I��H�Ic�H�
g1H+�H�����&H��(��H=���H�B�H��_�EH��/�H��\��H��"���H��H�$��H�CH�sH�$�H�Cf�L9���A�H�
1I��f���A��L�H9�����H�=�,��H�5�/H��1����D1����f�1����f�1����f�1����f�A��I��H������M�vM����H�h��f��H�5�+H������L9��,���H�D$H�D$H�D$����@</��<\t|<"t`�T$�����H�
0f�4����I�I9�������v��������fDH�=�+��H�5�.H��1���A�L�=V+�F���fDA�L�=;+�.���fDE���g���A�L�= +�
���D�H�5+H������/����E��������H�5�*H���������fDH�B�H����H�
�.Hc�H�>��H�5�*H���|���������H�5v*H���\��������H�5M*H���<��������H�53*H�������g�����H�5*H������G����H������H����L��H��H��H�$H��
f��(�����H�$��f��f��$��L��H���p������I������H�=�)��I�.�� ��������H�=z)��H�D$H�(�� �E����3���H�=^)�\�H�5�,H��1��{���1�����ff.�@��ATUS��xdI��uW�H�=#H ���H�5WB H��H���,�H��H������H�SrH�sqL��H��H�����[H��]A\����H�6��t��1��D�@UH��SH��(H�t$H�\$H��dH�%(H�D$1��E�H�L$H��� t0H�QH�\$H�L$H��u3H�D$dH3%(u0H��([]�fDH��H�\$��H�L$H��t�H��H��������ATI��UH��H��SH��H�����E�$$1�1�H�5�F H���D$�I�E��u"�D$f(�fT
"-f.
*-wf.�zBH��H��H��[]A\���H��H�D$�b�H�D$H�=�F ��H�5�'H��1���H��H�D$�3�H�D$H�=WF ��H�5m'H��1������ATUS��x\I��uO�H�=CF ��H�5w@ H��H���L�H��H���!�H�spL��H��H������[H��]A\��H�6��t��1��l�ff.��SH��H��H�5�E 1�1���H��[H�����ff.�f���USH����xZH��uM�H�=�E �\�H�5�? H��H����H���r�H���u2H��H������H��H��[]�a��H�6��t��1���@H�H��H���
�H��H��[]�,�ff.��AWAVAUATI��UH��SH��H��HL�z0L�*dH�%(H�D$81�H�B8L�rH�RhH�D$H�ExH��H�ExH��t	H9���H��H�$�&�H�CH�SH�5�H�$�{H�T$H�CH��L�d$ H�\$H�l$�D$(�&�L�exI�D$�H�ExM��tLH�|$��M��t;H��~6A��1��fD��D9�t M��t�L��L��H�߃����D9�u�D�H���{�H�CH�S�}H�CH�D$8dH3%(u[H��H[]A\A]A^A_�H�T$L��H��H�$�t�H�$M���d�����P�H�ExH�=mC H�5�$H�P�1�H�Ux����*��f.���AUATUSH����xfI��uY�H�=MC ��H�5�= H��H���V��H��I���+�L��L��H��H��H������H��H��[]A\A]��DH�6��t��1��l�ff.����S��x_uU�H�=�B ��H�5�< H��H������H�����H�5�#H��H���S�H��[��f.�H�6��t��1�����ff.����S��x_uU�H�=IB ��H�5}< H��H���R��H���*��H�5]#H��H�����H��[��f.�H�6��t��1��l��ff.����S��x_uU�H�=�A ��H�5�; H��H������H�����H�5�"H��H���S�H��[��f.�H�6��t��1�����ff.��H��t3UH��SH��H��H���"��H��H��H������H��[]�D1�H���f���ATI��USH9��$H��H�5B; ���H��H�53; H�����H��H�����oE�oHM�oP U �oX0]0�o`@e@�ohPmP�op`u`�oxp}pH���H���H�sH�;����H�sH�{H�E�
���H�s(H�{ H�E���H�s8H�{0H�E ���H�{@H�sHH�E0����H�{PH�E@H��tH�wH�����H�EPH�{XH��tH�wH�����H�EXH�{`H��tH�wH����H�E`L��[]A\�H��> H�5!H�81��������SH��H�5�9 �������S��H�H�XhH��[����SH��H�5�9 ������4��H�H�Xx�[�D��SH��H�5�9 �l�������H�H��~H����[�ff.�f���UH��S��H��H�����t�H������H�����t�H���H��u�H��H���H��[]�Y���f���SH��H��dH�%(H�D$1���t�H���2��f�H�����t�H���H��uܾH�=�!�
��H��H������H�=�H�������H��H��H�5�= H�$���H�T$dH3%(uH��[�����D��AVAUATUH��H�5;8 S���@��t�H�����f�H�����t�H�uI��H���H��u�H��% ��L�mL��I�|$@H��u%H��t���I�D$@[�]A\A]A^�@H��t���H�E% L�uH��t	L�uM��tCH��L����M�l$HI�D$@�[]A\A]A^��H��H���I���o���fDH�=�����f.���AVAUATUH��H�5+7 S���@��t�H���r��f�H�����t�H�uI��H���H��u�H��% ��L�mL��I�|$0H��u%H��t���I�D$0[�]A\A]A^�@H��t�v��H�E% L�uH��t	L�uM��tCH��L�����M�l$8I�D$0�[]A\A]A^��H��H���I���o���fDH�=�����f.���AVAUATUH��H�56 S���@��t�H���b��f�H�����t�H�uI��H���H��u�H��% ��L�mL��I�|$ H��u-H��t���I�D$ I�D$([�]A\A]A^�H��t�^��H�E% L�uH��t	L�uM��t;H��L������M�l$(I�D$ �[]A\A]A^�H��H���I���o���fDH�=������f.���AVAUATUH��H�55 S����@��t�H���R��f�H�����t�H�uI��H���H��u�H��% ��L�mL��I�|$H��u-H��t�{��I�D$I�D$[�]A\A]A^�H��t�N��H�E% L�uH��t	L�uM��t;H��L�����M�l$I�D$�[]A\A]A^�H��H���I���o���fDH�=������f.���AVAUATUH��H�5�3 S����@��t�H���B��f�H�����t�H�uI��H���H��u�H��% ��L�mL��I�<$H��u.H��t�l��I�$I�D$[�]A\A]A^�DH��t�>��H�E% L�uH��t	L�uM��t;H��L�����M�l$I�$�[]A\A]A^ÐH��H���I���o���fDH�=������f.���AVAUI��ATI��H�5�2 USH�� dH�%(H�D$1����H�
��L��H��H�����H��H����H�=8 �'��H��H�����H�������H�=�7 ���H��H������H�������H�=�7 ����H��H������H�������H�=�7 ���H��H�����H������H�=p7 ���H��H�����H������<H�==7 L�d$�s��L��H��H�EhdH�5�6 I��H�D$����H������H�=�6 �4��L��H��H�ExH�5�6 I��H�D$���H�������H�=b6 ���L��H��H�5k6 I��H�D$�V��H�������H�={6 ���H��H�����H�=\6 H������Ep���H��H�����H�=�5 H������Eq�|��H��H���a��H�����L���ErH�L$dH3%(��H�� []A\A]A^�L��H���%��H�������H�Eh����@L��H�����H�������H�Ex��@L��H������H��������������H�H�������H������f�H�
HH�<�L�����H���Z���D�����H�H�Eh�4���@��{��H�H�Ex�[���@����H������u�L�0L���H��u�A�� �0L�pL�`I�vM����L�����L�uH�E�	���fD�u�L�0L���H��u�A�� ��L�pL�`I�vM����L����L�u(H�E ����fD��H���L�0L���H���5���A�� ��L�pL�`I�vM����L���+�L�uHH�E@���fD���L�0L���H������A�� t|L�pL�`I�vM���_L�����L�u8H�E0�v���f.�I��L�`A��I�v����I��L�`A��I�v����I��L�`A��I�v�H���I��L�`A��I�v�fDL�0L���H���-���A�� t,L�pL�`I�vM��t3L���+�L�uH�E�>���fDI��L�`A��I�v��fDH�=:H�t$�O��H�t$��H�=H�t$�/��H�t$���DH�=�H�t$���H�t$����DH�=�H�t$����H�t$�R���DH�=�H�t$����H�t$����p����ATI��UH��H�5�, S��H�����H�@hdHǀ���xuL��[]A\�H�u��t�1�������H��t�L�����L��[]A\�AUI��ATI��UH��SH��H��dH�%(H�D$1���tuH���+H���A�������H��0 H��0 H�H9uef�H��H��L��L����H�D$dH3%(��H��[]A\A]�H�������H���u���H�s0 H�H�A0 H9t�H�U0 H9�$H�0 H9�TH���jH���!H������ubH��uuH�����tlH���H��
u`H��L���=��I����H�C�w����H��/ H��a����H��/ H��Q����H��L��H�������DH�i/ H9�XH�5y0 H��������H��H��L�,$H�5S0 �������H�������H���H����H��L�������f�H��H��L��L���/�k���f.��H�5cL�������H����H�UrH�uqH��L���
��)�����H�5L����������H��. H��1�����H�5�L���l�������H�5i/ 1�1�H�������tA�H�����@H�y. H�����f�H�upH��L���!��}���@H�����t�H���H��u�H�UrH�uqH��L���1���M��������AWAVAUI��H��ATUH��SH��XH�B@L�zH�T$H�D$8H�BHH�t$ H�D$@H�H�RhH�D$H�APH�xH�@H�|$HH�yxH�D$H�wH�|$0H�t$(H�qxH��t	H9����H�����H�EH�U�[H�EH�|$8tH�|$@�}�D$01�D�`�QDH����H9�}RH�|$t���H�|$��H��L��H�����H�T$H�t$ H��H�����I�E�� u�I�EH9�|�H�D$H�T$0H�|$8H�PxtOH�|$@��L�l$M��t9H�D$0H��~/A��1��
D��A9�tM��t�L��L��H����R��A9�u�H�����H�EH�U�]H�EH��X[]A\A]A^A_�H�|$(�,���E1���A��E9�����M��t�H�t$L��H��������@H�T$H�t$HH����������H�T$@H�t$8H�����L�l$M���#����W���H�T$@H�t$8H������l���H���u��H�D$H�=�, H�5�
H�PxH�T$H��H�Px1����f.���AUATUSH����xfI��uY�H�=m, �8��H�5�& H��H���v��H��I���K��L��L��H��H��H���'���H��H��[]A\A]�5��DH�6��t��1����ff.��ATI��USH������H��H�5'& H�����H��L��H��H���~���[H��]A\����f���USH��H�����H��H�5�% H�����H��H��[]�f���AT1�UH��H�5M+ S��H��1������xEI��u7�A��uI�����t
I�$��H��t6�L������f�H�u��tź1������f�H�=	+ ����[L��]H��A\���D��AWI��AVAUATUSH��H��HL�rH�BH�t$ H�*I�v`I�~XH�D$I�I�N0M�^8M�fH�WM�nxH�D$H�FH�D$(H�FH�D$�C��~	H����H��t	M����H�|$tKM��~FE��H�\$0E1�L��E����A��E9�tH��t�H�t$H��H��A������E9�u�H�\$0L����udI������?M��uRH��( H�H�
�( H;t-H�
�( H9tzH�5�) 1�L��1����H��I�ǃ�H��tw�L���R��f�I���fI���lA���:A���wH�)( H�H�5'( H9t�H�
s( H9u�L���>��H������H��I�ǃ�H��u�I�����t�I���H���p���H�t$L��L��H������H�|$u|H�L$ H�t$L��H������CH��H1�[]A\A]A^A_�f.�L��H��H������^���DH�
q' I�WH9����I���H������p����H�T$H�t$(H���F���m����H�wH��L�\$8H�L$0�*��L�\$8H�L$0����H�A' H�����f�H��& H��9����H��& H�
�& H�H;�*����R���H��& H�5' H�H9������.���f���H�������H�=K	�2��H�=�����H�5?	H��H��' ����H�5-	H�����H�=�H��' �~��H�=	H�`' �k��H�=T' H�E' �X��H�=9' �L��H��% H�=V' H�52H����H�5���H��H�.' ���H�="' �H����H�5��Z��H�=' �����H�7�H�5����H�=�& �H���H�5����H�=�& 1�H�L��H�5|����H�=�& �H���H�5d���H�=�& 1�H����H�5P���H�=n& �H���H�57���H�=O& 1�H�V��H�5"�j��H�=3& �H�7�H�5�K��H�=& 1�H����H�5�/��H�=�% �H���H�5����H�=�% 1�H�`��H�5�����H�=�% �H���H�5�����H�=�% 1�H���H�5����H�=�% �H���H�5����H�=c% 1�H����H�5��~��H�=G% 1�H����H�5��b��H�=+% �H�?��H�5r�C��H�=% 1�H����H�5d�'��H�=�$ 1�H����H�5X���H�=�$ 1�H�[��H�5G���H�=�$ 1�H���H�57����H�=�$ �H��H�5���H�=}$ 1�H����H�5	���H�=a$ �H���H�5�y���H�=B$ �H�v�H�5��Z���H�=#$ H��H�5��0���H�=	$ 1�H����H�5h�$���H�=�# H�UH�5A���H�=�# �H�W��H�5����H�=�# �H�(��H�5}����H�=�# �H����H�5b���H�=~# H�5X���H�5]H��H�Q# �t��������H�����H�5BH���i���H�=*# H�5��F��������H����H�5H���;���H�=�" H�5���������H�\���H�5�H���
���H�=�" H�5���������H���H�5�H���߿��H�=�" H�5���������H�0��H�5�H��豿��H�=r" H�5�����H����H�5H��H�A" 蜿��H�=5" �����H����H�53�]���H�=" �����H���H�5@�>���H�=�! 1�H����H�50�"���H�=�! H�50����H��H�5H��H��! ���H�=�! H�5�ʿ�������H����H�5�H��迾��H�=�! H�5�蜿�������H���H�5jH��葾��H�=R! H�5��n��������H�b��H�5<H���c���H�=��g���H�=!H��  �T���H�=�H��  �A���H�=�H��  �.���H�=�H��  ����H�=�H�}  ����H�=�H�b  ���H�=�H�G  ���H�=�H�,  �ϼ��H�=�H�  輼��H�=�H�� 詼��H�=�H�� 薼��H�=�H�� 胼��H�=�H�u �p���H�=�H�Z �]���H�=�H�� �J���H�=�H�l �7���H�=�H�Q �$���H�=�H�6 ����H�=�H� ���H�=o��H�=lH�� �߻��H�=eH�� �̻��H�=X���H�=QH��鰻����H��H���C*@instance_variables0123456789abcdef\n\r\t\f\b\\\"\/RSTRING_PTRJSON::GeneratorError%u: %li not allowed in JSONnesting of %ld is too deepnullfalsetrueunallocated JSON::Stateto_hashHashto_hjson/commonExtGeneratorJSON::NestingErrorfrom_stateinitializeinitialize_copyindentindent=spacespace=space_beforespace_before=object_nlobject_nl=array_nlarray_nl=max_nestingmax_nesting=escape_slashescape_slash?escape_slash=check_circular?allow_nan?ascii_only?depthdepth=buffer_initial_lengthbuffer_initial_length=configuremerge[][]=generateGeneratorMethodsObjectto_jsonArrayIntegerFloatStringincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassto_snewallow_nanascii_onlyunpackcreate_idextendkey?__send__respond_to?matchkeysdupJSON/Generator/Statepartial character in source, but hit endsource sequence is illegal/malformed utf-8source sequence is illegal/malformed utf8�������������������������(����������������E�����`��0123456789�0� � �� �� ���������������;TI����p�����X���
i���0
z���`
�����h����H����غ�������8���h��� ����8Ȼ��P����l(����X����x���������(�������� ����HX���d(����8�������(���$8���8x���X����x�����8���x���(��h��P���|8�������h������$h��p����x���H�����0���L����8������	H��,	���L	H��l	����	����	��
H��D
���t
����
����
������`���������P���X�
��@
��
���
���
� ��L��zRx�$0����FJw�?:*3$"D���\�����p|���������%HW����"HT�(���&HW�@���&HW�X���'HX�p���&E�`����&HW0����"HTH����A�Ud�����E�v����/A�m,�0����B�D�D �V
ABE$�����;A�A�G lDA�����TH F
A0���F�A�D �D0�
 DABA@D����F�I�B �A(�A0�JP�
0A(A BBBD0�T����F�E�A �J0t
 AABB������������6H]
KD���9H]
KD$8���9H]
KDDX���9H]
KDdx���9H\
LD(������E�D�M0q
AAGH����1F�B�B �E(�A0�A8�D`�
8A0A(B BBBF(����1B�G�D �`AB8($����B�H�A ��
ABHM
ABHdx���K x�����K�K0�
AD0�p��EA�D�G0T
AAFZAAH�����B�B�E �E(�I0�A8�Gp
8A0A(B BBBH,���|F�A�A �N
DBL(L@���A�D�D@V
AAG0x����B�D�G �G0N
 GABE,�@��tF�A�A �J
DBH����#A�Z0�����E�A�D K
DAFjDAL,���B�B�B �B(�D0�D8�G�#
8A0A(B BBBD8|`���F�B�A �A(�D0O
(D ABBJ����tE�L
O���tE�L
O�t��tE�L
O(���>F�D�O WAAF��,D���XF�D�A �1
ABAt��)E�czRx�� P�������+E�eP1�������3E�m����$ ��WE�D�I vIA HD���E�G �
AALl���F�B�B �A(�K0�i
(F BBBE@
(A BBBIL����F�B�B �A(�K0�i
(F BBBE@
(A BBBIL	P��F�B�B �A(�K0�r
(F BBBD@
(A BBBAL\	��F�B�B �A(�K0�r
(F BBBD@
(A BBBAL�	���F�B�B �A(�K0�p
(F BBBF
(A BBBB@�	���F�B�E �K(�A0�DP'
0A(A BBBD zRx�P�����(˫��4x
��mF�D�K �g
ABAiAB8�
L��9B�E�D �D(�G@�
(A ABBAL�
P��vB�B�B �H(�A0�D8�D��
8A0A(B BBBA8<����F�B�A �A(�D0O
(D ABBJ(x���>B�D�A �lDB$����.E�A�G [DA(�����F�C�K �yDEL�d��F�E�B �B(�A0�A8�G��
8C0A(B BBBKH��HsGNU�� P { �d�#�!�����
pa�z �z ���o`
�
x} ��	���o���o����o�o$���oh{ � 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p����GA$3a1�}aGA$3p1113�paGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY� paGA+GLIBCXX_ASSERTIONSgenerator.so-3.1.7-8.el8.x86_64.debug�<�7zXZ�ִF!t/��W>]?�E�h=��ڊ�2N��"�� ��t�͢�����N<v�[�ɂ�K�SH�s)'�U�b�J�p�h|���6Z2DF`<5U<&d�睱���]&��Z��P�"k_1��%'^c�2��Ww^s�O�5�< /Lb�8i�	�K|x9��}x`�1��?�oJ�s�8g����ь>�-n�Kܓ�_��b`Qʌ�Ρ�Nї��`����J=7cxV�ۚ:�c�~�"����V��
m���,��J�yF>���X6�׭B,���G�g�+_�_��$�]�?�����Fw�$��=o�1�����vq>bbl��)��Cœ���^�0��+)v�]w�_j�
���e�A�l��������Lq�4� z.%4�統W��A����2�g��$U&q�׿�^�}��Q�9�G��"��D�Ij�7���YYA�5��}&n[&!g����P�V0�X���%::#��.��m�m%$jĜǺ�
�*J�DP�XO\uY�X�?��������l��n�����b��m�J�{�B�uy�|�s�
X@�k�vf����1�g�đ�ױ�Tt���=�DUu.��Vy�f�=a�͗��V�wÖ4�F�92/ir@ͬ28��v��HZ*w�	��
��4j!=-��с�/aV"��.s�S�S:c����9ω3�v!�yE�Ж0�?B��Q��B�:.`��۫���=����[:,�μعyn����@J�1����e=��
����]�V�0vo��Bj�#��^_=]�^���B��F0Ê��'�6b�R�Ɩ$����UA��<�Ϗ9�2G�[sŤ	��;�6��Mޭ>����)��T؟��_�s�^\���	PÁ�@����	<��P
W�DŽ����B�H�°?�]�Bkܞ�(�D���T2��%��H�BR*�d���Ek�\"#�x ���
J�b��N(�����g)��m57�ͤ@�v�Qq��{~�C�TĐ�rF�l��(�.=�T�u��	������.n�8��,K��Io�
6�ƞ�S�j�n�Š�(p�er����	͌�o���x�:2���"� d��AP��!_�L�s�`�=4�˲�3*78Q,�n]�%��s�J���)��#�$<��=V黼�3/Yct%����BU�U���,��S1�����43嫄|����{6�tR�:�XM�v"�uMN��R��r�jm	Os�r���w�jղ�j��4�V?'�٨0��C�#��9K?b!)чI���B��w߄�i�O��{��=p�Z�A/3(g���ݰ��T�O!4Qʠ�iV��⹢� �R�sɋ�
���f�>�^J]��!�djy��d\���*ܴ���P�8-a�{����$��߅����q������uQ"�4�K�$U�̤�%<��@.6�z�y>�fo��\����D��a�Ʌ2AP���O,aJn�d쳈�Ԕ�*��4�E?x�r\o���~z߿�j���Q�h�wt��[���HhH�"Rx�@V����[;��S3�R,��L	��۸�$.�9)�b=�1�hVg0D��H����O�c���4�ڂu��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0

8���o$$�E���o��@T�^B�h��c���n���w���A}papa
��a�a� �8g8gT��i�id��u�u ��z �z��z �z�{ {h �h{ h{�x} x}x�� �����`�H8�,d���"PK<v�Z)ruby/io-console-0.5.11/gem.build_completenu�[���PK<v�Z�\0p0p$ruby/io-console-0.5.11/io/console.sonuȯ��ELF>�"@0i@8	@xVxV �Z�Z �Z H� ([([ ([ 888$$XVXVXV  S�tdXVXVXV  P�td�J�J�J��Q�tdR�td�Z�Z �Z HPGNU���~B��0z
��M~�Y��+T�H!@TVXBE���|�qX/D�o������>'��� `�uP���.9��p�S��6�:�of���U$��� �U�����H����"�"h�h�yU,���Bq��9, �{F"r[#��` �X` ` �Bp�@G�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddatacfmakerawrb_data_typed_object_zallocrb_funcallvrb_default_rsrb_io_write__errno_locationtcsetattrrb_num2uintrb_sprintfrb_io_taint_checkrb_io_check_closedrb_sys_fail_str__stack_chk_failtcgetattrtcflushrb_string_value_cstrrb_io_get_write_iorb_ensurerb_stdinrb_stderrrb_error_arityrb_str_new_staticrb_str_catfrb_io_flushrb_convert_typerb_eArgErrorrb_raiserb_cIOrb_cFilerb_const_definedrb_cloexec_openrb_update_max_fdrb_class_new_instancerb_obj_freezerb_const_setrb_unexpected_typerb_const_getrb_const_removerb_id2symrb_io_closerb_check_idrb_keyword_given_prb_funcallv_kwstrlenrb_io_getbyterb_ary_newrb_ary_pushrb_str_newrb_str_new_cstrioctlrb_assoc_newrb_fix2intrb_num2intrb_Arrayrb_ary_detransientrb_protectrb_syserr_failrb_jump_tagrb_io_getsrb_yieldrb_hash_duprb_hash_arefrb_funcallv_publicrb_ary_resizerb_ary_ptr_use_startrb_ary_ptr_use_endrb_debug_rstring_null_ptrrb_obj_classInitVM_consolerb_f_notimplementrb_define_module_underrb_cObjectrb_define_class_underrb_define_alloc_funcrb_undef_methodInit_consolerb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.1libm.so.6libc.so.6_edata__bss_startGLIBC_2.4GLIBC_2.2.5/opt/alt/ruby31/lib64�ii
ui	�Z P#�Z #�Z �Z �Z 2J�_ �_ 	�_ 
�_ �_ "�_ *�_ +�_ 5�_ >�_ L�_ M�_ N�_ O�_ SP] X] `] h] p] x] �] �] 
�] �] �] �] �] �] �] �] �] �] �] �] �] �] ^ ^ ^ ^  ^ (^  0^ !8^ #@^ $H^ %P^ &X^ '`^ (h^ )p^ ,x^ -�^ .�^ /�^ 0�^ 1�^ 2�^ 3�^ 4�^ 6�^ 7�^ 8�^ 9�^ :�^ ;�^ <�^ =�^ ?_ @_ A_ B_ C _ D(_ W0_ E8_ F@_ GH_ HP_ IX_ J`_ Kh_ Op_ Px_ Q�_ R��H��H�9F H��t��H����5�C �%�C ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF��������%5? D���%-? D���%%? D���%? D���%? D���%
? D���%? D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%}> D���%u> D���%m> D���%e> D���%]> D���%U> D���%M> D���%E> D���%=> D���%5> D���%-> D���%%> D���%> D���%> D���%
> D���%> D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%}= D���%u= D���%m= D���%e= D���%]= D���%U= D���%M= D���%E= D���%== D���%5= D���%-= D���%%= D���%= D���%= D���%
= D���%= DH�=&�����%f.�H�=Y= H�R= H9�tH��< H��t	�����H�=)= H�5"= H)�H��H��H��?H�H�tH��< H��t��fD�����=�< u+UH�=�< H��tH�=�7 �	����d�����< ]������w������H�"�O{�H	�����g�����H��H�wH�� ff.�@��UH��H�5!7 SH��H���4���H�����t�HxH��H��[]�D�`�H��H��[]�f.���ATI��H�5�6 UH��S���L��H�5�6 H�������o�oHK�oP S H�P0H�S0�@8�C8H��[]A\�D��UH��SH��H������C��ωCH��t.�U��x�S�U��x�S�U��t���CH�H	H��[]����H�6 �<�{���ff.�SH��5 H��<�[���foH�P foKJfoS R H�K0H�J0�K8�J8[�ff.�����H��H�5; H�׉����fD��H�5�: 1�1�����ff.����H�-: H�0���ff.�f�U��SH��H���
�����8u&1�H�ډ�������u�H���[]�f.�H��1�[]����SH��H���0���H�="�p1����H��H���4���H��[�ff.�@��ATI��UH��H��S���L��H�������SH�=�!�p1����H��H�����H��[]A\����UH��H�5a4 SH��H��H��XdH�%(H�D$H1��a���H���o)$�oH)L$�oP )T$ H�P0H�T$0�@8�D$8���H�XH������{H�������tH�L$HdH3%(H��uH��X[]�H�{ �O�������f.���USH��XdH�%(H�D$H1�H���.���H�XH���2����{H���'�����u&H�=�8 H���t���H�T$HdH3%(uH��X[]�H�{ �������ff.�@��SH��PdH�%(H�D$H1����H�XH������{H�������u)�D$��H��H�H�Ѓ�H�T$HdH3%(uH��P[�H�{ �U���� �����AVI��AUATUH��SH��PdH�%(H�D$H1�I���2���H�XH���6���D�cL��D���'�����uL�D$I�����u6��D$L��D��������t)H�T$HdH3%(H��uH��P[]A\A]A^Ã�x�D$��H�{ ����y���f���AUATUH��SH��XdH�%(H�D$H1�I�����H�XH�����D�cL��D���|�����uCL��D��H�"�L${�H	$�g�����tH�T$HdH3%(H��uH��X[]A\A]�H�{ �����������UH��SH�����H�XH�������{1������u
H��H��[]�H�{ ����SH��dH�%(H�D$1�H�H��tH��H��H�$�c�H�4$H���g�H�D$dH3%(uH��[��<���ff.����AUATA��USH������H��I��H������H��H9�tXA��uH��L���_���H��H��H�"���H�=��f���H��H��tH�5�5 1�1�H������H��H��[]A\A]�@H�5 H9u�H�-5 H�(됺1����@AUI��ATI��U��SH��H��XdH�%(H�D$H1����1���uDH�C0�oL���oK�oS H�D$0�C8H��)$H��)L$)T$ �D$8A��H�މ��n�����H�T$HdH3%(��uH��X[]A\A]����f.���S��H������H�=�1ƃ�S)�1��}���H��[H����AUATI��H�=�U��1�S��H���a�I�Ņ�t&����L����H�5d1��)ƒ�A1����t$�؉�H�5DL����1Ã�C��)�1��l�L��L���A�H��L��[]A\A]�O�ff.�@��SH�H��H�
�H����M�H��� t%H����H��u3H��H�PH�0H��[���@H�xuH�@ H��[H�PH�0���H�F3 H�5�H�81���ff.�f���AWAVAUATA��USH��8dH�%(H�D$(1�����I��H���1�H��2 H9u
H��2 H�H�5@3 H�������H���W1ҾH�=�,�Lc�E���(D����H��H�t$K�D-�H�D$H�D$��H��I����L�xL����H�=��k�H�����A�OL��H��I�G H�5�2 ��H���H�L$(dH3%(L����H��8[]A\A]A^A_�f�H�.@�����@����H���\�@H�5)2 H����I�ŨtrH�52 H���c�H������H�=�1 �~�H9�����A�������A��N���DH�=�1 �L�A�������H9���������H�����t�H���H���v���I�EH���i����x��_���H�����H�=a1 ���H9�uWA��uQL��A����H�5D1 H��������H��������H�E��H�����������DI�H�|$H�D$���H��H��t.A��I����L��L��D��A��H����I���>���DH��0 �у�1�������AVAUATUSH��H��dH�%(H�D$1�H����H��D�n@����H�����tyH���H��umH���u�L�`L���y�M�t$XH��M���H���A�|$H��H����H���u`A�D$��u$H�����H��H���l�H���u9fD�H�L$dH3%(�H��[]A\A]A^�f.�E1�H����H��7u�H����H=�u��*�1�I��DH����H��t+H���J���;tE�PЃ�	w-�T�H�ߍlP��]�H��u�H��L�����\����E��t#A9�uE1�롐Hc�L��H�t-1��~��@Hc�L��D$H�t-�d�H�|$�����{�L��H�����L�����������ff.���ATUH��S���H�XH�����H�{XH��u�{�����u"H��[]A\�f���L�`L����A�|$��H�{ �o�ff.�@��ATUH��S�`�H�XH���d�H�{XH��u+�{�H�5��H��x*H��[]A\�f.���L�`L����A�|$�H�{ ���ff.�@��USH��dH�%(H�D$1����H�XH�����H�{XH��uL�{1�H��T�
���uQ�D$H�t�$H�|���H�L$dH3%(u$H��[]���k�H�hH���o��}���H�{ �<�ff.����AUATUH��SH���*�H�XH���.�H�{XD�cH��u!�D������uOH��H��[]A\A]�f����L�hL�����E�mA���t�E9�t�1�D�������u�D������t�H�{ �����SH��H����t ����t
��H���]���H��[�������f���SH��H����t�K���uH��[�f�����t��H��1��;���H��[�fD��SH��H����t ����t��H�������H��[�fD�[���f���SH��H����t�����uH��[�f��+���t��H��1����H��[�fD��USH����w^H��uH��H��H����H�5'+ 1�1�H���;�H��H��tH�5+ 1�1�H����H��* H��H�0�
�H��H��[]ú1�������SH��H����t����uH��[�f��k���t��H��1�����H��[�@��SH��H����t�����uH��[�f��+���t��H��1������H��[�@��AWAVAUI��ATUSH��H��(dH�%(H�D$1��s�L�`L���w�H�����H��H��� ttH��H����H���v��MI�|$XH�KA�A�H�SH����H�T$H�$��H�XH�����[H�T$H�$�[�H�kH��t
H������H�[ H�H�SA�A�H��uL�{L�sI�|$XH��u�A�\$H�D$1�H��tH��H�$� �H�$f�D$1�H��tH����f�D$1�I��tL�����f�D$1�I��tL�����f�D$H�T$1��T���u���ubH�t$dH34%(L��uYH��([]A\A]A^A_��H���P�H� ����H���
���H�+( H��H�5�H�81���I�|$ ���`�AWAVAUATM��UH��SH��H��H�t$H�T$dH�%(H��$�1��D$,�����\�L�xL���`�E�wA�����I�XE���D$H�����D$,����H��E1���H�XH����A���tD9k��E���	�|$,���MH��$�dH3%(H���%H�ĸ[]A\A]A^A_ÐH�t$0L��H��D���������D$,E��E�w�D$I�XH��tE���m�E��L�xL���n�E�wA����&���E9�����H�t$lL��H��D���t���LH�t$H�|$H�T$,�D$,A����H��H����H�XH����A������f�H�{XH����{D9�����H�t$l������������D$,������D$f��|$1���D���t����fDH�t$H�|$H�T$,E1��I�H��H���^�H�XH���b�A����_���D9k�L���H�t$0D���Q����7����$��D$,������D$E���m����(������A�����E�w��D$�h���fD���A�������D$���f.���H�XH�����{D9�����������Y�f���H�5�$ E1�H�
��H��������H�5�$ E1�H�
k�H�������H�5�$ E1�H�
+�H�����H��tzATI��U��SH��@��uX@��t"H�s$ H��L��H�5�H�81����@H�����t�H���H��
u�H���C�H�‰�9�r�[]A\�D��H����fD1��ff.�f���SH��H��H����T���H�=���1����H��H���9�H��[�@��S�H�����H�ߺ����H��[����SH�0H��H������H�=$��1���H��H�����H��[�@AVAUATU��SH��dH�%(H�D$1���.��1�H�T$dH3%(��H��[]A\A]A^�DHc�A��H��L�d��=���uD9�~�D��1����8��L�����I��D9��H��t�H�=# ��L��H��� �H�=�" I����L��H����H�=�" I���w�L��H�����H�H���C1�I��tL��A��������H��I��t/L��H���*H�$���H�Ǩtb���CH��H������H��u�CH�������H��tH��! H��H�5rH�81��@��CH���������f����U�������1���������AT1��USH��1�H��0dH�%(H�D$(1�H�L$���H�T$H��H�\$I��H��H�
��H�D$H�5��H��H�D$ �����uH��H�����u,@�H�t$(dH34%(H���!H��0[]A\�H�H�ƒ�H��u�� ��H�{u�H�S H�B�u�H�����t�H�H�΃�H��u��� ��H��H����H���x����8R�o���L�"�H��H�j��L�����H��I�����A��H��Mc�H���6��K�T$H�߃�H�Hc����H�����H�T-H��H�P��������f�H5�H�S���6������fDH�x����H�@H���P����s����ff.���AVAUATI��1�USH��`dH�%(H�D$X1�H�L$H�\$�,���L��I����H�hH����D�mH��D������u:L��H�����H��D������t H�T$XdH3%(L��uH��`[]A\A]A^�H�} ���j��f.���SH��1�H�� dH�%(H�D$1�H�L$���H�5� H��H��I��H�
Q����H�T$dH3%(uH�� [�������SH��1�H�� dH�%(H�D$1�H�L$�(���H��H�
��H��I��H�5���\���H�T$dH3%(uH�� [�������ATI��H�5@ UH��S��H��H��`dH�%(H�D$X1��=��H�L$��L���oH�\$)D$�oH)L$ �oP )T$0H�P0H�T$@�@81҉D$H�z���H��H���O�H�����H��H����H�L$XdH3%(u	H��`[]A\�����ff.���AUI��H�5� ATA��H��USH��H��(dH�%(H�D$1��z��1�H�L$L��D��H�����H��H����H�T$dH3%(uH��(H��[]A\A]��g�����U�����H���H�5�SH��H�� H�;���H�;�����H����H�5�����H�;1�H�����H�5x����H�;1�H���H�5g���H�;�����H����H�5T���H�;�H���H�5?���H�;1�H��H�5-�k��H�;1�H��H�5�S��H�;�H���H�5
�8��H�;1�H�,���H�5� ��H�;1�H���H�5����H�;�H���H�5�����H�;1�H�A�H�5�����H�;1�H�Y�H�5����H�;1�H���H�5����H�;1�H���H�5����H�;�H���H�5��r��H�;1�H�����H�5n�Z��H�;�H�k�H�5Z�?��H�;�H���H�5G�$��H�;�H���H�56�	��H�;�H���H�5'����H�;�H���H�5����H�;�H���H�5
���H�;�H���H�5����H�;�H�^���H�5����H�;�H�C�H�5��g��H�;�H���H�5��L��H�;1�H�P���H�5��4��H�-� H�;�H�5�H�����H�;H��1�H�5����H�;�����H���H�5�����H�;�����H���H�5�����H�;H�5����������H����H�5[H��H����������H��H�`�H�5E���H� H�;H�5PH�����H�5$��H��H�b �U��H�=V H�50�b��H�=C �H�/��H�5�#��H�=$ �H����H�5����H�= �����H�A���H�5�����H�=� H�������[H�]���H�5_]�����H��H�=�����H�=�H�� ����H�=�H�� ���H�=CH�� ���H�=�H�� ���H�=tH�� �}��H�=eH�w �j��H�=WH�\ �W��H�=IH�A �D��H� H��������H��H���[%dG[%d;%dH[%d%cto_aryArrayexpected 2D coordinate/dev/ttywrong %s mode: %liscreen erase[%dJline erase[%dKRSTRING_PTRrawraw!cookedcooked!getchecho=echo?console_modeconsole_mode=noechowinsizewinsize=iflushioflushbeepgotocursorcursor=cursor_upcursor_downcursor_leftcursor_rightgoto_columnerase_lineerase_screenscroll_forwardscroll_backwardclear_screenpressed?check_winsize_changedgetpassconsolegeneric_readableConsoleModeinitializeinitialize_copygetcgetschomp!closemintimeintr__send__console-modewrong number of arguments (given %ld, expected 2 or 4)true or false expected as intr: %li;�<���h��0���X
���H���\���p���X���������8�� ���<���P���d���x8���x�������x�� ���Lh��p����������X��@�|������x��0��|���X������D(��h��������(����$��D(�d(��8�X�	x�$	��8	(�l	h�	��	��	��
x���l
(����
�����
���
����,(���h�����zRx�$����FJw�?:*3$"D0��p\h��pt��	�p��0�|��FE�K�G V
DAFHDA(����[F�K�D �BAB$����XE�D�G EAA ��4��BA�@PD��dP��x\��0�h��IA�C�G c
FAKDCA����1E�k(����HF�D�G �sAB(����E�K�Jp{
AAA(4P��qE�A�DpV
AAA `���pE�D`W
AA@�����F�E�B �A(�D0�D�q
0A(A BBBA8�\���F�B�A �D(�D�s
(A ABBA(���?E�D�D c
DAA 0���TA�D H
AA8T���F�B�D �A(�D0i
(D ABBE8�����B�E�D �C(�G�u
(A ABBA����/C�d4�����B�B�K �E(�F0i(D ABB  d���E�B
IO
LHD����F�B�B �B(�D0�A8�Dp
8A0A(B BBBJ@�t���F�B�B �A(�A0�G@�
0A(A BBBK(� �aF�A�D �o
ABC(d�qF�A�D �w
ABK(,���E�A�D0l
AAH8X<��F�B�A �D(�D0s
(D ABBC���7E�b
I���:E�X
CY���7E�d
G��:E�X
CY((�yE�A�D ]
DAA8|�<E�X
C[X��<E�X
C[Hx��F�B�B �E(�A0�A8�G`�
8A0A(B BBBHH�p�B�B�B �B(�D0�D8�J��
8A0A(B BBBB4�$@�8L�0LX��H�D�C �X
ABFP������<E�v���)E�c���<E�v@���B�B�B �A(�C0�D@t
0A(A BBBF0���F�H�A �IP�
 AABDzRx�P���$x��@���F�B�B �F(�A0�D�z
0A(A BBBA �p�_E�I0J
AA ���_E�I0J
AA0	���F�K�D �I��
 AABA8@	t�yF�L�G �A(�GPI
(D ABBA(|	��pE�T�D 9FO�	��H�GNU�P##�Z 2J��������!���%h
�G�Z �Z ���o`�
�
;8] ���	���o���o����o�o,���o([ ������ 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������GA$3a1h	HGA$3p1113�"�GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`#�GGA+GLIBCXX_ASSERTIONSconsole.so-3.1.7-8.el8.x86_64.debug�s�7zXZ�ִF!t/���`]?�E�h=��ڊ�2N��͑� ��`�'�'ܰ�%P<���P�5%�����uݝ�
�_�vKn���3[�YT�9���9uRy�F��U�ZRWg+"���O��\q��uM�a��)9���l��BT��r�AU�Dn�Uǃн&'��[�.eϽg9��D�<�Aƚ�D�MJ?�Uh7�h�v����<�����w;���X�J���i�u�(I/qvA��pG������,([5M%W�*�ũ��Գ�"0��=��myV�ѐ�c�v	95m����6���,�ei^j��r��Nq��"�M3@�p���e�?f\�b�c7��V_�ԕ�S���HY��\���1�44.
)�d�R.o�w^�Fe�w"yˁ�W���(%��}��%	�T7�*l���ٔ����
qW�`A��&bĿ=;�|��bN.b���jG�;��f��u.D����[�O������:�S�Z�B�.���u*}�܁iq�1x���)��5��(�<�s�/�5���Dp�8�?8�l��i�����|�$aR��K;�}rU��
�
}�ϝ(��u�*��2�?�ԁR/�v<��k�̄�i��7[1�]t��_	���ɂ�j
K+_��V����:�sք�S�Ak
&9����%�����&�V��'��s�j+�Wr��;��)�q�����n�Rÿ�9b�2�I�Kn���l������l�e
3�����7�n��ķDb�:EA�=�L�Z2.��ٚ��7��(�� \�"�T�P�k���[��m�ᝋ��,9��^)2a�����0q38�j�W���7{��}�{EC�r���z(�'����0��F�zC k��sN��h��L���۽����V�t�;NM	�o?"''����:I	���{!4s�F�d!_���ŵ����:ClfS��1	'�ڃ͙k�1�s"&�8BB�U�9�������Xkx�Ɍv
�:5&�Fy)�|T�E!��t��kYLzJ�'o��
h�b�g�:kR�L�y%C�=�l�������¤v��GJH#��DWcQ�>�D�7�I�{��z��������O}�R5�נ�N�7t"w��x�GW�jZc�Yڙ>e��,֛^�j����v�r������S�b��W?¼��eܞ�{�����o0�5b�PҎ�yN����=A�-���>���nuf
(r���C�-��Qͭ�T�E�rNH��CV߀o���l�4w=����@�!�N)�5�*@=*��ś�P��I4�g3�/�o��C�oCT��(��9�zN�I�n�����A�Uq^3�0+/�i��f�r�-0g;L��7����O��.��r�p*�
�-G�S��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(��X0�
�
;8���o,,�E���o��0T�^B���hhhc���npw�"�"|%}�G�G
�HH���J�J���L�L�	�XVXV ��Z �Z��Z �Z��Z �Zh �([ ([�8] 8]��` �_X�X``�_H@b(hb�h"PK�Z"ruby/json-2.7.2/gem.build_completenu�[���PK�Zb�N�n�n"ruby/json-2.7.2/json/ext/parser.sonuȯ��ELF>�@�g@8	@xXxX 0[0[ 0[ �� �[�[ �[   888$$XXXXXX  S�tdXXXXXX  P�td�T�T�T��Q�tdR�td0[0[ 0[ ��GNU�,oEK��K��kU�����D�@ �DGBE���|ŷ|!�qX�G�� �TZ���q�����UD_��p;1���u�� 	K��[��"�"��.���&�`ev, �0F"�� ���G` Z�` ;@EN` __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeruby_xfreerb_gc_mark_mayberuby_xrealloc2ruby_xmalloc2rb_check_typeddatarb_str_duprb_eTypeErrorrb_raiserb_funcallvrb_ary_entryrb_ary_push__stack_chk_failrb_data_typed_object_zallocruby_xmallocrb_error_arityrb_keyword_given_prb_string_valuerb_enc_getrb_ascii8bit_encodingrb_utf8_encodingrb_str_conv_encrb_hash_duprb_id2symrb_hash_arefrb_enc_associaterb_eArgErrorrb_fix2intrb_unexpected_typerb_enc_interned_strmemcpyrb_utf8_str_newrb_str_internrb_enc_raiserb_ary_new_caparb_hash_foreachrb_obj_freeze_inlinerb_class_new_instancerb_cstr2inumrb_hash_newrb_ary_newrb_respond_torb_str_new_cstrrb_hash_asetrb_cstr_to_dblrb_float_newrb_class_namestrrchrrb_str_substrrb_path_to_classrb_sym2idrb_mKernelInit_parserrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_path2classrb_gc_register_mark_objectrb_define_alloc_funcrb_internrb_const_getrb_define_methodlibruby.so.3.3libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.2.5GLIBC_2.4/opt/alt/ruby33/lib64=���_ui	jii
v0[ P8[ @[ @[ `[ 6Jh[  p[ �x[ ��_ �_ �_ �_ #�_ :�_ ;�_ <�_ =�] �] �] �] ^ ^ 	^ 
^  ^ (^ 
0^ 8^ @^ H^ P^ X^ `^ h^ p^ x^ �^ �^ �^ �^ �^ �^ �^ �^ �^  �^ !�^ "�^ $�^ %�^ &�^ '�^ (_ )_ *_ +_ , _ -(_ .0_ /8_ 0@_ 1H_ 2P_ 3X_ 4`_ 5h_ 6p_ 7x_ 8�_ 9�_ =�_ >�_ ?�_ @�_ A�_ B�_ C��H��H�J H��t��H����5�G �%�G ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1�������%D D���%
D D���%D D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%}C D���%uC D���%mC D���%eC D���%]C D���%UC D���%MC D���%EC D���%=C D���%5C D���%-C D���%%C D���%C D���%C D���%
C D���%C D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%}B D���%uB D���%mB D���%eB D���%]B D���%UB D���%MB D���%EB D���%=B D���H������f.�DH�=YB H�RB H9�tH�B H��t	�����H�=)B H�5"B H)�H��H��H��?H�H�tH��A H��t��fD�����=�A u+UH�=�A H��tH�== �����d�����A ]������w�����H�
V5H���x=�WH���x0H��H	��WH���xH��H	��WH���xH��H	�ø���f.���H�GhH�@H��p�ff.�@��USH��H��H�ohH�}H��t���H�����H��H��[]���ff.���SH��H�?���H�{ ���H�{@���H�{H���H�{P���H�{`[���f�ATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?�����I�$I�D$I�L$�ff.���H��H�5a; ���H�8H��t	H������H��? H�5](H�81������AUATUS�H��dH�%(H�D$1�H��$t&I��H�5=@ H��I��1�1�L������H�����u#1�H�L$dH3%(��uIH��[]A\A]�@1�L���f���H��H��H�5�? H�$���H�����t�L��L������������UH�t: �pSH���%���H��H�h �@uH�h � ���f�@H�@H�H�EhH��H��[]�D��AVI��AUI��H�5: ATU��H��SH�� dH�%(H�D$1����H�8�����������f.�H��Hc�M�d��������I�EH�D$��u��CXH�C H�C(dH�C@H�CHH�CPL�d$L������H��H�����I������I9��2�M���H��I������H��L��H���$���H��L��H�l$���H�D$H�PH�SH�PH� tH�PH�L��H�SH�L$dH3%(��H�� []A\A]A^�L��� ���I�ă�����I�EH�D$������I�������H�=�= H�l$����H��L��H�5e= I��H�D$�X���H��������C(dH�=f= ���H��L��H�5'= I��H�D$����H������^�C,H�= = �K���H��L��H�5�< I��H�D$����H�������C4H�=z< �
���H��L��H�5�< I��H�D$���H��������C8H�=�< ����H��L��H�5m< I��H�D$�`���H�������CXH�=�< ���H��L��H�5/< I��H�D$�"���H������FL��L���;���H�C H�=< �K���H��L��H�5�; I��H�D$����H������XH�C@H�=�; ����H��L��H�5�; I��H�D$���H������H�CHH�=�; ����H��L��H�5k; I��H�D$�^���H�������H�CPH�=+; ���H��L��H�5,; I��H�D$����H�������H�C`���fD@��uH��uEH������H������H��H��������DH�5	; H�=J; 1�1����H�C ���H�EH�ƒ�H��t���t��f�L��L����H������-�C(�(���DL��L����H�����HD�H�C`���DL��L���e�1�H���‰SX�S4������H������H��9 H�5�#H�81���DL��L����H����������C8�N���f�L��L����H����������C4����L��L�����H����������C,����L��L����H�CH��@L��L����H�C@���@L��L����H�CP������t���H���L����C(����?�H��8 H�5h!H�81����UH��AWAVI��AUI��ATSH��8�U��M�dH�%(H�E�1�H��H)�H�E�H=��H�u��H��HE�H��H��H��H%�H)�H���H��H9�tH��H��$�H9�u���H�D$H���H�E�L�}�M��1�M9�w�m�I9�vWI��A�<$\I�\$u�M9�vL��L)���I�A�D$<f����<\�|<b�d<"�LI��I9�w�L9��L��H+]��M�������H�}�H��H�����H�}�����U�����H�u�dH34%(��H�e�[A\A]A^A_]�f.�<r���<t��<u�f���I�E�H9��CI�|$�k���I��%�H=��wI�\$I�E�H9���A�|$\�H�5D ��DA����t1��ƒ��A�D9�r�L�sI�L�����fD<n����H�5=��f��H�52�f��H�5 �f��H�5�f��H�5��w�����H�5��_����H��L��L��H�M���H�M�����D�H�5��'����H�}�H����H�}���W���H�}�H�E���U�H�E����F���H������9���DL)��>M�L��H+]�����I�\$I��w+D�EĿH�u�����H���3�H�E��)���I���v:I������I�������E�?�H�u��M���H)�H�L�����L��A��?H�uĿH��A�Ȁ��D�EňE�����A�|$u����I�|$I�\$�%�L��I��
%�H��E����H��H��I	�I	�L���H�u�H�����E�L��H����?�Ȁ�E�L��H����?�Ȁ�E�D����?�Ȁ�E����H��L��L�������L���H�u�H�����E�L��A��?H��A�Ȁ��?D�EƃȀ�E��G���H�}��w#H��4 �i�L��H��H��H��1��R�H�}������2�H�}��w#H��4 �,�L��H�JH��H��1���H�}��\���f.�AVAUI��ATUH��SH��H��dH�%(H�D$1�H�wH9��n�>"��E1�EX��tcH�m`H�����tV��T�I�uI��H����H�5N�H��L������L����H�������A��uH�C�fD1�H�t$dH34%(��H��[]A\A]A^�DH��L�`L9���H��"t7��\uL�`L9���H��u�����1L���f.��M0��u1�u81҅���H�{L������UXI�E���L���H���@�}41ɺ�������I�UH�5�2 H��H��H�$��Q�I�E����A����DH�pH9��]�H��@����0��	��H�pH9��)�H��@����0��	��H�pH9���H��@����0��	wgL�`L9���@<@����0<	����L��E1���H�m`H��������L��A�������F�]�����a���Q���H�������F�c�����a���W�����f���F�e�����a���Y����f�<F�9�����a<�.����Z����H��A��@���H��A��2���H��A��$���H��A�����H��A�����H��A�������AWI��AVAUI��ATUSH��XdH�%(H�D$H1�H9�tGH��H��H�
�M�A�<n���Hc�H�>��fDH�EH9�t�}r�mDA�G8��t	I�}��E1�H�t$HdH34%(L����H��X[]A\A]A^A_�fDH��DH��H9��q���멃�0��	w��H�EH9��C�	H�5LH��������%A�,���
H��/ L�e	I�E�DH�EH9��C����}a�9���H�EH9��,����}N�"���A�w,����H��/ L�eI�E�f�A�@I�WH�lj$A�G(����9�����H�=f/ H�5a1��x��H�EH9�������}a�����H�EH9�������}l�����H�EH9�������}s�{���H�EH9��n����}e�d���I�EL�e�H�EH9��C����}u�9���H�EH9��,����}l�"���H�EH9������}l����I�EL�e�f.�H�EH9�����M��*tb��/t��A�O8�����������8
�����H��H9�u����f�H��H�hH9�������@<*t�</����H��DH��H9��k����8*u���@H�EH9��S����}n�I���H�EH9��<����}f�2���H�EH9��%����}i����H�EH9������}n����H�EH9�������}i���H�EH9�����}t����H�EH9������}y�����A�,�XH�-- L�eI�E�^A�G(E�`I�W@H�D$ A9�������H�=- D��H�5�1���f�L��H��H��L�����I��H��LD�A�W8���M���I�}����?�����
�v������^��������H����1�1����I�EH9��j�}[�`H��H�
hL�rL9��l�r�F�<n�I��Hc�H�>���0@��	�CfDH�D$(H�D$H�D$0H�D$D�$H�L$H��L��H�D$(L�����I��H����I�HH�t$(I�}��H�t$0H�L$�H�5&+ �Q�I�D$�H�PH9�t-�H��,������
t	�� ��H��H�PH9�u�I���fDH����1�1���I�EH9�t<�}{H��u3L�BL9�t*�B<"����<
t< ��L��L�BL9�u�I���C�����
����L��L�rL9���J�A�<nw�H�=���Hc�H�>�����/���]��H��I��LD�����fD</�<}�8E�OXE����I�@I�w L�$I�}�+
H�t$0H�L$0�H�5�) ���L�$H��twH�5�) H�=Y* L�d$0�L��L�$H�D$0��H�5�) 1�1�H��H����L�$H�����t,I�EL��H��H�5�) H�D$0�t�L�$I�E@I��M��LD������	���"���I���@H�PH9������@<*tC</t��D�:
���H��H9�u�����H��H9������<*t�</����@H��H9�������:*u���@���m���fDH�EH9�������}u�����H�EH9��t����}e�j���I�EL�e����f�I�oH9�������E<-�o<0����1I��<w5I��L9���A�<E��<e��<.����0<	v�DI�o�E<-�H<0����1I��<v���f�A�$��0<	w	I��L9�u�I�_hM��H�CI)����H����H�CH�S�
�I�GhH�CH�x��I���I�ELD��
���f�I��L9���A�>*u�I��L9���A�<*t�</u�@L���<���L�����L�rL9����B<*t�</��I��L9���A�>
u��L�rL9�to�B<*tB</ucfDI��L9�tTA�>
u��6���@I��L9�t<A�<*t�</�����I��L9�tA�>*u���@��
�����@���C���H��& ��L��H��H��H��1����{��a���fD����)�����,�-���I��I�PH�5�% �Z����nM�gPL��% I�GI�OhL��H)�H�AH�4$��H�ϾL�D$H�$���H�$L�D$H�AH�QL�$�I�GhH�AM��H�x���m�L�$H�L$(L��H�D$(L����I�E��I����m���L��I�oH9��a�������I�FH9�t�A�V��+t��-uI�FH9�t�A�V��0��	����H��H9������E������e�������.�������0��	v����fD��	<�)����0���H�D$ L�5�H�$H�D$(H�D$H�D$0H�D$H�$H��L��L��A�G0���A�G0H�����H�H�H�AH9������Q�� ��
��/����:��H�pH9�������H�Q�n�d��Ic�L�>���0��	�u���DH�L$E��H��L��H�D$(�t�H���K���I�@H�|$ H�D$��H�|$0I�}�H�D$(H�L$H�5�# H�D$8���L�D$I�@�L�@L9�������P��,t>�P��
t	�� �TL��L�@L9�u�����f�<
t��	<������L��I��L9�������B< t�~�<"�����</u�L�BL9��}����B<*t6</t�l���A�8
t�I��L9�u��X���I��L9��K���A�<*t�</t�I��L9��2���A�8*u��Ҁ�
�����������H���e���H�pH9������@<*t4</t
���>
t�H��H9�u�����H��H9������<*t�</t�H��H9�������>*u�����
��H���������/�t��}������	��������u���DL�BL9��c����B<*tK</t�R���f�A�8
�:���I��L9�u��8����I��L9��#���A�<*t�</����I��L9�����A�8*u���H��L�pL9������@<E�,���<e�$���<.����I�FH9������A�V��0��	�N�����L�pL9������@<E���<e����<.�~��0<	���L��L�pL9�u�����DH��L�`L9��5����@��0<	�&����<���@L�uL9��a����E<0����1<��������L�eL9�������E<0�f��1<������������	���%��������H�AH9�������Q��*tB��/t����8
��H��H9�u����H��H9��|������*t�/����H��H9��[����8*u���H��L���	��H�{L��H{H���F��LsI�_h�&������L�$���L�@L9������@<*tF</t��DA�8
����I��L9�u����I��L9����A�<*t�</���I��L9����A�8*u������H�T$(H�t$ I�}���L�D$���L���$���L�����I�����������B��I�E�~������H��L�D$H�D$H�L$���H�L$H�D$H�$H�yH��Hy�/��H�L$H�$L�D$HAI�Oh���I�PH�5q ������t!M�gPL�] �y�����0��	������I�P@��uH��uE1�A��K���H���H��u�����I��H�HH� tH�H�:H��L�D$H�$�w��L�D$H��tH�$H�P�L��1�L�$H)�H�L$H�D$�:��H������L�$L�L$H�L$I��I�PI�qL��H)�H)����H�����H�����I�����<,�q������I������H�7 L��L� �|��H������I���e���H�� ���H�������UH�5d SH��dH�%(H�D$1�H�$����H�8��H�XH�hH�
�H�H9����3�V�n����Hc�H�>���0@��	wp�E1�H��H��H��H���<�H����H���D��
t��	��w3H��H�XH9����P�� t�/u�H�XH9�t�@<*tD</taH��H�� ���H��H��H��H��1��r��f�H��H9�t��<*t�</t�@H��H9�t��;*u�����;
�l���H��H9�u��@��H9�u�H�t$dH34%(H�$��H��[]�H��DH��H9�������Q���fDH�SH9��>����s@��*tI@��/tH���#����:
t�H��H9�u�����H��H�ZH9������R��*t�/t�H��@H��H9������:*u���@@��
�M���@���\�������:��H�� H�5LH�81����f���H����~��H�=����H�=����H�5�H��H�] ���H�I H�5�H��H����H�=tH�) �T��H�=sH� �A��H�= H�� ����H�=� ����H�=� H�5�������H�=� �����H�<��H�5.���H�=� 1�H����H�5����H�=� 1�H����H�5����H�=����H�=} H������H��H�K �>��H�=}����H�=S H������H��H� ���H�=����H�=) H�����H��H�� ����H�=��n��H�=�H�� �[��H�=�H�� �H��H�=�H�� �5��H�=�H�o �"��H�=y���H�=yH�H ���H�=pH�- ����H�=mH� ����H�=gH�� ����H�=`H�� ���H�=[H�� ���H�=NH�� ���H�=HH�{ �~��H�=:H�� �k��H�=6H�e �X��H�='H�: �E��H�=H� �2��H�=H� ���H�=�H�� ���H�=�H�� ���H�=�H�� H��������H��H���uninitialized instancealready initialized instance
\"	
nesting of %d is too deepunexpected token at '%s'-Infinityjson/commonJSONExtJSON::ParserErrorJSON::NestingErrorinitializeparsesourceNaNMinusInfinityjson_creatable?json_createcreate_idcreate_additionschrmax_nestingallow_nansymbolize_namesobject_classarray_classdecimal_classmatchmatch_stringkey?deep_const_get[]=[]<<newtry_convertfreeze-@JSON/Parseroptions :symbolize_names and :create_additions cannot be  used in conjunctionincomplete unicode character escape sequence at '%s'incomplete surrogate pair at '%s'x�������������������x�����������������@����������������������������������������������0�����������p������������������������T�������������������������������������T�����������������������������d�������������������������������������������������������������������������������������������\�������������������������������������������������������������B�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�B�0�,�0�0�0�0�0�0�0�0�0�0�,�0���0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�0�,�0�0�0�0�,�0�0�0�0�0�0�0�0�0�0�0�0�,�0�0�0�0�0�0�0�0�0�0�,�0�0�0�0�0�0�0�,�0�0�0�0�0�,�0�0�0�0�0�0�,�T�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�T�B���B�B�B�B�B�B�B�B�B�B���B�\�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B�B���B�B�B�B���B�B�B�B�B�B�B�B�B�B�B�B���B�B�B�B�B�B�B�B�B�B���B�B�B�B�B�B�B���B�B�B�B�B���B�B�B�B�B�B�������������������������������������������������������������������������������������������������������������������������������������������������������������������	�������

��������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������;�0����������t������ ��`��@���\0���p��� �����������������0�H��tzRx�$x����FJw�?:*3$"D ���\���Vp���$���5E�A�G ^DA���>E�t,�<���B�D�D �V
ABE����=HX
E8����F�B�A �A(�I@R
(A ABBE$P4��[E�M�D DA@xl���F�E�L �A(�F0�DP*
0A(A BBBD zRx�P�����(D��,����&A�C
D��E�J��^
K@$���IB�B�E �A(�D0�G@�
0A(A BBBFHh���(B�E�B �E(�A0�A8�D��
8A0A(B BBBG(���NE�H�D0l
AAA��HGNU�P@[ 6J ��#-=��
`H0[ 8[ ���o`X	�
��] �(�h	���o���o����o�o�
���o�[  0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p����GA$3a1�mHGA$3p1113�^HGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`^HGA+GLIBCXX_ASSERTIONSparser.so-3.3.8-6.el8.x86_64.debugf�&��7zXZ�ִF!t/����]?�E�h=��ڊ�2N����� ��b�q�`7�EG��Ԅ�y[ӊJ���*o���t�g�
����	S��o�k�c�v8���_�����1�s�j�`�Z���X���b����G3��E���7�w[Vk��:�@@W�2�?�٥�g��`��Er���2FV��gG���\霞��I[�#��H
����m4!�w�w�)c����_�uX��:ef�n��5"��N{������3V�P0��G���N'�1	��?�W��#����!;��z#�q��u]����4�B��nÜx3�+�*�����P,�68��W������D���.��k�u�C�ciцT~O�i��m�8�[)	2ޟ��
�y��wMm�����9'�p�c����������q�+�Zg��&�Օ-�aw�(��`
u�R�r2�Q�2R�R�����Q�ʫQ�^5n�[��9��Ĝ@)�1-��F��c�`•G�g��8䟐�SYy01.^M���ϋ'@7/��8�`��\�Lb�\���#�ޮ���[N��i/��'|'sr<cO~.LD4[��~|�áy��1�Q�﷬*bD���g`��/��ӡv�]�[�߻G�S��_�r���Ы4�`ş7{��'"l)�h�Y/�����R���5��%���@['
��$�/L!�jmVG�Y+�P�vJ�W�vO�V�Z���w�Js8�����1N_�CpI�Pi@bs��U�
FJ���<��:�TW*�6�}BO7�(�����NW����L}W�A���ӆ`���d'|�M�&��B��?Rx�*aӇ���&�*,]�Wݳj�t��Ip�� �tf��6��g|YO�BY����r�6�fBÂ;���;�Go�,�~�G6�b@T�f��?��T��R���F&�s5���?���~!�PL����/�x;o���
RC�Id�2��^�QH�,�}W�		��VnW�������Y��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0X	X	�8���o�
�
�E���o��@T��h^B((�h��c���n���w���*}`H`H
��H�H@ ��T�T��XUXU��XXXX �0[ 0[�8[ 8[�@[ @[h ��[ �[ ��] �]8�` `���```HHb(pb�f"PK�Z��O�0�0�%ruby/json-2.7.2/json/ext/generator.sonuȯ��ELF>P @0�@8	@�u�u �z�z �z  8 H{H{ H{   888$$�u�u�u  S�td�u�u�u  P�td�f�f�fttQ�tdR�td�z�z �z  0GNUb�j���b��O%2���b�N�@$�NPQBE���|�qX�t�)�eV 0)@�_���c���#
'ZhU�o��ns ��������~j_y"��"O��Y?�JB��5�J���, |IF"�4�s4����� �� �� �pWK	__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddataruby_xfreeruby_xmallocruby_xrealloc2ruby_xmalloc2memcpyrb_str_newrb_utf8_encodingrb_enc_associaterb_hash_newrb_obj_classrb_class_namerb_funcallvrb_hash_asetrb_str_new_static__stack_chk_failrb_call_superrb_exc_raiserb_str_duprb_str_catrb_str_concatrb_str_internrb_sym2idrb_ivar_setrb_attr_getrb_data_typed_object_zallocrb_obj_is_kind_ofrb_cHashrb_class_new_instancerb_intern2rb_ary_entryrb_string_value_cstrrb_iv_getrb_str_substrrb_id2symrb_rescuerb_eArgErrorrb_raiserb_enc_getrb_usascii_encodingrb_str_export_to_encrb_enc_str_asciionly_prb_path2classrb_error_arityrb_string_value_ptrrb_float_valuerb_hash_foreachrb_unexpected_typerb_hash_arefrb_check_convert_typerb_convert_typerb_cFloatrb_cFalseClassrb_cArrayrb_cStringrb_respond_torb_cIntegerrb_cNilClassrb_cTrueClassrb_cSymbolrb_sym2strInit_generatorrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_gc_register_mark_objectrb_cObjectrb_define_class_underrb_define_alloc_funcrb_define_aliasrb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.3libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby33/lib64�ui	�����ii
�z P!�z !�z �z { Wd{ �${ @"x � � 	� � � � "� *� 4� 7� A� B� C� E� M�} �} �} �} �} �} �} 
�} �} �} 
�} �} �} �} �} �} ~ ~ ~ ~  ~ (~ 0~ 8~ @~ H~  P~ !X~ #`~ $h~ %p~ &x~ '�~ (�~ )�~ +�~ ,�~ -�~ .�~ /�~ 0�~ 1�~ 2�~ 3�~ 5�~ 6�~ 8�~ 9�~ : ; < = >  ?( @0 D8 E@ FH GP HX I` Jh Kp L��H��H�ag H��t��H����5
e �%e ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>���������%a D���%
a D���%a D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%�` D���%}` D���%u` D���%m` D���%e` D���%]` D���%U` D���%M` D���%E` D���%=` D���%5` D���%-` D���%%` D���%` D���%` D���%
` D���%` D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%�_ D���%}_ D���%u_ D���%m_ D���%e_ D���%]_ D���%U_ D���%M_ D���%E_ D���%=_ D���%5_ D���%-_ D���%%_ D���H��������H��������H��������H�����f.�f�H�=Y_ H�R_ H9�tH��^ H��t	�����H�=)_ H�5"_ H)�H��H��H��?H�H�tH��^ H��t��fD�����=�^ u+UH�=�^ H��tH�=�Y ����d�����^ ]������w����H�7H��thv$H��tNH��u8�R�1��€��?v2�f�H��u��B�<A�������	Ѓ��1��DH�W@�B��H�1���?w�H���J�1����w�����tKv���t$���u/���v��f����u���w��D���w��f.�1����o����W��������`����fD��H�?��t
H�GH�H�t	H�WH�DH� t	H�W(H�DH�0t	H�W8H�DH�@t	H�WHH�DH�WPH��tHBH�WXH��tHBH�W`H��tHB�ff.�@��H��H�5!X ���H���H��H�D�ff.���H��H�5�W �|���H�@xH��H�D�ff.���H��H�5�W �L����xqH�H��H�Ѓ��f.���H��H�5�W �����xpH�H��H�Ѓ��f.���H��H�5aW ���H�xhH�H��H�Ѓ��f���SH��H�51W ���H������@s�[�f.���H��H�5W ����xsH�H��H�Ѓ��f.���SH��H�5�V �\���H������@r�[�f.���H��H�5�V �,����xrH�H��H�Ѓ��f.���H��H�5qV ���H�@hH��H�D�ff.�SH��H�H��t���H��[���D��SH��H�?H��t���H�{H��t���H�{ H��t����H�{0H��t�q���H�{@H��t�c���H�{PH��t���H�{XH��t�w���H�{`H��t�i���H��[�0���SH��H���HDؿ ���f�@H�@H�[ÐATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H���;���I�\$I�D$[]A\�@H�?��[���I�$I�D$I�L$�ff.�H��t3UH��SH��H��H���"���H��H��H������H��[]�D1�H���f�USH��H��H�wH��:���H��H���?����Z���H��H������H��H��[]�D��ATUH��SH��dH�%(H�D$1����H��H�����H���y���H�5�Y 1�1�H�='Z I������L��H��H�������H�=�9� ���H��H��H�5NY H�$����H�=�<H����H��H��H�����H�T$dH3%(uH��H��[]A\�����f���S�H�� H�t$H�|$H�L$H�5�X dH�%(H�D$1�H�=Y H�D$����H�t$�H���i���H�T$dH3%(u	H�� H��[��[���ff.���SH�?H�����H���8������AV1�I��1�AUATUSH��H��H�� H�5�X dH�%(H�D$1�I�����H��H������H�5;H������L��H��H�5�W I��H�$�G���H�����u_�H�=V8��H��H�����H���k���H������L��H��H���u����H�L$dH3%(u2H�� []A\A]A^�L��H��L�,$H�5JW L�t$����)�f���AT1�1�USH��H��H��H�5�W dH�%(H�D$1�I���{�L��H��H�5�V H��H�$�]�H�����t5L��H��H�,$H�5�V �:�H�T$dH3%(uCH��[]A\Ð�H�=77�o�H��H�����H���L���H�����H��H�������R�f���H�Q �����ff.�1�H�=,7��f���H��H�5�P �l�H�x@H��tH�pHH���f���fDH���f.���H��H�5�P �,�H�x0H��tH�p8H���&���fDH���w������H��H�5aP ���H�x H��tH�p(H�����fDH���7������H��H�5!P ��H�xH��tH�pH����fDH��������H��H�5�O �l�H�8H��tH�pH���g��H��������UH��SH��H��H��H��dH�%(H�D$1��u�H��t H�T$dH3%(H��ubH��[]�fDH��S H��H�0�>�H��t)H��H��H�$H�5�T ���H���f�H�	U 1�1���H����6�fD��AWAVAUATI��USH��(dH�%(H�D$1���H�5�N L��H���T�H��H��S H��u&L�-�4fD�L����H��S H��t�1�1�H��L���@�E1�I��H�D$H�D$�H����I9���L��L��I���9�H�5T 1�1�H����H�|$H�D$H�@H�$��L��H���t�H�|$�I��H�$H�P��J�H����L��H��H�����I��� �p���I�FI9��s���H�sH�;�_�H�=`S I����L��H��H����H�sH�{�5�H�=.S I�����L��H��H���h�H�s(H�{ ��H�=�R I����L��H��H���>�H�s8H�{0���H�=�R I����L��H��H����H�sHH�{@��H�=�R I���h�L��H��H������{pH�=gR M��G�I��H��A��H��L������{qH�=7R M���I��H��A��H��L����H�ChH�=R L�d��L��H��H���w��{rH�=�Q M����I��H��A��H��L���O��{sH�=dQ M���I��H��A��H��L���'�H�CxH�=\Q L�d��L��H��H����H���H�=.Q H�\�\�H��H��H�����H��H�L$dH3%(uH��([]A\A]A^A_����ATI��H��UH��SH���+���H�{H��H{L����Hk[]A\�ff.�@ATH�5wK US��H���H�����H�kXI��H���)H�EH�����H�EH�U�,H�EH�k`H���H�EH�s H��t
H�S(H�����H���s���H�EH�U�:H�sH�EH��t	H�SH��uhH�kPH��tqH�E�H���2���H�EH�U�,H�s@H�EH��t	H�SHH��uL��[]A\��H�{P���L��[]A\��H�{`���H�kPH��u����H��H�CP�H���x���H�k`�/������n�H��H�CX����f���V�H��H�C`���f.�ATI��USH��H��0dH�%(H�D$(1��M���H�5�I H��H���K�H��H�����H�=:#H��H�,$H�\$H�D$L�d$��H�����H�T$(dH3%(u	H��0[]A\���f���USH��H���^���H��H�5DI H�����H��H��[]�f���H�/f������N��f������N�у�f��������N�F�%���DI���������SH�3H�� dH�%(H�D$1�H��I��H��?L��I��I1�I)��f�L��L��L�II��H��H��H�I)�B�I��A�A�H��u�H��yH�AA�-L��I��L��L9�v#f���0H��H��@�q�P�H9�w�M)�uH�D$dH3%(uH�� [�L��L���M������6�fDUH��SH��H��H�>�<�H�H��uH��[]�DH�uH��H�D$����H�D$H��[]�ff.���ATI��USH9��$H��H�5�G ��H��H�5�G H����H��H�����oE�oHM�oP U �oX0]0�o`@e@�ohPmP�op`u`�oxp}pH���H���H�sH�;��H�sH�{H�E�
�H�s(H�{ H�E��H�s8H�{0H�E ���H�{@H�sHH�E0���H�{PH�E@H��tH�wH�����H�EPH�{XH��tH�wH�����H�EXH�{`H��tH�wH���|���H�E`L��[]A\�H�AK H�5k,H�81����AWAVI��AUI��ATI��USH��H��8dH�%(H�D$(1���H�CH�SL���"H�C���H����H9�t��H9�t��L��H���\�I��I�EE�6% A�<$��L�l$M�}H��tM�}I�m�\u�D$$f�|$"L�I9���A�H�
"0I��f���A��L�H9��fD�4$L�d$"L�-�/�D��L��A�pHc������eA����H�
$/E��Jc�H�>��fDI�mH��tI�mM�e�\uL��E1��D$$f�t$"��E1ɉD$M����M���J�|-�<��P�����H�5�.��Hc�H�>����L�=�*@L��L)��H��L��H�����M�MM��M9�w�L��L)�tJ�t
H��H�����f��H����H�CH�S�"H�CH�D$(dH3%(�xH��8[]A\A]A^A_��1�A�I��H�H��H��A�I��H�H��A�I��H�H��H��A�I��H�H��A�I��H�H�.J+�I��H������H��(��H=���H�B�H��_��H��/��H��\�iH��"���H�����H�CH�KD�4H�C�L9��gA�H�
�-I��f���A��L�H9������H�=4)�f�H�5_,H��1���D1����f�1���f�1����f�1����f�A��I��H������L��L�=�(L)������J�t
H��H�$���H�$���fD�L�=e(�����L�=S(�����L�=A(����f��H�5�'���00f���f�L$$L�|$"����D$'��T$&�J���f.�H�D$H�D$H�D$�l���@</��<\tt<"tX�T$���,��H�
",f�4����N�<.M9��h���E��t<�u
��������zM�����f��L�=g'�����L�=L'����E���o����L�=1'�v���fD�H�5'H�����������<$�w����H�5�&H������}���DH�B�H����IcD�L�>����H�5�&H�����?�����H�5�&H����������H�5]&H���t������H�5C&H���T�������H�5)&H���4�����D��L��H��������DH�����I��L��H��L��H��
f��(���r���D��L��H��f��f��$���W����R���f��H�5�%H�����7����M�}�
�����G�PX�����M)�uK�<�t"H�5�%H��M���`�M������H�5W%H��M���>�M�����fDJ�t
L��H�߈$���$��H�=%�4�H�5](H��1��S�H�=�$��H�5p(H��1��6���1����f.���ATUS��xdI��uW�H�=SD ��H�5W> H��H�����H��H����H�SrH�sqL��H��H������[H��]A\�o��H�6��t��1���@UH��SH��(H�t$H�\$H��dH�%(H�D$1���H�T$H�\$H�RH�L$H��uH�D$dH3%(uH��([]�fDH��H����������ff.�ATI��H��UH��SH��H�����m1�1�H�5C H���D$�
�@��u"�D$f(�fT
�(f.
�(wf.�zH��L��H��[]A\����H�=�B H��1�H�5Y#������ATUS��x\I��uO�H�=�B ��H�5�< H��H���L��H��H���1�H�spL��H��H������[H��]A\���H�6��t��1��|�ff.��SH��H��H�5"B 1�1����H��[H���M���ff.�f���USH����xZH��uM�H�=B �l�H�5< H��H�����H����H���u2H��H������H��H��[]�1��H�6��t��1�����@H�H��H�����H��H��[]��ff.��AWAVAUATI��UH��SH��H��HL�z0L�*H�$L�rdH�%(H�D$81�H�B8H�D$H�BhH�RxH�JH�MxH��t	H9���H����H�CH�SH�5�H�<$�{H�T$H�CL�d$ H�\$H�l$�D$(�)��L�exI�D$�H�ExM��tGH�|$uM��t:H��~5A��1��
D��D9�t M��t�L��L��H�߃����D9�u�D�H����H�CH�S�}H�CH�D$8dH3%(uNH��H[]A\A]A^A_�H�T$L��H��H�$��H�$M���e����H�UxH�=�? H�5� 1������O��ff.�@��AUATUSH����xfI��uY�H�=�? �8�H�5�9 H��H���f��H��I���K�L��L��H��H��H������H��H��[]A\A]��DH�6��t��1����ff.����S��x_uU�H�=Y? ��H�5]9 H��H������H������H�5�H��H���s�H��[�z�f.�H�6��t��1����ff.����S��x_uU�H�=�> �4�H�5�8 H��H���b��H���J��H�5SH��H�����H��[��f.�H�6��t��1����ff.����S��x_uU�H�=Y> ��H�5]8 H��H������H������H�5�H��H���s�H��[�z�f.�H�6��t��1����ff.����SH��H�5�7 �|�����3��H�H�XhH��[����SH��H�5�7 �L�������H�H�Xx�[�D��SH��H�5�7 ���������H�H��~H����[�ff.�f���UH��S��H��H������uH��tH���H��t�H���G���H��H���H��[]���ff.�f���SH��H��dH�%(H�D$1���uH��tH���H��t�H��������H�=d����H��H�������H�=xH������H��H��H�5�; H�$�5��H�T$dH3%(uH��[����f.���ATUSH��H�5>6 ������uH��tH��H�H�ƒ�H��t
�H���0��L�cH�}0M��u#H��t
�y��H�E0[�]A\��H��t�V��H�H�{�� tH�{L�����L�e8H�E0�[]A\�ff.����ATUSH��H�5�5 �����uH��tH��H�H�ƒ�H��t
�H�����L�cH�}@M��u#H��t
����H�E@[�]A\��H��t���H�H�{�� tH�{L����L�eHH�E@�[]A\�ff.����ATUSH��H�5�4 �i����uH��tH��H�H�ƒ�H��t
�H������L�cH�} M��u+H��t���H�E H�E([�]A\��H��t����H�H�{�� tH�{L���f��L�e(H�E �[]A\�@��ATUSH��H�5.4 �����uH��tH��H�H�ƒ�H��t
�H��� ��L�cH�}M��u+H��t�i��H�EH�E[�]A\��H��t�>��H�H�{�� tH�{L�����L�eH�E�[]A\�@��ATUSH��H�5~3 �	����uH��tH��H�H�ƒ�H��t
�H���p��L�cH�}M��u+H��t���H�EH�E[�]A\��H��t���H�H�{�� tH�{L�����L�eH�E�[]A\�@��AT1�UH��H�5�8 S��H��1������x=I��u/�A��uM��t
I�$��H��t*�L�����DH�u��tͺ1����q���H�=Y8 ��[L��]H��A\�e�D��AVAUI��H�5>2 ATI��USH��dH�%(H�D$1����H�
��L��H��H�����H��H����H�=�7 �G��H��H�����H������H�=i7 �$��H��H�����H�������H�=>7 ���H��H������H������H�=7 ����H��H�����H������7H�=�6 ���H��H�����H������TH�=�6 I�����L��H��H�EhdH�5c6 I��H�$����H������#H�=,6 �W��L��H��H�ExH�5%6 I��H�$���H������
H�=�5 ���L��H��H�5�5 I��H�$�[��H�������H�=6 ����H��H�����H�=�5 H������Ep����H��H�����H�=p5 H������Eq���H��H���v��H���Er��H�=15 �|��H��H���Q��H�����L���EsH�L$dH3%(��H��[]A\A]A^�L��H�����H�������H�Eh���@L��H������H�������H�Ex����@L��H������H�������������H�H������H�������f�H�=a4 ���H��H���y��H������Er����f.�H�
�H���L�����H���
���D��s��H�H�Eh���@��[��H�H�Ex����@��P�H�������u�H�H�у�H��u�L�hI�u�� ��H�x���L�mH�E����fD�u�H�H�у�H��u�L�hI�u�� ��H�x�S��L�m(H�E ���fD��h���H�H�у�H���U���L�hI�u�� txH�x���L�mHH�E@���f���(���H�H�у�H������L�hI�u�� tHH�x����L�m8H�E0�n���f�H�x�����H�x�O����H�x�f.�H�x�f.�H�H�у�H�������L�hI�u�� t H�x�W��L�mH�E�j���f.�H�x���U��D��ATI��UH��H�5- S��H�����H�@hdHǀ���xuL��[]A\�H�u��t�1�������H��t�L���k���L��[]A\�AUI��ATI��UH��SH��H��dH�%(H�D$1�����H������fH��tqH���H���
���T���[H��0 H�
�0 H�H9uKDH��H��L��L����H�D$dH3%(�wH��[]A\A]�H��0 H�H�
�0 H9t�H�
�0 H9�H�
c0 H9�*H���@H����H���m������uH���H��
��H�0 H9���}s��H�5'1 H���G�����?H��H��L�,$H�51 �����8H���/H���H���H��L������H�Q�����H��/ H�����H��L��H������DH��H��L��L���W���f��H�5IL����������H�UrH�uqH��L���=��i�����H�5L������H����H��. H��[����H��. H��K�����H�5�L���l�������H�5�/ 1�1�H�������uH��uL�H������H��. H�����H��L���e����H�upH��L���A����@H���H��u�H�UrH�uqH��L���I��u������H�=X/ H�5�1����f.�AWAVAUI��H��ATUH��SH��XH�B@L�zH�T$H�D$8H�BHH�t$ H�D$@H�H�RhH�D$H�APH�xH�@H�|$HH�yxH�D$H�wH�|$0H�t$(H�qxH��t	H9����H���f��H�EH�U�[H�EH�|$8tH�|$@�}�D$01�D�`�QDH����H9�}RH�|$t���H�|$��H��L��H���i��H�T$H�t$ H��H�����I�E�� u�I�EH9�|�H�D$H�T$0H�|$8H�PxtOH�|$@��L�l$M��t9H�D$0H��~/A��1��
D��A9�tM��t�L��L��H����2��A9�u�H���`��H�EH�U�]H�EH��X[]A\A]A^A_�H�|$(�,���E1���A��E9�����M��t�H�t$L��H��������@H�T$H�t$HH���������H�T$@H�t$8H�����L�l$M���#����W���H�T$@H�t$8H���r���l���H��H�5�
1�H�zxH��H�=�, ���ff.���AUATUSH����xfI��uY�H�=�, �(��H�5�& H��H���V��H��I���;��L��L��H��H��H���7���H��H��[]A\A]����DH�6��t��1��|��ff.����H��H�OH�WH�wH�?����H���f.���AWI��AVAUATUSH��H��HL�rH�BH�t$ H�*I�v`I�~XH�D$I�I�N0M�^8M�fH�WM�nxH�D$H�FH�D$(H�FH�D$�C��~	H����H��t	M����H�|$tKM��~FE��H�\$0E1�L��E����A��E9�tH��t�H�t$H��H��A�����E9�u�H�\$0A��uM��uAM����I���~I����A���RA���H��) H��v@H�
�) I�WH;��H�
�) H9tjH�5�* L��1�1����I��A��uM��u_�L������f�L��H��H��������DH�q) H�H�
7) H9t�H�
�) H9u�L������I���f�I���H��u�H�t$L��L��H�����H�|$u1H�L$ H�t$L��H������CH��H1�[]A\A]A^A_��H�T$H�t$(H���V���@H�wH��L�\$8H�L$0�:��L�\$8H�L$0����H��( H��+���f�H�i( H������H�i( H�����H�:( H�
�( H�H9�������f���H�������H�=)
�R��H�=�	���H�5
H��H�U) ���H�5
H������H�=s	H�+) ���H�=�	H��( ���H�=�( H��( �x��H�=�( �l��H�u' H�=�( H�5MH�����H�5���H��H��( �I��H�=�( �H���H�5�	�z��H�=�( �����H�w���H�5z	�;��H�=t( �H����H�5f	���H�=U( 1�H�l��H�5Z	���H�=9( �H���H�5B	����H�=( 1�H����H�5.	����H�=�' �H���H�5	���H�=�' 1�H�v��H�5	���H�=�' �H���H�5��k��H�=�' 1�H����H�5��O��H�=�' �H�<�H�5��0��H�=i' 1�H����H�5����H�=M' �H���H�5����H�=.' 1�H����H�5�����H�=' �H��H�5���H�=�& 1�H�J��H�5p���H�=�& 1�H�.��H�5`���H�=�& �H����H�5N�c��H�=�& H�"H�5A�9��H�=�& H�H�54���H�=h& H�H�5(���H�=N& 1�H�E��H�5���H�=2& 1�H�)��H�5����H�=& �H����H�5����H�=�% 1�H����H�5����H�=�% 1�H�B��H�5����H�=�% 1�H����H�5��j��H�=�% 1�H����H�5��N��H�=�% �H���H�5��/��H�=h% 1�H�?��H�5���H�=L% �H���H�5v����H�=-% �H���H�5n����H�=% H�[H�5^���H�=�$ 1�H����H�5����H�=�$ H��H�5z�u��H�=�$ �H����H�5�f��H�=�$ �H����H�5��G��H�=�$ �H�$��H�5��(��H�=i$ H�5����H�5�H��H�<$ ��������H�c�H�5�H�����H�=$ H�5����������H��H�5�H�����H�=�# H�5|��������H���H�5\H�����H�=�# H�5T�u�������H�y�H�5.H���Z���H�=�# H�5.�G�������H���H�5H���,���H�=]# H�5����H����H�5�H��H�,# ����H�= # �����H����H�5�����H�=# �����H���H�5����H�=�" 1�H����H�5����H�=�" H�5�����H���H�5�H��H��" �h���H�=�" H�5��U��������H��H�5H���:���H�=k" H�5`�'��������H�k�H�5�H������H�==" H�5=��������H���H�5�H���޿��H�=�Ҿ��H�=�H��! 迾��H�=H��! 謾��H�=�H��! 虾��H�=�H��! 膾��H�=�H�h! �s���H�=�H�M! �`���H�=�H�2! �M���H�=�H�! �:���H�=H��  �'���H�=H��  ����H�=)H�n  ����H�=KH�S  ���H�=BH��  �۽��H�=.H��  �Ƚ��H�=(H�:  赽��H�=H�  袽��H�=H�L  菽��H�=�H�1  �|���H�=�H�  �i���H�=�H�� �V���H�=�H�� �C���H�=��7���H�=�H�� �$���H�=�H�� ����H�=�����H�=�H�������H��H���C*@instance_variables0123456789abcdefunallocated JSON::State\n\r\t\f\b\\\"\/JSON::GeneratorError\u2028\u2029%li not allowed in JSONnesting of %ld is too deepnullfalsetrueto_hashHashto_hjson/commonExtGeneratorJSON::NestingErrorfrom_stateinitializeinitialize_copyindentindent=spacespace=space_beforespace_before=object_nlobject_nl=array_nlarray_nl=max_nestingmax_nesting=script_safescript_safe?script_safe=escape_slashescape_slash?escape_slash=strictstrict?strict=check_circular?allow_nan?ascii_only?depthdepth=buffer_initial_lengthbuffer_initial_length=configuremerge[][]=generateGeneratorMethodsObjectto_jsonArrayIntegerFloatStringincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassto_snewallow_nanascii_onlyunpackcreate_idextendkey?__send__respond_to?matchkeysdupJSON/Generator/Statepartial character in source, but hit endsource sequence is illegal/malformed utf-8source sequence is illegal/malformed utf8P��@��0�� ����`��������������`��X��������������h��H��0123456789�0� � �� �� ���������������;tM���������������
��������0˹��<
��������������H���x���(����@ؼ��X���p8����h���������Ƚ���������������(Ⱦ��DX���t�����ؿ��������(��� H���8X��|(���H���X������������8X��X���xH����������X��X�������h���H������ ���P����H�������X��,	���\	��x	����	8���	���8
H��X
���x
H���
x���
������DH��l��������X���8��ph�����(�P
���
���
H���P�h��zRx�$���FJw�?:*3$"D���\��p���������%HW�0���"HT�H���&HW�`���&HW�x���'HX�����&E�`����&HW0����&E�`L�&HWd��"HT|���A�U�����E�v�h���/A�m,�|����B�D�D �V
ABE(ܺ��>F�D�O WAAF��$,�;A�A�G lDA0T����F�A�D �D0�
 DABA �����uE�I0]
DA����E�@����F�I�B �A(�A0�JP�
0A(A BBBD0Լ���F�E�A �J0t
 AABB<p���P|���dx���6H]
KD�����9H]
KD�����9H]
KD�ؽ��9H]
KD�����9H\
LD(����E�D�M0q
AAGH0����9F�B�B �B(�D0�A8�D`
8A0A(B BBBA(|����1B�G�D �`AB8������B�H�A ��
ABHM
ABH0�����B�D�A �GPo
 AABA$T��.E�A�G [DA@\��K T����K�K0�
AD0xT��EA�D�G0T
AAFZAA,�p��XF�D�A �1
ABAH�����B�B�E �E(�I0�A8�Gp'
8A0A(B BBBH,($��|F�A�A �N
DBL(Xt��rA�D�D@N
AAG0�����B�G�D �G0M
 GABE,�$��tF�A�A �J
DBH�t��#A�Z0����E�A�D K
DAFjDAL8����B�B�B �B(�D0�D8�G�
8A0A(B BBBD8�4���F�B�A �A(�D0O
(D ABBJ����tE�L
O����tE�L
OH��tE�L
O$���)E�czRx�� ����p���+E�eP��������3E�m�����$����SE�D�I rIA �����E�G �
AA4	`���F�A�A �X
FBHpAB4T	����F�A�A �X
FBHpAB4�	P���F�A�A �`
FBHpAB4�	����F�A�A �`
FBHpAB4�	@���F�A�A �`
FBHpAB(4
����F�C�K �iDE@`
��+F�B�L �D(�A0�D@G
0A(A BBBD zRx�@�����(����4�
���mF�D�K �g
ABAiAB8��6B�E�D �D(�G@�
(A ABBALP��bB�B�B �H(�A0�D8�D��
8A0A(B BBBA8�,���F�B�A �A(�D0O
(D ABBJ����&H]L�����F�E�B �B(�A0�A8�G��
8C0A(B BBBHD��K	H>	GNU�P!!�z Wd�$@"����8
�`�z �z ���o`H
�
'h} �PX�	���o���o���o�op���oH{ p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@PGA$3a18�`GA$3p1113P �`GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`!�`GA+GLIBCXX_ASSERTIONSgenerator.so-3.3.8-6.el8.x86_64.debuge_�7zXZ�ִF!t/���c]?�E�h=��ڊ�2N�a`�em��e�QO�񈒭�#	�*ߨ�F��0?_��N�B�!BE~��+9�����s������B�����L�#'Z�d/�%�Km����bѰ%P>>�5A��Jz��K�;a�)e�C-�pl��5-����M�`������dA֨]�[�5J��cF����'�p��(���|Ȇ��f�	J��c�e�ﻹV�t�aB���l�i�1Q�&�#�؋����O{p#��[t�،HM'c���>���F��C-T���(7ݦ�E�a����@����~5��K�-�t`���8��
�])ܺ���}_��q��텑&�mb�1Y���6w�i��r���hZa�ն���j�ґ�Bʤ�,^�r*ʢ
f�M���0��O{��IsiȐ���fT�mM5R/�~��^�=<@�RMG]���u���Z�f,24g_��-P�.����mY�𲜤B�!M������!����1-S�'pb6���-`϶u{`ǀ�מ@j��(P��V�`���!��X'�Ļ�!��UK�:h����c��^�k8��6�č�f�?�K��F���U�Ru�MϴwQ${�
RRb�Pdɬ��]p���V���m����XS��pPF��xf���NB˛ޙ9ǝ1ǚ�o
N���΀�0��I��)������Nin`�����PR��.#�w�0�����5�T���<�Ƌ�|p��[����5rI�(�T��}|��!F��}��/}۽#�\D�QE�V���L� v�^rϷN�e�����@��P��g�Yt�Yt6�NVs!CrҸ)��v�W6�#l�M��M�������@����C���iTK�£	g.e��΋U�t�gS�U���o�&�P5�1���To�;/[��Ј��>�
�q,�"o���1�3�_ʯS3L�u0��ʅ��G%X�^��|ߕӪ��+�y�П�z�恵�5>D�=�
S����~�	�A�-����/r���JAQrv
�N8�c�S�ҝ=�����#3�v��i��ř�Ճ./�Ȧ�aQ�Ե��S1����̎?ϧ3��G;�^t�_���p����s�bT0�S��97Al��Mn/V�^���M�6Ap�Ӑ�-0�}J:LY�;�6"�����
���o<_����G:�_�P���\Ǫ]0�V��Wy�	1����[P^�79|�����=^jc-n�G�M�r#<�P���+��t�ElH��NȬ�1{فw�tE`�_�hq.��%Qn�H{�I��I�۪`p/�/�1�SL1oQo�R��H�:/�~/4��u�f���q�}�2I��3Y�˽zg���,�G�*\��hN���-���/�"wp��}��j��۞'-SK���`1��?�p�FeB���s����w+��:�����t��֧�;n��m
��\P�	���G�j`���e؄�؋���F"�	��_�4�V` ��$v�y�[��Uo������ŷo3@½
�l��*l��&t�?������iugKKal���"��S0�7g.�6����3!R�#�)�
�j88�i���`�����v�J�$$�XPRk�[�e�HOT�ژ���iտ�K�Cg��5#����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0H
H
'8���opp�E���o@TXX�^BPP�h88c``n``�wP P k@}�`�`
��`�`� ��f�ft�0i0i`��u�u ��z �z��z �z��z �zh �H{ H{ �h} h}��� ���`�H8�,d���"PK�Z(ruby/io-console-0.7.1/gem.build_completenu�[���PK�ZP�Հp�p#ruby/io-console-0.7.1/io/console.sonuȯ��ELF>@"@�i@8	@XUXU �Z�Z �Z P� ([([ ([   888$$8U8U8U  S�td8U8U8U  P�td�I�I�I��Q�tdR�td�Z�Z �Z PPGNU(|�������>�m�p�S�H!@SUWBE���|�qX/D�o����������k 
04����[�M��A�_c%�����{U�� 'R����@Dk���"�"h���v����*�fPw6e, ��F"r*@Pr�` �p` �` ��A�uPF�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddatacfmakerawrb_data_typed_object_zallocrb_default_rsrb_io_writerb_funcallvrb_errno_ptrtcsetattrrb_num2uintrb_sprintfrb_io_get_write_iorb_str_new_cstrrb_io_flushrb_io_getbyterb_ary_newrb_ary_pushrb_str_new__stack_chk_failrb_io_descriptortcflushrb_io_pathrb_sys_fail_strrb_Arrayioctlrb_eArgErrorrb_raiserb_string_value_cstrrb_ensurerb_stdinrb_stderrrb_error_aritytcgetattrrb_jump_tagrb_protectrb_syserr_failrb_io_getsrb_yieldrb_convert_typerb_assoc_newrb_str_new_staticrb_str_catfrb_cIOrb_cFilerb_const_definedrb_obj_freezerb_cloexec_openrb_io_open_descriptorrb_const_setrb_unexpected_typerb_const_getrb_io_closed_prb_id2symrb_check_idrb_keyword_given_prb_funcallv_kwrb_const_removerb_io_closerb_fix2intrb_num2intrb_check_funcallrb_get_kwargsrb_funcallv_publicrb_hash_duprb_ary_resizerb_ary_ptr_use_startrb_ary_ptr_use_endrb_obj_classInitVM_consolerb_f_notimplementrb_define_module_underrb_cObjectrb_define_class_underrb_define_constrb_define_alloc_funcrb_undef_methodInit_consolerb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.3libm.so.6libpthread.so.0libc.so.6_edata__bss_startGLIBC_2.2.5GLIBC_2.4/opt/alt/ruby33/lib64�0ui	�ii

�ui	��Z �"�Z �"�Z �Z �Z TI�_ �_ 	�_ 
�_ �_  �_ '�_ (�_ 2�_ ;�_ I�_ K�_ L�_ M�_ R`] h] p] x] �] �] �] �] 
�] �] �] �] �] �] �] �] �] �] �] �] ^ ^ ^ ^  ^ (^ 0^ 8^ !@^ "H^ #P^ $X^ %`^ &h^ )p^ *x^ +�^ ,�^ -�^ .�^ /�^ 0�^ 1�^ 3�^ 4�^ 5�^ 6�^ 7�^ 8�^ 9�^ :�^ <�^ =_ >_ ?_ @_ A _ V(_ B0_ C8_ D@_ EH_ FP_ GX_ H`_ Jh_ Mp_ Nx_ O�_ P�_ Q��H��H�aF H��t��H����5�C �%�C ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE��������%u? D���%m? D���%e? D���%]? D���%U? D���%M? D���%E? D���%=? D���%5? D���%-? D���%%? D���%? D���%? D���%
? D���%? D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%}> D���%u> D���%m> D���%e> D���%]> D���%U> D���%M> D���%E> D���%=> D���%5> D���%-> D���%%> D���%> D���%> D���%
> D���%> D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%}= D���%u= D���%m= D���%e= D���%]= D���%U= D���%M= DH�=�= H��= H9�tH�>= H��t	�����H�=�= H�5�= H)�H��H��H��?H�H�tH�== H��t��fD�����=E= u+UH�=*= H��tH�=�7 �����d����= ]������w������H�"�O{�H	�����g�����H��H�wH�� ff.�@��UH��H�5�7 SH��H���D���H�����t�HxH��H��[]�D�`�H��H��[]�f.���ATI��H�507 UH��S���L��H�57 H������o�oHK�oP S H�P0H�S0�@8�C8H��[]A\�D��UH��SH��H������C��ωCH��t.�U��x�S�U��x�S�U��t���CH�H	H��[]����H�u6 �<���ff.�SH�X6 H��<�k���foH�P foKJfoS R H�K0H�J0�K8�J8[�ff.���H��: H�0�-���ff.�f���H�5U; 1�1�����ff.������H��H�5H; H�׉����fD��H�5-; 1�1����ff.��U��SH��H���
�K����8u&1�H�ډ������u�H���[]�f.�H��1�[]����SH��H���@���H�=y!�p1�����H��H���D���H��[�ff.�@��ATI��UH��H��S���L��H������SH�=+!�p1��{���H��H����H��[]A\����AUATUSH��H��(dH�%(H�D$1�H���~@��uH��u+�H�L$dH3%(�,H��([]A\A]�@H���H��u�H��D�nH�t$�b���H�t$H��H������H��H���G���H���/����DE1�H���
���H��7�{���H�����H=��g������1�I��DH������H��t+H��������;tE�PЃ�	w-�T�H�ߍlP����H��u�H��L����������E��t#A9�uE1�롐Hc�L��H�t-1������@Hc�L��D$H�t-���H�|$�������N���ff.���ATUSH���@���H��A���5���H���-������t0��A9�t)1�D���7�����u,����'�����uH��[]A\��D��������t�H������H���������AWAVAUATUSH��H��H��dH�%(H�D$1��c���H��� ��H����H�J�H��������H��L�8L�h�A�H��uL�`H�hH���S���H���K���H�$A��1�I��tL������f�$1�I��tL�����f�D$1�I��tL�����f�D$1�H��tH������f�D$H��1��TD���K�����uYH�L$dH3%(H��uVH��[]A\A]A^A_�DH�PH�J�H������u	H�@ ����H�_6 H�5�H�81���H����H���^����Y���f�H��H�5�6 �dH�%(H�D$1�H��5 H��H�H�$���H�D$dH3%(uH�������SH��dH�%(H�D$1�H�H��tH��H��H�$���H�4$H�����H�D$dH3%(uH��[���ff.����AUATA��USH������H��I��H����H��H9�tXA��uH��L���_���H���W���H��H��H����H�=���H��tH��H�D$����H�D$H��[]A\A]�H��4 H9(u�H��4 H�됺1�����@AUI��ATI��U��SH��H��XdH�%(H�D$H1����1���uDH�C0�oL���oK�oS H�D$0�C8H��)$H��)L$)T$ �D$8A��H�މ�������H�T$HdH3%(��uH��X[]A\A]��Z�f.�AWM��AVI��AUE1�ATUH��SH��H�t$H�T$dH�%(H��$�1��D$,���������0H����H����A�ă��u0�D$,����A��|$,�����������@H�D$0�����H�D$H�t$L��L��D��H��<�������A����D$,��D9�A��A!�H�t$H�|$H�T$,�M�I�ǃ��tH���]�9���E���f���H���D�H���<�D9��M���H�t$lD���f������8����f�H��$�dH3%(L���bH�ĸ[]A\A]A^A_�@��H�D$0L��L��H�Ɖ�H�D$��������H���D$,��H����A�ă���	9�����D�l$,E��tnH���~�9�tA�E1����@H�t$�������u����D�(�D$,����1�D���~�fD���D�(����D��E1����DE1������T$,E1�A�����D�(���r�����������A�����E1�A��q���fDH�D$0H�D$H�t$��������]����M�D�(�D$,����E���M����L�����D�l$,E���i���H���y�9������E1�A�E1����H�5-1 E1�H�
[�H�������H�5�0 E1�H�
;�H��������H�5�0 E1�H�
��H�������S��H������H�=1ƃ�S)�1��]�H��[H��������SH�H��H�
�H�����H��� t%H����H��u3H��H�PH�0H��[�T���@H�xuH�@ H��[H�PH�0�5���H�.0 H�5�H�81��]�ff.�f�PXH���e�H����ff.�f���SH����H����H�5Y���x�H��xH��[�H�����fD��ATUH��SH��H��PdH�%(H�D$H1���H�5�* H��A���G�H��D���o)$�oH)L$�oP )T$ H�P0H�T$0�@8�D$8���tH�L$HdH3%(H��uH��P[]A\�H�������3���UH��SH��XdH�%(H�D$H1�H����H�މ��!��u&H�=/ H���n�H�T$HdH3%(uH��X[]�H��������f.���SH��H��PdH�%(H�D$H1���H�������u)�D$��H��H�H�Ѓ�H�T$HdH3%(uH��P[�H���0����[�ff.���AUI��ATUSH��H��XdH�%(H�D$H1�I���4�L��lj��8���uZ�D$I�����u7��D$L����F��t+H�T$HdH3%(H��u H��X[]A\A]�@��x�D$��H�������H�����H����f.���ATUSH��H��PdH�%(H�D$H1�I����L��lj�����u@L���H�"�L${�H	$���t1H�T$HdH3%(H��uH��P[]A\�H���a�H������H������ff.����SH����H�����������uH��[�H�����ff.���SH�����1��������uH��[�H���i���f���SH��H��dH�%(H�D$1���H���w�H��T��1������u.�D$H�t�$H�|��H�L$dH3%(uH��[�H��������AUATI��H�=mU��1�S��H�����I�Ņ�t&����L����H�51��)ƒ�A1������t$�؉�H�5�L����1Ã�C��)�1���L��L����H��L��[]A\A]��ff.�@��AVAUA��ATUSH��dH�%(H�D$1����aI��H����1�H��* H9u
H�+ H�H�5z+ H��������H����H�=a���H���8�1ҾH�=FH�����������H��E1�A�H�����H�5+ H��H��I�����H�L$dH3%(L����H��[]A\A]A^�fDH�.@���,���@��u	H���$�H���W��H�5�* H����I�Ĩ��H����H���H���}L�����H�����umH���Z���H�=E* �X�A��u	H9��yI�H��H�$��H��H����A��I���q�L��L��D��A��H�����I�����DH�5�) H�����H���w���H�=�) ���H9��c�H�=��2�H����1ҾH�=�H���d�����H��E1�A�H�����Q�H�5j) H��H��I���L������H�=A) �T�H9����H�=;��H����1ҾH�= I�������xhE1�L����H��A����H�5�( H��H��I�����H���������f.�L�����H�5�( H����f�A����DH�E��H���������f.�A���+�����@A��������@H�!( �.�����1������D��SH��H����t �����t
��H�����H��[���[���f���SH��H����t ����t��H����{���H��[�fD����f���SH��H����t�k���uH��[�f������t��H��1�����H��[�fD��SH��H����t�+���uH��[�f�����t��H��1�����H��[�fD��SH��H����t�����uH��[�f��k���t��H��1�����H��[�@��SH��H����t����uH��[�f��+���t��H��1����I���H��[�@��SH����w]H��uH��H��H���/�H�5p& 1�1�H����H��H��H���H�=���s�H��tH��H�D$��H�D$H��[ú1���f�H��tzATI��U��SH��@��uX@��uH��u%H��% H��L��H�5
H�81����H���H��
u�H���4�H�‰�9�r�[]A\�fD��H����fD1��ff.�f���SH��H��H����T���H�=���1���H��H����H��[�@��S�H�����H�ߺ���H��[����SH�`H��H������H�=T��1��4�H��H����H��[�@AUATU��SH��H��8dH�%(H�D$(1����Q���1�L�D$�H�5k$ ������^H�|$L�d$1�H�H�l$ �CH��H���H����L��H���H���}H��tv5H��uG�CH��DH�L$(dH3%(�6H��8[]A\A]ÐH��u�CH�����H��$t�H�{# H��H�51
H�81����L��H�L$��*H�D$��H�Ǩ�����CH���H���D@��uj��L��H��H���H���"����DHc�A��L�l�������uOA9������D��1�����f.�1����f����f�����f���fDL�����H��롃�1��f������AT1��USH��1�H��0dH�%(H�D$(1�H�L$����H�T$H��H�\$I��H�w�H�
@�H�D$H�5d�H��H�D$ ����uH��H��u'�H�t$(dH34%(H����H��0[]A\�f�H�H�ƒ�H��u�� ��H�{u�H�S H�B�u�H��t�H�H�΃�H��u�H�xu�H�p�� tH�p�>Ru�L�"H�j�H����L���l�H��I���a�H��H����A�T$�H��Hc�H�TH�����H�������U�H��Hc�H�TH�P�������f.�H��H�S��H���>�����������AUATUH��1�SH��hdH�%(H�D$X1�H�L$H�\$�>���H��I�����H�މ�A�������u8L��H����H��D�������t3H�T$XdH3%(H��uH��h[]A\A]�H�����H���j��e��H���-�ff.�f���SH��1�H�� dH�%(H�D$1�H�L$���H�5� H��H��I��H�
���H�T$dH3%(uH�� [��������SH��1�H�� dH�%(H�D$1�H�L$�8���H��H�
��H��I��H�5���\�H�T$dH3%(uH�� [�������ATI��H�5` UH��S��H��H��`dH�%(H�D$X1��
��H�L$��L���oH�\$)D$�oH)L$ �oP )T$0H�P0H�T$@�@81҉D$H���H��H����H���G�H��H���|�H�L$XdH3%(u	H��`[]A\�����ff.���AUI��H�5� ATA��H��USH��H��(dH�%(H�D$1��J��1�H�L$L��D��H�����H��H���z�H�T$dH3%(uH��(H��[]A\A]��W�����U�����H���H�5�SH��H�� H�;����H�;�����H����H�5����H�;1�H���H�5����H�;1�H�E�H�5��y��H�;�����H����H�5��^��H�;�H�_�H�5s�C��H�;1�H���H�5a�+��H�;1�H�O�H�5O���H�;�H���H�5A���H�;1�H��H�57����H�;1�H���H�5&����H�;�H�Y�H�5���H�;1�H�A�H�5���H�;1�H���H�5��}��H�;1�H���H�5��e��H�;1�H���H�5��M��H�;�H�~�H�5��2��H�;1�H�����H�5����H�;�H���H�5����H�;�H�����H�5{����H�;�H���H�5j����H�;�H�����H�5[���H�;�H���H�5L���H�;�H���H�5>�x��H�;�H�����H�5/�]��H�;�H�n���H�5�B��H�;�H���H�5�'��H�;�H���H�5���H�;1�H�`���H�5�����H�-� H�;�H�5�H������H�;H��1�H�5�����H�;�����H�s�H�5����H�;�����H���H�5����H�;H�5���������H����H�5�H��H���_�������H��H�`�H�5y�D��H�= H�;H�5�H�����H�=|H�� �S��H�=| H�5hH���}��H�=f H�5�������H�=S H�5G���H�=@ �H����H�53���H�=! �H�U��H�5����H�= �����H����H�5��z��H�=� H�������[H�2���H�5h]�U��D��H��H�=��l��H�=�H�� �Y��H�=�H�� �F��H�=�H�� �3��H�=4H�� � ��H�=�H�� �
��H�=sH�� ���H�=dH�< ����H�=VH�1 ����H�=HH�& ���H�" H���A����H��H���[%dG[%d;%dH[%d%cto_aryArrayexpected 2D coordinate/dev/ttywrong %s mode: %liscreen erase[%dJline erase[%dKrawraw!cookedcooked!getchecho=echo?console_modeconsole_mode=noechowinsizewinsize=iflushioflushbeepgotocursorcursor=cursor_upcursor_downcursor_leftcursor_rightgoto_columnerase_lineerase_screenscroll_forwardscroll_backwardclear_screenpressed?check_winsize_changedgetpassconsolegeneric_readableConsoleMode0.7.1VERSIONinitializeinitialize_copygetcgetschomp!closemintimeintr__send__console-modewrong number of arguments (given %ld, expected 2 or 4)true or false expected as intr: %li;�>�����@0��XP��l`�����������0���������0��L ��`@��t`��������������`�����Tp�������0����@�L�������� �@�p�0�T �p`����p������L0��p����� ����`�X��t��� ��`�������	`�4	��h	0�	`�	��	��	0���,
��h
@����
�����
`����
�� ����LzRx�$���pFJw�?:*3$"D���`\���p���	����0����FE�K�G V
DAFHDA(���[F�K�D �BAB$�4��XE�D�G EAA l��4x��BA�@P���d���x�������0����IA�C�G c
FAKDCA����1E�k(���HF�D�G �sAB8@���F�B�A �A(�GPD
(A ABBE,X���yF�A�A �I
ABDH����gF�B�B �B(�A0�A8�JP�
8A0A(B BBBF���PD F
A �<��TA�D H
AA8x���F�B�D �A(�D@m
(A ABBD8P����B�E�D �C(�G�u
(A ABBAL�P���B�E�E �E(�A0�D8�G�T
8A0A(B BBBE��������$��/C�d 48���E�B
IO
LX���AADt���:E�l
A0�����F�A�D �Gpy
 AABA(�8�fE�D�DpI
AAA �|�eE�G`J
AA8���F�E�A �A(�G�a
(A ABBE0P<��F�A�A �Gpc
 AABA���2E�d
A���'E�Y
A ���yE�G ^
AA4�<��B�B�K �E(�F0i(D ABB@���F�B�E �A(�A0�D@�
0A(A BBBG\�7E�b
Ix$�7E�d
G�H�:E�X
CY�h�:E�X
CY���<E�X
C[���<E�X
C[ ��wE�D `
AA08$��H�D�C �W
ABGP���l��<E�v���)E�c���<E�v8����B�B�A �C(�G`�
(A ABBB0����F�H�A �IP�
 AABC80���F�B�A �F(�D�l
(A ABBA lp�_E�I0J
AA ���_E�I0J
AA0����F�K�D �I��
 AABA8�t�yF�L�G �A(�GPI
(D ABBA($	���E�T�D dFOP	,��H�GNU��"�"�Z TI��������!����H
 G�Z �Z ���o`�
�
*H] ���	���o���o����o�o���o([ �������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p������GA$3a1H-GGA$3p1113#GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY##GA+GLIBCXX_ASSERTIONSconsole.so-3.3.8-6.el8.x86_64.debugd�M�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�cFh�VH�~���4������Y��bU']� ۬1+��.�n��#���Հ$<�`.�o�W��a��m֩)�����w${���4���.XS:���rPtj,�Km�f��̐؃ �A|���Ϥ����轲PQ�s�м�Y���+چ]���K��^��<IǫWn�){f�N���?&<`Q�Niָ��mg�Ad~�QX��y�LK����f/"p1�>��i��_�i�&��k���~!�p���|�Y�UDkp�
�d�NEk����z��V\N�0�<�F
2�":��6��3H��,�C<5:��YD���q>���@T�6��6NxkZX.(px���<h�M3�#���?!c�j$Ml�p8�U31*��ꂗ�!�@�5��-tfV�3�+N��>��Q����I���8I�'(#�]*O�N�aBq�PK�,m@E=��au4�nC�o|�-�����y���H�U�h�ve�y:���BA�J?m�#N�Nt���Ƽ-��O+�;N��J�qf-��|,�[J�?�GLrn�U8/���a�ᄴ,z�_�=���G��8Ĭ~z�a0���Ԃʼa�ȕ+�q�$�7��l���"�F���V�E��Ⱥ>�֚p��"�T�AНΓ�	���"�AϮu��9WM#Ƥ�a6�+vS��8G��YӖ�/�R<�3��r����O�,�1)��������(A1`��s����ϳ)����mo�d0N�A��N�jg�Nw?��uQ�寠3q��a�x���BO�ޗ�Gϴ�	ilz��w�,�gf��R���\�RG��w,Q�m�
�B�?����}w{p��y��@����4��sB6��}�;S�ѷ��f|�.	�$s~�g~���A���N���3�������cC_{��*r|�T��M�"4�,#G�xҥ�����>�S(��H��VB��s�Exd3I�Y��퓅~�ٿ��"8��x���`�AO?�Ŝ�gSG�n�ig�߳k)�mᖔZ�2}�$��Q��m�g��1�>h�r�P�,(�'�a ��q��F���0����`�';P/�v�v�x3�^�G=�L��8x����yU_?�
xG
���(��PԾ��,�+^�	}���%��.ERx�=�3���\�7c{�xpCП{�9*���1�b_�d=_(���x�s.�����ϛdM.���S�@=�K�%ģ~�X�[�|�Kf3��:]�nx�#�	]��a>!����M~
�����"Z��8�nA��/s6�H����8xU.��ƶ�$�@��82��3&+ta9��4P��J��!����VJ��zSޕg���Ś���m�0�|����
�z��0^�4%�[�o�aY*�c���Y��_`>޹c*�i�gh�x��m�f�ݎ@���1���X��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(��@0�
�
*8���o�E���o��PT�^B���hHHcpppn��`w@"@"�$} G G
�0G0G���I�I���K�Kh	�8U8U ��Z �Z��Z �Z��Z �Zh �([ ([ �H] H]��` `p�p```HHb(pb�\h"PK�Z(ruby/bigdecimal-3.1.5/gem.build_completenu�[���PK�Z��x�H�H�#ruby/bigdecimal-3.1.5/bigdecimal.sonuȯ��ELF>�2@�@8	@p�p� ��!�!P� șș!ș!  888$$P�P�P�  S�tdP�P�P�  P�tdjjjDDQ�tdR�td��!�!GNU�=b��M��$4���=��z8�y�@j�  y~�BE��|��X��=��|mt2���؁�9�wxGI�qXu���ũ��.��v�F���S�� @�)�	��IU����=�g��Q�L�!J�_�����xq�o����j- V��"����:Jj�"�!��""�^��������bu:0���z�9-, �D/7v�*[F"�OZ��	�@�!1h�!����
�p�!�<��`�!U�!�`n��@�!Y�QV:&�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegOne_ABCED9B4_CE73__00400511F31Druby_snprintfruby_xfreerb_thread_currentrb_thread_local_asetrb_inspectrb_str_duprb_str_catrb_exc_new_strrb_exc_raiserb_obj_classrb_class_nameruby_xreallocrb_obj_freeze_inlinerb_cBigDecimalrb_data_typed_object_wrapruby_xcalloc__stack_chk_failrb_check_typeddatarb_thread_local_arefrb_num2ullrb_ull2inumrb_yieldrb_protectrb_jump_tagstrlenmemmoverb_num2ushortrb_fatalrb_eFloatDomainErrorrb_raisememsetmemcpyrb_bugrb_id2symrb_hash_lookup2rb_sym2strrb_check_string_typestrncasecmprb_eArgErrorruby_malloc_size_overflowrb_sym2idrb_error_arityrb_num2intrb_fix2intrb_eTypeErrorbigdecimal_parse_special_stringstrncmprb_str_tmp_newrb_str_new_cstrrb_str_resizerb_warnrb_absint_sizerb_big_cmprb_num2ulongrb_num2longrb_big2strrb_float_valueBigDecimal_dtoa__memcpy_chkrb_cstr_to_inumrb_cFloat__memset_chkrb_cSymbolrb_cIntegerrb_cTrueClassrb_cNilClassrb_cFalseClassrb_typeddata_is_kind_ofrb_assoc_newrb_ll2inumrb_str_newsqrtrb_errno_ptrruby_strtodrb_float_newrb_ary_new_caparb_ary_pushrb_intern2rb_funcallvrb_Rationalrb_usascii_str_newrb_string_value_cstrrb_memhashrb_category_warnrb_num_coerce_cmprb_num_coerce_reloprb_num_coerce_binrb_rational_numrb_rational_denrb_eZeroDivErrorrb_check_convert_typerb_complex_imagrb_complex_realrb_keyword_given_prb_opts_exception_prb_to_intrb_hash_duprb_big_signInit_bigdecimalrb_ext_ractor_saferb_cNumericrb_define_classrb_undef_alloc_funcrb_undef_methodrb_str_new_staticrb_define_constrb_gc_register_mark_objectrb_define_modulerb_mBigMathrb_num2llrb_thread_check_intsrb_eMathDomainErrorroundrb_dbl2bigrb_big_packrb_define_methodrb_define_global_functionrb_define_singleton_methodruby_xmallocBigDecimal_strtodstrchrldexpBigDecimal_hdtoalibruby.so.3.3libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.14GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby33/lib64�P����ti	�ii
�ui	�yui	��!�4��!P4�!�! �!�X8�!�XP�!`Uh�!qX��!#W��!�7��!�48�!`�!P�!	X�!`�!~h�!p�!x�!��!z��!&��!��!;��!=��!@��!J��!V��!fȟ!iП!j؟!n�!r�!w�!�!�!�! �!(�!0�!8�!@�!
H�!P�!X�!
`�!h�!p�!x�!��!��!��!��!��!��!��!��!��!Ȝ!М! ؜!!�!"�!#�!$��!%�!'�!(�!)�!* �!+(�!,0�!-8�!.@�!/H�!0P�!1X�!2`�!3h�!4p�!5x�!���!6��!7��!8��!9��!:��!<��!>��!?��!Aȝ!BН!C؝!D�!E�!F�!G��!H�!I�!K�!L�!M �!N(�!O0�!P8�!Q@�!RH�!SP�!TX�!U`�!Wh�!}p�!Xx�!Y��!Z��![��!\��!]��!^��!_��!`��!a��!bȞ!cО!d؞!e�!g�!h�!k��!l�!m�!o�!p�!q �!r(�!s0�!t8�!u@�!vH�!x��H��H�1z!H��t��H����5jv!�%kv!��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q�������%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%�o!D���%}o!D���%uo!D���%mo!D���%eo!D���%]o!D���%Uo!D���%Mo!D���%Eo!D���%=o!D���%5o!D���%-o!D���%%o!D���%o!D���%o!D���%
o!D���%o!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%�n!D���%}n!D���%un!D���%mn!D���%en!D���%]n!D���%Un!D���%Mn!D���%En!D���%=n!D���%5n!D���%-n!D���%%n!D���%n!D���%n!D���%
n!D���%n!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%�m!D���%}m!D���%um!D���%mm!D���%em!D���%]m!D���%Um!D���%Mm!D���%Em!D���%=m!D���%5m!D���%-m!D���%%m!D���%m!D���%m!D���%
m!D���%m!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%�l!D���%}l!DH�=�(1��"���H��1�H�=&)H�T$�,���H��H�T$�CL������UH�5�)SH���H��dH�%(H�D$1�����H�ߺH���kOH��H�Hk}	H�$H��������?H9�w	H�H�_��O���H��H��������?Hk}	H9�wH�H����+���H��H�D$dH3%(t����H��H��[]���H�=N)1��7���H�%f.�H�=Yl!H�Rl!H9�tH�^k!H��t	�����H�=)l!H�5"l!H)�H��H��H��?H�H�tH��k!H��t��fD�����=�k!u+UH�=zk!H��tH�=�d!����d�����k!]������w������H�GH��(�ff.�@���!�fD��H�����B f���*f����f�����f����f�����L�Bf�H�M��t6�J$f���H*��Y
�1�X�I��v�J(f���H*��Y
}1�X�H�RH��H�f��fW�1�����H�1�H���H�1H��H��f��8j!f.�0ztH��i!��^�0�j!�1�H��H��0H��H��H��0H������H��f�H��I��H���W f��t%f��twf������z1�f���t)H���@H�"L��1�����H���Df��ub��������H��L��1���������tk��uA�+I��H�"L��1��}����H���H�}L��1��_�����T���DH�IL��1��?�����4���DA� I���fDH�(L��1����������DH�L�����������H��t���f��ff.�@US��H��H�-j!����H��H�TH��[H��]���DSH��H��@��uH��u4�	���H������!H�5m"H���-���H��H������H���
����5���H�������ff.�U�(SH��H�4�$H��H��HD�H��t6H�/�6���H�XH��tH�E H��H�(H�D$�i���H�D$H��[]�D����H�XH��[]��H��tS�G �Pf��w�I� H��s�DH�W�>FH�D�u�H�OH�D�H��xH9�s�H)�H��H��@��f�H��H��H��H)�H��ff.�@AVH�W`!1�AUATUSH��H�� dH�%(H�D$1�H�1f!H�8��I��H���-H���ɚ;�H���D$H�SZ��/�DH�D$H��	H��H��H��H��Hi�ʚ;H)�H��tu��1�L�l$1�H�SZ��/�DL��QH��L�vH��H��	H��H��I��H��H��I��H��D��H��Hi�ʚ;)Љ�H���ɚ;��L��L���f.�H��H��H��H��	H��H��H��H��H��H��H��H��H��Hi�ʚ;H)Љ…�u	H���ɚ;w�H���ɚ;�~H���8���fD�(������H�@H�@H�@f�p �X$L; uI;D$ tI�D$ L��L� ����H�|$dH3<%(L���NH�� []A\A]A^�DH��(�L�H������H�s�L�pH�x$L�pI��f�H K�L�H�h����H�H�P$��L�D�L�D�L�@,I��L)��H)�����F�����1҉׃�L�9M�89�r��+������(�����H�@H�@H�@�@$f�x ���@@��uK��������������(�����H�@H�@H�hf�P �������L��L������w��H��x����fDSH������H�5 ]!H��H���U�����f�P H��[��SH�e!���H��H���8�H��t"�tH�[�f�H��[���H��d!��H��H����1�[�H�WUH���8��8��H��SH��H��H��H��@��u
H��H��[]��k���H��t�H�PH��H��H��H��H9�HG�H��H��[]�ATUSH���4���H��H��������?H9�w*L�dH�6d!��L��H��H�����H��[]A\�H���0�I����ff.���USH��dH�%(H�D$1����H�T$�H�=�a!H����H��H���]����|$��uH�L$dH3%(H��uH��[]��V����AWI��AVI��AUATUD��SH��H��8H�L$(D��H�|$H�t$������/f�{ �<����L�T$��uA�+M���@H�D$I��L�PA�0M����A�B.I����H�D$M�rI��H�@H�D$ H����L���M��H�D$A�����I��H�D$H�t$A�	���l�$�!D��1��؉�A����A����H��t	�9�r։�1�L��L����H�<H��1���H�L9�w*I�I)�1��L��L��1�H����H�|$(��H��8[]A\A]A^A_�f�A�-M�������ِH�D$H�D$H9D$ �*���L��M��I��H�|$H�G�w$H������w ����������H�����9�r�L�D$I�~�I9��O���A�~�0�D���K�>�fD��0�4���H��H��H�G��H)�I9�u�����@H�D$� M����������H�\$H���5�H��H��������������1�1�L�t$(I�>(�7<.tC���<E����H��L�jI9�r3I9������H���L�������<-w�I��L�jr��L�j1���H��H�{H��H��H)�H������ 1��f.�SH��`!�c�H��H����H��tH��[��f�H�i`!�4��H��H����1�[���USH��dH�%(H�D$1����H�T$�H�=^!������H������|$��uH�L$dH3%(H��uH��[]������f�ATA��UH��S���/���f�� tE��t$H�H��r$H��H�=|1����f��u�[1�]A\�@H��]!H��H�5QH�81��u�DH�OL�1H��~;H��~'I�@H����H��������H�H��H����L�G��DH��y�I�@H����H�AH��v�H��H�H��H���f� �G$H�G��f�w 1�H�5�����M����H��������H�I��H���N���fDf� ~1��G$H�Gf�W 1�H�5X����fD������G$H�Gf�G ��fDM��~#H��������H�I��H���
����'���DH��H�I��H���������f.�H��H�I��H��������:���f������f�O ���f��O �Af��w#�]H��s���G$1�H�G�f�H�W�f.�H�B�D�D�$E��u2H��H��u��G$H�Gf��~f�1�f�W �f.��w$H�W��urU1�SH���H��H�u�L�$��t�H��tH)�H��H��H�W�����uH��[]�f������f�G 1��H�CH�t�(H�{$H������ʸ�ff.�f�AWI��AVI��AUM��ATI��UH��SH��L�D$�Y���I�WH�|$P�E$H�L$XI�^H�uI+_L�M9VMCV��H�~�L�D$I9���H��I�uH���8��8��H��I�FH��H;EsRI�$I�OH�EH�4H9���H�KH9���H)�H�H�I�H�H9���A�D� H�L$XM�U��/@I�<$H9�r�A�D� H�L$P�뛐I�I�FI��I�$M�UI�FL�UH��H�E������H�����HD�H��H��[]A\A]A^A_�DI�M�U��I�����M�U��F f�����R f����f���@��f��A��D	�f��tef���t_@����������L���f����A��G$1�H�5�H�GfD�G �����D@��tS������t���f����f��~N��1��G$1�H�5bH�Gf�O ��r���f�������tbf���_���f�������G$H�Gf�w 1�H�5��%���D��f.��Hf�����d���f�f����f�����Df������<���f.��Jf�����$����f��~Lf��~L��G$H�Gf�W �a���f�f��~f��������f���$�������f��~�������G$H�Gf�G ����ff.�f�SH��H��uH�GH�p�H��tHH���A$�P�Q$���ɚ;veH�����D�$�P�T�$H�����ɚ;vA-�ɚ;�D�(H���uھH���E�����t�C$�H�C[�H���f�H�������[ÐAWA��AVAUA��ATUSH��HH�GL�$�I���L��L�_H�r�q�qH��L��H��?H)�1�I��H�T$I9��y�D�$A�H�JH��L���$H��H��I��H)�H�D$8I)�L��H)�H�D$M����E1�1��f��؍�H���L9�|�k�d1҉D$�$��A��1������D$$D������H���������A)�I9�vT�t�$��K���	���i�ʚ;9����K�#D�t�$���	����i�ʚ;9���H��I9�wً$1�1�J�|$L�D$0�t$H�D$L�L$(�$H���������fA��L�L$(L�D$0wiH�E��Jc�H�>��@f� �G$H�G�NA�1�fD� H��H[]A\A]A^A_�D�$E��t1�f�} ���DM����1�D��H���I9�}�ɚ;�nM����f�} H�E�E$H�E�7�f�M H��H�EM��tYH���8��8��L��H��H��HUH��I)�t8�U$1ɾ�KfD��ҁ��ɚ;v��	H�E����H��I9�uۉU$H��H�[]A\A]A^A_�@�F�f������L�_1�M������G$I��L�\$�A��E1�A��$H�D$8H�D$�t���fDH�D$1�J�|$L�$L�D$H��������fA��L�$L�D$�����H�cE��Jc�H�>��D�����f�U ����f�B�\�$H���#�������D$$A��w�B���D�\$$E���4���@��M���-����f.�A��������@B�D�$H�t$H���Z����O���DA�����1�fD�w ���fDD�4$�D$$E1��D$
����<$�������f�} ������D�,$E��������Y����A���N����x����t$$���<���H�|$8u1M���d���B�D� �������Q���A�������8��������؃������#���ff.�D�W$E��tWH�GA�����H��H��L��I)�D��A����A��	w	�D�щ�I��A�����	w�I�P������f�1��ff.�f��G �Pf��w�IH�����H��s��F �Pf��vSH�WH�NH�GH9FHCFH9�t�H��H)�H)�HH�H�s�H��1ҿH�5����H��H��f��IH�����H��s��ff.�f��G f��tf��tAf���t#�f.�@�ֿH�5��{�@�ֿH�5��c�@�ֿH�5��K�ff.�SH�R!����H��H���(�H��tH��[���f�H��Q!����H��H������[�ff.�f�ATUH��SH����H��I������tbM��tMH��t@H��H���8��8��I�T$H��H��1�H��H9�w&�O���[L��H����]A\���DH�]�f�1�[]A\�f��������f�AVA��AUI��ATA��UH��S���L��H�����I�����u5E��t0f��w*H�cHc�H�>��f�A����vf�} x []A\A]A^��A����v�f�} ~�H��L�����[H��]A\A]A^���DA���E�#w��DA���d�w��DA���E�#w�A��e�A����w�A��t���A����w��j���f.�AVAUATUS�F H��f����A��f����f������Pf����H�VL�nH��H�$H�v$H�W�D���f����AOą���L9o�LFo���������L�o�N�4�f�G�L�����A��
t)L9m��L�1ҋM$M��t�U L��H���C���L�kK�D�[]A\A]A^ÐD���C$��f��H�CDN�E��~@�1�f�s []A\A]A^�@�G$1�H�G1�f�{ []A\A]A^�������1�f�K �D���G$��f��H�GDN�E��~0��f�W �S���D1�H�����L�k�6���D�����f�G ��#���ff.�f�ATI��UH��S�Ӻ
�:���H��v��L��[H��]A\����f�[1�]A\�f��N$��tyH�FH��~pH�V�N H9�ssH)�H�GH�GH9�HG�1�f����������H�Wf�G H�FH��tH��H�H��L���L�$A�L�$H��H9�u��	�f�����fD�G$H�Gf��~�f�W �f������f�G �fDAWE1�I��AVAUATI�̹UH��SH��H��X�F$H�FfD�V L��H�T$@L�������A�W A�L$ �r�A��f�����f���f���bf���b��E$H�Ef�E H�|$@A�D$ f� �f������C$H�Cf�S f�H�EH��H��X[]A\A]A^A_�f����I�D$H�D$HH����H�EH�|$@H�D$0H�wH�CH�D$H9��h���C$H����H�V��DH�ȋL� �L�$H�HH9�u�H�D$H9T$v�H���D� H9�u�1�H�|$0H�T$0�@@H���D� H9�u�A�D$$H�D$8Hi�ʚ;H�|$HH�D$ H�D$v(A�D$(H�D$8HD$ 1�H�t$ H�|$H��H�H�D$H�D$H�t$0H��H9�HG�H�D$H����H�D$HA�I�SZ��/�DH�<�L�p�H�|$(f�J��I�uH�<�G$����Hi�ʚ;D�_(L�H9D$ ��H9D$��H9t$0�%1�H�t$8D
(M�L$M�I��L;L$����H�|$(L��B�L�$E1�H��L��L��M��GfD��ʚ;F�D)�L�$H���L�$E��tD9�se��ʚ;D)�A��L�$L��H)�I9�r\A�t� 1�I��H���ɚ;vH��H��	H��I��H���Љ�Hi�ʚ;H)։�H9�r�)�A��fDL��D)�E1�H)��L�$I9�s�D)��L�$B�D�$J�T� =�ɚ;v-ʚ;H���B�B���B=�ɚ;w�L;l$�����H�D$0�H��H�EH�D$@H�@H�E�.����_H��X1�[]A\A]A^A_�DI��L;l$�B����1�H�t$D
$I��I�D$M�L����L�\$HI�UI��v<�,A9|$,�B���r,M��K�<+I��O����E�T�$D9T�$����w	H��H9�u�I�D$L�P�O�LL9L$���L)�L��1�M���&fDʚ;�D)��D�$H��L��H)�L9�w A�|� �D�$D�7D9�r�)�1�)���fDH�A$���A$���f���bf���bA��E$H�EfD�E 1�H�5i���h�H��X[H�]A\A]A^A_�I�t$H��H�����������H�|$@A�D$ f� �Nf������������f�E H���-�H�D$L�|$@H�߾H�CI�GH�C�Z����,���1�fA� H����������f�C ������f�������������E$H�Ef�u ���A�|$$����I�|$�����L�|$@1�f��H���T�L������fA� �x���������C$H�Cf�K �|���f�������������E$H�Ef�} ���E1��E$1ҿH�EH�5�fD�M ���H��-���f������f�������������������A�D$$H�D$8Hi�ʚ;H�|$HH�D$ �������DH���USH��H��H�=6F!�A��H�ߺ$H�����H��H���H��t4��t ��u:H��t5H�H��H�у�H����H���g��H���'f�H��[]���DH�����H��H����H�UH��H�X�� tH�XH�@H��u-�H�5�H����������H��[]�DH��ul�H�5�H��������tJ�H�5�H��������u<H���[]�fD�#�H���F���H���Z���fD��H��H�?C!H��H�53�H�81����AWAVAUA��ATI��UH��SH��H��HdH�%(H�D$81������Ƀ���1҅�tOA�T$ �M �r�A��f���uef�����C$H�Cf���tA��fD�[ @H�\$8dH3%(H���qH��H[]A\A]A^A_�f.�f���_E1�A���H�EA��G�t6�I9D$���*M�D$H�}I9�H��IF�H��t5�E$A9D$$�|��1��f�D�\�$E9\�$wd��H��H9�u�I9�wP��A��1�f��M���@���f��NǍDp���u+A��C$�	H�CfD�S ����@M��1�f��A���E1�f��fD�K A��H�L$ G�|?�E��E�|G�H�D$fE����PL��H��H��H�D$ PL�L$@L�D$8�_�_AX�D$H����L�D$(I������L$L$H�|$ H�t$0�L$M��t3J�H9�r�f�J�H9���I��H��B�T�$�T�$M��u�H9��dI��I)�I�H���D�$I9�u�1�H����H��I��A�D�$B�D�$1�H��tnJ�L� H���f��1�H��H��tKH��AD�$=�ɚ;v�-ʚ;����DD���f��DN�A����v���fD�k ��{���I)�M��tBD� 1�fA����������f�C H�C1�H��t�T� �L$1�H���y�H�CH���,���@PH��H��L��H�D$ PL�L$@L�D$8���Y^�D$H����!L�D$(I�����t$�L$�9�r)�1҉t$H�|$ J�4H�L$0H9��nM��tMA�ʚ;A���fDJ�4A�H9���I��D��H��B+T�$D)҉T�$M��uѺH��H9�v'H��A�ʚ;D��H��H��)к�D�$H9�r�E1�H9���@H��tFH��H)�L��H���@)�1�A�t�$H��t"H��A�t�$9�s�ɚ;���f�H)�H��t)T� M9���1�fA�} E�����D�D��1�A����������f�C �E���D��H��H�����H�CH���}���DI��L���p���D�L��H����H�CH���K���vfDH��H��A�D�$�D�$H9�r�M�������L��L��H��H��L�<�L��M�I��!@)кʚ;D)�A�D�$H����A�D� H��D�L�$E�D9�r�)�1�D)����8E1��H��H��A�T�$�T�$H9�r�M���H��L�L� L��L)�M�T�1��f.�A�1�I��H��t*A�T� H��T�$�=�ɚ;v�-ʚ;A����DL)�L)�I���B���f.�L)�L)����DfA�|$ ~w�f�S ���f��L��H��� ��p����L��H�������H��H9����������D���_����y���f.������f�C �,���I��1����������H����USH��H��H�v�>��H�sH��H�pH�CH�EH�CH�E�C f�E �C"f�E"H��H��>u1H��H��u
H��H��[]�H�}$H�s$�S��H��H��[]ÿ���ff.�@��ATUSH��dH�%(H�D$1���H�T$�H�=�:!������H���Ã���wHL�%�<!���H�TL��H������|$��u0H�L$dH3%(H��uH��[]A\����������O��ff.�@SH��@��tf@��uH��uKH������Ѓ���v,H��:!H��H�5}�H�81��M��DHc�H���D
[�f.�H���H��u�@H�����H�A;!1�H��@H9t���H����u��D��U��SH����~H�>��t ������������fD�@��uU�X���ń�uU=�T�r�H��tH�����Ѓ������P���H��H�\H��[]�fD�S���ń�t����H��t�H��t
H����@��t��%����H����E�����o��@��t��%����H����E������K��@��t��%����H����E�����'����t��%���H����E�������H����H�\H��[]�f�H�-�:!��H�\�L��H��H��H���.��H��H��[]�H��8!H�56�H�81��L��H�^���H��7!H�5=�H�81��+��ff.�ATI��H���US�<���H��H��H�4�$�(HD������1�L��f�P H��H��1!H�h�@$H�@H�@����H;uH9X tH�X H��H�����H��[]A\ÐAUI��H��ATA����USH������H��H��H�4�$�(HD��D��H��H�h�@$H�@A��uH�f�P 1�H��0!L���^��H;uH9X tH�X H��H��4��H��H��[]A\A]�fD�����f�C �D��ATI��US�����H��������?H9�wOH�l��x]uH��[]A\�@��uJI�<$H��t�@��u3�>����x?Hc����H��[]A\�f.�H���x��H����[���˺1����[��H�l6!H�5��H�81��3��AW�AVAUATUH��SH��H��HH�t$�������hH�D$�U �@ �Hf�������Jf������H�|$H�H�|$H���UL�eI����H�|$L9��H�D$N�< H�CI��H��H�|$ H9��sH�EH��H�CH�D$H�p�������H�D$8H�D$f�} �@ ��f������������f�C N�,�1�H�{$L������H�|$ L�{�sI�D$�L�t$ N�L+ E1�H�D$(H�D$I�SZ��/�DA��KH��H�D$I�G�H�D$0�M�~�L9l$�L�\$(L��H+|$H�D$I9���H�t$L�D�$�f�H��I��L9���A��t�$H��H��H��	H��I��H��H���ʉ�Hi�ʚ;H)�A1���ɚ;v���	��A����
i�ʚ;)�A�1��t�M��t�AA�L����A�A�=�ɚ;w%�z���f.��L�$щL�$���ɚ;�Z������	��A���i�ʚ;)��L�$H��H���u�H��I��L9��7���fDI��M��I��L9l$ ����H�|$8�H������H�|$8�H���D�H���,��H�D$8H�@H��H[]H��A\A]A^A_�f���Wf���W��C$�H�Cf�K H��H[]A\A]A^A_�1�K�<��7���H��I��H�4�$�(HD�����I��L�p�@$L��H�@�fA�E H�EI�EH�D$H�p�=�����HL���]���H��H1�[]A\A]A^A_�L��I��H�D$H��H�l$H�D$����H�|$�$�����H������1�f��H��H���T���H�\$8����@�}$�p���H�}�e���f��H�t$H�����ҍT����H�\$8����f�������������C$�H�Cf�S H��H[]A\A]A^A_�H�D$0L)�L9l$(rL��I��H+|$���f�M��1����f�������������:���1�H����H�\$8��H�\$8L�������AVH�5��E1�AUATL�%�*!UH��M��S�H��H���M�����t)I��I��I����I�]I�uH��H���$�����u�H�T�
��t@����	��v�� u�H���
��u�(����K�vA�T�H�@�@$H�@��t(��t�����f�P �f�1�[]A\A]A^þf�p ��1�f�H ��f�AWI��1�AVA��AUATUH��H��H�*!SH��XD�D$�L$�o���H�D$M���IA�M���ƒ�	��wI��A�E�ƒ�	��v� t�L���`���H��H��t@H�D$H;uH�D$H9X tH�D$H�X H��H����H��XH��[]A\A]A^A_�DI���8��8��H�EH�D$ I��H��A�}#H�T$0��I��L���b���H�x蹾��H�H�D$8L�PH�L$(�� tL�PA�E�P�A����HE1�<-I�E�A��A��D�\$(�H�VE1�I�<2I�>��L$�)���0��	��H��A�DI��I�<2H��L�B�����X��uD��A��	A��v.< t*<_u�M����A�D��t�<9wI��r�E���h�M��1�E1�L�T$ �K�TH�\$0�I���8��8��H��L�T$I��L�L$H��H��HE�L�jI9�LB�N�4�$L�������|$(L�L$H��L�hL�T$�@$H�@��A�fD�X 1�I�V�H�{$L�L$L�T$袼��H��L�T$L�L$�H�D$ �<-�/H�D$1�<+��H9��SH�D$ 1�L�L$I��������H�H��vDL��H�H��H����H��I��H��	��L�H��M��H�L��A��0Mc�M)�I9���H�H�H�H��/H��whH9��H��H9���H��H��u�H�E1�1�������H���`���H�PH��I��H�D$0H��H��H9�HF�H�T$0�8���f�H���GL��H�H��H�������x���H�L$L�L$�D$I��L��=f�H�D$@1�1�E1�H�D$HE1��E���hM���L$@���tM��tH���KH���Bf��|$�V���L��轼��H�5>�H��H�$,!H�81���f�L���D$(1����fDH�EH�D$ H�D$ H�4�$�H���8��8��H��(H��H��HD�I��胾��H��L�p�@$H�@f�h H�D$H;��������fDH��H�H��H�������DK�D����.��H�D$@E1�E1�����D��!���H��H�H!�H�T$H��H�FI�HH�D$HI�T
L�H��H�D$ ����+����I�HH��I�T
�I�<21��T$���tN��uD��A��	A���n< �f<_�9��0��	��H��A�D
H��I�<2H�����u������D$L��A�<-��D$1�<+u	I���I���8��8��E1�H��A��1�G�\��L�4)L��H��?H��L1�H)�H��I��H��H��H��H��H9����D$����1�I9�����D�$H��w-I9�v(1���A�2H��H���DHЉD�$H��wI9�w�I9���H��M��tP1�H���	�L9����t�$H��<�A�4H��H���t~Љt�$H��wL9�r�L9���I9���I�U�H��w#H���Q$f.���H���H��	u�Q$L��I��?L�kH��H�r�q�qH��1�L)�|$��H�S������f�C ����H�|$81����H�D$H;��������H��I9������1����@H��1�I9��w���H�������H���*����H���7����A�����fD�@ �%���I���D$��������f.�I9��5�A�<20��H��L9�s��u�M��t��t1�A�<0��H��L9�s��u������E�����|$�C$H�C���f�{ 1�H�5����������@L�j�X����H�D$H1�1���Ѓ�	��v< uK�LD�H���Ѓ�	��v�< t������E������H�D$HO�<L�H�D$ �l���@H�D$HO�<L�H�D$ �U���f.�H�������1�M�������|$�C$H�C���f�K ����L�^A�DE1��L$K�<L�ވ��tB��uD��A��	A��vt< tp<_tG��0��	��H��A�DI��I�<2H�����u�H�D$@1�1�H�D$H���@M���jE�DD��A��0A��	v�E��������O�<1�L�T$ �C����E���������f�H�L$L�L$�D$L��P���DH���H�D$��������f�H�L$L�L$�D$L�����DH��tE�D
D��A��0A��	����E��������O�<����1�1�����������f�S �X���f.������f�s �^���H�t$H����H�L$L�L$�D$H��L��u���M���M���H��A����I�DI��H�D$@�_���E��������O���I�D
I�Ⱦ�"���ff.�f�USH��H��(dH�%(H�D$1���t2H��H����H��H�L$dH3%(H����H��([]�fDH�t$H���s���H�߾H��賰��H���۶����xH��wAH�����H���1���H���@�|$H��H��wH��葴��H���)���H���m�����
H���3���H�D$H�pH� tH�pH�xH�2#!A��H�H��
���H�T$H�T$H�H�5!H�T$H���:���1�H������������fDAWAVAUATA��UH��SH��H��XdH�%(H�D$H1�贴��f.���f(�fT
>�f.
����f��f.�zVuT���H�#!�^�f/�wH��"!@H�L$HdH3%(H����H��X[]A\A]A^A_�f.�H�����H��vPE���m��f/8�H��"!vH��H�5�!�0���1�H������@H�y"!���1�H��L�D$��@��H�L$H�T$�L�d$ �*���H�\$�L��H��H)øH��O�Lc�L���N���H���f����L$����K�4,9��>H���8��8��)�Lc�H�00000000L��H��H��H��L��H)‰Ѓ��v���A��t�0��EI�\L��1Ҿ
�D H������H���8��8��H��H��H��L��H��H��H��H��H�,���H�5�!H��H�����L$H�h���B��������f�P �4���@E���p�����u	H����H���#H���
H������������H�+ !H�H�� !H�5�H�81��X����H���8��8��)�H�00000000Hc�H��H��H��H��H)�H�H	����������t�0���H�D$P1�L��
J�(�D��ì���9��8H�NjD$�H������)�Hc��������Ͼ9��8)�ߍK���|$����Hc�D�)lj����Lc�K�\5���)�Hc�H)�L�<�M��I)�E���L��I�<�0H���'���L��1Ҿ
B�D< �"���H���A���f.�H��!���@L�F��H�>I��H�|�L)ƍ1�����������1��ƃ�I�<09�r����H�~��H�H��H�L�H)��2����~������1�A����J�9�r��d���f����9��8K�<,�0������)�Hc�H�,�H��L)��B���L��1Ҿ
�D, 1��<���H���[���K�<4L��L��L�L$�p����L��L��0�K���L�L$������0000�D�0000�����0000�D�0000���f�D�00�����f�D�00�����ګ��H��!H�5;�H�81��ª��H�S�I���H��!H��:���H��!H��+���H��!H�����H�M!H��
���H�~!H����ff.�H���H���H��HD�E1���H�!SA���H��H����H��tH��H��1����H�[�D�[�f�ATU��SH��H��dH�%(H��$�1�H��H�����HH��uH��uuH�C�H�����H��������������~H�߉��|���H��H�5R!H��芫��H��$�dH3%(��H�Ġ[]A\��H�������w*H���Hc�H�>��H�5�!H��葩����u�D����1��@H�߉��AH���m���fD�
H��蓫��H�HH�$H�xH�q
H� tH�x���_���H��H��H�D$H�$�"���H��L�d$��1�H�H�@�L���7�����L������H������k���H�!H��H�8�y���f�UH�պSH��H�����H��dH�%(H�D$1��#���I��H�H�$A�@ ��f��w�]H��r5I�@H���hA�L� H�p���t���H�~�A�L�$��uCH��H��u�H��tH�H��tH�EH�D$dH3%(��H��[]��E�H$E���xA�	A������DA��D��A��A���A��	w���R��A�����E1�A������9�t�*fD�Љ�A������9�u��A��A�����	w�I�PH��xc�	tMc�L)�H��tH9���H�L�H�H�H���"���I�PH����1�H9�}
H)�Mc�H��L)�H�E���f.�H��H��H��H)�1�H��	������E�H$H�x�A�L� H��E�����A�	�����H��H���t���H��Mc�H�I��M)�H9�IL��X����H��Mc�H�L)��k���E�H$H��H��E�������A�	���E1��������SH�� dH�%(H�D$1�H�T$H�t$�x���H�|$H�@H�xDH�\?H�@H�|$H�x;H�|?H������H�L$dH3%(u(H�� [�����H���fD�ۤ��H����Q������H��1�dH�%(H�D$1�H������H�<$H�@H�xH�D?H�L$dH3%(u
H���{�������@��H��1�dH�%(H�D$1�H���~���H�<$H�@H�xH�D?H�L$dH3%(u
H��Ð������蔥��@��USH��HdH�%(H�L$81Ʌ�x��v
�1��q����H��H������H���I���H�5��H��H�H��H�D$����1�H�p2�d���H�D$H�\$H� �}H��H�T$H�EH��H�rH��H�r�1�藣��H���Ϥ��H�T$E1�1�H�4H��H�RH)��"���H��誤��H�|$H������H�D$H�L$8dH3%(uH��H[]ÐH�[�~���肤��f����H��H������g����P 1�f��tf��t�f���tH���fD1�H���f����H��H����������P �f��t1�f�����H�D��H���D��H���H���������f�x H�H��������H���H��������H�@ H��H�D����H���H������w����H$��tPH�@H�<�H����w"H��������̺�H��H��H��H��H9�w�H�@H�H�D?yH��頡���H���fD��S�H�����H��@dH�%(H�D$81����H�52�H��H�H��H�D$輭��1�H������H�D$H�D$H�PH�D$H�pH� tH�pH��E1�1���H�D$H�xH� tH�x�f���H�|$H���٢��H�D$H�L$8dH3%(uH��@[��I���f���S�H�����H���'����@ ��f����HD�H��[�ff.���H���H���������@ ����f��H�H�����ff.���U�H�����SH��8dH�%(H�D$(1������H��H�H�$H�EH��H�B!H�H�8����H��H��H�H��H�D$���1�H�����H�H�L$(dH3%(uH��8[]��(������U�H�����SH��8dH�%(H�D$(1������H��H�H�$H�EH��H��!H�H�8�7��1ɺH��H��H�H��H�D$�*��1�H�����H�H�L$(dH3%(uH��8[]�聠�����AW�AVAUATUSH��H�����H��xdH�%(H�D$h1��J���H��H�H�D$@H�EH��L�$���zH�H���1H��H��!L��L9�HC�H�8�g��H��H�H�D$H�E �ƒ�f����f�����f���6� H�}�uH�CH9EA�(H��I��LCe1�H�<P����H��H�4�$I��ID��d���A�1�fD�H I��L�h�@$H�@H�@K��I�<DH��i����H��H�4�$I��ID��
���A�H�t$0H��L�hH�|$8I��L�k�@$H�@H�@fD�P ����L�t$0�D$8H�r�q�qL��L��H��L��H��?H��H�9��8��8H��H)�H�L$0H)�H�I��H9�t)�D$8���H��I���^�I��?I�I��D$8f���Q�f.���f.��=f(�fT��f.i��3f.���f/�f(�wfWw��
G�f/����=�E1�f.��^�I��f/�s�L�K1�H�{$�T$(L�D$ J���D$�d$L�L$�����D$f��L�L$�d$L�D$ f/��T$(��M����1���I9����Y�f���H,ȉʉL�$H���H*��\�f/�w�I9��hf/�L�H������i�YºL�Kf�S L�C�H,ȋT�$1�H���Ϳ�����H��H�����1�H���F���H�H�L$hdH3%(��H��x[]A\A]A^A_�H��蘟��H���y���1��C$1ҿ H�CH�54�f�k 蘰���fD�A�����C$H�Cf�K Ls�I��IF�K�T�H�CH��H��dI�G�dHM�E1�H�D$�fDH�CH��H��L��L��I�G�w�������H��L��L������H�5�!L��L�����A�G ��f���tT�H��L��L������L��H���q���I��L;t$t&H�CH�I9��v���L�kL���n���f.��C L�kL����f��1�)�f�C ����L���
����e���D�}$�����H�}�v���A��C$H�CH�CfD�[ �$���@f/��C$H�C���f�{ ���f�1�f/�I�A��������Y�f�S 1�L�KL�C�H,�M�����������E1��C$1ҿ H�CH�5�fD�c 膮�������
x�E1����f/��a����Y�I��f/�w��K���D�����f�s ����f.�E1��C$H�CfD�C ���1����H�!H�5h�H�81��՘���Й���d$�%���f���d$�_���fD��U�H�����SH��8dH�%(H�D$(1�����H��H�H�$H�EH��H�2!H�H�8�����H��H��H�H��H�D$�����C 1�H�߉�f��1�)�f�C 萺��H�H�L$(dH3%(uH��8[]��������U�H�����SH��8dH�%(H�D$(1����H�t$H�|$H��H�H��H�D$ ������H�D$H==��H=����H�5��H���s���1�H��蹜��H�D$H�D$H�hH� tH�hH�D$E1�1�H��H��H�P襨���З��1�H��������D$赗���D$�8"u*f.��|f(�fT
p�f/
(�w&fD蛛��H�L$(dH3%(��H��8[]�1�H�5����ݫ��f�{ xn����Y������D$�E�����~���f.�1�H�5O��荫��f�{ f��n�����������a���@�P�����K����1������U�H�����SH��8dH�%(H�D$(1�����H��H�H�$H�EH��H��!H�H�8�G�������H��H��H�H��H�D$茺��1�H���"���H�H�L$(dH3%(uH��8[]�蓖����AW�H�����AVAUATUSH��XdH�%(H�D$H1��]�H�5��H��H�H��H�D$ �3���1�H���y���H�0H�xH�D$H�<$H�t$�� tH�@H�$H�D$H�@H���E f����f���!f����7�Pf����!f����H��H�<$H���1��j���H�$��<-���M$L�d<N�LD���H�EH��H����w%H��������̺�H��H��H��H��H9�w�苖��L��H��H�����L�t$H��L�����H�<$����L��H��艕���H���̘��H�tH�@H�yH���p���H��H��襘��H��H�|$HdH3<%(�8H��X[]A\A]A^A_��H�4$I��f����H�EH�D$H����H�l$�1�I���H�D$A�	A���l�$�.f�H��1�I��H���������H��I��I��I��A��tCH��t
�L9�r�H��1�L��L��I��H��H��1�轒��L�����1�I��fDH��H9\$�i���H�l$A��0A�����DI��A�A��0t�H�$��<-����L�4$M�fL��荓��L��L��H��H��輖��A�A�H�����������覔��L��H��H������H�\$H��H������H�<$�/���H��H��褓���H�������0���DH��H�<$H�˽赑���F���L�~�-�L���@H��H�<$H��1�苑������fDH��H�<$H�	�1��k������fDH��H�<$H�R�1��K�������葒�����AW�H�����AVAUI��ATE1�USH��dH�%(H�D$1��W��H��H��跳��f�} �M$A��1�O�d$���t3H�EH��H����w"H��������̺�H��H��H��H��H9�w�L���e���H� �H��L�pH��!I��M�nM)�H��u#H�-���H��胖��H��!H��t�L��1�1�H������H��I��I����M����K�D?H�$H�?!H��u#H�:��H���#���H�!H��t�H��H�ƿ貒���*L��H��H�$虒���H��蜒��H�L$dH3%(��H��[]A\A]A^A_�f�H�@ ���I)�K�D-H�$H��!H��u!H�����H���s���H�t!H��t�H��H�ƿ����L��H�������f���f�H���*H��L�$$�ב��I�������J���f.���AW�H�����AVAUATI��USH��HdH�%(H�D$81��
��H��H�H��H�D$�b����M$��t[H�EH��H����w%H��������̺�H��H��H��H��H9�w�H��~ H��	J1�f�} ��H�D�H��H�D	��H�|$8dH3<%(�%H��H[]A\A]A^A_��L������H� �H�@ L�pH�!H��u L�%��L����H��!H��t�1�1�L��H��舐��M�vI��L�d$I��M)�f�} �sM����K�D?H�D$H��!H��u%H���D�H��胓��H�\!H��t�L��H�ƿ����L��L��*H�D$���H�ƒ�H��t!�����H������H���H�������H�<!H�5��H�81��3���H������I)�K�D6H�D$H��!H��u H�׶�H���Ò��H��!H��t�L��H�ƿ�R���H�D$H�~!H��u*H���f.��H���s���H�T!H��t�L��H��L�����������L���*H��H�D$�����ڎ��I���g����M���ff.�f���AUI��ATUH��S��1�H��8dH�%(H�D$(1�補�����hI����H��H����������H��H�H�$H�EH��H��� H�H�8�0��L��H��H�H�D$�=���1ɺH��H������1�H������H�D$(dH3%(��H�;H��8[]A\A]�+�������I�}@�������I��H��H������5���H��H�H�$H�EH��H�� H�H�8�w��L��H��H�H�D$脛��IcͺH��H���a���1�H���G���H�H�L$(dH3%(�+H��8[]A\A]�D諐��I���Z����1���襎��萋����AUI��ATUH��S��1�H��8dH�%(H�D$(1������hI����H��H������>���H��H�H�$H�EH��H�� H�H�8���L��H��H�H�D$荚��1ɺH��H���k���1�H���Q���H�D$(dH3%(��H�;H��8[]A\A]�{�������I�}@�����L���I��H��H����������H��H�H�$H�EH��H�2� H�H�8����L��H��H�H�D$�ԙ��IcͺH��H��豯��1�H��藫��H�H�L$(dH3%(�+H��8[]A\A]�D���I���Z����1�����������AUI��ATUH��S��1�H��8dH�%(H�D$(1��C������hI����H��H����������H��H�H�$H�EH��H�;� H�H�8����L��H��H�H�D$�ݘ��1ɺH��H��軮��1�H��衪��H�D$(dH3%(��H�;H��8[]A\A]��������I�}@����蜈��I��H��H�����������H��H�H�$H�EH��H��� H�H�8���L��H��H�H�D$�$���IcͺH��H������1�H�����H�H�L$(dH3%(�+H��8[]A\A]�D�K���I���Z����1����E����0�����AWI��AVAUATI��US��H��HdH�%(H�D$81�������P����I�<$���NM�d$�9��)����@�����j���Lc�A��u	M����L������A��1��&����H�����L��I�������H��H�H�D$H�EH��H�+� H�H�8���L��H��H�H�D$�͖��A��L��H��H��諬��1�H��葨��H�H�L$8dH3%(�oH��H[]A\A]A^A_�H�D$A�1��r����H�����L��I��������I��H�H�D$I�D$H��H�v� H�H�8����L��H��H�H�D$����H�L$��L��H�����E���A���1�H���ҧ��H�D$8dH3%(��H�;H��H[]A\A]A^A_����@��uH��u/@��to����E1�H�A��H�D$����D����<���H���H��u��u���E1�A���=���I�$��H���!���L���Q���A������f��[���돺1���諈��薅���A����fD��AWAVAUATUH��H�����S��H�׺H��hdH�%(H�D$X1��E��I��H�H�D$0���2��H�5x�L��E1�1�H�D$(���H��1��%���H�D$ H�D$ L�hH� tL�hH�D$ ����H�PE��H��L��L���(���L��谄��H�|$ H���#���H�D$ H�L$XdH3%(�<H��h[]A\A]A^A_�H�}H�|$(���v@��u	H���7@������������Hc�E1�H�5��L��1��)���H��fDH������H�D.�1�H��H�t����H�XD��L��L��H���{������+���fA�|$ �NA����L��A���M�L$M�t$M���TH��M����M���
H������H��	A���<E��t@� H��������G0H��H��H�A1�H��H��H����H�������H�C�H��t�H�W�0H��H��H��t����H���H�������H�|$(����H��� �sE1���+�81��f�H�L�H�lJ�H�H����������ʍq���v� t��0��	v΃�߀�F�h���H�5��L��蓍��H���k���H������A�E-I�}H�����D�s�������fDH��������0H��������G.H��H��M�������H��H���i���H��	���4@� M���L����G0H��H��H�B1�H��H��t.H���(���L�C�H��u��u�H�G�0L��H��H��u�H��u�I��u�H��M���H�D-L�t$E1�A�����H�D$I�F�L�l$I��M��G�D�$A��M��u	E������S@H��uo� M����D��1�H��H������0�G�H�A1�H��H��D��1����A��A�����	����E��uM9�w	E���5H����L�S�H��u�D��1�L��H������0�G�H��t�뗐H������A�E I�}H�����H�PA�H�����H�����A�E+I�}H������H�PA�H�����L�l$���A������1�A���A��D��H��A���A9�r��H��tK��1�H)�H�L$H��H)�A��	����I��t/I��L9|$�}���L�l$�X�����1�������H���g����.H��H��H���I���H��tdK��1�H�L$H��H)��=���I������H�������.H��H��H�G��I9�������.�����H�x�H��1��~�����1ɾ��=����Y��H�z� H�5��H�81��A~�����U�H�����SH��dH�%(H�D$1����H��H�H�] H�$H��tPH���tJH��x-H��������?H!�H�L$dH3%(H�DuAH��[]�@H��H	���f�H�EH�}$H�4����H1�H]��~��ff.�f���H���H�����dH�%(H�D$1��W��H��p H�$�Vf��w�]H��r<H�PH����L� H�r���t�2f.�H�V��L�$��u,H��H��u�H�t$dH34%(�H���fD�x$����A�	A������	��׉�A��A�����	w�Mcȅ�����A�����A������9���1���Љ�A������9�u�ȃ�A�����	w�Hc�H�<�L)�H)�H�@H�xH�D?�8����H�D$dH3%(uIH���{���
����x$�L� H�օ��*���A�	�J���1�떋x$H�օ��
���A�	�5�����|��f.���USH��H��H��8dH�%(H�D$(1�H���H����@��uH��uE�H������t��H�8H�|$H�D$(dH3%(��H��8H��[]��~��f.�H���H��t,H��u�H�C �H�@H�4����H�8H�|$�fD1�����1�H��H�H��H�$�X���H�D$(dH3%(uH�}H��8H��[]�V~���{���AVAUI��ATA��UH��H�����S�ӺH��0dH�%(H�D$(1����I��H�H�$@��u	H����H�E�H�����H�������@����@����1�1�H���2��H�H�T$H�T$A�V f�����H f����f��@��f���@��	�f����f�����@����f���t��*��"�р��H�����Hc�H�>��f�H�E������w$H���Hc�H�>��H�5Y� H����y����u%��*��"��H����Hc�H�>��D1�H�����H���G��H�H�T$H�T$A�V f���������*tf�1�H�L$(dH3%(�_H��0[]A\A]A^�DI�F1�H��H�4�����H�H�T$���f�H��� H���H����f��H���s~��H��� H��t��f�H��� H�f�H����f��H���3~��H�\� H��t��aDH�Q� H�<�H��uD�H���}��H�,� H��t�H��H��L���!{��H�������������I��H�L$(dH3%(�5H��0H��L��H��[]A\A]A^�V|��fDH��� H��u%H���D�H���k}��H��� H��t�H�L$(dH3%(��H��0H��L��H��[]A\A]A^�qz�����)�@��EЅ�������*��H�؀�"�D~��H�
j���Hc�H�>��D�q�z��f�����f���3f���^f����H�xI9~���f��������*��"��}��H�����Hc�H�>��f�����*��"��}��H����Hc�H�>���1����f�f����f���������*��"�]}��H�'���Hc�H�>��fD�����fDH������������f�H��������f�H����������H��D�H�B���f.�f��������d���f���*��"��|��H����Hc�H�>��1��f���������*��"��|��H�t���Hc�H�>��f��~}��*��"�m|��H�۬��Hc�H�>��L�HM�FM9�L��IF�H��t.A�v$9p$r�w61���D�T�$E9T�$w�rH��H9�u�M9�s3f���)����"���f��~���*��"��{��H����Hc�H�>��������*��"��{��H�P���Hc�H�>���u��H������ff.�f����G����f����>���f����L���f����<���f����=���f����*�r���f���AU�I��ATUSH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H������u	H����1�H�����H������I��M����I�$��H�D$I�D$HEH��H�_� H�H�8��L��H��H��H�H��H�D$�;���1�H���ѕ��H�H�L$(dH3%(��H��8[]A\A]��H���H��t,H���O���H�E�H��H�4��
��I���F���D�1�H������I���*���f�H�D$(dH3%(uH��8H��L��*[]A\A]�6w���s�����AUATI��UH��SH��(dH�%(H�D$1�����H��H�H����u2H�D$dH3%(��H��(L��H��[]A\A]����f�1��ɂ��L��H��I�����L��H��谂��H��H��������H��H�H�$�ݔ��H��H�����O���1�H���U���H�EH�L$dH3%(u!H��([]A\A]�fDH���u��H���3����r��H��� H�5&�H�81��q����AU�I��ATUSH��H�����H��8dH�%(H�D$(1��[��H��H�H�$H�؃�H���!��u	H����1�H�����H���"��I��M���vI�$fA�|$ H�D$tf�} u-H�EH�L$(dH3%(�oH��8[]A\A]�f.�L��H��蕒��I��H�����H��H�}� ��H�H�8����H��H�H�D$M����f�} �C$H�C���f�S �@H���H��t,H������H�E�H��H�4��-��I������D�1�H�����I�����f���
�H��� H�8�R���H��H�H�D$�����L��H��H���ğ��1�H���*���H����f������f�C ��DH�D$(dH3%(uH��8H��L��-[]A\A]�s���qp�����AUATI��UH��SH��(dH�%(H�D$1�����H��H�H����u2H�D$dH3%(��H��(L��H��[]A\A]�y���f�1����L��H��I���[���L��H���p��H��H���������H��H�H�$蝑��H��H��������1�H������H�EH�L$dH3%(u!H��([]A\A]�fDH���hr��H���3����ko��H��� H�5�H�81��Sn����AU�I��ATUSH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H���!��u	H����1�H�����H������I��M���vI�$fA�|$ H�D$tf�} u-H�EH�L$(dH3%(�oH��8[]A\A]�f.�L��H���U���I��H�����H��H�=� ��H�H�8�Ȩ��H��H�H�D$M����f�} �C$H�C���f�S �@H���H��t,H������H�E�H��H�4�����I������D�1�H������I�����f���
�H�z� H�8����H��H�H�D$�L��H��H��脜��1�H�����H����f������f�C ��DH�D$(dH3%(uH��8H��L��+[]A\A]�p���1m�����AUATI��UH��SH��(dH�%(H�D$1�����H��H�H����u2H�D$dH3%(��H��(L��H��[]A\A]�y���f�1��I|��L��H��I���[���L��H���0|��H��H��������H��H�H�$�]���H��H�����ό��1�H���Ս��H�EH�L$dH3%(u!H��([]A\A]�fDH���(o��H���3����+l��H�L� H�5��H�81��k����AW�AVAUI��ATUSH��H�����H��xdH�%(H�D$h1�����H��H�H�D$H�؃�H�����u	H����1�H�����H�����I��M���1I�$H�V� H�D$A�D$ H�;f����f�����I�D$HE��L�4�L��O�t6谥��H�;L��1�I��H��H�D$ 蓥��H�;L��1�I��H��H�D$(�v���H�;L��1�I��H��L�D$H�D$0�T���H��L��L��I��H�L��H�D$8�H���I�EH�;��H�,�H�H������H�;�H��I��H��L�$H�D$@��L�$1ɺH��H�L��L��H�D$H���L��H������L�D$L��H��L��L�$����L�$L��L���L���*���1�L��萋��I�H�L$hdH3%(�H��x[]A\A]A^A_�f.�H���H��t,H���,���H�E�H��H�4��ž��I���#���D�1�H��詾��I����������I�����H��@$H�@H�T$ �f�P �:���@H�A� H��u%H�-7�D�	H���n��H�� H��t�H��H��L���l��H�������1�1��~���H�%�h��ff.�@AWAVAUATUH��SH��HdH�%(H�D$81�H���u9�����H�L$8dH3%(�cH��H[]A\A]A^A_�f�H���(m��H���0���I��H��������?H9��BH�\H���=l��H��H���x����H�H���I�%1��w��L�5�� H�S��I��I�>�~���L��H�����I��H�H�D$���I��H�H�D$H���H����@��u	H����H��H��赼��I�T$I�>�H��H�H�D$ H�EH�DI�UH9�H�JHF�1�H�T�	H����H��L��H�H��H�T$(L���ݍ��L����v���0���H��L����袇��1�L��計��I�E�s����H���0k��H������H��L�����D���H�E��H���*���H���HN�����DH�L$H��H��L��H�$�-H��uXH��� H���H��uD�H���ck��H��� H��t�H��H��L���i�����@H���Xi��H������H�$1�H���‡��H�;�
������@f��@��uH��u[H����H��tvH��td@��uR@��t@H��� H�H�+� H�5��H�81���d��H�� H�5m�H�81���d��H�W��H�� H��H��� H��H��� H��H�q� H��H��� H���AWAVI��AUI��ATI��USH��H�5C� H��xdH�%(H�D$h1��jf��H�5#� H��H��H�H�D$ �d����u<���CH�؃�H��t	H���H�ڃ�H����H���HD�H�5�� H���ad��1҅�u+H�L$hdH3%(H���H��x[]A\A]A^A_�DH�5�� H���e��I��H�H�D$(�E f����A�W f����f����f������Jf������f���gf����]��f����1�L��H�t$���1�H��H�t$�ں��L�d$L9d$� LMd$��M�I�� LB�H��� H�8I�T$�\���K�T$1ɾH��H�H�D$0H��� H�8�6���L��H��H��I��H�L��H�D$8�*���H�C��H��H�a� H�8���1ɺH��I��H�L��L�L$H�D$@���L�L$L��L��L���$��������L��H��H���A����C L�L$��f���tf�} A�G �Of���OM�M�I�����DH���H��
��H��蘰��H�����H�Y� H�5�� H����c��H�5�� H��I�E��c���I����f.�f��t�f���t��Jf����uH�[� H�5p�H�81��ra��f�f��~sf��~sH�=�� H�5(� �cc��I�EH�=�� H�5� �Lc���I��D����H�ڃ�H��t	����H�ߺ1���H�����@f��~�H�=\� H�5�� ��b��I�E�f.�f�������I�qL��L�L$�6l��L�L$�����H��� I��I�AL��L��I�D$莐��L��H���S�����H��H�>� H�H�8�ӛ��L���H��H��H�H��H�D$H�E���M�e�I�.�I���@H��� �K���H������H�EH�ߺH�4�����H�����DH�=Y� H�5�� �a���I�EI�.�����`��ff.�@��UH��SH��H��8dH�%(H�D$(1�H�L$H��H�$H�D$��H��u-�%H��H����c��H�L$(dH3%(u5H��8[]�fDH�$H�\$1�H�H��H�D$H�H�D$蝁��H���#`����ATUH��SH��H��@dH�%(H�D$81�H�L$H��H�$H�D$�P���H��u[H��� L�%ΈH��u!��L���d��H��� H��t�H��H��H���c��H�L$8dH3%(uJH��@[]A\�H�$H�\$1�H�H��H�D$H�H�D$�̀��H�+H�$1�H��輀��H�;H����a����:_��f.���AVAUI��ATUSH��H�5�� I��H��pdH�%(H�D$h1��`��H�5�� H��H��H�H�D$@�Q^����u-���p��u	H���VH�؃�H����I��H�5y� L���^�����	L��H�5_� �_��1�L��H��I��H�H�D$H�"���1�L��H�t$����H�$H9\$� HM\$L�-� �H�I�}H�� HB�1�H�S虘��I�}H�T1�I��H��H�D$P�y���L��H��L��H��H�H��H�D$X�m���I�$A�v$H�D$H�H�D$I�H�D$ ���x1�L���.��I�$H�L$hdH3%(��H��p[]A\A]A^�f��/H��L���a��H��u��c��DH���H��
uDH������I�����@�C$1�L��Hi�ʚ;H��I�T$A�T� 1�������^���fDH�ڃ�H��u�1�H�����I���M���D��t�H���3���H�E�H��H�4����I��������\�����AWAVAUATUSH��HdH�%(H�D$81���~oI��H���u_H�L$H��H��L��H�$���H��tWH�$1�H����}��H�;���f�H�L$8dH3%(uiH��H[]A\A]A^A_Ð��tY���,_��@H�)� H�-�H��uD�H����`��H�� H��t�H��H��L���Y_�����[��H�nH���5���@���*H�H���PuH��L���q����L���@1��!k��L�5Z� H�U��I��I�>���L��H�����I��H�H�D$�R���I��H�H�D$H�؃�H������u	H����H��H�ߺ����I�T$I�>�H��H�H�D$ H�CH�DI�UH9�H�JHF�1�H�T�	H��J���H��L��H�H��H�T$(L���A���L���Ij���|��H��L�����{��1�L���|��I�E�C���H���x]��H������H���H���G���H���HN��8���H�� H�5قH�81��FY��fD��AWAVAUATUSH��HdH�%(H�D$81����ZH��H��������BL�fM��A����L��H�H���6��I����M����I�M�����1��<i��I�T$�L�5k� �I��I�>���H��H�����I��H�H�D$�l���H��H�H�D$H�؃�H��t"����H����H���H����I���IN���H��H�����H�L$8dH3%(�TH��H[]A\A]A^A_�f�L����[�����H�L$H��H��H��H�$�8�H����H��� L�%��H��u@�L���k]��H��� H��t�H��H��H���\���g���L��H�ߺ�l���H�UI�>�H��H�H�D$ H�CH�DI�UH9�H�JHF�1�H�T�	H�螒��H��L��H�H��H�T$(H���~��L���g����y��L��L�����Zx��1�L���`y��I�E����L����Z��I������H�$1�H���9y��H�;���������Z���W��H��� H�5#�H�81��V��ATI��U��SH��H�� dH�%(H�D$1�H��wB���H��t1�����H�L$dH3%(��H�� []A\��H�5�� H���V����tuH�5�� H��I������X��H��� 1�H��H��� H�8�!V��H��1�H������H��H;(uH;E tH�] H��H�+��X��1�H���x��H��Y���D��u��uH��uiH�؃�H����H�
�H���H���[���u	H����������H����Y��H�52�H��H��� H�81��.U��fDH���H��
u,H���ģ��������W��1�H���iw��H������H�ڃ�H��tDH��t>H��thH��tzH���G���H�\$H�|$�T����L��H���L����[������L��H��胤���B���fDH���H������H�D$뮐��L��H���s�����fDH���pV���uH��uiH�P�H����tH�����t���H�5� H�L$�H��H�D$�V��H�����������t/H���0W����L��H���S������H�����t#��t1��
u�H��� H�5k�H�81��S���H���HY���t�H��t���H��������T��H��}H��t H��}H��tH��H�z}�HE�H��� H�5ڃH�81��HS�����AUATUS��H���������+W��Hc�H��L�d��hU�����uL�e��u.��LW��H�����A��H��D��L��[]A\A]�=���DH�m��u���W��H��A���V��H�ètCH��H�y�E��uRH���[]A\A]�fDL���R��H�ǃ��m����;����H����R����t�H����S��H���b���H�e� H�5�{H�81��,R��ff.����U�SH��dH�%(H�D$1��Q���H�=|�W���H�=|H��� �W���H�=|H��� �W��f�f.�� H��� ����1���(�a���H��H�4�$H��HD��_W���1��f�P H�X�@$H�@H�@H�e� �ha���H��H�4�$H��HD��W���H�=�{f�H H�XH�@H�� H�@�@$e�H��� H�0��V��H��� �����H�5����H�=4{H��9T��H�;��T��H��uH��u=H����H���H������<�H�)� H�8�@H�xH�5�zH���U��H�;�H�&=H�5�z�
T��H�;�����H�;���H�5wz��S��H�;�����H�0���H�5�z��S��H�;1�H�X��H�5�z�S��H�;�H�};H�5uz�S��H�;1�H�ud��H�5cz�S��H�;1�H�m���H�5_z�qS��H�;1�H��`��H�5Zz�YS���H�=Tz�XP��H�;H�5KzH���FU��H�;��5wH�5<z�2U��H�;��H�5-z�U��H�;�H�5'z�
U��H�;�H�5!z�T��H�;�	H�5 z��T��H�;�H�5 z��T��H�;�!H�5z�T��H�;�H�5 z�T��H�;�H�5z�T��H�;�H�5z�~T��H�;�H�5z�jT��H�;�	H�5�y�VT��H�;�H�5�y�BT��H�;�
H�5�y�.T��H�;�H�5�y�T��H�;�H�5�y�T��H�;�H�5�y��S��H�;H�����H�5�y��S��H�;�H�5�y��S��H�;H�����H�5�y�S��H�;�H�5�y�S��H�;H�����H�5�y�S���H�=�y�wN��H�H��H�$�C���H��H�� �O���H�=7w�CN��H�H��H�$����H��H��� ��N���	H�=zy�N��H�H��H�$����H��H��� �N���	H�=�u��M��H�H��H�$���H��H�M� �hN���H�=�x�M��H�H��H�$�s���H��H�)� �4N��H�;H�� H�5�w�nR��H�;H�� H�5�x�XR��H�;1�H��R��H�5�x� P��H�;1�H�d���H�5�u�P��H�;1�H���H�5�x��O��H�;1�H�4���H�5wx��O��H�;1�H����H�5ox�O��H�;�H����H�5ix�O��H�;�H�f��H�5Rx�O��H�;�H���H�5;x�oO��H�;�����H���H�5su�TO��H�;1�H�H��H�5
x�<O��H�;�����H����H�5�w�!O��H�;1�H����H�5 u�	O��H�;1�H�����H�5�w��N��H�;1�H�����H�5�w��N��H�;1�H�}���H�5�w�N��H�;�H����H�5�w�N��H�;�H�G��H�5zw�N��H�;1�H��R��H�5dw�sN��H�;1�H�w���H�5Ow�[N��H�;�H�\��H�5]t�@N��H�;�H�A�H�5w�%N��H�;�����H��H�5w�
N��H�;�H�{�H�5�v��M��H�;�H�`�H�5�v��M��H�;�H����H�5�s�M��H�;�H���H�5�s�M��H�;1�H��H�5�v�M��H�;1�H�ڀ��H�5zv�nM��H�;1�H�����H�5fv�VM��H�;1�H�ڰ��H�5Sv�>M��H�;�H���H�5<v�#M��H�;1�H�7���H�5)v�M��H�;�����H���H�5v��L��H�;1�H�d���H�5v��L��H�;�����H�)���H�5�u�L��H�;�����H�^���H�5�u�L��H�;�����H�#H�5�u�L��H�;�H�(4H�5�r�lL��H�;�H�]��H�5vr�QL��H�;�H�2��H�5uu�6L��H�;�H���H�5Yu�L��H�;�H����H�5Bu�L��H�;�H����H�5,u��K��H�;�H����H�5�q��K��H�;�H�{��H�5�q�K��H�;�H�P��H�5�q�K��H�;1�H�Ȧ��H�5�t�|K��H�;1�H�p���H�5�t�dK��H�;�H����H�5�t�IK��H�;1�H�m���H�5�t�1K��H�;1�H�դ��H�5zt�K��H�;1�H�����H�5kt�K��H�;1�H�E���H�5Xt��J��H�;1�H���H�5Et��J��H�;1�H�����H�5/t�J��H�;�����H�����H�5t�J��H�;�����H�?���H�5
t�J��H�=t��K��H�`� �H�dH��H�5�sH��bJ��H�;�H��H�5�s�GJ���H�=�s�6L���H�=�s��� H�|� �L���H�=�s�|� H�m� �K���	H�=|s�m� H�^� ��K���H�=�r�^� H�O� �K���H�=�r�O� H�@� �K���	H�=)s�@� H�1� �|K���H�=s�1� H�"� �]K���H�=�r�"� H�� �>K���H�=�r�� H�� �K���H�=�r�� H��� �K���H�=�q��� H�� ��J���H�=�q��J���H�=rH�չ �J��H��� H�D$dH3%(�|H��[]�fDH��� H�8�M�H��� ��^�~�� ���H��� H�8��H�A� H�8�
�H�i� H�8��H��� H�8����LE��ff.����AWAVAUATUH��H��SH��H���H�T$HdH�%(H��$�1����H�H�|$H�|$��	��u	H����H�������H�C�H�������������H���xH��f(�fT
~f.
�}��f��1�f/��…���H�t$���e���1�H��H����e��H�H��$�dH3%(�	H���[]A\A]A^A_�@H��������H�3|Hc�H�>��D�D��H�D$���H�t$1�H�����H����H��@ H�\$H�\$f�D$>H��H�\$f���&H�z� �H�8�}}��1�H��H���e��H�L�C H�\$@A�@ ��f����5L��H�L$XI��I�܋p$�H�L$0H���������A�x$���=�H�@H��H����w"��f.�H��H��H��H��H9�w�t7I�@��H��H��H�����d@H��H��H��H��H9�w�H)�H��L�l$H��?H1�H)�I)��C��M���I����H�t$L��A�!�b��I��H�@H���L�d-I����A����M��I�M�����L��L����I��L��L��H������M�D$ I��A�@ ��f�����I�G A�x$�p$������1Ʌ����UB��L�l$H�t$L�����I��H�@L��5L���E@��I��H�@H��3���H���'@��I��I���-���H�L$0H�T$PL��L��H�D$P����H����H��� H��u$��H�=.j�F��H�`� H��t�L��H��L���D��I�����H�5�� H���@������H�7� H��H�8�$K��@f.���1�1�H���������1�H�����H���ԕ������1�L�D$(�LP��L�D$(��H�D$ H�q� I�PH�8�{��L���H�����I��H�H�D$`�v���L�D$(I��H�H�D$hL���H���A��u	M����L��L��L�D$(�2���I�V�I��H�H�D$pI�D$H�DI�UH9�H�JHF�1�H�T�	H�DZ H�H�8�\z��L��L��H�H��H�T$xL���Sf��H�|$ �YO���a��L�D$(L����L���`��1�L���a��M�e�^���fDL���B��I���+����L�d$P1�L����`��I�<$�(���I��� ���I�$��H������I���IN����L�|$@�f�|$>�]I�G �p$��tAH�@��H���������H��H��H�����lf�H��H��H��H��H9�w�H)L$H�@H�\$H���H�DH�t$HL���H�D$H�t����J����O�l-���fDH)����H�I� H�T$�1�H�8��x����@$H��H�@f�p H�\$X1�H��H��_��H�����H�C �P f��tDf���t>f���:���H�ܯ H�T$1ɾH�8�hx��1�H���@$H�@f�H ���U���H�|$�L<������H�\$HH��������H�H���e��H�|$@L���`���6���H��H�t$X�H�D$X�0�H�59� H��H���n>��L�t$H�5"� H��L���W>��I9�u'H�C �H�\$f�P �z���H���@��H���o���H��H���@s��H�C ��H�|$@H�L$XH�T$PL��H�D$P�Z��H���eH�� H��eH��u�H���A��H�ү H��t�H�|$@H��L���%@���K���1��)L��H�S��I��H�Q� H�8��v��H�|$@�H�����H��H�H��$��U���I��H�H��$�L����H����A��u	M����H�޺L������I�U�I��H�H��$�I�FH�DH�UH9�H�JHF�1�H�T�	H��� H�H�8�@v��L��H��H�H��H��$�L���4b��L���<K���]��H��H�����[��1�H���\��H�E�1���H)D$���H�\$P1�H����\��H�;�%�������I���H���(���H���HN�����H�_� H�5�cH�81��&:���!;��H�B� H�5+kH�81��	:��f���AWH��AVAUATUSH��H��H�|$8H�T$(dH�%(H��$�1ɨuD�uH��tH�D$(H�H�D$��H��
��H�¬ H�5#gH�81��9��f�L�d$(I�M���r����H������H�C�H�����H���������������H����=��f��1��f.�f(�fTys@��E�1�f/���f.!s�Sf.���f/���
����
�1�H���Î��H��H���g1�H���[��H�v� �H�]H�8�us��1�I��H���Z��I�EA��H�5f�H�D$HH�1� H��z��1�H��I���Z��I�EI�|$H�|$H�D$PH�@I�L�d$0�)H�D?�M$H�D$@H�D$ ����H�EH�<�H�|$ H����w-H��������̺�fDH��H��H��H��H9�w�H�|$ H�D$ H���8L��$�H�ؾH��L��H�Ce1��=7��H�V� �L��A��H�l$@H��z��1�I��H����Y��I�4$H��H�����H��H�t$HH�����H�t$HH��L�t$@I������H��I���/A����	I�M����	��L��H�����I��H�T$@L��L���.��M�L$ L�d$`H�D$XA�A L�d$h��f����+L��L��H�@H��������̋p$E�A$���V�H�@H��H����w��f�H��H��H��H��H9�w�E��t6I�A��H��H��I�����;H��H��H��H��L9�w�H)�H��L�|$H��?H1�H)�I)�M����H��H�T$@H�|$XL�lI����L��A�!�#��I��H����H��L�,hI����A����I�M��M���|��L��L���U��H��H�|$`H�t$hH�����H��H�D$`H�D$hL�H A�A ��f�����H�G E�A$�p$�������1�E������L�|$H�T$@H��L��H�|$XL�t$0L�lL�|$�N��I��M����H�D$L�tH�������L���P4��I��I������H�L$xH�T$pL��L��H�D$p���H����H��� L�5h^H��u"f��L���C:��H��� H��t�L��H��L����8��H�������H�q� H��H�8�^?��H��������_H�
�mHc�H�>��H�|$(�6��I�����H���9��H��$��H��HDŽ$��<�t	H�����N6��H�������L��H��貉��H�����H�5s� H���4�����C���H�k 1��M �A��f���@���f����f�����	�1�f����������wH�� L��H�8�n��H��H�D$x�1�H��H��C$H�Cf�S �}U��H�H��$�dH3%(��H��[]A\A]A^A_����H���2��H����8��1�H�H����H��?	�tFH��� H�5dH�81��2��fD1�f.����1��"���H��1�H���H��?	�u�1�H�����H���_���H������H�@L��L�|$M�4腿��I��M���7���L���1��I���I���f�1��B��I�W��H�D$H��� H�8�Wm���H�����L��I��H�H��$��Ň��I��H�H��$�L���H���A��u	M����L��L��L�L$胇��L�L$�I��H�H��$�I�QI�EH�DI�VH9�H�JHF�1�H�T�	H�� H�H�8�l��L�L$L��L��H�H��H��$�L���X��H�|$�A����S��L��L�����XR��1�L���^S��I�6�d���fDL����4��I���1���L�l$p1�L���1S��I�}�x���H���.���I�E��H������I���IN����L��f.�H�t$P�F���H�|$ H�D$`�H�T$HH�T$xH�T$HH�T$PH�T$xH�T$PH�T$@H�T$xH�T$@H�T$XH�T$xH�T$XH�T$`H�T$xH�T$`H�T$hH�T$xH�T$h���fDH)�����H�|$�n/������H�L$xH�T$pH��L��H�D$p�;��H���KH�ӣ H�-�YH��u ��H���k5��H��� H��t�L��H��H���4��I�����H�D$ �$���1���?��I�V��I��H�� H�8�j��L��H�����H��H�H��$��"���I��H�H��$�H�؃�H������u	H����L��H�ߺ���I�T$�H��H�H��$�H�CH�DH�UH9�H�JHF�1�H�T�	H�x� H�H�8�
j��H��H��H�H��H��$�L���V��L���	?���TQ��L��H������O��1�H����P��L�e�e���H�T$(H�|$8��?�H�\$ H��H�@H���H�|�H���������1�H��H���qP��H�3H���ƹ��H�|$`H��虿��H�D$`�z�����1��H��� 1�L��H�8�)i��H��H�D$xH�1��C$1�f�C H��H�C�O��H��}���L���o1��I���l���H�\$p1�H����O��H�;� ���I���j���H���H���R���I���IN��C���H�|$ �,��H�������/���d���H�;� H�5�VH�81��-���-��H�� H�5^H�81���,��H�� H�5^H�81���,��1�1�1�1��_���	���������AWAVAUATUSH��dH�%(H�D$x1����,I��L�.����H�����L���`���H��H�H�D$PH�D$H�EH��H�D$f�} L�5�e��I�����M���D$M��A��A����D���M����I����I����I��$��A���VA���lL��L�T$(�0���D$ ��+���L$ L�T$(f.�������ef/���f/
�e���H,�L�l�=���f.����U���X/���I�E��������Ic�L�>��L���0���u	H���3H�P�H����tH�����t���H�5ϟ H�L$H�H��H�D$H�L-��H������������L��H��?A��uCI�E��H��
��
L���H��t
H���L���L/��f��1�f/�������'A��(���DH�5� L���*������H�t$@L��H�D$@����=L��H���N���H������CL��躚��I������f�f(��*��I������H�������������
����L���.��I�Ǩu	H���II�G�H���tI�����t
A����H�5a� H�L$H�L��H�D$H��+��H������������L����.��I���
���f.�H��� H�T$�E1��H�8�d���@$H��H�@fD�x H�D$@1�H��H��VK��H�H�L$xdH3%(��H�Ĉ[]A\A]A^A_�DE1�E1�E1��E ��f�����A���+����L���H���H�L$H��<L��L�T$H�D$H��*��L�T$H�������E1�����fDH�������j���H����-����c���H���Z����T���@M���/�D$ E���FH�5Ϝ H�L$H�L��L�T$(H�D$H�G*��L�T$(H������������qH�w� H�t$H�8�zb��H��1�H���I��H����D�E E1�E1���f�����L��A�H��?����M����I�E�H���t�|$u	M���JH�5� H�L$H�L��H�D$H�)��H������������K���H�T$��H��� H�8�Kb���<���fDI�E�H�����
D$���D$�D$ A�������L��H����������I�E��H��
��L���H���b1�H�����L��L�T$�'+��f��1�L�T$f/���E1����M���1I�E�H�����
D$u�D$A���"H�5� H�L$H�L��L�T$(H�D$H�k(��L�T$(H�����������tRL�����L���f+�����L���*��I��A��t)H�E1�H��uL���9+��I��A��tH�E1�H��t��E f����f�����M������� M��I����IE�H�
� H�9f���3
����`��H�I��HcD$ H�T�P�E �Pf����*M����f����M����
A�A�E$I�EfE�U H�|$��1�L���!G��I�E����I�E������������E1�E1҃�
�����I�E���������E1҃��t��
�����D���H���������tr��
�����L�|$�L��L���$z��H�L$�D$ I��L��M�H��ID�H�D$�E ��f����H���M��E1�A���O���E1��o����M��1�I�I�����j���L���(����s���H�H���f���L���7)����V���H�H���I����3���DH�A� H�T$1ɾL�T$H�8��^��f�} I���}A�D$$A�I�D$fE�l$ L�d$@1�L��I�$�E��I�$�-����D$ ����E������u���DL��H�H����������H���$�������M��L�T$��M���qI�E�H���t�|$uL��H�H�Ѓ����E���A�D$$A�����I�D$fE�t$ �@���H�L$H��<L��H�D$H��$��H�������������I�U��H��
����L���r���H�èu	H����H�C�H���tH�����t	���d
H�5Ֆ H�L$H�H��H�D$H�R$��H���������������L�d$H��<H��H�D$HL���$��L���H�������L��H��?H��u<I�E��H��
�)L���H��t
H����L���&��f��1�f/�������f�} �5���I�E����
��
H�t$@�L���$��H�D$@H�Ѓ��������H�T$��������1�I��������L��� ��H����&�����I�E�������t���
������i���E���`�����M��A���l����L���H����H�L$H��<L��L�T$H�D$H��"��L�T$H�������������f�} �&���M���3������I�E��H��
����H�t$@�L���#��H�D$@H�Ѓ�H��� H�:�����H�T$������L���}��H���%�����5���E1�E1���L���*%��������H�������{���I�H�D$8A�F ��f��������H�@H�L$H�L�a��H�� H�uO�d$L��H�;�#�H��I�>H��L���b���H�L$H��H�@H��UH�T	H�;H�����H�T$8H�T$@H�T$8��f����f����f����7���/H�}�~M���g�RH�D$����I��I�E1�H�|��.���(�H��H�4�$I��HD��J$��1�L�`H���@$H�@�f�C K��H�|	�[.���(�H��H�4�$H�D$ HD��#��H�T$ H��L���@$I��H�P�f�P �H�@�B��I��ty�H��H���B��I���AA��@I��H��H��L���gZ���L��H���WB��K�?L9�v�L��H��L��L��I)��:Z���L��L���*B��M���H�|$��~L�����H�����H�|$�r���A�E f���d���f���Z���f����P�����?��H�T$L�����v9���6���I�E��H��
��L���H����L��L�T$�!��f��1�L�T$f/����z���L��H���[���H�j� H�T$1ɾH�8�W��f�} I���.���I�E��H��
����H�t$@�L�����H�D$@H�Ѓ�����A�E$I�EI�EfA�M �W���A�E ���L��H��?������������fDH�L$�L��L�T$ H�|$H�AHE�1�H�D$��q��L�T$ I����H�|$�D$ �0M�u ���H�|$���H�����L�����H�1� H�uH��H�;�r�L��H������I���?���H�T$��H�� L�T$H�8�V��f�} I����M��L�T$�]���WH�!� H�5�LH�81����H�EH���H��H�H�����M����I�E�H������|$��L��H�H�Ѓ������A�F$I�FfA�n 1�L���<��I���M���4���L��A�E$H��I�E��	�M���}���'�fA�} �w���E1�A�E$I�EfE�E �f����L��L�T$����H��� ��L�T$������I�E����
������"���H��� H�8�H�T$��������M����I�E�H���t�|$uL��H�H�Ѓ������A�����A�F$I�FfE�f ��������M����A���t�A�����A�E$I�EfE�M �o�H���\������H������H�����
�H����
���L��H��?H��u<I�E��H��
��L���H��t
H���\L�����f��1�f/������x���H�T$��H�k� H�8�T��H��I�E����
���H�t$@L�����H�T$@H�҃����Uf�} �U�C$H�Cf�C ��H�D$���H�}�w����}$�m���fA�E f�} A�E$I�EI�E�"�A����fA�E ����H����������H�H�������H���K������H�H����������H��H�H����������H�����L���gm���D$ H�H�@H�T$XH��HD$���E�����I�E����
�����������fD�A�E$I�EfA�] �2�I�E����
t=���=����L���������fA�u ��I�E��H��
�����H�t$@�L���>��H�D$@H�Ѓ���A���l���A�����A�E$I�EfE�] ��@L�����H�5�GH��H�� H�81��=�����;�L��H�H�Ѓ��"����L������H��������M���f�} ������C$H�Cf�C ���J���u�L��H�H�҃��h���H�� L��H��L���6=���H��L���v:���X���L���<L��H�D$H���H����������1�L���<L��H�D$H����H�������������L�����H���.�������fA�E ���S�fA�E ���G�1������H�F�H��L��H��H�D$��j��H��H�H�D$PH���{�H�D$�tH�H�D$�{�f.�H�|$���H�D$�]�ff.����H��H���H�t$H�t$��H���ff.����UH��SH��8H�t$H�|$dH�%(H�D$(1��$�������H����:����0��	��1��@H����:t��0��	��Hc�H��H�Q���u�H�S�H��	�H��HG�A�H��H���\V��H��H�H�D$H��v"H���8��8��H��H��H��H9UvH��H�U1�H����5��H�EH�t$(dH34%(uDH��8[]�H��A��1�H����U��H��H�H�D$�H�؅ H�5)EH�81��'���"��f���SH��H��H�|$H�t$���H��A�1�H��1��U��H�øH��t
1�H���I5��H�H��[�1�����u������u�������u�������u������x��� ��@D��ff.��1���t��uP��tU����f��u�����u������u������u������u����u� Ð��D�����ff.�f�H��(L�WdH�%(H�D$1�HcGM��E�A�M�Y�D����� ��)‰��
����M9�sTA�Q���tR��D�lj�A��)����A��I�A�D	�����?H�� I9�s
A�A����	�H�����H!�H	��1҅�urD�ǁ��?H�� H	�H�|$�D$H�D$dH3%(u_H��(�f.��D��1�)�����?H�� M9�sA�Q���HA��A	�L	���D�lj�1�����?H�� �[������ff.��ND�WA9���AWL�F1�AVAUATU�i�Lc�SH�_I��O�$0I�A�$E�D�HD��A��D$�E9���A��M��I��E1�1��I��A�S�E�
I��I��L�I�Չ�H�I�� I)�L��E�J�H�� H�у�M9�s�E�E���	I�V�H9�s$E�V�E��t�DD�
E��uH����H9�r�o�NA��A9���Hc�H��H�L��f�H9�sH��H���291t�rp��H�މD$�1��I��A�H��H��H�H)�H�ЉV�H�� ��M9�s�Hc�H���2��u*H�B�H9�v�J���t����uH����H9�r�o�D$�[]A\A]A^A_�@�w����D$�[]A\A]A^A_�1��DD�W�NA9��&�����fDUS��H������H��� Hc�H��H��t8H�4�H�H���H�H��H9�u�H�:H���H�>H9���H��H��u�ٽH�5�� ��H�
� �E�H�H�<�'I��H��I���H�>H���H�ȁ H��H9�t:H��H��H)�H��L�H= vЉٽ��E�H�H�<�'H�����H�‰Z�jH�BH��H��[]�fDUH���SH��H��(�D$dH�%(H�D$1������D$I��fH~�fH~�f~D$H�� ������։ρ���EωL$����H�|$����u_�T$A�Q�T$E1���A�QA��A��E�A����������U�5)‰H�\$dH3%(L����H��([]�D�T$� )�����L$	�A�I����T$�DH�|$�^����T$A�A�A�� A�Q���w���-2�EIc�A�|�����A��A)�D��f����
��@AWI��AVAUATI��USH��LcoLcvE9�|D��I��Mc�I��Lc�C�.1�A9\$@��A|$�W���Hc�L�XI�,�L��I9�s@�H��H9�w�I�I��N�,�K�4�L9�r�^f.�I��I9�vKH��D�W�E��t�L��M��E1ɐI��A�P�D�1H��I��L�L�I�щQ�I�� L9�w�D�	I��I9�w���~�u�H�U���t�H���
��u��u�XH��[]A\A]A^A_��AVI��AUI��ATUH�nSHcFH�_D�gA)���H��H�H��
@H9��H��H���89:t���A�}����IcU1�D�`H�pI��L��IcVH�|��
�L��H���S�H��L�VH)ʋM�H)�H��A��A�R�H�� ��H9�w�I9�v;L��H��@H���V�H��H)�H��A�ӉW�H�� ��I9�w�I�q�H)�H��L�E��uf�H���A����t�D�@[]A\A]A^�DA��,���H��H��A�H��L��M��I�������1��)���H�@[]A\A]A^��H��t4HcWH�5 ��~�)f�HcWH��H��H��H�<�H9�u��fD�k��ff.�AUHc�1�ATUHc�SH��H��D�g��D�H��H�H�ʼnD�H��H�� A9��H��tD9c~&Icĉl�A�D$�CH��H��[]A\A]�f��C�x�E���H�sH�xI��HcCH�����H��L������Icĉl�A�D$�C�ff.�f�AV��AUI��ATUS��H��������M��tNH�-�} H����M��E1��@�t.H�}H��t;H����t�L��H������L��I������M��u�H��L��[]A\A]A^�fDH��H������H��H�L���H�}I��H��t��=���L������H�^CH��4�1��j���I���>���f������H��H�qH�E1�H�E�H�-�| H������H��H�D$����H�D$H������ff.�@AWA��AVA��A��AUATUH��SH��D�e�E�E�A�\$9�~����9���z���I��H�xE��~#A�O�H��H�D�f�H���B�H9�u�H�|�HcEH�uL��A��ta� E1�D)�fD�D��H��H����D	‰W�D�F�A��I9�w�E��D�DE�E�eH������H��L��[]A\A]A^A_�D�I9�vץI9�w���f.���AWI��AVAUM��ATUSH��H�t$dH�%(H�D$x1����H��@�A�u@��-�7@��Hc�H�>��A�u�D$ @������I��E1�@��0�@��L��σ�/����9��1�E1�E1��*C�4�D�tq�H���A���Ήσ�/����9�VA��~�A��Ӎ��TQ��ʐ�D$ f�H�D$H��tL�8�D$ ��tfW�?H�D$xdH3%(��H�Ĉ[]A\A]A^A_ÐA�u�D$ @��� ���f�H�D$H��t�L�8��I��A�u@��-����D�D$ E1�@��0���A�u����<X�^A�]��t���H�=�A�)��H��t�I����0�	f�H�-lA�������>�$I���D$�"�A��L�������T$H���YH)�f��I��E�u�����H*��Y��YFA�X$�$�T$E��u��$��M���B�����1�E1�E1�D��.���p�NЃ�	����L�PE���(
L�Ѓ�0�}�D)�@�H���8��0t��1�����Y��0I�¾�\$8C��I��D�4O1���	�A�uI��@��0t�@����A��`���D���@��E���D$8E��I��1��p@��+�M@��-�H��1ۍ~Ѓ�	��L��1�E������+\$8E��I�lj\$$E���@D��f�A����H*�AN�f�$A��	���A�H�5�>f��H��H*��Y��X��$A����D��)�D$$�D$�����D$��tH�H�v>�<$�Y<��<$�d$��r�D$=4�x�����}�$�1�H�=�=fD�t
�Y׾�Hc�H����u�fH~�@��HD$H�$H��=��H�$H�؉�H�� -PH�� H	�H�$�Y$fH~�f�$H�� ��%�=�|��
=�|�H���������D$H�$�$�\$�@H���0��0t�~�1��J����x�n�H�pD�W�A��	w@f�D�D�H��B�lG��>D�G�A��	v�H��H)�H���'��N�H���݅�D��������$�\$A�P�9��81������A��	~����9��D�D$(���A��	D�D$(H��D�p�@��I��
A�	E9�}2E�H�H��E)�O�t
f�I��A�U��
H�ǃ�0����M9�u�H��D�d$8�L$$1�L�|$XA)��DI�I��D$(H�CH�D$@H�D$lH�D$PH�D$hD�d$8H�D$H�{�5�H�t$@H�xI��HcCH������H�t$PH�|$H�D$��I����H��H�H�E�D$h���	�L$8D�|$(D�,�L$l+D$�43�����|�6)ȋ|$A�LD�A9�D�<��AN�D9�AODž�~)�A)�A)ŋt$8��~3H��L$<�m���L��H��H����L��H�D$0�B���H�D$0�L$<I�ƅ�~
L�����x���I�ƋD$$��~�t$(L���!���I��E��~L��D���N���I��E��~H��D���;���H��L��L���m�HcU�x�HI���@9��IH�4�L�@I�0H�t5�f.�I9��OH��H���9t��M��L�|$X����H�������H�D$�~H�$H�� A��%�=��cE�]E��u	���QL��D�D$$�o���D�D$$I��HcEA�U)…��>H��I�MH�H�T�fDH9���H��H���:98t���D�L$E���ED��%�=��2=p�S
�H�P9�\$H�$�~$�Y�fH~�f�$H���$
L���`�L���X�H���P�H���H�L���@��$���fDA	�����I��f��g����D$$��t��b�|$$��	D�‹\$$�%)�D)�ډT$9��8����H��8�$D)�Hc�)��Y�Hc��Y�����D�D$8E��1��D$$I������D$8D��1Ƀ�߃�Eu#��f�	�D	�����E��I��A�����@E��1�A�������H��A�w��DM�u	A�D$�L�t$(M�l
H�D$0H��D��f�I��A�V��
H�ǃ�0�G�M9�u�A��H�L$0H��H�D$(L�l�2����I��E�uA��0t�A��H�=V8��H������f���5������$�T$A��.��E�eE������E��H�=	8�D$D������D$H�������I�����T$�	H�-�7�D$D����E���[	A��H���T$�E����T$H���	H)�f��E�eI�����H*��Y��Y�7�X$f.T$�$z�u��D$M��H�-N7�D$�	E�fI��A��H��M������H��u��D$A���A��P����A�U�,)׉։�����1�)ȃ���I�����0��	���A��1�D�����	w<��I���DF�A�uA��NЁ�/~܃�	w�I��A�U��0��	v�������D�D$8D��1Ƀ���<��A�zI�BD�W�A��	�-���I�����|$$����D�d$8H�q5�$A)�Ic��^����D$�؉ƒ�tHc�H�
E5�<$�^<��<$���D$�?����|$f����t$�j�$���E�H�}41�@��t	�Y�H���u��fH~�HD$H�$��t9H�� �k�����)��~������4���7H��4H�$�<$f�f.��|$�����$�����$�"���fD���H�t$pL���L$<�a�H�t$tH��fI~��D$0�I�A�W+U��T$p+T$t��fH~��L$0�L$<��L���D��H�� �H�� H	�H�D$0�~L$0�^���4f/��I�����
2H��?H�<$H�� �����������|$��t^���wV��4f/�r0�,��
�1��t��f���H*�f(���ufW�1fH~�H�׉�H�� ���)�H�� H	��d$H�$�$fH~�H�� �����@H�� H�$�$�Y��X�fH~�f�$H�� H���9�u�t$���
L�����L�����H�����L������,$�l$���DD�|$(D�l$8A)����fD�Y
p3f(���ufW�0fH~����fDfH~����H�� ��)�H��H�� H	�H�t$0�~D$0�M���@M��L�|$X����H�$H�ȉ�H�� ����������t2�|$fH~�H�� %�-@H�� H�$�X<$�|$f�<$��T$���<����g������PH�� I���<$H�$�$L	�H�<$H�� �$�������H�� H�$�$�Y��X�fH~�f�$H�� �ׁ�������|v`H��������H9T$��H�$�U���f�H�������H�T$H����H����H���
4/�8������PD�$H��H�� I	�L�$����,�f��*��\ȅ���H�������H�$����1f/������M��L�|$X�-���D��.f/����Y
N1f(�fW�.����DE��1��D$81���E1�1�E1�1��D$81����� 1f/��|���f/
1�#����i���1����M��f��A��p��"H��H�$�$��E���/���A���A��P�G����f���x0�
x0�����$������\$fH~�H�� %�-@H�� H�$�\$f.S-�\$f�$�r����l���H�$���"�����D$���HcT$$H��.�$�Y��Z��N����0�4����FL$8�����41�N��G�4���E�9�����~�������䍂P�$�D$H�� H	�H�$�4$�t$��A�UI�����5���1���D�������%�-
��H�� H	�H�$�4$�t$�f���fDH�������H�D$�����H�$H�� I���P�A��0����I��E�e��A��0t�E�����E������T$�����.����D$E�e�D�����������D$�[�M��L�|$X�$��"H��H�$�#�D�T$�����E��t������w���k)���9��A���%�H�� H�$�$�\$�V���M��L�|$X����H�$�������H�����!�H!�H	�H�$�L����� ����!�H�� H�$�5�������ƃ�L����fD1Ƀ���������G��f.���AWf(�AVAUATUSH��x�|$�t$H�T$(L�D$0dH�%(H�D$h1�fH~�f�D$H�� �Å�����f(�%�=��=f�f.���f(�H�t$`H�|$d�L$ �T$�&����T$�L$ ��H����fH~�fH~Ћt$`E1�H�� ������H���?H�� H	�f��H�D$�D$f��*��Y
�,�\�,�Y�,�X�,�X�f/��D,��1��)�D�p�A����Ic�H�5E+��f/���A���D$L�D$8E����E��� D�d$ E��D$�D$��	�����~	��1ۉD$�|$�����D$�D$H�������y�D$D$ ��D$\�����D$@O�����Hc��D$X�v��e���H�D$(���5�H�\$0A�0I��fD�H��tH�@H�H�t$hdH34%(L����H��x[]A\A]A^A_Ð���fH~��H�؉�H�� H	‰�%�H�T$�T$=�����H�D$(fH~��'H�������H�����	��nH�)I���I�D�
H��H�����u�H�\$0H���7����5���@�D$L�D$8E���F���A�A)�D�t$8E1�E���5����P�|$�D$H���D$���9�D$\�x���D$@Hc��D$X�T$P���I��"\$X��
�D$ �T$P����
�É�H��(�����Љ�������f(��^�)H�5e(��t���t�Y��H���u��^��|$L��t�
�&f/���f�ɋL$@�*��Y��X
�)fH~�fH~�H�� ��-@H�� H	…����t$ �|$@�,�f��H�T$�W�Hc�L�
(�\$I�_�A$ыT$H�*ȃ�0�\����(�
�(A��^��\�f/�w{�-&f(��\�f/���
���D�G��%�(I�T�f(��\�f/���
H9���Y�f��H���Y��,��*؃�0�C��\�f/�v��F�D$ �{f��D$��T$���|$ I�NjD$d���T$�q������D$�\$@�\$\�D$X�D$P3E��u	�6+D$`�\$8�A�������D$HI��H�I�E�t$8��~E��~D9���AO�)�)�A)Ɖt$8�t$��t7�D$H���v	L����H��H��I������H��H�D$�s�H�D$H�ſ�q��H��H�D$H�H�GE���B�|$XtH�������H�D$�V
�D����� )ƒ���)�T$8�Aօ�~
H����7�H��E��~H�|$D���"�H�D$�D$L����H�\$HcC9E�}H��H�uH�H�T��H9��_H��H���9t��K�D$ H��1Ҿ
�X����H�ŋD$H�����D$\�����D$@L��D�d$@L�t$��H��1Ҿ
�i��H��L��H��H���G����0�C�D�EE��u
�}����D)�A9��A��E1��H���!�H�t$H�ŋUHcF)…��0
H��H�MH�H�T�
�H9���H��H���290t��S��n
�

f.��t$`�T$d�2�� ��� )�f~���f��A��H*�fH~�fH~�H�� �����H�� H	��I���@D��D)d$8��D�d$ E1�D$����D����aH�#I���N�f��
H��H�����u�H�t$0H���J���H��B���f��D$L�D$8E���W�������f��@)���f~������	������D$H���f���A*�f.�z�����A����������@D�t$@E���bD�\$H�D$ E�������D$8���L�l$E����	�D$@M��L�|$@��I�\I��H�\$8�H�t$L�����E�g�ōX0IcEA)���H��I�OH�I�T�fDH9���H��H���:98t�A���H�t$H�|$�����P���$
A�����HcPE�GA)�u>H��I�wH�H�L�f�H9���H��H���99:t�E�A��H��D�D$H���E��D�D$H���|$�eE���xI��A�^�L;t$8��L��1Ҿ
���1Ҿ
L��I��L;l$������H�|$1Ҿ
I������H�D$���fDH��D�D$H�c���|$D�D$H�F	�D$����E���9	D	��a����l$L��L�|$@A��D�MI�^E��u
�}��E�����H���H��H�t$H�ŋUHcF)…��R	H��H�MH�H�T��H9��L	H��H���290t�riA��9����D�d$A��1�PfDH�t$H�|$�	���H���!���H���f���|$��A��L��I�^L�|$@A��9�<A��E�&M��L�l$��fDH�t$H�|$���D�PE�������A������K��I��H�D$����f���*��Y��X
!fH~�fH~�H�� ��-@H�� H	�fD�\� H�T$�L$f/��;fW
�f/����D$Pf�T$�|$ �D$d������HcD$ H�8�‹D$�����D$@�����5�Y
u A�H�D$f/L$��D$ I�_A�1H�|$���M��tL������H������H�D$(�t$ ��0H�D$0H���c�H��[�f��|$�\$H��	ڈT$X��������\$8E1�����f.��D$P������D$8A��x���D��T$ H�7�ډփ������Y��H�5�f(�1��@��t	�Y����H���u�@���a���f(��X���D������|$XH�D$��E1�H�t$�F�D$X��H��|������ )‰����D�D$����������\$@����H�|$1Ҿ�����UH��H�D$Hc@)…���H��H�MH�H�T�H9��[H��H���9t��G�$���fDf(¸�V�f��t$H���$��H�����@�D$X��D$\�D$@�D$���Y�f�f.�����L��fD��
�f(��X�f/�w�\�f/����D$P��	������C��t$ �DL9��j�B�H��H�S�<9t���h���f(¸��H�������H�t$H���H���H��H�� ���6�����A��E��A��#�������H�D$E1�D$L���؉D$ ����L����(��I������H�D$H�� ��u����HcT$ f(�f��I�_H����H�փ��^��t$ �,�f��*���0A��Y��\�f.���D$@�����D$@�%���I�L�fDH9����Y�f�H��f(��^��,�f��*��P0�S��Y��\�f.�z������H�À{�0H�C�t��y�A����$����G�H���%I�|�D�C�H��H9�������Y�f��f��H���,��*ȃ�0�\�f.�z�������@�S��oL9��(�P�H��H�C���9t�|$P��t��t
���DH�|$�F��M���O���M���>���M9��5���L���#���(���fD�S�H��H�C���0t��A�9�9M��L�l$��������t$ �x����t$@������|$\���?����%���f�ɋ\$ �*��Yčs��Y��X
�fH~�fH~�H�� ��-@H�� H	��3�A��D$��D	�������.���f�H�D$E1��=���A�1�D$ ��A�}�H��I�uH�xH��IcEH������H���_��H�D$����A�0L���C��D$ ���A��L��M��H�\$8L�|$@L�l$��A���S��U������L��1Ҿ
���I�ŋD$\���"�D$@����X�f/����A�H�������D$�������D$\�$�D��A��I�^��L��L�|$@A��9�B�����1��DO�E�&M��L�l$����H�ljl$A��L��L�|$@���A����E���1����l$L��A��L�|$@�uI�^����������������fD�D$\�\$ �D$@����f(���	�f.�H�������������������A��%�������D���f��D$����t��D$\����A������������h�������<���T$f��D$ I�Of(��^��,�f��*��P0A��Y��\�f.�{'�|$@�m���H�������<)‰��o���H������ff.�@��AWI��AVAUM��ATfI~�UHc�SH��H��(dH�%(H�D$1�fH~�H�� �����f(�fT
�f.
���f.���f.J�DL��H��4����L�d$�T$�Y�fH~�fI~�H��4-A��������}Lc�Hc����L��U�H�� ��
�b��N�0H�HE����1L9������fDH��EM��tI�mH�\$dH3%(�H��([]A\A]A^A_�D-�A����d����A���������<L��E��N�0�1H�� �
h���	�H�� I	�L�L$�D$�X��\�fH~�fA~�H�� ���)�A��H�H��L9��1������H���������4;@�q�D��A����	�L9�u؅������x0����
�H�Հ|(�0H�U�t�����D%���E���H�� I	�M�����A�����	����nH�
��IH����1H��H��@�2@��u�M���|���I�U�s���A�����������A������0f�M���8���H�PI�U�+��������A������p���aH�
��NH���@�1H��H��@�2@��u��[����{���4������!�����H��H���-Infinity 0.0+0.0-0.0%lue%zd%sExponent underflowExponent overflowComputation results to 'NaN'Divide by zeroinvalid rounding mode (%li)argument must be positiveexponent overflowprecision too large.%zu:negative precisionsqrt of negative valuesqrt of 'NaN'(Not a Number)-0to_i**divF<=>>=<=remainderdivided by 0divmodniltruefalseto_strStringBigDecimal.exception_modeBigDecimal.rounding_modeBigDecimal.precision_limitBigDecimalnewinterpret_looselydouble_fig_loadsave_exception_modesave_rounding_modesave_limit3.1.5VERSIONBASEEXCEPTION_ALLEXCEPTION_NaNEXCEPTION_INFINITYEXCEPTION_UNDERFLOWEXCEPTION_OVERFLOWEXCEPTION_ZERODIVIDEROUND_MODEROUND_UPROUND_DOWNROUND_HALF_UPROUND_HALF_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_EVENSIGN_NaNSIGN_POSITIVE_ZEROSIGN_NEGATIVE_ZEROSIGN_POSITIVE_FINITESIGN_NEGATIVE_FINITESIGN_POSITIVE_INFINITESIGN_NEGATIVE_INFINITE+0+InfinityNANprecsprecision_scalen_significant_digitsaddsubmulthashto_sto_intto_rsplit+-+@-@/quo%moduloclonedupto_fabssqrtfixroundfracfloorceilpower===eql?<nonzero?coerceinspectexponentsignnan?infinite?truncate_dumpBigMathexploghalf_uphalf_downhalf_evendefaultbankerceilinghalfprecision must be an Integer21E%ld can't be coerced into BigDecimalComputation results to 'Infinity'Computation results to '-Infinity'Computation results in 'NaN' (Not a Number)Computation results in 'Infinity'Computation results in '-Infinity'ERROR(VpDivd): space for remainder too small.second argument must be true or falsefirst argument for BigDecimal.mode invalidinvalid value for BigDecimal(): "%li"Conversion from String to BigDecimal overflow (last few digits discarded).can't omit precision for a %li.BigDecimal to Float conversionBigDecimal#precs is deprecated and will be removed in the future; use BigDecimal#precision instead.Undefined operation in BigDecimalCmp()can't convert %s into BigDecimalUnable to make a BigDecimal from non-zero imaginary numbercan't convert %li into BigDecimalZero or negative precision for expComplex argument for BigMath.logZero or negative argument for logwrong argument type %li (expected scalar Numeric)a non-integral exponent for a negative baseload failed: invalid character in the marshaled stringH���H�0���.�����(���(����������H������� ��#��X$��X$��X$��X$��X$���$��X$��@$��X$��X$��h$��X$��X$��X$��X$��X$���$���V��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��T��T��#U��3��3��3��3��3��3��3��3��#U��3��3��3��3��T��^R��S��S��S��S��S��DS��S��S��S��S���S��S��S��S��S��S��DS���T���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U��\T��T��\T���U���U���U���U���U���U���U���U���S���U���U���U���U���S���U������������������������������������������������������U���U���R���������������������������U���������������S��KU��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��G��7S��R��R��G��G��G��G��G��G��G��G��R��G��G��G��G��7S��xT������������������������������������������������������Q���Q���R���������������������������R���������������Q��3T��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��/��R��Q��Q��/��/��/��/��/��/��/��/��Q��/��/��/��/��R���S�����������������������������������������������������xP���Q��xP���������������������������Q���������������Q��S������������������������������������Q���O���O�������������������O����������Q��HR�����������������������������������������������������`O��`O��{P��������������������������{P��������������`O��NS������������������������������������������������������O���N���N���������������������������N���������������O���Q��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��s��HN��cO��HN��s��s��s��s��s��s��s��s��cO��s��s��s��s��cO��,���Ɔ��Ɔ��Ɔ��Ɔ��Ɔ������Ɔ������Ɔ��Ɔ����Ɔ��Ɔ��Ɔ��Ɔ��Ɔ������h���Ǚ��Ǚ��Ǚ��Ǚ��Ǚ������Ǚ����Ǚ����������Ǚ��Ǚ��Ǚ��Ǚ��Ǚ���������������������������������,����������������������&�.>�C��]r2<��������?e��A��C��������������X���X���X���X���X���X���X���X���@���@���@���@���@���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���X���@���X���X���X���X���X���X���X���X���X���X������X���0���}NaNInfinity��ؗ�Ҝ<3���#�I9=��D��2�����[%Co�d(h��7y�ACn����F��?�O8M20�Hw�Z<�s�Ou�?$@Y@@�@��@j�@��.A�cA�חAe��A _�B�vH7B��mB@�0�B�ļ�B4&�kC��7y�AC�؅W4vC�Ngm��C=�`�X�C@��x�DP����KD��M��D0123456789abcdef0123456789ABCDEF��7y�AC��?�?@�����A�5�����?5�5�?�5�����?�?aCoc���?��`�(��?�y�PD�?<�s�Ou$@@@`;D�h���`����������������������������������������h�����,���T��l�������(���h�����<(��p�����������H��4���`(�����������X��$x��8��X���h����x�	�� 	h�\	h��	�
X�H
�\
(���h���������X���$���X����xx������������$
h���\
H���
8��4H�������8�����,H��`����H������������h��4���L���d ��|� ���X!����!����!���x"�� #��L�)����*���h,���-�� 1��pX3���X6��8��X�9���h;���>��`XD���E����F��$�G��\N��N��(N��08N��DHN��XXN��lhN����O���Q�� (S��pHT���hV���W��`�Z���^����b��Hxc��thd����f��(Xi��tl���Xo���xp��HX~��t����������`8���xx����ȯ���(���������������|���������8�������h����|��������������H�������zRx�$����FJw�?:*3$"D�����\���p���
��������N$� ��IDo
EZ
Fd
D�H��$�T��+A�A�G PID\��UA�0(���hA�F�O0z
AAFMAA\���q@pL��B�K�B �A(�A0�GP�
0A(A BBBF�(��9Q�g$�L��`A�e
JD
L_0����]E�N�G P
DAAgDA(,���UB�A�A �}
ABD(X���oE�A�D0X
AAAH�(���B�E�E �B(�A0�D8�GpR
8A0A(B BBBJ����PA�a
N_(���nE�A�D0W
AAA(P��kB�D�D �|
CBEH����4\0����C�D xAAC��L ��a��H���mB�E�E �E(�D0�D8�DP 
8D0A(B BBBF�,���8���A��
DVd����B�E�B �E(�A0�A8�D��
8A0A(B BBBA�
8F0A(B BBBE|0��c�����]W���e�p��SA�a
Nb8�����B�A�D �K
JBJK
ABJL���B�E�E �D(�D0�M
(A BBBH\
(D BBBJ`h����B�B�B �A(�A0��
(A BBBBl
(A BBBEX
(A BBBI4���7B�D�D �Y
DBGACB���|���B�H�B �B(�I0�D8�G��
8A0A(B BBBA�
8C0A(B BBBF<
8A0C(B BBBA$zRx��������,����L��mK�A�G a
A�A�JX
AAFzFAG��H ��l$(�B�B�B �E(�D0�D8�G��
8A0A(B BBBK�O�P�B�u�O�P�A����4����A�A�G N
DADQ
DAA0�,��F�A�A �D0w
 AABI���A�T
K@4(��E�C�D {
IAG�
LACf
DAA(x��B�L�A �|AB8��B�H�G �A(�D0z
(D ABBG4���F�D�A �e
ABEj
ABK�	��B�G�B �B(�A0�D8�G��
8A0A(F BBBAs
8A0A(B BBBAy
8C0A(B BBBA�
8A0A(B BBBD<�	L����F�L�B �H(�G0��
(A BBBAH�	����B�G�E �B(�A0�N8�D��
8D0A(B BBBF�>���((P
���:A�A�G@~
AAGH|
����B�B�B �B(�D0�D8�G��
8A0A(B BBBK�
$	��W`�j
FF0�
d	���B�A�C �J��
 AABH(�
��]A�I�N0�
AAH H
���E�D0m
AIl�
��\H F
B��
��\H F
B(���E�A�D`�
AAB����GMl
GF�,��;MmT��)H] l��(HZ8���zHc
EI X����E�PP�
AA|���2E�l����2Hf(�����E�M�DPz
AAA(�P���E�M�DP�
AAAL
����F�G�B �B(�A0�A8�N��
8A0A(B BBBA(X
D���E�M�DP�
AAA(�
����E�M�DP
AAA(�
l���E�M�DP
AAAL�
����F�N�B �B(�A0�A8�D��
8A0A(B BBBHH,���FF�N�B �E(�D0�A8�DPx
8A0A(B BBBJHx� ���F�N�B �B(�D0�A8�D��
8A0A(B BBBIL�H#���F�E�A �D(�H`�
(A ABBH�
(A ABBFL�$���F�E�A �D(�H`�
(A ABBH�
(A ABBFLd&���F�E�A �D(�H`�
(A ABBH�
(A ABBFd�h'���F�E�B �B(�D0�A8�F�
8A0A(B BBBD�
8A0A(B BBBMH�)��?F�B�B �B(�A0�K8�N��
8A0A(B BBBD(h�/���E�M�D0[
AAE �80���H �
G�
E$����E�H�L0�DA4��1���E�A�JP\
DAOp
DAEpt2��#B�B�E �D(�K0�K`�
0A(A BBBF
0J(A BBBKI
0J(A BBBF zRx�`�����(������7����7����7���7���7��(�7��L<�7��F�J�A �A(�N`�
(A ABBHl
(L ABBEL�9��F�B�D �D(�DPB
(G ABBNs
(A ABBGL��9��F�J�A �A(�N`�
(A ABBKD
(L ABBEL,�;��F�B�D �D(�DPB
(G ABBNs
(A ABBGL|�<��F�J�A �A(�N`�
(A ABBKD
(L ABBEL�P>��F�B�D �D(�DPB
(G ABBNs
(A ABBGL ?��F�G�B �E(�A0�A8�N��
8A0A(B BBBKHl�A��XB�B�B �B(�A0�D8�D�{
8A0A(B BBBJH�E���B�B�E �E(�D0�A8�N��
8A0A(B BBBF(�I���E�D�GPW
AAG00�I���F�A�D �G`�
 AABADd�J��iF�B�E �A(�A0�Q�n
0A(A BBBJ zRx�������(����
H��L��zF�B�B �B(�A0�A8�D�r
8A0A(B BBBBL0�N���F�B�B �B(�A0�A8�D�1
8A0A(B BBBC0�<Q��HB�D�C �G@L
 AABHL�XT��F�B�A �A(�F0R
(G ABBJv
(F ABBG((U���
E�F�D0H
AAGH0�b��7
F�B�B �B(�A0�G8�J��
8A0A(B BBBEL|�l��M
F�E�B �B(�A0�A8�J��
8A0A(B BBBAL��y��F�B�B �B(�A0�A8�G��
8A0A(B BBBF����$H [(4����>E�D�DP�
AAA `̒��PE�G BA�����R�D���s�����5D0�
Kl�Ԕ���R�H�B �B(�A0�G8�d
0A(B BBBEK0A(B BBBD������H8������$84����A�A�F �DA(`���\A�I�G@�
AAFD�@���B�E�B �B(�D0�A8�D@�8A0A(B BBBL����hB�E�E �A(�E0�
(A BBBF@(A BBB$8���E88t����B�G�A �D(�G0H
(D ABBJ@t����1B�D�E �A(�A0�F@c
0D(A BBBGH���B�E�I �B(�A0�D8�D@�
8D0A(B BBBFL�����F�E�B �E(�A0�A8�G�
8A0A(B BBBBLTX����F�F�B �B(�A0�A8�D�N
8A0A(B BBBBH����VF�E�B �E(�F0�D8�G`
8A0A(B BBBFGNU��4P4�!�X�X	`U	����qX#W�7�4!jy���X%
HU�!��!���o`�
��!�	h��	���o���o���o�o���oș!�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'P'`'p'�'�'�'�'�'�'�'�'(( (0(@(P(`(p(�(�(�(�(�(�(�(�()) )0)@)P)`)p)�)�)�)�)�)�)�)�)** *0*@*P*`*p*�*�*�*�*�*�*�*�*++ +0+@+P+`+p+�+�+�+�+�+�+�+�+,, ,@�@�?`�!GA$3a1X%UUGA$3p1113�2FUGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GOW*�3�3
GA*FORTIFY�4FUGA+GLIBCXX_ASSERTIONSbigdecimal.so-3.3.8-6.el8.x86_64.debugj���7zXZ�ִF!t/��#G�]?�E�h=��ڊ�2N�`�@� ��Vr�=@^M�me�3�r7Nv
烫D��V�/4H�����߷[��qf��فc�'��~��X�U���	��!�G�J�R�a���\���B�w'%u�(5�I�u���eAm�!/��i͝8>�0ֈ��B��iE)0�5���{U�3����+UD^_2�k[$��
*QF= h�Sc������D#�s.򇷦q>�޼��wP˜�J��ݡ�&���4�I�q�j�B���ې+�)�"V�$�KZ �%n_��iM�A��nY�+�N���6�-7\����UL��H�#=�+h�u�
�3=\?`\���]�����˓��M�v��/C��+�hR�T�+߰����S��"�)
D!��Ҋ�ۂ�6��bҤ>�[�2@��e�!���9�� S�о�?���#����1�VX���KF�O�ɷ!���h���F{	zISb�fV��Tӧ�|Esᤑ�vgU�B�c�Ƶ�̵ρU䢡�	&6��B��3�H�����c/�׫<&�'B���]����[#K7�}1˼�bCB �Li����`	9 �Uy
HU�)����b Z�W8�U=��OE�x��Mc�����[ ͮ(�V°����/g]�ʁ��/S�W�ݿ�d&R��R�|x�.��3'�>�c��ڸ�M�x������@uU����)�fg�- �a!�Q�rd1$w �3�+�;��:@'�M-
������/�o�!
����f�0=
�@�e�HgV�	���Kv4
{��/���s�€�MRL��l��K!�w
���R��eqȄ@��#���Ȋ���:�h�hF��@�t.�����#��5� �)}T(lj˦A�c&܃i�T�o�	%Ғ����S����oue�[�s�N�uD;�7��_Uc��G2Ŭ�>
ׄĚ��"��Δz`�I�������P�D��m 㩂�URq
_*~�?_~r�̐�S5�"n�U��ϰ�����s�
�"���|���ng�������1��Zf.%�� 6�86�?�o�#�H�y}��� x�o�w�\��`lE���]{S��Y
�Ș��k{��=j�1��]y�z���E��ލ<hs���W����W�	$�[ư�LK#���ˠ
v�o#j]���� c�¾�C[�E9f��Hjam���]���ZU�t7����j徝��Q�}vq�����&Va2cD�{����nJ�/^f�Q/�?�9X1�
If�k��qi�v�nA��\�6SE���@�3~��Ε�e 獮�Г�	�m߳UeTl�p�5���Ɓ�?g?
L�o�E}��o9��:�bM%��%�7�j��B��i��4��!�lM##��3�"��-b�7gRJ3cF�
[EK}��4�	�)1��i�)��u��E�+��
�rD�T�}��:1!�C�):h���v�'��QQ!|�EW\�ˎ	P�Kyv�A-$�2��
C�f�@ﴓ��:��Q�U��)�m;z2Y�!�����<��{wJ�� K@�j�Tc�A=��m*[�[c�EWQ��Џ�[���I$V���f�$�@'�g0;��7�L�yس�t���0��<?]�Pz�/0���b+Rw=��A�x'rp�|s-;�}�2�^Ny!�̇�f��ǒ���Ȁ�Mi�6K8h�����1��}�9
����sP��R��m�nn�$-G|��y�df/z	�;C��`��7���O�1�39�z��5�szOEh�iтz��|��i��R	W�]����H�
52���7���1)�ժ9��'0C�B�T�y��*�����&#P�[�k;�R�M�`�-�!�y� M�x5�ԑ�y:ӵ�X�ńo#�ɉ����g5�����;�~א)y�P����4iN(!\�o.���cg�,�i���G
�JB�3�-K,u%�Kͧ6�!:��x����[p�r,Tfĝ�v�Ч�dN�^��|/�)[�	V�Uȩ�l��κ�����j������d����v�Tg�L��`-�t����)�vL;�;Cp��R�ʎI"�ݍ�(�
�z��S+��[!��0ZJ�9�@&H�E4��O�Q��emB�g.��6:+��	9]8p��AOg��]/�zM��c����	��Ӛ΃�~��尕�~���zҮr+���bG�vct���F�R����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``P(��`0�8���oE���opT���^Bhh�	hX%X%c�%�%�n0,0,�w�2�2v"}HUHU
�`U`U� �jjD�`n`n��P�P� ��!����!����!�� �ș!ș ��!���!�@�@�!@�0 �p�a@�p
��,ܢ	�(PK�Z��^����ruby/psych-5.1.2/psych.sonuȯ��ELF>,@�z@8	@H`H` �i�i �i XP hjhj hj 00888$$(`(`(`  S�td(`(`(`  P�td�V�V�V��Q�tdR�td�i�i �i XpGNU��b��><�4��Zޠ�u^� B��HH	�^fix�
BE��"a��j������
��|�S��E6
Z�qXH���8����2_Ur �	p]1��U?f
}��S-,��,G�"� D�O.�I<"���st�JO�"�"a�������_^�nv����}, ��7��F"�y{! =�f��=rp ��S��`Q���p ��p �p ��-X�@TZ��p 	p ��p *�p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeyaml_get_versionrb_ary_new_from_values__stack_chk_failInit_psychrb_ext_ractor_saferb_define_modulemPsychInit_psych_parserInit_psych_emitterInit_psych_to_rubyInit_psych_yaml_treerb_define_singleton_methodrb_check_typeddatayaml_emitter_deleteruby_xfreeyaml_emitter_set_canonicalrb_data_typed_object_zallocyaml_emitter_initializeyaml_emitter_set_unicodeyaml_emitter_set_indentyaml_emitter_emitrb_eRuntimeErrorrb_raiseyaml_mapping_end_event_initializeyaml_sequence_end_event_initializeyaml_document_end_event_initializeyaml_stream_end_event_initializerb_fix2intrb_num2intyaml_emitter_set_widthyaml_stream_start_event_initializerb_unexpected_typerb_attr_getrb_utf8_encodingrb_enc_str_newrb_funcallvyaml_alias_event_initializerb_str_export_to_encrb_string_value_cstryaml_mapping_start_event_initializeyaml_sequence_start_event_initializerb_string_value_ptryaml_scalar_event_initializeyaml_document_start_event_initializerb_ary_entryruby_xcallocrb_string_valuerb_ivar_setyaml_emitter_set_outputrb_error_arityrb_cObjectrb_define_class_undercPsychEmitterrb_define_alloc_funcrb_internrb_define_methodyaml_parser_deleterb_funcallv_publicmemcpyrb_ull2inumyaml_parser_initializerb_intern2cPsychParserrb_const_get_atrb_class_new_instancerb_utf8_encindexrb_default_internal_encodingrb_respond_torb_ascii8bit_encindexrb_usascii_encindexrb_enc_find_indexyaml_parser_set_encodingyaml_parser_set_inputrb_enc_get_indexyaml_parser_set_input_stringyaml_parser_parserb_protectrb_str_new_cstrrb_enc_associate_indexyaml_event_deleterb_jump_tagrb_str_newrb_ary_newrb_ary_new_from_argsrb_to_encoding_indexrb_ary_pushrb_eNoMemErrorrb_exc_raiserb_const_getrb_usascii_str_new_cstrrb_define_constrb_requirerb_define_private_methodrb_path_to_classrb_obj_allocrb_iv_setrb_define_module_undercPsychVisitorsToRubycPsychVisitorsYamlTreelibruby.so.3.3libyaml-0.so.2libm.so.6libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby33/lib64�ui	���&ii
1�i �,�i �,�i �i �i �U�i p. j oV0j  @�o 
�o 
�o i�o '�o g�o b�o c�o j�o I�o N�o R�o T�l �l �l �l �l �l �l �l �l 	�l m m m m  m (m 0m ^8m @m Hm Pm Xm `m hm pm xm f�m `�m �m �m �m �m �m  �m !�m "�m a�m #�m $�m %�m &�m (�m )n *n +n ,n - n .(n /0n 08n 1@n 2Hn 3Pn 4Xn 5`n 6hn 7pn 8xn 9�n :�n ;�n <�n =�n >�n ?�n @�n A�n B�n C�n D�n E�n F�n G�n H�n Jo Ko Lo Mo O o P(o Q0o S8o T@o UHo VPo WXo X`o Yho Zpo [xo \�o ]��H��H�O H��t��H����5�K �%�K ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A�������%EF D���%=F D���%5F D���%-F D���%%F D���%F D���%F D���%
F D���%F D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%}E D���%uE D���%mE D���%eE D���%]E D���%UE D���%ME D���%EE D���%=E D���%5E D���%-E D���%%E D���%E D���%E D���%
E D���%E D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%}D D���%uD D���%mD D���%eD D���%]D D���%UD D���%MD D���%ED D���%=D D���%5D D���%-D D���%%D D���%D D���%D D���%
D D���%D D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%}C D���%uC D���H���?���f.�DH�=�C H��C H9�tH�>C H��t	�����H�=�C H�5�C H)�H��H��H��?H�H�tH�EC H��t��fD�����=UC u+UH�=*C H��tH�=�< ����d����-C ]������w������H��8dH�%(H�D$(1�H�T$H�t$H�|$���HcD$H�t$�H�DH�D$HcD$H�DH�D$HcD$H�DH�D$ ���H�L$(dH3%(uH��8��^���ff.���H������H�='�b���H�B 1�H�5'H��H�H�5����@�����������1���H���������H��H�5�; �|���Hc��H��H�D�ff.���H��H�5�; �L���Hc��H��H�D�ff.���H��H�5q; �����x|H�H��H�Ѓ��f.���SH���#���H��[���f.���SH��H�5!; ����1�H��H��@�����H��[�D��UH��: ��SH�����H��H�h �@uH�h H���|���H���/���H������H��H��[]��SH�������t[�H��@ H�SH�5�%H�81����D��ATH�5c: USH��H��pdH�%(H�D$h1�H����H��I���7���H��L�����H�T$hdH3%(uH��pH��[]A\�����ff.���ATH�5�9 USH��H��pdH�%(H�D$h1�H�����H��I���G���H��L������H�T$hdH3%(uH��pH��[]A\����ff.���ATUH��H�59 SH��H��pdH�%(H�D$h1�����1�H��H��@��I��H�����H��L�����H�T$hdH3%(uH��pH��[]A\��/���ff.�@��ATH�59 USH��H��pdH�%(H�D$h1�H�����H��I�����H��L���,���H�T$hdH3%(uH��pH��[]A\����ff.���USH��H�5�8 H���7���H��H���t�����H������H��H��[]�������f���USH��H�5@8 H�����H��H���t�W�����H�����H��H��[]�������f���ATUH��SH��H�5�7 H��pdH�%(H�D$h1����������H��I��H�����H�߉��1���H��L������H��H�T$hdH3%(u	H��p[]A\����D��ATI��UH��SH��H�5�= dH�%(H�D$1����H���J���L��H��H����H��H��H�5�= H�$����H�Ǩt"�E���H�\$dH3%(uH��[]A\�@������ff.����ATUSH��H�ĀH�t$H�5�6 dH�%(H�D$x1��`���H�|$I��H��u:1�H�l$H�����H��L�����H��H�T$xdH3%(u`H��[]A\�@@��uH��u
���H���H��u��?���H�|$H���2���H�D$H��t�H�|$�
�H���u���� ���AWAVAUI��ATUH��SL��H��H�t$H�5�5 H�$dH�%(H�D$x1��}�I�����H�|$I��H����H�<$H����H�߃����T�E1�M���A��E1�H�<$tH���f�I��1�H�|$t
H�|$�O�H��L�l$L��A��D��L���&���L��L�����H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_�f�@��uEH��t@H���H��u4L�����H�߃�H�$�H��������C����@��uH��u
��[���H���H��u�L����H�D$�����D��AWAVAUATI��UH��SL��H��H�t$H�$dH�%(H�D$x1��T�H�|$I��H����H�<$H����H��H�5*4 ���H�߃�I�������E1�M���A��E1�H�<$tH�����I��1�H�|$t
H�|$���H��L�d$L��A��D��L���s�L��L������H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_��@��u=H��t8H���H��u,L���i�H�$�,�������E���fD@��uH��u
����H���H��u�L���$�H�D$�����%�D��AWAVM��AUM��ATUH��SH��H�t$(H�5�2 H��$�H�T$ H�L$dH�%(H��$�1��l�H�|$(@��uH��tI��H���H��t
��3���H�|$(H��I���{�H�|$ H�D$(H��t$@��u�H��t�H���H��u�L���L�H�D$ H�|$H��t$@��u�H��t�H���H��u�L����H�D$H�߃����7��H�D$(M��H�|$(A��E1�M��H�@A��E��H�$�9�1�H�|$H��tH�|$H�D$��H�L$H��1�H�|$ t!H�|$ H�L$H�T$��H�L$H�T$H��L�l$0SE��AVD�D$L����XL��ZL������H��H��$�dH3%(u!H�Ĩ[]A\A]A^A_�D����'����9�f���AWAVAUATUH��H�5	1 SH��H���H�|$H�L$dH�%(H��$�1���H�D$@��uH��tH�EH�ƒ�H��t�H���O���� ��H����H����H�������E1�E1�L�l$PH�EE1�H�|$A���� ��H����H��H�t$H�L��HN�L��L����H�|$L�����M��tL���}�H��$�dH3%(H�D$��H���[]A\A]A^A_��H�EH���L���1�H���a�H��I���Q�L��A��I��ue�p�L��A���D$Hte���D$LH�����������H�D$ ��uH�;H����H��t8�H����f�H�E������{�L��A���D$Hu����� �kH����H�<$��&�1�H�<$I��I���gH�CL�t$0L�t$ L�l$@H�D$(L�d$PH�l$8H��fDH��� t0H����H9��H�D$(H�<�@��uH��u��B�f�H9k��H�C ��H�H�ƃ�H��u�� ��H���~��H�wH�GH�t$@H�@L��I��H��H�D$P��L��L�d$ ��H�|$@L���,�H�|$PL��H�D$@��L��H�D$P��L��I�G����I�G�H;,$����L�t$0H�l$8L�l$ �h����H�~?H�G H�0H�t$@�a���H�CH�$H�����L�t$0H�l$8L�l$P�%���L�l$P����L�t$0L�����H��3 H�5|H�81��}��x����AWAVAUI��ATUH��H�5F- S��H��H���������I��L�e��u;H�5�3 L��L���1�L��L��H�5�����o�H��L��[]A\A]A^A_�D����H�]H�5,3 1�1�H����H�53 1�1�H��I����H�5�2 1�1�H��H����L��A��H��u@�K�L�����!�H���t9����L�����1�H��L��@���8��0����{��f����ź����x����SH�=�O�H�5+H��H��1 H��H����H��H�5H����H��1 H�5��H��H���H�;�����H�Y���H�5����H�;�H���H�5���H�;1�H�v�H�5���H�;�H�K���H�5���H�;�H���H�5��d�H�;�H�%���H�5��I�H�;�H�����H�5��.�H�;1�H��H�5���H�;�H���H�5u��H�;1�H�_�H�5k���H�;�H���H�5\���H�;1�H��H�5J��H�;�H�Q�H�59��H�;1�H���H�5,�}�H�;�H���H�5�b�H�;1�H�V�H�5�J�H�;�H���H�5�/�H�=���H�=�H�]0 ���H�=�H�B0 ��H�=�H�'0 ��H�=xH�0 ��[H��/ �f.�@��SH���#�H��[���f.���H�5M0 1�1��\�ff.����H�5=0 1�1��<�ff.����H�5�/ 1�1���ff.����H�5�/ 1�1���ff.����H��H�5�/ �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H��H�5Y/ �dH�%(H�D$1�H�GH�?H��H�$�Y�H�T$dH3%(uH����_�ff.�@��H��H�5/ �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H�OH�5q. H�?��t�@��H�OH�5a. H�?��T�@��H�OH�5I. H�?��4�@��H�OH�5A. H�?���@��H�OH�5�- H�?����@��ATI��UH��SH��H�� dH�%(H�D$1�H��������?H9�w|H�DH�5�- H�L$�H��H�D$���H�H�D$H��t!H�|$�-�H�T$L��H��H�RH����H�t$dH34%(�uH�� []A\��H�����|�����ff.���SH��& ���*�H��H�x �@uH�x ���H��[�ff.�@��UH�5�& SH��(dH�%(H�D$1���H��H��, H��u$H�-@�H�����H�d, H��t�H��H��+ H�8�U�H���H��H��������?H9�wtH�D?H���H�$H��������?H9�wmH�D?H���H�D$H��������?H9�w=H�D?H��H��H�D$��H�L$dH3%(u*H��([]�@�3�느�+��f�����$�@��AWI��AVAUATUSH��H��XH�T$XH�L$PH�|$8dH�%(H��$H1��D$d���D$���H�5% H��H�D$ �Y�H��H���.�H���6�H�5+ H�|$X������H��* L�d$XH��u%H�{D�H���C�H��* H��t�1�1�H��L���(�H���B�������9\$�E9��=H�=1���9�tH�=%��1�9�@�ƍ4vH��L�d$X��H�T$XH�5����H���C��fDH�|$X��H�D$XH�=�H�D$h�(�H�=�����H�|$hA���m�9D$�O	9��e	A9��M	�]�H�|$hH���P�H�T$hH�D$hH�T$pH�T$h�H��H�D$X���H�D$XH�PH�pH� tH�pH���h�H��������?H�D$pH�D$H�D$dH�D$f.��E����H�t$H���������H��$�H9���L�d?H��$�H9���L�t?H��$�H9���L�l?H��$�H9���H�D?H�T$H��$�H�=�L��$�L��$�L��$�L��$�H��$�G��|$p
���D$pH�
�Hc�H�>���H�|$xH�������t$H��I����H�t$ H���nL��A����H��$�I��H��t$���t$H��I���n�H�t$ L����I�ă�$�Hc�$�L��$H��$H�L��$H�=|���H��H�TL��$ ��H��$0H�T$H��$(@�K�H�|$�A��|$d���5����`��H�T$L��H�=�����H�|$xH�������t$H��I����H�t$ H����L��A���H��$�I��H��t$���t$H��I���f�H�t$ L����I�ă�$�Hc�$�L��$H��$H�L��$H�=����H��H�TL��$ ��H��$0H�T$H��$(����H��$�H��$��[��t$H��I�����H�t$ H���L������H�|$xI��H���������t$H��I����H�t$ L�����H��$�I��H���E����t$H��I���\�H�t$ L�����I�Ń�$�Hc�$�L��$H��$H�L��$H�=����H��H�L	L��$ ����$�L��$(H�H��$0H�T$H��H��$@��H��$8����@H�|$xA�H��t,�����t$H��I�����H�D$ H��tL��H�����I��L��$H��$H�T$H�=����L��$�c�����|$x�L��$HE�H��$H�T$H�=����H��$�$���@����I��H�D$xH����HcPHc�H�tH�T1����H�D$0L��$�M����H�D$0���$�L��$L��$ H��$H�=V���H��$�HE�H�T$H��$(���H�T$L��H�=!����H�|$����|$d���q���H��$HdH3%(H�D$8�H��X[]A\A]A^A_��HcD$xL��$H��$H�=��H�T$H�DH��$���DH�T$L��H�=������@H�T$L��H�=�����H����������9\$���������f����H��$�I��H9��������H��$�I��H9��������H��$�I��H9������p������A�H��$�A�H��������V���t$H��I�����H�|$ ��������fDA�H��$�A�H���}�������t$H��I�����H�|$ �]����H���fDH�|$xA�H��t�����t$H��I�����H��$�A�H���!�������t$H��I���Y������@H��$�I9��h���H�l$@H�l$ L�|$HI�����[���t$H��I�����H��t|L��H���,��I�|$�I��H��t)�%���t$H��H�D$(����H�T$(H��H������H��L���1�I���~��L��H�����M9�tNI�<$H���q���A�I�|$�H��t�����t$H��H�D$(�f��H��H�T$(t��f.�H�l$@L�|$H�j�������H�D$0�I���A�A�����H��$�H��t��N���t$A�H��I��������H�D$h�����H�D$h�����H�D$h�����E��u"H�  H�H���m��H���u��H���}��H�EHL�`H�EPH�XH�.  H��u L�-��L�����H�  H��t�H��H� H�8����I��H�D$PH��$H��������?I9���K�D$H��$H��������?H9���H�DH��$ H�}H��������?H9���H�D?H�}H��$(�H��t�8��H�}8H��$0�H��t���H��$8H�> H��u H��H�����H� H��t�H��$�H��L�����H���������l���H���w���;���L���j�������p����H�% SH�5�H�H�; H�8���H�4 H�5��H��H��R��H�;�H�5d���H�;�H�5T���H�;�H�5E����H�;�H�59����H�=5�6��H�;�H���H�5-�+��H�;1�H�o�H�5#���H�=�g��H�=H�i �T��H�=�H��H�=�H�B �5��H�=�H�' �"��H�=�H� ���H�=�H�� ���H�=�H�� ����H�=tH�� ����H�=hH�� ����H�=dH�� ���H�=^H�j ���H�=YH�O ���H�=CH�4 �w��[H� �f.�@��H���D��@��UH��H��SH���K��H��H�59H��H�����H��H��[]�ff.����ATH�=US�\��H�-� H�5�H��H��H�U����H��H�5�I���M��H�UH�5�H��H�����H��H�5�H�����H�� �H�5�H��H�H�5���� ��[L��]�H����H�5�A\������SH�=`���H�5aH�����H�5[H��H� H��H��$��H��H�5fH�����H� H�[���H��H���Psychlibyaml_version%stag tuple must be of length 2HandlerEmitterinitializestart_streamend_streamstart_documentend_documentscalarstart_sequenceend_sequencestart_mappingend_mappingaliascanonicalcanonical=indentationindentation=line_widthline_width=iowritePsych/emitterMarkexternal_encodingUTF-16LEUTF-16BESyntaxErrornewParserANYUTF8UTF16LEUTF16BEpsych/syntax_error_native_parsemarkreadpathemptyevent_locationPsych/parser,�����������L�$�L�4�D�D���mesgClassLoaderVisitorsVisitorToRubybuild_exceptionpath2classYAMLTree;�1����h�����h����������(��@H��Xx��p��������(���X������ 8��T����(���x������H��|��������8��0���|���h�,��x(��H��h����������(� ��<��X�l(��H��h�����X������8h����H����X���������H���	zRx�$����FJw�?:*3$"D����\���H@t
Axt��XHK����%HW����%HW����&HW���E�L���+E�e$��XE�M�D |DA<P��+A�M
A0Xd��eF�H�A �G�B
 DABA0����eF�H�A �G�B
 DABA0����qF�A�K �G�K
 DABA0�(��eF�H�A �G�B
 DABA((d��GE�A�N c
DAD(T���GE�A�N c
DAD0����{F�A�D �N�X
 AABAzRx�����$���0�����F�D�D �D0m
 AABE00���F�A�A �G�`
 AABEHP���{F�B�B �E(�A0�D8�J��
8A0A(B BBBCH���{F�B�B �B(�D0�D8�J��
8A0A(B BBBH\�4���F�B�E �E(�A0�D8�G�n�E�N�D�e
8A0A(B BBBFLH����F�B�B �B(�A0�K8�J�
8A0A(B BBBHH�4��8F�B�B �E(�A0�K8�I@A
8D0A(B BBBF�(�rE�e��E�L ��4��H��\��p��QH C
A��QH C
A�D�QH C
A�������������0(���F�D�D �G@�
 AABI\`�1E�k(x��E�H�D@�
AAEL�x��F�E�B �B(�A0�A8�J��
8A0A(B BBBI����L����$(��4E�G�D ^DA(P��F�H�A ��DU|0�ZE�TGNU��,�,�i �Up.oV @�����;� 
�T�i �i ���o`��
Q�l ��0�	���o���o����o�o���ohj � � � � � !! !0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&GA$3a1� �TGA$3p1113,�TGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113�-?TGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�,LS
GA*FORTIFY�-�TGA+GLIBCXX_ASSERTIONSGA+GLIBCXX_ASSERTIONS�,LSpsych.so-3.3.8-6.el8.x86_64.debug��e��7zXZ�ִF!t/����]?�E�h=��ڊ�2N�����l�W����q)����N���r���u,lt�	G2 1����P��_B(ԑif��s���]&�@������N�ʄU��LyPr>D)a��L�'W]�ky
m�E�4a=��Iz���\vpՎ�~WdUOSP��;`��B���<:S��o7�|b���ƴ��"[^h�z����>\8��U�B�ӷ���B�o�B��;�N��s{^t�h�$��Ҷ�I��4ހj��K*	�X�8=X&J]g���Nx�•hhO�����)<T~oOk�F����N͈��t�#�
�'�g��Xap
j�������9R�M��O"vwQ��u��ݨ9Ѓr����
��OJ��э�f��w�&ZV�����Aނ�ڥ�������l�>�
3¬v�_��dlW�F��H"u�i��i�6�_�c�/�(;#��ǃAgQҹj7�}pza���?B&'?�	��1��\Y���p�5�_E�.A�gWg���4f�:�����G&��>���%�To����J`0d�'�蜲&pNzx�=��G1��@x��2�vT7�1:ͬ�)�a�����;�ъ?�~?��i��ʴ�u��-R�a�/�_�&��٧a�k��Bp�"�^|)��
$���<"<i�O�J��z���u7:�<�7 ��e�%R?&��43������ńD
�y��:ظ��_�#�m�6�em��S<\.��p��@�5����LY��U��f|���Q/����S���*���]-�5�׸�O���v��g��_lO?�K����F�����{R0r�o=)/�e��M���!V��|u��L)��
[ޏt8R�?�kʀߙ��G�P�J~Wi�K�C������]H'g�{��3��ȕ��SMr��HQa�P�."�:7�����\n�󋶰�����/K�Ut˹�#v�?�����TsP]p���8;��˾���-�Q�s�az��T�rE���7_���)���nKr�ُ6�D8��;��)S%�,������!j���fm	j�n)�f�ӿ��j���ʌ�`�8��R�lo6���C �rDSI>�X�4����K6�қo(C�k�"�p��h�!���H��_'�:����dbeqC�����M^�g��St�r,
R5x�V�,�]�9�	�'�����g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o```(��
0��Q8���o�E���o��@T00�^B���h� � c� � �n`&`&�w,,�(}�T�T
��T�TI��V�V���X�X��(`(` ��i �i��i �i��i �i� �hj hj0��l �lP�p �o���p`�o|dt(�t��y"PK�Z#ruby/psych-5.1.2/gem.build_completenu�[���PKh.�Z`u{�@q@q"ruby/json-2.3.0/json/ext/parser.sonuȯ��ELF>P@�i@8	@�X�X P]P] P] �� �]�] �] ��888$$�X�X�X  S�td�X�X�X  P�td`U`U`U��Q�tdR�tdP]P] P] ��GNU]u4��U���{l��Q�#�W�C�@ �CFBE���|ŷ|!�qXg�u ;�s��,�����U���FI�����
�� �q�;��"\F3.���`~�, ��WF"~���UtEb X�b g�D�Lb __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeruby_xfreerb_gc_mark_mayberb_str_buf_newrb_ary_new_caparb_ary_pushrb_hash_foreachrb_ary_entryrb_funcallvrb_str_catrb_str_internrb_utf8_encodingrb_enc_associaterb_str_resize__stack_chk_failrb_enc_raiseruby_xrealloc2ruby_xmalloc2rb_check_typeddatarb_str_duprb_eTypeErrorrb_raiserb_data_typed_object_zallocruby_xmallocrb_keyword_given_prb_warnrb_id2symrb_hash_arefrb_string_valuerb_enc_getrb_ascii8bit_encodingrb_str_conv_encrb_empty_keyword_given_prb_free_tmp_bufferrb_error_arityrb_alloc_tmp_buffer_with_countrb_hash_newrb_eArgErrorrb_extract_keywordsrb_check_typerb_fix2intrb_check_hash_typerb_class_new_instancerb_ary_newrb_cstr2inumrb_str_new_cstrmemcpyrb_hash_asetrb_cstr_to_dblrb_float_newrb_cObjectrb_const_definedrb_const_get_atInit_parserrb_requirerb_define_modulerb_define_module_underrb_define_class_underrb_path2classrb_gc_register_mark_objectrb_define_alloc_funcrb_internrb_const_getrb_define_methodlibruby.so.2.7libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby27/lib64;ui	]���iii
tP] �X] p`] `] �] oI�] ��] @�]  �_ �_ �_ �_ "�_ 8�_ :�_ <`  ` (` 0` 8` @` 	H` 
P` X` `` 
h` p` x` �` �` �` �` �` �` �` �` �` �` �` �` �` �` �` �`  a !a #a $a % a &(a '0a (8a )@a *Ha +Pa ,Xa -`a .ha /pa 0xa 1�a 2�a 3�a 4�a 5�a 6�a 7�a 9�a ;�a <�a =�a >�a ?�a @�a A�a B��H��H�)J H��t��H����5BJ �%CJ ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1�������%}F D���%uF D���%mF D���%eF D���%]F D���%UF D���%MF D���%EF D���%=F D���%5F D���%-F D���%%F D���%F D���%F D���%
F D���%F D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%�E D���%}E D���%uE D���%mE D���%eE D���%]E D���%UE D���%ME D���%EE D���%=E D���%5E D���%-E D���%%E D���%E D���%E D���%
E D���%E D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D DH�=�,1��b���H�l$ ��H�=�,1�A���F���H�l$ ��H�=�,1��L$H�$�&���H�$�L$��1�H�=-�L$H�$����H��H�$�L$t��H�l$ H�D$(D���H�D$ H�D$(��f.�DH�=�C H��C H9�tH��A H��t	�����H�=�C H�5�C H)�H��H��H��?H�H�tH�}A H��t��fD�����=�C u+UH�=bA H��tH�=�> �I����d����]C ]������w�����H�
�5H���x=�WH���x0H��H	��WH���xH��H	��WH���xH��H	�ø���f.���H�G`H�@H��h�ff.�@��USH��H��H�o`H�}H��t�!���H������H��H��[]����ff.���SH��H�?����H�{ ���H�{8���H�{@���H�{H����H�{X[����f�AWI��AVAUI��ATUSH��1�H��8H�$dH�%(H�D$(1����H�$I�EL�{I9��9A�?"��1�KP��unI�}�S4��t�C0����@��uH�����tH�7���������I�O�HD�H�\$(dH3%(�H��8[]A\A]A^A_�DL�cXI�����t���Q���I�uI��H�����H�5�L��L������L������H������A���I�UH�5�A H��H�L$H�T$��%���H��I�E����f�H��M��M�fL9���A�F<"t4<\uM�fL9���A�F<u�F<��M���f�I�OI��L9�r��M9��OL�ɀ9\L�Iu�L9����A<f���<r��J<t�r<u��I�F�I9���H�yH�$���H�$I��%�H=��L�II�F�I9����y\�H�5�&���yu��H�yH�$���H�$L��I��
%�H��E��L�I��H��H��I	�I	�L�кH�t$$H�����D$$L��H����?�Ȁ�D$%L��A��?H��A�ʀ��?D�T$'�Ȁ�D$&�d@<\��<b��<"t|M��M9������L��L)�L��H������I�mH����M������@�H�5�$<nu�H��L�$�D���L�$M�yM���L���@�H�5�$��f��H�5z$��f��H�5n$�f�H��L��H��L�L$L)�H�$���H�$L�L$�A<f�����H�51$�p����H�5$�_�����H�5�#�G�����;���I�E�r���f��[���I�}M��H���������f�L�II��wFD�T$$�H�t$$��f��� �H�w��������fD�����fDI�����I�����vI��������D$$?�H�t$$���DI�NH9���A�F<@����0<	��I�NH9���A�F<@����0<	��I�NH9��tA�F<@����0<	��M�fL9��\A�F<@����0<	�.���M��1����f�H������@L��A��?�H��A�ʀH�t$$��D�T$%�D$$���fD<F�=�����a<�2���I�����D<F�B�����a<�7�����<F�O�����a<�D�����<F�������a<�����L����L�кH�t$$H�����D$$L��A��?H��A�ʀ��?D�T$&�Ȁ�D$%���DI�׽���1����I�׽����I�׽����I�׽���I�׽���I�׽�����H�?< ��M����H��"H��H��1����H�< ��M����H�#H��H��1��f���fDATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?��k�I�$I�D$I�L$�ff.���H��H�56 �\�H�8H��t	H���k�H�,8 H�5; H�81�����AUATUS�H��dH�%(H�D$1�H��4t&I��H�5�: H��I��1�1�L���;�H�����u#1�H�L$dH3%(��uIH��[]A\A]�@1�L����H��H��H�5: H�$���H�����t�L��L���������UH�$5 �hSH���� H�h H�����f�@H�@H�H�E`H��H��[]�ff.�@��AWI��H�5�4 AVAUI��ATA��H��USH��HdH�%(H�D$81����H�8��H�D$ H����H�D$(A�ƅ��E���$A����H�=�!1���I�H�l$ H�D$(H�T$H���zH����H�=9 L�d$0���L��H��H�5�8 I��H�D$0��H������R�C(dH�=�8 ��L��H��H�5�8 I��H�D$0�P�H��������C,H�=~8 �q�L��H��H�5G8 I��H�D$0��H��������C4H�=X8 �3�L��H��H�5	8 I��H�D$0���H�������CPH�="8 ��L��H��H�5�7 I��H�D$0��H�������L��H����H�C H�=�7 ��L��H��H�5�7 I��H�D$0�P�H������lH�C8H�=m7 �p�L��H��H�5F7 I��H�D$0��H������H�C@H�=&7 �1�L��H��H�57 I��H�D$0���H�������H�CHH�=�6 ���L��H��H�5�6 I��H�D$0��H������WH�CXL�d$L�����H��H����I�����I9����q�H��I�����H��L��H���H�H��L��H�l$��H�T$H��� uCH����H�CH�BH�CL��H�H�L$8dH3%(��H��H[]A\A]A^A_��H�BH�CH�B�f.�@��u
H������
H���u�H����H��H���b��X���D���E����H�l$ ���?H�D$(I�H�T$A��uqH�������H�|$(�G�H������H�C(dH�5�5 1�1��CPH�=�5 ��H�C8H�C H�C@H�CH�w���fDtnH�D$(H��t
H�|$(�����D�����H�5!5 H�=b5 1�1���H�C �%���H�E�ƒ�����������������t��H�|$(��x�I����H�=1I�$1����I�$H�l$ H�D$(H�T$�b���fDL��H���5��H�����HD�H�CX���DL��H���
�H�CH�6���@L��H����H�C@����@L��H�����H�C8���@L��H�����1�H���‰SP�S4������H������H�N1 H�5�H�81���DL��H���}�H����������C4�Z���f�L��H���U�H����������C,���L��H���5�I��H��������C(���Ic�I�l�@���(�H��������E������H�l$ H���`���H�|$ �3�H�T$ A�L$�H��H���4�E�����H��HD�H�D$(H�l$ ��uBE1����H�Ǿ���L���m��C(���H��/ H�5H�81�����8���A�̉�H�l$ ����������Ic�I�|�A���6���H���Z��-�H��H�D$ �)���AWAVAUATUSH��XdH�%(H�D$H1�H9�tMH��I��H��I��H�J��A�<n���Hc�H�>���H��DH��H9�u��E1�H�|$HdH3<%(L���mH��X[]A\A]A^A_Ã�0��	w��H�CH9��c�	H�5XH��������EA�N,����H��1 L�c	I�E�H�CH9��s����{n�i���H�CH9��\����{f�R���H�CH9��E����{i�;���H�CH9��.����{n�$���H�CH9������{i�
���H�CH9������{t�����H�CH9�����{y����A�V,���kH��0 L�cI�E�����H�CH9�������{a�����H�CH9�������{N�����A�F,���H��0 L�cI�E�m���f.�A�@I�V@�ljD$A�F(9���������H�=]0 H�5�1��7��H�CH9�����E1�{a�	���H�CH9�������{l��H�CH9�����{s����H�CH9������{e����I�EL�c���H�CH9������E1�{r�����H�CH9�������{u�����H�CH9��u������{e�g���I�EL�c�V���A�F(E�`I�V8H�D$ A9��B���:H�=K/ D��H�5�1��"�f�L��H��H��L���/�I��H��LD���H�CH9�����K��*tR��/t�����8
�����H��H9�u����f�H��H�XH9�������@<*t�</�����H��DH��H9��{����8*u���@H�CH9��c���E1�{u�Y���H�CH9��L����{l�B���H�CH9��5����{l�+���I�EL�c�������
�0�����������f�H���~1�1��-�I�EH9�tD�;{H��u<L�zL9�t3�B<"����<
t< ��L��L�zL9�u�f�I������H����1�1���I�EH9����;[��H��H�
L�zL9����r�F�<n�z��Hc�H�>���0@��	�t�H�D$(H�D$H�D$0H�D$D�D$H�L$H��L��H�D$(L���k���I��H���,I�~@H�t$(I�}�#H�t$0H�L$�H�5-, �0�I�D$�H�PH9�t%�H��,t>o��
t	�� �YH��H�PH9�u�I����D��
�X����L��L�zL9����J�A�<nw�H�5���Hc�H�>�����/���]��H��I��LD����fD</��<}��A�vP����I�~8I�v I�}��	H�t$0H�L$0�H�5;+ �6�H��tpL�d$0�H�D$0H�5:+ H�=�+ L����H�5|+ 1�1�H��H����H�����t-I�EL��H��H�5G+ H�D$0���I�Ef�I��M��LD��#�����	�������I���i@H�PH9�������@<*tC</t��D�:
�f���H��H9�u��d����H��H9��V����<*t�</�;���@H��H9��6����:*u���@�S����fDI��L9���A�?*u�I��L9���A�<*t�</u�@L������L���B���L�zL9����B<*t�</��I��L9�t|A�?
u��L�zL9�tk�B<*t></u_f�I��L9�tTA�?
u����@I��L9�t<A�<*t�</������I��L9�tA�?*u���@��
�����@���K���H��) �G�M����H�H��H��1���������fD�����fDI�^H9�������<-��<0���1I��<w6I��L9���A�<E��<e��<.�	��0<	v�fDI�^�<-�Y<0����1I��<v����f�A�$��0<	w	I��L9�u�I�n`M��H�EI)��e�H�����H�EH�U�
�I�F`H�EH�x��I���I�ELD��e���f�L�zL9������B<*tK</t���f�A�?
�����I��L9�u�����I��L9������A�<*t�</�^���I��L9��c���A�?*u�����	<�8����H����H�D$ H�D$H�D$(H�D$H�D$0H�D$H�L$H��L��L��A�F0���A�F0H�������H�H�H�AH9�����Q�� ����/����:�xH�pH9�������H�Q�n�YH�=p��Hc�H�>���0��	�����H�L$E��H��L��H�D$(��I��H���X���I�~8H�t$ H�T$(I�}�4H�t$0H�L$H�5V& H�T$8��?��I�G�L�xL9������P��,t5�G��
t	�� �KL��L�xL9�u����<
t��	<�����L��I��L9�������B< t�~�<"�����</u�L�zL9�������B<*t6</t���A�?
t�I��L9�u��x���I��L9��k���A�<*t�</t�I��L9��R���A�?*u��Ҁ�
��������8���H���p���H�pH9��#����@<*t4</t
�����>
t�H��H9�u����H��H9����<*t�</t�H��H9������>*u�����
�H���������/�6��}�V�����	������������,�$���I��M�f`L��H)�I�D$H�D$��L���.�I�D$I�T$�I�F`I�D$I�~HH�x�{���H�="$ 4I��I�FHH�D$��H�D$H;$ �"H�L$0��H�5�# L�d$0���I�E��I����l���L��I�^H9��`�������I�GH9�t�A�W��+t��-uI�GH9�t�A�W��0��	����H��H9������E������e�������.������0��	v�����fD��	���u����7����H�AH9��#����Q��*tB��/t�����8
�@���H��H9�u����H��H9�������*t�/����H��H9������8*u���@H��L�`L9�������@��0<	�v������@H��L�xL9�������@<E����<e�����<.�����I�GH9������A�W��0��	�����L�xL9�������@<E�y���<e�q���<.�`��0<	�����L��L�xL9�u��|���DL�cL9�����C<0����1<��������L�{L9�������C<0����1<�����F���H��L���s�H�}L��H}H�����L}I�n`�p�������c���L�xL9��l��@<*tD</t�[�A�?
�]���I��L9�u��@�I��L9��3�A�<*t�</�2���I��L9���A�?*u����V�����L���d���L���4���I���`�������I�~HH�L$0�H�5�  L�d$0����I�E������������I�E����H��L���i�H�T$I�|$H��I|$���H�D$ID$M�f`������0��	����K���H� H�5X  H�8������\���H� H�5:  H�8���H�  ����I������H�-�  �J��I�ع�H��H�H��1����H�-�  �"��I�ع���H�-�  ���L�C����<,�0����L���@��UH�5$ SH��dH�%(H�D$1�H�$�R��H�8�H�XH�hH�
�H�H9����3�V�n����Hc�H�>���0@��	wp�E1�H��H��H��H���<�H����H���D��
t��	��w3H��H�XH9����P�� t�/u�H�XH9�t�@<*tL</taH��H�~ ���I��H��H��H��1�����DH��H9�t��<*t�</t�@H��H9�t��;*u��؀;
�l���H��H9�u��@��H9������H�t$dH34%(H�$��H��[]�H��f�H��H9�������I���fDH�SH9��6����s@��*tI@��/tH�������:
t�H��H9�u�����H��H�ZH9�������R��*t�/t�H��@H��H9������:*u���@@��
�E���@���\���������H�# H�52H�81����f.���H��H�=����H�=�����H�5}H��H�� ����H�� H�5�H��H����H�=RH�� ���H�=QH�� ���H�=� H�� �8��H�=y �,��H�=} H�5���)��H�=j �����H�F�H�5�j��H�=K 1�H����H�5��N��H�=/ 1�H���H�5��2��H�=��V��H�= H���G��H��H�� ���H�=[�,��H�=� H�����H��H�� �n��H�=����H�=� H������H��H�y �D��H�=t����H�=xH�R ����H�=qH�7 ���H�=hH� ���H�=fH� ���H�=W���H�=WH�� �m��H�=NH�� �Z��H�=KH�� �G��H�=EH�� �4��H�=>H�n �!��H�=9H�S ���H�=,H�( ���H�=&H�
 ����H�=H� ����H�=H�� ����H�=H�� ���H�=�H�� ���H�=�H�� ���H�=�H�{ �v��H�g H�����H��H���

	"\uninitialized instancealready initialized instancenesting of %d is too deep%u: unexpected token at '%s'-Infinityjson/commonJSONExtJSON::ParserErrorJSON::NestingErrorinitializeparsesourceNaNMinusInfinityjson_creatable?json_createcreate_idcreate_additionschrmax_nestingallow_nansymbolize_namesobject_classarray_classdecimal_classmatchmatch_stringkey?deep_const_get[]=[]<<newBigDecimalJSON/Parser%u: incomplete unicode character escape sequence at '%s'%u: incomplete surrogate pair at '%s'Keyword flag set when calling rb_scan_args, but last entry is not a hashThe last argument is nil, treating as empty keywordsUsing the last argument as keyword parameters is deprecatedThe last argument is split into positional and keyword parametersPassing the keyword argument as the last hash parameter is deprecatedoptions :symbolize_names and :create_additions cannot be  used in conjunction����������������������������������������������������������������(������������������������������������������������������p���������8���������������������������������������������������������������������������@�����������������}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}���}�$�}�}�}�}�}�}�}�}�}�}�$�}���}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�}�$�}�}�}�}�$�}�}�}�}�}�}�}�}�}�}�}�}�$�}���}�}�}�}�}�}�}�}�$�}�}�}�}�}�}�}�$�}�}�}�}�}�$�}�}�}�}�}�}�$�*�������������������*��|�����������|��a��������������������������|�����|�������������|�����������|��������|������|�������|�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������P�������������������������������������P���@���������������������@���h���������������������������������������������������@���������@�������������������������@���������������������@���������������@�����������@�������������@�������������������������������������������������	�������

��������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������;�`����0�������`���������� ��8`��Tp������@������(P��P������(P�TzRx�$�����FJw�?:*3$"DX���\p��Vp���$����5E�A�G ^DA����>E�tH���
B�E�B �E(�A0�A8�Ip�
8A0A(B BBBF,����B�D�D �V
ABED(��=HX
E8`L���F�B�A �A(�I@R
(A ABBE$����QE�M�D uDAL����pF�L�B �E(�G0�A8�D�a
8A0A(B BBBH$zRx��������, ���HP���,B�B�B �B(�A0�A8�D��
8A0A(B BBBA(���VE�H�D0p
AAA����H�GNU��p`] oI�@ "1;~�
�GP] X] ���o`@	�
�` ���P	���oh���o�o�
���o�] ��� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�4GA$3a1��GGA$3p1094P�GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY��GGA+GLIBCXX_ASSERTIONSparser.so-2.7.8-141.el8.x86_64.debug�-�7zXZ�ִF!t/��w�]?�E�h=��ڊ�2N�aV��g1q[�}�����i�덧�E.��}����k����D/���/7�D��jnZos�d�όsTz�^E���RiЭ#���O��@�D?�QfNģcb�3�fw/X��1���nVr��z!_�
?B�%��>U(
�DBĜj;V�
Q{��	@%%��2�K ��ΰ#d��d�
^�d�������z��*��.��
U\c)��ԁ���_���k�m�]=�T�X�;p��Y
�BU/�-�֎�!>���f�� Mmy>G�2�K��sG�.pT*��r�䡯�W�?dt�&g�r��l
�g���j�bm&6����2\�Gۤ�ed:�p=�D0�-�	9��'IV�e�m�Cc	��g`��`�O.��� (.�{���p�}I	�J`���t������[صp�m����\:��W�AL}��9�Q��ZAD��Ƥ��␅ү�i���T�!��j���س$&�i�ԅ/�K=�?ܺ7}�F5�>#�F�}^#�����@V�p��m��K�S{��,T$�"Q%B��P�H��U����r�5��>,d����^����]qB��{v'�OcѬ��e��0���כ4n[��q�}��'�f���}�b\>+׺��maG ��$�n�U�����N��dp5O^ᾎ�1��2H�/d���p��AY�J��~T�@8#/��d�){Tq	����}����Ŝȳ��quG��"s_S$w>Sv ��
V8)0r�*ԓ�<K��ņY3R�f�L\2��t��'*U&b�㶽O!�#kkzd`O�d�e�b	��9#�:�pkmA�?�t�=E)&ɚ�l)�;qWJe�#g�+��+�pm'��A �ې1H����
�RO|Cd;i���������<z<G?̑���7����΄�H�����ُ�Ʉ9��Je�A5~y�f9?U$���o�*��R��� j+鄱�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���0@	@	�8���o�
�
�E���ohh@T��P^B���h��c���n���wPPV*}�G�G
��G�G�
 �`U`U���U�U���X�X �P] P]�X] X]�`] `]h ��] �]���_ �_8�` `���a �a�b b���b`bDDd,"pd�h1PKh.�Zó��@�@�%ruby/json-2.3.0/json/ext/generator.sonuȯ��ELF>�@�@8	@�v�v }} } � �}�} �} ��888$$hvhvhv  S�tdhvhvhv  P�td�h�h�h$$Q�tdR�td}} } ��GNU���/
!-�Ǹ�yp�7�JM�@$�MOPBE���|�qX�t�)��^� �Oc6���B��a�S��r�`U�Y;� �/�-�zgAPj"�{"H�"�'�U ��z�;���, 6��F"�%�l�u�� �� �� �0Z�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_funcallv__stack_chk_failrb_check_typeddataruby_xfreeruby_xmallocruby_xrealloc2ruby_xmalloc2rb_str_newrb_utf8_encodingrb_enc_associaterb_check_typerb_str_new_staticrb_hash_arefrb_hash_newrb_obj_classrb_class_namerb_hash_asetrb_str_duprb_str_catrb_str_concatrb_str_internrb_sym2idrb_ivar_setrb_attr_getrb_ary_entryrb_string_value_cstrrb_iv_getrb_str_substrrb_id2symrb_intern2rb_data_typed_object_zallocrb_obj_is_kind_ofrb_cHashrb_const_getmemcpyrb_enc_getrb_usascii_encodingrb_str_encoderb_enc_str_asciionly_prb_path2classrb_raiserb_keyword_given_prb_free_tmp_bufferrb_error_arityrb_empty_keyword_given_prb_string_value_ptrrb_float_valuerb_hash_foreachrb_cArrayrb_cStringrb_cFalseClassrb_cIntegerrb_cNilClassrb_cFloatrb_respond_torb_cTrueClassrb_cSymbolrb_eArgErrorrb_check_convert_typerb_convert_typerb_id2strInit_generatorrb_requirerb_define_modulerb_define_module_underrb_gc_register_mark_objectrb_cObjectrb_define_class_underrb_define_alloc_funcrb_define_aliasrb_internrb_define_methodrb_define_singleton_methodlibruby.so.2.7libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby27/lib64�ui	�����ii
�} � } P  }  } @} =fP} �#X} �!x � � � � � � !� )� 3� 5� A� B� C� E� L�  � (� 0� 8� @� 	H� 
P� X� `� 
h� p� x� �� �� �� �� �� �� �� �� �� Ȁ Ѐ ؀ �  � "� #�� $� %� &� '� ( � *(� +0� ,8� -@� .H� /P� 0X� 1`� 2h� 4p� 6x� 7�� 8�� 9�� :�� ;�� <�� =�� >�� ?�� @ȁ DЁ E؁ F� G� H� I�� J� K��H��H��g H��t��H����5�g �%�g ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=���������%
d D���%d D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%�c D���%}c D���%uc D���%mc D���%ec D���%]c D���%Uc D���%Mc D���%Ec D���%=c D���%5c D���%-c D���%%c D���%c D���%c D���%
c D���%c D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%�b D���%}b D���%ub D���%mb D���%eb D���%]b D���%Ub D���%Mb D���%Eb D���%=b D���%5b D���%-b D���%%b DH�=!b H�b H9�tH�~_ H��t	�����H�=�a H�5�a H)�H��H��H��?H�H�tH��_ H��t��fD�����=�a u+UH�=z_ H��tH�=�\ ����d�����a ]������w����H�7H��thv$H��tNH��u8�R�1��€��?v2�f�H��u��B�<A�������	Ѓ��1��DH�W@�B��H�1���?w�H���J�1����w�����tKv���t$���u/���v��f����u���w��D���w��f.�1����o����W��������`����fD��H�?��t
H�GH�H�t	H�WH�DH� t	H�W(H�DH�0t	H�W8H�DH�@t	H�WHH�DH�WPH��tHBH�WXH��tHBH�W`H��tHB�ff.�@��H��H��H�5&` �dH�%(H�D$1�H��` H��H�$����H�T$dH3%(uH����\���ff.����H��H�5�Z ���H���H��H�D�ff.���H��H�5�Z �l���H�@xH��H�D�ff.���H��H�5aZ �<����xqH�H��H�Ѓ��f.���H��H�51Z �����xpH�H��H�Ѓ��f.���H��H�5Z ����H�xhH�H��H�Ѓ��f���H��H�5�Y ���H�@hH��H�D�ff.�SH��H�H��t�n���H��[�e���D��SH��H�?H��t�K���H�{H��t�=���H�{ H��t�/���H�{0H��t�!���H�{@H��t����H�{PH��t���H�{XH��t�w���H�{`H��t�i���H��[���SH��H���HDؿ �F���f�@H�@H�[ÐATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?�����I�$I�D$I�L$�ff.�USH��H��H�wH��:���H��H�������J���H��H���o���H��H��[]�D��USH��H�5X H������H�߾H�H���D���H��~H���H���[]�ff.����USH��H�5�W H�����H�߾H�H����H�]xH���[]�@��USH��H�5pW H���G���H�߾H�����H��H�H�EhH��[]�fD��SH��H��H��dH�%(H�D$1��w����H�=(?�v���H��H������H�=�<H���W����H��H��H�5�[ H�$����H�T$dH3%(uH��[��1������ATUH��SH��dH�%(H�D$1�����H��H������H������H�5�[ 1�1�H�='\ I���o���L��H��H������H�=<���H��H��H�5F[ H�$�5����H�=6>H�����H��H��H���C���H�T$dH3%(uH��H��[]A\��b���f���AV1�I��1�AUATUSH��H��H�� H�54[ dH�%(H�D$1�I�����H��H������H�5S=H���5���L��H��H�5cZ I��H�$�w���H�����u_�H�=;��H��H���#�H�����H����L��H��H������H�L$dH3%(u2H�� []A\A]A^�L��H��L�,$H�5�Y L�t$�����Y�f���AT1�1�USH��H��H��H�5+Z dH�%(H�D$1�I����L��H��H�5yY H��H�$��H�����t5L��H��H�,$H�5WY �j�H�T$dH3%(uCH��[]A\Ð�H�=�9��H��H����H�����H������H��H���	������f���AWAVAUI��ATUSH��(dH�%(H�D$1��f���H�5�S L��H����H�5�X H��H����1�1�L��E1���I��H�D$H�$��H����I9���L�=�X L��L����1�1�L��H���o�H�H�D$�� �&H����H�<$H�T$I����L��H�����H�T$H�|$�I��H����H���w���L��H��H���9�I�$�� �\���I�D$I9��^���H�sH�;���H�=+X I���s�L��H��H����H�sH�{��H�=�W I���I�L��H��H�����H�s(H�{ �~�H�=�W I����L��H��H����H�s8H�{0�T�H�=�W I����L��H��H���w�H�sHH�{@�*�H�=cW I�����L��H��H���M�{pH�=2W M���I��H��A��H��L���%�{qH�=W M���I��H��A��H��L����L�chH�=�V �]�O�d$H��L��H�����L�cxH�=wV �:�O�d$H��L��H����H���H�=IV ��H�\H��H��H����H��H�L$dH3%(uFH��([]A\A]A^A_��H�P������H�=�6�g�H��H��U �G����s���H��P ����ff.�1�H�=�6�2�f���H��H�5�P ��H�x@H��tH�pHH����fDH���f.���H��H�5qP �L�H�x0H��tH�p8H���V�fDH���w������H��H�51P ��H�x H��tH�p(H����fDH���7������H��H�5�O ���H�xH��tH�pH�����fDH��������H��H�5�O ��H�8H��tH�pH�����H��������UH��SH��H��H��H��dH�%(H�D$1���H��t H�T$dH3%(H��u{H��[]�fDH��Q H��H�0�N�H��t)H��H��H�$H�5kT ��H���f�H�5iT H�=�T �-�H�5�S 1�1�H�����H���r����=�ff.�f�ATI��H��UH��SH�����H�{H��H{L����Hk[]A\�ff.�@ATH�5gN US�@�H���H���A���H�kXI��H���)H�EH���L���H�EH�U�,H�EH�k`H���H�EH�s H��t
H�S(H�����H������H�EH�U�:H�sH�EH��t	H�SH��uhH�kPH��tqH�E�H�����H�EH�U�,H�s@H�EH��t	H�SHH��uL��[]A\��H�{P���L��[]A\��H�{`���H�kPH��u���,�H��H�CP�H���x���H�k`�/�������H��H�CX����f�����H��H�C`���f.���H��2f������N��f������N�у�f��������N�F���DI���������SH��6H�� dH�%(H�D$1�H��I��H��?L��I��I1�I)��f�L��L��L�II��H��H��H�I)�B�I��A�A�H��u�H��yH�AA�-L��I��L��L9�v#f���0H��H��@�q�P�H9�w�M)�uH�D$dH3%(uH�� [�L��L���
������6�fDUH��SH��H��H�>��H�H��uH��[]�DH�uH��H�D$����H�D$H��[]�ff.�AWAVAUI��ATI��USH��H��8dH�%(H�D$(1��O�H�CH�SL���"H�C�6�H�����H9�t#�$�H9�tH�5�P L��1��i�I��I�mH��% A�<$��L�l$H����M�}I�m�\uL��D$$f�|$"L9���A�H�
�4I��f���A��L�H9��L�5/4L�d$"L�-S4D��L��A�pHc�������A����E��Kc�L�>��DH����M�eI�m�\uL��L�-�/E1��D$$f�t$"��E1ɉD$H����K�<4�<��P����5H�5�3��Hc�H�>��A�L�=�/L��L)���L��L��H������M�NM��L9�w�L��L)�tK�4H��H������H���s�H�CH�S�"H�CH�D$(dH3%(��H��8[]A\A]A^A_��L��A�L�=�.L)��k����K�4H��L�$�8���L�$�K����A�L�=�.�&���fDA�L�=�.����fDA�L�=�.���fDf�Ѓ��00A�f��A�Df�L$$L�|$"��A�T�D$'�T$&���@H��M�e���)���1�A�I��H�H��H��A�I��H�H��A�I��H�H��H��A�I��H�H��A�I��H�Ic�H�
2H+�H������H��(��H=��;H�B�H��_��H��"��H��\�i�H�5�-H������DL9��A�H�
�1I��f���A��L�H9������H�=Q-��H�5_0H��1��-�D1������1�����f�1�����f�1��
���f�A��I��H������H��M�}�������<"t|<\t`�T$�����H�
1f�4����I�I9��A�����������fDH�=,�<�H�5�/H��1��[�A�L�=S,���fDA�L�=>,���fD�H��H�$�G�H�CH�sH�$�H�CL9������f.�H�D$H�D$H�D$���@�H�5�+H���$����G����H�B�H����IcD�L�>����H�5�+H�����������H�5n+H�����������H�5E+H�����������H�5++H����������H�5+H���d�������H����wXH����L��H��H��H�$H��
f��(�����H�$��f��f��$��L��H�������/����I���(���H�=�*�[�H�5.H��1��z���1����ff.���ATI��UH��S��H��dH�%(H�D$1��7�H�$��������um�H�=�I H����H�5D H��H�����H��H�����H�sqL��H��H�����H����H�L$dH3%(u}H��[]A\�f�H�m��~�H�<$tH�����1������f.��[���x�H�$u!�H���K���H������>���fDH�m��~�����UH��SH��(H�t$H�\$H��dH�%(H�D$1���H�L$H��� u0H��H�\$��H�L$H��u-H�D$dH3%(u*H��([]�H�QH�\$H�L$H��t�H��H�������C�ATI��UH��H��SH��H���G�E�$$1�1�H�5H H���D$��E��u"�D$f(�fT
�-f.
�-wf.�zBH��H��H��[]A\���H��H�D$��H�D$H�=�G ��H�5=(H��1���H��H�D$�c�H�D$H�=�G ��H�5(H��1�������ATI��UH��S��H��dH�%(H�D$1���H�$��������um�H�=QG H����H�5�A H��H���g�H��H����H�spL��H��H�����H����H�L$dH3%(u}H��[]A\�f�H�m��~�H�<$tH�����1����Z�f.������x�H�$u!�H���K���H���[��>���fDH�m��~���P�SH��H��H�5:F 1�1����H��[H���]���ff.�f���ATI��U��SH��H��dH�%(H�D$1��g�H�$��������umA�H�=F L�����H�5A@ H��H����H����H���tfH�H��H����H����H�L$dH3%(��H��[]A\�M�$$��~�H�<$tH���H��1����
�f.�H��H�������{���x�H�$u!A�H���;���H�����.���DM�$$��~������AWAVAUATI��UH��SH��H��HL�z0L�*dH�%(H�D$81�H�B8L�rH�RhH�D$H�ExH��H�ExH��t	H9���H��H�$�&�H�CH�SH�5GH�$�{H�T$H�CH��L�d$ H�\$H�l$�D$(�V��L�exI�D$�H�ExM��tLH�|$��M��t;H��~6A��1��fD��D9�t M��t�L��L��H�߃����D9�u�D�H���{�H�CH�S�}H�CH�D$8dH3%(u[H��H[]A\A]A^A_�H�T$L��H��H�$�d�H�$M���d�����P�H�ExH�=}C H�5$H�P�1�H�Ux�����Z��f.���AUATI��UH��S��H��dH�%(H�D$1����H�$��������uk�H�=/C H����H�5p= H��H���E��H��I�����L��L��H��H��H������H�����H�L$dH3%(uyH��[]A\A]�H�m��~�H�<$tH���x���1����:��f.������x�H�$u!�H���M���H���;���@���fDH�m��~���0����ATI��U��H��S����H��H������H��L��[��]A\���f.�AWAVAUI��H��ATUH��SH��XH�B@L�zH�T$H�D$8H�BHH�t$ H�D$@H�H�RhH�D$H�APH�xH�@H�|$HH�yxH�D$H�wH�|$0H�t$(H�qxH��t	H9����H����H�EH�U�[H�EH�|$8tH�|$@�}�D$01�D�`�QDH����H9�}RH�|$t���H�|$��H��L��H�����H�T$H�t$ H��H���tI�E�� u�I�EH9�|�H�D$H�T$0H�|$8H�PxtOH�|$@��L�l$M��t9H�D$0H��~/A��1��
D��A9�tM��t�L��L��H����B�A9�u�H����H�EH�U�]H�EH��X[]A\A]A^A_�H�|$(�,���E1���A��E9�����M��t�H�t$L��H�������@H�T$H�t$HH��������H�T$@H�t$8H����L�l$M���#����W���H�T$@H�t$8H�����l���H���u�H�D$H�=�? H�5B H�PxH�T$H��H�Px1�����f.�AUI��ATI��UH��SH��H��dH�%(H�D$1���������؃����:H���`���gH�CH��; H9��H��; H9��H��; H9�vH����H����H��������H����H������������
��H��L���>����E@H������d���H��tuH���U���H�e; H��J���DH��H��L��L���W���H�D$dH3%(��H��[]A\A]��H�); H�����H��L��H�����H��: H������H��: H9�@H�5�= H�������t=H��H��L�,$H�5�= �B���H��H�����H��L������K���f�H�5�= H��1�1��
���H��H���M��H�uqH��L���~�����f�H��H��L��L���O�����f.��H�5�L�����������H�5�L���������H��9 H�������H�5�L��������H��9 H�����H��9 H�����H�upH��L���Q��E�������ATI��USH����H��H�5�6 H�����H��L��H��H������[H��]A\�r��f���USH��H�����H��H�5�6 H���|��H��H��[]�f���ATI��1�U��H��1�SH��H�5�; dH�%(H�D$1��l��H���D��H�$��tx��xduJA��H�����H�=�; L����H��H������H�L$dH3%(upH��[]A\�@M�$$��~�H�<$tH���P���1������f������x�H�$u!A�H���v���H������i���DM�$$��~�������AUATI��UH��S��H��dH�%(H�D$1��U��H�$��������uk�H�=�: H����H�505 H��H�����H��I����L��L��H��H��H�����H�����H�L$dH3%(uyH��[]A\A]�H�m��~�H�<$tH���8���1������f.��{����x�H�$u!�H���M���H������@���fDH�m��~��������UH��S��H��dH�%(H�D$1��<��H�$��������uj�H�=�9 H����H�54 H��H������H�����H�5CH��H���=�H�����H�L$dH3%(upH��[]�fDH�m��~�H�<$tH��� ���1�������f��k����x�H�$u!�H���V���H�������I���fDH�m��~��������UH��S��H��dH�%(H�D$1��,��H�$��������uj�H�=�8 H����H�53 H��H������H�����H�58H��H���-�H�����H�L$dH3%(upH��[]�fDH�m��~�H�<$tH������1�������f��[����x�H�$u!�H���V���H�������I���fDH�m��~��������UH��S��H��dH�%(H�D$1����H�$��������uj�H�=�7 H���~�H�5�1 H��H������H���t��H�5.H��H����H���u��H�L$dH3%(upH��[]�fDH�m��~�H�<$tH������1�������f��K����x�H�$u!�H���V���H�������I���fDH�m��~�����H��t3UH��SH��H��H������H��H��H�����H��[]�D1�H���f���ATUH��H�5�0 S�����H��I���9��H�uH��% u;H��I�|$@H���H��u5H��t�}��I�D$@[�]A\�f.�H�]I�|$@H��t�H��t�H��H�E% H�}H��tH�}H������I�\$HI�D$@�[]A\�fD��ATUH��H�5/0 S�	���H��I���y��H�uH��% u;H��I�|$0H���H��u5H��t���I�D$0[�]A\�f.�H�]I�|$0H��t�H��t���H�E% H�}H��tH�}H���Z���I�\$8I�D$0�[]A\�fD��ATUH��H�5o/ S�I���H��I�����H�uH��% u;H��I�|$ H���H��u5H��t���I�D$ I�D$([�]A\ÐH�]I�|$ H��t�H��t����H�E% H�}H��tH�}H�����I�\$(I�D$ �[]A\�fD��ATUH��H�5�. S����H��I�����H�uH��% u;H��I�|$H���H��u5H��t�=��I�D$I�D$[�]A\ÐH�]I�|$H��t�H��t���H�E% H�}H��tH�}H������I�\$I�D$�[]A\�fD��ATUH��H�5�- S�����H��I���9��H�uH��% u;H��I�<$H���H��u5H��t�~��I�$I�D$[�]A\�H�]I�<$H��t�H��t�I��H�E% H�}H��tH�}H������I�\$I�$�[]A\����ATI��USH9��$H��H�5"- ���H��H�5- H������H��H�����oE�oHM�oP U �oX0]0�o`@e@�ohPmP�op`u`�oxp}pH���H���H�sH�;�^���H�sH�{H�E�M���H�s(H�{ H�E�<���H�s8H�{0H�E �+���H�{@H�sHH�E0����H�{PH�E@H��tH�wH����H�EPH�{XH��tH�wH���v�H�EXH�{`H��tH�wH���\�H�E`L��[]A\�H��. H�5MH�81��������AVAUI��ATI��H�5�+ USH��dH�%(H�D$1����H�
�L��H�H�����H��H����H�=�0 �'��H��H�����I��H�������H�=�0 ���H��H������I��H������7H�=�0 ����H��H�����I��H�������H�=J0 ���H��H�����I��H������kH�=,0 ���H��H���d��I��H������H�=�/ I���f��L��H��H�EhdH�5�/ I��H�$���H�������H�=e/ �(��L��H��H�ExH�5^/ I��H�$�b��H������&H�=/ ����L��H��H�5(/ I��H�$�,��H�������H�=9/ ���H��H�����H�=/ H������Ep���H��H���h��H�����L���EqH�T$dH3%(��H��[]A\A]A^�f.��H������M�4$A�� �bM�t$I�|$I�v�/���L�uH�E����f�L��H������I��H������6����H��I����M������L��������L��H�����I��H������&H�Ex���f�L��H���u��I��H�������H�Eh�E���f��H�����M�4$A�� �bM�t$I�|$I�v�O���L�u8H�E0���f��H������M�4$A�� �M�t$I�|$I�v����L�uHH�E@�W���f��H�����M�4$A�� ��M�t$I�|$I�v����L�u(H�E ��f��H���S��M�4$A�� tNM�t$I�|$I�v���L�uH�E���fDH�
9H�-�L�����H������DI��I�|$A��I�v�DI��I�|$A��I�v�V���f.�I��I�|$A��I�v���f.�I��I�|$A��I�v���f.�I��I�|$A��I�v���f.��H��I��P��L�uh�c�����H��I��0��L�ux����B��f���ATI��H�5�& U��H��SH��H��dH�%(H�D$1��m��H�@hdHǀ��e��H�$��tI����tM�$$��uuI��tL��H���e���H�L$dH3%(H��unH��[]A\�f�������x6H�$t!M�$$��u'H��t�H���k���f�H��t�H���S���H�<$tH���B���1�������?��ff.�@��AWAVI��AUATUSH��H��HL�zH�BH�t$ H�*I�w`I�XH�D$I�I�O0M�_8M�gH�WM�oxH�D$H�FH�D$(H�FH�D$�C��~	H����H��t	M���OH�|$tKM��~FE��H�\$0E1�L��E����A��E9�tH��t�H�t$H��H��A���6��E9�u�H�\$0H�%' H�
A����A���vD������I����A����I�VH9�t&H�
3' H9��H�5�) L��1�1����I�ƾL�����H�t$L��L��H���\�H�|$u|H�L$ H�t$L��H���?��CH��H1�[]A\A]A^A_�f.�I������h���I����M���U���H�i& H��J����L��H��H���"�����DH�T$H�t$(H������m���H�R& H9
�5����L���X��H������I�������H�wH��L�\$8H�L$0���L�\$8H�L$0����H��% H����@H��% H����f�H�q% H����H��% H��{���f���SH�=�	H��dH�%(H�D$1����H�=	����H�5i	H��H��( ����H�5W	H������H�=�H�d( �g��H�=?	H�)( �T��H�=( H�( �A��H�=( �5��H��$ H�=( H�5lH����H�5a��H��H��' �"��H�=�' �H����H�5��3��H�=�' �����H�P���H�5�����H�=�' �H���H�5�����H�=�' 1�H���H�5����H�=r' �H���H�5����H�=S' 1�H����H�5z�~��H�=7' �H���H�5a�_��H�=' 1�H���H�5L�C��H�=�& �H���H�5:�$��H�=�& 1�H����H�5,���H�=�& �H���H�5���H�=�& 1�H�)��H�5����H�=�& �H���H�5����H�=g& 1�H����H�5����H�=K& �H���H�5��s���H�=,& 1�H�c��H�5��W���H�=& 1�H���H�5��;���H�=�% 1�H����H�5�����H�=�% 1�H���H�5�����H�=�% �H�@��H�5v���H�=�% 1�H���H�5a����H�=�% �H����H�5X���H�=b% �H���H�5P���H�=C% H�=H�5@�`���H�=)% 1�H�p��H�5��T���H�=
% H��H�5��*���H�=�$ �H�g��H�5�����H�=�$ �H�8��H�5����H�=�$ �H�9�H�5��ݿ��H�=�$ H�5����H�5�H��H�q$ ���������H�(�H�5�H��虿��H�=J$ H�5��������H���H�5lH���k���H�=$ H�5^�x��������H���H�5>H���=���H�=�# H�56�J��������H����H�5H������H�=�# H�5���������H���H�5�H�����H�=�# H�5�����H����H�5�H��H�a# �̾��H�=U# �����H�9��H�5�荾��H�=6# �����H���H�5��n���H�=# 1�H����H�5��R���H�=�" H�5��_����H���H�5wH��H��" ����H�=�" H�5f�*��������H���H�5�H�����H�=�" H�5B��������H���H�5�H�����H�=r" H�5�ξ�������H�B�H�5�H��蓽��H�=藼��H�=yH�" 脼��H�=�H��! �q���H�=BH��! �^���H�=>H��! �K���H�=8H��! �8���H�=@H�z! �%���H�=BH�_! ����H�=BH�D! ���H�=fH�)! ���H�=]H�! �ٻ��H�=IH��  �ƻ��H�=CH��  賻��H�=1H��  蠻��H�=H��  荻��H�=H��  �z���H�=H�|  �g���H�=�H�a  �T���H�=H�F  �A���H�=��5���H�=�H�  �"���H�=�H�  ����H�=�����H�=�����H�=�H�� �O���H�=�H�$�Ϻ��H�=�H��耻��H��H��H��轺��H�=~H�g  蚺��H�=t莺��H�=o肺��H�� H�D$dH3%(uH��[������H��H���C*@instance_variables0123456789abcdef\n\r\t\f\b\\\"JSON::GeneratorError%u: %li not allowed in JSONnesting of %ld is too deepnullfalsetrueunallocated JSON::Stateto_hashHashto_hjson/commonExtGeneratorJSON::NestingErrorfrom_stateinitializeinitialize_copyindentindent=spacespace=space_beforespace_before=object_nlobject_nl=array_nlarray_nl=max_nestingmax_nesting=check_circular?allow_nan?ascii_only?depthdepth=buffer_initial_lengthbuffer_initial_length=configuremerge[][]=generateGeneratorMethodsObjectto_jsonArrayIntegerFloatStringincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassto_snewallow_nanascii_onlyunpackcreate_idextendkey?__send__respond_to?matchkeysduputf-8findEncodingencodingencodeSAFE_STATE_PROTOTYPEJSON/Generator/Statepartial character in source, but hit endsource sequence is illegal/malformed utf-8source sequence is illegal/malformed utf80�� ��������@�����h��P�������x�����������I�����h��0123456789�0� � �� �� ���������������;$CX���@H���h���ȸ���X����������������H���x���$����<غ��T����px���������8����x���ȼ��(���PH���xؽ����������������H���������������H���������<��\�����������������((��\���8���������<���p����������	���L	��x	����	���
���0
���X
����
��
(��
8� H�L��xH������ ��XH�������
��8
x�
zRx�$����FJw�?:*3$"Dذ���\`����p,���������TH F
A���%HW����"HT����&HW�4���&HWL���'HXd���"HT0|���A�UL�����E�vh��/A�m,������B�D�D �V
ABE$�X���;A�A�G lDA$�p���DE�A�N hFA$����<E�A�N `FA$,����:E�A�N cAA Tȸ���E�O t
AA0x4����F�A�D �D0�
 DABA@��F�I�B �A(�A0�JP�
0A(A BBBD0������F�E�A �J0t
 AABBH$8���
F�B�B �E(�A0�A8�D`�
8A0A(B BBBHp������������6H]
KD�$���9H]
KD�D���9H]
KD�d���9H]
KD����9H\
LD(8�����E�D�M0q
AAG(dH���1B�G�D �`AB8�\����B�H�A ��
ABHM
ABH�����K ����K�K0�
AD0����EA�D�G0T
AAFZAAH8����B�B�B �E(�I0�A8�Gp
8A0A(B BBBH0�h�� F�D�D �F0�
 AABJ(�T���A�D�D@Y
AAD0�����B�D�G �G0N
 GABE0T�� F�D�D �F0�
 AABJL@��#A�Z0hT��0F�D�C �G0�
 AABDL�P���B�B�B �B(�D0�D8�G�#
8A0A(B BBBD8���� F�B�D �D(�F@�
(A ABBD((���6F�D�F �\CBLT���vB�B�B �H(�A0�D8�D��
8A0A(B BBBA8�����B�E�D �D(�G@+
(A ABBI(�|��>B�D�A �lDB$���.E�A�G [DA04���F�F�H �D0w
 AABE8hd�� F�B�D �D(�F@�
(A ABBD(�H��E�D�F0�
AAG(�,��E�D�F0�
AAG(���E�D�F0�
AAG((	���>F�D�O WAAF��4T	���F�A�K �K
FBKFAB4�	����F�A�K �K
FBKFAB4�	���F�A�K �T
FBBFAB4�	����F�A�K �T
FBBFAB44
(���F�A�K �R
FBDDAB,l
���XF�D�A �1
ABA@�
���F�B�E �K(�A0�D@
0A(A BBBK0�
��F�K�F �G0t
 AABJL���F�B�E �B(�A0�A8�G�q
8C0A(B BBBK d���E�K �
AAGNU�� P  } =f�#�!�����
�b} } ���o`0
�
� � �	���o����o�o8���o�}  0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������GA$3a1��bGA$3p1094� �bGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY� z!GA+GLIBCXX_ASSERTIONSgenerator.so-2.7.8-141.el8.x86_64.debugk����7zXZ�ִF!t/��]?�E�h=��ڊ�2N��������oة��!�3;�zA"���1�U��3��c��y��Q�_D����r���B�{$r@o.�C��r�kH|�j�����cҐ��#lUL�[�X˃����_���"�Y ��'}����JMګU
D�����3.��W]���j�D5��BF
�j�2r�0�Z8�G:��ؤb7Bh�q��L���6H�����W��8ֶ$v@2����$�+�>����G4q1��H�l�v��C'Ym���ݴt�-Y����ֽY������v�'���ZX�a��F��=�e���S?���LH�a?�z�]��2J��kv�����?A�#����r|���u�w�����-?�z�
�}�h%c7������Ą�R�K�:O�C�(�iݣ�R��+��x3y1,�ɉ�5�t��@�akjT��Q�=Ġr����GY�x�%�ew�I�N�"��V�d�T44Rm�gE�5�x������Swg�q�<�+�n��8#J!�A�H洡0^ܤv�YN�b�8�r��(2�Vv�$˔mͻ�1��G@�Al:k�Sc�W|dz�k�7wr5� ��w�8��.d�n$�9�4�A��B��?
·ÑY�ks3k�V�P6�B�ٳ�뙚�b�M��Tҟ���!�>�<=�N�n��$b��Z�wN��i{a�6�	>�Ӫ���������E��������֐�QI�:(N�J,�0w����X�#�p�?A���\=O��fT8*��j�� ����aK�ΣȆ]��>���de��e,�=��8@Ҿ-m�Om��b���۾�
�Fϟ8�|��M�0��
Ls�go�y#�-ӝ�]�'�>���&/^!���c�����y�ǺI����E�։�p�̽�s'��G��+�
a�g�^Xn&q��>[���¹“j�i�W�,�6C�֏O<��AU�-]	��F0O�گ)ł$���Y�v硒A�N�yN3�W��c)ioN�H=̷�~��/.�3O%��;��;t�l�N�)	�G8���;A�(RMY&�5��%��a�p� ;;r�c�T4C�ը��ZM���X\�(����L�,�=�9-���b�z�H�U�P��䤚,m�2g
�4�~��95�@�7�訧���V�w|	��{&
�k^�}bo>�˴� Q�����M 8G4�y���w��l}��v����x�o	Q�]����=^�;T����E�JU*�/�$�#����iH�r.�/���A0��^h7����n�&[�%ƙۻ�[�<�._m��͗��-����.�(Oq���A�H��᫠�I�l���L
�F��Y�Kf\*R�����S«�H�rY�G���!>7J0O�$"���]1!}n���t��/���f H�.��`��v�&���+�t^L�Kdz7K%�	r
��?g��6���Š;^���R�ă�-�h�pW�'�'�T���-����%c�1M\"F�(G\�H�A��u���}&��3�Vև��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���00
0
8���o88�E���o��@T  �^B�h��c�n�w��C}�b�b
�cc� ��h�h$��j�j��hvhv �} }�} }� }  }h ��} �}��x xx�� ��� ���`�D
L�,x�\Ԋ+PKi.�Z/��ss#ruby/io-console-0.5.6/io/console.sonuȯ��ELF>�#@�k@8	@(Y(Y �\�\ �\ x� �]�] �] ��888$$YYY  S�tdYYY  P�td@M@M@M��Q�tdR�td�\�\ �\ GNU0��Н�P�B��z=����W�H!@WY[BE���|�qX/D�o������O���� @�kx �1�X��;�k�CON����U�o�� �f5w��Q������"�"h�^�a�	�3�{"�����a, ��[F"�r�0�$hb .�b +hb @�Dp� I�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddatacfmakerawrb_data_typed_object_zallocrb_funcallvrb_default_rsrb_io_writerb_cIOrb_cFilerb_const_definedrb_cloexec_openrb_update_max_fdrb_class_new_instancerb_io_taint_checkrb_io_check_closedrb_str_new_staticrb_obj_freezerb_const_setrb_const_getrb_const_removerb_id2symrb_check_typerb_io_closerb_check_idrb_error_arity__stack_chk_fail__errno_locationtcsetattrrb_num2uintrb_sprintfrb_sys_failtcgetattrtcflushrb_string_value_cstrrb_intern2rb_io_get_write_iorb_ensurerb_stdinrb_stderrrb_str_catfrb_io_flushrb_convert_typerb_eArgErrorrb_raisestrlenrb_io_getbyterb_ary_newrb_ary_pushrb_str_newrb_str_new_cstrioctlrb_assoc_newrb_fix2intrb_num2intrb_Arrayrb_ary_detransientrb_protectrb_syserr_failrb_jump_tagrb_io_getsrb_yieldrb_keyword_given_prb_free_tmp_bufferrb_hash_arefrb_funcallv_publicrb_empty_keyword_given_prb_extract_keywordsrb_check_hash_typerb_warnrb_ary_resizerb_ary_ptr_use_startrb_ary_ptr_use_endrb_obj_classInitVM_consolerb_f_notimplementrb_define_module_underrb_cObjectrb_define_class_underrb_define_alloc_funcrb_undef_methodInit_consolerb_internrb_define_methodrb_define_singleton_methodlibruby.so.2.7libm.so.6libc.so.6_edata__bss_startGLIBC_2.4GLIBC_2.2.5/opt/alt/ruby27/lib64ii
7ui	A�\ �$�\ `$] ]  ] �K@] �Kx_ �_ 	�_ 
�_ �_ !�_ )�_ +�_ 5�_ >�_ L�_ N�_ O�_ P�_ V`  ` (` 0` 8` @` H` P` 
X` `` h` p` x` �` �` �` �` �` �` �` �` �` �` �` �` �` �` �`  �` "a #a $a %a & a '(a (0a *8a ,@a -Ha .Pa /Xa 0`a 1ha 2pa 3xa 4�a 6�a 7�a 8�a 9�a :�a ;�a <�a =�a ?�a @�a A�a B�a C�a Z�a D�a Eb Fb Gb Hb I b J(b K0b M8b P@b QHb RPb SXb T`b U��H��H�QE H��t��H����5�E �%�E ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q�������%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%�@ D���%}@ D���%u@ D���%m@ D���%e@ D���%]@ D���%U@ D���%M@ D���%E@ D���%=@ D���%5@ D���%-@ D���%%@ D���%@ D���%@ D���%
@ D���%@ D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%�? D���%}? D���%u? D���%m? D���%e? D���%]? D���%U? D���%M? D���%E? D���%=? D���%5? D���%-? D���%%? D���%? D���%? D���%
? D���%? D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> DH�=�(1����H�\$�H�=�(1��j����H�=�(1��W����f�H�=q> H�j> H9�tH�v; H��t	�����H�=A> H�5:> H)�H��H��H��?H�H�tH�u; H��t��fD�����=�= u+UH�=b; H��tH�=~8 �����d�����= ]������w������H�"�O{�H	�����g�����H��H�wH�� ff.�@��UH��H�518 SH��H������H�����t�HxH��H��[]�D�`�H��H��[]�f.���ATI��H�5�7 UH��S���L��H�5�7 H���t����o�oHK�oP S H�P0H�S0�@8�C8H��[]A\�D��UH��SH��H���[����C��ωCH��t.�U��x�S�U��x�S�U��t���CH�H	H��[]����H�%7 �<�K���ff.�SH�7 H��<�+���foH�P foKJfoS R H�K0H�J0�K8�J8[�ff.�����H��H�5(< H�׉����fD��H�5
< 1�1��|���ff.����H��8 H�0�m���ff.�f���AWAVAUA��ATUSH��8dH�%(H�D$(1����<I��H���oE1�H��8 H9u
H��8 H�H�5w; H���������M���1ҾH�=�"���Hc�����H�l-�d���H��H�t$�H�l$H�D$�d���H��H������L�xL�������H�=!"�<���H������A�OH��H��I�GH�5�: ����M���H�L$(dH3%(H���LH��8[]A\A]A^A_�f.�H�5�: H������H�ŨuH�����ubH�5k: H���S���M�������H�=K: �^���A�����I9�������n���fDL�&�L��������������u�H�EH��t��x�t�M���.���H�=�9 ��I9�u-A��u'H�����H�5�9 H��������fDI�H�|$H�D$���H��t)A��I��H��L��D��H������H������H�99 �փ�1����������U��SH��H���
����8u&1�H�ډ������u�H���[]�f.�H��1�[]����SH��H���`���H�=" �p1�����H��H���d���H��[�ff.�@��ATI��UH��H��S����L��H�������SH�=��p1�����H��H������H��[]A\����UH��H�5�2 SH��H��H��XdH�%(H�D$H1����H���o)$�oH)L$�oP )T$ H�P0H�T$0�@8�D$8����H�XH�������{H�������tH�L$HdH3%(H��uH��X[]�1�����L���ff.����USH��XdH�%(H�D$H1�H���^���H�XH���b����{H���G�����u&H�=D7 H����H�T$HdH3%(uH��X[]�1����������SH��PdH�%(H�D$H1���H�XH������{H��������u)�D$��H��H�H�Ѓ�H�T$HdH3%(u
H��P[�1�����b�f���AUI��ATUH��SH��XdH�%(H�D$H1�I���t���H�XH���x����[L����[�����uP�D$I�����u:��D$L����)�����t.H�T$HdH3%(H��u"H��X[]A\A]����x�D$��1�����ff.���ATUH��SH��PdH�%(H�D$H1�I�����H�XH�����[L��������u@L���H�"�L${�H	$�|�����tH�T$HdH3%(H��uH��P[]A\�1��U���� ���UH��SH���N�H�XH���R�{1��H��u
H��H��[]�1�����SH��dH�%(H�D$1�H�H��tH��H��H�$��H�4$H����H�D$dH3%(uH��[���ff.��H�5�4 SH��H��tH��1�1�[�c��H�=���H��1�1�H��[H�}4 �8����AUATA��USH������H��I��H����H��H9�tHA��uH��L������H��H�u���H��H�=[
�V�H��t0H��H��[]A\A]�>���fDH�1 H9u�H�-1 H�(�H���[]A\A]ú1���@AUI��ATI��U��SH��H��XdH�%(H�D$H1���1���uDH�C0�oL���oK�oS H�D$0�C8H��)$H��)L$)T$ �D$8A��H�މ��>�����H�T$HdH3%(��uH��X[]A\A]����f.���S��H������H�=�1ƃ�S)�1��}�H��[H�����AUATI��H�=�U��1�S��H���a�I�Ņ�t&����L����H�5D1��)ƒ�A1����t$�؉�H�5$L����1Ã�C��)�1��l�L��L���A�H��L��[]A\A]�O�ff.�@��SH��H��H�
�H����M�H��� t%H����H��u3H��H�PH�0H��[���@H�xuH�@ H��[H�PH�0�e���H�6/ H�5zH�81���ff.�f���AVAUATI��USH��dH�%(H�D$1�H����@��t.�H�L$dH3%(��H��[]A\A]A^��H�����tɋ����u�H��D�n�A�H�hH���E�L�uPM���%L�3L�����}L��H���_�H���u<�E���p���H�H����H�޿H���3�H����K����
�E1�L����H��7�-���L����H=�������1�H��DL���p�H��t*H���2���;t=�PЃ�	w%��L��\P��F�H��u�H��H��������E��t#A9�uE1�멐Hc�H��1�H�t6�^��@Hc�H��D$H�t6�D�H�|$����H�;�k�L��H����L�����������ff.���UH��SH����H�XH�����H�{PH��t��H�XH�����{�����u
H��H��[]�1��f�fD��UH��SH���^�H�XH���b�H�{PH��t�D�H�XH���H��{�H�5��t�H��x
H��H��[]�1���ff.���SH��dH�%(H�D$1����H�XH�����H�{PH��t���H�XH������{1�H��T����u.�t$�<$H�t6H�|?���H�L$dH3%(u
H��[�1��a��,�ff.����ATUH��S�P�H�XH���T�H�{PD�cH��u�D���:���uJH��[]A\�fD��H�XH�����[���t�A9�t�1�D������u��������t�1����D��SH��H����t �����t
��H�����H��[������f���SH��H����t ����t��H�߉��K���H��[�fD�����f���SH��H����t�k���uH��[�f�����t��H��1��+���H��[�fD��SH��H����t�+���uH��[�f��[���t��H��1����H��[�fD��SH��H����t�����uH��[�f�����t��H��1������H��[�@��SH��H����t����uH��[�f������t��H��1҉��i���H��[�@��USH����wVH��uH��H��H������H�5?, 1�1�H�����H��H��tH���J���H��H�() H��H�0���H��H��[]ú1���ff.�@��AWAVAUI��ATUSH��H��(dH�%(H�D$1���L�`L����H����H��H��� ttH��H����H���v��MI�|$PH�KA�A�H�SH����H�T$H�$�2�H�XH���6��[H�T$H�$�[�H�kH��t
H������H�[ H�H�SA�A�H��uL�{L�sI�|$PH��u�A�\$H�D$1�H��tH��H�$�P�H�$f�D$1�H��tH���7�f�D$1�I��tL���"�f�D$1�I��tL���
�f�D$H�T$1��T������ubH�t$dH34%(L��uVH��([]A\A]A^A_��H���p�H� ����H���
���H�K' H��H�5�H�81���1������AWAVAUATM��UH��SH��H��H�t$H�T$dH�%(H��$�1��D$,������L�xL����E�wA�����I�PE���D$H�����D$,����H��E1��>�H�XH���B�A���tD9k��E���	�|$,���MH��$�dH3%(H���%H�ĸ[]A\A]A^A_ÐH�t$0L��H��D���
��������D$,E��E�w�D$I�PH��tE����E��L�xL����E�wA����&���E9�����H�t$lL��H��D������LH�t$H�|$H�T$,�D$,A���H��H���/�H�XH���3�A������f�H�{PH����{D9�����H�t$l�������������D$,������D$f��|$1����D���t����fDH�t$H�|$H�T$,E1��y�H��H����H�XH����A����_���D9k�L���H�t$0D���Q����7����T��D$,������D$E���m����(�����+�A�����E�w��D$�h���fD��A�������D$���f.����H�XH������{D9������������f���H�5$ E1�H�
�H��������H�5�# E1�H�
��H�������H�5�# E1�H�
��H�����H��tjATI��U��SH��@��t�s�9�w/[]A\�f.�@��uH�����t�����
t/�H�a# H��L��H�5�
H�81����f�1��D�S�랐��SH��
H��H����d���H�=�
��1��4�H��H���y�H��[�@��S�H�����H�ߺ���H��[����SH�G
H��H�����H�=;
��1����H��H���	�H��[�@AVA��AUATA��UH��SH��H�� dH�%(H�D$1�H�D$��H�D$A����E��~qIc�H�\�����H���������������H�\$H����H�D$E����H��t
H�|$�y�E9�}D��1�D���7���FH�\$H����H�=�$ ��H��H���$�H�=e$ I����H��H���
�H�=C$ I���k�H��H�����H�EH���E1�I��tL��A���y���EH��I��t6L��H�L$��*H�D$���H�Ǩ�-����EH��H��tH��u.�EH��H�T$dH3%(�aH�� []A\A]A^�H����H��  H��H�5�
H�81��$�@��E��~]����H�D$H�\$H����������fDH�|$����H�|$H���b�E���F�A��H�۸HD�H�\$H�D$E����H�\$E���%���H���!���H���O���f.�1��
���f��EH��������������fD�������fDIc�H�|�H��uH�\$�����;�H���~���H��t
H�|$����1�D����������M�ff.�f���AT1��USH��1�H��0dH�%(H�D$(1�H�L$���H�T$H��H�\$I��H���H�
��H�D$H�5�H�M H�D$ �����ugH��H�����t\H��ƒ���uO�� urH�{uCH�K H�A�u7H�����t/H��փ���u"�� u]H��H����H��u�8RtW��H�t$(dH34%(H����H��0[]A\�H5�H�K��t���DH�xu�H�@�L�!H�i�H������L���l��H��I���a��H��H�����A�T$�H��Hc�H�TH�����H�������U�H��Hc�H�TH�P����G����%��D��AUATUH��1�SH��hdH�%(H�D$X1�H�L$����H��I���(��H�XH���,��D�cH�\$H��D������u8L��H���9�H��D�������tH�T$XdH3%(H��uH��h[]A\A]�1��������SH��1�H�� dH�%(H�D$1�H�L$�h���H�5� H��H��I��H�
�����H�T$dH3%(uH�� [��!�����SH��1�H�� dH�%(H�D$1�H�L$����H��H�
n�H��I��H�5Q��L���H�T$dH3%(uH�� [�������ATI��H�5� UH��S��H��H��`dH�%(H�D$X1��M��H�L$��L���oH�\$)D$�oH)L$ �oP )T$0H�P0H�T$@�@81҉D$H�Z���H��H����H�����H��H���,�H�L$XdH3%(u	H��`[]A\����ff.���AUI��H�5 ATA��H��USH��H��(dH�%(H�D$1����1�H�L$L��D��H������H��H���*�H�T$dH3%(uH��(H��[]A\A]�������U�����H���H�5�SH��H�� H�;�$��H�;�����H�%���H�5v�	��H�;1�H���H�5c����H�;1�H�e�H�5R����H�;�����H����H�5?���H�;�H��H�5*���H�;1�H���H�5���H�;1�H�o�H�5�s��H�;�H���H�5��X��H�;1�H����H�5��@��H�;1�H���H�5��(��H�;�H���H�5��
��H�;1�H��H�5����H�;1�H���H�5�����H�;1�H���H�5�����H�;1�H���H�5����H�;�H���H�5l���H�;1�H�����H�5Y�z��H�;�H���H�5E�_��H�;�H�0�H�52�D��H�;�H���H�5!�)��H�;�H���H�5���H�;�H��H�5����H�;�H���H�5�����H�;�H����H�5����H�;�H�>���H�5����H�;�H�3�H�5����H�;�H�X�H�5��l��H�;1�H�0���H�5��T��H�-� H�;�H�5�H���6��H�;H��1�H�5��"��H�;�����H��H�5����H�;�����H����H�5����H�;H�5y�
�������H�Q��H�5FH��H����������H��H���H�50���H�% H�;H�5;H����H�5���H��H�� �u��H�=� H�5���H�=� �H����H�5�C��H�=� �H�0��H�5��$��H�=� �����H�A���H�5r���H�=v H�������[H�]���H�5J]������H��H�=�����H�=�H�v ����H�=AH�3 ����H�=xH�H ���H�=kH�- ���H�=\H� ���H�=NH�� �z��H�=@H�� �g��H�� H��������H��H���/dev/tty[%dG[%d;%dHchomp![%d%cto_aryArrayexpected 2D coordinatewrong %s mode: %liscreen erase[%dJline erase[%dKrawraw!cookedcooked!getchecho=echo?console_modeconsole_mode=noechowinsizewinsize=iflushioflushbeepgotocursorcursor=cursor_upcursor_downcursor_leftcursor_rightgoto_columnerase_lineerase_screenscroll_forwardscroll_backwardclear_screenpressed?check_winsize_changedgetpassconsolegeneric_readableConsoleModeinitializeinitialize_copygetcgetsclosemintimeintr__send__console-modewrong number of arguments (given %ld, expected 2 or 4)Keyword flag set when calling rb_scan_args, but last entry is not a hashUsing the last argument as keyword parameters is deprecatedThe last argument is split into positional and keyword parameterstrue or false expected as intr: %li;�= �����8p��D
p��P���d���x�������p���������(@��D`��X���l���� ���p�������H���t �������@�����4�`p�����p���0@�L���p��`����0�D��h`�������� ��`���,��L`�x`��p�	��$	��8	��L	P��	���	���	��	0�X
��
p����
����
0����Dp�������zRx�$���FJw�?:*3$"D����\��p$��	� ��0�,��FE�K�G V
DAFHDA(�H��[F�K�D �BAB$�|��XE�D�G EAA ���4���BA�@P���d��x��H���xF�B�B �E(�A0�A8�Dp
8A0A(B BBBK0�L��IA�C�G c
FAKDCAh��1E�k((���HF�D�G �sAB(T����E�K�Jp{
AAA(�4��oE�A�DpV
AAA �x��nE�D`W
AA8�����F�E�A �D(�D�n
(A ABBH08���F�A�D �Dpp
 AABA(@���=E�D�D c
DAA l���TA�D H
AA����HH�P
H\L����F�B�D �A(�D0S
(D ABBK\
(F ABBA8t���B�E�D �C(�G�u
(A ABBA<���/C�d4X����B�B�K �E(�F0i(D ABB �T���E�B
IO
L@�����F�B�B �D(�A0�D@|
0A(A BBBI(�l��ZE�D�D @
DAA($���bE�D�D H
DAA P����E�D }
AA(t`���F�A�D �s
ABG����7E�b
I����7E�d
G��:E�X
CY�,�:E�X
CYL�<E�X
C[8l�<E�X
C[(X��qE�A�D U
DAAH����F�B�B �E(�A0�A8�G`�
8A0A(B BBBHH���B�B�B �B(�D0�D8�J��
8A0A(B BBBBX�0d�Dp�8X|�H�D�C �S
ABK@���H ������<E�v���)E�c���<E�v@��#B�E�B �D(�D0�GP�
0A(A BBBD zRx�P�����($��>0d���F�H�A �IP�
 AABD8�<��F�B�A �F(�D�z
(A ABBA ���_E�I0J
AA ���_E�I0J
AA0	��F�K�D �I��
 AABA8P	��yF�L�G �A(�GPI
(D ABBA(�	��pE�T�D 9FO�	,�H�GNU��$`$] �K�K��������!M@
�I�\ �\ ���o`8�
c` �P��	���oX���o�o����o�] p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������GA$3a1@�IGA$3p1094�#�IGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�$�IGA+GLIBCXX_ASSERTIONSconsole.so-2.7.8-141.el8.x86_64.debug
w���7zXZ�ִF!t/��?�]?�E�h=��ڊ�2N���|��>(u�L��$�;�	��=ֿ�0�T�'܌ ]��QBv6d�Uʁ�V�q��J2����l'��%=A_u��NXyi�(KhZNmL�Æ	���Y@�F4�ݧ���4q;E)���i3�8,�|���%VfM�sz�X�9p�x����&�5U?5�3�~Onc��
@B1��5�~b^r�d��Cܱz��4T�!���}�n>Pp�g&`����$p��>�"t,G�Y&�\��)qf�"��i�|�i�2��
/�@���|��V�!?�����d�9�����GD?�&��k|+
�%�������E�U>��Y*K>2O��|}�˂�5ږ�ܰ�ބ�&�'��GgP|�|��iF�u@"���*��:ۈ�4��Wo�_�r�cG���uKX4��2�
G\akG�����u��M��[
�E��m�>�����ug�u{�q
E >��6`���P�
+��-&&���$Bڌ~E�$��4��5�J����˫�8f0{�l���h9�.��(�l�Ҷ�z�|	=tW���xg	W���$�(ߟp�Їi�z��J���6n�0I��!n�lڕ�������K�����'г�w=
ڳ��9��E#А‰7������T)�~`sG4�4=�b�!K�5��
��w�)i��ԥ�>!�`���'����`(�x+?'�0�vݔ6/�%�M���qA���~JYU)�OC��>8ô���_�!2Q�<�n.Ɨ�i�FU?����Хr��k��\�b!^ZH��P��t!^Q���Zr�t^�6��g�(�ߞ���f~�f \���͞�����.�x���a����Z�g�����f�/h�������쏼�gz&?�IF��k��
��|��QS>�Շ��>�[`�>U���5�ΧՆ��6;�3���:՚��Z�cdI�gP2.���s���V�j�g�݇K��Hw9�����s׮�{������:��juG���}46(N$ɖ��LLg)��:,��1a����^�ӭln��?���9�9�����ams�K��8�4
�t�\�
"L�j���i3��B�#+5��B���Q��}![���ְ�qU�j�>[���!��eTT�!�d������c8GnF��L|(�q����i	�H��抩Y����B���gۧh;�~i�36��02b�l�2]����TcMB.����p�XZ���M�E	�Q)�M�-��U=(@Ѝ{��p>{.@�{(�� �(?oٌV��M�_Pp�ܐ�NZ��EY.
����E�h�{���V_�|v�{�pwj�侶g�`>�2<��5���S�Y�͊���RC�Y�'�J89�^1%a����Z8���I�`ϼȗ��{/��KD�I�"Z���.�3�r��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(���088c8���o���E���oXX0T���^BPP�h@@c``�n�w�#�#&}�I�I
�2�I�I`�@M@M��8O8O�	�YY ��\ �\��\ �\�] ]� ��] �]��x_ x_p�` `h�hb hbX��b`hbD
�d,�d��j+PKi.�Z_HJ�����ruby/psych-3.1.0/psych.sonuȯ��ELF>�,@p}@8	@�a�a �l�l �l 8  �m�m �m 888$$�a�a�a  S�td�a�a�a  P�td�X�X�X��Q�tdR�td�l�l �l 00GNU4ȇq
�P.��甸rWK�s�^`� B��HH	�`hkx�
BE��"a��j������
��|�S��E6
Z�qXH���8����"GU�� ��Z�YA��d,�u\}�x@~��%�P!� 4B���D�"4�G��\�2?�"5�"���u5�OK�kf\�����, ��F"�f�)I8�f�`>rs ��T���R���s ��s -�s �@.N��Ut��s !s ��s ��s __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeyaml_get_versionrb_ary_new_from_values__stack_chk_failInit_psychrb_define_modulemPsychInit_psych_parserInit_psych_emitterInit_psych_to_rubyInit_psych_yaml_treerb_define_singleton_methodrb_check_typeddatayaml_emitter_deleteruby_xfreeyaml_emitter_set_canonicalrb_data_typed_object_zallocyaml_emitter_initializeyaml_emitter_set_unicodeyaml_emitter_set_indentyaml_emitter_emitrb_eRuntimeErrorrb_raiseyaml_alias_event_initializerb_check_typerb_utf8_encodingrb_str_export_to_encrb_string_value_cstryaml_mapping_end_event_initializeyaml_sequence_end_event_initializeyaml_document_end_event_initializeyaml_stream_end_event_initializerb_fix2intyaml_emitter_set_widthrb_num2intyaml_stream_start_event_initializerb_attr_getrb_enc_str_newrb_funcallvyaml_mapping_start_event_initializeyaml_sequence_start_event_initializerb_string_value_ptryaml_scalar_event_initializeyaml_document_start_event_initializerb_ary_entryruby_xcallocrb_string_valuerb_keyword_given_prb_ivar_setyaml_emitter_set_outputrb_empty_keyword_given_prb_free_tmp_bufferrb_error_arityrb_cObjectrb_define_class_undercPsychEmitterrb_define_alloc_funcrb_internrb_define_methodcPsychParserrb_const_get_atrb_class_new_instancerb_intern2yaml_parser_deleterb_funcallv_publicrb_utf8_encindexrb_default_internal_encodingrb_iv_getyaml_parser_initializerb_respond_torb_ascii8bit_encindexrb_usascii_encindexrb_enc_find_indexyaml_parser_set_encodingyaml_parser_set_inputyaml_parser_parserb_protectrb_str_new_cstrrb_enc_associate_indexyaml_event_deleterb_jump_tagrb_str_newrb_ary_newrb_ary_new_from_argsrb_ary_pushrb_enc_get_indexyaml_parser_set_input_stringrb_to_encoding_indexrb_str_new_staticrb_const_getrb_usascii_str_new_cstrrb_exc_raisememcpyrb_define_constrb_requirerb_path_to_classrb_obj_allocrb_iv_setrb_define_module_undercPsychVisitorsToRubyrb_define_private_methodcPsychVisitorsYamlTreelibruby.so.2.7libyaml-0.so.2libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4/opt/alt/ruby27/lib64ui	2���>ii
I�l �-�l `-�l �l m KWm  /`m Xpm �A�o 
�o 
�o k�o )�o i�o d�o e�o l�o L�o Q�o Vp  p (p 0p 8p @p Hp Pp Xp 	`p hp pp xp �p �p �p �p `�p �p �p �p �p �p �p �p �p �p h�p b�p q q q q   q !(q "0q #8q $@q cHq %Pq &Xq '`q (hq *pq +xq ,�q -�q .�q /�q 0�q 1�q 2�q 3�q 4�q 5�q 6�q 7�q 8�q 9�q :�q ;�q <r =r >r ?r @ r A(r B0r C8r D@r EHr FPr GXr H`r Ihr Jpr Kxr M�r N�r O�r P�r R�r S�r T�r U�r V�r W�r X�r Y�r Z�r [�r \�r ]�r ^s _��H��H��N H��t��H����5�N �%�N ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]���������%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%�H D���%}H D���%uH D���%mH D���%eH D���%]H D���%UH D���%MH D���%EH D���%=H D���%5H D���%-H D���%%H D���%H D���%H D���%
H D���%H D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%�G D���%}G D���%uG D���%mG D���%eG D���%]G D���%UG D���%MG D���%EG D���%=G D���%5G D���%-G D���%%G D���%G D���%G D���%
G D���%G D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%�F D���%}F D���%uF D���%mF D���%eF D���%]F D���%UF D���%MF D���%EF D���%=F D���%5F D���%-F D���%%F D���%F D���%F DH�=F H�
F H9�tH��B H��t	�����H�=�E H�5�E H)�H��H��H��?H�H�tH��B H��t��fD�����=�E u+UH�=�B H��tH�=^? �����d����uE ]������w������H��8dH�%(H�D$(1�H�T$H�t$H�|$���HcD$H�t$�H�DH�D$HcD$H�DH�D$HcD$H�DH�D$ ����H�L$(dH3%(uH��8��^���ff.���H��H�=�'���H�}A 1�H�5�'H��H�H�?����j����������;���H���"���f���H��H�5a> ���Hc��H��H�D�ff.���H��H�51> �\���Hc��H��H�D�ff.���H��H�5> �,����x|H�H��H�Ѓ��f.���SH���#���H��[���f.���SH��H�5�= ����1�H��H��@������H��[�D��UH��= ��SH�����H�X H��H�����H�߾�i���H�߾�L���H��H��[]�f�SH��������t[�H�@ H�SH�5i&H�81����D��ATUSH��H�ĀH�t$H�5�< dH�%(H�D$x1�����H�|$I��H��u:1�H�l$H�����H��L���x���H��H�T$xdH3%(uCH��[]A\�@��>�������H�|$H������H�D$H��t�H�|$����H������ff.�f���ATH�5C< USH��H��pdH�%(H�D$h1�H���R���H��I�����H��L������H�T$hdH3%(uH��pH��[]A\��{���ff.���ATH�5�; USH��H��pdH�%(H�D$h1�H�����H��I�����H��L���\���H�T$hdH3%(uH��pH��[]A\�����ff.���ATUH��H�5_; SH��H��pdH�%(H�D$h1��r���1�H��H��@��I��H������H��L�����H�T$hdH3%(uH��pH��[]A\����ff.�@��ATH�5�: USH��H��pdH�%(H�D$h1�H����H��I���G���H��L���l���H�T$hdH3%(uH��pH��[]A\�����ff.���USH��H�5p: H�����H��H���t�'�����H�����H��H��[]��k����������USH��H�5 : H���G���H��H���t������H�����H��H��[]������������ATUH��SH��H�5�9 H��pdH�%(H�D$h1����H�߾I���R���H�߃�t:�e�����H��H�����H��L���=���H��H�T$hdH3%(uH��p[]A\Ð��������f���ATI��UH��SH��H�5g? dH�%(H�D$1���H�����L��H��H����H��H��H�5"? H�$�q���H�Ǩt"���H�\$dH3%(uH��[]A\�@������L�ff.����AWAVAUATI��UH��SL��H��H�t$H�5�8 H�$dH�%(H�D$x1���I����H�|$I��H��t���H�|$L�����H�D$H�<$H��t����H�<$L�����H�$H�߃���������E1�M��A��E1�H�<$tH���H�I��1�H�|$t
H�|$�1�H��L�d$L��A��D��L���8���L��L���m���H��H�T$xdH3%(u&H�Ĉ[]A\A]A^A_������p�����ff.�@��AWAVAUATI��UH��SL��H��H�t$H�$dH�%(H�D$x1���H�|$I��H��t���H�|$L����H�D$H�<$H��t���H�<$L���z�H�$H��H�5�6 ��H�߃�I���������E1�M��A��E1�H�<$tH����I��1�H�|$t
H�|$���H��L�d$L��A��D��L����L��L������H��H�T$xdH3%(u#H�Ĉ[]A\A]A^A_�D�[���s�����ff.�@��AWAVM��AUM��ATUH��SH��H�T$ H��$�H�L$H�t$(H�5�5 dH�%(H��$�1����H�|$(�I���Z��5�H�|$(H��I���5�H�|$ H�D$(H��t��+�H�|$ L����H�D$ H�|$H��t���H�|$L�����H�D$H�߃���������H�D$(M��A��M��L�A��E��E��A�� ��I��D�����D$H�|$(���1�H�|$H��tH�|$H�D$�0�H�L$H��1�H�|$ t!H�|$ H�L$H�T$�
�H�L$H�T$H��L�|$0SE��AVD�D$L���%�XL��ZL���8���H��H��$�dH3%(u.H�Ĩ[]A\A]A^A_Ë@�D$�N���@�k���������ff.�@��AWAVAUATI��USH��H���H�|$0H�t$H�5�3 H�L$8dH�%(H��$�1���H��H�D$(�u�H��� ��H����H����I������H�D$ 1�L�|$PH�D$E1�H�|$8A��H��� �>H�D$H�@H��H�ٸH�\$ H�t$HL��HN�H����H�|$(L����H��tH����H��$�dH3%(H�D$0�tH���[]A\A]A^A_�f�H�D$H�@H���5���H�\$1�H�����H�߾H����H���H�����{�H�߃��D$H�{�f�D$LI�����������L��I��� �I�$�� �cI�D$H�D$L�|$�E1�L�����H�D$ H��M���kI�D$H�l$PM��H�D$H�D$@H�$�H����L9��o���H�D$N�4��L����I��� ����I�NI�FH�L$@H�@H�<$H��I��H�D$P��H����H�|$@L���7�H�|$PL��H�D$@�%�H�<$H�D$P���H��H�C����H�C�L;|$��I�$�� �?���M9|$�����I�D$ �?���f.�H�������@�K����fD�;��[���fDH����H�D$����I�~~(I�F H�H�L$@�
���I���<���H�\$ L�|$P�-���H�|$ ��H��3 H�5�H�81����"�f���AWAVAUI��H�5|0 ATU��H��SH��H��dH�%(H�D$1���I����H�$�������rM�u����M�m���IH�566 1�1�L����H�56 1�1�L��H���t�H�5�5 1�1�L��I���^�H���I��������L����L��A�����~���L����1�I��L��@����H�5�5 L��H���@�H��H�5&���L���~�H��H�L$dH3%(��H��[]A\A]A^A_������~cH�$M�u��u"H��t�A�H���W���u���DM�m��u+H��u�����D��������@�����(���H�<$tH�����������?�ff.�@��SH�=��o�H�5�H��H�.1 H��H����H��H�5�H�����H�1 H�5��H��H���H�;�����H�����H�5����H�;�H�>�H�5����H�;1�H��H�5���H�;�H����H�5���H�;�H�`�H�5v��H�;�H�����H�5h�i�H�;�H�:���H�5T�N�H�;1�H���H�5K�6�H�;�H���H�5=��H�;1�H���H�53��H�;�H�$�H�5$���H�;1�H��H�5���H�;�H�A�H�5��H�;1�H���H�5���H�;�H���H�5���H�;1�H�F�H�5��j�H�;�H��H�5��O�H�=����H�=�H��2 ���H�=�H��2 ���H�=hH�o2 ��H�=@H�T2 ��[H�?2 �f.�@��SH�5t, H�� dH�%(H�D$1��+�H�5D2 H��H��tlH��. H�8�
�Hc��H��H��H�L	H�$Hc��H�L	H�L$Hc��H�L	H�L$���H�T$dH3%(u+H�� [�D�H�=���H��H��1 �t������ff.���SH���s�H��[��f.���H�5�1 1�1���ff.����H�5�1 1�1��|�ff.����H�5E1 1�1��\�ff.����H�551 1�1��<�ff.����H��H�5)1 �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH������ff.�@��H��H�5�0 �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H��H�5�0 �dH�%(H�D$1�H�GH�?H��H�$�9�H�T$dH3%(uH����/�ff.�@��H�OH�5�/ H�?����@��H�OH�5�/ H�?���@��H�OH�5�/ H�?���@��H�OH�5�/ H�?��d�@��H�OH�5Y/ H�?��D�@��AWAVI��AUATI��US��H��xH�T$HdH�%(H��$h1��D$|�n��D$$�E�H�5�L��H�D$0��H�����HDŽ$�����
����I�$H��$�����1�I�L$H�L$h����H��$�H���XH�|$HH�5�( �Q�I��H��H�D$�A�L���I�H�5�. H��$������M	H�5.. L��$�H����
1�1�L���I�H���Q
�J�A����D9��T
D9d$$�I
H�=����A9�tH�=
��1�A9�@�ƍ4vL�t$L��$�L����H��$�H�5L���d�H��$L�|$|H�D$H��$0L�53H�D$fDH�|$H���[����6
Hc�$�Hc�$�H�=���H��$Hc�$�Hc�$�H�t6H�TH��$H�t$H�L	H�DH��$L��H��$H��$ �S���$�
�:��$�Ic�L�>��@H��$�H�5- H��$�������	H�5�, H��$�1�1���H�D$h���f.�H��$�H������t$$H��I���k�H�t$0H����L��A���H��$�I��H��t$�z��t$$H��I���+�H�t$0L���N�I�ă�$�Hc�$�H��$0H�=����H�L��$8H�t$H��L��$@H�T��H��$PL��H��$HfD��H������|$|��������f�L��H��H�=S����ѐH��$�H���W���t$$H��I���k�H�t$0H���;L��A���H��$�I��H��t$�z��t$$H��I���+�H�t$0L���N�I�ă�$�Hc�$�H��$0H�=���H�L��$8H�t$H��H�TL��$@��H��$PL��H��$H�����H��$�H��$��+��t$$H��I����H�t$0H����L����H��$�I��H���2���t$$H��I���^�H�t$0L����H��$�I��H����L�D$(�s��t$$H��I���$�L�D$(H�t$0L��L�D$(�=�L�D$(I�Ń�$�Hc�$�H��$0H�=&���H�L��$8H�t$H��H�L	L��$@����$�L��$HH�H��$PL��H��H��$`��H��$X����f.�H��$�A�H��t,���t$$H��I���Y�H�D$0H��tL��H���t�I��H��$0L��H�t$H�=
���L��$8�]���DL��H��H�=�����F���fDL��H��H�=�����.���fD���$��H��$0HE�H�t$L��H�=����H��$8���fD�C��H�D$(H��$�H���-HcPHc0�1�H�TH�t6� ��H�D$@L��$�M����H�D$@���$�H��$0H�t$H�=����H��$8H�D$(H��$@�HE�L��H��$H�F���fDL��H��H�=S����>��H���&��|$|���3���H��$hdH3%(H�D$H��H��x[]A\A]A^A_�@Hc�$�H��$0L��H�=.���H�t$H�DH��$8����A�H��$�A�H���8�������t$$H��I���?��H�|$0��������fDA�H��$�A�H�����F���t$$H��I�����H�|$0�������fDH��$�A�H��t����t$$H��H�D$(���L�D$(H��$�A�H�������L�D$(�����t$$H��I�����L�D$(�s����L��$�M9�����H�l$P�l$$H�\$XH�\$0L�|$`�f��{����H��I���.��H��t|L��H���N��I�|$�I��H��t'�G����H��H�D$8���H�T$8H��H�����H��L���1�I�����H�|$(H�����M9�tHI�<$H���s���A�I�|$�H��t�������H��H�D$8���H��H�T$8t��fDH�l$PH�\$XL�|$`�
���@���H�D$@���A�A��;���H��$�H��t��n���t$$H��I�����A����@H��$����H��$�H�=	H��$����H�=�A�����H��$�A������9D$$�PA9��YA9��,����H��$�H������H��$�H��$�H��$�H��$��H�|$H��$��0��H��$�H��� uhH��H�p��H�|$������fD�{�����I�$H��$�H��$����@���H������H��$�H���������H�PH�p�H���v��A�����D9������������	H�=����H�D$h��H�=����H��H�]# �;���H��$�����H��$�����H��$������H�������H�D$H�XHH�@PH�kH�D$H�XH��" H����H��H�q H�8���I��H�D$hH��$0Hc�H�DH��$8Hc�H�\$H�DH��$@HcCH�{H�DH��$H�H��t����H��$PH�D$H�x8�H��t����H��$XH�A" H��tUH��$0�H��L���l��L�t$H��L�����L�����H������H�=U�K��H��! �����H�=D�.��H��! �H��$�t
H��$���������\��������SH�� �����H�x H���~��H��[�f���UHc�H��SH�TH��H��(H�5�! dH�%(H�D$1�H�L$H�T$��m��H�H�D$H��u#H�t$dH34%(�uLH��([]��H�|$���H�L$H��� u!H����H�H��t�H��H���W���DH�Q�����D��H� SH�5H�H�+ H�8����H�$ H�5���H��H����H�;�H�5����H�;�H�5����H�;�H�5����H�;�H�5����H�=����H�;�����H���H�5��{��H�;1�H���H�5��c��H�=���H�=xH�I  ����H�=jH�.  ����H�=�H�  ����H�=�H�� ���H�=�H�� ���H�=�H�� ���H�=H�� ���H�=�H�� �o��H�=�H�q �\��H�=�H�V �I��H�=�H�; �6��H�=�H�  �#��H�=�H� ���[H�� ����H������@��UH��H��SH������H��H�5�H��H������H��H��[]�ff.����ATH�=gUS���H�-� H�5_H��H��H�U���H��H�5RI�����H�UH�5HH��H���g��H��H�5;H���U��H�� �H�5'H��H�H�5�������[L��]�H����H�5
A\������SH��H��H�|$H�T$����H������H��H���2��H��[�ff.����SH�=x���H�5�H���0��H�5H��H�� H��H����H��H�5�H�����H�� �H�5xH��H�H�R���[�����H��H���Psychlibyaml_version%stag tuple must be of length 2HandlerEmitterinitializestart_streamend_streamstart_documentend_documentscalarstart_sequenceend_sequencestart_mappingend_mappingaliascanonicalcanonical=indentationindentation=line_widthline_width=iowritePsych/emitterMark@handler<unknown>external_encodingUTF-16LEUTF-16BESyntaxErrornewParserANYUTF8UTF16LEUTF16BEpsych/syntax_errorparsemarkreadpathemptyevent_locationPsych/parserH��`��x����������`�mesgClassLoaderVisitorsVisitorToRubybuild_exceptionpath2classYAMLTreeprivate_iv_get;�1����x������������((��@X��X���p��������(���X����� ���T����x�������8�����H��|�������X��LH�������HH�h��8��X��x���������x�0��L��`�t8��X��x�����8�������H���h��|(������������zRx�$����FJw�?:*3$"D����\ ���H@t
Ax���NHA����%HW����%HW����&HW���E�L���+E�e$(��NE�M�D rDA<P��+A�M
A0Xd���F�A�A �G�`
 AABE0����eF�H�A �G�B
 DABA0�,��eF�H�A �G�B
 DABA0�h��qF�A�K �G�K
 DABA0(���eF�H�A �G�B
 DABA(\���IE�A�N c
DAD(���IE�A�N c
DAD0�8���F�A�D �N�a
 AABB0�����F�D�D �D0m
 AABEH��AF�B�B �B(�D0�D8�J��
8A0A(B BBBILh��AF�B�B �B(�D0�D8�J�
8A0A(B BBBF\����F�B�E �E(�A0�D8�G�[�E�N�D�e
8A0A(B BBBAL����F�B�B �B(�D0�A8�J�
8A0A(B BBBJHh����F�B�B �L(�A0�F8�GP
8A0A(B BBBI�x��rE�e ����E�K0�
AF���E�L��(��<��P��d��QH C
A���QH C
A�@�QH C
A��������������L���
F�B�E �B(�D0�A8�I��
8A0A(B BBBEl�'E�a(��E�G�L@V
AAH����L���h�$�d�4E�G�D ^DA(|�F�H�A ��DU<�4E�G fA\ �tE�jGNU��-`-�l KW /X�A��S!
$V�l �l ���o`��
ip �0��	���o@���o�ob���o�m 0!@!P!`!p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'GA$3a1!1VGA$3p1094�-$VGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1094�.oUGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�-�UGA+GLIBCXX_ASSERTIONSpsych.so-2.7.8-141.el8.x86_64.debug;	��7zXZ�ִF!t/��O�]?�E�h=��ڊ�2N�	�����c�`U@^M�me�3�r7N��,H�{5&�<�
�,j46i�{�b��¬����Z�=n�FU��'��[�+��S�>4�d���6�m��f����S���7�]��$�g�!�e}=�Lk
����
!�{#d��R�@1�\O<�3X��dF4�U�:/vlɼb/,`=�U�IPN��<������,�^s��X���Ʊrg�^���2zĿ�S��e�0�,Z��R�\
��k��AU��Y�h\�g�ʓ�$�{�x�Et��}��^�™���'��곃��^�T:*����?��.�11�ϱ?��
K�7ɮߥ�ZŐ	c�k-3Ͻ�<S�4�*�Tu��d��2D@�O�� V�K%c�e^&���$ ,
�1b�Q����0��K�g�U�Hk�: |�
�#׉e\�s�z3�Z���L�8��<0��z\b=��7J�\��k�0Ec�)��f�<g^&���Б��
����R2�':���Gf|�I��C]��ՏgJ��
����j�!�~���E������~Al�VO����#���tV�|��պP�:�mRJA��cA�/T�d]�����H�i�J��g#*S�7�ayw%�S�vEv�q������3�5��I�h��	��e��a�z�+3JF�bܘF�%B=:ks����.��
G&�\8�=ϯ����V�i�N������ͺYFf&�09.�[�`�7oθ��+���E���O"!��&d
�y�:���$�d��?�ͧ`+2�]1��Ie��8���$j'�¹BW;��]0sdt$p�w�-�;�|5�s8S<G�	/��Z½�"gH��ȸ�+o*�W�~+е{l�u�A��AFI������47�t�β�ā�B����
���|Je!2�y/���Nz��S/ ��][wE��-F$�G�1����	����@-D(�R��)�Ɵ�ew�i�����=���n�Ia�7�yjA�%�gG��x����(a�i����]���U�A��s�ڷ���S���X60zf��#��NڇP�m�(�r�j3���kiB��[��;7�`��-��VQq�yj`)Y2!9�"�>��Px�'��EP�p�puj5l���[�@�2r.56:y#l�*�z��1�o�j�4�b*�R�,�<���s�	�(�4tѱ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o```(��8
0��i8���obb�E���o@@@T���^B00�h!!c ! !�n''�w�,�,4)}$V$V
�4V4Vd��X�X��0Z0Zx��a�a ��l �l��l �l��l �l� ��m �m��o �oX�p p�s s���s`s
w(Dw�@|+PKk.�Z��Q�/�/ruby/openssl-2.1.4/openssl.sonuȯ��ELF>@�@P(@8	@���� p�p�%p�%h3< ����%��%888$$ؽؽؽ  S�tdؽؽؽ  P�td   <<Q�tdR�tdp�p�%p�%��GNU���yRWՊ-���o_�z\��� 0"$@@�	(Q�0�Au ���
@ �
`BbH�	�� P) �#�����		� ��@ �@ !�@D��@@ H!D�$`��
�P"�J$)�@N)�"DBX0!B @@@F���@� H@�
  �R��`��@@�P� �@�������������������������������������������������������������	!#%&(),./12689<@BCFKMQRSVW�E�K��l�I�q�η)��Bг���Z�ʮ9X�{�)��Ns���t��J���+agg�-(7�WN����/��iƵQ\���1b��8чɌA�Z��)&��p�EtdQ��z<wU��*��y�7)4^�S�14��8Q�1a��c�
O\���J�{(�����!�>�KG6�W6߂ט��m3l�јS6‡Nq��K� �ߝ�+&�)4�����"v��w�"`��P�b�yl
�I�!I�e�R�UF�Կ�1������>�텄�!��vvD�
z^����y�P=�2v�*b^��G��u$.�S�q�y]�e�Ω+�n	�
�ժ�m
!��I���p�`��qX��o㾆��ٴ7�8ѭdx)�1H����:e-&k��,jb��o���p��I���T
��g��:�ѫ���<�#IP���\��@��|��U�	s���|0�DcCE�? X��v$.�S�g���@�|��Y�D[H.ZJ7�.�0J�ʺ�|o�(4)*�%T���6�- I��ܛ{���ИBE��%9�<~�-)
͙��:'9�<�߲G�'3=��_�z�E'D�8��|t��X
�/i�ij�������`9E��D{���v,2��4��"�ǯ�M��������swxX�-�<�G��洿)4
�,���<-��,Tή�6���cfEӕ��%mTm�
�}��[-��t��ǫ����yqa��,T��kǨu$.b-����t�o�l��|fsG�,9�%�%�5E��H�&)�
=**=��G4�?�X&� ���3�8�A12`B#�D�3!�)���2�	�DwC;
 !�.\x��4�!�!"1�FNC�02?���)�D� �B�#�B�
�
"e*\'�CYW�*�%O$U.�2�"�!lG'�#"�$JX9h��K�>�G�2� �
�
�DH'�(!%�8�4�7�.<�'u	WlHe#�/O+�E	�J/Z�
�5F*,I)u
�
,0J?�9�%�_D&��-�%�f
�#�7�7�"�'b5�DX��,

LE�]�F"47?�?�j%�/��C_,�'V
�(8�y5��<�=�c8,w��8ij(B��!�?�7�(�.4'{�'�@�*W=�	_):Dt\-#&`��>���RGs�?}.*FC(3�!@.��&g�@�[E�B��!�<�U�Q#H%4�((�6��)�<�e!2�E;�E� 5�$�'O"���	�8�@H��<��&=�Cp'T��&�HA1L �$[�2��5o��=0�*��1�<�F�,�C�34)�"J!7
�	��6��E�;'*���-(� 0�"
�A�%Z7E�@$
8K3g4wIE1k
=b&��+G8�p*�D�3�:�GG5�.
*%9��_/\�%�tt1�A+`$	�E�;�+�0�:�[C *�C�@[7�CI�T"|3
�!�����0*�!g.m?		��w(���!96D=I(��Sh	�B	�<�+h3�;"
>�3u�)1,5�:;)wAy%�&:@�>*#�2�+h�+B,7�)/.m ��x$�=s<z'S@Q8w �0L
#
RD�+J����*�B�	�p)H?&.�8��?-"|*�E�G�"�v
p-CI�0<G�'5t;m9���:��G� d��'�v68>�,��<JF(7�G�;��
�$���.�;��#9T*�B�	,�2��4�#>m2iC�5�j<\	D�4"�+6C%-<�ws/�	��
"��d�,KH��/�5�=�
2
�;�F
e
f:��2�Z>�#z=k�<�*<+,�lD�1�&+X46 �=�{4q�/�A�>H�B��,�C�1�-{9!�0�<Cr/I,7�F��9��
A@7E�!F�y��6�
�5��(e�&$;U/�H�9;I����@
0
69	�/�#�V�2q!�[H#W?�-r,aI6a%��5D�x+$AByG>^I�'7-1�4=&�2��#h+�&83Z�#ES�3�F1X��$�)��)�&���C+9h/
l@?(�6=(�G�0/��8�D�-4�7e0�
��,35@v7[A_ ��M	Cp0}&�63�h5<Y%��l(�'rE�
�*�/[;�-N)�7*	�/4W3�H�c)�?2Hx>�0'C �:�3�	�*��E GmB�<�?C0
!I>>2�/.�V2%uC9�.8<��A�4�4�j=��5�-*~?$
�,�4�#-�V!!@�5A�$�>mO6kF�*�H��A��� �;�&.�Al$�pS�)
.H-�/�( ��F;#PB�=, e>~=�5�Hs�(XMI%���;%���$�8A�fA�6i %��0@8�?�-�$b6*�4`(�&��[���&
I�&L"{��O>b8&v$(�&��&�A�6�7�&�@�<p���"p��&I�*��&���i� Q��@0&��&�8&�$`&q" C�L&SP����l{7;&�h&X"@��y d^B@&*: �+�@&'$�C_��&�*�&�&0V��&�&�# >��<���mC��i�Eh&DCH&j�N6�&� �b6�Z�:(&T�&�'�&~"P&xpd�p��$x&	uj�0�iG
&�x&����~���&`1��@1B8&6P���1��%H{'�&�m�&&`�QsH&�>�VH�&Up&<&�����9=5$(q��&�Gp&�PNj��&c {Z�&�"H&L &cG�&�`&�I�%R:��G�`�6&W0��%H#`�9�&�0�}�-�&�0��> &$�~��Q�-vsd &��&��&�/�&�@�b��'�	� ���1�&/'p&$X&*0&f�&��&lp&<:@�d�^�B$�{jn(&�"Z�1�&)X&��bj,&?@&�@�)�I�&�90c�Y�&/��_��Ro`�"@�%He"P'�Z<�&�I�%/&H<`<jd<�<6�%x&8&?p�j��&,DX&��!j�&upP���T�8&�
���B�&�`�j) 0&Y
�&>�6N�.
P&B
�&���:�K�!(&��u6�=Њ6 �q�9@OEq'�&:�u��Ix&
@&�h&�EP&��&Q�	���_����/�&��&�&)�&�P1� ^��&��&�%h&�>`&x8�&�2���&D�'_��&�/�&__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizedOSSLrb_str_newrb_yieldrb_string_value__stack_chk_failossl_get_errorsrb_ary_newERR_error_stringrb_str_new_cstrrb_ary_pushERR_get_errorFIPS_modeossl_protect_x509_ary2skossl_x509_ary2sk0rb_protectossl_x509_ary2skrb_jump_tagossl_x509_sk2aryOPENSSL_sk_numrb_ary_new_capaOPENSSL_sk_valueossl_x509_newstderrfwrite__fprintf_chkossl_x509crl_sk2aryossl_x509crl_newossl_x509name_sk2aryossl_x509name_newossl_str_newrb_set_errinfomemcpyossl_buf2strCRYPTO_freeossl_bin2hex__assert_failossl_pem_passwd_cbrb_block_given_pPEM_def_callbackrb_warningossl_to_derrb_funcallvossl_to_der_if_possiblerb_respond_toossl_clear_errorERR_get_error_line_dataERR_clear_errorrb_warnossl_raiserb_vsprintfERR_peek_last_errorrb_exc_new_strrb_exc_raiserb_str_new_staticERR_reason_error_stringrb_str_cat_cstrrb_str_catrb_check_typeOPENSSL_sk_new_nullrb_ary_entrycX509Certrb_obj_is_kind_ofDupX509CertPtrOPENSSL_sk_pushX509_freeOPENSSL_sk_pop_freeeOSSLErrorossl_pem_passwd_valueFIPS_mode_setInit_opensslOPENSSL_init_sslrb_define_modulemOSSLrb_global_variablerb_define_constOpenSSL_versionrb_eStandardErrorrb_define_class_underrb_internInit_ossl_bnInit_ossl_cipherInit_ossl_configInit_ossl_digestInit_ossl_hmacInit_ossl_ns_spkiInit_ossl_pkcs12Init_ossl_pkcs7Init_ossl_pkeyInit_ossl_randInit_ossl_sslInit_ossl_x509Init_ossl_ocspInit_ossl_engineInit_ossl_asn1Init_ossl_kdfrb_eRuntimeErrorrb_raiserb_define_module_functionrb_string_value_cstrOBJ_txt2objeASN1Errorrb_ivar_setrb_attr_getASN1_OBJECT_freerb_usascii_str_new_staticOBJ_obj2txtrb_str_resizerb_str_set_lenrb_out_of_intOBJ_txt2nidOBJ_nid2lnOBJ_nid2sncASN1EndOfContentrb_funcallv_publicrb_intern2cASN1SetcASN1SequencecASN1GeneralizedTimecASN1UTCTimecASN1ObjectIdcASN1NullcASN1BMPStringcASN1UniversalStringcASN1GeneralStringcASN1ISO64StringcASN1GraphicStringcASN1IA5StringcASN1VideotexStringcASN1T61StringcASN1PrintableStringcASN1NumericStringcASN1UTF8StringcASN1OctetStringcASN1BitStringcASN1EnumeratedcASN1IntegercASN1Booleanrb_block_callasn1time_to_time__isoc99_sscanfrb_cTimerb_eTypeErrorasn1integer_to_numASN1_INTEGER_to_BNossl_bn_newBN_freeASN1_ENUMERATED_to_BNOBJ_createrb_num2intrb_fix2intrb_hash_lookuprb_class_superclassrb_cFalseClassrb_cIntegerrb_cNilClassrb_cFloatrb_cTrueClassrb_cSymbolASN1_object_sizeASN1_put_objectASN1_put_eocrb_convert_typerb_str_appendrb_keyword_given_prb_free_tmp_bufferrb_empty_keyword_given_prb_error_arityASN1_get_objectcASN1Datarb_obj_alloccASN1Constructiverb_int2bigd2i_ASN1_TIMEASN1_TIME_freed2i_ASN1_ENUMERATEDASN1_ENUMERATED_freed2i_ASN1_INTEGERASN1_INTEGER_freed2i_ASN1_NULLASN1_NULL_freed2i_ASN1_OBJECTOBJ_obj2nidd2i_ASN1_BIT_STRINGASN1_BIT_STRING_freeBIO_s_memBIO_newi2a_ASN1_OBJECTossl_membio2strrb_str_new_frozenossl_time_splitrb_Integerrb_num2longasn1str_to_strnum_to_asn1integerossl_bn_value_ptrBN_to_ASN1_INTEGERossl_asn1_get_asn1typeASN1_GENERALIZEDTIME_adjCRYPTO_mallocASN1_TYPE_setASN1_BIT_STRING_newASN1_BIT_STRING_setASN1_STRING_newASN1_STRING_setASN1_STRING_freeASN1_NULL_newASN1_UTCTIME_adji2d_ASN1_TYPEASN1_TYPE_freerb_str_drop_bytesrb_cArrayrb_id2symrb_define_module_undermASN1rb_ary_storerb_cObjectrb_attrrb_define_aliascASN1Primitiverb_undef_methodrb_mEnumerablerb_include_modulerb_hash_newrb_gc_register_mark_objectrb_hash_asetrb_define_methodrb_define_singleton_methodossl_obj2bioBIO_new_mem_bufBIO_ctrlBIO_freeBN_clear_freerb_check_typeddataBN_num_bitsBN_bn2binrb_memhashrb_alloc_tmp_buffereBNErrorrb_obj_classrb_data_typed_object_wrapBN_newossl_bn_ctxBN_sqrBN_bn2hexrb_cstr_to_inumBN_is_zeroBN_is_negativecBNBN_dupBN_set_negativeBN_is_oddBN_is_oneBN_cmpBN_bin2bnrb_absint_sizerb_integer_packrb_alloc_tmp_buffer_with_countBN_copyBN_hex2bnrb_string_value_ptrBN_mpi2bnBN_dec2bnrb_eArgErrorBN_is_bit_setBN_set_bitBN_clear_bitBN_mask_bitsBN_lshiftBN_rshiftBN_pseudo_randBN_randBN_is_prime_fasttest_exBN_is_prime_exstrlenBN_bn2decBN_bn2mpirb_assoc_newBN_mod_inverseBN_generate_prime_exBN_pseudo_rand_rangeBN_rand_rangeBN_ucmpBN_gcdBN_mod_expBN_expBN_mod_sqrBN_mod_mulBN_mod_subBN_mod_addBN_divrb_ary_new_from_argsBN_mulBN_subBN_addrb_error_frozen_objectBN_CTX_newrb_define_alloc_funcEVP_CIPHER_CTX_freeEVP_CIPHER_CTX_newEVP_get_cipherbynameEVP_CipherInit_exeCipherErrorEVP_CIPHER_CTX_cipherEVP_CIPHER_flagsEVP_CIPHER_CTX_iv_lengthEVP_CIPHER_CTX_get_app_dataEVP_CIPHER_CTX_key_lengthEVP_CIPHER_CTX_ctrlEVP_CIPHER_CTX_block_sizeEVP_CipherFinal_exEVP_CipherUpdaterb_eRangeErrorossl_evp_get_digestbynameEVP_BytesToKeyOPENSSL_cleanseEVP_md5OBJ_NAME_do_all_sortedEVP_CIPHER_CTX_copyEVP_CIPHER_nidEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_set_paddingEVP_CIPHER_CTX_set_app_datarb_class_path__memcpy_chkossl_evp_get_cipherbynamecCipherossl_cipher_newDupConfigPtrcConfigNCONF_newNCONF_load_bioNCONF_freeeConfigErrorCONF_get1_default_config_fileEVP_MD_CTX_freeEVP_MD_CTX_mdEVP_MD_sizeEVP_DigestFinal_exeDigestErrorEVP_MD_CTX_copyEVP_MD_CTX_newEVP_DigestInit_exossl_digest_updateEVP_DigestUpdateEVP_MD_typeEVP_MD_block_sizeEVP_get_digestbynameossl_digest_newcDigestrb_path2classrb_define_private_methodENGINE_freeENGINE_get_cmd_defnsENGINE_ctrl_cmd_stringeEngineErrorENGINE_load_public_keyossl_pkey_newENGINE_load_private_keyrb_iv_setENGINE_get_firstENGINE_up_refENGINE_get_nextOPENSSL_init_cryptoENGINE_load_builtin_enginesENGINE_by_idENGINE_initENGINE_ctrlENGINE_get_nameENGINE_get_idrb_sprintfENGINE_set_defaultENGINE_get_digestENGINE_get_cipherENGINE_finishcEnginerb_undef_alloc_funcHMAC_CTX_freeeHMACErrorHMAC_CTX_newHMAC_CTX_copyHMAC_FinalHMAC_UpdateHMAC_Init_excHMACrb_get_kwargsEVP_PKEY_CTX_new_idEVP_PKEY_derive_initEVP_PKEY_CTX_ctrlEVP_PKEY_deriveEVP_PKEY_CTX_freerb_extract_keywordsrb_check_hash_typePKCS5_PBKDF2_HMACEVP_PBE_scryptrb_num2ulongNETSCAPE_SPKI_freeeSPKIErrori2d_NETSCAPE_SPKIeX509CertErrorNETSCAPE_SPKI_b64_decoded2i_NETSCAPE_SPKIGetPKeyPtrossl_pkey_check_public_keyNETSCAPE_SPKI_verifyGetPrivPKeyPtrNETSCAPE_SPKI_signNETSCAPE_SPKI_set_pubkeyNETSCAPE_SPKI_get_pubkeyNETSCAPE_SPKI_printNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_newmNetscapecSPKIi2d_OCSP_CERTIDeOCSPErrorOCSP_CERTID_freeOCSP_id_get0_infod2i_OCSP_CERTIDGetX509CertPtrOCSP_cert_to_idOCSP_CERTID_dupi2d_OCSP_SINGLERESPOCSP_SINGLERESP_freed2i_OCSP_SINGLERESPOCSP_SINGLERESP_itASN1_item_dupi2d_OCSP_BASICRESPOCSP_BASICRESP_freeOCSP_BASICRESP_itOCSP_basic_add1_nonceOCSP_REQUEST_freeOCSP_REQUEST_itd2i_OCSP_BASICRESPi2d_OCSP_RESPONSEOCSP_RESPONSE_freeOCSP_RESPONSE_itd2i_OCSP_RESPONSEi2d_OCSP_REQUESTOCSP_request_onereq_countcOCSPCertIdOCSP_request_onereq_get0OCSP_onereq_get0_idOCSP_request_add0_idOCSP_request_add1_nonced2i_OCSP_REQUESTOCSP_id_issuer_cmpOCSP_id_cmpOCSP_resp_countOCSP_resp_get0OCSP_single_get0_statusOCSP_SINGLERESP_get0_idOCSP_SINGLERESP_get_ext_countOCSP_SINGLERESP_get_extossl_x509ext_newcOCSPSingleResOCSP_resp_findOCSP_CERTID_newOCSP_SINGLERESP_newOCSP_copy_nonceOCSP_BASICRESP_newcOCSPBasicResOCSP_response_get1_basicOCSP_response_statusOCSP_response_status_strOCSP_RESPONSE_newOCSP_check_nonceOCSP_REQUEST_newOCSP_request_is_signedOCSP_response_createX509_gmtime_adjossl_x509_time_adjustrb_check_array_typecX509ExtOCSP_basic_add1_statusGetX509ExtPtrOCSP_SINGLERESP_add_extOCSP_check_validityGetX509StorePtrOCSP_request_verifyOCSP_basic_verifyOCSP_basic_signEVP_sha1OCSP_request_signmOCSPcOCSPReqcOCSPResi2d_PKCS12ePKCS12ErrorPKCS12_freed2i_PKCS12_bioERR_set_markPKCS12_parseERR_pop_to_markd2i_PKCS12ASN1_dupPKCS12_newcPKCS12PKCS12_createPKCS7_RECIP_INFO_freePKCS7_SIGNER_INFO_freei2d_PKCS7ePKCS7ErrorPKCS7_freePKCS7_verifyERR_peek_errorrb_iv_getPKCS7_dataInitBIO_writeBIO_readPKCS7_dataFinalBIO_free_allPKCS7_content_newd2i_PKCS7_RECIP_INFOi2d_PKCS7_RECIP_INFOcPKCS7RecipientPKCS7_RECIP_INFO_newPKCS7_get_signer_infod2i_PKCS7_SIGNER_INFOi2d_PKCS7_SIGNER_INFOcPKCS7SignerPKCS7_SIGNER_INFO_newPEM_read_bio_PKCS7d2i_PKCS7_bioPKCS7_dupPKCS7_RECIP_INFO_setPKCS7_get_signed_attributePKCS7_SIGNER_INFO_setPEM_write_bio_PKCS7X509_CRL_freeOPENSSL_sk_popGetX509CRLPtrPKCS7_add_crlPKCS7_add_certificatePKCS7_add_recipient_infoPKCS7_add_signerOBJ_nid2objPKCS7_add_signed_attributePKCS7_set_cipherPKCS7_ctrlstrcmprb_sym2strPKCS7_set_typePKCS7_newcPKCS7SMIME_read_PKCS7PKCS7_decryptEVP_rc2_40_cbcPKCS7_encryptPKCS7_signSMIME_write_PKCS7rb_thread_check_intsEVP_PKEY_freeEVP_PKEY_base_idossl_ec_newossl_rsa_newossl_dh_newossl_dsa_newcPKeyossl_evp_pkey_typerb_obj_is_instance_ofEVP_PKEY_newePKeyErrorossl_generate_cb_2BN_GENCB_get_argrb_thread_call_with_gvlossl_generate_cb_stopd2i_PrivateKey_bioPEM_read_bio_PrivateKeyd2i_PUBKEY_bioPEM_read_bio_PUBKEYEVP_PKEY_missing_parametersEVP_PKEY_get0EC_KEY_get0_public_keyRSA_get0_keyDSA_get0_keyDH_get0_keyEVP_VerifyFinalEVP_PKEY_sizeEVP_SignFinalDupPKeyPtrEVP_PKEY_up_refmPKeyInit_ossl_rsaInit_ossl_dsaInit_ossl_dhInit_ossl_ecEVP_PKEY_get0_DHDH_get0_pqgDH_set0_keyDH_set0_pqgDH_sizeeDHErrorDHparams_dupEVP_PKEY_assigni2d_DHparamsPEM_write_bio_DHparamsDHparams_printDH_generate_parameters_exDH_newBN_GENCB_newBN_GENCB_setrb_thread_call_without_gvlBN_GENCB_freeDH_generate_keyDH_freeDH_checkDH_get0_enginePEM_read_bio_DHparamsd2i_DHparamsASN1_d2i_biocDHEVP_PKEY_get0_DSADSA_get0_pqgDSA_set0_keyDSA_set0_pqgeDSAErrord2i_DSAPrivateKeyi2d_DSAPrivateKeyi2d_DSA_PUBKEYPEM_write_bio_DSAPrivateKeyPEM_write_bio_DSA_PUBKEYDSA_printDSA_generate_parameters_exDSA_newDSA_generate_keyDSA_freePEM_read_bio_DSAPrivateKeyPEM_read_bio_DSA_PUBKEYd2i_DSAPrivateKey_biod2i_DSA_PUBKEY_biod2i_DSAPublicKeyPEM_ASN1_read_bioi2d_DSAPublicKeycDSAEC_GROUP_clear_freeEC_POINT_clear_freeEC_POINT_is_on_curvecEC_POINTeEC_GROUPeEC_POINTrb_obj_dupEC_POINT_dupEC_POINT_newEC_POINT_oct2pointEC_POINT_bn2pointEC_POINT_freePEM_write_bio_ECPKParametersi2d_ECPKParametersASN1_i2d_bioeECErrorEC_GROUP_set_seedrb_sym2idEC_GROUP_new_curve_GFpcEC_GROUPEC_GROUP_dupPEM_read_bio_ECPKParametersEC_GFp_nist_methodEC_GROUP_newd2i_ECPKParametersOBJ_sn2nidEC_GROUP_new_by_curve_nameEC_GROUP_set_asn1_flagEC_GROUP_set_point_conversion_formEC_GFp_simple_methodEC_GFp_mont_methodEVP_PKEY_get0_EC_KEYEC_KEY_printEC_KEY_check_keyEC_KEY_get0_private_keyPEM_write_bio_ECPrivateKeyi2d_ECPrivateKey_bioPEM_write_bio_EC_PUBKEYi2d_EC_PUBKEY_bioECDSA_verifyECDSA_sizeECDSA_signECDH_compute_keyEC_KEY_set_public_keyEC_KEY_set_private_keyEC_KEY_set_groupEC_KEY_dupEC_KEY_freeEC_KEY_newEC_KEY_new_by_curve_nameEC_KEY_set_asn1_flagEC_KEY_set_conv_formcECPEM_read_bio_ECPrivateKeyPEM_read_bio_EC_PUBKEYd2i_ECPrivateKey_biod2i_EC_PUBKEY_bioEC_get_builtin_curvesEC_POINT_point2octEC_POINT_set_to_infinityEC_POINT_invertEC_POINT_make_affineEC_POINT_is_at_infinityECPKParameters_printEC_GROUP_get_degreeEC_GROUP_get_seed_lenEC_GROUP_get0_seedEC_GROUP_get_point_conversion_formEC_GROUP_get_asn1_flagEC_GROUP_get_curve_nameEC_GROUP_get_cofactorEC_GROUP_get_orderEC_GROUP_set_generatorEC_GROUP_cmpEC_POINT_cmpEC_KEY_generate_keyEC_POINT_mulrb_ary_tmp_newEC_POINTs_mulruby_malloc_size_overflowEC_GROUP_get0_generatorEC_KEY_get0_groupEVP_PKEY_get0_RSARSA_get0_factorsRSA_get0_crt_paramsRSA_set0_crt_paramsRSA_set0_factorsRSA_set0_keyi2d_RSAPrivateKeyi2d_RSA_PUBKEYeRSAErrorPEM_write_bio_RSAPrivateKeyPEM_write_bio_RSA_PUBKEYRSA_printd2i_RSAPrivateKeyRSA_generate_key_exRSA_newRSA_freeRSAPublicKey_dupEVP_DigestVerifyInitRSA_pkey_ctx_ctrlEVP_DigestVerifyFinalRSA_sizeRSA_public_encryptRSA_public_decryptRSA_private_decryptRSA_private_encryptPEM_read_bio_RSAPrivateKeyPEM_read_bio_RSA_PUBKEYd2i_RSAPrivateKey_biod2i_RSA_PUBKEY_bioPEM_read_bio_RSAPublicKeyd2i_RSAPublicKey_bioEVP_DigestSignInitEVP_DigestSignFinalcRSARAND_statusrb_num2dblRAND_addRAND_seedRAND_byteseRandomErrorRAND_load_fileRAND_write_filemRandomSSL_freeSSL_get_ex_datarb_gc_markSSL_CIPHER_get_nameSSL_CIPHER_get_versionSSL_CIPHER_get_bitsossl_ssl_typeSSL_get_fdrb_io_taint_checkrb_io_check_closedrb_io_check_readablerb_io_check_writableSSL_set_fdSSL_CTX_freeSSL_CTX_get_ex_dataSSL_CTX_flush_sessionsSSL_CTX_ctrlSSL_get_servernameSSL_get_ex_data_X509_STORE_CTX_idxX509_STORE_CTX_get_ex_dataossl_verify_cb_callSSL_is_serverX509_STORE_CTX_get_error_depthX509_STORE_CTX_set_errorX509_STORE_CTX_get_current_certmSSLcSSLSessionossl_ssl_session_typerb_during_gcSSL_SESSION_up_refX509_get_pubkeyEVP_PKEY_cmpSSL_CTX_use_certificateSSL_CTX_use_PrivateKeySSL_CTX_get_security_levelSSL_CTX_get_ciphersSSL_CTX_get_optionsrb_uint2bigSSL_get0_next_proto_negotiatedSSL_get0_alpn_selectedSSL_ctrlSSL_get_client_CA_listSSL_get_verify_resultSSL_set_sessionSSL_session_reusedSSL_pendingSSL_state_stringrb_ruby_verbose_ptrSSL_state_string_longSSL_get_current_cipherSSL_get_versionSSL_get_peer_cert_chainSSL_get_peer_certificateSSL_get_certificateSSL_shutdownrb_hash_lookup2SSL_writeSSL_get_errorrb_io_wait_writable__errno_locationrb_funcallv_kwrb_io_wait_readablerb_sys_failX509_verify_cert_error_stringSSL_acceptSSL_connectSSL_CTX_clear_optionsSSL_CTX_set_optionsSSL_CTX_add_sessionSSL_CTX_set_cipher_listrb_StringTLS_methodSSL_CTX_newSSL_CTX_set_ex_dataSSL_CTX_set_security_levelSSL_CTX_remove_sessionstrncmprb_str_unlocktmprb_str_modifyrb_str_modify_expandrb_str_locktmpSSL_readrb_eof_errorSSL_CTX_set_tmp_dh_callbackSSL_CTX_set_cert_storeX509_STORE_up_refSSL_CTX_check_private_keySSL_CTX_add_client_CASSL_CTX_set_verifySSL_CTX_set_timeoutSSL_CTX_set_verify_depthSSL_CTX_set_next_protos_advertised_cbSSL_CTX_set_alpn_protosrb_obj_freezeSSL_CTX_set_session_id_contextSSL_CTX_callback_ctrlSSL_CTX_sess_set_new_cbSSL_CTX_sess_set_get_cbSSL_CTX_sess_set_remove_cbSSL_CTX_set_client_cert_cbSSL_CTX_load_verify_locationsSSL_CTX_set_alpn_select_cbSSL_CTX_set_next_proto_select_cbcSSLContextSSL_newSSL_set_ex_dataSSL_set_info_callbackrb_call_superSSL_set_SSL_CTXCRYPTO_get_ex_new_indexrb_mWaitReadablerb_mWaitWritableInit_ossl_ssl_sessioncSSLSocketSSL_SESSION_freei2d_SSL_SESSIONd2i_SSL_SESSIONPEM_read_bio_SSL_SESSIONSSL_get1_sessionSSL_SESSION_newSSL_SESSION_printSSL_SESSION_get_idSSL_SESSION_get_timeoutSSL_SESSION_set_timeoutSSL_SESSION_get_timeSSL_SESSION_set_timeSSL_SESSION_get_protocol_versionCRYPTO_memcmpPEM_write_bio_SSL_SESSIONX509_time_adj_exmX509Init_ossl_x509attrInit_ossl_x509certInit_ossl_x509crlInit_ossl_x509extInit_ossl_x509nameInit_ossl_x509reqInit_ossl_x509revokedInit_ossl_x509storeX509_get_default_cert_areaX509_get_default_cert_dirX509_get_default_cert_fileX509_get_default_cert_dir_envX509_get_default_cert_file_envX509_get_default_private_dirX509_ATTRIBUTE_freei2d_X509_ATTRIBUTEeX509AttrErrorX509_ATTRIBUTE_countX509_ATTRIBUTE_get0_typei2d_ASN1_SET_ANYOPENSSL_sk_freeASN1_TYPE_getX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_get0_objectX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_dupd2i_X509_ATTRIBUTEX509_ATTRIBUTE_set1_objectX509_ATTRIBUTE_newossl_x509attr_newcX509AttrGetX509AttrPtrX509_EXTENSION_freeX509_delete_extX509_add_exti2d_X509X509_dupPEM_read_bio_X509d2i_X509_bioX509_newX509_cmpX509_get_ext_countX509_get_extX509_check_private_keyX509_verifyX509_signX509_set_pubkeyX509_set1_notAfterX509_get0_notAfterX509_set1_notBeforeX509_get0_notBeforeGetX509NamePtrX509_set_issuer_nameX509_get_issuer_nameX509_set_subject_nameX509_get_subject_nameX509_get_serialNumberX509_set_serialNumberX509_get0_tbs_sigalgX509_set_versionX509_get_versionX509_printPEM_write_bio_X509X509_up_refX509_CRL_delete_extX509_CRL_add_exteX509CRLErrorcX509RevX509_CRL_get_REVOKEDX509_REVOKED_freeDupX509RevokedPtrX509_CRL_add0_revokedX509_CRL_sortossl_x509revoked_newX509_CRL_get0_signatureX509_CRL_dupPEM_read_bio_X509_CRLd2i_X509_CRL_bioX509_CRL_newX509_CRL_get_ext_countX509_CRL_get_extX509_CRL_printPEM_write_bio_X509_CRLi2d_X509_CRL_bioX509_CRL_verifyX509_CRL_signX509_CRL_set1_nextUpdateX509_CRL_get0_nextUpdateX509_CRL_set1_lastUpdateX509_CRL_get0_lastUpdateX509_CRL_set_issuer_nameX509_CRL_get_issuerX509_CRL_set_versionX509_CRL_get_versioncX509CRLi2d_X509_EXTENSIONeX509ExtErrorX509_EXTENSION_get_objectX509_EXTENSION_get_dataASN1_OCTET_STRING_setX509_EXTENSION_dupd2i_X509_EXTENSIONOBJ_ln2nidX509V3_set_nconfX509V3_EXT_nconf_nidX509V3_EXT_printASN1_STRING_printX509_EXTENSION_get_criticalX509_EXTENSION_set_objectGetX509ReqPtrX509V3_set_ctxX509_EXTENSION_newX509_EXTENSION_set_criticalcX509ExtFactoryX509_NAME_freei2d_X509_NAMEeX509NameErrorX509_NAME_entry_countX509_NAME_ENTRY_get_dataX509_NAME_get_entryX509_NAME_ENTRY_get_objecti2t_ASN1_OBJECTX509_NAME_print_exrb_utf8_encindexrb_enc_associate_indexrb_utf8_encodingrb_enc_sprintfX509_NAME_dupcX509Namerb_const_getd2i_X509_NAMEX509_NAME_newX509_NAME_cmpX509_NAME_onelineX509_NAME_hash_oldX509_NAME_hashX509_NAME_add_entry_by_txtrb_mComparablerb_hash_set_ifnoneX509_REQ_freeX509_REQ_delete_attrX509_REQ_add1_attreX509ReqErrorX509_REQ_get0_signaturei2d_X509_REQX509_REQ_dupPEM_read_bio_X509_REQd2i_X509_REQ_bioX509_REQ_get_attr_countX509_REQ_get_attrX509_REQ_verifyX509_REQ_signX509_REQ_set_pubkeyX509_REQ_get_pubkeyX509_REQ_set_subject_nameX509_REQ_get_subject_nameX509_REQ_set_versionX509_REQ_printPEM_write_bio_X509_REQX509_REQ_newX509_REQ_get_versioncX509Reqi2d_X509_REVOKEDeX509RevErrorX509_REVOKED_delete_extX509_REVOKED_add_extX509_REVOKED_dupX509_REVOKED_get_ext_countX509_REVOKED_get_extX509_REVOKED_set_revocationDateX509_REVOKED_get0_revocationDateX509_REVOKED_set_serialNumberX509_REVOKED_get0_serialNumberX509_REVOKED_newX509_STORE_CTX_get0_untrustedX509_STORE_CTX_get0_certX509_STORE_CTX_freeX509_STORE_freeX509_STORE_get_ex_dataX509_LOOKUP_fileX509_STORE_add_lookupX509_LOOKUP_ctrleX509StoreErrorX509_LOOKUP_hash_dircX509StoreContextX509_STORE_CTX_get_errorX509_STORE_CTX_set_timeX509_STORE_CTX_initX509_STORE_CTX_set_flagsX509_STORE_CTX_get0_current_crlX509_STORE_CTX_get0_chainrb_block_procX509_STORE_CTX_set_ex_dataX509_verify_certX509_STORE_CTX_newX509_STORE_add_crlX509_STORE_add_certX509_STORE_set_default_pathsX509_STORE_set_flagsX509_STORE_set_ex_dataX509_STORE_set_verify_cbX509_STORE_newX509_STORE_set_trustX509_STORE_set_purposeX509_STORE_CTX_set_purposeX509_STORE_CTX_set_trustX509_STORE_CTX_get0_storecX509Storelibruby.so.2.7libssl.so.1.1libcrypto.so.1.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.4GLIBC_2.7GLIBC_2.14GLIBC_2.2.5OPENSSL_1_1_0OPENSSL_1_1_1/opt/alt/ruby27/lib64		�I`ti		�Iii
Jii
J���Jui	!J�I m-J�Im;Jm-Jp�%0�x�%���%��%��%g���%��%`��%�7`�%_�p�%�V��%����%�` �%x�0�% o��%����%І��%y���% �@�%��P�%З��%����%���%���%�`�%��p�%@���%����%�� �%j�0�%0���%����%@���%����%p�@�%n�P�%���%����%�F�%���%�F`�%S�p�%����%����%����%����%����%����%���%� �%��(�%�0�%���%x���%���%o
��%�1@�%3P�%0>��%
��%�R�%��%@o`�%�p�%�e��%D��%�x �%�0�%`���%���%`���%���%����%@�@�%�H�%��P�%����%����%����%:���%B���%M���%Z��%*��%_� �%q�0�%z�@�%�P�%��`�%��p�%����%����%����%����%����%����%����%����%��%��%� �%#�0�%3�@�%A�P�%M�`�%[�p�%k���%|���%T�%T��% �%��%��%��%���%���%��%��%��%��%�`�%�H�%���%�h�%N��%N��%,��%,��%��%���%�(�%���%&P�%&��%��%���%���%��%���%��%��%(�%p�%8�%�h�%�H�%���%�X�%	��%	h�%���%���%���%���%��%���%���%��%��%��%(��%���%���%���%M��%6�%/�%a �%e(�%f0�%m8�%�@�%9H�%�P�%sX�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%C��%���%���%��%���%���%���%��%F�%��%��%� �%�(�%0�%H8�%@�%RH�%�X�%K`�%�p�%�x�%���%��%���%B��%���%1��%���%r��%���%��%2��%
�%��%'�%� �%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%p�%�x�%���%���%W��%D��%���%)��%E��%#��%���%��%���%��%��%I��%(��%��%O�% �%�(�%�0�%�8�%[@�%@H�%eP�%nX�%zh�%�p�%�x�%���%���%.��%��%���%���%A��%���%���%���%���%���%Q��%��%>�%��%�%$ �%"(�%V0�%�8�%�@�%9H�%BP�%�X�%�`�%Jh�%x�%[��%���%���%g��%h��%��%p��%5��%x��%���%P��%���%�% �%(�%0�%8�%@�%H�%%P�%X�%`�%	h�%
p�%<x�%��%��%
��%���%��%��%��%��%��%��%��%��%��%��%��%��%�%�%�% �%! �%"(�%#0�%$8�%%@�%&H�%�P�%'X�%)`�%*h�%+p�%,x�%-��%.��%/��%0��%1��%2��%3��%4��%5��%6��%7��%8��%9��%:��%;��%<��%=�%��%>�%?�%� �%@(�%A0�%B8�%C@�%DH�%EP�%FX�%G`�%Hh�%Ip�%Jx�%K��%L��%N��%O��%P��%Q��%R��%S��%T��%U��%V��%W��%X��%Y��%Z��%[��%\�%]�%^�%_�%` �%b(�%c0�%�8�%d@�%eH�%fP�%gX�%h`�%ih�%jp�%kx�%l��%m��%n��%o��%p��%q��%r��%t��%u��%v��%w��%x��%y��%z��%{��%|��%}�%~�%�%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%=@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%��%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%G��%���%���%���%���%���%���%���%���%���%���%��%��%��%��% �%(�%0�%8�%@�%H�%P�%X�%`�%	h�%
p�%x�%��%
��%��%��%��%��%��%��%��%���%��%S��%��%��%��%��%�%�%�%�% �%�(�%0�% 8�%!@�%"H�%#P�%$X�%%`�%&h�%'p�%�x�%(��%)��%*��%+��%,��%-��%.��%/��%0��%1��%2��%3��%4��%5��%6��%7��%8�%9�%:�%;�% �%<(�%=0�%>8�%?@�%@H�%AP�%BX�%C`�%Dh�%�p�%Ex�%:��%F��%���%G��%H��%I��%M��%J��%���%K��%L��%M��%N��%O��%P��%Q��%R�%S�%T�%U�%V �%W(�%X0�%Y8�%Z@�%[H�%\P�%]X�%^`�%_h�%`p�%ax�%b��%c��%d��%e��%f��%g��%h��%i��%j��%k��%l��%m��%n��%o��%p��%��%q�%s�%t�%u�%v �%w(�%x0�%!8�%y@�%zH�%{P�%|X�%}`�%~h�%p�%�x�%;��%���%���%���%���%���%���%���%���%��%���%���%���%���%��%���%��%��%��%��%� �%�(�%�0�%"8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%���%��%��%��%��%� �%(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%��%��%��%��%��%��%���%��%��%��%	��%���%
��%�%�%
�%�%� �%(�%0�%8�%@�%H�%P�%X�%`�%h�%p�%x�%8��%��%���%��%��% ��%3��%!��%0��%"��%#��%$��%%��%&��%'��%)��%*�%�%+�%,�%- �%.(�%/0�%08�%1@�%2H�%3P�%4X�%5`�%6h�%7p�%�x�%8��%9��%:��%;��%<��%=��%>��%?��%@��%A��%B��%C��%D��%E��%��%F��%G�%H�%��%�%I �%J(�%K0�%L8�%M@�%NH�%OP�%PX�%Q`�%h�%Rp�%Sx�%T��%U��%V��%W��%X��%Y��%Z��%\��%]��%^��%_��%`��%a��%b��%c��%d��%e�%f�%g�%h�%i �%j(�%k0�%l8�%m@�%oH�%pP�%qX�%r`�%sh�%tp�%ux�%v��%w��%x��%y��%{��%|��%}��%~��%��%���%���%���%���%���%���%���%(�%��%��%��%� �%�(�%�0�%8�%�@�%�H�%7P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%.��%���%���%���%���%��%��%��%��%��%��%���%��%
�%��%��%U �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%��%��%��%��%���%��%��%��%��%� �%�(�%�0�%*8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%��%��%��%��%���%��%��%��%��%� �%�(�%�0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%��%��%��%��%���%�%�%�%�% �%(�%0�%8�%@�%	H�%
P�%X�%`�%
h�%p�%x�%��%��%���%��%��%��%��%��%��%�%�%�%�%�%�%��% �%!�%#�%��%$ �%�(�%%0�%&8�%'@�%(H�%)P�%X�%*`�%+h�%�p�%,x�%-��%.��%/��%0��%1��%2��%3��%4��%5��%��%6�%7�%8�%:�%;�%<��%=�%>�%?�%@�%A �%L(�%C0�%D8�%E@�%FH�%GP�%�X�%H`�%Ih�%Jp�%Kx�%L��%M��%N��%O��%P��%���%Q��%R��%S��%T�%U�%V�%W�%X�%Y�%Z��%?�%\�%]�%^�%_ �%4(�%`0�%a8�%b@�%cH�%dP�%�X�%e`�%fh�%p�%+x�%i��%j��%k��%l��%m��%n��%o��%q��%r��%s�%-�%t�%u�%v�%w�%y��%z�%��%{�%|�%} �%~(�%0�%�8�%�@�%�H�%�P�%�X�%�`�%�h�%�p�%�x�%���%���%���%���%���%���%���%���%���%��%��%���H��H���$H��t��H����5ҥ$�%ӥ$��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h�������h�������h�������h������h������h������h������h������h���q���h���a���h���Q���h���A���h���1���h���!���h������h������h��������h�������h�������h������h������h������h������h������h��q����h��a����h	��Q����h
��A����h��1����h��!����h
������h������h�������h�������h�������h������h������h������h������h������h��q����h��a����h��Q����h��A����h��1����h��!����h������h������h�������h �������h!�������h"������h#������h$������h%������h&������h'��q����h(��a����h)��Q����h*��A����h+��1����h,��!����h-������h.������h/�������h0�������h1�������h2������h3������h4������h5������h6������h7��q����h8��a����h9��Q����h:��A����h;��1����h<��!����h=������h>������h?�������h@�������hA�������hB������hC������hD������hE������hF������hG��q����hH��a����hI��Q����hJ��A����hK��1����hL��!����hM������hN������hO�������hP�������hQ�������hR������hS������hT������hU������hV������hW��q����hX��a����hY��Q����hZ��A����h[��1����h\��!����h]������h^������h_�������h`�������ha�������hb������hc������hd������he������hf������hg��q����hh��a����hi��Q����hj��A����hk��1����hl��!����hm������hn������ho�������hp�������hq�������hr������hs������ht������hu������hv������hw��q����hx��a����hy��Q����hz��A����h{��1����h|��!����h}������h~������h�������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h���q����h���a����h���Q����h���A����h���1����h���!����h�������h�������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h	��Q�����h
��A�����h��1�����h��!�����h
�������h�������h��������h��������h��������h�������h�������h�������h�������h�������h��q�����h��a�����h��Q�����h��A�����h��1�����h��!�����h�������h�������h��������h ��������h!��������h"�������h#�������h$�������h%�������h&�������h'��q�����h(��a�����h)��Q�����h*��A�����h+��1�����h,��!�����h-�������h.�������h/��������h0��������h1��������h2�������h3�������h4�������h5�������h6�������h7��q�����h8��a�����h9��Q�����h:��A�����h;��1�����h<��!�����h=�������h>�������h?��������h@��������hA��������hB�������hC�������hD�������hE�������hF�������hG��q�����hH��a�����hI��Q�����hJ��A�����hK��1�����hL��!�����hM�������hN�������hO��������hP��������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q�����hX��a�����hY��Q�����hZ��A�����h[��1�����h\��!�����h]�������h^�������h_��������h`��������ha��������hb�������hc�������hd�������he�������hf�������hg��q�����hh��a�����hi��Q�����hj��A�����hk��1�����hl��!�����hm�������hn�������ho��������hp��������hq��������hr�������hs�������ht�������hu�������hv�������hw��q�����hx��a�����hy��Q�����hz��A�����h{��1�����h|��!�����h}�������h~�������h��������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q�����h���a�����h���Q�����h���A�����h���1�����h���!�����h��������h��������h���������h���������h���������h��������h��������h��������h��������h��������h���q������%Mj$D���%Ej$D���%=j$D���%5j$D���%-j$D���%%j$D���%j$D���%j$D���%
j$D���%j$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%�i$D���%}i$D���%ui$D���%mi$D���%ei$D���%]i$D���%Ui$D���%Mi$D���%Ei$D���%=i$D���%5i$D���%-i$D���%%i$D���%i$D���%i$D���%
i$D���%i$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%�h$D���%}h$D���%uh$D���%mh$D���%eh$D���%]h$D���%Uh$D���%Mh$D���%Eh$D���%=h$D���%5h$D���%-h$D���%%h$D���%h$D���%h$D���%
h$D���%h$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%�g$D���%}g$D���%ug$D���%mg$D���%eg$D���%]g$D���%Ug$D���%Mg$D���%Eg$D���%=g$D���%5g$D���%-g$D���%%g$D���%g$D���%g$D���%
g$D���%g$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%�f$D���%}f$D���%uf$D���%mf$D���%ef$D���%]f$D���%Uf$D���%Mf$D���%Ef$D���%=f$D���%5f$D���%-f$D���%%f$D���%f$D���%f$D���%
f$D���%f$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%�e$D���%}e$D���%ue$D���%me$D���%ee$D���%]e$D���%Ue$D���%Me$D���%Ee$D���%=e$D���%5e$D���%-e$D���%%e$D���%e$D���%e$D���%
e$D���%e$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%�d$D���%}d$D���%ud$D���%md$D���%ed$D���%]d$D���%Ud$D���%Md$D���%Ed$D���%=d$D���%5d$D���%-d$D���%%d$D���%d$D���%d$D���%
d$D���%d$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%�c$D���%}c$D���%uc$D���%mc$D���%ec$D���%]c$D���%Uc$D���%Mc$D���%Ec$D���%=c$D���%5c$D���%-c$D���%%c$D���%c$D���%c$D���%
c$D���%c$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%�b$D���%}b$D���%ub$D���%mb$D���%eb$D���%]b$D���%Ub$D���%Mb$D���%Eb$D���%=b$D���%5b$D���%-b$D���%%b$D���%b$D���%b$D���%
b$D���%b$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%�a$D���%}a$D���%ua$D���%ma$D���%ea$D���%]a$D���%Ua$D���%Ma$D���%Ea$D���%=a$D���%5a$D���%-a$D���%%a$D���%a$D���%a$D���%
a$D���%a$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%�`$D���%}`$D���%u`$D���%m`$D���%e`$D���%]`$D���%U`$D���%M`$D���%E`$D���%=`$D���%5`$D���%-`$D���%%`$D���%`$D���%`$D���%
`$D���%`$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%�_$D���%}_$D���%u_$D���%m_$D���%e_$D���%]_$D���%U_$D���%M_$D���%E_$D���%=_$D���%5_$D���%-_$D���%%_$D���%_$D���%_$D���%
_$D���%_$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%�^$D���%}^$D���%u^$D���%m^$D���%e^$D���%]^$D���%U^$D���%M^$D���%E^$D���%=^$D���%5^$D���%-^$D���%%^$D���%^$D���%^$D���%
^$D���%^$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%�]$D���%}]$D���%u]$D���%m]$D���%e]$D���%]]$D���%U]$D���%M]$D���%E]$D���%=]$D���%5]$D���%-]$D���%%]$D���%]$D���%]$D���%
]$D���%]$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%�\$D���%}\$D���%u\$D���%m\$D���%e\$D���%]\$D���%U\$D���%M\$D���%E\$D���%=\$D���%5\$D���%-\$D���%%\$D���%\$D���%\$D���%
\$D���%\$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%�[$D���%}[$D���%u[$D���%m[$D���%e[$D���%][$D���%U[$D���%M[$D���%E[$D���%=[$D���%5[$D���%-[$D���%%[$D���%[$D���%[$D���%
[$D���%[$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%�Z$D���%}Z$D���%uZ$D���%mZ$D���%eZ$D���%]Z$D���%UZ$D���%MZ$D���%EZ$D���%=Z$D���%5Z$D���%-Z$D���%%Z$D���%Z$D���%Z$D���%
Z$D���%Z$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%�Y$D���%}Y$D���%uY$D���%mY$D���%eY$D���%]Y$D���%UY$D���%MY$D���%EY$D���%=Y$D���%5Y$D���%-Y$D���%%Y$D���%Y$D���%Y$D���%
Y$D���%Y$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%�X$D���%}X$D���%uX$D���%mX$D���%eX$D���%]X$D���%UX$D���%MX$D���%EX$D���%=X$D���%5X$D���%-X$D���%%X$D���%X$D���%X$D���%
X$D���%X$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%�W$D���%}W$D���%uW$D���%mW$D���%eW$D���%]W$D���%UW$D���%MW$D���%EW$D���%=W$D���%5W$D���%-W$D���%%W$D���%W$D���%W$D���%
W$D���%W$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%�V$D���%}V$D���%uV$D���%mV$D���%eV$D���%]V$D���%UV$D���%MV$D���%EV$D���%=V$D���%5V$D���%-V$D���%%V$D���%V$D���%V$D���%
V$D���%V$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%�U$D���%}U$D���%uU$D���%mU$D���%eU$D���%]U$D���%UU$D���%MU$D���%EU$D���%=U$D���%5U$D���%-U$D���%%U$D���%U$D���%U$D���%
U$D���%U$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%�T$D���%}T$D���%uT$D���%mT$D���%eT$D���%]T$D���%UT$D���%MT$D���%ET$D���%=T$D���%5T$D���%-T$D���%%T$D���%T$D���%T$D���%
T$D���%T$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%�S$D���%}S$D���%uS$D���%mS$D���%eS$D���%]S$D���%US$D���%MS$D���%ES$D���%=S$D���%5S$D���%-S$D���%%S$D���%S$D���%S$D���%
S$D���%S$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%�R$D���%}R$D���%uR$D���%mR$D���%eR$D���%]R$D���%UR$D���%MR$D���%ER$D���%=R$D���%5R$D���%-R$D���%%R$D���%R$D���%R$D���%
R$D���%R$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%�Q$D���%}Q$D���%uQ$D���%mQ$D���%eQ$D���%]Q$D���%UQ$D���%MQ$D���%EQ$D���%=Q$D���%5Q$D���%-Q$D���%%Q$D���%Q$D���%Q$D���%
Q$D���%Q$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%�P$D���%}P$D���%uP$D���%mP$D���%eP$D���%]P$D���%UP$D���%MP$D���%EP$D���%=P$D���%5P$D���%-P$D���%%P$D���%P$D���%P$D���%
P$D���%P$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%�O$D���%}O$D���%uO$D���%mO$D���%eO$D���%]O$D���%UO$D���%MO$D���%EO$D���%=O$D���%5O$D���%-O$D���%%O$D���%O$D���%O$D���%
O$D���%O$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%�N$D���%}N$D���%uN$D���%mN$D���%eN$D���%]N$D���%UN$D���%MN$D���%EN$D���%=N$D���%5N$D���%-N$D���%%N$D���%N$D���%N$D���%
N$D���%N$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%�M$D���%}M$D���%uM$D���%mM$D���%eM$D���%]M$D���%UM$D���%MM$D���%EM$D���%=M$D���%5M$D���%-M$D���%%M$D���%M$D���%M$D���%
M$D���%M$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$D���%�L$DH��H�=8
1�����`H�|$uL�t$H�T$H��H�=�1�����8H�=�"1��t�����H�=h"1����^��H�l$ �w�1�H�=�"�F��H��t-D��H�l$ H�D$(A�����H�=�!1����H�l$ �7�H�D$ H�D$(���H�=2"1������+�H�=�!1�������H�l$���1�H�=B"����H��t-D��H�l$H�D$A���-�H�=T!1����H�l$��H�D$H�D$��H�=�!1��r����H�=f!1����\��H�l$��1�H�=�!�D��H��t-D��H�l$H�D$A����H�=� 1����H�l$�u�H�D$H�D$���H�$H�=,!1�D�D$����H�4$D�D$���H�$H�=G!1�D�D$����D�D$H�4$D��A����1�H�=V �$���H�D$0�$�\�1�H�=� �$���}��H�D$0�$�;�H�= 1��b��L�l$ ��H�=� 1��t$�F���t$�	�H�=� 1��t$�+���t$�����H�= 1����
��L�l$ �1�H�=�������H�|$tSH�|$���H�|$I��u+H�= 1������]41�H�=i���H�D$�4H�= 1�����54H�D$�E41�H�=����|��H�|$tSH�|$���H�|$I��u+H�=�1��Q���51�H�=��>��H�D$�c5H�=�1��&���5H�D$�5H�=�1��	��H�l$�?H�=�1�������H�l$�o?H�=1��T$�����T$�?1�H�=8�T$���H��T$t��H�l$H�D$ ���?H�D$H�D$ �?H�=11��z��L�t$ �EH�=i1����_��L�t$ �DH�=�1��G���E1�H�=�H�T$�/��M��H�T$tL�t$ I�m���:B�9BH�D$ A���H�=�1�������L�l$(�.�H�=1������I�H�=@1�����S�M�����H�D$(I���4�H�=M1����L�l$(���f.�f�H�=QG$H�JG$H9�tH�v($H��t	�����H�=!G$H�5G$H)�H��H��H��?H�H�tH��($H��t��fD�����=�F$u+UH�=�$$H��tH�=n$����d�����F$]������w������H�]%$H���H��H��H��HE�H�
:%$H��ff.���H��1����f���H��dH�%(H�D$1�����H�$H��tH������H�$H�T$dH3%(uH���������S���H����1�H���V���H���>��H��H���s����H��u�H��[�@��H���S����H�H��H�Ѓ��f���H��H��H�=�#$��f.���H��dH�%(H�D$1�H�t$�D$�&����|$��uH�T$dH3%(u
H���������ff.�@��AUATUSH��H��t}H�����A�ą�xNHc��F��I��E��t+1�@��H������H���S��L��H���h�D9�u�H��L��[]A\A]�DH�q#$H�8��H��[]A\A]�0��H�Q#$A�H�8u�H��$$��H�=�H�����H��	�H�=v����H�;A�Z1�H�
iH�i�����Y���@H�i$$��H�= H����H���H�=,���H�;A�Z1�H�
H�����������AUATUSH��H��t}H���E��A�ą�xNHc�����I��E��t+1�@��H������H������L��H����D9�u�H��L��[]A\A]�DH�"$H�8��H��[]A\A]���H��!$A�H�8u�H�^#$��H�=H���H��	�H�=��H�;A�[1�H�
�H������Y���@H��"$��H�=�H��H�H���H�=��/�H�;A�[1�H�
�H������������AUATUSH��H��t}H������A�ą�xNHc��f��I��E��t+1�@��H������H�����L��H����D9�u�H��L��[]A\A]�DH�� $H�8��H��[]A\A]�P��H�q $A�H�8u�H��!$��H�=�H��=�H��	�H�=��$�H�;A�\1�H�
�H������Y���@H��!$��H�=@H����H���H�=L��H�;A�\1�H�
$H�$����������AUI��H�=`���ATI��UH��SH��dH�%(H�D$1�H�T$��H��M��tH�D$A�$��ulM��tH�{H� tH�{H��uAH�L$dH3%(H��uEH��[]A\A]��D$��t����A�����H��L������������ff.����UHc�SH��H��dH�%(H�D$1�H�T$��H�ߺ~H�5��H�����|$��uH�L$dH3%(H��uH��[]��8��c����H��������?H9�wN1�L�
�H��t?��A�ȃ�A��A�	E��G��LFD�FH��H9�u��f.��PH�
g��H�5R�H�=p����ff.�@��AWAVLc�AUATUH��SH��dH�%(H�D$1�H�����������JH��؃����9�� t<H�YI9��'H�qH��u?��H�|$dH3<%(�{H��[]A\A]A^A_ÐH����I9���H�qH��t�H��H�������f.���������tu��L�d$Mc�M�I��A��L��L��H�=����~��T$��uvH��tzH�H�ځ� t"H�XI9�|AH�pH���A���H�p�8���H�������1ɉ�D��H���������@D��H�=^�1������r���f�������������@H�9$H�8u�H��$��H�=s�H���H��"�H�=����H�;A��1�H�
W�H�W�����������q���������H��H�5�<$1�1�dH�%(H�D$1����H��H�$�|��H�$H�T$dH3%(uH����~��ff.���SH�5�<$H������uH��[�H��[������AVAUATUSH�� dH�%(H�D$1�H�$H�8uSL�l$L�d$H��H�\$L�5��L��L��H��H���Y���H��t)1�H���z�H��ID�D$�X��i�諷��H�D$dH3%(u
H�� []A\A]A^����f���ATUH��H��SH���H�T$0H�L$8L�D$@L�L$H��t7)D$P)L$`)T$p)�$�)�$�)�$�)�$�)�$�dH�%(H�D$1�H��$��$H�D$H�D$ �D$0H�D$H��t.H�����H�����H��u1H��tH��H�����H���s������H��uJ1�1�耷��H����H���c�I��H��t6H��� u@������u>M��tOL��H���������H���'�I��M��t6L������H����H�{��뾺H�5��H������L�%���D���f���ff.�@��AU�ATUH��SH���e��`���H����I��1��HH����H9�}NH��H��H���e�I��H�C$L��H�0�P��H��t3L�����L��H����H�E�� u�H�EH9�|�H��L��[]A\A]�H�5!$L������H�J$H�5{�H�81�����H�2$1�H�81����ff.���H��H��H�|$H��tH�|$����H�D$H� u
H���DH�x~�H��$�H�5�H�81�葱�����SH��H�����t�����t.H��[Ð1������u�H��$H�5��H�81��M���D�������u�H�[$H�5Q�H�81��"���f���S1�1�貽������H�=r�����H�'$H��H������H�=W����H�;H�55H������� H�=E��ȴ��H�;H�5+�H������1��O��H���g��H�;H�5�H�����H�;�!  H�5����H�;�H�5��}��H�;1�H��H�5����H�;�H�����H�5�����H�k$H�;H�5��H�����H�=2$H�����H�=3$H�����H�;1�H���H�5����H�;�H���H�5���|��H��$H�;1�H�5���d��H�=���H��H�	7$�L������B���������Ӹ������ɽ���T�读����������˴��膻��[�0��H�A$H�5��H�81��8���H��H�|$H�|$��H�|$H� uH��1����H��tH���f.�H�1��e��H��u�H�|$H� t2H���D��H��u�H��$H�T$H�5Y�H�81�蒮��f�H����f.����H�=���{���ff.���AT1�UH�-�6$SH��H�=���P���H�5�6$H�ߺI���Y�H�5�6$L��H���G�H�5�6$H�ߺ�3�H�5t6$H��H���!�H�5R6$H��1���H��[]A\����USH��H�5G6$dH�%(H�D$1��Z��H�����H�T$H�=FH��H���k��H��H��蠹���|$��uH�L$dH3%(H��uH��[]��i�����@��AT�UH��1�S��H�0H��� ��H��H�x��H�������P��������H�Hc�� tUH�SH9�~7D�`H��Ic����H�{H� tH�{�H��D�������~?Hc�H��轿��H��[]A\�DH������H�xHclj�H9�u!H�{�]���H��$H�5?�H�81��a����l���ff.����H��H�5�4$dH�%(H�D$1�����H��H�$��H�����Ǹ��t
�H���H������H�T$dH3%(uH����&��fD��H��H�5Y4$dH�%(H�D$1��l��H��H�$�@�H�����Ǹ��t
蘬��H���`��H�T$dH3%(uH������fD��UH��S��H��H�5�3$H��tH��$H���H�8H��[]����H�=�
���H��H�M3$��ff.���UH��S��H��H�5"3$H��tH�~$H���H�8H��[]����H�=y
�G��H��H��2$��ff.���UH��S��H��H�5�2$H��tH��$H���H�8H��[]�;���H�=
����H��H�}2$��ff.���UH��S��H��H�5R2$H��tH�.$H���H�8H��[]�����H�=�	���H��H�2$��ff.���UH��S��H��H�5�1$H��tH�$H���H�8H��[]�{���H�=Y	�'��H��H��1$��ff.���UH��S��H��H�5�1$H��tH�^$H���H�8H��[]����H�=�����H��H�E1$��ff.���UH��S��H��H�51$H��tH��
$H���H�8H��[]����H�=��g��H��H��0$��ff.���UH��S��H��H�5�0$H��tH�$H���H�8H��[]�[���H�=9���H��H�u0$��ff.���UH��S��H��H�5J0$H��tH��$H���H�8H��[]����H�=����H��H�
0$��ff.���UH��S��H��H�5�/$H��tH�n$H���H�8H��[]����H�=y�G��H��H��/$��ff.���UH��S��H��H�5z/$H��tH��
$H���H�8H��[]�;���H�=����H��H�=/$��ff.���UH��S��H��H�5/$H��tH�&
$H���H�8H��[]�����H�=����H��H��.$��ff.���UH��S��H��H�5�.$H��tH��$H���H�8H��[]�{���H�=Y�'��H��H�m.$��ff.���UH��S��H��H�5B.$H��tH��$H���H�8H��[]����H�=�����H��H�.$��ff.���UH��S��H��H�5�-$H��tH��
$H���H�8H��[]����H�=��g��H��H��-$��ff.���UH��S��H��H�5r-$H��tH��$H���H�8H��[]�[���H�=9���H��H�5-$��ff.���UH��S��H��H�5
-$H��tH�$H���H�8H��[]����H�=����H��H��,$��ff.���UH��S��H��H�5�,$H��tH�f$H���H�8H��[]����H�=y�G��H��H�e,$��ff.���UH��S��H��H�5:,$H��tH��
$H���H�8H��[]�;����H�=����H��H��+$��ff.���UH��S��H��H�5�+$H��tH��$H���H�8H��[]�����H�=����H��H��+$��ff.���UH��S��H��H�5j+$H��tH��	$H���H�8H��[]�{����H�=Y�'��H��H�-+$��ff.���UH��S��H��H�5+$H��tH��
$H���H�8H��[]�����H�=�����H��H��*$��ff.���UH��S��H��H�5�*$H��tH��
$H���H�8H��[]黿���H�=��g��H��H�]*$��ff.���USH��H��H�5D+$H�-
+$�`��H��E1�E1�1�1�H���{��H��H��[]Ð��Sf�H��H�Ā�WdH�%(H�D$x1�H��)$)D$)D$ H�D$0��t>����1�H�=]�����H�\$xdH3%(��H��[��H�pH�PH�HVH�PL�HL�@H�5��1�舼��^_���-���N�D$��D��Hc$��D$H�T�LH�pH�PH�HVH�PL�HL�@H�5��1��(���ZY�������
Hc$�D$H�TH�H�5�)$H�T$hH�DH�D$@HcD$H�DH�D$HHcD$H�DH�D$PHcD$H�DH�D$XHcD$H�DH�D$`H��tH�$H�L$@�H�8�%������H�=��_��H��H�)$��Hc$l�D$H�T�R���f��$����@�$�D$��$����ƿ��H��$H�SH�5h�H�81��j���H��$H�SH�5��H�81��N���ff.���USH��H��tC1��
t1�D���H��H��tFH���$��H��H�����H��H��[]��胰��H����H�W$H�5�H�81��֟��H��$1�H�81��ß����ATI��UH��SH����t��u_H������tV�����uLH�5($H�����H�5($L��H�����H�5�'$H��H�����H�5�'$H��1��~��H��[]A\�H�o$H�5��H�81��.���ff.���H��(H�|$H�T$H�t$H�L$���H�|$���H�|$�{��H�T$H� uMH�t$H��H� uMH��H�|$H� uH��萸����t4�H��(�f�H���f.�H�t$H�RH� t�H�v�H��$1�H�81��e���DH��H�5�&$���H��t$H�Ǩu�ε��H���f�����H���H�O$H�5y�H�81�����ff.�S@��ti@������������H����@����H�_�'�H�=	&$H�����H��u;H���#��H��H��uڸ����[�H�����u�H��t=H��u�H��$H���H�Ǩt	�T���[�f����[�f�H��$H��H��$H��H�$H��H��$H��H�i$H��q����AWAVI��AUA��ATA��UH��SH��8dH�%(H�D$(1���t�ҸDE�H�5H%$L���x��H���nH;_%$�aH;J%$��H;5%$�WH; %$���D$�L������L���D$�n���H�M�D$�� �]H����I��Ic�Ic�I9��vH�5�$$L������H9�$$�8E1�E��A��A���|$��h�T$D��D��D�T$軿��D�T$�T$�ƉD$D��D�T$蟿��1�H�H��H�D$�~���D�T$D�\$I��H�@I� tI�GL�t$ D�D$D��D�֋L$L��H�D$ 蟹���L$D��E1���L��苹��H�uH�E tH�uH�|$ H���KH�H�|$ E���I�GI� tI�GH)�H;|$�eH�T$(dH3%(L���AH��8[]A\A]A^A_�DL�}�����T$D��D��衾��1�H�H��H�D$耬��I��H�@I� tI�GL�t$ D�D$�L$��D��L��H�D$ 謸��H�uH�E tH�uH�|$ H����H�H�|$ E���!���L���s���H�|$ ����f��D$����D$����L���8���L���0���H�|$ ����fDH������H�|$ ���fDH����H�|$ �j���fD�D$@�Q�������L���֙��H�
����H�5-�H�=4�藪��H��$H�5�H�81�菙��H��$H�5��H�81��w������AWAVI��AUATUSH��(H�5�!$dH�%(H�D$1�L�l$����H�5�!$L��H��H����E1����D$����H�
���H���H�����1�1�H������I���aH����I9��}H�CJ�<�H�|$H��tH�_$H�0���H��uBH�|$舥��L��I��H�D$跪��H�t$L�����H��� u�L;{}!H�C �fDH��� uHH�CH��L9�uD�T$L��L���7���H�T$dH3%(u8H��([]A\A]A^A_��H�����H�@$H�5��H�81�����:���f.���AUATI��UH��S��H��hdH�%(H�D$X1�H�D$H�D$0H�D$H�D$8H�D$H�D$@H�D$ H�D$H荙��H�D$(�������^1�I�$�H�D$H�D$0H�x�$f�H��t
Lc�O��L���H��H9�tH�P9��H��t�H��H�H9�u�9���H���wH������A��������Hc�H��$H�D$A�H�TH�T$H�\$ H�5K$H������H�T$H�5?$H������H�5$L��H������H�5$H��H�����H�5�$1�H�����A����H�t$XdH34%(H���DH��h[]A\A]�fDH�T$H���AL�l$I����A��t'A���
I�������A�E������H�\$ H��uH��$H�\$ ��������uH�����t��������H��#H�5�H�81�評��f�H�|$(����z�����{�����~OH�t$(���DH�5�$�H���������H�\$ H���c���H��$H�\$ �R���H�|$(t
H�|$(�������腲���P���H�9�#H�5��H�81����H�!�#H�5��H�81����AWAVAUATUH��SH��H��H�L�'H�T$ H�t$hH�T$XD�D$H�|$`I��L$8L�L$0dH�%(H��$�1�H�L$\H�D$(H�D$hL�d$`�.���H�L$`����L�l$hI9���A�ƋD$\������P���0�@H��$HD�$H�D$D��T$L)�� I�ωD$�����D$���"A��t	M���VH�D$D�t$XK�l=H9u$H�;u
A���vL�L���c���H+H�\$I��H;I$Ic�H�Tu
A����H��#H�T$H�8�ٰ��H�L$H�T$L��H��H����H�L$hL�l$(J�9I�H�D$0H�(H��tL�H9���H�D$ L�(H��H��$�dH3%(�kH�ĸ[]A\A]A^A_�H��$H�D$�����H�q$H�D$�����D$XL;L)��D$LH�D$(L�H�D$p���A��!H�M$LD�H�D$L��M�����D$8E1��D$(H�D$xH�D$@H�D$pH�D$8�@H�|$H���k��M���L�L$@D�D$L��H�ߋL$(H�T$8H�D$x�K���H��H�D$xI�I)�A��!u�H�����u�H�5|$H��謿��H��$H9�u�K�,'@HcL$LH��L�d	H9T$��������H�-�#H�8����H��H�D$H��$�H�ڿL��$�H��$�H�D$HDŽ$�H��$�����H�5�$A��!�f1�H�����L�l$pH�L$h���D�K���Hct$8H��I��H�t6�6��H�D$ H�8H�@H��H�t?L�����H�@L���K�t?L�����H�|$hH�@H���H�t?L�������|$L��H�H�փ�����D$\H�5($�����tH�5$��u�@H�5$HD5$L���t���Hct$XL��H�t6�b���L��蚏��L�l$h�B���K�,'H��$�H���H���#H�8聭��H�t$H�L$L��H��H���I�H�5j$A��!������H��������fDE1�H��H�
�#L�D$H�DH���2���H�8H�D$H��$�L��$�HDŽ$�H��$����H��$��H��H�����A��L�D$����H�5�$K�TH��������fDA���.H�
[�D��Hc�H�>��f.��{���H���R���L���h���H�������[���H�����H��H��#H�DH�8�8���H������H�|$xH�t$xH��1��D$p�ԭ��I��H����H�=��#H�T$pH���t���L��I���9����|$p����DH�H�
$E1�H�H�Ic�H�TH9L$�����p���DH�|$xH�t$xH��1��D$p�|���I��H���cH�=1�#H�T$pH�����L��I��衽���|$p��t�����@H�|$xH�t$xH��1��D$p����I��H���H�=�#H�T$pH��蔸��L��I���I����|$p���%����H���L�?�+��!��Ic�M�H��E1�I��H�;A���y���fDH�����?����v1�H�=���5���H�
�$E1�I��H����H�|$xH�t$x1�H���\���H���6H��A����H�H�
�$E1��h���H�|$xH�t$xH��1��l���I��H����H�����A�Ņ���L��赘��D��荍��H���U���I������DH�|$xH�t$xH��1�蔭��I��H����H�PHc0I�}H�Ѓ���I��LE�L�D$���L��I������H�L�D$H�
�$���@L�L��赝��I��������H���0���I��H��t#L��H���]��L�����L���M���I���M���L���ݗ��H���#1�H�81�誋�����H���#H�5s�H�81�荋��H���#H�5?�H�81��u���H���#H��H�5L�H�81��Z���H���#H�5V�H�81��B���H�k�#H�5#�H�81��*���f.���AWH��AVAUATUSH��HH�t$dH�%(H�D$81�H�D$ �ȗ��H�|$H�D$���H���q���L�8H�D$(A�� ��I��H��A��H�D$L�<$貣��L�<$1�H��M��~NL�t$0L�l$ L�d$DL��M��E1�1�H�D$0L��L�����H��H���f���H�D$0I)�H�M���H�D$(H�D$0H�D$(H�$H��tL�D$ H9�uBI9�u=H�L$8dH3%(H��uIH��H[]A\A]A^A_�DH�PH�@H�T$H�$�;���H��#H�$H��H�5��H�81��É�����ff.���SH��H��@H�t$dH�%(H�D$81�H�D$ H�D$(�X���H�|$H�D$艛��H������H�H�D$�� utH��H��H�D$��H�T$(H�|$1�H��L�L$ A��E�H�D$H�D$0H�D$H��tH�T$ L�D$(H9�u1I9�u,H�L$8dH3%(�u2H��@[�f�H�PH�XH�T$�H���#H��H�5��H�81�趈�������SH��H��@H�t$dH�%(H�D$81�H�D$ H�D$(�X���H�|$H�D$艚��H������H�H�D$�� utH��H��H�D$��H�T$(H�|$E1�1�L�L$ H���H�H�T$H�T$0H�T$H��tH�T$ L�D$(H9�u4I9�u/H�L$8dH3%(u:H��@[�f.�H�PH�XH�T$�H���#H��H�5��H�81�趇�������AUATUH��SH��H��dH�%(H�D$1�觶��I�Ĩt`H��I��?H�W)QΠ�EH�H��H��H��
L)�Hi€QH)�Hc�H�H9����UH�D$dH3%(��H��[]A\A]�@H�5Y$H�$�H����I��L��L���%���H�Ǩt>�ٍ��H�5$�EH�$�H��tBL��L�����tH�H��p����;����f�H���x�����fD�H�=�����H��H��$��H�=~��߷��H��H��$�H���H���X���胥����Hc7H������SH��H�|$H��t#H�|$H���/���H��H���T���H��tH��[�H�b�#H�5S�H�81����H��#1�H�81��΅��ff.���AUATUSH��H��(dH�%(H�D$1���H�5$H�߉��9������7H�
���I��Hc�H�>��f.�L��H�T$H�t$�ޙ���T$H�t$1�1��<���I��H���PL�-��#�/H�5����ê��H��H����f�L���H���ӱ��H��H�L$dH3%(��H��([]A\A]ÐI����I��/�I��H�5'�M��U���I��E��H��H��u�H���#H�5��H�81��~���fDL��1�����L�-�#I���6����H�5�$H�����H�Ǩ���)�����Hc�L�d$H���;H�|$�;���薍��I��H���*H�t$H��� �YH��H����L���賞��I�D$Hc�L�-�#H���H	�I�\$���H�|$L�d$�ѕ��茑��I��H����H�t$H��� �H��H����L������L�-��#�G���I���d聽��I��H��tyL�-Z�#�$���DH�����H������I��H��tPH��� ��H��H�s����L��H�T$H�t$莗���T$H�t$1�1����I��H�������H�	�#1�H�81��͂��DL�����L�-)�#I�������;������m���@H�~Hclj�H9�usH�v���f�H�~Hclj�H9�uSH�v���f�H�{Hclj�H9�u3H�s����H�r�#H�5f�H�81��1����l���L��1�A������*���H���#H�5��H�81�����H�+�#H�5�H�81����H��#H�5��H�81��ҁ��f���ATUH��SH��@dH�%(H�D$81��������H���;���1�H��I���ި��Hc�H���H�T$H��1��#����T$H�D$0����H� ��H�@H�t$ L��H�D$(H�D$ 芨��L���R���H�D$ H+D$(H9���H�L$H�T$I��H�t$H�|$(�å������H+\$H�|$0H�����H��1�1�H�����H�L$8dH3%(u:H��@[]A\ÐH���f����H�51	$H���Q���H�|$0H�D$0貒����˟��L��裞���|$芨��L��蒞��H���#H�5��H�81��Z���H�
c���H�5��H�=���+���H�d�#H�5��H�81��#�����SH�5�$H��輭��H�M�#H��H�2�ڨ��H��u%H�5V$H��薭��H�����uH��[����DH��[�W�H���#H�5��H�81����ff.�@��AW�	H�=�AVAUL�-��#ATL�%�U1�SH�����H�������H�=��H��$�Ͱ��H������H�=��H��$議��H���ů���H�=��H��$荰��H��襯���H�=r�H��$�m���H��腯���H�=��H��$�M���H���e���H�=���i���H�=�H�3$�V���H�=q�H�$�C���H�=g�H��$�0���H�=_�H��$����H�=_�H��$�
���H�5Y�H��$H�u�#H�8�M���H�^�#H���#H�53�H��H�H�����H�C�#H�;�H�5�H�H�J�赖��H�;�H�6���H�5��蚖��H�;�H���H�5�������ʖ��H�;H�5��H��I���ŧ��H�;�E��M�eI��A�$<[t&H�T-L��蒧��L���:���L��H��H���<���H�;H��H��u�H� �#H�5��H��9���L�%��#H�=��I�$�җ��I�<$E1���H��蹫��H�=��譗��I�<$E1���H��蔫��H�=��舗��I�<$E1���H���o���H�=���c���I�<$E1��H�ƺ�J���I�<$H�v�H�5���Ï��I�<$H���H�5��謏��I�<$�H����H�5���0���I�<$1�H�#���H�5;�����I�$H�;H�5���$���H�-��#H�=��H�E轖��H�}A��H�ƺ衪��H�}H�5B��!���H�}H�5E�����H�}�����H���H�5:�蕟��H�}1�H����H�5���|���I�$H�;H�5#�艋��H���#L�5��#H��H�2I��
���H�=9�����I�>A��H�ƺ���I�>�����H�G�H�5������I�>1�H���H�5���I�>1�H�7��H�5���۞��H�UH�;H�5�����H�
��#H�;H����H�5w�H������胓��H�UH�;H�5d�谊��H�
)�#H�;H���H�5G�H�������K���H�UH�;H�54��x���H�
��#H�;H�w��H�5�H����������H�UH�;H�5��@���L�=��#H�;�����H����H�5��I��ے��H�UH�;H�5������H�
a�#H�;H�G��H�5��H������裒��H�UH�;H�5���Љ��H�
A�#H�;H����H�5��H�������k���H�UH�;H�5��蘉��H�
I�#H�;H���H�5c�H�������3���H�UH�;H�5V��`���H�
9�#H�;H���H�59�H���������H�UH�;H�5.��(���H�
��#H�;H����H�5�H���������H�UH�;H�5���H�
9�#H�;H�O��H�5��H������苑��H�UH�;H�5��踈��H�
��#H�;H����H�5��H�������S���H�UH�;H�5��耈��H�
q�#H�;H���H�5��H����������H�UH�;H�5��H���H�
Q�#H�;H����H�5b�H���������H�UH�;H�5S�����H�
��#H�;H����H�56�H������諐��H�UH�;H�5)��؇��H�
!�#H�;H�W��H�5�H�������s���H�UH�;H�5�蠇��H�
��#H�;H����H�5��H�������;���H�UH�;H�5���h���H�
��#H�;H�'��H�5��H����������H�UH�;H�5���0���L�-�#H�;�����H����H�5~�I�E�ʏ��H�UH�;H�5p����H�
8�#H�;H����H�5S�H������蒏��H�UH�;H�5@�迆��H�
��#H�;H�^��H�5#�H�������Z���I�H�;H�5�舆��H�
��#H�;H����H�5��H�������#���I�H�;H�5�	�Q���L�5��#H�;�����H�+��H�5�	I����I�$H�;H�5������H�-��#H�;�����H����H�5��H�E賎��I�}�H����H�5~��y��I�}1�H����H�5n�螙��I�}1�H�a��H�5X�腙��I�}1�H����H�5B��l���I�}H�,�H�5/�赈��I�}H��H�5#�螈��H�=Q�����I�?E1��H�ƺ���H�}1�H����H�5������H�}1�H����H�5�����c���H��H�I�#�|��H�u�H�=4�#�u��H���#�H�=�#H�0��t��H�=�#�H�=�#H�0��t��I�7�H�=�#��t��H���#�	H�=�#H�0�t��H��#�H�=��#H�0�t��I�u�
H�=��#�zt��H�[�#�H�=��#H�0�_t��H���#�H�=l�#H�0�Dt��H�M�#�!H�=Q�#H�0�)t��I�6�#H�=:�#�t��H���#�%H�="�#H�0�s��H���#�'H�=�#H�0��s��H�H�#�)H�=�#H�0��s��H���#�+H�=�#H�0�s��H���#�-H�=��#H�0�s��H���#�/H�=��#H�0�ss��H�<�#�1H�=��#H�0�Xs��H��#�3H�=e�#H�0�=s��H��#�5H�=J�#H�0�"s��H�k�#�7H�=/�#H�0�s��H� �#�9H�=�#H�0��r��H�
�#�=H�=��#H�0��r���H�=7�����H��#H��[]A\A]A^A_�f.���SH��H��dH�%(H�D$1�H�?H�<$@��u	H�����u^H���V���H�<$H�7�� twH�GHcЉ�H9�uvH��u��H����H�$H�H�L$dH3%(��H��[�fD�����u�H�5��#H��t21�1���H�$�z����H��H�����H���q���H�=������H�<$H��H�1�#�H���#H�5��H�81��_q��蚐��f.���U1ҾsSH��H��(dH�%(H�D$1�H�L$����H�D$H�T$H�xH�0輚��H��H���1s���|$��uH�t$dH34%(H��uH��([]��������D��H������������UH�5��#H��AWAVAUATSH��dH�%(H�E�1�者��H����H��I������X��I��=���Lc�H��H�E�I�EH��H%�H)�H���H��H9�tH��H��$�H9�u��u|L�|$L�u�I���L��L���ԗ��9���L��L�����L��H���Ƣ��H�DH�M�dH3%(uxH�e�[A\A]A^A_]�Lc�L�u�L��L���^x��I���f�H)�H�L��v���H���#H�5��H�81��jo��L���R���H���#H�5��H�81��Jo��腎��D��ATH�5c�#USH���)���H��tmH��H���i���H�B�#1�H����p��I������H��H��t.H���#H��H��H��Ӏ����~
I�\$ L��[]A\�H���ڔ��H�K�#1�H�81��n��H���#H�5�H�81��n��ff.�@PX1�H��H�	�#H�81��wn�����S1�H���#�p��H���e���H��t	H�C H��[����f�PXH�5m�H��H�4�#H�81��"n��f���UH�5D�#SH���
���H��tCH���=���H��H��tK��H��裄��H�ߺ:H�5+�H������H��H��[]�H���#H�5�H�81��m������D��H��H�5��#茂��H��tH�����H��H�H�D��.���ff.���H��H�5��#�L���H��t H��远���P��H�H����H�H�D����f���H��H�5A�#����H��tH��诣����H�H��H�Ѓ�����f���SH�5�#�ρ��H��t1H��H���o�����t1�[��H���؆���¸��u�1����T���@��UH�5��#SH���z���H��tTH��H���#H���#1�H�8�n��H��H���oq��H��H��t>H�E H���k���1�H�߅�@���+{��H��H��[]�H�"�#H�5I�H�81��	l��H���#H�5\�H�81���k�����H��H�5�#�܀��H��tH���?�����H�H��H�Ѓ���y���f���H��H�5ѿ#蜀��H��tH����z����H�H��H�Ѓ���9���f���UH��SH��H��H��H���#H�0�.���H��u	H��1�[]�H��H�5f�#�1���H��H��t4H�5R�#H������H��tH��H���z�����u�H���[]����H���#H�5�H�81���j��ff.�f�UH��AWAVAUI��ATSH��H��8dH�%(H�E�1�����I��H��?H�}�H�M�I�H��H��L1�H)��PH��H��H9�u�L���Ck��H��H���FM����H�u�dH34%(H���?H�e�[A\A]A^A_]�f�1�H���F���I��H=����H=���H�@H��H�E�H��H%�H)�H���H��H9�����t	H)�H�L�H�E�L�|$H�E�I���E1�H��A�L��L���r���L��L��D��A���aj��H�}�H���e���H��t_E�������H���Zx������DH��H��$��b���H�pH�E�H��H��H��H�E�H��蹔��I���c���H���#H�5k�H�81��h���4���H�u�#H�5X�H�81���~��ff.����AUATI��UH��S��H��(dH�%(H�D$1��j��H�D$���<���I�$H�D$����A�
H�|$@����@��u
H������bH���#H�0�#���H������oH�5`�#H���(}��H�D$H����H�|$H�5>�#�	}��H����H�|$H���m��H��up��f�M�l$���@L��A�����n��H�|$A��@���I���fDH�5ѻ#H���|��H�D$H���!H�|$H�����H�L$dH3%(H����H��([]A\A]�@�Cp������I�$H�D$H�T$��u0H�������A�H�|$A�
�	�����������9���M�l$���hH��u����������
������5���D�c~��A���W���H�5�#H���{��H�D$H���AA����~7A��
tyA���=H�|$����H�|$H���xw�������mfDE���
H�|$����H�t$H�T$H��� t[H�vHc�H9���H���;���H��������H�|$覟��H�|$H���Y����������H���#1�H�81���e��fDH����H���H�|$蒋��H�t$H�T$H��� u(H����H��Hc�H9�uwH���f��H�������H�v��H�|$t
H�|$�p��������߂��誄��H�k�#H�5��H�81��Re��H���#D��H�5÷H�81��7e��H���?e��ff.�@��H����ATL�%�#USI�4$H���ٍ��H��ut��t7I�<$1�H��#�f��1�H��H������H��tVH�E H��[]A\����u#H�����t������
u��f��[H��]A\�H��[H��]A\��0�����UH��H�5��#SH���Wy��H��tNH��H���7���H��t#H�5j�#H���2y��H��tAH��H��蒈����tH��1�[]�DH���[]�H��#H�5,�H�81���c��������UH��H��SH����t;�j����H�5�#H���x��H��t)��H�������H�H��H��[]����{�������B���f���ATI��H�5��#USH���fx��H��t?L��A��H��u%��z����H��膜����~H��[]A\�f.��j��������H�#�#H�5J�H�81��
c��f.���ATI��H�5 �#USH����w��H��t?L��A��H��u%�`z����H��覀����~H��[]A\�f.��i��������H���#H�5ʴH�81��b��f.���ATI��H�5��#USH���fw��H��t?L��A��H��u%��y����H���vg����~H��[]A\�f.��i��������H�#�#H�5J�H�81��
b��f.���UH��H��SH����t;��h����H�5
�#H����v��H��t.��H��H��������~H��H��[]�D�;y��������H���#H�5ʳH�81��a��f.���UH��H��SH����t;�Vh����H�5��#H���Uv��H��t.��H��H���Co����~H��H��[]�D�x��������H�#�#H�5J�H�81��
a��f.���AUATUH��H��SH����to��g����H�5	�#H����u��I��H��tuH������H��#1�H���pb��I��踕��H��H��t9��L��H���n����~ I�m H��L��[]A\A]�D�x�����H���w���H���#1�H�81��T`��H�U�#H�5|�H�81��<`��ff.����AUATUH��H��SH����to�g����H�59�#H���u��I��H��tuH���A���H��#1�H���a��I�����H��H��t9��L��H��������~ I�m H��L��[]A\A]�D�3w�����H��觅��H��#1�H�81��_��H���#H�5��H�81��l_��ff.����AVAUATI��UH��S��H��@dH�%(H�D$81�H��H�D$ H�D$H�D$(H�D$H�D$0�a��H�D$���F���~1�L�uL�4$��WH�D$H�D$H��teH�|$辑����u[H�|$E1�@�����Bv��L��A����uL�2v�����JfDH�UH�T$��t�H�UH�T$����H��u���t���ty1�E1�L��A��t��Fe����L��H�z�#1��`��I���K���I��H����D����H���P�����~oM�f L��H�L$8dH3%(��H��@[]A\A]A^�@H�|$E1�H�|$A��@�������d�����d�����f����~%H�D$���L��赃��H�&�#1�H�81��]��H�|$t
H�|$�p���������z���|��f.���AVAUATI��UH��S��H��@dH�%(H�D$81�H��H�D$ H�D$H�D$(H�D$H�D$0�_��H�D$���F���~1�L�uL�4$��WH�D$H�D$H��teH�|$辏����u[H�|$E1�@�����Bt��L��A����uL�2t�����JfDH�UH�T$��t�H�UH�T$����H��u���t���ty1�E1�L��A��t��Fc����L��H�z�#1��^��I���K���I��H����D����H���`v����~oM�f L��H�L$8dH3%(��H��@[]A\A]A^�@H�|$E1�H�|$A��@�������b�����d�����d����~%H�D$���L��赁��H�&�#1�H�81��[��H�|$t
H�|$�p���������x���z��f.���AUATI��UH��S��H��dH�%(H�D$1��%]��H�$�������1�����A��H����1�I��tL��A������a����H�5�#L����o��H����H���#1�H�����H��E1�H�������uh1�H�L$dH3%(��H��[]A\A]��L�m���f���H�m���^���H�<$tH���G����1����w��f���u?��@H�������$����c����x�H�$��fD�q��������H�}�#1�H�81���Y��H���#H�5�H�81���Y���y��ff.����AUATI��UH��S��H��dH�%(H�D$1��[��H�$�������u[1�H�5��#L���jn��H����H�B�#1ɉ�H��H���o����uG1�H�L$dH3%(��H��[]A\A]�fDL�m����L��A��tj�_����눐��ug��@��a����xfH�$u)H���]���A�H��1�踋�����F����DL�m��u.H��u����+p��������H��#1�H�81��X��H�<$tH���b����1�����u��H�e�#H�5��H�81��LX���w�����ATI��UH��S��H��dH�%(H�D$1��Z��H�$���������M�$$����L��A���/�jo��A��H�5�#H����l��H��H����A����\A��
��A����H����x��H��H����H����`��Hc�H9�����H���ƍ��H��H�L$dH3%(H����H��[]A\��+`�����DH�$ueH��tA�H���
������%���H�5:�#H���l��H��H���1H���Y��H��H���^���H�c�#1�H�81���V���M�$$����H��u�������]��A������H������D�`��DI�1�A��Ic��2h��H��H�pH� tH�pH���F~��A9�������v����E��uA1�H���~��1�Hc�I����g��H��H�pH� tH�pH���~��A9�������(���H���#D��H�5{�H�81���U��H�<$tH���Ј���1����Bs��H����U���u��H�ƾ#H�5�H�81��U��ff.�f���UH��SH��H����tk��uVH��H���H��tb�؃���tX��tS�����
t0��t+��u?H��1�1��
���H��H��H��H��[]�e��fDH����H����H�����u�H���#H��H�0��}��H�����u�H�f�#H�5��H�81���T��D��UH��H��#1�SH��H�;�#H�8�{V��H��H��t#H����Y��H��tH�C H��H��[]��蛉����H�
�#1�H�81��vT��fD��UH��SH��H�?�K�H��t"H�5~�#H��H���Ci��H��t#H�]H��[]�H���#H�5-�H�81��T�����fD��ATUH��SH��H�|$H�t$�w��H�5�#H��I����h��H��tKH��H��� ���1�H���#H���U��1�L��H��H��H���#H��V��H��t(H�E H��H��[]A\�H���#H�5��H�81��xS��H���#H�5�H�81��`S����AWAVI��AUA��ATI��USH��xdH�%(H�D$h1�H�D$H�\$(H�D$@H�l$0H�D$ H�D$HH�\$PH�l$X�T��H�D$8���gE����1�I��H�D$H�D$@H�x�@H��t
Lc�O��L���H��H9�tH�PA9��H��t�H��H�H9�u�A9��-H����H�|$@�����j��A��E1�H�|$ A��H�|$(��H���mu��E1�H�|$0I��tH���Wu��I��1�H�[�#L��L�D$��S��H���&���L�D$H��H����E1�L��D��D��H����w����tqH�] H��H�t$hdH34%(��H��x[]A\A]A^A_��X��A���E���E1�E1��q���DH�|$8膄��������{Z��E��~%H�t$8���H���w��H���#1�H�81��aQ��H�|$8t
H�|$8�?�����D���n���xp�����ATUSH��H��H�|$H�t$�2t��1�H�9�#H��I���R��H������H��t"L��H��H���3�����~H�] H��H��[]A\��:�H����v��H�C�#1�H�81��P��ff.�@��ATUSH��H��H�|$H�t$�s��1�H���#H��I���.R��H���v���H��t"L��H��H����u����~H�] H��H��[]A\���H���Bv��H���#1�H�81��P��ff.�@��USH��H��H�|$H�t$�s��H�5�#H��H����d��H��tH��H����P��H��H�[]H�D���ff.�@��USH��H��H�|$H�t$�r��H�5��#H��H���d��H��tH��H����s��H��H�[]H�D���ff.�@��AUATUSH��H��H�|$H�t$�Pr��H�5Y�#H��I���d��H��tvH��H���^���H�7�#1�H���P��I������H��H��t7H�γ#L��H��H��H���u����~I�\$ H��L��[]A\A]�H����t��H�7�#1�H�81��N��H���#H�5ˠH�81��N��ff.���AVAUATUSH��H��H�|$H�t$H�$�zq��H��I���oq��H�5x�#H��I���=c��H��t{H��H���}���H�V�#1�H����O��I���$���H��H��t<H��#L��L��H��H��L��p����~I�\$ H��L��[]A\A]A^�H����s��H�Q�#1�H�81��M��H���#H�5�H�81��M��D��AUATUSH��H��H�|$H�t$�p��H�5��#H��I���nb��H��tvH��H��讁��H���#1�H���
O��I���U���H��H��t7H��#L��H��H��H������~I�\$ H��L��[]A\A]�H���s��H���#1�H�81���L��H��#H�5�H�81���L��ff.���AUATUSH��H��H�|$H�t$��o��H�5٠#H��I���a��H��tvH��H���ހ��H���#1�H���=N��I��腁��H��H��t7H�N�#L��H��H��H��l����~I�\$ H��L��[]A\A]�H���Fr��H���#1�H�81��#L��H�$�#H�5K�H�81��L��ff.���AVAUATUSH��H��H�|$H�t$H�$�n��H��I����n��H�5��#H��I���`��H��t{H��H�����H�֟#1�H���\M��I��褀��H��H��t<H�m�#L��L��H��H��L��Q^����~I�\$ H��L��[]A\A]A^�H���`q��H�ѱ#1�H�81��=K��H�>�#H�5e�H�81��%K��D��AVAUATUSH��H��H�|$H�t$H�$�n��H��I���n��H�5�#H��I����_��H��t{H��H�����H���#1�H���|L��I������H��H��t<H���#L��L��H��H��L��^����~I�\$ H��L��[]A\A]A^�H���p��H��#1�H�81��]J��H�^�#H�5��H�81��EJ��D��AVAUATUSH��H��H�|$H�t$H�$�:m��H��I���/m��H�58�#H��I���^��H��t{H��H���=~��H��#1�H���K��I����~��H��H��t<H���#L��L��H��H��L���[����~I�\$ H��L��[]A\A]A^�H���o��H��#1�H�81��}I��H�~�#H�5��H�81��eI��D��AUATUSH��H��H�|$H�t$�`l��H�5i�#H��I���.^��H��txH��H���n}��H�G�#1�H����J��I���~��H��H��t9H�ޭ#1�L��H��H��L�������~I�\$ H��L��[]A\A]�H����n��H�E�#1�H�81��H��H���#H�5ٚH�81��H��f���AWAVAUATUSH��H��H�|$H�t$�k��H�5��#H��I���Z]��H����H��I���|��H�o�#1�H��H����I��H��H�X�#1�I����I��I���&}��H��H��ti�}��H��H����H�ެ#L��L��H��H��L�������t)I�^ L��L���I�o 1��Ti��H��[]A\A]A^A_�H���m��H���m��H�&�#1�H�81��G��H���#H�5��H�81��zG��H����D��AUATUSH��H��H�|$H�t$�pj��H�5y�#H��I���>\��H��tvH��H���~{��H�W�#1�H����H��I���%|��H��H��t7H��#L��H��H��H��i����~I�\$ H��L��[]A\A]�H����l��H�W�#1�H�81���F��H�į#H�5�H�81��F��ff.���AUATUSH��H��H�|$H�t$�i��H�5��#H��I���n[��H��tlH��H���z��H���#1�H���
H��I���U{��H��H��t-L��H��H���L����~I�\$ H��L��[]A\A]�H��� l��H���#1�H�81��E��H���#H�5%�H�81���E��D��AUATUSH��H��H�|$H�t$��h��H�5�#H��I���Z��H��tlH��H����y��H�Ǚ#1�H���MG��I���z��H��H��t-L��H��H���?W����~I�\$ H��L��[]A\A]�H���`k��H�ѫ#1�H�81��=E��H�>�#H�5e�H�81��%E��D��USH��H����H�t$uaH�����tXH��ƒ���tK��uFH;\$t1H�5�#H����Y��H��H��tCH�|$��g��H��H����I��H��tH��H��[]�@H���J��H�!�#1�H�81��D��H���#H�5��H�81��uD��D��S��x��H�G�#H�H����H�|�#H�m�#H�5�H�;H��3T��H���#H�;H�5!�H�H��#H��T��H���#H�5���H��H��gQ��H�;�����H���H�5a��g��H�;�H�����H�5���g��H�;�H�����H�5[��g��H�;1�H�:��H�5y��ng��H�;1�H����H�5k��Vg��H�;1�H�J��H�5\��>g��H�;1�H����H�5G��&g��H�;�H�W���H�5/��g��H�;�H�|���H�5���f��H�;�H�����H�5���f��H�;1�H����H�5��f��H�;�H�>���H�5��f��H�;�H�S���H�5ȍ�f��H�;�H�X���H�5���lf��H�;�H�]���H�5���Qf��H�;�H�b���H�5n��6f��H�;�H�w���H�5[��f��H�;�H���H�5H��f��H�;�H���H�50���e��H�;�H���H�5���e��H�;�H�+�H�5��e��H�;H���H�5��T��H�;�H���H�5ٔ�~e��H�;�H���H�5Ô�ce��H�;1�H����H�5e��Ke��H�;�H����H�5���0e��H�;H���H�5��zT��H�;1�H���H�5k��e��H�;1�H�f��H�5Y���d��H�;1�H���H�5F���d��H�;1�H���H�53��d��H�;�����H�k�H�5)��D��H�;�����H�P�H�5��dD��H�;�H���H�5���ID��H�;�H�J�H�5ݓ�.D��H�;�����H���H�5ԓ�D��H�;�����H���H�5ȓ�d��H�;�����H���H�5���c��H�;�H����H�5����c��H�;�H����H�5����c��H�;�H����H�5���c��H�;�H�=��H�5u��c��H�;�H�r��H�5e��vc��H�;�H����H�5M��[c��H�;�H�l��H�55��@c��H�;�H����H�5"��%c��H�;�����H���H�5��
c��H�;1�H����H�5����b��H�;H��H�5��<R��H�;1�H� ��H�5ڒ��b��H�;�H�5�H�5s��b��H�;[�H���H�5a��b��H���#H�5Z�H�81��>��D���wl�����ATUSH��H��H�|$H�t$��w��H�5�#H��I���PS��H��uK�fo��H��H����H�C L���h��H��tTE1�1�1�A�����H��H���AO����u$H��H��[]A\�H��#H�5�H�81���=��H��#1�H�81���=��H�֦#H�T$H�5“H�81��=��H���#1�H�81��=��D��H�%�#1��N?��ff.���SH��H��H�|$H�t$�O��H�5�#H���VR��H����H��H���a��H����u��� ucH���+G����L�D$Hc�I��� t1I9@uSM�@1�1�1�A�����H���+N����uNH�D$H��[�H����H9�uI����fDH���j���…�t��H�a�#H�5�H�81��<��H���#1�H�81��<��H���#H�5ːH�81��}<��ff.�f���USH��H��H�|$H�t$�tN��H�5ݐ#H���EQ��H����H��H���Y��H�L$H�1�� tQHc�H9Qu]H�IE1�1�1�A�����H���/M����uYH�5��#H�ߺ�o��H�D$H��[]�f.�H��HcЃ�H9�uH��막�H�Z�#H�5�H�81��;��H���#1�H�81��;��H���#H�5ďH�81��v;��fD��ATUH��SH��H�|$H�t$�rM��H�D$H��� umH��L�`��Hc�H9���H��H�5��#�P��H��H��tyH����^��H���s��� tJL��ھH���r����tH�D$H��[]A\�@L�`H�X�H��#H�5E�H�81��:��H�ϡ#H�5АH�81��:��H���#H�5ԎH�81��:��H���:��ff.���SH�H���/Q��H��H���dk��1�[���UH�5Ԏ#SH��dH�%(H�D$1��*O��H����H��H���i��1�Hc��K��H��H�pH� uTH�T$H���o@������H�Hct$�� t:H�CH9�:H����L��H��H�L$dH3%(u>H��[]��H�p�f�H�����H�
Б��H�5 �H�='��hJ���X��H�t�#H�5��H�81��[9��H�t�#1�H�81��H9�����AWAVAUATI��UH��S��H��8dH�%(H�D$(1��;��H�D$ ���@���m1�I�$H�D$���4H�D$H����H�5��#H���sf��H������2H�|$��J��H�D$H��� �|H��L�`��H���H�5�#H���yM��I��H���H���Ug��Hc�H�H���H�|$�JH��1���I��H�D$L�pH� tL�pH�D$ E1�H�D$�!HcD$ Hc�H��@I�I�H�����@K�4>L��L��H��@�H�T$HN�M��HD�A���Z����u�H�ܞ#1�H�81��7��I�D$H�D$������H�|$ t
H�|$ �{j��������T��f.�H�|$H��� uSH����L9���L���[J��H�D$H�L$(dH3%(��H��8[]A\A]A^A_�L�`H�X���H�G�f.�H�|$�I��H�|$H���9��H�D$����H�D$ H���i����fD�?��������H�T$ ���H�
��H�52�H�=x��zG����U��H���#H�5=�H�81��m6��H��#H�51�H�81��U6��H�V�#H�5��H�81��=6��H���#H��H�5��H�81��"6��f���AWAVI��AUI��ATA��USH���dH�%(H��$�1�H�D$8H�\$(H�D$`H�l$0H�D$@H�\$PH�l$XH�D$h�7��H�D$H���aE����1�I�E�H�D$(H�D$PH�x�!DH��tLc�O�D�L���H��H9�tH�PD9�|�H��t�H��H�H9�u�A9��2H����H��1��RG��H�|$0��H�|$8A�H���9H�|$@H�����]h��H�D$H�5��#L����I��I��H���H�L$(L�A�� ��H�yHc�A��H9���H�IH�l$pL��D�D$H�L$�jX��UE��H��H��L��$�ATD�D$,H�L$ H�t$��B��X1�ZA�����1�I��L��L���E�����`�@L���5���H���5��H�5�#�L���Qg���H��$�dH3%(�^H���[]A\A]A^A_�I��H��A���.����@�����:��A��E�������H�^�#H�5W�H�81��I��DH���E��H�\$0H��� uSH����H����H���K�����T��H�D$�i����H�|$H�Ff��������;<��E��~3H�t$H���@H�{urH�[������J��A���M���H�|$Ht
H�|$H��e����D���_P��H��#1�H�81���2��H�ݛ#H�5�H�81���2����2��H�ؙ#H�59�H�81��2����Q��f���S�K��H�5����H��H���o?��H��[�f.���ATUSH����upH�����tgH��ƒ���tZ��uUH��H9�t;H�5Ɔ#H���.G��I��H��tFH�5��#H���G��H��tXH��L���U����u5H��[]A\�f.�H����7����b��I��H��t1H�C �H��#1�H�81��1��H���#H�5�H�81��1��H���#1�H�81��1��ff.�@PX1�H��H���#H�81��g1�����SH�5�#H���LF��H��t!E1�1�1�1�A�����H���`B����uH��[�H�'�#H�5\�H�81��1�����f�PXH�5;�H��H��#H�81���0��f���H��H�5a�#��E��H��tH���_��H��H�H�D����ff.���H��H�5!�#�E��H��t#H���OT��H���i���% HE�H����_���ff.�@��SH�5Ԅ#�?E��H��tJH��H���S��H����h��� uH���:��[��Hc�H�D�@H���0^���…�t�Hc�[H�D����ff.���H��H�5a�#��D��H��tH���M��H��H�H�D����ff.���H��H�5!�#�D��H��t#H���OS��H���GO�����p0��H��H���4F���_���ff.�@��AWAVAUATUH��SH��(H�t$H�|$dH�%(H�D$1��<A��H�D$H��� ��H��L�`��H�5��#H����C��I��H����H���R��H���ug��� ��L�|$A�@�DHc�H��@I�H��~FH��@L��L��L��HN�L��1�A���eQ����u�H���#H�5k�H�81��i.��f�H�T$dH3%(H�D$uPH��([]A\A]A^A_�@L�`H�X�+���H�D�#H�5�H�81��.��H��#H�5I�H�81��-���6M��fD��ATI��H��USH���t:��4����H�5\�#L����B��H��t-��H���`����uH��[]A\���+E����������H���#H�5ȁH�81��z-��f.���ATI��H��USH���t:�E4����H�5܁#L���DB��H��t-��H���uX����uH��[]A\���D���������H��#H�5H�H�81��,��f.���ATI��UH��H����Stb��3����H��H�5Y�#��A��H��H��t}H���P��H���Le��� tN1ɉھ	H���4d����t!Hc�H���X��L��[]A\�D�D�����H���#H�5��H�81��W,��H�p�#H�5M�H�81��?,��H�@�#H�5u�H�81��',�����AUI��H��ATUH��SH����tt��2����H�5��#L����@��I��H����H���O��H���rd��� t\1ɉھL���Zc����t/Hc�H�5t�#L��H�T��^��H��H��[]A\A]Ð�C�����H���#H�5��H�81��o+��H���#H�51�H�81��W+��H�X�#H�5�H�81��?+��ff.�@AWAVAUI��ATA��UH��S��H��dH�%(H��$�1���,��H�D$(���������tI�EH�D$��tzI�EH�D$ ����H�|$(tsH�|$(�]����ueH�52#H���?��H����E1�1�1�1�E��H���;�����RH���#1�H�81��a*���H�D$H�D$ H�|$(t��H���^��H���?��H�=}�H��H��H��1��.��H�|$�3<��H�5�~#H���?��H��H���:H�|$ ��H�|$ �<��H�D$ H��� �����7H���o)L$0H�D$H��� �H��L�hA��A��D�D$L�|$0�9J��H��H�$�MM��jA�L��L��H��L�t$HAVD�D$H�t$��7��X1�ZE��1�M��L��H���o:��������H�5�#�H���R\��H��$�dH3%(H��uIH�Ę[]A\A]A^A_�f.���1��������H�|$(t
H�|$(�[���1����3F���G��H���#H�5�|H�81��(��H�xHc�A��H9�uBL�h���f�)D$0H��� u-H��H�p��H�������H�|$0��*Y������`(��H�PH�p��H�x~�H�@�u���fo��)D$0�l���@��1����D�������f���ATA��UH��SH��H��dH�%(H�D$1���)��H�$����E���R��H�5x�#H���XU��H��H����A�H�5|#H���<��H��H���H���BK��H���
`��� �8Ic�1��9��H��H�HH� u=D��H����^������H�T$dH3%(H����H��[]A\�DH�H�f�H�A��u}H���6���H�߃�tE��-��A���C�����/��E��xLH�$t0H�A��u=H��t�H���Y�����+>��A�����H������H���oY������H�<$tH���[Y���1�D����C��H�]�#H�5�zH�81��D&��H�]�#H�5�}H�81��,&���gE��H�@�#H�5A|H�81��&��ff.�@��H��H��#H�|$H�0��N��H��t'H�|$H�5cz#��:��H��t_H���I��H���@H�|$�>_��H�|$H� u0H���'P��H��u�H�3�#H�T$H�5o}H�81��u%��DH���H�k�#H�5�yH�81��R%��f���UH��1�H��y#SH��H�S�#H�8��&��H���CV��H��t+H�C E1�1�1�A�����H��H���26����uH��H��[]�H��#1�H�81���$��H���#1�H�81���$��ff.�f���H���#SH�5�zH�H�ӊ#H�8�4��H���#H���#H�5�yH��H�H��x4��H���#H�;H�5��H���1��H�;�H���H�5w�$H��H�;1�H���H�5vy��<��H�;�H���H�5�p��G��H�;1�H���H�5Ky��G��H�;�����H����H�5(��G��H�;�����H�����H�5��G��H�;�����H���H�5y�G��H�;�����H�Y�H�5"��mG��H�;1�H�1�H�5�x�UG��H�;1�H���H�5��=G��H�;�H���H�5���"G��H�;�H���H�5�x�G��H�;�H���H�5�x��F��H�;�����H�����H�5sx��F��H�;�H����H�5ax�F��H�;1�H�*�H�5Wx�F��H�;�H���H�5Kx�F��H�;1�H���H�5<x�kF��H�;�H���H�5)x�PF��H�;�H�q���H�5x�5F��H�;1�H���H�5x�F��H�;1�H�Q�H�5�w�F��H�;�H���H�5�w��E���H�=�w�yS���H�=�wH���#�aS��[H���#����USH��H��(H�-t�#dH�%(H�D$1�H�D$����H�u�zJ��H���H�5Z�#H����1�1�H���I��H�|$H�D$�Z��1�H���,*��H��H����H��H�T$H���C��H��u9�d#��H����I��H�T$H��~rH�[�#H�5�yH�81��
!��f.��+#��H��H�L$dH3%(��H��([]�D�H�=�t�GR��H��H���#�7����H��#H�5AyH�81�� ��H���"��H�Ʉ#1�H�81��} ��H��H�m�T��H�5�xH��H�Ј#H��H�81��S ���?��ff.���UH�5�xSH��H�X�#H�I�#H�;H��0��H�O�#H�;H�5��H�H�ӈ#H���/��H�-��#H�E�9��H��H���6��H�}H�5�xH����I��H��H�ߺW[H�5�x]��T��f.�����Q�����H�ut#1��>!��ff.���ATI��H�5Pt#U��H��SH�� dH�%(H�D$1��@4��H���6H���!��H�D$�����������H�D$H�|$��H����4��H���+��H�|$����Hc�1��0��H�D$H�pH� tH�p1�H���A:������H�L$dH3%(H�D$��H�� []A\��I�$H�D$���i���H�|$t
H�|$�LQ���1����;��fDH�|$�^0��H�|$Hc��A!��H�D$�[����H�|$�Q��������&��������H��#H�5�vH�81�����H��#H�5wH�81������=��ff.����ATUSH����uhH�����t_H��ƒ���tR��uMH��H9�t:H�5vr#H���~2��I��H��t6H�5_r#H���g2��H��t^H��L����+����t<H��[]A\�H���@#���KB��I��H�C H��u�H�`�#H�5qvH�81����H�H�#1�H�81����H��#H�5�uH�81�����ff.����UH�5�q#H��SH����1��H��t'H��H���2��1�H��H���)����u"H��H��[]�H���#H�5�uH�81����H���#H�5�uH�81��k��ff.���SH��H��H�|$H�t$�e.��H�5.q#H���61��H��tVH�t$H��� t$H�VH�vH���V����tH��H��[��H��H������H�$�#H�5buH�81�����H�܄#H�5�tH�81�����PXH�5�tH��H���#H�81����f���H��H�5�p#�0��H��t#H���_1��H����,�����p��H��H���42�����ff.�@��H��H�51p#�<0��H��tH���1��H���'(��H��H�H�D��V���fD��H��H�5�o#�/��H��tH����0��H���'��H��H�H�D�����fD��SH��H�|$@��u	H�����u#H�5�o#�/��H����H���v0��H��[Ë����u�H�|$�T��H��H���9��H��u�1�H����3��H��H���2�����P��H���X9��H��H�$�\&��H�$H��u�H�4�#H�T$H�58sH�81����H��#H�5sH�81����ff.���AUATI��U��SH��H��(dH�%(H�D$1����H�D$��������M�,$����H�D$H�|$��L����L��H�|$H��t
H�|$�+��H�5Vn#H���^.��H����1�H��H���%������H�t$H����H�L$dH3%(H����H��([]A\A]��I�D$H�D$���_���H�|$t
H�|$��K�������B6��f�H�|$�K���7�����!��������뼐H���H6��H���o����=��H�C H���9���H��|#H�5�qH�81��v��H��|#H�5�qH�81��^���7��f���UH��1�H�/m#SH��H�C#H�8����H���3=��H��tH�C 1�H��H���}$����t"H��H��[]�H�0|#H�5AqH�81�����H�|#H�5gqH�81�����ff.�@��S�H�=�sH��dH�%(H�D$1�����H�=5qH�$�I��H���H���?��H�=q��*��H�5PqH��H�}#H�8�G'��H�h~#H�I~#H�5�pH��H�H��$'��H�U{#H�;H�5����H��{$��H�;�����H����H�5uc��:��H�;�H�!���H�5�i�:��H�;1�H���H�5l�:��H��}#H�;�H�57x�:��H�;H�(xH�5[j��)��H�;�����H�
���H�5Cp�Q&��H�;1�H�U���H�52p�9:��H�;1�H�����H�5(p�!:��H�;1�H�����H�5ׅ�	:��H�D$dH3%(uH��[��N5��f.�@����fD����6�����AUH�5#k#ATUSH����*��H���+H����.��H��I���D��H��H���������L�-d�A�����H�=W��~��H��H��H�� �oF��H��L���dF��������U.��H�{H���	,��H��H���>F��H�{�+��H��H���*F���C��tBv ��u��H�= o�
������u3�H�=�n�����g���D�L�������P���fD�H�=�x����4���f�H��L��[]A\A]�H��}#H�5�nH�81��z��f.���AUI��H�5�i#ATI��US��H��H��(dH�%(H�D$1��;)��H���H�����H�D$��������1�I�EH�$��urH�D$H����1�H�|$t
H�|$�lM��H��H���aM��1�H��H��H���1L������H�L$dH3%(L����H��([]A\A]��I�EH�D$��~�H�|$t
H�|$�`F��������0���H�|$�>F���Y���f��+����~�H�T$����H�.|#H�5mH�81����H�fz#1�H�81�����=2��ff.�f���ATI��UH��S��H�� dH�%(H�D$1����H�D$�������
����H�EH�$����H�EH�D$����H�|$��1�H�<$tH���K��H��1�H�|$t
H�|$��K��H��H�5�g#L���='��H����1�H��H��H���=��H����H������H�L$dH3%(upH�� []A\�f.�H�$H�D$H�|$�\���H�|$�D���M���@���������H�|$t
H�|$�D���1����/����0��H��z#H�5~kH�81��v��H��x#1�H�81��c����ATI��UH��S��H�� dH�%(H�D$1��'��H�D$����������H�EH�$����H�EH�D$����H�|$��1�H�<$tH���fJ��H��1�H�|$t
H�|$�OJ��H��H�5f#L���%��H����1�H��H��H���t0��H����H���C���H�5�jH��H���<.��H��H�L$dH3%(ufH�� []A\�H�$H�D$H�|$�L���H�|$�C���=���@����������H�|$t
H�|$��B���1����c-���./��H��x#H�5�iH�81�����H�'w#1�H�81�������AVAUI��ATUS�(��I���t;��H��tFH��L�5�d#DL��1�L���C��H��H���h<��H�] H��L���y@��H���!��H��H��u�[L��]A\A]A^�ff.�f���UH��S��H��(dH�%(H�D$1����H�D$���#��������H�D$H�|$��H�|$��H�|$�`H��H�T$H�zH� tH�z�H�5�h�����us1���7�������H�L$dH3%(��H��([]��H�EH�D$���d���H�|$t
H�|$�4A���1����+��fD1�H��H�=�i��4�����H�|$�@��H�|$� ����U0����a��������������H�*u#H�5hH�81��
���,��ff.����USH��H��H�l$H�t$H���!G��H��H�ڿ�A���H��H��b#1��0��H�|$H��H� uWH���#��H��H��tXH�E �e1����uAH���)B����t?L�ft#H��1�1Ҿ�=%���x&��H��H��[]�fDH��f�H���H���H�Gt#1�H�81�����PXH�5�fH��H��u#H�81�����f���ATH�5b#UH��S�!��H��t<H��H����2��H��I���/��H��H����@��L��H��[H��]H�=�f1�A\�(*�������H��H�5�a#�L!��H��tH���2��H��H���#���N���ff.���H��H�5aa#�!��H��tH���o/��H��H����"������ff.���UH��H��SH����t;�����H�5
a#H��� ��H��t)��H���65��H���[]�f.��#���������f�PX1�H��H��r#H�81��g�����USH��H��H�|$H�t$��D��H���L*��H��t<H�����H�5x`#H�߉�� ��H��t@��H���O'��H��t,H���r��H��[]�H�Lr#H�T$H�5PeH�81���
���Y���H��s#H�5�dH�81��
�����USH��H��H�|$H�t$�4D��H���,5��H��t<H���_*��H�5�_#H�߉��~��H��t@��H���'��H��t,H���R+��H��[]�H��q#H�T$H�5�dH�81��>
�����H�:s#H�5)dH�81��!
�����H��H�5a_#���H��tH�������t"�H���H��r#H�5�cH�81���	���T���@��H��r#SH�5+eH�H��o#H�8���H��p#H�-q#H�5*dH��H�H����H��p#H�;H��F��H�;�����H�'���H�5d�
��H�;1�H�O�H�5�c�
��H�;1�H�w���H�5�c����H�;�H�l���H�5�c����H�;1�H���H�5�i��,��H�;1�H�����H�5�x�,��H�;1�H�����H�5�b�,��H�;�H�����H�5mc�,��H�;�H�>���H�5�d�r,��H�;�����H�#���H�5>c�W,��H�;�����H�x���H�54c�<,��H�;�H�m���H�5)c�!,��H�;�����H���H�5c�,��H�;1�H�:�H�5c��+��H�;1�H�B���H�5�b��+��H�;�H�5�b�2��H�;�H�5�b��1��H�;�	H�5�b��1��H�;�H�5�b��1��H�;��H�5�b�1��H�;�H�5�b�1��H�;���H�5�b�1��H�;[�H�5�b�u1��D��������AVAUATI��USH��pH�$H�|$H�T$dH�%(H�D$h1��*��H���"��H�$L�A�� ��H�D$I��H�iA��H�M��� ��H�xHc�A��H9���H�XL��L�d$ �
:��H��H��M��H�T$$M��H��H��RD���:��ZYH�����D$1��4� ���T$H��H�pH� tH�pL�����H��H�L$hdH3%(uWH��p[]A\A]A^�H�D$L�iH�iH��� �I���H��H�XA��A���L������H�gj#H�5bH�81������!%�����AVAUI��ATUSH�� H�$H�|$H�T$dH�%(H�D$1�����H������H�$L�A�� ��H�D$I��H�iA��H�M��� ��H�xHc�A��H9���H�XL���8��H��E1�H��H�T$M��H��H��RD���N9��ZY�t$H������H�\$dH3%(uBH�� []A\A]A^�H�D$L�aH�iH��� �y���H��H�XA��A���|��������	$��f�AUI��ATI��UH��SH���h��H��t2L��H��H���(����t8H��L��H���c��H��H��[]A\A]����H��h#H�5�_H�81��Y��H�����H��h#H�5�_H�81��9��f�PXH�5�_H��H�$m#H�81����f���UH�5�Y#SH��hdH�%(H�D$X1�����H��tcH�l$H�T$H��H�������D$1��4�r���T$H��H�pH� u&H������H��H�L$XdH3%(uH��h[]�@H�p���M����"�����UH�5Y#SH��dH�%(H�D$1��J��H��tc�@1�H���F��H��H�pH� u>H�T$H���Y����t$��@wKH�����H��H�L$dH3%(u+H��[]�fDH�p�H��k#H�5�^H�81������"��H�
�^��H�5^H�=�^���fD��SH��H��H�|$H�t$���H�5.X#H���v��H��t6H�t$H��� tH�VH�vH������H��H��[�H��H����������fD��SH�5�W#H�����H��tE1�1�1�1�H����1��H��[�����ff.����ATUSH����uhH�����t_H��ƒ���tR��uMH��H9�t:H�5fW#H�����I��H��tNH�5OW#H�����H��t:H��L����%����tH��[]A\�H���p��H��e#H�5	]H�81��X��H�Yj#H�5�\H�81��@����ATI��USH��H��H�|$H�t$�?��H�5�V#H�����H��t]L��H���`4��H�t$H��� t3H�~Hcω�H9�u2H�vH��E1�H���0��H��H��[]A\��H��H����������y���f���S1�H�BV#�M��H���E��H��t	H�C H��[�H��d#1�H�81��d��@��SH�|g#H�5A\H�vf#H�H�;�;��H��d#H�;H�5:\H�H��h#H����H�Ag#H�5j���H��H��o
��H�;�H����H�5�[���H�;�H�����H�5�[���H�;�H�z���H�53L�#��H�;�H�����H�5nR�s#��H�;1�H�W���H�5�T�[#��H�;�H����H�5�`�@#��H�;H��`H�5S���H�;1�H����H�58[�#��H�;1�H����H�5[�"��H�;H�[H�5Z�D��H�;[H��ZH�5�R�-��f.���AWAVAUI��ATUS��H��hdH�%(H�D$X1�H�=�#�cH�D$ ���H�D$(A�ą������#����H�=�\1����I�UH�l$ H�D$(H�T$H����fDH�\$0�1�H��I��H�5�#�j4��H�|$�@��H�T$H��� �H����Hc�A��H9��H�����H�8H��� ��H����Hc�A��H9���H�{����H�8I��� ��H����Hclj|$H9���H�D$@���H�H�D$(H���2H�|$H��0��H�t$(1�H�$���1��I��� ��H��H���H����-�����HL�$E1��H�ߺ������V!�����?L�MH�E tL�ME����H�߾�����"!�����qL�L$I� ��I��E���H�߾������ ������M�L$I�$ tM�L$D�D$��H�߾����� �����PI�uI�E tI�uH�T$(H���k�����FH�t$(L���F��H���^2��L��H�L$XdH3%(��H��h[]A\A]A^A_��H�x�����H�B�����H�x�0����M�I����������~?H�l$ ���H�D$(M�uL�t$��u*H���F���H�|$(�t.���7������H�D$(H��t
H�|$(�N.���������D�H�=�W�,���H�=XH�t�#�,���H�=EPH�d�#�,���H�=�oH�T�#�o,��H�P�#�8���H������L������V����H�|$(��T&��H���,��H�=�XH�1��+���H�H�l$ H�D$(H�T$�-���@Hc�I�l�@����5��H�������5���E������5��H�l$ H�������H�|$ D�{����L�t$ H��M���`5��E���)5���H��HD�H�D$(H�l$ E��uN1��������H�����H���0��H�=M�#H�57V1�����H���/��H�=0�#H�5/V1������D��A��H�l$ E����������Hc�I�|�������H����4���F���H��H�D$ ����H���/��H�=ʂ#H�5�U1��L������H��]#H�5jUH�81��?��H�=��#H�5nU1�����H���B/��H�={�#H�5�U1����H���%/��H�=^�#H�5�U1����H���/��H�=A�#H�5tU1�������AWAVAUI��ATUS��H��XdH�%(H�D$H1�H�=��#�;H�D$�m���H�D$A�ą�����������H�=�V1�����I�UH�l$H�D$H�T$H����fDH�\$ 1ɺH��I��H�5��#�J.��H�|$� 
��H���
��H�|$(H��@�������A��H�|$0@���������H�|$8�+��Hc�1�I���a	��I��H�@I� tI�FH��� ��H��H�S��H�|$H�7�� u^H��H����PM��E��U��%��ZY���PH�T$HdH3%(L���4H��X[]A\A]A^A_�fD������T���@L�GMc�D��M9���H���H�{Hc׉�H9���H�S�W���D�c��A����������~?H�l$����H�D$M�uL�t$��u*H���n���H�|$�|)���_������H�D$H��t
H�|$�V)����������D�H�=�R�'���
H�="SH�#�'���H�=MKH�#�'���H�=�jH��~#�w'��H��~#�`������f����H�|$��l!��H���$'��H�=
TH�1��C���H�H�l$H�D$H�T$�e���@Hc�I�l�@���k1��H������^1���E�����O1��H�l$H�������H�|$D�{��
��L�t$H��M����0��E����0���H��HD�H�D$H�l$E��u'1����L�������D��H�=m~#H�5�Q����D��A��H�l$E���-����,���Hc�I�|����z���H���\0�����H��H�D$�C������AWAVAUI��ATUS��H��XdH�%(H�D$H1�H�=�}#�H�D$�M���H�D$A�ą��y��������H�=�R1����I�UH�l$H�D$H�T$H���pfDH�\$ 1ɺH��I��H�5�|#�**��H�|$���H�����H�l$(I��@���&H�L�d$0A���I�L�l$8A����I�H�\$@����H�H��1��4��I��H�@I� tI�FI��� upL�D$H��I�W��I�0�� umH��I�x��SM��I��Pj�AU���H�� ���lH�T$HdH3%(L���hH��X[]A\A]A^A_��L�D$I�OI�WI�0�� t�I�pI�x�fD�����~?H�l$���5H�D$M�uL�t$��u*H�������H�|$�%��������H�D$H��t
H�|$�^%����������D�H�=�N��#���H�=S=H�D{#�#���H�=@�H�4{#�#���H�=�bH�${#�#���H�=%GH�{#�g#��H�{#�p���H�����H���:����L���'��I������L���'��I�����H���'��H�������������H�|$����H����"��H�=�OH�1����H�H�l$H�D$H�T$�-���@Hc�I�l�@����-��H�������-���E�����x-��H�l$H���I���H�|$D�{����L�t$H��M���"-��E����,���H��HD�H�D$H�l$E��u1��<���H�="z#H�5�M��������D��A��H�l$E����������Hc�I�|����J���H����,���5�H��H�D$�K������H��H�qV#H�5UMH�8�B���H�SW#H�5CMH��H��y#H����H�=�y#�����H�?���H�5 MH�ay#���H�=]y#�����H�9���H�5�L���H�=>y#H�������H���H�5�L�j��f.���������SH��H��H�|$H�t$���H�5~E#H���f��H��tfH�t$H��� t4H�~Hcω�H9�u3H�vH�H�x������t$H�D$H��[��H��H��������H�wV#1�H�81���H��W#H�5�MH�81������UH�5�D#SH��dH�%(H�D$1����H����1�H��H���4&��Hc�H����1��A��H��H�@H� uQH��H��H�$�&����~[H�H�4$�� tBH�CH�SH)�H9�jH���Z��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�V#1�H�81���H�W#H�5�LH�81����H�
QM�{H�5�LH�=�L����
��@��ATI��UH��S��H�� dH�%(H�D$1���H�D$����������tjI�$H�D$����H�|$��H�|$�r���H�D$H�0�� ��H��H�x����H��H����H�} �)���H�] �H�D$H�|$u'H�L$dH3%(H����H�� []A\��H�|$�����t��i���D������5���H�|$t
H�|$����1����
��H�xHc׉�H9�uvH�x�I�H��H���K�������H�D$H��� u;H��H��H�D$��H�t$1����H��H������H��S#1�H�81�� �H�PH�T$H�P���L�������SH�5B#����H����H�H�@Hc0��~H�x[�~���fDH��Q#H�8t1�1�[���H�qS#��H�=(3H��$��H���H�=HJ�$��H�;A��1�H�
JH�3�����H�ST#H�5�IH�81��:�f.���UH��H�51A#SH�����H��t`H��H���w
��H��H���,��H��H���!����t��uH���[]�@�3��H��1�[]�H�3R#H�5�IH�81���H��S#H�5:IH�81���f.�PX1�H��H��Q#H�81��w����ATUH��SH��H�����H��I�����H�5X@#H��H���=���H��tH��L��H���z����t H��[]A\�H�S#H�5�HH�81����q������ATUH��H�5�?#S���H��t-H��H���I��I��H�����L��H���#
����t H��[]A\�H��R#H�5?HH�81���H�Q#H�5�HH�81������H��H�5�?#�l���H��tH�����H��t$H��H����H�OR#H�5�GH�81��6�������UH�54?#SH������H��t5H����"��H���E�H��H��tMH��H�����H�߅�t#H��[]�`��H��Q#H�5hGH�81�������H�,P#1�H�81�������ff.���SH�5�>#���H��t+H�����H��H��t;H�����Hc�H9�u#H�߉�[���H�`Q#H�5�FH�81��G�H���O����f.���S1�H�2>#���H������H��t	H�C H��[��r���f���H�%N#SH�5�FH�8��H�O#H�gL#H�5�FH��H�H�����H�+O#H�;H�5GH�H�P#H����H��P#H�5a���H��H���H�;�����H�����H�5�3�K��H�;1�H����H�5W0�3��H�;1�H�����H�5dF���H�;H�UFH�5
;�e���H�;1�H���H�5=F��
��H�;1�H�����H�5�A��
��H�;�H���H�5F�
��H�;�H�[���H�5�U�
��H�;�H�����H�5_M�
��H�;1�H�����H�5�E�l
��H�;[�H���H�5�E�P
����UH�5�<#SH��dH�%(H�D$1��J���H����1�H��H���t�Hc�H����1�����H��H�@H� uQH��H��H�$�B��~[H�H�4$�� tBH�CH�SH)�H9�jH�����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��N#1�H�81���H��N#H�5EH�81��x�H�
1K��H�5EH�=D�I������@�������SH�5�;#H��dH�%(H�D$1�����H��tTI��H��1�1�1��5�����H���8�H��H��thH�4$H���d��H�߅�t8�X��H�T$dH3%(uH��[�H��M#H�55DH�81����������H��M#H�5CDH�81���H�yM#H�5#DH�81��p���SH�5�:#H��dH�%(H�D$1��K���H��tlH��I��1�1�1��e��H�$1��0�Hc�����H��H�$H�sHcH� u,H�x�3���H��H�L$dH3%(u.H��[�f.�H�s��H��L#H�5MCH�81�������ff.�f���SH�5:#H��dH�%(H�D$1����H��tl1�I��H��1�1��
��H�$1��0�Hc�����H��H�$H�sHcH� u,H�x�s���H��H�L$dH3%(u.H��[�f.�H�s��H�L#H�5�BH�81����=��ff.�f���AVAUATI��H�5L9#UH��S��H��H��PdH�%(H�D$H1����H���I��H�D$H�D$0H�D$H�D$8H�D$H�D$@�z�H�D$(���i����1�M�4$L�t$����H�D$H�D$H���"����L����H�|$ H�D$ �B�H�D$ H��� �H�PH�T$(H�P1�H�t$(�h��H����H��J#H�5�AH�81�����I�T$H�T$���i���I�T$H�T$����H����L������H�|$H�����H�|$I��1�H��uLL��H��H���
��H����H�E L�����H��H�L$HdH3%(��H��P[]A\A]A^�D����f�H�|$(������������~$H�D$(���DH��H��H�D$(������H�|$(t
H�|$(��������0���H��I#H�5�@H�81���H��I#H�5@H�81�������ff.���ATUSH����upH�����tgH��ƒ���tZ��uUI��H��H�5�6#�C���H��H��tCH�5�6#L���,���H��t/H���o���H��t:H�C H���~�H��[]A\�fDH����H��H#H�5k?H�81�����H��H#H�5�?H�81��������UH�5�6#SH��dH�%(H�D$1���H����1�H��H���t�Hc�H����1��!�H��H�@H� uQH��H��H�$�B���~[H�H�4$�� tBH�CH�SH)�H9�jH���:�H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��G#1�H�81�����H��G#H�5JCH�81�����H�
aD��H�5R>H�=l=�����@��������USH��H��H��(H�t$dH�%(H�D$1��F�H�|$H�D$�w�H�5 5#H���H�H����H��H�D$H��� tGH�PH�T$H�P1�H�t$���H��t;H�C H���e��H��H�L$dH3%(u4H��([]�H��H��H�D$���H��F#H�5�=H�81�������H��F#H�5#BH�81�������ATUSH����uxH�����toH��ƒ���tb��u]I��H��H�584#�c�H��H��tKH�5$4#L���L�H��t7H�=�D#H����H��t;H�C H�����H��[]A\��H����H�F#H�5zAH�81����H��E#H�5�<H�81�������UH�54#SH��dH�%(H�D$1���H����1�H��H�����Hc�H����1��A�H��H�@H� uQH��H��H�$������~[H�H�4$�� tBH�CH�SH)�H9�jH���Z�H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�E#1�H�81����H�E#H�5<H�81�����H�
aA�}H�5r;H�=�:������@���W����ATUSH����uxH�����toH��ƒ���tb��u]I��H��H�5�2#�s�H��H��tKH�5�2#L���\�H��t7H�=�?#H���(�H��t;H�C H�����H��[]A\��H��� �H�!D#H�5%;H�81����H��C#H�5�:H�81�������ATI��U��SH��H�� dH�%(H�D$1����H�D$���6��������H�D$H�|$�H�|$��H�|$��H�5�1#H���l�H����H�t$H��� ��H��H����H��������H�L$dH3%(H����H�� []A\��I�$H�D$���a���H�|$t
H�|$�����1����N���fDH�51#H�����H��tV�����1�H�����q���H�~Hcω�H9�udH�v�R���f�H�|$�v������k��������p���H�oB#H�5s9H�81��V�����H�BB#1�H�81��>���I��f����������ATUSH����uxH�����toH��ƒ���tb��u]I��H��H�5�0#���H��H��tKH�5�0#L�����H��t7H�=(B#H����H��t;H�C H���G��H��[]A\��H�����H��A#H�5�8H�81��x��H�iA#H�5o8H�81��`����ATI��UH��S��H�� dH�%(H�D$1��'��H�D$�����������H�D$H�|$��H�|$tvH�5"/#H�����H��H����H�|$��H�|$H�D$���H�D$H��� ��H��H��H�D$��1�H�t$�8��H����H�E H���#�H�L$dH3%(H����H�� []A\�I�$H�D$���A���H�|$t
H�|$�,
���1�����fDH�|$�
������f���������볐H�PH�T$H�P�J���H��?#H�5�6H�81�����H��?#H�57H�81�������f���UH�54.#SH��dH�%(H�D$1���H����1�H��H������Hc�H����1���H��H�@H� uQH��H��H�$�����~[H�H�4$�� tBH�CH�SH)�H9�jH���*�H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��>#1�H�81�����H��>#H�5�5H�81����H�
;��H�5B5H�=\4�����@���W����ATUSH����uxH�����toH��ƒ���tb��u]I��H��H�5�,#�C�H��H��tKH�5�,#L���,�H��t7H�=�9#H����H��t;H�C H�����H��[]A\��H������H��=#H�5�4H�81�����H��=#H�5�4H�81������ATI��UH��S��H�� dH�%(H�D$1����H�D$�����������H�D$H�|$��H�|$tvH�5�+#H���J�H��H����H�|$��H�|$H�D$�E�H�D$H��� ��H��H��H�D$��1�H�t$���H����H�E H����H�L$dH3%(H����H�� []A\�I�$H�D$���A���H�|$t
H�|$����1�����fDH�|$�n������f��[�������볐H�PH�T$H�P�J���H�O<#H�5S3H�81��6��H�'<#H�5�3H�81�����Y�f���UH�5�*#SH��dH�%(H�D$1����H����1�H��H���D��Hc�H����1��q�H��H�@H� uQH��H��H�$�����~[H�H�4$�� tBH�CH�SH)�H9�jH����H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�4;#1�H�81��0��H�1;#H�5R2H�81����H�
Q7��H�5�1H�=�0����4�@��AWH�5�)#AVAUATUSH�����H����H��I������A��~���L�=�7#1�H�D$@��L������I�?1�H��'#H���B��H��I����H����H��t=I�F H�|$L�����f��A9�u�H�D$H��[]A\A]A^A_�DH�D$��H�:#1�H�81����H�:#H�5<1H�81����f���ATI��H�5�(#USH�����H��t?H�5J'#L��H�����H��txH����I��H��tPH��H���_��H��t H��[]A\�H��9#H�5�0H�81����L������H�s9#H�5�0H�81��j��H�[9#H�5=0H�81��R��H�S9#H�5�/H�81��:��f.���ATI��U��SH��H�� dH�%(H�D$1����H�D$���6��������H�D$H�|$�H�|$��H�|$���H�5�'#H����H����H�t$H��� ��H��H����H����������H�L$dH3%(H����H�� []A\��I�$H�D$���a���H�|$t
H�|$����1�����fDH�5'#H���	�H��tV�����1�H���U���q���H�~Hcω�H9�udH�v�R���f�H�|$����������������p���H��7#H�5�.H�81�������H��7#1�H�81��~�����f���ATI��UH��S��H�� dH�%(H�D$1��7��H�D$�����������H�D$H�|$��H�|$tvH�5�%#H����H��H����H�|$����H�|$H�D$���H�D$H��� ��H��H��H�D$��1�H�t$�X�H����H�E H���3���H�L$dH3%(H����H�� []A\�I�$H�D$���A���H�|$t
H�|$�<���1�����fDH�|$�������f���������볐H�PH�T$H�P�J���H��5#H�5 -H�81�����H��5#H�5^-H�81������	�f�PXH�58,H��H��5#H�81����f���H��H�5##dH�%(H�D$1��|�H��t/1�1�1�I��H����H�<$���H�T$dH3%(u
H�������~�ff.���UH��H�5�"#SH����H��t2H�5{"#H��H����H��t3H��H���@�����H�H����[]�H��4#H�5S+H�81�����������UH��H�5!"#SH����H��t2H�5"#H��H����H��t3H��H��������H�H����[]�H�q4#H�5�*H�81��X�����H�91#S1�H��H��!#H�8����H��tH�X [��d���@��AWH�5C"#AVAUATUSH��xdH�%(H�D$h1�����H�D$H�������H�|$H�D$8�p���D$����H�D$`1�H�D$H�D$XH�D$ H�D$PH�D$(H�D$LH�D$0����9l$�oH�|$���'���H��H��t�L�D$H�L$ H��H�D$`H�T$(H�t$0H�D$XH�D$P���A�ą�x�H���i���H���q�I��H���B� �L��I�����L��H���
���Ic�L��H�t6���Hct$LL��H�t6���H�|$P�H��t��H��L������H�|$X�H��t��H��L�����H�|$`�H��t���H��L�������H��I���+�A�Ņ�~+E1��D��H��A���Q�H�����L��H���N���E9�u�L��L�����;���H�|$8L���.���9l$�����H�T$hdH3%(H�D$8u'H��x[]A\A]A^A_�H��1#H�5�(H�81�������H��1#1�H�81����PXH�5/-H��H��1#H�81����f�H�q.#S1�H��H�\#H�8�D��H��tH�X [����@��USH��H��H�5�#H���T��H���H��H�5q#H���9��H��H��tM�����H��H��������t,��H������H�=k/#H������H��tJH��H��[]�P���H���[]�H��0#H�5�'H�81�����H��0#H�5?'H�81����H��0#H�5�'H�81����ff.��PX1�H��H�y0#H�81��w�����S1�H��#���H���E��H��t	H�C H��[����f���AUH�5#ATUSH���&��H��tTH��H�����Hc�I������I��E��~(1ې��H������H���+��L��H����A9�u�H��L��[]A\A]��������H��H�5�#dH�%(H�D$1����H���E1�1�1�H��H�������xQ��u4H�<$H��t��H�L$dH3%(uH���D�����H�5/#H�5�&H�81��,��H�/#H�5�&H�81����H�/#H�5~*H�81����ff.��PXH�5~&H��H��.#H�81�����f���H��H�5�#���H��t!E1�1�1�1�H���&�����x$H�H��H�D�H��.#H�5*H�81��~�����f���H��H�51#dH�%(H�D$1��L��H��tP1�1�1�I��H�������x6H�<$H��t!�t�H�T$dH3%(uH��������<�����H��-#H�5a)H�81�����ff.�@��H��H�5�#dH�%(H�D$1����H��tPE1�1�1�H��H��������x5H�<$H��t ���H�T$dH3%(uH���fD������g���H�X-#H�5�(H�81��?��ff.�@��H��H�5�#���H��tH���O�H���W��H��H������6���fD��S1�H��#���H���%�H��t	H�C H��[��2���f�PXH�5�#H��H��,#H�81����f���AVH�5�#AUATUS���H����H��H������Hc�I���)��I��E��~FL�5�*#1����H�����L��H�����H��t'H�ǃ����L��H���0�A9�u�[L��]A\A]A^�H�,#H�5#H�81�����2���f���UH��H�5#SH������H��t0H�5�#H��H�����H��t1H��H�����H��H�[]H�D�H��+#H�5�"H�81����H��+#H�5�"H�81��r��f���S1�H��#���H������H��t	H�C H��[����f���UH�5�#SH���*��H��tLH��H��(#1�H�B#H�8����H��H����H��tH�E H��H��[]�@�H��H��[]�����@��H��H�5Q#���H��tH�����H��H�H�D�����ff.���H��H�5#�|��H��tH���o��Hc��w�H��H���+�����fD��S1�H��#���H���u��H��t	H�C H��[����f���UH��H�5#SH�����H��t0H�5+#H��H������H��t1H��H�����H��H�[]H�D�H��)#H�5� H�81�������D��S1�H��#�]��H������H��t	H�C H��[���f���H��H�5a#�l��H��tH�����H�H��H�Ѓ��H�O)#H�5p H�81��6���fD��AUATI��H��UH��SH����t\�����H��t\H�50#H�����I��H��t]1�L��H�t#���L���H���B��H��t'H�E H��H��[]A\A]��C����H��u�E1��H��(#1�H�81�蓿������ff.���H��H�5A#dH�%(H�D$1��\��H��t<E1�1�1�H��H�t$������xY��u<H�T$dH3%(HcD$H�DuH���H�(#H�5�#H�81������>��H��'#H�5�H�81����H��'#H�5oH�81��ξ��ff.���H��@��t"���Hc�1��c���H��tEH���f�@��uH�����t�����
t�H��1����@���������@��AWAVI��AUATI��H�5g#UH��SH��HH�L$H��$�L�D$(L�L$dH�%(H�D$81��D$4���H�D$H���)H�5U#L������H�D$ H����H������N���$H����H��E1�����H��L�h�=DH����I9�}^H�-�##L��H�uJ�<�N�$��M�H���KI��H��� u�L;{}$H�-k##H�C H�u�Ð�+���$H���}����<$�E1�E1�H�l$4H�t$H��H�=J�������t$4H�D$���|H��$�H�D$��H��$�H��H�=������L$4H�Ņ���H��M��D��UL�L$ �T$H�t$0H�|$(���I��XZM���1H����H�CE1�H�$�;f�H����I9���H�$J�<��c�������L��H����������I��H��� u�L;k}aH�C ��H�|$@����H�|$���A��H�l$4H�t$(H�=3���H������|$4I�ą�����H�D$E1�1�fDH�|$�n���H���f���L���^����|$4����H�L$8dH3%(L����H��H[]A\A]A^A_�@H�D$1���S��A���W���H�|$���H�����L�����H�/$#1�H�81��+���1��g����1��Q���H�mH� t+H��J�<#�O�H��H�5eH��H�[##H�81����H�[ ��H��##H�5NH�81��ú��H��##H�5�H�81�諺�����������AUI��ATI��US��H��(dH�%(H�D$1��e���H�D$���4���	1������A�H����1�H��tH���������ý����I��tL��A��������H�5�#L�����H����1�1�H�L$H��L�D$�V����H�t$H�|$Hc�Hc��Y�����u���1�H�t$dH34%(H����H��([]A\A]��I�,$���&���M�d$������H�|$t
H�|$�C��1������DH�|$�&���������x�H�D$����D��������@��������H��!#H�5fH�81����H��!#H�5mH�81��̸��������AWI��AVAUATUH��S��H��dH�%(H�D$1�聺��H�$�������`L�eL�u��t[L�m���7H�5G#L���O��H��H���<L��1����I��I��tHL��A��������Hc��1f�H�5�#L�����H��H����L��1��K��I��L������H��L��H��H��I���L��H�5�#L����{����~bH�L$dH3%(��H��[]A\A]A^A_���s�����~WH�$L�eA�L�u��u7H������H���F�������1�������Hc��K���L�m��~�H�<$tH���������w��H� #H�5)H�81�����*��f.���AWI��AVAUATUH��S��H��dH�%(H�D$1�衸��H�$�������`L�eL�u��t[L�m���7H�5�
#L���o��H��H���<L��1����I��I��tHL��A�����.���Hc��1f�H�5Y
#L���!��H��H����L��1��k��I��L������H��L��H��H��I���<��H�5�#L���������~bH�L$dH3%(��H��[]A\A]A^A_��蓾����~WH�$L�eA�L�u��u7H������H���f��������1�������Hc��K���L�m��~�H�<$tH���(��������H�(#H�5,H�81������J��f.���AWAVAUATI��UH��S��H��xdH�%(H�D$h1�H�D$H�D$@H�D$H�D$HH�D$ H�D$PH�D$(H�D$XH�D$0H�D$`菶��H�D$8��������E1�I�$�H�D$I�D$H�D$H�D$@H�x�"�H��t
Hc�I�4�H�2��H��H9�tH�P9��H��t�H��H�H9�u�9��WM���H�58#H�����I��H���VH�|$1���H�|$I���;�H�|$(I��H����H�|$0H������H�|$ H��H����H��E1�I��L��L��M��L����H�5q#L�����7������H�t$hdH34%(H����H��x[]A\A]A^A_�f�@��tr�%���H�|$0Hc�H���i������H�|$ H��H���i���H�L$����H�L$I���Y���DH�|$8���������˻����~L�D$8�J���@�S���H�|$8t
H�|$8���������H��#H�5�H�81�膲�����H�r#1�H�81��n���ff.���AWAVAUATI��UH��S��H��xdH�%(H�D$h1�H�D$H�D$@H�D$H�D$HH�D$ H�D$PH�D$(H�D$XH�D$0H�D$`���H�D$8��������E1�I�$�H�D$I�D$H�D$H�D$@H�x�"�H��t
Hc�I�4�H�2��H��H9�tH�P9��H��t�H��H�H9�u�9��WM���H�5X	#H���`��I��H���VH�|$1��x�H�|$I����H�|$(I��H����H�|$0H�����u�H�|$ H��H����H��E1�I��L��L��M��L������H�5�#L�����������H�t$hdH34%(H����H��x[]A\A]A^A_�f�@��tr腷��H�|$0Hc�H���i����N���H�|$ H��H���i���H�L$�R��H�L$I���Y���DH�|$8�6�������+�����~L�D$8�J���@����H�|$8t
H�|$8�������n��H��#H�5 H�81�����!��H��#1�H�81��ί��ff.���H��#ATH�5vUSH�8貸��H��#H�|#H�5\H��H�H�����L�%P#H�;H�5GH�_#H�I�$�[���H�-�#H�5��H��H�E豼��H�}�H���H�5���H�}�����H���H�5������H�}�����H����H�5�����H�}�H���H�5����H�}�H����H�5����H�}1�H����H�5��|��H�}1�H��H�5��c��H�}�����H����H�5z�G��H�}�����H�����H�5�+��H�}1�H�.��H�56����I�$H�;H�5N����H�-�#�H���H��H�5H�E蹱��H�}H�5���Y���H�}�H�Y��H�5����H�}�����H����H�56����H�}1�H���H�5E�x��H�}1�H���H�5��_��H�}1�H�2�H�5��F��H�}1�H����H�5Q��-��I�$H�;H�5d�:���H�-#H�5��H��H�E萺��H�}�H�`��H�5�����H�}�����H����H�5m�����H�}�H���H�5���H�}�����H����H�5�
���H�}�H�P�H�5�
�t��H�}1�H�g�H�5(
�[��H�}1�H���H�5�
�B��H�}�H���H�5�
�&��H�}�����H�6���H�5=�
��H�}�����H�:���H�5�����H�}1�H�!��H�5������I�$H�;H�5H
���H�-�#H�5��H��H�E�8���H�}�H���H�5�����H�}�H���H�5��p��H�}�����H���H�5��T��H�}1�H�7�H�5[�;��H�}1�H�~�H�5��"��H�}1�H�e�H�5��	��H�}1�H���H�5�����H�}1�H�C�H�5�����H�}1�H�j�H�5����H�}1�H���H�5����H�}1�H����H�5�����I�$H�;H�5n虺��H�-�#H�5�H��H�E���H�}�H����H�5>��C��H�}�����H�c��H�5��'��H�}�H�w��H�5g����H�}�H����H�5�����H�}1�H�b��H�5�����H�}1�H�9��H�5����H�}1�H�`��H�5����H�}1�H�w��H�5����H�}1�H�.��H�5���r��H�;�H�5����H�;�H�5���H�;H�����H�5��t��H�;�H�5��`��H�;�H�5��L��H�;�H�5��8��H�;�H�5�
�$��H�;�H�5����H�;�
H�5�
���H�;�H�5�
����H�;�H�5{����H�;�H�5����H�;�	H�5����H�;�
H�5����H�;�H�5����H�;�H�5��p��H�;�H�5��\��H�;�	H�5��H��H�;�H�5�4��H�;�!H�5s� ��H�;�AH�5h���H�;��H�5_���H�;�H�5T����H�;�H�5L����H�;�H�5A���H�;�H�5����H�;�H�5$���H�;�H�5���H�;�H�5�l��H�;�H�5�X��H�;�H�5�D��H�;[�]H�5A\�,��f.�f���UH�5D�"SH��dH�%(H�D$1��ڻ��H����1�H��H������Hc�H����1��a���H��H�@H� uQH��H��H�$�����~[H�H�4$�� tBH�CH�SH)�H9�jH���z���H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�t
#1�H�81�� ���H�!#H�5�H�81�����H�
q��H�5�H�=��ٶ���$��@���ש�����AUATI��U��SH��H��HdH�%(H�D$81�H�B �D$H�D$ H�D$(�{���H�D$0�������	����I�$H�D$����I�D$H�D$����H�|$0��E1�H�|$t
H�|$���I��H�|$����H�t$(H��H������H�D$(H��H�C �&����!���H�|$(H�L$0L��H�T$L�D$ �U��������ȫ��H�t$H���bH�=�	#H�T$����T$I�Ņ��jH�t$0H���HH�=5#H�T$��V��I�ċD$��u#H�t$ �H��tH�=�#H�T$�+��H��H�|$0���H�5'	#H�|$ ����L��H�5-
H�����L��H�5 
H������H��H��H�5
�����|$��t1���f.�H�D$H�D$H�|$0u.�������H�L$8dH3%(H����H��H[]A\A]�@H�|$0�~����@�s������	���H�|$0t
H�|$0�Y���1�������H�t$0A�H�������A�����f��A�����H�a
#H�5	H�81������C����ATUSH�����|H�����tsH��ƒ���tf��uaI��H��H�5�"迷��H��H��tOH�5�"L��訷��H��t;H�5D#H�=m
#H������H��t8H�C H���|���H��[]A\�@H���h���H�i#H�5.H�81��P���H��	#H�5hH�81��8������S1�H�r�"�ݣ��H��腢��H��t	H�C H��[�H�H	#1�H�81���@��AWI��AVA��AUATUSH��dH�%(H��$�1�H�D$HL�l$8H��$�H�D$PL�d$@H��$�H�D$XH�l$`H��$�H�D$pH�\$hH��$�H�D$xH��$�H��$�L��$�L��$�H��$�H��$�H��$��(���HDŽ$����,A����E1�H��$�1�L��H�qfDH��tI�<H�8H�H��H�� u�H��H�q0��'�H��t
Hc�I�<�H�8��H��H9�tH�B A9��H��t�H��H�H9�u�A9���M���uH�|$8H�$tL�����H�$H�D$H�|$@t
L������H�D$L�l$HE1�L�����L�d$PH�D$ L���Y��H�|$`H�D$(��E1�H�|$h�yH�|$p�D$H����H�|$x�D$H���+H��$��D$H����H�2#H��"1�H�8�i���H�l$XE1�H��H��tH��耳��I�‹D$E��M��P�D$ P�D$ PAWH�t$(H�|$ H�L$HH�T$@L�T$0�h��H�� L�T$H�58#I��L�����M����L�s H��L��H�5-���H��L��H�5 �ܼ��H��H��H�5�ʼ��H��H��$�dH3%(�kH��[]A\A]A^A_�fD@����詥���D$���@����葥���D$����H�����H������A�Dž��l���H�T$h�>fD@�����I����D$�^���H������H�����A�ƅ�����H�T$`H��#H�5QH�81������H��$������y���fD���A��~;L��$������k����D$����f��[����D$���f��K����D$���H��$�t
H��$�����
�D�����H��#1�H�81��u���谼����H�=#SH�5�H�H��#H�8�K���H�l#H��#H�5�H��H�H��(���H�i#H�;�����H�5�H�H�����à��H�;H�5����d���H�;�H���H�5�����H�=�	�}���H�;E1�1ɺH���h��H�=��\���H�;E1�1ɺH���G��H�=��;���H�;E1�1�H�ƺ�&��H�;�����H�����H�5���;���H�;1�[H�N���H�5F��"���f����7�����駽�����UH�5��"SH��dH�%(H�D$1����H����1�H��H���T��Hc�H����1�聭��H��H�@H� uQH��H��H�$�"����~[H�H�4$�� tBH�CH�SH)�H9�jH��蚮��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��#1�H�81��@���H�A#H�5�H�81��(���H�
!�gH�5�H�=�����D���@��������AWAVAUATI��H�5J�"U��H��SH��H��xdH�%(H�D$h1��D$误��H����I��H�D$L�l$(H�D$@H�D$ H�D$HH�D$0L�l$PH�D$X�f���H�D$8���
���;1�I�$M�|$H�D$L�|$ ��*H�D$(H�D$0H��t:H�|$8����.�I�D$H�D$(��t�I�D$H�D$0����H��u�L��E1��F���H�|$0H�D$H���bH�|$(�L���n��H�|$I��H���,H�t$���I�NjD$�����N��H���ƞ��H��H����H�T$E��L��I��L��L����L��A��膛��H�5?�"L�����E���?詷��H���1���H��tH�����H��H�5�H���ݶ���h���H�����H�5��H��H��辶��A����HE�H�L$hdH3%(�#H��x[]A\A]A^A_�f�H�5S�H���!���H�D$(H������H�|$E1�H������E1�����@��t*�U���A�����D�C�����~H�T$8���@�˯��A���a���H�|$8t
H�|$8�������耵��L���8����|$����H�8#H�5��H�81����L������H�5�"L�����H�	#1�H�81�轗��H��#H�52�H�81�襗�������AWAVAUATUSH��H�$H��(H�t$H�5��"I��dH�%(H��$1��[���H����H�xI��薯������H�|$H�l$����1�L��I�����I��H��u�Q���H��L������9�u9�H��L���?����Å��L��L�������t�H�5x�L��薴��L��莿��L������!���H��uAH��$dH3%(H�D$uTH��([]A\A]A^A_�f��L���������.���H���"1�H�81��X���H�Y�"H�5�H�81��@����{���ff.���AWH�5��"AVAUATUSH������H���H�xH���M�������H�C L�`M����L������Ņ���Hc�艠��I�Ņ�tz1��;fDH�5��"H�=��"L���2���H����I�G L��L������9�t;��L��虢��H�"�"1�I��H���"H�8����I��M��u�����H��L��[]A\A]A^A_�fDH�{�w�����uH�C L�`0M���.���H��[]A\A]A^A_����H�7�"1�H�81����H��"H�5`�H�81��Ӕ��H��"H�5��H�81�軔��ff.���AWH�5�"AVAUATUSH��蒩��H���RH��衯��I��H����H��荥���Ņ��DHc�����I�Ņ�tt1��5H�5�"H�=�"L���ʬ��H����I�G L��L����/��9�t;��L���1���H��"1�I��H�>�"H�8趕��I��M��u�艺����H��L��[]A\A]A^A_�fDH���"H�8tH��[]A\A]A^A_鸬��H�i�"��H�= �H����H��'�H�=�����H�;A�61�H�
��H�������H���"1�H�81��7���H�8�"H�5��H�81�����H�X�"H�5��H�81��������SH�5d�"���H���VH�xH���*�����teH�{������t?H�{��������H�{�����tgH�{��������[�fDH�=#H��tl[���fDH�=	#H��u�H�=b������[H��H��#����H�=�#H��u�H�=M�����H��H��#��H�=��	���H��H��#�t���H�=y#H���d���H�=��	�O��H��H�U#�D���H�=9#H���4���H�=T�����H��H�#����H���"H�5�H�81��x������ATI��U��SH��H�� dH�%(H�D$1�H�B H�$�/���H�D$�������
����I�$H�D$����H�|$��H�|$I���ӝ��H�|$H�D$���1�1�L��H��H���b���H����H�$H��H�C ���H�ߺH�5T��u����H�5V�H���a�����H�D$H�|$u'H�L$dH3%(H����H�� []A\��H�|$�6����t��=���D�#���������H�|$t
H�|$�	���1����{���1�1ҾH���צ���R���L��H������H������H������H�<$轐��H�n�"H�C H�5�H�81�譏��������ATUSH����upH�����tgH��ƒ���tZ��uUH��H9�tDH�5��"H���^���I��H��t>H�5��"H���G���H��t*H�����H��t5H�C L������H��[]A\ÐH������H��"H�5��H�81�����H�9�"1�H�81����ff.�f�PXH�5$�H��H��"H�81��Ž��f���H��H�5a�"謣��H��t
H�xH��������D��H��H�51�"�|���H��tH�@H�xH���&��������H��H�5a�"�L���H��tH�@H�xH�����H�7�"H�5��H�81�����ff.���H��H�5��"���H��tH�@H�8H���w�������f�PX1�H��H��"H�81��Ǎ�����USH��H��H���۽��H�5T�"H��H��虢��H��tH��H��蹪����t"H��H��[]�H�|�"H�5��H�81��c����~���ff.���S1�H���"���H���ղ��H��t	H�C H��[��B���f���H��H�5!�"����H��t4�4H��芜��H��t:�8t�H���fDH�xH���#���H��"H�5.�H�81�軌������fD��AUATI��UH��SH��H��H����L��I��趼��H��I���ۿ��H�5��"H��H���i���H��t#H��L��L��H���s�����t&H��H��[]A\A]�H�B�"H�5��H�81��)����D���@��S1�H�"�"�͍��H��襲��H��t	H�C H��[�����f���UH�5T�"SH���ڠ��H��t5H�����H������H��H��tMH��H������H�߅�t#H��[]� ���H���"H�5�H�81�舋��賍��H���"1�H�81��p������ff.�PXH�5��H��H�T�"H�81��B���f�SH�5��"�3���H��t(H�xH���r�����t
��t1�[�@H�C [H�@�������H�����H��H���'������ATI��UH��S���H����H���(���H�����H��u�H�5T#H��tM��H��L�r1�1��i��H��[]A\Ð�H�=����H��H�#��SH�5��"�S���H��t(H�xH��蒢����t
��t1�[�@H�C [H�@�������ATI��UH��S���H����H��訑��H�����H��u�H�5�#H��tM��H��L�"1�1����H��[]A\Ð�H�=V��/���H��H�M#����H���3���H��H��釭�����ATI��H�5��"USH���f���H��t"L��H�����H��H���ێ����t H��[]A\�H�@�"H�5��H�81��'����B���f���H��H��H��두��ATI��H�5p�"USH�����H��t"L��H������H��H��苼����t H��[]A\�H���"H�5D�H�81�跈������f���H��H��H��두��USH��H��H�5=�"H��脝��H��tKH�5��"H�=Y�"H�����H��H��tjH�5��"H���R���H��tQH��H��肊����t"H��H��[]�H�5�"H�5s�H�81�����H������H�M�"H�5��H�81�������H�0�"1�H�81����@��ATI��H��H�5��"US�Ɯ��H����H�5N�"H�=_�"H���7���H��H����H�5�"L��茜��H��H��tsH��H���)�����tDH�{輟����tL��[]A\����~���H���2H���	���L��[]A\�H��詨��H�b�"H�5��H�81��������H�E�"1�H�81����H���"H�5T�H�81�������UH��H�5A�"SH���Ǜ��H��t$H��H���7���H��H��謱����t"H��H��[]�H���"H�5�H�81�膆��������SH�5��"�o���H��t<H�xH��讞����t	1�[�D1�1ɾH���?���H�¸H��u�1�������f���H��H�5��"����H��t#1�1ҾH�����H��H�H��H�Ѓ������ff.�@��SH��H�51�"輚��H��tEH��tH��u"1�H���H����1�蔞��H��t5H��[�H���"H�50�H�81��r���H�s�"H�5��H�81��Z����u���D��AWAVAUATUH��H�5��"SH��(dH�%(H�D$1�����H���`I��H�l$@����@��u
H�������H�|$����H�T$H��� ��H�BH�ZH�D$L�-2�E1�M��@L���1H����������!�%����t������D�H�qHDΉ�@�H��L)�H9�uH�t$L��H�$���H�$��toA��I��A��u�H���"H�5�H�81��9���f�H�BH��H�D$���R����E��������H���a���H��H�D$����@Mc�L��K�@A�t��l�����t?H�\$dH3%(H��u'H��([]A\A]A^A_�H���"H�5+�H�81�螃���٢�����@��S1�H���"�=���H���Վ��H��t	H�C H��[����f���ATH���"USH�� H�t$1�dH�%(H�D$1�H���"H�8���H�|$H���ʻ��H�t$H�D$H��H��豅��H��I���&���M��tZH�|$�H��t�]���H��L�c H�5y�H��藠���H�5x�H��胠��H��H�L$dH3%(uH�� []A\����͡��ff.�f���H��H�5��"�l���H��tH�@H�8H�����H�X�"H�5��H�81��?���ff.�@��AWAVAUATI��UH��S��H��dH�%(H�D$1���H�$�������ZL�uL�m����L��1��-���L��I����I��L��H�5%�"谖��I��H���D�_���H���׆��H��H���L��A��H��L��L��跏��H�߅������H�L$dH3%(��H��[]A\A]A^A_�@L�}����L��1�艱��L��I���N���I��I���R���L��A��tH�����=���@�����~QH�$L�uL�m��u-H�������A�H��足���@�K��������@L�}��u
H��u��j���H�<$tH���~����������訂��H���"1�H�81��e���蠟��H�a�"H�5��H�81��H������AVAUATUH��S��H��`dH�%(H�D$X1�H�D$L�d$�D$H�D$0H�D$H�D$@H�D$ L�d$8H�D$H�ց��H�D$(���u����1�L�mH�EL�l$H�D$��[H�D$H�D$ H��tiH�|$(育��H�|$H��u_�2���H�|$ 1�I��H��t_@��� �S������L�H�EH�D$��t�H�EH�D$ ����H��u�H�|$H��t�裬��H�|$ 1�I��H��u�H���"H�u�"1�H�8軀��L��H��蠷��L��H�t$I��� ��I�ŋD$������L��L��L���a���L��H��H�����݀��H�k H�T$H��H�5D��e���H�5~�"L���F���H��H�L$XdH3%(ukH��`[]A\A]A^�fD�K�����~H�T$(���@�ӕ�����)���H�|$(t
H�|$(��������艛��L���A����|$�����C����.���H�5��"L��详��H�(�"1�H�81���}��ff.����AWAVAUATU��SH��H��xdH�%(H�D$h1�H�D$L�d$ �D$H�D$@H�D$H�D$HH�D$(H�D$XH�D$0L�d$PH�D$`�Z��H�D$8��������1�L�3L�kH�CL�t$L�l$H�D$ ��'H�D$(H�D$0H��t5H�|$8����)@H�CH�D$(��t�H�C H�D$0���LH��u�L��1��	���L��I���.���H�|$0I��H����H���"H��"1�H�8�d~��L��H���I���H�|$(I��H����H�t$�|��I�NjD$����A��L��L��L��L���ʀ��H����H�C H�T$ H�5��H���	����H�5��H�����L���M~��H�5�"L���Τ��H��H�L$hdH3%(��H��x[]A\A]A^A_��@��t2�ł��������fDE1��R���諄����~H�T$8�^���@�3��������H�|$8t
H�|$8�z����������L���}���|$�x���裚��L���}��H�5D�"L������H���"1�H�81��9{��f���AVAUATUH��S��H��@dH�%(H�D$81�H��L�t$H�D$ H�D$L�t$(H�D$0��|��H�D$���q����1�L�eL�$$��bH�D$H�D$H��tpH�|$1�菭��H�|$H��tf@���:�u���H�|$��uUH�5�L�����H�D$�?DH�UH�T$��t�H�UH�T$���H��u�H�|$1�H��u�H�|$t�L��H�5��"����I��H���/E1�H�|$uh軳��H���3��H��H������L��L��H���~������L���{��H���?���H�L$8dH3%(��H��@[]A\A]A^�fDH�x�ߑ����tJH�|$��L���&���I���n���fD�S�����~=H�D$���D�ې��������@1�1ɾL���/������@H��E��H�|$t
H�|$���������o���H���'{��L���{��H�(�"1�H�81���x��H���"H�5Q�H�81���x�����E1�������ATH���"H�5��L�%m�"USH�8I�$臈��H���"H�I�"H�5Q�H��H�H��d���H���"H�;�H�58�H�H����{��H�;�����H����H�5���{��H�;�����H�E���H�5���{��H�;�����H�����H�58��{��H�=��蒒��H�;E1�1ɺH���}���H�=���q���H�;E1��H�ƺ�Y���H�;H�5��
���H�;�H���H�5Z��_���H�;�����H��H�5���D���H�;�H��H�5O��)���H�;1�H�=�H�5s�����H�;�H�R�H�5"����H�;1�H���H�5��ޚ��H�;1�H�r�H�5��ƚ��H�;�H���H�5��諚��H�;�H���H�5��萚��H�;1�H���H�5���x���H�;�H���H�5���]���H�;1�H�A�H�5���E���H�;�H�F�H�5���*���H�;�H��H�5������H�;1�H���H�5�����H�;�H���H�5���ܙ��H�;�H�
�H�5q����H�;1�H���H�5_�詙��H�;�H���H�5I�莙��H�;H�:�H�5
��؈��H�;�����H����H�58��]���H�;�����H�>�H�5���B���H�;1�H�f�H�5s��*���H�;H�d�H�5��t���H�;1�H���H�5 ����I�$H�;H�5���	���H�-B�"H�;H�5��H��H�E����H�}H�5���L���H�}�H��H�5E�蠘��H�}1�H�3�H�5��臘��H�}H�~�H�5>��Ї��H�}1�H�#�H�5e��W���H�}1�H�J�H�5��>���I�$H�;H�5
��K���H�-��"H�5��H��H�E衁��H�}�H�a�H�5�����H�}1�H���H�5���ܗ��H�}1�H�_�H�5���×��H�}1�H��H�5��誗��H�;�H�5���֝��H�;�H�5�����H�;�	H�5��讝��H�;�H�5��蚝��H�;�!H�5��膝��H�;�AH�5���r���H�;��H�5��^���H�;�H�5��J���H�;�H�5��6���H�;[�]H�5��A\����f.�@��H���H�=<dH�%(H�D$1�H�T$袝��HcD$H�L$dH3%(uH��������H��賅���H���f����'������USH��H����H��腍��������t8~��ttA=�uJH��H��[]����@��u3H��H��[]�e}��DH��H��[]���f�H��H��[]�Bu��f�H���"H�J�"1�H�8�s��1�H�5��H�X H��H��萏��H��H��[]�H���"H�5��H�81��q��ff.���H�U�"SH��H�0�y��H��uH��[�H���"H�5q�H�81��Wq�����SH���"1��r��H��赅��H��tH�C H��1�H�5J����H��[�H��"1�H�81��q����AUATA��H��U��SH��dH�%(H�D$1��Տ���H�Å�u4�C�����H�L$dH3%(��H��[]A\A]�D��N{��Ic�1�H��H�TI���Y���HcվL��H�T�D���H�=��"H�T$L���0����D$���x����C1��D�C1�H�=8����t�����Z������T���@���G�@��SH��H��H�=~���H��dH�%(H�D$1�H�T$谚���T$��uH�L$dH3%(uH��[�H���Z����|$豗���܎��ff.����ATUH��S��H�� dH�%(H�D$1��Zq��H�D$��������H�EH�D$��ucA�L���5���H�|$I���ا��1�H��H���[���H��H����H���7q��H���x��H�L$dH3%(�CH�� []A\�f�L�e��~�H�|$t
H�|$赡�������$���@�w����~�H�UH�D$A�H�T$��uH���H���H�|$�k����9���fDL�e��~��D1�1ҾH���/���誇��L��1�H��H�s�"�F���H��H������1�1ҾH������t���1�H���jo��H��H�����1�1ҾH���̈́���H���1�H��L��H��"�d|��H��H���o��H�������H���"H�5��H�81��m�������USH��H��(dH�%(H�D$1��t������H��螚��H��H��蓈������~@��t�=�uH���Т��H��tIH�D$dH3%(��H��([]�D��u�1�H�T$H��H���Qu��H�<$tH�|$u�H���"H�5,�H�81���l��f.�1�H�t$H���q��H�|$u����1�H�t$H���1p��H�|$�]�����΋��H���"H�5��H�81��vl��fD��AUATUSH��H��H�5��"H�T$H�$�J���H���7H��I���f���H��莟��H�|$I���A~��H�D$H��� ��H�XHc�H9��H���~������H��H����1�L��H���Jx�����H�4$H��� ��H��H����H���O�������H�t$��H� uoH��H��L������H���莝����u*�Մ��H��1�[]A\A]��H�����H���@��u)H���[]A\A]�H�VH�v�t���H�v�H�#�"H�5��H�81��
k��H��"H�5W�H�81�����H���j��H���"H�5,�H�81���j��H���ڜ��H���"H�50�H�81��j��H��躜��H���"H�5"�H�81��j��f���H��H�5��"�|��H��tH���H�s�"H�5��H�81��j���f.���SH�5��"1�1�H���h���H��uH�5��"H���#��H��t[�H���"H�5��H�81��j��H��"H�5Q�H�81����ff.����AUATUSH��H��(H�T$dH�%(H�D$1�����H��I���
���H�|$I���{��L���e���1�Hc��;{��H��蓎��H���1�L��H��H����u������H�t$H��� tuH�VH�vH�������tnH�uH�E tH�uL��H��H�T$�ϓ��H��A���$���E��t\�t$H���|��H��H�L$dH3%(uUH��([]A\A]�DH��H�����H���ۚ��H���"H�5��H�81��h��H���"H�5��H�81��h���և��H��螚��H���"H�5>�H�81��vh��H�w�"H�5��H�81��^h��ff.���SH�5��"�?}��H��tH��H���_���H��[�H�+�"H�5w�H�81��"~��f���UH�54�SH��H�(�"H�8�q��H��"H�-
�"H�5��H��H�H�E��w��H���"H�}H�5��H�H���"H��w��H�q�"H�}�����H����H�5��H��B���H�;H�5(�����t��H�;1�H����H�5��;���H�;�H�l���H�5S�� ���H�;�H�����H�5������H�=��Ɂ��H���"����y������H��[]�������USH��8H�5G�"dH�%(H�D$(1���{��H���CH��H��������LH����j��H�L$H�T$H��H��H���}��H�T$ H�t$H���j���֗��H�<$H���z����H�=P�H���fj��H��H��H���xf��H�|$�N����H�=��H���:j��H��H��H���Lf��H�|$�"����H�=��H���j��H��H��H��� f��H�|$����H�=1�H����i��H��H��H����e��H�|$ �ʎ���H�=
�H���i��H��H��H����e��H��H�L$(dH3%(uH��8[]�H��"H�5��H�81��v{��衄��H�b�"H�5��H�81��Ie��f���AUI��ATU1�SH��H�t$H�$H��t
H�|$�4���H��1�H�<$tH��� ���H��H�5^�"L����y��I��H����H���
�����uwL���h��I��H��tH����i��H��H��t5H��tH����i��H��H��t H��H��L���қ����t`H��L��[]A\A]�H��踂��1�豂��H���"1�H�81��^d��H�_�"H�5��H�81��Fd��H�G�"H�5��H�81��>z��H���f���H���^���H��"H�5x�H�81��d��fD��AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$���I��1�H�|$t
H�|$�Ԇ��H��1�H�|$t
H�|$轆��H��H�5��"L���x��I��H����H���~������L���g��I��M��tL���vh��I��H��tOH��tH���ah��H��H��t<H��tH���Lh��H��H��t'H��H��L��L��������tlH�� L��[]A\A]A^�1�L���5���H���-���1��&���H�g�"1�H�81���b��H���"H�5�H�81��b��H���"H�5�H�81��x��L���ۀ��H���Ӏ��H���ˀ��H���"H�5��H�81��sb����ATUSH�� H�t$H�5��"dH�%(H�D$1��Cw��H����H��H���_}������H���Nf��1�1�H�t$H��H���zy��H�|$tpH�|$����H��I���]���1�Hc��s��H��H�xH� u;H��L���h{����xHc�H����t��H��H�L$dH3%(u\H�� []A\�DH�x�H���"H�5�H�81��za��H�{�"H�5��H�81��ba��H�c�"H�5��H�81��Zw��腀��H���"1�H�81��2a��f���AUI��ATI��USH��8H�-}�"dH�%(H�D$(1�H���u��H���H��H���|�����H��L����u��H��H����H����{�����H����d��H��I��趖��H��H����H�¾H���je��L��H�T$ H�t$�d��H�|$H��t2�e��H�|$ H���|e��H��t9H�|$ tH��t,H��H��H���|���H�L$(dH3%(L��uUH��8[]A\A]�H��H�D$�Q~��H�D$H���D~��H�]�"H�5W�H�81���_��H���"H�59�H�81���u�����H�(�"H�5O�H�81��_��H���"H�5��H�81��_��H���"H�56�H�81��_�����USH��H�5��"dH�%(H�D$1��Zt��H����H��H���vz������H���ec��1�H��H���8���Hc�H����1���p��H��H�@H� u]H��H��H�$������x_H�H�4$�� tFH�CH�SH)�H9���H����q��H��H�L$dH3%(��H��[]�@H�C�f�H��H�S���H���"1�H�81��^��H���"H�5��H�81��h^��H�i�"H�5��H�81��`t��H�
y��tH�5��H�=��!o���l}��ff.����USH��H�5w�"�
s��H��t}H��H���*y����uUH���b��H��襗��H���c��H��H��t"H��H���:��H�߅�tH��[]�8�����_��H��"1�H�81��]��H���"H�5��H�81��]��H���"H�5��H�81��s����USH��H�5��"�Zr��H��t}H��H���zx����uUH���ma��H�����H���mb��H��H��t"H��H���n��H�߅�tH��[]鈉���3_��H�\�"1�H�81���\��H���"H�5%�H�81���\��H���"H�5%�H�81���r����SH��H�O�W�wH�?�F����C1�[�ff.�@AVA��AUA��ATUSH��@dH�%(H�D$81��D$H�D$�l��H��萐��H��H����H�����V�������L�d$H�5z�"H��L���'b���|$H�\$D�l$D�t$H�l$ ��H��"H�t$L��H�="������H���5����T$(H�߅�t:�Ք������H�L$8dH3%(H����H��@[]A\A]A^�f��{����D$��ug1�����D$�=���H��D��D��H������D$(�q���fDH��1��.���H��薔���t����H��1������d����\z���wt���|$����ff.�ATH�_�"I��1�US�\��H���co��H��tVL��H��H���_����t'H�k H��1�H�5��x��H��[]A\�f.�H��1��Fy��H��[]A\�fD1�H��[]A\�ff.���UH��SH��H�5�"�Wo��H��t}H��H���wu����uUH���j^��H���B���H��H���w���H��tH��H������H��t
H��[]�H����H�Y�"1�H�81���Y��H���"H�5"�H�81���Y��H���"H�5"�H�81���o��ff.�f�PXH�5��H��H���"H�81��Y��f���SH��H�5�"dH�%(H�D$1��kn��H��tIH��H���t����uVH���~]��1�H��H����\��H�<$H�H�Ѓ�H�L$dH3%(uH��[�H��"H�5j�H�81��o���@x���K���ff.���SH��H�5H�"dH�%(H�D$1���m��H��t_H��H����s����uJH����\��H��1�H���1\��H�<$H��t 裁��H�L$dH3%(uH��[�D����w�����H�h�"H�5��H�81��_n��ff.�@��SH��H�5��"dH�%(H�D$1��m��H��t_H��H���;s����uJH���.\��H��1�H���[��H�<$H��t ��H�L$dH3%(uH��[�D����v������H���"H�5�H�81��m��ff.�@��SH��H�5�"dH�%(H�D$1��kl��H��t_H��H���r����uJH���~[��H��1�1�H���n��H�<$H��t�A���H�T$dH3%(uH��[�����Lv���W���H��"H�5T�H�81��l��ff.�@��SH��H�58�"dH�%(H�D$1��k��H��t_H��H����q����uJH����Z��H��1�1�H���m��H�<$H��t���H�L$dH3%(uH��[�����u�����H�X�"H�5��H�81��Ol��ff.�@��SH��H�5��"dH�%(H�D$1��k��H��t_H��H���+q����uJH���Z��H��1�1�H���Om��H�<$H��t��~��H�T$dH3%(uH��[������t�����H���"H�5�H�81��k��ff.�@��UH��SH��H�5Ի"�gj��H��t.H��H���p����uNH���zY��H���R�����t"H��H��[]�H�5�"H�5��H�81��,k��H�u�"H�5�H�81��U��H��"H�59�H�81���T��ff.����SH��H�58�"dH�%(H�D$1��i��H��tOH��H����o����u\H����X��H�t$H���Q���1҅�t�|$H҃�H�L$dH3%(H��uH��[�H�h�"H�5��H�81��_j���s�����D��SH��H�5��"dH�%(H�D$1��i��H��tgH��H���;o����uRH���.X��1�H��H��H���~W��H�<$t�H�L$dH3%(u;H��[�@H���]��H��1�H��u������H���"H�5��H�81��i����r��f���AUI��ATI��US��H��H��(H�5ع"dH�%(H�D$1��[h��H���QH���:U��H�D$����������tmI�EH�D$��thM�m���gH�|$�,H�|$@����I��t_L��A������Y����H�|$@��uE�]j�����Cf�H�D$H�|$������H�|$A�@��t2��xY���lj����H��H��uZH�и"1�H�81��dR��@@�����1_��H�|$H�D$��1�1�1�H��I���n��H��H����L���MT��H�ھH����V�����H�L$dH3%(L����H��([]A\A]�A�H�|$����������sa��H���fD�Z�����z���H�|$t
H�|$艄���1����n��H������%��������
�����I��������h�����h�����p���1�1ҾL���h���j��H�=��"1�L��H�5|�"�Y��L��H���DS��H���������Ap��H��"H�5N�H�81��f��H���с���e���ff.����AVAUI��ATI��US��H��dH�%(H�D$1��R��H�$�������GI�m��uZA�H���t|�_W��D������H��H��t|H��L���R���H��tlH�L$dH3%(�H��[]A\A]A^�@M�u����L��A�����V��H���A��u�fD�g��D����Y�H��H��u�H���ɀ��H�2�"1�H�81���O��fD�X����~dH�$I�m��u2H������A�H��A��}����������d����M�u��uH��u��J���D��f��A������H�<$tH���4��������l���nn��ff.���USH��H��tQH���"H��H�h�"1�H�8�P��H��H���j����uaH�k 1�H�5�H���l��H��t4H��H��[]�f��k^��H��tH��H�$�"H�8��H�����H��"1�H�81��N��H��"H�5O�H�81��mN��ff.�f���SH�\�"H�53�H�n�"H�H�;�;^��H���"H�;H�5��H�H��"H��^��H���"�����H�5���H��H�5�H��Q��H�;�����H�T���H�5]��q��H�;�H���H�5���q��H�;1�H�!�H�5���q��H�;1�H�Y���H�5���mq��H�;1�H��H�5���Uq��H�;1�H�I�H�5a��=q��H�;H�R�H�5p��`��H�;H�<�H�5��q`��H�;1�H���H�5��p��H�;1�H���H�5ާ��p��H�;1�H����H�5���p��H�;1�H�]���H�5��p��H�;�H�R�H�5ӻ�p��H�;1�H�z���H�5���~p��H�;1�H�����H�5��fp��H�;1�H���H�51��Np��H�;1�H�"�H�5���6p��H�;1�H�Z�H�5���p��H�;�H�/�H�5G��p��H�;�H���H�54���o��H�;1�[H��H�5����o��f.�D��USH��8H�57�"dH�%(H�D$(1��`��H���CH��H����f����t�LH���%K��H�L$H�T$H��H��H���S��H�T$ H�t$H���+P����|��H�<$H���jt���H�=@�H���VO��H��H��H���hK��H�|$�>t���H�=w�H���*O��H��H��H���<K��H�|$�t���H�=��H���N��H��H��H���K��H�|$��s���H�=!�H����N��H��H��H����J��H�|$ �s���H�=��H���N��H��H��H���J��H��H�L$(dH3%(uH��8[]�H�o�"H�5��H�81��f`���i��H�R�"H�5��H�81��9J��f���AUI��ATU1�SH��H�t$H�$H��t
H�|$�$m��H��1�H�<$tH���m��H��H�5N�"L����^��I��H����H���d����tuwL���MI��I��H��tH����N��H��H��t5H��tH���N��H��H��t H��H��L���"I����t`H��L��[]A\A]�H���g��1��g��H��"1�H�81��NI��H�O�"H�5�H�81��6I��H�7�"H�5��H�81��._��H���Vg��H���Ng��H��"H�5R�H�81��H��fD��AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$��k��I��1�H�|$t
H�|$��k��H��1�H�|$t
H�|$�k��H��H�5�"L���{]��I��H����H���c����t��L����G��I��M��tL���fM��I��H��tOH��tH���QM��H��H��t<H��tH���<M��H��H��t'H��H��L��L����\����tlH�� L��[]A\A]A^�1�L���%f��H���f��1��f��H�W�"1�H�81���G��H�İ"H�5�H�81��G��H���"H�5��H�81��]��L����e��H����e��H���e��H�|�"H�5̳H�81��cG����SH��H�t$H�5��"H�$�B\��H����H��H���^b����t��H���F��H�|$H���0Y��H���(Y��H�$L�A�� tXH�yHc�A��H9�uvH�t$H�IH��� uQH��H����1�I���U����xQ����HD�H��[��H�t$I��H��A��H��� t�H�~Hclj�H9�uH�v��~F��H���"1�H�81��[F��H�\�"H�5��H�81��CF��H�D�"H�5��H�81��;\��ff.���AUI��ATI��USH��H�-m�"H���Z��H��ttH��H���a������H��L����Z��H��H��tNH���`����tuqH���ME��H�56�"H�=��"H���7^��H��t6H��H�¾t�rJ��H��L��[]A\A]�H���"H�5ѯH�81��|[��H���"H�5��H�81��TE��H�U�"H�5��H�81��<E��H�u�"H�5��H�81��$E��@��AUATUSH��H�5s�"dH�%(H�D$1��Y��H���$H��H���`����t��H��I���^D��1�L��H��H���~I��H�<$��L�-��"1�H��A��Hc�H����1��AV��H��H�@H� uaH�$L��H��A�Յ�x|H�H�4$�� tTH�CH�SH)�H9���H���XW��H��H�L$dH3%(��H��[]A\A]�fDH�C�f.�H��H�S���L�-1�"�H���H�-�"1�H�81���C��H��"H�5�H�81���C��H�ʬ"H�5�H�81��Y��H�
ʰ��H�5"�H�=U��T����b��ff.�f���AVAUATI��US��H��H��H�5ɩ"dH�%(H�D$1��LX��H����H��H���h^����t��H���B��H���E��H�$�������1�����A�A�H����E1�I��tL���Wp��L��I����Y��I���|��H���G��H��H����1�H��H���cG��H�<$��H��L�
ũ"1�L��ATE1�H��H���O��ZY����H����n��H�L$dH3%(��H��[]A\A]A^�DM�,$���<���M�d$���4���H�<$tH���u���1����x_���H����t��������J����x�H�$����fDH��H���-`�����W���H����C��H���"1�H�81��A����`��H���"H�5֭H�81��A��H���"H�5ګH�81��W��D��USH��H�5ǧ"�ZV��H��tH��H���z\����tuWH����@��H���z��H���mF��H��H��t$H��1�H����A��H�߅�tH��[]�m���1C��H�:�"1�H�81���@��H��"H�5�H�81���@��H�ש"H�5#�H�81���V��ff.���S�wH��1�L�OL�G1�H���w H�?�V���C(X1�Z[ÐAUA��ATUSH��hdH�%(H�D$X1��D$H�D$��p��H���t��H��H����H�����Kd������L�d$H�5o�"H��L���F��H�D$�|$H�\$ H�D$0H�D$D�l$(H�D$8H�l$@��H���"H�t$ L��H�=�����y��H���y���T$HH�߅�t0�[P����twH�L$XdH3%(H��usH��h[]A\A]�f���l���D$��uW1�����D$�8���H�|$ ����@H��1��l��H���x���@H��1��vl���z����\^���wX���|$�g��ff.���AUI��ATI��US��H��H��(H�5H�"dH�%(H�D$1���S��H����H���@��H�D$���I���`��ueH�D$H�|$A��R��um�	o��H��H�ھtH���FC�����KH�L$dH3%(L���AH��([]A\A]�@I�EH�D$��t�M�m����H�|$��H�|$@��t.��D�����z���H��H���x���H�'�"1�H�81���=��@��uH�����t�����
��L���T��H�|$H���J��H�|$H�D$�Dv��H�Ť"H��1�H��I���]Y��H��H��tuL���?������KF���������H�|$t
H�|$�1p���1����Z��H�|$�p������T�������H��H�����������@1�1ҾL����S���JV��1�1�1�L���N��H��H���[���1�1ҾL���S���V��1�L���k��H��H���/���1�1ҾL���sS����U��1�L���TJ��H��H������1�1ҾL���GS����U��E1�E1�1�H�=c�"L��H�5ݨ�i��L��H���i>��H��������U��H�d�"H�5��H�81��<��H���[i�������A[��H��"H�5N�H�81��Q��f�ATH�?�"I��1�US�=��H���CP��H��tVL��tH��H���@����t'H�k H��1�H�5���bY��H��[]A\�f.�H��1��&Z��H��[]A\�fD1�H��[]A\�ff.���UH��SH��H�5��"�7P��H����H��H���SV����tuiH���:��H�=��"H�5�"H���S��H��H���Eo��H��t H��H������H��tH��[]�f�H���h��H��"1�H�81��:��H���"H�5�H�81��:��H���"H�5�H�81��P��DPXH�5��H��H�t�"H�81��b:��f���SH��H�5��"dH�%(H�D$1��;O��H��tIH��H���[U����tuVH���9��1�H��H����>��H�<$H�H�Ѓ�H�L$dH3%(uH��[�H��"H�5:�H�81���O���Y���K���ff.���SH��H�5�"dH�%(H�D$1��N��H��t_H��H���T����tuJH���9��H��1�H���1>��H�<$H��t �sb��H�L$dH3%(uH��[�D����|X�����H�8�"H�5��H�81��/O��ff.�@��SH��H�5h�"dH�%(H�D$1���M��H��t_H��H���T����tuJH���^8��H��1�H���=��H�<$H��t ��a��H�L$dH3%(uH��[�D�����W������H���"H�5ԢH�81��N��ff.�@��SH��H�5��"dH�%(H�D$1��;M��H��t_H��H���[S����tuJH���7��H��1�1�H���?@��H�<$H��t�a��H�T$dH3%(uH��[�����W���W���H�ؠ"H�5$�H�81���M��ff.�@��SH��H�5�"dH�%(H�D$1��L��H��t_H��H���R����tuJH���6��H��1�1�H���?��H�<$H��t�a`��H�L$dH3%(uH��[�����lV�����H�(�"H�5t�H�81��M��ff.�@��SH��H�5X�"dH�%(H�D$1���K��H��t_H��H���Q����tuJH���N6��H��1�1�H����>��H�<$H��t�_��H�T$dH3%(uH��[�����U�����H�x�"H�5ĠH�81��oL��ff.�@��UH��H��SH����t+�&=�������H��H��t+H��H���<���H��tH��[]��M�������H��H��u�H���Dc��H�-�"1�H�81���5�����UH��SH��H�54�"dH�%(H�D$1��J��H��txH��H����P����tucH���*5��1�H��H���M:��H�<$t&�H�L$dH3%(u-H��[]�f.�H�5��H����J��H��1�H��u���T�����H�;�"H�5��H�81��2K��f���ATI��USH��0H�t$H�5m�"dH�%(H�D$(1���I��H���eH��H���P����t�9H���[4��1�1�H�T$H��H����<��H�|$��H�l$ 1�H��H���Y9��H�|$ ��H�|$�F��H���Z��1�Hc��!F��I��H�HH� tH�HH�t$H��� tXH�~Hclj�H9���H�v1�I��I���J�������t$ L���)G��L��H�L$(dH3%(uOH��0[]A\�DH��H�����H�5�L���YI��H���B���H��"H�5��H�81��3����R��H��"H�5d�H�81��3��H���"H�5˟H�81��3��H���"H�5ϝH�81��zI���u3��H���"1�H�81��R3��f���USH��H��tQH�2�"H��H���"1�H�8��4��H��H���KN����tuaH�k 1�H�53�H����P��H��t4H��H��[]�f��{c��H��tH��H�ԙ"H�8��H�����H��"1�H�81��2��H��"H�5��H�81��2��ff.�f���SH���"H�5s�H���"H�H�;�kB��H���"H�;H�5%�H�H� �"H��HB��H�9�"�H���H��H�5�H���5��H�;�����H��H�5�~��U��H�;�H���H�5Ȅ��U��H�;1�H�����H�5ѝ�U��H�;1�H���H�5���U��H�;1�H�A�H�5Ր�U��H�;�����H��H�5���jU��H�;H��H�5���D��H�;H�i�H�5C��D��H�;1�H�2�H�5Jz�&U��H�;1�H���H�5��U��H�;�H�����H�5���T��H�;�H���H�5���T��H�;1�H���H�5ס�T��H�;1�H�$���H�5"��T��H�;1�H�\���H�5s��T��H�;1�H�����H�5��xT��H�;1�H����H�5��`T��H�;�H���H�5���ET��H�;�H�&�H�5v��*T��H�;1�[H�]�H�5ͤ�T�����H�U�"1���1��ff.���H���"1��1��ff.����;������5�����UH�5�"H��SH���D��H����H�5g�"H��H���L]��H�5%�"H���D��H��tQH�i�"H��H��H��S3����t��uH���[]�fDH��1�[]�H�ؗ"H�5��H�81��7/��H��"H�5u�H�81��/��H���"H�5A�H�81��/�����ATUH��H�5�"SH����C��H��uwH�5
�"H����C��I��H����H�5�"H���g\��H����8��H�58�"H��H���C��H��t^H��L����_��H��t6H�C H�5=�"H��H���a��H��[]A\�H��"H�5ٛH�81��R.��H��"H�5ߛH�81��:.��H��"H�5x�H�81��".��H�Õ"H�5D�H�81��
.��f.���AUI��H�5 �"ATU��H��SH��H��(dH�%(H�D$1���B��H���D�/��H�D$��������M�e��ucH�D$H�|$�VH��"L��H�0�TV��H��t��� L��H���[���H�L$dH3%(��H��([]A\A]�@I�EH�D$��t�H�|$t
H�|$�`�������wJ�����5�����O����ǐH�5y�"L����A��I��H���:����H�=�"H�|$H�0�U��H����H�|$��>��L���]<��H��H����H�r�"L�H�D$H��� ��H��H��H�P��H��L���8������H�k H�5
�"L��H���o_��H�������H�|$�_������H��"H�|$H�(�,O��1�L��H��H���4��H��H��u�H���"H�5ЙH�81���+��@H���;��H��H���o���H�e�"H�5��H�81��+��@H�HH�P�3���H�L�"H�5٘H�81��+���J��H��"H�5�H�81��vA��H����1��H���"H�5L�H�81��F+��H��"H�5��H�81��>A��ff.�ATA��H�5��"US�
@��H����H���d��H���40��H��H��tXA��t&H��H���+K��H�߃�u'[]A\�JW��f.�H�=Y�"H��H����[������,��H�h�"1�H�81��*��H�E�"H�5��H�81��|*��H�-�"H�5��H�81��d*��@����2���f���1��%���D��SH��H�t$H�5��"�&?��H��tH�|$H���4<��H�t$H��� t7H�VH�vH���7>��H�L$H��� u*H����H9�u$H��H��[�DH��H������H�Q��H�k�"H�5ЗH�81��)��H�S�"H�5�H�81��)��f.���AWA��H��AVI��H�5��"AUATUSH��H��xdH�%(H�D$h1��F>��H����H�D$H�l$ L�d$(L�l$0H�D$H�D$@H�l$HL�d$PL�l$X�*��H�D$8����E���ME1�I��H�D$H�D$@H�p�!fDH��t
Hc�I�<�H�:��H��H9�tH�PD9�|�H��t�H��H�H9�u�A9���M���UA����A����H�|$@��t%@����H���������������W��H��I���QK��L��H���FK��L��I���;K��L95�"��H��"H��L��H�
H���B��H��H����H�k H��H�\$hdH3%(��H��x[]A\A]A^A_�H�|$@����@��uH�����t�������H���"H�0�eP��H���|H�|$H�5�"�k<��H���eH���2��H��H���d���H���"H�5��H�81��6'��fDH�|$8�Z�������0��E���\L�L$8�����H�|$�_��1�1�1�H��I���A��H��H��t}L���)������U��H9��"��H9��"��H9��"�B�_��H��H���1�~,��H��H�������H�3�"H�5��H�81��j&��f.�1�1ҾL���/=���?��H�5c�"1�1�L���7.��L��H���\(��H���9���H�|$�_��H���QO�����j?�����:���1��H��H���
H�Ǿ�4���H����8�������%��H���'����nA��H������H�|$8t
H�|$8�X����D���C��H�3�"H�5 �H�81��z%��H��"H�5|�H�81��b%��H��"H�5�H�81��J%��H�K�"H�5��H�81��2%��H�Ӊ"H�5�H�81��%��H�ˌ"H�5��H�81��%���=D��H���"H�5;�H�81���$��H���"H�T$H�5<�H�81���$��H�y�"H�T$H�5�H�81��$��ff.���USH��H�5��"�9��H��tUH��H���?��=���H���'V��H���^��H���)��H��H��tTH��1�H���V��H�߅�t#H��[]�P��H�1�"H�5}�H�81��(:���C&��H�Ԉ"H�5ҒH�81��#��H���"H�5��H�81���#��H��"H�5��H�81���#��ff.�AWAVAUA��ATI��UH��SH��H�5
�"�8��H����H��H���>��=��^H���6U��H��H���X��H���*H���A�����H��E1��Q��I��H��tH���P��L��I���*:��I����\��H���Z(��H��H����A��tHM��t[H��L�
0�"L��1�ATH��E1�H���Q����XZH��uPH��[]A\A]A^A_�DO��@H��H��M��t%��%������@H��H���
>�����f��+$������$��H�C�"��H�5L�H�81��h"��H�)�"H�5i�H�81��P"��H��"H�5��H�81��8"��H���"H�5b�H�81�� "��H�!�"H�5ȐH�81��"��H�	�"H�5U�H�81��8��������������AUATI��UH��S��H��dH�%(H�D$1��#��H�$������xb1���u;A��H��u[1�H��L��L�����H�L$dH3%(u]H��[]A\A]�L�m��t�H�m��~�H�<$tH���T���1����>���H���T���fD�)����x�H�$�o����9@��f���SH��H�t$H�5C�"H�$��5��H���H��H����;��=���H���kR��H�|$H���2��H���2��H�$L�A�� tFH�yHc�A��H9��|H�t$H�IH��� u;H��H��1�I�ك���<����uBH��1�[ÐH�t$I��H��A��H��� t�H�~Hclj�H9�u"H�v1�I���<����t���uH���[�� ��H���"H�5ȎH�81�����H�ۈ"H�5��H�81�����H�È"H�5�H�81��5��f.���USH��(H�t$H�5�"dH�%(H�D$1��u4��H���H��H���:��=���H���Q��H�|$H���a1��H���yM��H����H���Y��1�Hc���0��H��H�HH� tH�HH�t$H��� tMH�~Hclj�H9�uLH�v1�I��L�D$�L&����u9�t$H����1��H��H�L$dH3%(u2H��([]ÐH��H��������H�_�"H�5��H�81�����=��H�B�"H�5d�H�81��i��H�j�"H�5�H�81��Q��H�R�"H�5��H�81��I4��f���ATUH��H�5��"S�3��H����H��H���59��=���H���O��H��H�5x"I����2��H��H��tN1����!��H��H�xH� u,E1�L��H���0����xcH��Hc�� ��H��[]A\�f�H�x��H�+�"H�5��H�81��r��H�s�"H�5�H�81��Z��H�[�"H�5��H�81��R3��H��"H�5G�H�81��*��f.���UH��SH��H�5t�"�2��H����H��H���#8��=�ukH���N��H��H��t3H�5w"H����1��H��tvH��H���0����uH��H��[]�D1�H���n0����v�H�Z�"H�5��H�81����H���"H�5)�H�81��i��H�j�"H�5��H�81��a2��H��"H�5s�H�81��9��f���USH��H�t$H�5��"�1��H����H��H���17��=���H���M��H�|$H��u#1�H���)����w5H�D$H��[]��H�|$��>��H��H��H�������u$H��t�H�`�"H�5ˊH�81�������u�H�D$H��[]�H�p�"H�5�H�81��W��H�X�"H�5��H�81��O1��ff.�@��UH��SH��H�5��"�0��H��tOH��H���76��=���H���L��H�5}u"H��H����/��H��tJH��H����<����u"H��H��[]�H�ă"H�5�H�81��0��H�l"H�5�H�81����H�D�"H�5чH�81��{��H�|�"H�5#�H�81��c����AUI��ATI��USH��H�-��"H���=/��H��tsH��H���]5������H��L���/��H��H��tMH���:5��=���H���K��H�����H��H��tZH�¾�H�������t&H��L��[]A\A]�H�Ƃ"H�5�H�81��/��H����/��H�f~"H�5�H�81����H�N~"H�5��H�81��u��H�v�"H�5�H�81��]��H�~"H�5��H�81��E��DUSH��H�C�"H�|$H�0�B��H��tIH�|$H�5�s"�.��H��H��ty��7��H��H����H��H����:����tqH��H��[]�fDH�|$�^R��H���B����tf���;O��H��H��tDH�Ǿ�J��H�߾���H��H��[]�H�@�"H�5ͅH�81��w��H���.��H�0}"1�H�81��\��H�}"H�5�H�81��D��@��AVI��AUATI��US��H��H�� L�-�~"dH�%(H�D$1�L���-��H����H��H���"3����������H�D$������������I�H�D$����M�v����H�|$��H�|$H����H��}"H�0�\@��H����H�|$L���f,��H��H���H���2��=��H���H��H�����H��H����H�ھ�H���������H�L$dH3%(L���H�� []A\A]A^��H�D$H�|$A��3���H�|$�I��H�|$H���)����5��H��H���x���H�d{"1�H�81����H��"H�|$H�0�\?��H���L���k-��H�|$I���O��H��}"L��1�H��I���GI��H��H��t?L���g������f�������W���H�|$t
H�|$�I���1����s3��1�1ҾL����,���J/��L��1�L��H�}"��3��H��H��u�1�1ҾL���,���/��1�L���!��H��H���c���1�1ҾL���q,����.��1�L����,��L��H�����H���C�����.��f�H�|$����H���#���H�O~"H�5�H�81��F+��H�7~"H�5ރH�81����H���6+��H��y"H�5��H�81����H��y"H�5��H�81������!4�����U1�1�H��AWAVAUATSH��(dH�%(H�E�1��3;��Lc�I��L9��H��H��H��H���H)�H��H9�tH��H��$�H9�u�%���H��L��H����:��H����L���	��I��E��~yE�l$�I��I��J�+H�E�@�;�!���L�kI������L��I����*��L��H���
E���M��tL���*��H��L��H����D��L��L����D��H;]�u�H�M�dH3%(L��uDH�e�[A\A]A^A_]��H)�H�L��*���H�����H��|"H�5E�H�81��r���2��ff.�f�ATH��y"I��1�US���H����'��H��tVL�⾘H��H�������t'H�k H��1�H�5Am��0��H��[]A\�f.�H��1��1��H��[]A\�fD1�H��[]A\�ff.�SH���A��H9��"tH9��"t%H9v�"u#�[�D�[�f��[�H�*w"H��H�5�H�81��n��ff.���AWAVAUATI��H�5zl"UH��SH���<'��H����H�5�"H��H����?��H�5�l"H���'��H��H����L���.���E1�1�H��L�=�v"��H��A��M��8��I��H��tMH��1��}#��M�I��H�HH� u*M��D��H��H����7��H��tH��L��[]A\A]A^A_�f�H�H��H�+y"H�5[�H�81��r��H�#y"H�5�~H�81��Z��H��x"H�5|~H�81��B��f���UH�5dk"SH��H���'&��H��t@H�5ۚ"H��H���>��H�5�k"H���&��H��tJH��H�������u"H��H��[]�H��x"H�5~H�81�����H�Sy"H�5��H�81����H�cx"H�5�}H�81����f.���UH�5�j"SH��H���w%��H��tJH�5+�"H��H���>��H�5�j"H���Q%��H��tTH�-u"H��H��H��w=����u"H��H��[]�H��w"H�5J}H�81����H��x"H�5
�H�81����H��w"H�56}H�81�������UH�5j"SH��H����$��H��tJH�5{�"H��H���`=��H�59j"H���$��H��tTH�}t"H��H��H��;����u"H��H��[]�H�w"H�5�|H�81��`��H��w"H�5mH�81��H��H��v"H�5�|H�81��0��PXH�5s|H��H��v"H�81����f���UH�54i"H��SH���#��H��tpH�5��"H��H���<��H�5ii"H����#��H��tEH��H���&����t��uH���[]�@H��1�[]�H�(w"H�5�~H�81�����R���H�#v"H�5�{H�81��j��f.���UH�5�h"SH���J#��H��t7H���G��H���u��H��H��tOH��1�H���p*��H�߅�t#H��[]�:��H��u"H�5L{H�81��
���!��H��u"1�H�81���
��H��u"H�5�{H�81���
��fD��H��H�5Ah"�"��H��tH����)��H��H�H�D��^���ff.���UH�5h"SH���j"��H��tAH��H���0��H��H��t"H����*��H��H��[H��]����f�H���[]����ff.�@��UH��H�5�g"SH���!��H��tH��H������H�߉�����H��H��[]����ff.���H��H�5Ag"�!��H��tgH���'����t*��tE��t0��H�?t"H�5h�H�81��v��fDH�=A�"H���=��H�=)�"H����<��H�=�"H����<������ff.���USH��H�5�f"H���!��H��t3H��H���u�#����H�����H��H��[]�fD�����������f.���H��H�5Qf"� ��H��tH���(��H��H�H�D��n���ff.���H��H�5f"�| ��H��tH����&�����h��H��H���,"���'������SH�5�e"H��dH�%(H�D$1��+ ��H��tJ1�H���,4��H��H�$�0.��H��o"H��H��H��2����u7H�L$dH3%(H�$uH��[�H��r"H�5xH�81���
���)��H�pr"H�5�zH�81��
�����SH�5$e"H��dH�%(H�D$1��{��H��tJ1�H���|3��H��H�$�-��H�Ao"H��H��H��k����u7H�L$dH3%(H�$uH��[�H��q"H�5jwH�81��
���O)��H��q"H�5_zH�81��	�����AUATI��H�5nd"UH��SH��H�T$H�$����H��tSL��H�5�c"H�����I��H��tiH�|$�,��H��I���,��L��L��H��H���5����u&H��H��[]A\A]�H� q"H�5�vH�81��W	��H�q"H�5�yH�81��?	��H��p"H�5avH�81��'	�����UH��H�5�c"SH��H�����H��u/H�5�c"H������H��tKH�����H��t&H�C H��H��[]�H��p"H�5JyH�81����H�ip"H�5�vH�81����H�Qp"H�5�uH�81�������UH��H�5c"SH���g��H��tDH�5�b"H��H���P��H��tEH�,m"H��H��H��7������HD�H��[]�H��o"H�5\uH�81�����������ATI��UH��H�5��"S�5��H�5��"H��H���5��H��H���I���H��u[1�]A\�DL��H�5�a"���I��H��tTH��H�5�a"���H��H��t=H�5b"H���{��H��tAH�Wl"L��H��H�
H����'���¸��t�[]A\�H��n"H�5otH�81��5��H��n"H�5stH�81����ff.�f�PXH�5�uH��H�p"H�81�����f���SH�5Lm"����H��t1H��H���!��=�u7H���8��H���H<��[H��H�H�Ѓ��H��o"H�5�pH�81�����|���ff.����SH�5�l"�o��H��t.H��H���!��=�uLH���8��H���x$����u�[�H�=o"H�5�pH�81��4��H��j"H�5�vH�81����H�
o"H�5�tH�81�����@��SH�5Ll"����H��t1H��H��� ��=�u7H���7��H���3��[H��H�H�Ѓ��H��n"H�5�oH�81�����|���ff.����SH�5�k"�o��H��tAH��H��� ��=�uGH���7��H���3��H��tH��[�J.��f.��[�H�*n"H�5voH�81��!�����ff.����UH��H��SH����H��H��t3H��H���x�H��H��t H���
����t/H��H��[]�f.�H������H�ii"1�H�81����H�Vi"H�5>uH�81��}��ff.�f���UH��AWAVAUI��ATI��S��H��H��H�5�"dH�%(H�E�1���1��H�5[^"L��H�E����H���"H�}�H�5�^"I�����H��x���H���^H�|l"H�8�D!��H�u��I��H������H�5�]"L�����I��H����H�E�H��p���H�E�H�E�H��h���H�E�H�E�H��`���H�E��s��H�E����{����1�I�EH�E�����H�E�H�E�H����H�]�H���#6��H�}�@����DH��p����4&��1�H�}�H����H��g"I��L��L��H��x���L��'�����4H�M�dH3%(L���H�e�[A\A]A^A_]��I�EH�E����O���I�EH�E�����H���F���H�}�@���W���H������J���������<�����2��H�}����1��H�E�L�(A�� �NH�@H��p���H�U�H��� �zH����H��H;�p�����H��p���H���^��H��X���H���KH��H��H�E�H��H��H���H���H)�H��H9�tH��H��$�H9�u��t	H)�H�L�H�T$H���H��p���H��h�����E1�H�]��=�H��J��H��H�E��l$��H��h���H�u�H��X���J��I���=2��L;�p���}VH�E�H� u�H�@ 뵐H��h����$$��H�����@��	�����H�U��y���I��A��L��p������H��p���H����H��H��H��H%�H�E�H)�H���H��H9�tH��H��$�H9�u��t	H)�H�L�H�\$H���H��p���L�3E1�L�h�H��7�Hf.�H��J�<�H�5aZ"�,��J�D�H���*I��M9�tH�E�H� u�H�@ ��1�H�}�tH��`����
#��H��H��d"H��H��p���I��H��x���L��h���L���0�'��ZH�}�Y�����2��H�}��2�����H�B���H��������H9�p���wzH��p���H�}�L��H��L��L��P����*��H��L��P���H��h�������H�]�H��p���H��L����*��H������H��p���H��������H9�w
L����H��p�������H��f"H�5lH�81�����H�}�t	H�}��1�������+������1��H�}��1��H�If"1�H�81����H�Ff"H�5�kH�81��}���H�c"H�5�rH�81��e���DUH��1�H��X"SH��H�Wg"H�8���H��H���d	��H��tH�C H��H��[]�H��e"H�5VlH�81��	���f�H��f"ATI��H�X"UH��1�SH�8���H��L��H���/��H��t&H�C H���_���H�5x�"H��H����0��H��[]A\�H�Fe"H�52kH�81����ff.�f���SH�5X"�o��H��t)H��H����2��H��tH��H��[�N���fD�[���ff.����USH��H�5�c"���H��tYH��H���:��=�u_H���.��H��H���2��H��H��t H���2��H��H��H��[]�����H���[]�H��e"H�5	gH�81�������ff.�@��SH�5�b"���H��tAH��H�����=�uGH��� .��H���1��H��tH��[���f.��[�H�:e"H�5�fH�81��1������ff.����UH��SH��H�5db"���H��t1H��H�����=�uOH���-��H�������u"H��H��[]�H��d"H�5fH�81����H�j`"H�5RlH�81����H��d"H�59jH�81��y���f���USH��H��tQH�Za"H��H��a"1�H�8����H��H���k��=�u_H�k 1�H�5QUH������H��t2H��H��[]�����H��tH��H��`"H�8��H�����H��_"1�H�81�����H�>c"H�5�kH�81����ff.�f���AUH�5|kATUSH��H��b"H��`"H�;H��
��H�C_"H�;H�5RkH�H�7a"H��_
��L�%0c"H�Q`"H�5.kH��I�$H��;
��H�-Dc"I�$H�5kH�;H�E�
��L�->a"H�}H�5FL�%�b"I�UI�$�	��H��a"I�<$H�5�EH�I�U��	��H�za"H�=�jH��s��H�=�jH���"�`��H�=�j�T��H�=�jH���"�A��H�=�jH�k�"�.��H�=�jH�P�"���H�=�j���H�=|jH�)�"���H�=tjH��"����H�;�H�5`jH��"�>#��H�;�H�5Qj�*#��H�;1�H��H�5�h���H�;�H���H�5�d���H�;�����H���H�5AE���H�;�H�M��H�5|K���H�;1�H����H�5�j�i��H�;�H�J��H�5�i�N��H�;1�H���H�5"S�6��H�;�H���H�5�i���H�;1�H�����H�5S���H�;�H����H�5@W����H�;1�H��H�5�b����H�;1�H���H�5�c���H�;H��bH�5,i���H�;H��cH�5#i��
��H�;1�H�����H�5�c�t��H�;H��cH�5Ah�
��H�;1�H���H�5h�F��H�;�H�'��H�5�h�+��H�;�H����H�5�h���H�;�H�1��H�5�h���H�;�����H�6��H�5�b����H�;H��bH�5
V�$
��H�;1�H����H�5�?���H�;1�H� ��H�5�U���H�}H�5������H�}�����H���H�5
C�h��H�}�H�X�H�5GI�L��H�}�H���H�5�I�0��H�}H��IH�5I�y	��H�}1�H�����H�5�f���H�}�H� �H�5�f����H�}1�H�W�H�5[f����H�}1�H���H�5,f���H�}1�H�5�H�5ig���H�}1�H���H�5[g���H�}�H�`�H�5Ig�d��H�}1�H���H�5;g�K��H�}�H�K�H�55g�/��H�}1�H���H�5lc���H�}�H����H�5g���H�}1�H�M�H�5g����H�}1�H����H�5T����H�}1�H�{��H�5�=���H�}1�H�b�H�5�S���I�<$H�5{�����I�<$�����H����H�5A�j��I�<$�H�z��H�5IG�N��H�=�f���I�<$E1�1�H�ƺ�"��I�<$�H�<�H�5pG���I�<$H�`GH�5_G�Y��I�<$1�H���H�5
f����I�<$1�H�#��H�5�e����I�<$1�H���H�5�e���I�<$1�H�1�H�5�e���I�<$1�H�h�H�5�e�|��I�<$�H�,�H�5�e�`��I�<$�����H��H�5�F�D��H�=�e���H�}"H��[]A\A]�fD��USH��XH�5�Y"dH�%(H�D$H1����H����H��H���6������H���U��H�L$H�T$H��H��H�t$�+���H��H�T$(H�t$ ���H�L$@H�T$8H��H�t$0�*���
$��H�|$H������H�=A?H�����H��H��H����H�|$����H�=�?H���p���H��H��H����H�|$�X���H�=�JH���D���H��H��H���V�H�|$ �,���H�=cH������H��H��H���*�H�|$(����H�=9]H�����H��H��H����H�|$0�����H�=3fH�����H��H��H�����H�|$8����H�=fH�����H��H��H����H�|$@�|���H�=�eH���h���H��H��H���z�H��H�L$HdH3%(uH��X[]�H�1Z"H�5}[H�81��(���S��H�Z"H�5meH�81���ff.���AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$����I��1�H�|$t
H�|$����H��1�H�|$t
H�|$���H��H�5�V"L���{��I��H����H���������L�����I��M��tL���f���I��H��tOH��tH���Q���H��H��t<H��tH���<���H��H��t'H��H��L��L�������tlH�� L��[]A\A]A^�1�L���%��H�����1����H�WV"1�H�81����H��X"H�5dH�81���H��X"H�5�YH�81����L����
��H����
��H���
��H�|U"H�5�cH�81��c���AUI��ATU1�SH��H�t$H�$H��t
H�|$�T��H��1�H�<$tH���@��H��H�5~U"L�����I��H����H���*
����uwL���M��I��H��tH����H��H��t5H��tH�����H��H��t H��H��L����
����t`H��L��[]A\A]�H������1�����H�U"1�H�81��~�H�W"H�5�bH�81��f�H�gW"H�5�XH�81��^��H�����H���~��H�?T"H�5�bH�81��&�fD��AVI��AUATE1�USH�� H�t$H�T$H�L$H��t
H�|$���I��1�H�|$t
H�|$����H��1�H�|$t
H�|$����H��H�5T"L�����I��H����H����������L������I��M��tL����I��H��tOH��tH����H��H��t<H��tH���l�H��H��t'H��H��L��L��������tlH�� L��[]A\A]A^�1�L���U��H���M��1��F��H��S"1�H�81����H��U"H�5MaH�81����H��U"H�5(WH�81�����L���
��H����
��H����
��H��R"H�5LaH�81�����AUATUSH��(H�5�R"dH�%(H�D$1��f��H���%H��H���������H��L�d$���H�t$L��H��H�����H�|$tH�|$t	L�-"Q"�L�-YT"1�H��A��Hc�H����1����H��H�@H� u^H�D$L��H��A�Յ�xiH�H�t$�� tOH�CH�SH)�H9���H�����H��H�L$dH3%(��H��([]A\A]ÐH�C�f.�H��H�S���H��P"1�H�81��P�H�QT"H�5�_H�81��8�H�9T"H�5�UH�81��0��H�
	a��H�5�_H�=�I���<
��ff.����AVAUATI��US��H��H�� H�59Q"dH�%(H�D$1����H����H��H����������H���
��H����H�D$���^���1�����A�A�H���'E1�I��tL������L��I���;��I����#��H���k�H��H����H�T$H�t$H������H�|$��H�|$��H��L�
"Q"1�L��ATE1�H��H�����ZY���~H���C��H�L$dH3%(��H�� []A\A]A^�f�M�,$���-���M�d$���%���H�|$t
H�|$�c���1�������DH��H�������������H���u�H��N"1�H�81��2�f�H�|$�����������x�H�D$����H��H�	R"H�5b]H�81����H��Q"H�5=SH�81�������USH��H�5'O"���H��tH��H��������uWH�����H���U"��H�����H��H��t$H��1�H����"��H�߅�tH��[]������H��M"1�H�81��N�H�OQ"H�5�\H�81��6�H�7Q"H�5�RH�81��.���ff.���AUI��ATI��USH��H�-]N"H�����H��ttH��H���
������H��L������H��H��tNH��������uqH���
��H�5�O"H�=�L"H���'��H��t6H��H�¾�b�H��L��[]A\A]�H�uP"H�5�QH�81��l���H��L"H�5tMH�81��D�H�EP"H�5�[H�81��,�H��L"H�5�[H�81���@��SH��H�OH�W�wH�?����C 1�[�ff.�AWA��AVAUATUH��SH��HdH�%(H�D$81��D$H�D$���I�����I������M����M��I������
1�M��u�����@tXH��s��L�������u�L���\��L��E1��a��L�����H�L$8dH3%(L����H��H[]A\A]A^A_��+
������H�\$H�5OK"L��H�����|$L�l$L�d$D�|$ L�t$(t|H��K"H�t$H��H�=��������L�����L������T$0���a���L������D$��uLE1��I����D$�r���L��E1����L���r��L���������L��L��D��L�������D$0�����|$�@
���k��ff.�ATH�K"I��1�US���H�����H��tVL��H��H�������t'H�k H��1�H�5?���H��[]A\�f.�H��1��f��H��[]A\�fD1�H��[]A\�ff.���UH��SH��H�5�J"�w���H��t}H��H�������uUH�����H������H��H�����H��tH��H������H��t
H��[]�H���@��H��I"1�H�81��
�H�M"H�5gXH�81���H��L"H�5BNH�81����ff.�f�PXH�5/XH��H��L"H�81���f���SH�5J"���H��tH��H�������u'H�������[�H�|L"H�5�MH�81��s������ff.���SH��H�5�I"dH�%(H�D$1��+���H��t_H��H���K�����uJH���n��H��1�1�H������H�<$H��t���H�T$dH3%(uH��[����������H��K"H�5MH�81����ff.�@��SH��H�5�H"dH�%(H�D$1��{���H��t_H��H�������uJH�����H��1�1�H�����H�<$H��t�Q��H�L$dH3%(uH��[�����\���G���H�K"H�5dLH�81�����ff.�@��SH��H�5HH"dH�%(H�D$1�����H��t_H��H�������uJH�����H��1�1�H���o��H�<$H��t�
��H�T$dH3%(uH��[����������H�hJ"H�5�KH�81��_���ff.�@��SH��H�5�G"dH�%(H�D$1�����H��t_H��H���;�����uJH���^��H��1�H���
��H�<$H��t ��	��H�L$dH3%(uH��[�D���������H��I"H�5KH�81����ff.�@��SH��H�5�F"dH�%(H�D$1��k���H��t_H��H�������uJH�����H��1�H���
��H�<$H��t �C	��H�L$dH3%(uH��[�D����L����7���H�I"H�5TJH�81����ff.�@��SH��H�58F"dH�%(H�D$1���H��t_H��H��������uJH�����H��1�1�H�����H�<$H��t���H�T$dH3%(uH��[����������H�XH"H�5�IH�81��O���ff.�@��SH��H�5�E"dH�%(H�D$1���H��t_H��H���+�����uJH���N��H��1�1�H���/�H�<$H��t����H�L$dH3%(uH��[�����������H��G"H�5�HH�81���ff.�@��SH��H�5�D"dH�%(H�D$1��[�H��t_H��H���{�����uJH�����H��1�1�H����H�<$H��t�1��H�T$dH3%(uH��[�����<����'���H��F"H�5DHH�81����ff.�@��AWAVI��AUATUH��S��H��dH�%(H�D$x1�H�=�g"��H�D$L�d$H�D$0H�D$PL�l$ H�D$(L�d$XL�l$`H�D$h�O��H�D$8�…�t0��~���o�	������������$���������$������H�t$8��H�E�����E1�H�D$H�D$XH��tH�UH�H�D$`H��t��tL�}L�8H�D$hH��tH�T$0H����RH����H�|$(L�D$@1ɺH�5�f"���H�=�f"H�\$@H���3��������H9�tDH�=mf"H�\$@H���?���������H9�t H�|$@@���A����f.�H�|$H�f��H�5gB"L��I�����I��H���dH�|$�>��L��H�$���L���������H��H���H�$1�H�t$8M��H���C�����H�|$8E1���������������H�|$8E1�����������H�|$81�M������z�����{H�t$ H��� ��H��H����H��������NH�t$H��� ��H��H����H�����ut�7�H������1�H�L$xdH3%(�H�Ĉ[]A\A]A^A_���H�=xO����	H�=sOH��d"���H��d"��������H���g����H�VH�v�[���H�VH�v����H�=#O����H��H�=d"���H�|$8����l����H�=�5��o��H��H�d"����k������Hc�H�D������H������������������H�D$0H��tyH�|$0�$�R�L�|$0D�C�H��M���3���$�����������H��D��HD�H�D$8H�t$0H�ƃ�u<H������H�|$8�)������H�=}71����H�t$8�+���H�t$8��DH��~���u&H�D$XL�|$H������H�D$`H���&����(���L��H�EI��H�D$H�D$XH���������������H���
��H�/>"1�H�81��������1����W���1҃��H��A"H�5�BH�81��|��H�|$8�����oEH��H���	��H�=�6H�C1�����H�t$8�3���Hc�H�|���H�D$8E1���H�����@H�������$����$H�D$0�<������UH��SH��(H�54>"dH�%(H�D$1���H���|H��H��������H����H�T$H�t$H���P��H�|$t(H�|$�tH�L$dH3%(uAH��([]�@H�5s1H�����H��HE���H�3@"H�5AH�81��*��U����@���AUATA��UH��SH��H��dH�%(H�D$1�����H�$����E���%L�+A��uZ�L��A��tq���H�މ����H��H��tqH��H���r�H��taH�L$dH3%(��H��[]A\A]�fDH�[A����H��t���toH�L��A��u����H�މ��T�H��H��u�H���D
��H��;"1�H�81��������E��~QH�$L�+A��t)H�[A��u:H��t�H�������H������H������H������H��������H�<$tH�������D�������ff.�@��AUI��ATUS��H��H��(H�5�;"dH�%(H�D$1��N�H����H��H���j����H�����1�1�H��H��I���g��H�<$�����H�D$�������TI�EH�D$�����H�|$���L����1�Hc��k�H��H�PH� tH�PH�D$H�8�� ��H��H�p��Hc�H9��SA��L��������(Hc�H���n�H��H�L$dH3%(�H��([]A\A]�@1�I�m���}H��ulH���tT������9���H�pH�x�{���������~KI�UH�D$H�T$��u�H�������H�|$������@�S������@H�|$����H�|$t
H�|$���������H��<"H�5�=H�81���H��8"H�5bHH�81��Y��H�Z<"H�5�GH�81��A��H��8"1�H�81��.���i��4��@��AUI��ATUS��H��H��(H�5k9"dH�%(H�D$1����H����H��H���
�����H���)���1�1�H��H��I�����H�<$�����H�D$�������TI�EH�D$�����H�|$��L�����1�Hc���H��H�PH� tH�PH�D$H�8�� ��H��H�p��Hc�H9��SA��L���a�����(Hc�H����H��H�L$dH3%(�H��([]A\A]�@1�I�m���}H��ulH���tT������9���H�pH�x�{��������~KI�UH�D$H�T$��u�H�������H�|$�a�����@��������@H�|$�>���H�|$t
H�|$�*��������H�*:"H�5v;H�81��!�H��6"H�5FH�81����H��9"H�5SEH�81�����H�b6"1�H�81������	�����@��AUI��ATI��US��H��H��8H�57"dH�%(H�D$(1���H���)H��H�������EH�����1�1�H��H��H�����H�<$�H�T$ H�t$H������H�|$��H�|$ ���
��H�D$���9����I�EH�D$�����H�|$��H���(��1�Hc��~�I��H�PH� tH�PH�D$H�8�� ��H��H�p��Hc�H9���A��H���������kHc�L����L��H�L$(dH3%(�\H��8[]A\A]��H�5k)L����H������H��4"H�5/DH�81�����1�M�e����H��utL��A��t[����������H�pH�x�8��������~KI�UH�D$H�T$��u�H�������H�|$������@�#������@H�|$�n���H�|$t
H�|$�Z���������H�Z7"H�5�8H�81��Q�H��3"H�52CH�81��)��H�*7"H�5�BH�81����H��3"1�H�81�����9����@��AUI��ATI��US��H��H��8H�584"dH�%(H�D$(1���H���)H��H��������EH����1�1�H��H��H������H�<$�H�T$ H�t$H���7���H�|$��H�|$ ���:��H�D$���9����I�EH�D$�����H�|$�0��H���X��1�Hc����I��H�PH� tH�PH�D$H�8�� ��H��H�p��Hc�H9���A��H���4����kHc�L�����L��H�L$(dH3%(�\H��8[]A\A]��H�5�&L�����H������H��1"H�5_AH�81��G���1�M�e����H��utL��A��t[���������H�pH�x�8���������~KI�UH�D$H�T$��u�H�������H�|$������@�S������@H�|$����H�|$t
H�|$���������H��4"H�5�5H�81���H��0"H�5b@H�81��Y��H�Z4"H�5�?H�81��A��H��0"1�H�81��.���i��4��@��AUI��ATI��US��H��H��(H�5h1"dH�%(H�D$1�����H���"H������H�D$����������t}I�EH�D$��txM�m���oH�|$�4H�|$������I��tnA����I���uc����L����H��H����H��/"1�H�81��A���H�D$H�|$������H�|$A�@��tA�������@����L�����H�|$H�����H�|$H�D$���H�1"H��1�H��I���[�H��H����L������H�ھH���w������H�L$dH3%(L����H��([]A\A]�DA�H�|$�H�����������[���H���fD�+�����r���H�|$t
H�|$�����1�����H������
��������
�����1�I���i���A��o���L������H�|$I�ʼn����Q���1�1ҾL�������1�1�1�L���@��H��H�����1�1ҾL���c�����1�L���$�H��H�������1�1ҾL���7����1�L�����H��H�������1�1ҾL�������1�1�1�L���H���H��H���]���1�1ҾL�������V�1�L�����L��H�����H���1���H�Y-"H�5m4H�81����H��0"H�5
2H�81����H������G������fD��AWAVI��AUATI��US��H��XdH�%(H�D$H1�H�=nQ"��H�D$ �:��H�D$(A�Dž�t2��~�������������}�D�����������T����H�D$(�`L�l$ I�,$I�T$H�T$���DH���jL��L�D$01ɺH�5�P"����H�=�P"H�\$0H����%���A�����H9�tBH�=sP"H�\$0H���%����A�����H9�tH�|$0@���&�1��A��fDH�|$8���L��I�����H��I�����H��Hc�H�T$(�h���H�|$I�����H�t$(1����H����H��H����1�H�t$ M��L��H���������H�|$ E1���������������xH�|$ E1�D���������UH�|$ 1�M����������3H�t$H��� ��H��H����H���������H�uH�E tH�uH�T$(H��������H�t$(H�����H�����H��H�L$HdH3%(��H��X[]A\A]A^A_��H�=�9�/����	H�=�9H��N"����H��N"�3���H�VH�v�D���H�=�9����H��H�eN"�����H�|$(�6�������H�=: ����H��H�%N"������A������Hc�M�l�A���!��I��������A�E�������L�l$ I��uH�D$(I�,$���H�|$ ���H�l$ �s�I��H�����E������������M��H�L$(��LD�H��L�l$ ��uH���X���H�|$(�\����I����H��L�l$ ���z���I�$��uH��H���k���@H���Z���H�D$(�f�H���(���H��("1�H�81����1�L�l$ ������/��H�|$(��{�H��I�$H��,�H�=!H�C1��J��H�SH�+L�l$ H�D$(H�T$����Hc�I�|���H�L$(1��H�����H������A��I��H�D$ ���1�H�=� ����I�T$L�l$ H�D$(I�,$H�T$�v���f���USH��H��tQH�2)"H��H�x("1�H�8����H��H���+����uaH�k 1�H�5H�����H��t4H��H��[]�f�����H��tH��H��("H�8���H�����H�)'"1�H�81����H��)"H�5�6H�81��}���ff.�f���SH�l'"H�5�6H�~)"H�H�;�K��H��&"H�;H�5D6H�H�("H��(��H�9("�����H��H��H�5�,H�����H�;�����H����H�5m
���H�;�H����H�5���H�;1�H���H�5�,��H�;1�H���H�5�+�}�H�;1�H����H�5��e�H�;�����H����H�5n,�J�H�;H�_,H�5}���H�;H�I,H�5#�~��H�;1�H����H�5*	��H�;1�H����H�5����H�;�����H��H�565���H�;�����H���H�5*5��H�;�����H���H�55��H�;�����H���H�55��H�;�����H����H�55�g�H�;�����H���H�5�4�L�H�;1�H���H�5�4�H�;1�H��H�5���H�;1�H�P��H�5���H�;1�H����H�50���H�;1�H����H�5N*���H�;1�H����H�5\3��H�;1�H�0��H�5I3��H�;1�H�h��H�563��H�;�H�}��H�5�*�q�H�;�H�"��H�54�V�H�;�H�w��H�5�3�;�H�;1�H���H�5�2�#�H�;�H�5�3�O�H�;�H�5�3�;�H�;�H�5�3�'�H�;[�	H�5�3��f���H�������H�H��H�Ѓ��f���UH��SH��H��H�|$H�t$����H����H�|$H�7�� u!H��H�����y�H��H��[]��H�GHcЉ�H9�uH��Q�H��H��[]�H���_���ff.�@��H��H�|$H�t$�I��H�|$H�7�� u!H��H������H�D$H����H�GHcЉ�H9�uH����H�D$H���H���߼��ff.�@��UH��SH����tF�����1�Hc��M��H��H�xH� tH�x���r����t7���tH��H��[]���������H�""H�5\2H�81��G���H�""H�592H�81��/���ff.�@��H��H�|$H�t$���H�����H���z���t
�H���H��!"1�H�81��ٻ��f���H��H�|$H�t$�I���H���A����t
�H���H�[!"1�H�81�菻��ff.�@��H��!"SH�5�1H�8�u��H��""H�� "H�5~1H��H�H��B��H�� "H�;�H�5])H�H�������H�;�H�>���H�5A1����H�;�H����H�511���H�;�H����H�5'1���H�;�H�����H�51�q��H�;1�[H�����H�51�X������g����S�5yE"H���
�H������5gE"H����[H����ff.�UH���SH��dH�%(H�D$1�����H��H���b��H������H��H����H������H�����H��H�����H�t$H���g�H��Hc�H�t6���Hct$H��H�t6���H�T$dH3%(u
H��H��[]�����fD��AUI��ATUSH��(H�_D�gdH�%(H�D$1��r��I�H�D$L9�s,DH�k�H��H��H�����H�|$H���>�I9�w�H�5BE"I�}�H�L$�?�H�|$H�D$� ��H�D$H��� u3H����H��H���w*H�L$dH3%(uH��([]A\A]�@H�P�����H�=�D"H�5'/1�蠸����UH��H��SH��H��H�5�D"�1�H�8�� u&H��H��H�E��Hc�H9�u�;H��1�[]�@H�PH�xH�U���M���ff.�f�UH��SH��H�5�"���H��tsH��H������xH���[]�H�5C"H����H���a�H�hH���u�H���=��H������uH��誺����u�H�=�C"H�5�2裷��H�� "H�5�2H�81�苷��ff.��������H���5bB"�-��H��H�������H�"1����ff.���ATA��UH��SH��H��dH�%(H�D$1����H�$����E���0tkH�mA���H�5�"H������I��H��tWH��"H��H�0�3���H���H�5cA"H����1�1�H������tzH�H���f�H�5)"H���q��I��1����H��L�����H��H�L$dH3%(��H��[]A\�@�#���E��xbH�$uHH��t��H�����4����H������H����H�=�	�o�H��H��@"�F���H�mA��u
H��u����H�<$tH�����1�D���������H�J"H�5�0H�81�葵�����USH��H�50"H���w��H���tH��H�H��1ɾ*�:�H��H��[]�H���(��H������USH��H�5�"H���'��H���tH��H�H��1ɾ,���H��H��[]�H������H������H��H�5�"����1ɺ��!H�����H���ff.���SH��H�t$@��u|H�����tsH��ƒ���tf��uaH�5*"�u��H�|$H����H�L$H� t*H�I1Ҿ\H���'�H��t'H�D$H��[��H����f.�����H�=L@"1��
���ff.�f�U1�H��1�SH�����H�5�?"1�1�H��I��L�vH����H��H��[]�@��AT1�USH��H��dH�%(H�D$1��D$���H��t\�5�>"H��H������I���/���L��H��H���q�H���)��H��H���^�H�T$H��H�=�F���HcT$��u!1�H�L$dH3%(u*H��[]A\�fDH�5!?"H�TL���,�����0��ATI��H�=T���UH��SH��H��0dH�%(H�D$(1�H�T$H�t$H�t$L�D$D�L$ ���H�ƋD$��uOH��� u/H��H��H�u���H�L$(dH3%(uTH��0[]A\�DH�VH�U�V��f.��5N="L������HcT$H�5N>"H��H�T�Y����]��ff.�f���AVE��AUI��ATI��UH��H�52="SH��L�����E��M��L��H��H��H��[]A\A]A^�������AVE��AUI��ATI��UH��H�5�<"SH��L���F��E��M��L��H��H��H��[]A\A]A^������H���H�|$�	�H�|$1��-�H�5�<"H������H��tH�5Q="H�L$�H���O��H���f.���S�H��H�|$��H�|$1����H�55;"H��H��t51�1�H�����H��tH�5�<"H�L$�H������H��[�@�H�=6��H��H��:"�ff.���S�H��H�|$��H�|$1��<�H�5�:"H��H��t51�1�H���q��H��tH�5T<"H�L$�H���R��H��[�@�H�=}5��H��H�E:"�ff.���ATI��5�:"UH��S�w��1�H�=nH�����H��1�H��t<H�CH� uH�C H�8�R��I�$H� u%H�[ H�{���H�E�[]A\�f.�H����f.���USH��H�5g:"H�|$���H�5�:"H������H��thH�5I;"�H�L$H���G���H��H�����1�H�����H��H���"���H�����H��H���:��H��H��1��X��H��[]Ð��AVAUATA��UH��SH��dH�%(H�D$1��U���H��������5�9"H��H������5x9"H��I���	��H�5z9"H��I�����H�5x9"H�����E��tH�����u3H��D��L�������H�L$dH3%(��u|H��[]A\A]A^�@H���@����u�H������Å�u�H�T$H��H�=O���HcT$��uH��t��>H��E1��K����{���H�5�9"H�TL������r����������UH��SH��(dH�%(H�D$1��.���H�������5b8"H�����H�5_8"H�����H�����tH��H�����H�����H�5e7"H�\$H�$H��t7H��"H��H�8�0��H�T$dH3%(uEH��([]�f��H�=9(�O��H��H�7"�1�H�=g#�r��������fD��ATA��U��SH��@�5�7"dH�%(H�D$81����H�T$H�t$D�d$$H�D$H��H�f8"H�=o�l$(H�D$�D$ ���HcT$��u0H��1�H��t�Q���H�L$8dH3%(u)H��@[]A\��H�58"H�TH�����1����#����U1�1�SH��H��(H�wH�?dH�%(H�D$1�����H��tmH�H�5�7"H��H��H�$HcSH�TH�T$HcSH�TH�T$����H������H��H�����9CuH�L$dH3%(H��uH��([]Ð1����w�����AVI��AUI��ATU��SH��H��dH�%(H�D$1�H�6"�D$H�8���5�5"H���~���I��葵��L��H��H������Hc�L���h���H��H�����H�T$H��H�=����y��HcT$H�Å���H�
"H��H�0���H��tBH�5C"H���c���H����A�EH�L$dH3%(��H��[]A\A]A^Ð1���@L�%�"��H�=��I�$�7�I�$� �H�=� ��I�<$�1�A��H�
V%H�|��	������@H�5�5"H�TL������1��S�������H��"H�5� H�81�舩�����ATUH��SH��H��dH�%(H�D$1��D$�1�����uwH�~"H�8���564"H�����I��H��"H�8�|��H��H����H�] ��ó��L��H��H�����H��H�����H�T$H��H�=k������H�D$dH3%(urH��[]A\�DL�%y"��H�=0�I�$���I�$�#�H�=���I�<$�1�A��H�
�#H������������ff.�@��ATUH��SH��H��dH�%(H�D$1�H�O"�D$H�8���53"H�����I��H�u"H�8�E��H��H��躹��H�] �茲��L��H��H������H��H������H�T$H��H�=�������HcT$��u&1�H�L$dH3%(��H��[]A\��H�5�3"H�TL�������f.�L�%"��H�=��I�$�_�I�$� �H�=j�E�I�<$�1�A��H�
~"H����1������'�����AWAVI��H�5~"AUATU��H��SH��H��(dH�%(H�D$1�觻��I��菨��H�D$���N����M�>M�n����H�D$���H������H��ƒ���������L���d��L��I�����L��I���>���I��H������M���SL��L���?������WE1�����L��L���������L��L��������fM��t1�L���XL�����H���H�L$dH3%(H���*H��([]A\A]A^A_�fD1�I�NH�L$��jH����H�|$�E�����H���H�����+�����~8H�D$M�>H�D$M�n��t��f.�H�|$���I������H�|$t
H�|$���������K��H�5�	"L�����H�=�0"H�5^ 1�跤��H�X	"H�5!H�81�诺��H�@	"H�5 H�81�藺��H�5p	"L���8��H�=�0"H�59 1��c������H�5G	"L�����H�=�0"H�5�1��:���f.���H��H�5�!����H�����H��H�H�D����AUH�5��!ATUSH�����H���N��H��taH��H�����Hc�I��胮��I��E��~01�f���H����ð��H���[�L��H�����D9�u�H��L��[]A\A]�DH��[]A\A]�y���f���ATH�5�!US�L���H�����1�1ɾH��H�����H�@H���L�dH�=�-"H���`���L��H��H���%���1�1ɾH������H�@H���L�dH�=u-"H���|�W��L��H��H���٢��1�1ɾH���x��H�@H��eL�dH�=!-"H������L��H��H��荢��1�1ɾH���,��H�@H��IL�dH�=�,"H�������L��H��H���A���1�1ɾH������H�@H���L�dH�=y,"H���8�s��L��H��H�����1�1ɾH�����H�@H���L�dH�=%,"H�����'��L��H��H��詡��1�1ɾH���H��H�@H��uL�dH�=�+"H���`����L��H��H���]���1�1ɾH�����H�@H��YL�dH�=}+"H�������L��H��H������1�1ɾH�����H�@H���L�dH�=)+"H�����C��L��H��H���Š��1�1ɾH���d��H�@H���L�dH�=�*"H������L��H��H���y���1�1ɾH�����H�@H���L�dH�=�*"H�������L��H��H���-���1�1ɾH������H�@H��iH�lH�=-*"H��tH�c��H��H��H�����H��[]A\�DH�=��	���H��H�E*"����H�=������H��H��)"�H�=��
����H��H��)"�0���H�=x����H��H��)"����H�=P����H��H�})"�X���H�=%�
�o��H��H�e)"���H�=���O��H��H�M)"���H�=���/��H��H�5)"����H�=C����H��H�)"���H�=r�����H��H�)"�<���H�=E�����H��H��("����H�=�����H��H��("�d���H���x���I�����H���h���I���4���H���X���I������H���H���I�����H���8���I�����H���(���I���$���H������I�����H������I�����H�����I���p���H�����I������H���ز��I���X���H���Ȳ��H�������H��H�5�!�L���1�1ɾ+H�����H�@H�xH�DH���f�H��H���t���@��H��H�5��!���1�1ɾ-H������H�@H�xH�DH���f�H��H���$���@��H��H�5a�!謱��H����H��������?H9�w
H�DH���H��H���l��ff.��PXH�5�1�H��H�=�("�U���DPXH�5�1�H��H�=j("�5���DPXH�5RH��H�$"H�81�����f���H��(H�5�"dH�%(H�D$1����H��t>H�t$H��H�T$�����t$���t
H�|$�n���H�L$dH3%(u
H��(��t����ߺ��ff.�@��H��(H�5Y"dH�%(H�D$1��l���H��t>H�t$H��H�T$襽���t$���t
H�|$���H�L$dH3%(u
H��(����_���ff.�@��H��H�5�!dH�%(H�D$1����H��t@1�H��mH������H��tH�<$肤��H��H�t$dH34%(H��u
H����r����ݹ��ff.�f���USH��H��H�t$H�5O�!�r���H��tN1�H�|$H��t
H�|$����H��1Ҿ7H���d���H��t8H�T$H�5C%"H���[��H�D$H��[]�H� "H�5<H�81�����H�=8&"1����f���H��H�5��!�ܮ��H��tH���?���H��H���s������ff.���H��H�5y�!蜮��H��tH���O��H��H�H�D��N���ff.���UH��SH��H�54�!�W���H��t1H�5#"H��H���@���H��tGH��H��谦����u"H��H��[]�H�""H�5>H�81��	���H�=:%"H�5~1���H��"H�5�H�81��ܘ��ff.����H��H�5��!輭��H��tH�������H�H��H�Ѓ���i���f���H��H�5Y�!�|���H��tH��菭��H��H�H�D��.���ff.���USH��H�5�!�:���H��tfH��H���J��H����H���*���H�8uH��H��[]�f.��H�5��H�����H��贰��H��H���Y���H��H��[]����f.���H��H�5��!謬��H��t)H���_��H��tH��H���N��fD�H����I���f���H��H�59�!�\���H��tH���/��H��H����������ff.���AUATUSH��H�5�!����H��t}H��艘��H��H��tYH������Hc�I��计��I��E��~+1�@��H�����H��軰��L��H������D9�u�H��L��[]A\A]�DH��A�[L��]A\A]��_���ff.�@��USH��H�5G�!�j���H��tDH��蝬��H��H��t%H���=���H��H����H��H��[]���H��H��[]����ff.����H��H�5�!���H��t)H���?���H��tH��H���ί��fD�H������f���SH�5��!诪��H��t6H��H���/����x
H��賖����w�[���ۮ���[��?���ff.�@��ATI��USH��H��H�?dH�%(H�D$1��� �H����Hc�H9��������woH�t$�L��@�l$����H�sH� u-H��L������H�L$dH3%(u&H��[]A\�@H�s��f.�H�{�������H�=� "H�541�荔��蘔���1�@��uH�����t
�����t�@H��H�5M "�4�K��H����H�����ff.�f�AWAVAUI��ATUH��SH��8H�t$H�|$dH�%(H�D$(1�����H��蕷��H�5�!H��I�����H���gH�5�"H��H���x���H��H���=��L�pL���Q��H���9�����1�M�|$I�<$H���� u{H����Hclj�H9�����tvL��H��tI�t$H�����H�߉Ɖ��������~F��uqL���������M����A�~����I�<$H���� t�I�|$�f���u@Hc�H�DH�T$(dH3%(��H��8[]A\A]A^A_Ð��u�V��������H�=�"H�5A1�角���M��t{H��"H����1�H�=R
�=���H�D$H��H��H�L$A��L�l$H�D$����Z���fDL���������M����A�~�V�������H�	"H��td1�H�=�	�Ƹ��H�D$H��H��H�L$�H�D$�������f�1�詸��f��H�=��?��H��H��"�%����H�=A���H��H��"�|���H�q"���H�m"���胑��H�t�!H�5�H�81��[���薰�������ff.����1�����DAWAVI��AUATI��UH��SH��H�5*"H�$��4��H�5�!H�����H���>H�5"H��H��芾��H���R���L�hL���f��H��1�A��H�5�"H��A���\���H����E����D��H���>���������~1����L�������xM����A�}�F����@��u+�D$�R����L$�����u�������H�߉L$���H��蜐���L$H�$I��D�H�=/"H�5@1����f���u��f���H�ŋ��t
H�<$蔶��@H��舨��D�EH�$�H�=�"I��1�H�5�蓏��L����������M����A�}螤�����f�H���X��H��H���
���H������H��I��H�+�HD�M��LD�舨��H����H��訏��ATI�ٹUD�1�H�5!H�T$H�=-"��H�-�"H��H��[]A\A]A^A_�H�-�"��H�$�%���H�$H�Ǩt$襕����辶��H���!H�5�	H�81�薎���!��������5�D��AUI��ATUH��S��H��(dH�%(H�D$1�H�D$�<���H�D$A�ą�������Hc�I�D���#H������������������H�D$H����H�|$譨��H�|$I������E��������M��LD�L�l$H�D$��xuL�d$��ulH��tH�|$����
fDu[L�d$H���Y��H�5R�!L��H��H�
�@���H�L$dH3%(uYH��([]A\A]�D�;�����~���tH�|$u(1�1���蠪��Hc�I�|�H��t ���H�D$����H�|$������B�������������SH�����H�5��!H��1�H�v	[���f.���AUI��ATUH��S��H��(dH�%(H�D$1�H�D$�|���H�D$A�ą�������Hc�I�D���#H������������������H�D$H����H�|$���H�|$I���z��E���F����M��LD�L�l$H�D$��xuL�d$��ulH��tH�|$�о���
fDu[L�d$H�����H�5*�!L��H��H�f���H�L$dH3%(uYH��([]A\A]�D�{�����~���tH�|$u(1�1������Hc�I�|�H��t �-���H�D$����H�|$�9�����肪���@���|�����SH������H�5��!H��1�H��[����f.���U��SH��H��dH�%(H�D$1�������t��uH�D$dH3%(uZH��[]�@�5�"H���J���H�5�"H��H�$�G���H�58"H���8���H��t�H�5�"H��H��蛲���褩��@��ATUSH����uhH�����t_H��ƒ���tR��uMH��H��H�5��!�#���H��I���h���L��H���ݾ��H��t7@��t!H��H�L���#���H��[]A\�H�����H���ȿ��H����L��T���H��[]A\�ff.���USH��H�5P�!H��藞��H�5h�!H��H��腞��H��t#H��H����������HE�H��[]�H�^�!H�5WH�81��E���D��AUATUH��SH��dH�%(H�D$1�����H�������H�E�ƒ��������~H��H��tNI��A��u	H�����usI��H�$L�����H�5m�!H��赝��L��H���:��H��H��诫������H�L$dH3%(H���/H��[]A\A]�DH���h�������������1�1�L�%�R���H�$H��tf�H����I9���L��H������uH�����t�������H�����H�<$H���D���H��� t<H��H����H��I9�|9I���� u�H�C�H�=�"H�5k觇���H�S��f.�H�<$�L���O���H��f.�I������1�H���6����Y���茦��ff.����U1�H���!SH�����H�����H��踦��H��t6H��1ɺ�!H���ܴ��H�] H��H�ߋ5�"�Ƕ��H��H��[]�H�="H�5�1��Ȇ�����USH��@��u`H�����tWH��ƒ���tJ��uEH��H�5;�!膛��H��H���u������H���ܜ��H��H��[]�f��K���������K���ff.���USH��H��H�5��!H���$���H��H���ɣ��1ҾH��H�����H��t
H��H��[]�H�=)"1����f.���USH��H�5��!H���ǚ��H�5��!H��H��赚��H��t#H��H���E�������HE�H��[]�H���!H�5��H�81��u���DAWAVAUATUSH��H�|$H��������t�7���H��[]A\A]A^A_��@����@����H�|$H�-�!�+���L�|$H�=�M�'M�wM��I��A�� A��M��t*I�WI�w�T���������H����thH�}M��u�L��L�����H��1�[]A\A]A^A_��H������g��������
tA@��t	���N����Ş��H�D$�?���H���!L��H�5/H�81��M���D�Û��H��[]A\A]A^A_�@Hc�H��!H���D����f���ATUH��SH��H�5��!���H��I���k���H����a���1�HcӾ{L���蝱��H��t!1�Hcվ|L��膱��H��t[�]A\�H�=�"H�5�脃��H�=�"H�5��q������AWAVI��AUI��ATUS��H��8dH�%(H�D$(1�H�D$�(���H�D$ A�ą�t8��������H�=`�1�虇��H�l$H�D$ M�>�-f.��ۋ����~WH�l$���YH�D$ M�>��uDH���4H��L��L����H�L$(dH3%(�NH��8[]A\A]A^A_�t.H�D$ H��t
H�|$ �j��������ٟ��f���t�H�|$ �����H��蠳��H�=��H�1�迆��H�l$H�D$ L�;�P���DHc�I�l�@������H������r����E�����c���H�l$H������H�|$葜��L�|$�S�H��M�������E���`����H��HD�H�D$ H�l$��uK1��
���H�|$ �v������Hc�I�|����g���H��������1���H��H�D$�o���菠�����Ӊ�H�l$���f����d���fDAWI��AVAUI��ATA��US��H��XdH�%(H�D$H1���tkH�D$ ���H�D$(�Ņ��r��������H�=�1��S���I�mL�t$ f.�H�D$H�T$(�kD胂��H�D$(���r����I�m����I�EH�D$���XH�|$(��A�H��@���,�'���H�|$��Lc��,1�L���̑��H�D$H��1���������H�5��!L�����I��H����H�5"L��苭��H��I���P���H�@H��H�D$�_���L���G������E����H��
"H���T1�H�=]��H���H�D$H��L��H�L$0A��H�l$0H�D$8L�t$@����H�|$�
��H�|$Hc��P���H�D$H�L$HdH3%(��H��X[]A\A]A^A_��蛖��H�|$��Lc�����H�|$����H�|$H��� ucH����L9�|?���H�|$����H�D$H�|$(�\���H�|$(葱���M���@L��H)�譳��H�|$�o���H�G�f.��[������#����L�t$ I�m�������I�UH�T$H�T$(���]H�����H�|$(��������f.�����������H�|$(t
H�|$(��������P���H��"H����1�H�=��肤��H�D$H��L��H�L$0�H�l$0H�D$8�Υ���^���f�H�|$L�=��τ��H�t$H� uiH��L�����L��Ɖ��������Z��Ic�L�>��f�u>���H�T$(H���ZH�|$(�D$�
����D$�������H�v�f�H�T$(����H�|$�|��L���e����������>���H����H�|$�{|���F}�����t�1��y���f�E���CH�|$�M|��L�������@H�f"�6���E���H�|$�|��L��������H�/"�����
H�=��豭��H��H�"����H�=^�葭��H��H��"�2���Hc�M�t�A�������I��������A������ܺ��L�t$ I��tIH�|$ ����H�T$ I��H��������������M��t'L�t$ I�m�������>����I�m�.���H�D$ A���H�D$�x�I�������H�D$�x�w��������}������������N���H�|$(��躦��H���r���H�=[�H�1����L�t$ H�+�D���H�|$�z��H�="H�5�1���z�������������Hc�I�|���t:H��uB���˹��L�t$ I��t@H�|$ �V���H�T$ I��H��������ι��I�mL�t$ �����=|��I��H�D$ ���I�EI�mH�T$(H�D$����H�J�!H�5f�H�81��1z��������f���1����D��AUATUSH��dH�%(H�D$1�@���H��H�������H���ƒ���������H�5b�!譎��H�5��H��H��若��H�5"H���<���H�������	H�5Y"H���!���H�$H��tH��迊��H��I��H������L��蹣��H�5�"H�����H�$H��t&H�5�"H���I��L���1�1�H�����H�5�"H��E1�訦��H�$H��tH������I��H�5t"H��脦��H�$H��tKH���"���I��M��t;H��t6L��H��芬�����#	L��H���Ǭ�����6	H���7������	H�5("H��� ���H�$H�������H�������H��у�����E1��C�H����I9���H��J�<��C���H��H���x������QH�$I��H��� u�L;`}UH�@ ��@�H�L$dH3%(H���H��[]A\A]�f�H���ا��H��H���
�������H�5f"H���6���H�$H��t4I��L������H�5:"H��I������H�$H��u,L��1��3fDH�5"H�����H�$H��tE1�I��L��豰��H��L	�H���BH�5�"H��賤��1�H�$H��tH�Ǩ����}����H��H����&���H�5W"H���w���H�������H�5,"H���\���H�$H��t��zH�H��H������H�5E"H���-���H�$H��tH�Ǩ�8����H���ɖ��H�5�"H�����H�$H��t=H���8��H�59"H��H���V���H��H�5|���H������H�E�!H�8��H�5L"H��褣��H�������H�5"H��艣��H�$H��t@H������H��� �[H��H�p��H���(������ZH���!H�8��H�5�"H���0���H�������H���L���H�5�"H���
���H�$H��t3H���k���H�4$H��� �+H��H����H����������H�5�"H�����H������
H�5^"H��覢��H�����unH�5?"H��菢��H������cH�5��!H���t���H�$H��t(H��H���5�v���H���!H�(H��������H�59��H����H���!H�8�r���L�%!�!��H�=ػI�$�o���I�$��H�=r��U���I�<$�1�A��H�
��H����A�������@H�5���H�����H��!H�8����L�%��!��H�=P�I�$���I�$��H�=���ͬ��I�<$�1�A��H�
�H�,�蹢���o���@H�5���H���ћ��H���!H�8�}���L�%�!��H�=ȺI�$�_���I�$�!�H�=���E���I�<$�1�A��H�
~�H����1�������@H�5���H���I�������@H��L��H���¢���������H�=3��n������f�H��H�5����H����x��H���!H�8�	���L�%>�!��H�=��I�$茫��I�$��H�=/��r���I�<$�1�A��H�
��H�ѹ�^������f�H�VHc�H9��dH�v�����H��H�5&���H��讣��H��!H�8���L�%��!��H�=E�I�$�ܪ��I�$��H�=2��ª��I�<$�1�A��H�
��H�!�讠�����f�H�PHc�H9���H�p�����ˈ�����O���@�x��������@H�����H���|����H�=������H��H�M�!H�$����@L�%��!��H�=`�I�$���I�$��H�=���ݩ��I�<$�1�A��H�
�H�<��ɟ�����@H�A�!��H�=��H�萩��H��$�H�=���w���H�;A��1�H�
��H�ܷ��d����D����L�%��!��H�=��I�$�'���I�$� �H�=���
���I�<$�1�A��H�
F�H�l����������H�=�!H�5��o��H���o��H�=�!H�5��1��o��H�=��!H�5��lo��H�=��!H�5���Yo��H�=��!H�5��Fo��H�=w�!H�5��1��1o��H�=b�!H�5+��o��ff.���AUA��H��ATI��USH��H��(H�5��!dH�%(H�D$1��ڃ��H���U�p��H�D$����E���$I�,$A���4H�5u�!H����H���!1�1�H�8豖��I��H�5'�!L���o���H�5��!L��H��I��芡��L���B�H�5�!H���H��誝����t+H�D$H�5�!H���]H�L$�H���;���H�5$�!H��H���)���L���av��H��H���~H�C �5�!H��H���0v��H�5��H���Ay��H�5r�!L���b����5��!H��H���v��1�1�訂��H��H�L$dH3%(�*H��([]A\A]�fD1�M�d$A����H������H�|$�<���������	H�=3�诞��H��H���!�����v��E��~vH�D$I�,$A��u�H���Z���H�|$���H�5�!H���P����H�=���S���H��H���!�0���@�	H�=���/���H��H�m�!���H�|$t
H�|$�~�����D�����H�=��!H�5U�1��gl��H�=��!1�1��Wl��蒋��f���AT�USH��H�|$���H�|$1��	���H�5:�!H��H���Ǚ��H�5@�!H��踙��H��t9H�5�!H��H�L$�����H��H�?�!H��H�0贔��H��uH��upH���H��[]A\��H����H�5y�!H��虀��I��H��tPH��H�57�!肀��L��H���Gv��H�5��!H��H��蕞��H��H��[]A\�H���!H�5�H�81��Ak��H�B�!H�5^�H�81��)k��f���AT�H�=�US臜���H�=	�H��!�o���E1�E1�1�H���1�1�H��!�0u����!����E1�E1�1�1�H���1��
u�����!���}E1�E1�1�1�H������t���{�!���lH���!H�5��H�;�ms��H�-�!H�;H�5��H�E�Ss��H�}H�5�H�q�!H�R�!H��"z��H�}H�5��H��H�E�!�z��H�q�!H��H�'�!H�2�q��H�}H��!H�5����y��H���!H��H��!H�2�_q���Z���L�%��!H�}H�5f�I�$�y��H���!H�5Q�H��H��v��H�;H�5R��s���H�=�����H�;E1���H������H�=��轚��H�;E1���H���՗���	H�=�蔚��H�;E1���H��謗���H�=���k���H�;E1���H��胗���H�=���B���H�;E1���H���Z����H�=������H�;E1���H���1����H�=E���H�;E1���H�������H�=)��Ǚ��H�;E1���H���ߖ���H�=�螙��H�;E1���H��趖���H�=���u���H�;E1���H��荖���
H�=���L���H�;E1���H���d����H�=���#���H�;E1���H���;����H�=�����H�;E1���H�������H�=���ј��H�;E1���H������H�=��記��H�;E1���H������H�=������H�;E1���H��藕���H�=l��V���H�;E1��H�ƺ�n���H�=��!�H�5t��Ɛ���H�=������H�;E1���H���-����
H�=$����H�;E1���H�������
H�=���×��H�;E1���H���۔���H�=��蚗��H�;E1���H��貔���H�=���q���H�;E1��H�ƺ艔��H�;H�#�H�5���y��H�;H���H�5����x��H�;�H���H�5���ru��H�;1�H�����H�5ĺ�Z���H�;�H�+��H�5u��?���H�;�H�����H�5c��$���H�;1�H����H�5X�����H�;�H�]��H�5L���H�;1�H����H�5D��و��H�;�����H�
���H�5;�辈��H�;1�H���H�5&�覈��H�;H��H�5���w��H�;�H�5	�輎��H�;�H�5�討��H�;�H�5�蔎��H�;�H�5	�耎��H�;�H�5��l���H�;�H�5=��X���H�;�H�5Q��D���H�;�H�5���0���H�;�H�Q��H�5���Շ��H�;�H���H�5��躇��H�;1�H����H�5��袇��H�;�H�s���H�5��臇��H�;1�H�;��H�5���o���H�;�H��H�5���T���H�;1�H����H�5���<���H�;�����H����H�5���!���H�;1�H�u��H�5���	���H�;�H����H�5�����I�$H�}H�5���r��H���!1�H�=*�!H�5w�H����H�;H�5�����<p��H�;�����H���H�56�葆��H�;H�5}���l��H�;1�H�f��H�5D��j���H�;�����H����H�5��O���H�;1�H�s��H�5��7���H�;�����H����H�5������H�;�����H�
�H�5n�����H�;�����H���H�5����q��H�;�H����H�5���˅��H�;�����H�l��H�5���q��H�;1�H���H�5���q��H�;1�H����H�5��者��H�;1�H���H�5z��h���H�;1�H�L��H�5l��P���H�;1�H����H�5d��8���H�;1�H����H�5�� ���H�;1�H����H�5D�����H�;1�H����H�5(���H�;1�H�4��H�5��؄��H�;�H�y��H�5
�轄��H�;1�H�!��H�5��襄��H�;1�H����H�5��荄��H�;�H���H�5���r���H�;1�H�v��H�5���Z���H�;1�H����H�5���B���H�;1�H�F��H�5���*���H�}�H�5���U���H�}�H�5���@���H�}�H�5���+���H�}�	H�5������H�}H�5��H�����H�}�	H�5�����H�}�!H�5���҉��H�}��H�5��轉��H�}�H�5��訉��H�}�H�5��蓉��H�}��H�5y��~���H�}�H�5���i���H�}�H�5\��T���H�}�H�5���?���H�}�H�5D��*���H�}��H�5F�����H�}�H�5M�����H�}��H�5L����H�}H�5P�H��ш��H�}�H�5I�輈��H�}�H�5@�览��H�}� H�57�蒈��H�}�H�50��}���H�}�@H�5)��h���H�}�H�5"��S���H�}�H�5&��>���H�}�H�5���)���H�}�H�5������H�}�H�5����H�}�H�5
����H�}�H�5��Շ��H�}�H�5����H�}�H�5�談��H�}�H�5�薇��H�}�H�5�聇��H�}�H�5
��l���H�}�H�5	��W���H�}�H�5��B���H�}�H�5���-���H�}�H�5������H�}�H�5������H�}�H�5�����H�}�H�5���ن��H�}�H�5���Ć��H�}�H�5��识��H�}�H�5��蚆��H�}�	H�5��腆���	H�=���ԍ��H������
H�=��H�1�!贍��H���̌���
H�=��H�	�!蔍��H��謌���H�=��H���!�t����H�=)�H���!�\����H�=k��K����H�=a�H���!�3����H�=X�H���!�����H�=L�H�h�!�����H�==�H�H�!����H�=.�H�(�!�ӌ���
H�=#�H��!軌���H�=�H���!裌���
H�=�H���!苌���H�=�H���!�s����H�=��H���!�[����H�=�H�h�!�C����H�=��H�H�!�+����H�=��H�(�!�����H�=��H��!����H�=��H���!����H�=��H���!�ˋ���H�=��H���!賋���H�=��H���!蛋���H�=��H�h�!胋���H�=��H�H�!�k����H�=��H�(�!�S����H�=��H��!�;����H�=��H���!�#����H�=x�H���!�����H�=o�H���!���H�=h�H���!�ۊ���H�=T�H�h�!�Ê���	H�=E�H�H�!諊��[]H�2�!A\�H� �!H�5B�H�81��Y��H��!H�5j�H�81���X��f.�D����c�����USH��H�5��!dH�%(H�D$1��m��H����1�H��H���^������Hc�1��2j��H��H�@H� tH�CH��H��H�$�^��H��� t7H�CH�4$H�SH)�H9�4H���Kk��H��H�L$dH3%(u8H��[]ÐH��H�4$H�S����H�
(���H�5��H�=����h���+w��H�=<�!H�5m�1���W��H��!H�5��H�81��W��ff.���USH��H��@��umH�����tdH��ƒ���tW��uRH��H�5P�!H�k �ol��H��tUH�5��!H�=�!H����o��H��t'H�C H���Sb��H��H��[]�f�H���(]��H�=y�!H�5@��W��H��!H�5�H�81��V��ff.�f���ATUSH��H� H�t$��H���!H��H�|$H�0�=_��H��u@H�|$�^���1�1�1�H��I����f��H��H��teL���X��H�k H��H��[]A\�DH�5I�!H�|$�gk��H����H������H��H��u�H�=��!H�5��1��9V��f�1�1ҾL���l���zo��H�=k�!1�L��H�5O�!�^��L��H���'X��H���a���H���!H�5��H�81���U��H�='�!H�58�1��U��H�¾!H�5��H�81��U��f���H�m�!1��NW��ff.���USH��H�5G�!�jj��H��t5H������H���Z��H��H��tOH��H����s��H�߅�t#H��[]鰁��H�1�!H�5*�H�81��U���CW��H�=d�!H�5��1��T��H�=O�!H�5��1���T��f�PXH�5��H��H�Խ!H�81���T��f���H��H�5��!dH�%(H�D$1��D$�i��H��t.H�t$H���2k���t$H���&f��H�T$dH3%(u
H����|����s�����H��H�5�!�<i��H��t3H���S��H�@H�xH�DH���fDH��H���di������ff.�@��ATUH��SH��H�5��!��h��H��t6I���t!H�H��L���K���[H��]A\�_����H���d��H�������fD��H��H�5Y�!dH�%(H�D$1��lh��H����H��軇��H�ǸH��t;H�@H�xgH�D?H�5{�!H�$H��t2H�+�!H��H�8�C{��H�T$dH3%(u2H���fD�H�=��g���H��H�%�!��3h����r��������ATUH��SH��H�5��!�g��H����I��H���!H��H�0�[��H��u#��t>H�H��L���pW��[H��]A\����@H�5��!H��t$H��1�1��xz��H���u�H���c��H����H�=	�蟃��H��H�e�!�H��!H�5
�H�81��Q��ff.���AUATI��USH��H�-��!dH�%(H�D$1�H���f��H����H��L��H���f��H��H��tuH��H���Fh��H�t$H��I���6h��H��I���;q��H����1q��9�t1�H�L$dH3%(u*H��[]A\A]Ë$;T$u�L��L���{����H������lp���G���H�(�!H�5!�H�81��Q��ff.�@��USH��H�5Ƿ!��e��H��t5H��蝊��H���V��H��H��tOH��H���X��H�߅�t#H��[]�0}��H���!H�5��H�81��P����R��H�=��!H�5f�1��~P��H�=��!H�5E�1��iP��f���H�-�!SH�5a�H�H���!H�8�;`��H�\�!H���!H�5�H��H�H��`��H�;H�5n���H�_�!�r]��H�;�H����H�5l���s��H�;�H�(���H�5���s��H�;�H����H�5���s��H�;1�H����H�5'��ys��H�;�H����H�5���^s��H�;1�H�"���H�5���Fs��H�;�H�g���H�5?��+s��H�;1�H����H�5���s��H�;1�H�W���H�5��r��H�;1�H����H�5,���r��H�;1�[H�v���H�5���r��f.���UH��H��SH��(dH�%(H�D$1�H�\$H�T$H���>c���t$H��1�H����v��H�L$dH3%(uH��([]��m�����H���!SH�58�H�8�uW��H��!H��F�����W�������W����Rp���MZ���m����n��H�;�H�5\��?x��H�;�H�5M��+x��H�;�H�5���x��H�;�H�57��x��H�;�	H�5����w��H�;�H�5����w��H�;�
H�5����w��H�;�H�5���w��H�;�H�5��w��H�;�H�5��w��H�;�H�5��ww��H�;�H�5��cw��H�;�H�5��Ow��H�;�H�5���;w��H�;�H�5���'w��H�;�H�5���w��H�;�!H�5���v��H�;�#H�5����v��H�;�%H�5����v��H�;�'H�5����v��H�;�)H�5���v��H�;�+H�5��v��H�;�-H�5{��v��H�;�/H�5���sv��H�;�1H�5���_v��H�;�3H�5}��Kv��H�;�5H�5���7v��H�;�7H�5���#v��H�;�9H�5���v��H�;�;H�5���u��H�;�=H�5����u��H�;�?H�5p���u��H�;�AH�5���u��H�;�CH�5p��u��H�;�EH�5|��u��H�;�GH�5a��u��H�;�IH�5|��ou��H�;�KH�5T��[u��H�;�MH�5|��Gu��H�;�OH�5���3u��H�;�QH�5���u��H�;�SH�5��u��H�;�UH�5���t��H�;�WH�5	���t��H�;�YH�5���t��H�;�[H�5���t��H�;�]H�5��t��H�;�_H�5��t��H�;�aH�5
��t��H�;�cH�5��kt��H�;�eH�5L��Wt��H�;�gH�5X��Ct��H�;�iH�5l��/t��H�;�kH�5���t��H�;�mH�5l��t��H�;�oH�5����s��H�;�qH�5����s��H�;�sH�5P���s��H�;�uH�5���s��H�;�wH�5H��s��H�;�yH�5���s��H�;�{H�5P��{s��H�;�}H�5���gs��H�;�H�5���Ss��H�;��H�5���?s��H�;��H�5���+s��H�;��H�5���s��H�;��H�5���s��H�;��H�5����r��H�;��H�5����r��H�;��H�5����r��H�;��H�5���r��H�;��H�5���r��H�;��H�5���r��H�;��H�5���wr��H�;��H�5���cr��H�;�H�5���Or��H�;�	H�5���;r��H�;�H�5���'r��H�;�!H�5���r��H�;�AH�5���q��H�;��H�5����q��H�;�H�5����q��H�;�H�5����q��H�;�H�5���q��H�;�H�5���q��H�;�H�5���q��H�;� H�5���sq��H�;�@H�5���_q��H�;��H�5���Kq��H�;�H�5���7q��H�;�H�5���#q��H�;�H�5���q��H�;�H�5���p��H�;�H�5����p��H�;� H�5����p��H�;�@H�5���p��H�;�H�5���p��H�;�H�5���p��H�;�H�5���p��H�;�	H�5���op��H�;�H�5���[p��H�;�
H�5���Gp��H�;�H�5���3p��H�;�H�5���p��H�;�H�5���p��H�;�H�5���o��H�;�H�5����o��H�;�H�5����o��H�;�	H�5���o��H�;�H�5���o��H�;�
H�5���o��H�;�H�5���o��H�;�H�5���ko���j��H���\��H�;H�5��H���Lo����w��H����[��H�;H�5��H���-o���`��H����[��H�;H�5��H���o���9[��H���[��H�;H�5w�H����n���d��H���[��H�;H�5m�H����n���\��H���s[��H�;H�5d�[H���n�����gn�����UH�5�!SH��dH�%(H�D$1��ZY��H����1�H��H���m������Hc�1���U��H��H�@H� uRH��H��H�$�sm����~\H�H�4$�� tCH�CH�SH)�H9�kH���V��H��H�L$dH3%(uoH��[]ÐH�C�f.�H��H�S���H�,�!1�H�81��C��H���!H�5��H�81��C��H�
���(H�5��H�=,��YT���b��@��AUH�5ß!ATUSH��(dH�%(H�D$1��6X��H����I����O��H��H���YL��1��?{��A�Ņ�~%���L����t��H��H���x��A9�u�1�H���b������Hc�1��wT��H��H�@H� ��H�t$H��H�D$�Qb������H�H�t$�� ttH�CH�SH)�H9���H���U��H���(V��H�5��!H�\$H��t_H���!H�L$�H�8�nj��H�L$dH3%(��H��([]A\A]��H��H�S���H�C�L�����H�=
��gs��H��H�]�!�H���U��H�L�!1�H�81��A��H�9�!H�5�H�81��A��H���!H�5��H�81��A��H�
���H�5��H�=4��aR���`��ff.����AWAVAUI��H��ATUSH��H�ɥ!H�t$H�3�j��H����H�5��!H����H�|$�n��H�Ǩ���X��H�5j�!��H����H�|$�n��H�Ń���H�Ã���H������y������kH�5�!L���U��I��H����H���x������L�m�Sf�H����H9���L��H�<�H���m��L�pH��I���!e��L�����L�����W��L�������O^��H�E�� u�H9]~PH�E �f.��F��H�5t�!��H���
����H�=���hq��H��H�N�!���f�H�D$H��[]A\A]A^A_�@L����`��A�����1�1�H��1��v��I��H��t9I�E L��M���ei������H�=A���p��H��H���!�E����{]��H�Ԩ!1�H�81��H?��H�q�!H�5��H�81��0?��H�|$H��ss��H��H�5��H��H��!H�81��?��H��!H�5:�H�81���>��H��!H�5R�H�81���>��D��UH�54�!SH���S��H��tZH����_��H��H����V����u.�Yx��H����C��H��H��tFH��H���u��H��H��[]��j�����i?��H��[H��]�+U��H�\�!H�5��H�81��C>��H���!1�H�81��0>����ATUSH����upH�����tgH��ƒ���tZ��uUI��H��H�5h�!��R��H��H��tCH�5T�!L����R��H��t/H���_��H��t:H�C H���g��H��[]A\�fDH���C��H���!H�5��H�81��=��H�	�!H�5.�H�81��x=�����ATI��H�5Й!U��H��SH��H��0dH�%(H�D$(1��=R��H�D$H����?��H�D$�������I�<$H�|$���M�d$����H�5R�!H�|$ H���\H�l$ �H��H���d��H�5 �!L�d$ H���H��H����d��H�L$(dH3%(H���cH��0[]A\�f�H�l$�VI��H�|$H�D$�N��H�D$H��� ��H�PH�T$H�PH�|$H����p��H�T$H�S H��u�H���!1�H�81��<���E������I�<$H�D$H�|$��t0M�d$����H����H�|$��n��H�|$����DH���?���H�l$H���n��H�|$�-�����H�=X��m��H��H���!�����H�=3���l��H��H���!���H��H��H�D$������H�|$t
H�|$�)n�������X���cZ��H�$�!H�5X�H�81��;��ff.���USH��H�t$H�5Z�!��O��H��tBH�|$H���ct��1�H���YT��H��H��tXH��H���]��H�߅�t)��F��H�D$H��[]�H���!H�5��H�81��:���F��H���!H�5>�H�81��i:��H��!1�H�81��V:��fD��S1�H���!�;��H���k��H��t	H�C H��[�H���!1�H�81��:��@��UH��H�q�!1�SH��H�#�!H�8�;��H��H��t#H���[��H��tH�C H��H��[]���j����H�2�!1�H�81��9��fD��H��H�5�!�N��H��tH���H���!H�5��H�81��j9��f.���SH�|�!H�53�H�Ρ!H�H�;�;I��H���!H�;H�5�H�H���!H��I��H�A�!H�5����H��H��oF��H�;�����H�����H�5i���\��H�;�H�����H�5���\��H�;�H�����H�5r��\��H�;1�H����H�5L��v\��H�;�H�'���H�5D��[\��H�;1�H����H�5��C\��H�;1�[H���H�5N��*\��f.�����?�����AWAVAUI��ATUH���SH��1�L�eH���g���:H����H9�}TL�5
�!L��I�6H�<�L�<��`��H����H��H�E�� u�H;]}L�5ӝ!H�E I�6��f.�H�5i�!L���L��H��H��u��@H���xT��1�H���>_��H��u�E1�L�e�0H����I9�}<L��J�<��XK�������H��H���G����tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=�;k��H��H�5Q�H��H�G�!H�81���6��H�ƞ!1�H�81��6��H�m �H���!H�5T�H�81��6��ff.����UH�5T�!SH��dH�%(H�D$1��jK��H����1�H��H���DE��Hc�H����1���G��H��H�@H� uQH��H��H�$�E����~[H�H�4$�� tBH�CH�SH)�H9�jH���
I��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H���!1�H�81��5��H���!H�5P�H�81��5��H�
a���H�5L�H�=<��iF���T��@��ATUSH����upH�����tgH��ƒ���tZ��uUH��H9�tDH�5�!H���.J��I��H��t>H�5�!H���J��H��t*H���?��H��t5H�C L���<��H��[]A\ÐH����:��H��!H�5��H�81���4��H�ɜ!1�H�81��4��ff.�f���ATI��UH��S��H�� dH�%(H�D$1�H�B H�$�o6��H�D$����������tjI�$H�D$����H�|$��H�|$I���A��H�|$H�D$��l��1�1�L��H��H���fB��H�$H�U H����H���-6���H�D$H�|$u'H�L$dH3%(H����H�� []A\��H�|$�f����t��i���D�<�����5���H�|$t
H�|$�yf���1�����P��1�1ҾH���GJ����L��L��H���WY��H��I��H�$H�E �t5��M���T���H�4�!1�H�81��(3���cR��PX1�H��H��!H�81��3�����S1�H�!�4��H���S��H��t	H�C H��[����f�PXH�5u�H��H�ě!H�81��2��f���UH��H�5q�!SH���G��H��t[H��H�P�!H��H�0�][��H��uH��1�[]��H�51�!H���YG��H��t5H��H���9M���¸��u�H��[]�H�8�!H�5��H�81��2���J���f.���UH��H�5ю!SH���F��H��t)H��H���E�������H��H���GB����t"H��H��[]�H�ʚ!H�5i�H�81��1�����ff.����AUH�5c�!ATUSH���F��H��tpH��I����d���Ņ�xPHc��(<��I�Ņ�t-1����L�����C��H���k��L��H���Hb��9�u�H��L��[]A\A]�fDH��[]A\A]�!J���<���ff.����USH��H��H���Ka��H�5��!H��H����E��H��t5H��H���A�����tH��H��[]�fD�J��H��1�H��[]�����f.���UH��H�5Q�!SH���wE��H��t[H��H����R��H��H���U��H��H���!V����t��uH���[]�@�I��H��1�[]�H�#�!1�H�81��0���B���f���ATUH��SH��H���Z`��H��I���Oc��H�5��!H��H����D��H��tH��L��H���*0����t H��[]A\�H���!H�5^�H�81��/��������ATUH��H�5_�!S�D��H��t-H��H����Q��I��H���T��L��H���c\����t H��[]A\�H�X�!H�5��H�81��?/��H�8�!H�5�H�81��'/�����H��H�5�!�D��H��tH���>��H��t$H��H���8��H��!H�5��H�81���.��������ATUH��H�5��!S�C��H��t/H��1�H���Y��H��H��I���I��L��t�=4��H��[]A\�����+4��H�t�!H�5T�H�81��c.����H��H�5!�!�LC��H��tH���/:��H��t$H��H���~X��H�/�!H�5��H�81��.�������ATUH��H�5ϊ!S�B��H��t/H��1�H���7Y��H��H��I����b��L��t�}3��H��[]A\����k3��H���!H�5��H�81��-����H��H�5a�!�B��H��tH���f��H��t$H��H���W��H�o�!H�5�H�81��V-���1������UH��H�5�!SH���7B��H��t$H��H���7E��H��H���7����t"H��H��[]�H��!H�5��H�81��,���������H��H�5��!��A��H��tH���S��H��t$H��H���NO��H���!H�5^�H�81��,��������UH��H�5a�!SH���A��H��t$H��H���D��H��H���>����t"H��H��[]�H�_�!H�5��H�81��F,���!������H��H�5�!�,A��H��tH���P��H��t$H��H���N��H��!H�5��H�81��+���������UH��H�5��!SH����@��H��t+H��H���H��H��H���\D��H��H����F��H��H��[]�����f���H��H�5a�!�@��H��tH���oH��H��H���3c�����ff.���AWAVAUATUSH��H�����H��I�����H��I�����H��I���5���H��I������H��H���__��H��M��M��AWL��H��H��H�=K�1��H��H��[]A\A]A^A_�ff.�f���UH�5��!SH���?��H��t=H���md��H����/��H��H��tUH���M��H��H�0�
b��H�߅�t#H��[]�V��H�y�!H�5�H�81��`*���,��H�T�!1�H�81��H*���#�����ATI��USH���t=H��H�H��x\H�5�!L���?��H��t0H��H���J����tH��[]A\��H����:��H������H�ߒ!H�5~�H�81���)��H���!H�5ľH�81��)��ff.���H��H�5a�!�>��H��t3H���O]��H�@H�xH�DH���fDH��H���>������ff.�@��UH�5�!SH���*>��H��t5H����b��H���U.��H��H��tMH��H���N��H�߅�t#H��[]�pU��H��!H�5��H�81���(���+��H�̐!1�H�81��(�����ff.���UH�5t�!SH���=��H��t5H���Mb��H����-��H��H��tMH��H����`��H�߅�t#H��[]��T��H�a�!H�5�H�81��H(���s*��H�<�!1�H�81��0(������ff.���UH��H��!1�SH��H�ː!H�8�)��H��H��t#H���{2��H��tH�C H��H��[]���H����H�!1�H�81��'��fD��H��H�5q�!�<��H��tH���H���!H�52�H�81��z'��f.���SH�54�!�_<��H��tH��H����Y��H��[�H�K�!H�5�H�81��2'��f���SH�L�!H�5?�H���!H�H�;�7��H��!H�;H�5-�H�H�ȏ!H���6��H���!H�5��H��H��?4��H�;�����H��H�59s�J��H�;�H�5�H�5ty�yJ��H�;1�H���H�5�o�aJ��H�;1�H����H�5���IJ��H�;H���H�58z�9��H�;1�H����H�5k��J��H�;1�H�����H�53��J��H�;�H����H�5L���I��H�;1�H�,���H�5=���I��H�;1�H�D���H�5Ƈ�I��H�;�H����H�5��I��H�;1�H�q���H�5��I��H�;�H�����H�5���jI��H�;1�H�����H�5Y��RI��H�;�H����H�5Ѻ�7I��H�;1�H�����H�5���I��H�;�H� ���H�5���I��H�;1�H�����H�5����H��H�;�H�-���H�5����H��H�;1�H����H�5��H��H�;�H�*���H�5���H��H�;�H���H�5���H��H�;�H��H�5C��hH��H�;�H�y�H�5ʡ�MH��H�;1�H���H�5��5H��H�;�H��H�5��H��H�;�H��H�5ٹ�G��H�;1�H�����H�5	��G��H�;[�H�G�H�51w��G��f.�����G'�����AWAVAUI��ATUH���SH��1�L�eH���US���:H����H9�}TL�5��!L��I�6H�<�L�<��VL��H����H��H�E�� u�H;]}L�5s�!H�E I�6��f.�H�5i�!L���18��H��H��u��@H���@��1�H���^(��H��u�E1�L�e�0H����I9�}<L��J�<��6�������H��H����>����tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=��V��H��H�5�zH��H��!H�81��m"��H��!1�H�81��Z"��H�m �H�U�!H�5'�H�81��<"��ff.����AWAVAUI��ATUH���SH��1�L�eH���Q���:H����H9�}TL�5e�!L��I�6H�<�L�<��J��H����H��H�E�� u�H;]}L�5+�!H�E I�6��f.�H�5�~!L���6��H��H����H���H��I��H��u
�H���W��L���PX��H��u�E1�L�e�0f�H����I9�}<L��J�<��XZ��H��H��I����-����tqI��H�E�� u�L;m}H�E ��DH���!��H��H��[]A\A]A^A_�I�H�E tLH��J�|=�#U��H��H�59yH��H�/�!H�81�� ��L����V��H�V�!H�5��H�81�� ��H�m �H���!H�5b�H�81��w �����AUH�5�}!ATUSH���V5��H����H��I���bG��H���Z1���Ņ�xTHc���*��I�Ņ�t11�L���8G���ރ�H���+-��H�����L��H���Q��9�u�H��L��[]A\A]�fDH��!H�8tH��[]A\A]��8��@H���!��H�=8gH���X��H��
�H�=���X��H�;A�1�H�
��H�g��N���H�c�!H�55�H�81��J��f.���UH�5d|!SH��dH�%(H�D$1��4��H��toH����X��H���E$��H��H��tDH��1�H����!��H�$H��H�0�aV��H�߅�t�UK��H�L$dH3%(u7H��[]��� ��H�b�!1�H�81����H���!H�5y�H�81������=��f���ATUSH����uxH�����toH��ƒ���tb��u]H��H9�tGH�5v{!H���>3��I��H��tFH�5_{!H���'3��H��t2H���%��H��H��t:L���z!��H�k H��[]A\�fDH����#��H��!H�5óH�81�����H���!1�H�81�����D��ATI��UH��S��H�� dH�%(H�D$1�H�B H�$���H�D$����������tjI�$H�D$����H�|$��H�|$I���'*��H�|$H�D$��U��1�1�L��H��H���H��H�$H�U H����H���=���H�D$H�|$u'H�L$dH3%(H����H�� []A\��H�|$�O����t��i���D�%�����5���H�|$t
H�|$�O���1����9��1�1ҾH���W3����5��L��H���76��H��I��H�$H�E ���M���T���H��!1�H�81��8���s;��PX1�H��H�с!H�81�������S1�H�2y!���H���EQ��H��t	H�C H��[����f���UH��H�5y!SH����0��H��t)H��H����/�������H��H���7����t"H��H��[]�H���!H�5l�H�81�����L���ff.����AUH�5�x!ATUSH���V0��H����H��I���&���Ņ�xLHc���%��I�Ņ�t)1���L����kU��H���SU��L��H���L��9�u�H��L��[]A\A]�fDH�!�!H�8tH��[]A\A]��3��@H���!��H�=HbH���S��H���H�=Ű��S��H�;A��1�H�
��H�,b��I���H�s�!H�5E�H�81��Z��f.���UH�5tw!SH���:/��H��t5H����S��H���e��H��H��tMH��H���M��H�߅�t#H��[]�F��H��!H�5ӯH�81��������H��!1�H�81��������ff.���UH�5�v!SH���.��H��t5H���]S��H������H��H��tMH��H���&��H�߅�t#H��[]��E��H�q�!H�5C�H�81��X�����H��~!1�H�81��@������ff.���UH�5Tv!SH���.��H��t5H����R��H���E��H��H��tMH��H���bK��H�߅�t#H��[]�`E��H��!H�5��H�81���������H�l~!1�H�81�����{���ff.�PXH�5x�H��H���!H�81����f���UH��H�5�u!SH���g-��H��t[H��H����:��H��H���|=��H��H����6����t��uH���[]�@�1��H��1�[]�H��}!1�H�81�����b���f���AUI��H�5 u!ATI��USH��H����,��H��t6L��H���-H��L��I���"K��L��H��H���T!����t&H��H��[]A\A]�H���!H�5u�H�81�����U���D��ATUH��H�5�t!S�i,��H��t-H��H���yP��H��H��I���$����tH������H��[]A\����L���JM��H��|!H�5�H�81����f���ATUH��H�5/t!S�+��H��t/H��1�H���7B��H��H��I����F��L��t�}��H��[]A\�� ����k��H�d|!H�5�H�81������H��H�5�s!�+��H��t)H���_L��H��tH��H���@��fD�H������f���ATUH��H�5os!S�9+��H��t/H��1�H���wA��H��H��I���	2��L��t���H��[]A\��`������H��{!H�5;�H�81�������H��H�5s!��*��H��t)H����2��H��tH��H���?��fD�H������f���UH��H�5�r!SH���w*��H��t$H��H���w-��H��H���D����t"H��H��[]�H�O~!H�5!�H�81��6���������H��H�5Qr!�*��H��tH���"��H��H���7���^���ff.���ATI��USH���t=H��H�H��x\H�5�q!L����)��H��t0H��H��� ����tH��[]A\��H���x%��H����^���H��}!H�5a�H�81��v��H�z!H�5t�H�81��^��ff.���H��H�5qq!�<)��H��t3H���,��H�@H�xH�DH���fDH��H���d)���_���ff.�@��H��H�5q!��(��H��tH���H��|!H�5��H�81����f.���UH��H��p!1�SH��H�y!H�8�K��H��H��t#H���[��H��tH�C H��H��[]���H����H�y!1�H�81��F��fD��SH�\z!H�5��H��{!H�H�;�#��H��x!H�;H�5��H�H��{!H��"��H�qx!H�5���H��H��O ��H�;�����H����H�5I_�6��H�;�H�5�H�5�e�6��H�;1�H�M���H�5���q6��H�;�H�����H�5���V6��H�;1�H�*�H�5���>6��H�;1�H�"���H�5-t�&6��H�;�H�����H�5���6��H�;1�H�?���H�5����5��H�;�H�����H�5x���5��H�;1�H�L���H�5|s�5��H�;�H�����H�5R��5��H�;1�H�I�H�5tr�5��H�;�H�n�H�5,��r5��H�;�H����H�5��W5��H�;�H�h���H�5o��<5��H�;�H����H�5�w�!5��H�;1�H����H�5-Z�	5��H�;1�H�]���H�5:p��4��H�;H�+pH�5�d�;$��H�;1�H�����H�5p��4��H�;1�H�g���H�5�r�4��H�;�H���H�5^��4��H�;[�H���H�5N��t4��@���-�����UH�5dn!SH��dH�%(H�D$1��Z%��H����1�H��H���:��Hc�H����1���!��H��H�@H� uQH��H��H�$�R:����x[H�H�4$�� tBH�CH�SH)�H9�jH���"��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�lx!1�H�81����H��x!H�5M�H�81����H�
���H�5H�H�=,n�Y ���.��@��UH�5Dm!SH���J$��H��tZH���-$��H��H���'����u.��H��H���a��H��H��tFH��H���F��H��H��[]�;�������H��[H��]�%��H��w!H�5��H�81�����H��w!1�H�81������SH��H�t$H�5�l!�#��H����H�|$H���p��H�|$H�D$� ��H����6��H�t$H��� t,H�~Hcω�H9�u+H�vH���E����t H�D$H��[�H��H�������>��H��v!H�5�H�81����H�w!H�5äH�81��
��ff.���ATUSH����upH�����tgH��ƒ���tZ��uUI��H��H�5�k!�"��H��H��tCH�5�k!L���"��H��t/H���C��H��t:H�C H���~*��H��[]A\�fDH���h��H�iv!H�5�H�81��P
��H�	v!H�5:�H�81��8
�����AUATI��H�5k!UH��S��H��H��XdH�%(H�D$H1��!��H�D$H����H�D$I��H�D$8H�D$L�l$0H�D$@���H�D$ �������-1�I�<$H�<$����H�D$H�D$H���EH�<$�����S��L��H�$���H�$H��� ��H�PH�T$ H�PH�t$ H�|$���H�T$H�U H����H�L$HdH3%(H����H��X[]A\A]��I�T$H�T$���V���I�T$H�T$���BH����H�5b�!H�|$(H����L�d$(�H��L����3��H�D$H�5+�!H�D$(H����L��H���3�����K���H�D$H�5�!H�D$(H����L��H���z3������DH�|$ �&>�������������H�D$ �h���f��H�=�<��H��H���!�4����H�=���_<��H��H�e�!�C���H��H��H�D$ ���q����	H�=���'<��H��H�%�!�>���H�|$ t
H�|$ �v=��������'���)��H�)s!1�H�81��]
��H�^s!H�5
�H�81��E
��D��AUATI��UH��S��H��(dH�%(H�D$1����H�D$�������SI�$H�$I�D$H�D$���`H��E1��eC��H�|$����H�<$H� �rH���9��A�ą�u%H�<$H� ��H����2��A�ą��'I�����H�.QH�=��HD��7 ��H�t$H��H�D$���H�|$��B��H�5�f!H���<��H��H����H�Io!H�g!1�H�8��
��H��H�5@�1�I�����H��tH���@��H��H��H����B��H�L$H� ��H��D��H��H���$��H�C0H��I���a1��M���)M�e L��H�T$dH3%(�KH��([]A\A]�f�M�l$����H���A��H�|$���I�������E1����fDH�����H�I�]���������~dI�$H�D$H�$I�T$H�T$��t*M�l$��>H��u*�|���fDH��J����A�H�����H�|$�:���H���H�|$t
H�|$�:�������%��H��p!H�57�H�81����H�L$H�3p!H�5��H�$H�81��^��H�p!H�$H�5k�H�81��B���}&��ff.�f����gH�5��[<��ff.���UH�5�d!SH�����H��tqH���@��H���%��H��H��tF1�1�H��H���=����tH��H��[]�<3��@H���/��H��H������H��H��[]�3��H�Po!1�H�81����H��o!H�51�H�81��l��ff.����H��H�5Ad!�L��H��tH��������H�H��H�Ѓ��H�/o!H�5ۜH�81����fD��USH��H�t$H�5�c!���H��tBH�|$H���s?��1�H���i��H��H��tXH��H�����H�߅�t)����H�D$H��[]�H��n!H�5[�H�81�������H�Jn!H�5՜H�81��y��H�2n!H�5��H�81��a���PXH�5�H��H�Tn!H�81��B��f���ATI��USH��H�5�b!�&��H��t)H��L��H�5��H����"��H���?��H�E H��[]A\������ATI��USH��H�5kb!����H��t)H��L��H�55�H���"��H������H�EH��[]A\��C�����ATI��USH��H�5b!���H��t)H��L��H�5��H���<"��H���4��H�EH��[]A\�����ATI��USH��H�5�a!�6��H��t)H��L��H�5��H����!��H���D4��H�EH��[]A\������AUI��ATI��U��SH��hdH�%(H�D$X1�H�D$H�\$H�D$8H�D$H�D$@H�D$ H�\$0H�D$H���H�D$(��������1�H�D$0H��1�H�x �!f�H��tLc�O�D�L���H��H9�tH�9��H��t�H��H�H9�u�9���H��ukH�t$H��tL������H�t$H��tL���u���H�t$H��tL������H�t$ H��tL�����H�\$XdH3%(L��uOH��h[]A\A]ÐH�|$(�5���@�����x
H�t$(����H�|$(t
H�|$(�5���1��������!�����U1�H�`!SH���(���x�8H�5*�H���'��H��t9H��H��E1�E1�1�1�1���6��H�] H��H�5R�����H��H��[]�H�k!H�5��H�81����f���S1�H��_!���H���5��H��t	H�C H��[�H��j!1�H�81����@��SH��H�5�_!���H��t1�H�����H��@������H��[�H�~j!H�5*�H�81��e��D��UH��H�A_!1�SH��H�cg!H�8���H��H��t#H���+7��H��tH�C H��H��[]���k����H��i!1�H�81����fD��H��H�5�^!����H��tH���H��i!H�5�H�81����f.���ATH��g!H�5]�UH�-i!SH�H�}���L�%Xi!H�}H�5E�H�.i!H�I�$�b��H�Ci!H�5���H��H��
��H�;�����H�:���H�5�L�$��H�=������H�;E1�1ɺH���.��H�=�����H�;E1�1ɺH���.��H�=W����H�;E1�1ɺH���{.��H�=1��o��H�;E1�1ɺH���Z.��H�=֖�N��H�;E1��H�ƺ�6.��H�;�H�'���H�5Q��K#��H�;�H�����H�5J��0#��H�;�H�Q���H�5D��#��H�;�H���H�5:��"��H�;�����H���H�5$���"��I�$H�}H�5�����H�e!H�5��H��H��B��H�;�����H���H�5<K�"��H�;�H���H�5wQ�|"��H�;�H�}���H�5E��a"��H�;�H���H�5/��F"��H�;�H�����H�5[��+"��H�;1�H���H�5�K�"��H�;1�H����H�5�H�!��H�;1�H�����H�5=���!��H�;1�[H�v�]H�5�FA\��!������*�����UH�5\!SH��dH�%(H�D$1����H����1�H��H����5��Hc�H����1��1��H��H�@H� uQH��H��H�$�5����~[H�H�4$�� tBH�CH�SH)�H9�jH���J��H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H��a!1�H�81���H��e!H�5y�H�81�����H�
����H�5u�H�=|[�
������@��AWH�5�Z!AVAUATUSH��(dH�%(H��$1��|��H����H��I���/��A�Ņ���Hc����H�D$E����1�L�d$�TfDL�����I��H������HchH���f��L���H�l-H��1�H�����H�|$H���,��A9�ty��L������H��H����H���#���L��H���������L���+�����l��������H���e��I���`���DH��a!H�8t8���H�D$H��$dH3%(H�D$��H��([]A\A]A^A_�H�c!��H�=�BH��S4��H���H�=ϓ�:4��H�;A�_1�H�
��H��B��'*���g���H��_!1�H�81�����H��c!H�5X�H�81��������f�ATI��H�5�X!US���H��ttH���P4��H������H��H��tI1�L��H��H��������xM��u��tH��[]A\��&��H������H�@_!H�5�H�81��7���H�(_!1�H�81��$���H�%c!H�5��H�81�����ff.����S��A���H���	��H�߉��_���H��[�f.���USH��H�����H��H���.��H���*��H��H��H��H��[H�5{�1�]�>,��ff.���ATUSH����upH�����tgH��ƒ���tZ��uUI��H��H�5�W!�C��H��H��tCH�5�W!L���,��H��t/H���o��H��t:H�C H���N%��H��[]A\�fDH�����H��a!H�5��H�81����H��]!H�5đH�81��������AUATI��H�5�V!UH��S��H��H��8dH�%(H�D$(1��
��H�D$H���r�h���H�D$ �������F1���u1H���`H�L$(dH3%(H���FH��8[]A\A]�fDM�,$��uoA�H����L���(���H��H���3I����H��L��1��o��H�5��!I��H����L�u
1�1�H���0���d���@M�d$���wH��t�H�|$ �*�����;����v���fD�k�����HH�D$ ����f�A���H�5��!H����H��]!H�8����I���8���f��H�=�CH�D$�(��L�L$H��H���!�*���fDH�|$ A�A���)������������DL�����H�|$ H�D$ ����H�T$ H��� tDH�BH�RH�D$H�t$H�|$���H�T$H�U H���&���H�g[!1�H�81��c���H��H����H�T$H��봾H�=?��'��H��H��!���H�|$ t
H�|$ �	)���1����{��H�_!H�5��H�81����.��ff.���S1�H�"T!���H���u��H��t	H�C H��[�H��Z!1�H�81����@PXH�5.�H��H��^!H�81����f�UH��H�5�S!SH���k
��H��t(H�5�S!H��H���T
��H��t)H��H��H��[]�N���H�?^!H�5ǍH�81��&���������H�����H�������x��H�H��H��H��H���f���UH��SH��H��H��H�~[!H�0���H��u	H��1�[]�H��H���5����¸��u�H��[]���SH��������t"H�6H��t@��t[H��H�H��[���H�5�R!H���Y	��H��tb1�1�H������H��H��tfH�����Hc�H9�unH��H�߉�[�*���H��H�T$�*��H�T$H��H��[H���N����1��b��H��\!H�5{�H�81����H��X!H�5�H�81����H�����f.���H��H�5�Q!���H��t3H���"��H��������?H9�wH�DH���fDH��H���T�����ff.�@��H��H�5�Q!�<��H��t3H���?���H��������?H9�wH�DH���fDH��H�������_���ff.�@��AWAVI��AUATI��US��H��hdH�%(H�D$X1�H�=~!��H�D$(��H�D$0A�Dž�t*��~���5�	��u0����������[����������i���L�l$(I�$H�D$I�D$H�D$ ���AH�|$0��L�D$@�1�L��H�5�~!�J(��H�|$�+��H�|$ H�$���H�D$H�5�~!H��~!H�D$8H���YH�rX!H�8��H�L$8�H��H������H��H�|$@A�����H��4t@���o�z���A��H�|$HE1�H��4t@���?�Z���A��H�5�O!L���X��I��H����H�L$ H��� ��H��H��H�����H�L$���
���H�L$��H��E��A��L��AUH�t$���ZY����H�T$XdH3%(L���kH��h[]A\A]A^A_�f.��H�=ۉ�/"���H�=qEH�\}!�"��H�X}!����H�D$0H�������H�|$0�`#�����H�yHclj�H9���H�IH���H�L$�"�������H�L$���������A��������A�����I�$A�H�D$I�D$H�D$ f.�I�l$H�D$0���Z���H��uM1�L�D$@�L��H�5�|!�%��H�|$�C)��H�|$ H�$����H�������fD�H�|$0�q"�����H�=l��� ��H��H�|!���Hc�M�l�A���2/��I������%/��A�E�����/��L�l$(I������H�|$(��	��H�l$(I��H����.��E����.����M��uNH�D$(�����I�$L��H�D$@I�D$L�l$(H�D$ ����������������f.�1����I�$L�l$(H�D$��u�H�l$ ���G�������~��
��H�ZS!H�5��H�81��Q�H�RW!H�5چH�81��9�H�|$0������H��I�$I��H��s��H�=\LH�C1����L�l$(���Hc�I�|���H�D$0���T������f�H��u:���T-��H�|$(�����H�|$(�k��H�l$(I��H���H-���V-��D�[�I��H�D$(�Z���1�H�=�K��I�$L�l$(H�D$I�D$H�D$ �"�����ATUH��1�SH��H��H��0dH�%(H�D$(1��"��H��I����!���H��H�����1�H����!���H��H�D$��!���H��H�D$�!��H�D$ H��t;H�t$L�������H�L$(dH3%(��H��0[]A\��H�D$H�5Ty!H�L$H��H�D$���H�D$ H��u�H�5�x!H��tH��R!H�8�'�H�D$ �r���D�H�=r����H��H��x!���V��fD��UH��H�QJ!1�SH��H��R!H�8��H��H��t#H���+��H��tH�C H��H��[]���k����H��P!1�H�81���fD��H��H�5�I!���H��tH���H��T!H�5�H�81��j�f.���UH�=��SH�����H��S!H�5��H�x!H�VR!H�;H��#���H�P!H�;H�5��H�H��S!H�����H��Q!H��Q!H��H�2H���H�;H�5���E���H�;�����H��H�5?7���H�;�H�+�H�5z=���H�;�����H�����H�5��d��H�;�����H����H�5N>�I��H�;1�H�]�H�5ǃ�1��H�;1�H�u�H�5;E���H�;1�H�}�H�5�4���H�;�H���H�5B=��
��H�;H�3=H�5'=�0���H�;�H���H�5=�
��H�;1�H�y���H�5�^�
��H�;1�H����H�5#��
��H�;1�H���H�5�2�m
��H�;�H�5��������H��H���4����H�=kE�c��'H��H���s��H�=���B��'H��H���R��H�=(��!��'H��H���1��H�=�����'H��H�����H�=n�����-H��H������H�=P����-H��H������H�=?���H��-H����H�;H��H�5p����H�;�H�5Sv�w��H�;�/"H�5��c��H�;�?H�5���O��H�;H���
H[H�5�]�5��D���G�����AWAVAUI��ATUH���SH��1�L�eH������:H����H9�}TL�5�P!L��I�6H�<�L�<����H����H��H�E�� u�H;]}L�5�P!H�E I�6��f.�H�5F!L���a���H��H��u��@H���(��1�H���>��H��u�E1�L�e�+H����I9�}4L��J�<����H��H���
����tdI��H�E�� u�L;m}H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=���H��H�5)?H��H�O!H�81���H�>M!1�H�81���H�m �H��O!H�5��H�81��t�@��UH�5E!SH��dH�%(H�D$1��J���H��toH�����H���u�H��H��tDH��1�H����H�$H��H�0���H�߅�t���H�L$dH3%(u7H��[]���H��L!1�H�81����H��N!H�5�H�81������f���UH�5TD!SH��dH�%(H�D$1����H����1�H��H������Hc�H����1�����H��H�@H� uQH��H��H�$������~[H�H�4$�� tBH�CH�SH)�H9�jH���*���H��H�L$dH3%(unH��[]�H�C�f.�H��H�S���H�|K!1�H�81����H��M!H�5�~H�81���H�
Q��H�5�~H�=\C�������@��ATUSH����uxH�����toH��ƒ���tb��u]H��H9�tGH�5C!H���N���I��H��tFH�5�B!H���7���H��t2H���J�H��H��t:L���Z���H�k H��[]A\�fDH����H�M!H�5�}H�81����H��J!1�H�81����D��ATI��UH��S��H�� dH�%(H�D$1�H�B H�$��H�D$����������tjI�$H�D$����H�|$��H�|$I���7�H�|$H�D$���1�1�L��H��H���	��H�$H�U H����H���M��H�D$H�|$u'H�L$dH3%(H����H�� []A\��H�|$������t��i���D�����5���H�|$t
H�|$����1������1�1ҾH���g������L��H�����H��I��H�$H�E ��M���T���H��H!1�H�81��H����PX1�H��H��H!H�81��'����UH��H�5�@!SH������H��t$H��H���w���H��H��������t"H��H��[]�H��J!H�5�{H�81����������AUH�5c@!ATUSH�����H����H��I�����Ņ�xLHc��D�I�Ņ�t)1���L����+�H�����L��H���h��9�u�H��L��[]A\A]�fDH�qG!H�8tH��[]A\A]�4���@H��H!��H�=�(H��0��H���H�=w���H�;A�c1�H�
�zH�|(�����H��I!H�5�zH�81���f.���UH��H�5A?!SH�����H��t[H��H������H��H�����H��H�������t��uH���[]�@���H��1�[]�H��F!1�H�81��'�H�(I!H�5zH�81���ff.�@��AUI��H�5�>!ATI��USH��H�����H��t6L��H���-��L��I���"��L��H��H���d���t&H��H��[]A\A]�H��H!H�5�yH�81�����E���D��ATUH��H�5>!S�i�H��t-H��H������I��H���~��L��H������t H��[]A\�H�8H!H�5.yH�81����H��E!H�5=yH�81�������H��H�5�=!���H��tH�����H��t$H��H����H��G!H�5�xH�81�����q������UH��H�5Q=!SH����H��t$H��H�����H��H�������t"H��H��[]�H�oG!H�5exH�81��V���������H��H�5�<!�<�H��tH�����H��t$H��H�����H�G!H�5xH�81����������ATI��USH���t=H��H�H��xoH�5�<!L�����H��tCH��H�����tH��[]A\��H����H���H�<D!H�5�wH�81����H��F!H�5�wH�81��s��H�D!H�5qrH�81��[��ff.���UH�5�;!SH���:�H��t5H������H���e�H��H��tMH��H����H�߅�t#H��[]�	��H�F!H�5�vH�81��������H�|C!1�H�81��������ff.���UH�5d;!SH����H��t5H���]��H�����H��H��tMH��H����H�߅�t#H��[]����H�qE!H�5gvH�81��X�����H��B!1�H�81��@�����ff.���S1�H��:!����H���e
��H��t	H�C H��[�����f���H��H�5�:!���H��t3H���/�H�@H�xH�DH���fDH��H����H��D!H�5�uH�81����ff.����H��H�51:!�|�H��tH���H�sD!H�5iuH�81��Z��f.���SH�lB!H�5�uH��C!H�H�;�+�H��A!H�;H�5�;H�H��C!H���H�Q@!H�5���H��H��_�H�;�����H����H�5Y'���H�;�H�5���H�5�-���H�;1�H���H�5�9���H�;1�H���H�5�#�i���H�;H��9H�5X.��H�;1�H����H�5�9�;���H�;1�H�O���H�5S[�#���H�;�H�4���H�5lo����H�;1�H����H�5yo��H�;�H�Q���H�5fo����H�;1�H�y�H�5*o���H�;1�H����H�5�4���H�;�H�6���H�5�8���H�;�H�����H�5�H�o���H�;�H���H�5/@�T���H�;1�H�����H�5�s�<���H�;�H�M�H�5�s�!���H�;[�H����H�5�s����D��H�������'�����UH�58!SH��dH�%(H�D$1����H����1�H��H����������Hc�1��b�H��H�@H� uRH��H��H�$�����~\H�H�4$�� tCH�CH�SH)�H9�pH���{�H��H�L$dH3%(utH��[]ÐH�C�f.�H��H�S���H��@!H�5�rH�81����H�A!H�5�rH�81����H�
ls�H�5�rH�=�6�������ff.�@��AWAVAUI��ATUH���SH��1�L�eH���U���:H����H9�}TL�5�=!L��I�6H�<�L�<��V��H����H��H�E�� u�H;]}L�5s=!H�E I�6��f.�H�5I6!L���1�H��H��u��@H����1�H������H��u�E1�L�e�0H����I9�}<L��J�<��������H��H���X���tgI��H�E�� u�L;m}	H�E ��H��H��[]A\A]A^A_�I�H�E t?H��J�|=��
��H��H�5�.H��H��>!H�81��m��H��>!1�H�81��Z��H�m �H�U?!H�5�pH�81��<��ff.����ATUSH����upH�����tgH��ƒ���tZ��uUI��H��H�55!���H��H��tCH�5�4!L�����H��t/H���o�H��t:H�C H������H��[]A\�fDH�����H��>!H�5NpH�81����H�!>!H�5rpH�81��x�����UH��H�5q4!SH���W�H��t)H��H���W������H��H������t"H��H��[]�H�*>!H�5�oH�81����H��=!1�H�81����ff.���AUH�5�3!ATUSH�����H����H��I����Ņ�xLHc��t��I�Ņ�t)1���L������H������L��H�����9�u�H��L��[]A\A]�fDH��:!H�8tH��[]A\A]�d�@H�<!��H�=�H��`
��H���H�=Ej�G
��H�;A��1�H�
�nH����4���H��<!H�5�nH�81�����f.�PXH�5{nH��H��<!H�81����f���ATUH��H�5�2!S��H��t/H��1�H������H��H��I�����L��t���H��[]A\�������H��;!H�5�nH�81��C����H��H�5A2!�,�H��t)H�����H��tH��H���^���fD�H����)���f���ATUH��H�5�1!S���H��t/1�H��H���g�H��H��I���)	��L��t�M��H��[]A\������;��H�,;!H�5�mH�81������H��H�5�1!�l�H��tH������H��H���
���~���ff.���S1�H�B1!����H�����H��t	H�C H��[�H��:!1�H�81����@��UH��H�1!1�SH��H�[:!H�8���H��H��t#H���k�H��tH�C H��H��[]���{����H�::!1�H�81����fD��H��H�5�0!�|�H��tH����H��tH���H�f:!H�5lH�81��M��H��9!1�H�81��:��f.���SH�L8!H�5<lH��9!H�H�;��H��9!H�;H�5&lH�H��9!H����H�Y9!H�5����H��H��?��H�;�����H�����H�59��H�;�H�u���H�5t#�y�H�;1�H�
���H�5o2�a�H�;�H�����H�5�e�F�H�;1�H����H�5�k�.�H�;�H�����H�5:W��H�;1�H�7���H�5�1��H�;�H�<���H�5�e���H�;�H�����H�5�e���H�;1�[H����H�5���f.�f���SH��H�� H�5�\!dH�%(H�D$1�H�GH�$H�GH�D$H��t'H�;�H�����H�T$dH3%(u$H�� [�H�=]M����H��H�-\!��~�ff.���SH����H��tH����H�5�3!H������H������H��tH������H�����H��[�����H���5�[!��H��H���!������������H���5�[!���H��H�������SH��H��H�5j�I�H��[�@��ATE1�UH��SH��H�t$H��t
H�|$����I��H�5.!H���7�H��H��tQ��H��H����H��t)E1��L��H�������uH��H��[]A\�H��5!1�H�81�����H��6!H�5^iH�81�����fD��ATE1�UH��SH��H�t$H��t
H�|$�)��I��H�5_-!H����H��H��tQ����H��H�����H��t)E1��L��H���b����uH��H��[]A\�H�25!1�H�81��.��H�/6!H�5�hH�81����fD��H�m1!S1�H��H�h,!H�8���H��tH�X [�H��5!H�5hH�81�����ff.�f�PXH�5}hH��H��5!H�81����f���H��H�5,!��H��tH�����H��H�H�D����ff.���ATI��H��UH��S�j����t6H�H��H�5�+!L���1�H��t)H��H��1���H��[]A\��H������H�����>���ff.���AWAVAUI��ATA��USH��H��XdH�%(H�D$H1�H�D$H�D$0H�D$H�D$8H�D$ H�D$@���H�D$(����E����1�I�mH�l$A��'H�D$H�D$ H��t7H�|$(�F����+@I�UH�T$A��t�I�UH�T$ A���BH��u�H�5�*!H����I��H���oH�5�*!H�����I��H���<L�d$E1�I��tL����I��H�|$ H����H�t$(���H�D$�D$(����H�L$L��L��L�������
H�5fH����H��tH��H������H�5WOH������H�5HOH��H���#�L��H�5aOH����H��H�L$HdH3%(��H��X[]A\A]A^A_�H�D$�Z���f.�����E��~
H�D$(�f���H�|$(t
H�|$(������D���8�L���p���|$(���H��2!H�57eH�81����H��2!H�5WeH�81����L���/��H�5h.!H�|$�.�H�_1!H�5AeH�81��V�������USH��H�5�(!H���7��H��t3H��H���u����H�����H��H��[]�fD���������:���f.���ATUH��SH���t-I��I�H�5@(!H������H��t L��H�����H��[]A\�H�����I��������ff.���H��H�5�'!�|��H��t)H����H��tH��H���N�fD�H������f���H��H�5�'!�,��H��tH����H��H�����N���ff.���H��H�5a'!����H��tH���o�H��H�H�D�����ff.���H��H�5!'!���H��tH�����Hc�����H��H���[������fD��AUH�5�&!ATUSH���f��H���H����H��H��t}H���e��A�ą�xNHc����I��E��t+1�@��H����;��H����L��H������D9�u�H��L��[]A\A]�DH�!-!H�8t+H��[]A\A]����@H��A�[L��]A\A]�@H�y.!��H�=0H�����H���H�=yb���H�;A�a1�H�
xbH������t���H�X/!H�5bH�81��?��ff.�@��AVAUATI��UH��S��H��0dH�%(H�D$(1�����H�D$�������*M�4$����A�H�5�R!H�l$L�t$L�l$ H���HH�*!H�L$�H�8���H���������
���H�5mJH��H���H�H�5IR!H����1�1�H����H��I�����H�5faH��H����H���w���H�5�+H��H����H�����H�59aH��H�����L��H�L$(dH3%(��H��0[]A\A]A^��M�l$�������H�|$t
H�|$����������H�5�IH������
���@�H�=:+���H��H�MQ!�����H�=$����H��H�5Q!����;�����q���H�D$M�4$A���uH���O���H�|$�����@����M�l$��~��/����<�ff.����UH�5T#!H��SH������H��tcH�5�HH��H���@���5�P!H��H�����H�������t��uH���[]�f�����H��1�[]�H�{+!1�H�81��o�����f.�PX1�H��H�I+!H�81��G�����S1�H��"!����H�����H��t	H�C H��[����f���USH��H��H�����H�5�"!H��H������H��tH��H���y����u"H��H��[]�H��+!H�5J^H�81�����M���ff.�f���USH��H��H����H�5T"!H��H���y��H��tH��H���9�����u"H��H��[]�H�[+!H�5�]H�81��B������ff.�f���H��H�5�!!���H��tH�������u"�H���H�+!H�5�]H�81�������PXH�5e]H��H��*!H�81�����f���ATUH��SH���t-I��I�H�5p!!H�����H��t L��H�����H��[]A\�H���X��I�������ff.���UH��SH��H�5!!H���D��H��t-�5)N!H��H�����H��H��H�5F����H��H��[]��-���ff.�f���SH�5� !H��H������H��tqH��H�5j�e���H�߾�h���H�ߺH�5�\���H�ߺH�5b'�p��H�ߺH�5�\�\��H�ߺH�5\�H��H��[����ff.���S1�H�" !�
��H������H��t	H�C H��[�����f���ATI��H��USH���t2�����H�5�!L�����H��t ��H�����H��[]A\�D�s���������f.���ATI��H��USH���t2�����H�5|!L�����H��t ��H�����H��[]A\�D����������f.���ATI��H��USH���t2�E����H�5�!L���D��H��t ��H�����H��[]A\�D��������Z�f.���ATI��H��USH���t2������H�5\!L������H��t ��H���e�H��[]A\�D�S��������f.���AVAUATUSH��@dH�%(H�D$81���H����I��L�t$H����L��L��H�=Z��E��T$I�Ņ�����H�t$ L��H�l$ H�H�=|�L�l$0H�Ѓ�H�D$(��H�ËD$��urI�E H��tNL������t"1�H�L$8dH3%(uAH��@[]A\A]A^��L��D$�_���D$��f�1�L���F���������� ��H�=[1��"���q�������H�=�Z1�����b�����ATU��SH��5QJ!H�����H��tH�ډ�[H��]A\���D�%!J!H���i��H��D���~�H��uɉ�[]A\�f���H��H�5�!���H��tH���H��%!H�5rXH�81��ڼ��f.���ATE1�E1�1�UH��X1��S�
����I!����E1�E1�1�1�H��X������nI!����H�-�$!H��#!H�5�XH�}H��U��L�%&%!H�}H�5�XH�4$!H�I�$�0��H��#!H�=
AH�����H�;E1�1ɺH����H�=X���H�;E1�1ɺH����H�=�"���H�;E1�1ɺH���s�H�=�W�g��H�;E1�1�H�ƺ�R�H�;H�58������H�;�����H�����H�5��X��H�;H�5D���H�;�H�����H�5�W�.��H�;�H����H�5�W���H�;�H�T���H�5�W���H�;�H����H�5�W����H�;�H�^�H�5�A����H�;�H��H�5yW���H�;�H�H�H�5gW���H�;1�H�p���H�5XW�t��H�;�H���H�5OW�Y��H�;�H�Z���H�5�"�>��H�;�����H��H�5� �#��I�$H�}H�5W�/��H��!H�5��H��H����H�;�����H��H�5�����H�;H�5��,��H�;1�H��H�5� ���H�;1�H�H�H�5�U���H�;1�H��H�5�U���H�;�H�E�H�5uV�i��H�;1�H���H�54 �Q��H�;1�H�e�H�5LV�9��H�;1�H�
�H�5@V�!��H�;1�H���H�55V�	��H�;�H�*�H�5�U����H�;�H�����H�5�U����H�;�H����H�5�U���H�;[�]H�g�H�5�?A\���H��!H�5;VH�81�衸��H��!H�5�TH�81�艸����H��H���OSSL_DEBUG: empty sk!ossl.c [%s:%d]
items in sk < -1???inlen <= LONG_MAX / 20123456789abcdef(null)error on stack: %s (%s)error on stack: %sTurning on FIPS mode failedTurning off FIPS mode failedOPENSSL_init_sslOpenSSL2.1.4OPENSSL_VERSIONOPENSSL_LIBRARY_VERSIONOPENSSL_VERSION_NUMBEROPENSSL_FIPSfips_modefips_mode=OpenSSLErrordebugdebug=errorsto_derpassed data is not valid String???password must not be longer than %d bytesobject in array not of class ##type##OpenSSL 1.1.1k  FIPS 25 Mar 2021ossl_bin2hexinvalid OBJECT ID %liOBJ_obj2txt%2d%2d%2d%2d%2d%2dZbad UTCTIME format: "%s"%4d%2d%2d%2d%2d%2dZunknown time formatutcASN1_INTEGER is NULL!invalid tag classtag number not specifiedossl_asn1.cto_aArrayillegal EOC octets in valuemust specify tag numberinvalid tagging methodvalue is too shortinvalid length for BOOLEANinvalid BOOLEAN/%nil expectedunsupported ASN.1 typeASN1_TYPE alloc failurei2d_ASN1_TYPEp0 - p1 == alllenASN1_get_objectEOCUNIVERSALCONTEXT_SPECIFICAPPLICATIONPRIVATEIMPLICIT@value@tag@tagging@tag_class@indefinite_length@unused_bitsASN1ASN1Errortraversedecodedecode_allUNIVERSAL_TAG_NAMEASN1Datainfinite_lengthindefinite_length=infinite_length=initializePrimitiveConstructiveeachBooleanIntegerEnumeratedBitStringOctetStringUTF8StringNumericStringPrintableStringT61StringVideotexStringIA5StringGraphicStringISO64StringGeneralStringUniversalStringBMPStringNullObjectIdUTCTimeGeneralizedTimeSequenceEndOfContentregistersnlnoidshort_namelong_nameINTEGERBIT_STRINGOCTET_STRINGNULLOBJECT_DESCRIPTOREXTERNALREALENUMERATEDEMBEDDED_PDVUTF8STRINGRELATIVE_OID[UNIVERSAL 14][UNIVERSAL 15]SEQUENCESETNUMERICSTRINGPRINTABLESTRINGT61STRINGVIDEOTEXSTRINGIA5STRINGUTCTIMEGENERALIZEDTIMEGRAPHICSTRINGISO64STRINGGENERALSTRINGUNIVERSALSTRINGCHARACTER_STRINGBMPSTRING�#��D#���"��d$���$���#��$���$���$���$���"���$���$���$���$���$���$���$���$���$���$���$���$��"��"��/.���+��,�� ,���,��-���-��/.��/.��/.��,��/.���,��/.��/.��/.��0-��0-���,���,���,���,���,��h-��+���,���,���,���,��/.���,��ossl_asn1prim_to_derto_der_internalbad GENERALIZEDTIME format: "%s"explicit tagging of unknown tagp - (unsigned char *)RSTRING_PTR(str) == total_lengthindefinite length for primitive valueType mismatch. Bytes read: %ld Bytes available: %ldType mismatch. Total bytes read: %ld Bytes available: %ld Offset: %ldCan't convert nil into IntegerCan't convert nil into Booleanunused_bits for a bitstring value must be in the range 0 to 7indefinite length form cannot be used with primitive encodingBIO_new_mem_bufBN wasn't initialized!BN_bn2binossl_bn.cBN_dupBN_bin2bnbignum too longinvalid radix %dDon't know how to coerceBN_mod_inverseCannot init BN_CTXBNErrorinitialize_copynum_bytesnum_bits+@-@+-mod_addmod_submod_mulmod_sqr**mod_expgcd<=>ucmpeql?===zero?one?odd?negative?pseudo_randpseudo_rand_rangegenerate_primeprime?prime_fasttest?set_bit!clear_bit!bit_set?mask_bits!<<>>lshift!rshift!to_sto_ito_intto_bnOpenSSL/BNCannot convert into OpenSSL::BNCipher already initialized!Cipher not initialized!iv must be %d byteskey must be %d bytesunable to set AEAD tagossl_cipher.cout_len <= RSTRING_LEN(str)key not setdata must not be emptyout_len < RSTRING_LEN(str)cipher does not support AEADunable to set IV lengthCipherErrorciphersresetpkcs5_keyivgenfinalauth_data=auth_tag=auth_tagauth_tag_len=authenticated?key_len=key_leniv=iv_len=iv_lenblock_sizepadding=auth_tag_lenkey_setOpenSSL/Cipherunsupported cipher algorithm (%li)authentication tag not supported by this cipherdata too big to make output buffer: %ld bytessalt must be an 8-octet stringiterations must be a positive integerAEAD not supported by this ciphercouldn't set additional authenticated dataunable to set authentication tag lengtharguments for %li#encrypt and %li#decrypt were deprecated; use %li#pkcs5_keyivgen to derive key and IVretrieving the authentication tag failedunsupported cipher algorithm: %liossl_cipher_updateossl_cipher_finalOpenSSL for Rubywrong argument (%li)! (Expected kind of %li)wrong config formaterror in line %dConfigErrorDEFAULT_CONFIG_FILEossl_config.cDigest CTX wasn't initialized!Unsupported digest algorithm (%li).EVP_DigestFinal_exEVP_MD_CTX_newDigest initialization failed.EVP_DigestUpdateDigest initialization failedrequireDigest::ClassDigestErrorfinishdigest_lengthblock_lengthOpenSSL/DigestENGINE wasn't initialized.NUMERICNO_INPUTprivateopensslOPENSSL_init_crypto#<%li id="%s" name="%s">no such digest `%li'no such cipher `%li'EngineErrorloadcleanupenginesby_idcipherload_private_keyload_public_keyset_defaultctrl_cmdcmdsinspectMETHOD_RSAMETHOD_DSAMETHOD_DHMETHOD_RANDMETHOD_CIPHERSMETHOD_DIGESTSMETHOD_ALLMETHOD_NONEOpenSSL/Engineno such builtin loader for `%li'HMAC_CTX_newHMAC_CTX_copyHMAC wasn't initializedossl_hmac.cbuf_len <= EVP_MAX_MD_SIZEHMACErrorhexdigestOpenSSL/HMACossl_hmac_digestlength must be non-negativeEVP_PKEY_CTX_new_idEVP_PKEY_derive_initEVP_PKEY_CTX_set_hkdf_mdEVP_PKEY_CTX_set_hkdf_saltEVP_PKEY_CTX_set_hkdf_keyEVP_PKEY_CTX_set_hkdf_infoEVP_PKEY_deriveiterationsPKCS5_PBKDF2_HMACEVP_PBE_scryptKDFKDFErrorpbkdf2_hmachkdfKeyword flag set when calling rb_scan_args, but last entry is not a hashThe last argument is nil, treating as empty keywordsUsing the last argument as keyword parameters is deprecatedThe last argument is split into positional and keyword parametersPassing the keyword argument as the last hash parameter is deprecatedSPKI wasn't initialized!ossl_ns_spki.cnewlen <= lenChallenge.length <= 0?NETSCAPE_SPKI_verifyNETSCAPE_SPKI_set_pubkeyNetscapeSPKIErrorto_pemto_textpublic_key=challengechallenge=OpenSSL/NETSCAPE_SPKIossl_spki_to_derCert ID wasn't initialized!ossl_ocsp.cBIO_newi2a_ASN1_OBJECTd2i_OCSP_CERTIDOCSP_cert_to_idOCSP_CERTID_dupd2i_OCSP_SINGLERESPASN1_item_dupResponse wasn't initialized!Request wasn't initialized!d2i_OCSP_BASICRESPd2i_OCSP_RESPONSEOCSP_request_add0_idd2i_OCSP_REQUESTOCSP_single_get0_statuscertificate is not revokedOCSPOCSPErrorRequestadd_noncecheck_nonceadd_certidsigned?createstatus_stringbasicBasicResponsecopy_nonceadd_statusresponsesfind_responseSingleResponsecheck_validitycert_statusthis_updatenext_updaterevocation_timerevocation_reasonextensionsCertificateIdcmp_issuerserialissuer_name_hashissuer_key_hashhash_algorithmRESPONSE_STATUS_INTERNALERRORREVOKED_STATUS_NOSTATUSRESPONSE_STATUS_SIGREQUIREDRESPONSE_STATUS_SUCCESSFULRESPONSE_STATUS_TRYLATERREVOKED_STATUS_CACOMPROMISEREVOKED_STATUS_KEYCOMPROMISEREVOKED_STATUS_REMOVEFROMCRLREVOKED_STATUS_SUPERSEDEDRESPONSE_STATUS_UNAUTHORIZEDREVOKED_STATUS_UNSPECIFIEDNOCERTSNOINTERNNOSIGSNOCHAINNOVERIFYNOEXPLICITNOCASIGNNODELEGATEDNOCHECKSTRUSTOTHERNOTIMEV_CERTSTATUS_GOODV_CERTSTATUS_REVOKEDV_CERTSTATUS_UNKNOWNV_RESPID_NAMEV_RESPID_KEYOpenSSL/OCSP/CERTIDOpenSSL/OCSP/SINGLERESPOpenSSL/OCSP/BASICRESPOpenSSL/OCSP/RESPONSEOpenSSL/OCSP/REQUESTSingleResponse wasn't initialized!RESPONSE_STATUS_MALFORMEDREQUESTREVOKED_STATUS_AFFILIATIONCHANGEDREVOKED_STATUS_CERTIFICATEHOLDREVOKED_STATUS_CESSATIONOFOPERATIONossl_ocspreq_to_derossl_ocspres_to_derossl_ocspbres_to_derossl_ocspsres_to_derossl_ocspcid_to_derPKCS12 wasn't initialized.ossl_pkcs12.cPKCS12_parse@key@certificate@ca_certsASN1_dupUnknown PBE algorithm %liPKCS12ErrorOpenSSL/PKCS12ossl_pkcs12_to_derPKCS7 wasn't initialized.ossl_pkcs7.c@dataPKCS7_verify@error_stringNegative number of recipient!Negative number of signers!signedencryptedenvelopedsignedAndEnvelopedCould not parse the PKCS7PKCS7ri wasn't initialized.PKCS7si wasn't initialized.Could not add recipient.Could not add signer.must specify a booleanunknown type "%li"PKCS7Errorread_smimewrite_smimetype=detached=detacheddetached?cipher=add_signersignersadd_recipientrecipientsadd_certificatecertificates=certificatesadd_crlcrls=crlsadd_dataSignerInfoSignersigned_timeRecipientInfoenc_keyTEXTDETACHEDBINARYNOATTRNOSMIMECAPOpenSSL/PKCS7/RECIP_INFOOpenSSL/PKCS7/SIGNER_INFOOpenSSL/PKCS7OpenSSL::PKCS7#get_signer_info == NULL!signeddatasignedAndEnvelopedenvelopedencrypteddigestossl_pkcs7_to_derpkey is emptyCould not parse PKeyparameters missingpublic key missingPKEY wasn't initialized!EVP_VerifyInit_exEVP_VerifyUpdateEVP_VerifyFinalPrivate key is needed.EVP_SignInit_exEVP_SignUpdateEVP_SignFinalPKeyErrorprivate?OpenSSL/EVP_PKEYOpenSSL::PKey::PKey can't be instantiated directlyTHIS IS NOT A DH!qpub_keypriv_keyDH_set0_keyDH_set0_pqgincomplete DHDH already initializedDHparams_dupossl_pkey_dh.cFailed to generate keyNot a DH key!DHErrorgeneratepublic?exportparams_ok?generate_key!set_pqgset_keyossl_dh_to_derTHIS IS NOT A DSA!DSA_set0_keyDSA_set0_pqgDSA already initializedossl_pkey_dsa.cDSA PUBLIC KEYNeither PUB key nor PRIV keyincomplete DSAPrivate DSA key needed!Not a DSA key!DSAErrorsyssignsysverifyossl_dsa_to_derEC_POINT is not initializedEC_GROUP is not initializedEC_POINT_is_on_curveEC::Point already initializedEC_POINT_dupEC_POINT already initializedinvalid second argumentEC_POINT_newEC_POINT_bn2pointEC_POINT_oct2pointBIO_new(BIO_s_mem())EC_GROUP_set_seedEC_GROUP_newEC_GROUP_dupunknown curve name (%li)unable to create curve (%li)EC_GROUP_new_by_GF*wrong number of argumentsTHIS IS NOT A EC PKEY!EC_KEY_printoutlen=%dECDSA_verifyPrivate EC key needed!ECDSA_signECDH_compute_keyEC_KEY_set_public_keyEC_KEY_set_private_keyEC_KEY_set_groupEC already initializedEC_KEY_dupEVP_PKEY_assign_EC_KEYinvalid curve nameEC_KEY already initializedEC_get_builtin_curvesEC_POINT_point2octEC_POINT_set_to_infinityEC_POINT_invertEC_POINT_make_affineEC_POINT_is_at_infinityEC_GROUP_get_cofactorEC_GROUP_get_orderEC_GROUP_set_generatorEC::Group already initializedEC_KEY_check_keyEC_KEY_generate_keyNot a EC key!ECErrorECGroupPointGFpGF2mGFp_simpleGFp_montGFp_nistGF2m_simpleuncompressedhybridNAMED_CURVEEXPLICIT_CURVEgroup=private_key=private_key?public_key?dh_compute_keydsa_sign_asn1dsa_verify_asn1curve_nameasn1_flagasn1_flag=point_conversion_formpoint_conversion_form=seed=degreeinfinity?on_curve?make_affine!invert!set_to_infinity!to_octet_string@groupOpenSSL/EC_POINTOpenSSL/ec_groupEC_GROUP is already initializedunknown symbol, must be :GFp_simple, :GFp_mont, :GFp_nist or :GF2m_simpleunknown symbol, must be :GFp or :GF2munknown argument, must be :GFp or :GF2mcan't export - no public key setcan't export - EC_KEY_check_key failedunsupported point conversion form %+li (expected :compressed, :uncompressed, or :hybrid)unsupported point conversion form: %d, this module should be updatedbns must be 1 longer than points; see the documentationTHIS IS NOT A RSA!dmp1dmq1iqmpRSA_set0_crt_paramsRSA_set0_factorsRSA_set0_keyossl_pkey_rsa.cRSA already initializedsalt_lengthmgf1_hashautoincomplete RSAprivate key needed.maxNot a RSA key!RSAErrorpublic_encryptpublic_decryptprivate_encryptprivate_decryptsign_pssverify_pssset_factorsset_crt_paramsPKCS1_PADDINGSSLV23_PADDINGNO_PADDINGPKCS1_OAEP_PADDINGossl_rsa_to_derRAND_bytesRAND_bytes is not supportedRandomRandomErrorrandom_addload_random_filewrite_random_filerandom_bytesstatus?Selected protocol name must have length 1..255verify_hostname requires hostname to be setSSL SESSION get callback enteredSSL Session wasn't initialized.SSL SESSION remove callback enteredSSL SESSION new callback enteredcertificate does not contain public keyAdvertised protocol must have length 1..255SSL session is not started yet.%s SYSCALL returned=%d errno=%d state=%s%s returned=%d errno=%d state=%s: %s (%s)%s returned=%d errno=%d state=%sOpenSSL does not support tmp_ecdh_callback; use #ecdh_curves= insteadSSL NPN advertise callback addedSSL ALPN select callback addedSSL_CTX_set_session_id_contextSSL SESSION get callback addedSSL SESSION new callback addedSSL SESSION remove callback addedSSL TLSEXT servername callback addedservername_cb must return an OpenSSL::SSL::SSLContext object or nilSESSION_CACHE_NO_INTERNAL_LOOKUPSESSION_CACHE_NO_INTERNAL_STOREOP_DONT_INSERT_EMPTY_FRAGMENTSOP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONOP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONOP_NETSCAPE_REUSE_CIPHER_CHANGE_BUGOP_SSLREF2_REUSE_CERT_TYPE_BUGOP_NETSCAPE_DEMO_CIPHER_CHANGE_BUGSSL is not initializedSSL_set_fdarg must be Time or nilverify_certificate_identityossl_ssl.cpublic key mismatchSSL_CTX_use_certificateSSL_CTX_use_PrivateKeySSL_CTX_set0_chaincache_numconnect_goodconnect_renegotiateaccept_goodaccept_renegotiatecache_hitscb_hitscache_missescache_fulltimeoutswrite would blockread would blockSSL_set_sessionSSL_writesyswriteSSL_acceptSSL_connect:SSL_CTX_set_cipher_listSSL_CTX_newSSL2unrecognized version %+liSSL_CTX_set_min_proto_versionSSL_CTX_set_max_proto_versionSSL_readsysreadSSL_CTX_check_private_keySSL_CTX_add_client_CAcan't set verify locationsSSL NPN select callback addedSSL_CTX_set_alpn_protosSSL ALPN values addedSSL already initializednonblock=callcallback_stateossl_ssl_ex_vcb_idxSSL_get_ex_new_indexossl_ssl_ex_ptr_idxossl_sslctx_ex_ptr_idxSSL_CTX_get_ex_new_indexExtConfigSSLErrorWaitReadableSSLErrorWaitWritableSSLContextHAVE_TLSEXT_HOST_NAMEssl_timeoutssl_timeout=set_minmax_proto_versionciphers=ecdh_curves=security_levelsecurity_level=enable_fallback_scsvsetupfreezeSESSION_CACHE_OFFSESSION_CACHE_CLIENTSESSION_CACHE_SERVERSESSION_CACHE_BOTHSESSION_CACHE_NO_AUTO_CLEARSESSION_CACHE_NO_INTERNALsession_addsession_removesession_cache_modesession_cache_mode=session_cache_sizesession_cache_size=session_cache_statsflush_sessionsoptionsoptions=SSLSocketOPENSSL_NO_SOCKconnect_nonblockaccept_nonblocksysread_nonblocksyswrite_nonblockstoppeer_certpeer_cert_chainssl_versionpendingsession_reused?session=verify_resulthostname=tmp_keyalpn_protocolnpn_protocolVERIFY_NONEVERIFY_PEERVERIFY_FAIL_IF_NO_PEER_CERTVERIFY_CLIENT_ONCEOP_ALLOP_LEGACY_SERVER_CONNECTOP_TLSEXT_PADDINGOP_SAFARI_ECDHE_ECDSA_BUGOP_ALLOW_NO_DHE_KEXOP_NO_TICKETOP_NO_COMPRESSIONOP_NO_ENCRYPT_THEN_MACOP_CIPHER_SERVER_PREFERENCEOP_TLS_ROLLBACK_BUGOP_NO_RENEGOTIATIONOP_CRYPTOPRO_TLSEXT_BUGOP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_1OP_NO_TLSv1_2OP_NO_TLSv1_3OP_MICROSOFT_SESS_ID_BUGOP_NETSCAPE_CHALLENGE_BUGOP_MICROSOFT_BIG_SSLV3_BUFFEROP_MSIE_SSLV2_RSA_PADDINGOP_SSLEAY_080_CLIENT_DH_BUGOP_TLS_D5_BUGOP_TLS_BLOCK_PADDING_BUGOP_SINGLE_ECDH_USEOP_SINGLE_DH_USEOP_EPHEMERAL_RSAOP_NO_SSLv2OP_PKCS1_CHECK_1OP_PKCS1_CHECK_2OP_NETSCAPE_CA_DN_BUGSSL2_VERSIONSSL3_VERSIONTLS1_VERSIONTLS1_1_VERSIONTLS1_2_VERSIONTLS1_3_VERSIONexceptionwait_readablewait_writabletmp_dh_callbacknpn_protocols_encoded@cert_store@ca_file@ca_path@verify_mode@verify_depth@verify_callback@client_ca@renegotiation_cb@cert@extra_chain_cert@client_cert_cb@tmp_ecdh_callback@timeout@session_id_context@session_get_cb@session_new_cb@session_remove_cb@npn_select_cb@npn_protocols@alpn_protocols@alpn_select_cb@servername_cb@verify_hostname@io@context@hostnameSSL3TLS1TLS1_1TLS1_2TLS1_3OpenSSL/SSLOpenSSL/SSL/CTXU����������;��������������SSL Session already initializedi2d_SSL_SESSIONossl_ssl_session.cno session availableunknown typeBIO_s_mem()SSL_SESSION_print()SessionErrortime=OpenSSL/SSL/Sessionossl_ssl_session_to_derV_OKV_ERR_UNSPECIFIEDV_ERR_UNABLE_TO_GET_CRLV_ERR_CERT_SIGNATURE_FAILUREV_ERR_CRL_SIGNATURE_FAILUREV_ERR_CERT_NOT_YET_VALIDV_ERR_CERT_HAS_EXPIREDV_ERR_CRL_NOT_YET_VALIDV_ERR_CRL_HAS_EXPIREDV_ERR_OUT_OF_MEMV_ERR_CERT_CHAIN_TOO_LONGV_ERR_CERT_REVOKEDV_ERR_INVALID_CAV_ERR_PATH_LENGTH_EXCEEDEDV_ERR_INVALID_PURPOSEV_ERR_CERT_UNTRUSTEDV_ERR_CERT_REJECTEDV_ERR_SUBJECT_ISSUER_MISMATCHV_ERR_AKID_SKID_MISMATCHV_ERR_KEYUSAGE_NO_CERTSIGNV_ERR_KEYUSAGE_NO_CRL_SIGNV_ERR_INVALID_NON_CAV_ERR_INVALID_EXTENSIONV_ERR_NO_EXPLICIT_POLICYV_ERR_DIFFERENT_CRL_SCOPEV_ERR_UNNESTED_RESOURCEV_ERR_PERMITTED_VIOLATIONV_ERR_EXCLUDED_VIOLATIONV_ERR_SUBTREE_MINMAXV_ERR_UNSUPPORTED_NAME_SYNTAXV_ERR_PATH_LOOPV_ERR_SUITE_B_INVALID_VERSIONV_ERR_SUITE_B_INVALID_CURVEV_ERR_SUITE_B_LOS_NOT_ALLOWEDV_ERR_HOSTNAME_MISMATCHV_ERR_EMAIL_MISMATCHV_ERR_IP_ADDRESS_MISMATCHV_ERR_DANE_NO_MATCHV_ERR_EE_KEY_TOO_SMALLV_ERR_CA_KEY_TOO_SMALLV_ERR_CA_MD_TOO_WEAKV_ERR_INVALID_CALLV_ERR_STORE_LOOKUPV_ERR_NO_VALID_SCTSV_ERR_OCSP_VERIFY_NEEDEDV_ERR_OCSP_VERIFY_FAILEDV_ERR_OCSP_CERT_UNKNOWNV_FLAG_USE_CHECK_TIMEV_FLAG_CRL_CHECKV_FLAG_CRL_CHECK_ALLV_FLAG_IGNORE_CRITICALV_FLAG_X509_STRICTV_FLAG_ALLOW_PROXY_CERTSV_FLAG_POLICY_CHECKV_FLAG_EXPLICIT_POLICYV_FLAG_INHIBIT_ANYV_FLAG_INHIBIT_MAPV_FLAG_NOTIFY_POLICYV_FLAG_EXTENDED_CRL_SUPPORTV_FLAG_USE_DELTASV_FLAG_CHECK_SS_SIGNATUREV_FLAG_TRUSTED_FIRSTV_FLAG_SUITEB_128_LOS_ONLYV_FLAG_SUITEB_192_LOSV_FLAG_SUITEB_128_LOSV_FLAG_PARTIAL_CHAINV_FLAG_NO_ALT_CHAINSV_FLAG_NO_CHECK_TIMEPURPOSE_SSL_CLIENTPURPOSE_SSL_SERVERPURPOSE_NS_SSL_SERVERPURPOSE_SMIME_SIGNPURPOSE_SMIME_ENCRYPTPURPOSE_CRL_SIGNPURPOSE_ANYPURPOSE_OCSP_HELPERPURPOSE_TIMESTAMP_SIGNTRUST_COMPATTRUST_SSL_CLIENTTRUST_SSL_SERVERTRUST_EMAILTRUST_OBJECT_SIGNTRUST_OCSP_SIGNTRUST_OCSP_REQUESTTRUST_TSADEFAULT_CERT_AREADEFAULT_CERT_DIRDEFAULT_CERT_FILEDEFAULT_CERT_DIR_ENVDEFAULT_CERT_FILE_ENVDEFAULT_PRIVATE_DIRV_ERR_UNABLE_TO_GET_ISSUER_CERTV_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATUREV_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATUREV_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEYV_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELDV_ERR_ERROR_IN_CERT_NOT_AFTER_FIELDV_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELDV_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELDV_ERR_DEPTH_ZERO_SELF_SIGNED_CERTV_ERR_SELF_SIGNED_CERT_IN_CHAINV_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLYV_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATUREV_ERR_AKID_ISSUER_SERIAL_MISMATCHV_ERR_UNABLE_TO_GET_CRL_ISSUERV_ERR_UNHANDLED_CRITICAL_EXTENSIONV_ERR_UNHANDLED_CRITICAL_CRL_EXTENSIONV_ERR_PROXY_PATH_LENGTH_EXCEEDEDV_ERR_KEYUSAGE_NO_DIGITAL_SIGNATUREV_ERR_PROXY_CERTIFICATES_NOT_ALLOWEDV_ERR_INVALID_POLICY_EXTENSIONV_ERR_UNSUPPORTED_EXTENSION_FEATUREV_ERR_APPLICATION_VERIFICATIONV_ERR_UNSUPPORTED_CONSTRAINT_TYPEV_ERR_UNSUPPORTED_CONSTRAINT_SYNTAXV_ERR_CRL_PATH_VALIDATION_ERRORV_ERR_SUITE_B_INVALID_ALGORITHMV_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHMV_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256V_ERR_PROXY_SUBJECT_NAME_VIOLATIONATTR wasn't initialized!ossl_x509attr.csk_newargument must be ASN1::SetASN1::Set has non-array valueX509_ATTRIBUTE_dupoid=value=X509_ATTRIBUTE_set1_objectAttributeErrorAttributeOpenSSL/X509/ATTRIBUTEossl_x509attr_get_valueossl_x509attr_to_der#<%li: subject=%+li, issuer=%+li, serial=%+li, not_before=%+li, not_after=%+li>CERT wasn't initialized!ossl_x509cert.cX509_set_pubkeyX509_set_notAfterX509_set_notBeforeversion must be >= 0!CertificateErrorCertificateversion=signature_algorithmserial=subjectsubject=issuer=not_beforenot_before=not_afternot_after=extensions=add_extensionOpenSSL/X509ossl_x509_to_derCRL wasn't initialized!X509_CRL_add0_revokednum < 0???ossl_x509crl.ccount < 0???X509_CRL_set_nextUpdateX509_CRL_set_lastUpdateCRLErrorlast_updatelast_update=next_update=revoked=add_revokedOpenSSL/X509/CRLEXT wasn't initialized!ossl_x509ext.cASN1_OCTET_STRING_setX509_EXTENSION_dupcritical=critical,unknown OID `%li'@config%li = %liOBJ_txt2objX509_EXTENSION_set_object@crl@subject_request@subject_certificate@issuer_certificateCTX wasn't allocated!ExtensionErrorExtensionFactoryissuer_certificate=subject_certificate=subject_request=crl=create_extExtensioncritical?OpenSSL/X509/EXTENSIONossl_x509ext_to_derOpenSSL/X509/EXTENSION/FactoryName wasn't initialized.ossl_x509name.cname entries < 0!X509_NAME_print_ex#<%li %li>X509_NAME_dupOBJECT_TYPE_TEMPLATEX509_NAME_onelinelocX509_NAME_add_entry_by_txtDEFAULT_OBJECT_TYPE[]NameErroradd_entryto_utf8hash_oldcountryNamednQualifierDCdomainComponentemailAddressRFC2253ONELINEMULTILINEOpenSSL/X509/NAMEossl_x509name_to_derReq wasn't initialized!ossl_x509req.cX509_REQ_set_pubkeyX509_REQ_set_versionRequestErrorattributesattributes=add_attributeOpenSSL/X509/REQossl_x509req_to_derREV wasn't initialized!i2d_X509_REVOKEDossl_x509revoked.cX509_REVOKED_dupX509_REVOKED_set_serialNumberRevokedErrorRevokedOpenSSL/X509/REVX509_REVOKED_set_revocationDateossl_x509revoked_to_der@timeSTORE wasn't initialized!STORE_CTX wasn't initialized!STORE_CTX is out of scope!X509_STORE_CTX_initcerts in chain < 0???ossl_x509store.c@error@chainstctx_ex_verify_cb_idxstore_ex_verify_cb_idxX509_STORE_get_ex_new_indexStoreErrorStoreverify_callback=flags=purpose=trust=add_pathadd_fileset_default_pathsadd_certStoreContexterror=error_depthcurrent_certcurrent_crlOpenSSL/X509/STORE_CTXOpenSSL/X509/STOREStoreContext initialization failureexception in verify_callback is ignoredX509_STORE_CTX_get_ex_new_index;<F&��X�a��� ����^���@ߝ���@`���,A���sp����uݟ��t�S����ɠ����X������t� ����0����`����p������������ ���$@���8����T����������D�����0������������� ���,P���L���������`���(����D0���`0����г����������������8p���T��p@�������������`���  ����L  ���x ����� ��� @���� ����(!���T!`����!�����! ����!����"��0"@���\"�����"����"`����"����# ���8#����d#�����#���#����#0��,$���H$P��h$@���$����$`��,%p��l%0���%���&���0&���T&���& ���&����&��'0�8'��\'���'��'��'��(�� (�L(��|(��(�(0��(��(��)0���4)p���P)����l)`����)�����)���)����*����8*0���t*@����*���*p���+���4+P���`+����+P���+����+P��, ��L,����,����,���-���L-
���-����-p
���-�
��.@��@.���t. ���.����.@��,/���X/���/����/���0���@0P��|00���0��1���H1����1����1���2p��H20���2����2�#���2�#���2�$��3�$��,3�%��P3�&��|3�'���3(���3)���30,��D4�/���4�/���4�0���4�0��5P1��(5p1��D5�1��`52��|5p2���5�2���53���5`4��$6�4��P6`5��|606���6 7���60:��H7@:��\7P:��p7P<���7=���7�=���7�@��8B��48�B��`8�B��t8�B���8�D���8pE���8�E��9�F��<9�F��X9G��t9@G���9�G���9`H���9J��:�J��8:PL��`:`L��t:pL���:�M���:`O��;�P��4;�R��h;S���;�T���;pU���;�U��<�U��D<0V��`<pV��|<�V���<�V���<�W���<0X��=�X��8=[��X=[��l=p\���=�]��> ^��P>@^��l>�^���>�_���> `���>``��?a��4?�a��h?�a���?pc���?�i��,@�m���@r��@A�r��XA�r��lAps���A�t���APv���A w��B�w��LB�w��hBPx���B�x���B y���B�y��C z��(CPz��DC�{��`C}���C}���C�}���C�~���C`��DЁ��TD�����D�����D�����D�����Dp��� E����LE����`E`����E ����E0����E�F����<F����hFЌ��|F�����F@����F`���GP���XG ����G���G�����G����H ���(H����TH����H0����H�����H����I��$I����\I��xI����I�����I`����I����J��$J����@J ���\J`���xJ�����J�����J`����J��K���8K����pK�����K����K0����K�����KС��L ���(LТ��dL�����L����L�����L����8Mp����MP����M� N����pNP����Np����N�����NP���O ���LO`���hO����O���O ���O0��PP��<P`��PP����P ���P���TQP���Q����Q���Rp��HR���dR����R����R@���Rp���R����R��S0��8S���XS0���S`���S����S���SP��Tp��4T���dT0���T����T����T0���T@��U���<U���PUp��|Up���U����U0��V���V��<V����V����V����V ��V�@W���W ��W��X`�HX��dX��|X���X���X�YP�$Y@�`YP�tY��Y���Y���Y����HZ���dZp����Z����Z@����Z`���[���4[P���p[���[ ���[���$\0��P\���|\����\����\P��]���L]���x]����]`	���]
���]�
��^p��$^ ��H^���l^p
���^���^����^���_0��`_����_p���_ ���_`��`���T`0��x`0���`����`� ��@a�!��la�!���aP#���ap&��b'��Pb�'��|b�'���b�(���b@)���b�)��c�*��(cP+��Lc,��pcp,���c0-���c/���c�/��(d 2��Hd@2��\d`2��pdp2���d�2���dP3���dP4��e07��<e�7��le8���e8���e�8���e�=��f�>��4f`@���f�@���f`A���f�B��g D��8g0E��hg F���g G���g�G���gI��4hJ��lhpM���h�N���h�O��$i�O��LiQ���i�Q���ipR���i S��j@S��8j�S��pj�T���j�T���j@U���j�U��k V��Dk�V��pk�V���kW���k�W���k`X���k0Y��,l�Y��XlPZ���l@[���l`[���l�[���l`\��m�\��0mP]��Tm�]���m�c���mPd���m�d��n e��,n�e��dn@f���n�f���n�g���no�� o`q��Lo�r���o0t���o�u��p`w��Lp�y���p@z���p@{��qp{�� q0}��lq�}���q�~���q�~���q��r���8r`���\r����r�����rp����r ����rЃ��s����4sp����s@����sЌ��(t0���dt�����t`����t0���u����Tu ����u���u`���v����v���Pv����pv0����v�����vЦ���v�����vЧ��w��� w����Lw�����w ����wЪ���w���w���x ��� x����Tx����x`����x�����xP����x����y`���Dy@���xy�����y���y@���zб��,z`���Pz��z�����z�����z����{p���L{ ���x{и���{����{p���$| ���p|P����|��|���}@��$}���D}���d}���} ���}@���}����}@���}���~`��8~���T~���p~����~����~���~������, ��H����@��������������H� ��`����� ��������`��������� ���P������<����t�������܂������4�p��`������P������8� ��� � �0�4�@�H�@�������0����p	��8��	��L��
��x�`�������؆����p
����
��4���P�`��p�����������`���P��$����P�p��p��������������̈������ ��4��#���� $�����$���P'���(��H�@(��d��(�����(����*��Ȋ *��܊�+��(��,��T��-����0/����P/��ԋ�/����/���@0��D��0��p�P1�����1����@2��0��2��`�03�����3�����3��ԍ@4����4���5��8�`5��d��5����6����`6��Ȏ�6����6����7��`�8�����8����9��؏�9���0:��0��:��\��:��x� ;����p>�����>��Đ @����A��\�C�����C��ؑ�D��� F��<�@F��X�pF��t��F����H����H��� I��H��I��t��I����PJ��ȓ�J���@K��0��K��\�L��|�pL�����L��Ȕ M���`M���N��<�`N��\��N��x�O�����Q�����Q��ԕ�R����S��8�`T��\� U����X��̖ [���@[����[��T�@\��p��\����]����`]����]���^��<�P^��h��_����``��Ԙ�`����`���`a��8��a��T�pd�����d�����e�����g���Ph��@��h��\��h�����i����pl����l����l��(�0m��T�`m��l��m�����n��ԛo���`o���u����@v�����v����v���@z��0�Pz��D��{�����|�����}����~������L�0���h������������P����Ђ��X�P��������������̟P������������@� ���l�P��������������Ġ0����@����P��������4� ���������`���ܡ����,�����H����t�`�����Џ�������ܢP���������$� ���@�����`� �����p���������������̣������������4�@���h����������������`�������8�`���d������������P���̥�����К��� ���d�`������������@��������D� ���p�p������������ԧP����� � ���<�����h�����@������������0�@���h�������zRx�$����;FJw�?:*3$"DG���;\����p|���"����������MH 
A�Ȉ��<E�v���HO������QH ~
ALD���iF�B�A �A(�D0S
(D ABBFU
(A ABBELhd���iF�B�A �A(�D0S
(D ABBFU
(A ABBEL�����iF�B�A �A(�D0S
(D ABBFU
(A ABBE8�����F�L�D �D(�D@`
(A ABBD(D8���mE�D�G0P
AAAp|����bH��F�B�E �B(�A0�D8�DPl
8A0A(B BBBB�����RH D
A���)E�W
DD@�����F�B�B �A(�A0�DP�
0A(A BBBA zRx�P�����(d��> �0���qF�A�G �G�8������F�G�A �D(�D0x
(D ABBA�0���_H j
Ft���nE�Y
B$Ȓ���E��
ED�����D q
K`,���(t8����F�C�H �sAB(�����|E�A�D0e
AAA,���F�F�F ��
ABF�����jH \
A���jH \
A(4h���UE�D�F _
AAH(`����UE�D�F _
AAH(���UE�D�F _
AAH(����UE�D�F _
AAH(�8���UE�D�F _
AAH(l���UE�D�F _
AAH(<����UE�D�F _
AAH(hԘ��UE�D�F _
AAH(����UE�D�F _
AAH(�<���UE�D�F _
AAH(�p���UE�D�F _
AAH(����UE�D�F _
AAH(Dؙ��UE�D�F _
AAH(p���UE�D�F _
AAH(�@���UE�D�F _
AAH(�t���UE�D�F _
AAH(�����UE�D�F _
AAH( ܚ��UE�D�F _
AAH(L���UE�D�F _
AAH(xD���UE�D�F _
AAH(�x���UE�D�F _
AAH(�����UE�D�F _
AAH(���UE�D�F _
AAH$(	���?E�A�G lDA@P	,���BE�K�f
AII�E�[�A��E�[�A�(�	8���}E�A�D q
DAH,�	�����F�D�D �h
ABA�	�����H0u
C
����RDb
JI
A(,
���A�k
Dm
CF
JHX
�����B�B�E �E(�D0�D8�Dp�
8A0A(B BBBFH�
����vF�B�E �B(�A0�A8�D`(
8A0A(B BBBI<�
,���F�B�D �D(�F��
(A ABBGL0�����	B�B�B �B(�A0�D8�J��
8A0A(B BBBDL�l���bF�E�B �B(�A0�A8�D�
8A0A(B BBBF ������E�GP�
AC �h����E�GP�
AK8D���mF�B�A �D(�G@q
(A ABBETx��� ht���bE�D l
AA8������F�B�A �A(�GP�
(A ABBB0�t����F�A�D �D`�
 AABB ��qE�A
JD
EH 
L���&
F�N�B �I(�H0�C8�D@�8A0A(B BBB l
0��E�G |
AG(�
,��{E�H�G@Z
AAA�
����
|��	(�
x��kE�J
M������
D,����F�H�A �[
ABA@<��AAF\@��.E�c
AxT��AAK(�X��{E�H�D G
DAA����2H]
H����>Hf
K����7Hc
G��LE�c
H(0L���E�H�D X
DAA\���7Hc
Gx���7Hc
G4����E�D�J X
CAA~
FAA,�p���A�C
F���F���
J8�@���F�B�D �D(�FPW
(A ABBE8���DL����B�H�A �B
ABHn
DBDD
DBA4����E�K�D B
CAFD
FAA(�`��^E�G�D t
DAG(����vF�K�A �p
ABK($���vF�K�A �p
ABK(P<��vF�K�A �p
ABK(|���vE�G�D u
DAF(����vE�G�D u
DAF8�8���F�B�A �G(�D0e
(D ABBF8����F�B�A �G(�D0e
(D ABBF@L`���F�B�B �D(�D0�FpK
0A(A BBBE@����F�B�B �D(�D0�FpK
0A(A BBBE8�����F�B�D �D(�F@�
(A ABBH8<��yF�B�D �D(�F@}
(A ABBG0L����F�D�D �F0�
 AABD(�����E�D�G M
GAK(����jE�M�D l
DAI(����ZE�D�D m
AAA0����F�A�D �D0i
 DABAL8t�(F�B�E �E(�D0�A8�D�w
8A0A(B BBBD0�T��F�A�A �G0J
 DABA0����F�A�A �G0J
 DABA(��QE�A�G0u
CAF(@�QE�A�G0u
CAF8Ht��F�B�A �A(�G@w
(D ABBA@���F�B�B �A(�A0�G@�
0D(A BBBA8����F�B�A �A(�G@w
(D ABBA88��F�B�A �A(�G@w
(D ABBA@@���F�B�B �A(�A0�G@�
0D(A BBBA@�h��F�B�B �A(�A0�G@�
0D(A BBBA@���F�B�B �A(�A0�G@�
0D(A BBBA8���F�B�A �A(�G@y
(D ABBAHH4�F�B�B �B(�A0�A8�GP�
8A0A(B BBBA8���F�B�A �A(�G@w
(D ABBA8����F�B�A �A(�G@m
(D ABBA8 ��F�B�A �A(�G@m
(D ABBA(H���E�A�G0a
DAEt(��E��
X���	0����F�A�A �G0i
 DABA��� ���E�G �
AD(��E�A�G0�
AAK0@\��F�A�D �D0�
 AABEt(� E�Z(�,�E�H�D0�
AAHH����F�B�B �B(�D0�D8�Fp�
8A0A(B BBBD\��~F�B�E �E(�D0�A8�G�i�S�U�C�p
8A0A(B BBBDh���&E�`,�����F�A�A �j
ABK����AAF����WE�t
A� ���AAK$���2H]
H$H���AHs
A @|���eE�t
OR
Fd���2H]
H���AHl
HH� ���ZF�B�B �B(�A0�D8�D`�
8A0A(B BBBE(�4���vF�G�A �v
ABI(����vF�G�A �v
ABI,@����F�D�J �[
ABF8p|����F�H�A �D(�D0n
(D ABBB\�0��B�B�B �E(�D0�D8�I���V�P�C�M
8A0A(B BBBK��� ���04����F�D�D �G0�
 AABFh����H {
E(�8���E�M�D A
DAA�����L��(�p���E�A�G@�
AAF(��	���E�H�D nIH$H
��	8D
��0LP
���F�K�F �D@�
 AABH,�����F�A�A �i
ABD(�|��uE�K�D k
DAA �����E�G H
DHL
��AAKP
��AHl
H8�
��:He
HT�
��:He
H p�
���E�D u
AA8�����F�B�D �C(�GP�
(A ABBH(�����E�M�D u
DAA$�P���E�P �
AA$ ���
8 ���	8L ���fF�I�A �A(�D0/
(D ABBA8� ��sF�L�D �A(�IP�
(A ABBH0� X���F�D�D �F@�
 AABK0� ����F�D�D �F@�
 AABA8,! ��sF�B�E �A(�A0�Y(D BBB(h!d���E�D�F@�
AAH(�!����E�A�G0�
DAG�!l��AAK(�!p��]F�H�D �r
DKE"���2H]
H$"���2H]
H(@"���^E�G�D n
FAKl" ��AAF(�"$���E�A�G0U
AAA(�"����E�A�G0U
AAA�"��LHf
A�"@��{L�^#���	T0#���_F�B�B �D(�A0�D���U�I�A�N
0A(A BBBAL�#���F�B�E �A(�A0�DP�XU`IXAP`
0A(A BBBD8�#t���B�E�D �D(�D0n
(D ABBE$���AAK(0$����E�H�D�p
AAE(\$@ ���E�H�D0n
AAG �$� ��jE�G D
DD�$0!��4E�i
A,�$T!���F�A�A �i
ABD0�$�!���F�D�A �G0_
 DABH,%@"��<E�c
AH%d"��sE�[Ld%�#��F�B�B �E(�A0�A8�F��
8A0A(B BBBI$zRx��������,>]���\�%\)��F�B�B �E(�A0�A8�F�?�G�F�A�c
8A0A(B BBBG$zRx��������,#]���`�&�,��HF�B�B �E(�A0�A8�F�H�G�B�B�I�c
8A0A(B BBBH�,]���'�0���H�'P1��	 0'L1���E�G [
AH(T'�1��E�H�D0�
AAA0�'�2���F�D�D �F@�
 AABH �'X4���E�h
KR
F4�'5���E�K�D x
FAEI
CAA(l5��AAF,,(p5��oF�A�D �C
ABA(\(�5��yF�A�K �s
ABA�(6��OHe
E(�(86���E�H�D x
AAE�(�6��fE�w
E�(�6��.E�c
A)7���L�l($)x8��E�H�D0�
AAAP)l9��	 d)h9���E�K l
AA �):���E�K t
AK �)�:���E�K t
AKD�)L;��eF�B�B �K(�D0�I��
0A(A BBBF,*t=���F�A�A �n
ABG(H*>��E�H�D0�
AAAt*�>��	(�*�>���E�A�J@�
AAD,�*�?���F�A�A �u
ABH(�*H@��E�H�D0�
AAA+<A��	,$+8A���F�A�A �u
ABH0T+�A���F�D�C �G@�
 AABH�+TC��	,�+PC���F�A�A �u
ABH0�+�C���F�D�D �F@�
 AABD(,\E��E�H�D0�
AAA,,PF��	,@,LF���F�A�A �u
ABH0p,�F���F�D�D �F@�
 AABD(�,XH��E�H�D0�
AAAH�,LI���F�I�B �B(�A0�A8�DP�
8A0A(B BBBF,-�I���F�K�A �H
ABA0L-�J���F�D�C �G@�
 AABH0�-L���F�D�D �F@�
 AABD�-�M��AAK�-�M��bH O
A(�-�M��mE�K�D v
DAA(.4N��mE�K�D v
DAAD.xN��,H�^
AL`.�N��`F�I�B �B(�A0�A8�D�
8A0A(B BBBA�.�P��AAK�.�P��,H�^
A4�.�P���E�A�Q _
DAED
FAA /\Q��AAF</`Q��.E�c
A8X/tQ��xF�I�A �A(�D0T
(D ABBA�/�Q���H b
F�/lR��AAK�/pR��WHl
F�/�R���H X
H08S���H Y
G 0�S��:He
H<0�S��.E�c
AX0�S��AAK<t0�S���F�I�B �A(�A0�s
(D BBBA(�0hT��~E�K�D p
CAF�0�T��.E�c
A4�0�T��lE�H�D }
DAEI
DAA41U��2H]
HP1,U��:He
Hl1PU��.E�c
A(�1dU��kE�K�D p
CAF�1�U��.E�c
A�1�U��JHc
G8�1�U���F�B�G �D(�D0T
(D ABBD(2dV���H \
AD2W��lH^
J\`2\W���F�B�E �B(�K0�D8�D�x�G�\�A�
8A0A(B BBBE8�2�Z���F�E�D �A(�FP�
(A ABBHH�2P\���F�E�B �B(�A0�D8�FP
8A0A(B BBBHHH3�]���F�E�B �B(�A0�D8�FP
8A0A(B BBBHL�3x_���F�B�B �B(�D0�D8�F��
8A0A(B BBBJL�3�a���F�B�B �B(�D0�D8�F��
8A0A(B BBBJ,44d���M�H�A ��FI(d4�l��E�H�D0�
AAA�4�m��	8�4�m���F�B�D �C(�Gp
(A ABBE,�4,p���F�A�A ��
ABE5�p��<E�c
A`,5�p���F�E�E �B(�A0�A8�G�S�E�E�B�b�{
8A0A(B BBBG�5u��.L��5 v��	�5v��	(�5v��E�H�D0�
AAA6w��	L6w��PF�B�B �B(�K0�F8�G�
8A0A(B BBBJLd6z��eF�B�B �B(�A0�A8�G� I� �
8A0A(B BBBC`�6({��uF�I�B �B(�A0�A8�D@�
8D0A(B BBBGc
8A0A(B BBBE`7D|���F�I�B �B(�A0�A8�D@�
8D0A(B BBBGQ
8A0A(B BBBE(|7�}���E�l
GM
K^
R0�7�~���F�D�C �G@
 AABH,�7�����F�A�A �s
ABB8 ���AAK(8$���+HY
ED88���/H]
E`8L���BH]
E|8����.H\
E�8����AAF(�8����bE�A�J o
DAA�8܁��.E�c
A�8�jHq
GH
E89@����F�B�D �D(�J0K
(D ABBAX9����.E�c
A(t9�����E�H�D x
AAE�9���AAK �9���?A�j
EE
E�9,���HI,�94���}F�D�D �M
ABB (:����?A�j
EE
E,L:����}F�D�D �M
ABB|:�HI(�:����^F�K�A �k
ABA�:,���(�:(���^F�K�A �k
ABA;\���(;X����E�A�Q O
DAA8@;���F�N�A �h
ABHc
ABA(|;����_E�K�D h
DAA�;��WE�e
F�;(���AHm
G�;\���{E�@
AH<�����F�B�B �B(�A0�K8�D`s
8A0A(B BBBAL<0���.E�c
A0h<D����F�H�A �D@�
 AABA�<�AH\
EH�<$����F�B�B �B(�D0�D8�FP�
8A0A(B BBBED=Ȋ��dF�B�B �A(�D0�F��
0A(A BBBGLL=��F�B�B �B(�A0�C8�G��
8A0A(B BBBI@�=@���yF�B�B �A(�D0�Fpt
0A(A BBBG(�=|����F�V�A ��FI>���MH 
A(>D���HN@>L���	XT>H����E�A�D p
DAII
DAJD
DAGD
DAGt
DAA�>̗��9L�T
A�>�ME�t
A8�>$����F�B�G �C(�D@F
(A ABBF$?ؘ�� 8?Ԙ��dE�Q v
AA0\? ����F�A�D �F@�
 AABC(�?ܚ��*E�A�G@s
AAFL�?���F�B�A �A(�G@�
(C ABBIY
(F ABBD@p���6HU
A(@����dE�n
A8D@���F�B�A �A(�GP�
(A ABBF�@<���>E�`
A,�@`���E�H�D AA(�@P����E�A�DPe
AAA8�@ԡ��:F�E�A �C(�D@�
(D ABBA@4Aآ���F�E�B �D(�A0�DP�
0D(A BBBA0xA$���>F�A�A �D@�
 AABF8�A0����F�E�D �A(�D`�
(A ABBA(�A����TE�A�D0�
AAE(Bا���E�A�D W
AAE(@B\����E�A�D W
AAElB��!E�[@�B��B�E�E �A(�A0�Dp�
0A(A BBBJ@�B@����B�M�A �B
ABKN
ABGFAB(C�����E�D�D U
AAD<C ���AAK XC$����E�D h
AA |C�����E�D h
AF �C,����E�D h
AF �C�����E�D j
AD �CD����E�D j
AD D���E�D j
AD(0D\����E�D�D y
DAA \D���E�D n
AA �DL����E�D i
AE8�Dد���F�E�D �A(�IP�
(A ABBD@�D\����F�B�E �D(�A0�F@�
0A(A BBBE($Eȳ���E�A�D N
DACPE\���qE�Y(lE�����E�A�DPe
AAA8�ED���:F�E�A �C(�D@�
(D ABBA@�EH����F�E�B �D(�A0�DP�
0D(A BBBA F����5E�D �
AI8<F�����F�E�D �A(�D0~
(D ABBA8xFt����F�B�A �A(�D@�
(A ABBGL�Fؽ��F�B�B �D(�A0�I@�HNPOHA@h
0A(A BBBF(G�����E�A�D Y
AAE$0G,���/E�VC LCA8XG4���rB�E�A �A(�D��
(A ABBJ8�Gx���F�E�D �A(�IP�
(A ABBE@�G\���B�M�A �B
ABKN
ABGFAB(H����E�D�D g
AAJ@HL��AAK \HP���E�D h
AA �H����E�D h
AF �HX���E�D h
AF �H����E�D j
AD �Hp���E�D j
AD I����E�D j
AD(4I���oE�G�D m
AAA(`I����E�D�D0f
AAK0�I`���F�D�A �DP
 AABF(�I����E�A�D N
DAC�I���_E�GJ��� J���4J���	HJ���	4\J����E�K�D V
FAGD
CAA,�Jx���F�A�K ��
ABA8�JH���F�L�A �F(�GP�
(A ABBE,K����B�K�A �@
ABO0K|��DKx�� XKt���E�D ]
DFL|K���F�H�L �B(�A0�A8�G��
8A0A(B BBBA(�K����E�A�D _
AAET�KT���B�B�B �E(�D0�D8�D@�HNPQHA@L
8A0A(B BBBIPL���8dL����F�B�D �D(�F@c
(A ABBA,�L|��FE�D �
CBB
FA(�L���gE�A�D@�
AAB,�L���F�A�K ��
ABC(,M����E�D�D `
DAF4XM����E�A�D0[
AAIN
AAA(�ML���E�D�D Z
DAA8�M���F�E�D �A(�D0}
(D ABBA4�M���A�A�D0V
DAGC
DAA@0N��_F�E�B �D(�A0�IP-
0A(A BBBH,tN��sE�G
M�����
H@�N��B�M�A �B
ABKN
ABGFAB$�NT�bA�i
FF
JF
AHO��F�B�B �B(�K0�D8�D@�
8D0A(B BBBC(\Op��E�H�G D
DAA(�O���E�H�G N
DAA(�Ox��E�H�G N
DAA�O��AAK4�O��E�K�D H
FAED
CAA(4Px��E�H�D z
AAE`P��2H]
H4|P�aE�H�D i
DDND
FAA(�PH�BE�K�D c
DAA$�Pl��HS
EK
EK
E(Q��VE�A�N h
DAG4Q�2H]
HPQ,�9Hd
H lQP��E�K b
AA �Q���E�K b
AA8�Qh��F�B�K �D(�D@\
(D ABBA(�Q���E�K�G s
DAA(Rp�E�K�D K
AAA8HR���F�D�K �h
CBFg
ABA�Rx�AAK�R|�dE�t
N�R���E�~
A�RD�dE�t
N �R��tE�|
OF
A(S���E�G�D p
DAK,DSX�E�C
F���E�D��
H(tS8���WA�M�D g
DAA(�Sl���sI�K�F �}
ABA �S����DE�h
KF
A4�S���E�A�D J
GALD
FAA (TT���tE�|
OF
A(LT�����E�D�D |
DAA(xT$����E�A�D P
DAA<�T����jF�I�A �A(�D0N(A ABB(�T��EE�A�Dp
AAA@U���F�E�B �D(�A0�DP�
0D(A BBBA8TUX��:F�E�A �C(�D@�
(D ABBA@�U\���F�E�B �D(�A0�DP�
0D(A BBBA8�U����F�B�A �A(�DP�
(A ABBBLV��F�B�B �D(�A0�IP�XN`OXAPh
0A(A BBBC(`V����E�A�D Y
AAE8�Vp	���F�E�D �A(�D0~
(D ABBA�V4
��"E�\H�VH
���B�E�B �B(�A0�D8�D��
8A0A(B BBBD@0W����B�M�A �B
ABKN
ABGFAB(tW���E�D�D U
AAD�W���AAK�W���RE�o
A �W����E�D j
AD �Wp
���E�D j
AD  X�
���E�D j
AD DX����E�D h
AF hX���E�D h
AF �X����E�D j
AD �X,���E�D j
AD �X����E�D j
ADL�XD���F�B�E �B(�A0�D8�I�
8A0A(B BBBH$zRx��������,-+���(�Y����E�D�D@|
AAE8�YL���F�B�D �D(�G@�
(A ABBG8�Y���\F�E�A �A(�IP'
(A ABBE8(Z���\F�E�A �A(�IP'
(A ABBE8dZ����F�E�D �A(�I`Q
(A ABBH8�Z|���F�E�D �A(�I`Q
(A ABBH8�Z"���F�E�D �A(�IP�
(A ABBFL[d%��WF�B�E �B(�D0�A8�F��
8A0A(B BBBD5�)��m(|[`*���E�A�D N
DAC�[�*��~E�h�[X.��HO4�[`.���E�D�G0{
DAH[
DAA\�.��qH x
H`
A(4\/���E�D�D ~
DAH`\�/��GH k
A|\�/��AH e
A�\�/���L���\�0��	�\�0��2E�e(�\�0���A�I�D0�
DAA8]l1���F�E�A �A(�DP�
(A ABBE(L] 2��cE�G�G t
CAE(x]d2���A�D�D d
FAD�]�2��	�]�2��HO�]�2��0�]�2���F�D�D �G0�
 AABE(^d4��ME�A�N f
DAA(D^�4��ME�A�N f
DAAp^�4��2Hi �^�4���E�D n
AH$�^`5��<A�H�D iDA0�^x5���F�C�A �G0�
 AABG0_6���B�K�D �GPf
 AABF8<_�6��IF�E�E �D(�K0�^(A BBB8x_�6��IF�E�E �D(�K0�^(A BBB�_�6��VH M �_07���E�I T
AE �_�7���E�I T
AE,`8���F�J�D �^
ABK$D`h8���E�A�D0�AA@l`�8��(F�B�B �D(�D0�D@�
0A(A BBBE(�`�9���E�D�D@�
AAJ0�`�:���F�D�C �D`�
 AABI(a;���E�E�G@�
AAB@<a�;���F�E�E �A(�C0�G@�
0A(A BBBB0�a=��1F�A�D �G0�
 AABF0�a>��YF�A�D �G0�
 AABHH�aD?���F�B�L �B(�A0�F8�G`3
8A0A(B BBBG4b�A��(HXHLb�A���F�I�A �A(�D0d
(D ABBFD(A ABB,�bB��F�H�A ��
ABF�b�G��LHu
CG�bH��LHu
CGcDH��DHl
DG(ctH��AAMDcxH��AAM`c|H��AAK|c�H��qH0^
A�c�H��qH0^
A�cHI��sH `
A(�c�I���E�A�G0a
AAA�c J��2H]
HdDJ��2H]
H(4dhJ���E�D�D |
DAA`d�J��7Hc
G|dK��2H]
H4�d$K���E�A�D v
DAKk
DAA�d|K��GHe
KI
A�d�K��2H]
HLe�K���F�B�A �A(�D0k
(D ABBFD
(G DBBA4\e0L��dE�A�D x
DAII
DAA�ehL��GHe
KI
A �e�L��QE�s
HK
A0�e�L���F�D�A �G0�
 AABEf�M��Cd[H$f�M���B�B�B �E(�A0�D8�Dp@
8A0A(B BBBBpf\P��T�fXP���B�B�E �B(�D0�D8�DP
XI`]K
8D0A(B BBBA8�f�R���F�E�A �D(�FP
(A ABBFzRx�P����$a��vLg�S��&E�\8hg�S���F�E�A �D(�FP
(A ABBF�k��v�g$U��&E�\(�g8U���E�C�G0r
AAE4h�U���F�A�A �i
ABDiAB(8h$V��kE�A�N |
AAA8dhhV���F�B�A �D(�D@�
(A ABBF(�h,X��xE�J�D J
DAA(�h�X��uE�A�D N
DAC(�h�X��VE�A�Q k
DAA($iY��kE�A�N |
AAAxPiLY��gB�B�B �B(�A0�A8�DP_
8A0A(B BBBI�
8C0A(B BBBHa
8A0A(B BBBE,�i@Z���F�A�D �U
FBAH�i�Z��:F�B�E �E(�A0�A8�Fp�
8A0A(B BBBD zRx�p������(���L�j\\���B�E�B �E(�D0�A8�F��
8A0A(B BBBI�DD����j�b���j�b��8k�b���
F�B�A �A(�D@B
(A ABBJ8Hk�m���F�H�D �A(�GPy
(A ABBG@�k8p��'F�F�A �D0z
 IABIO
 DABA0�k$q��1F�M�A ��
AIA�k0���	(l,���E�A�D0�
AAB(<l ����E�A�G d
DAJ0hl����GF�A�A �D0_
 DABF�lЅ��(�l܅���E�A�D 
AAE�lP���AAK�lT���iH V
Am����QHq
GG
E(4m��ZF�A�D �k
DBL`m����H �
G,|mЇ���F�A�D �F
DBI8�mp����F�B�D �A(�D@�
(A ABBA(�m$����E�A�D 
AAEn����vL�W(4n����_E�G�D@G
AAA`n,����	L��	|n���	(�n����E�H�D0�
AAB8�n��F�I�A �A(�DP%
(A ABBHH�n�����F�B�B �H(�A0�A8�DP�
8A0A(B BBBE4Do�����E�H�D E
DAEK
ADE,|o`����F�A�A �n
ABG0�o�eF�K�F �GP�
 AABC(�o,����E�A�D0U
AAAp����<E�c
A((pԝ��jE�M�D l
DAITp���6HU
App<���E���p@���	H�p<����F�B�B �E(�A0�I8�M@�
8D0A(B BBBA(�p����E�H�D0�
AAA,q�����F�A�A �s
ABB0Hq����F�D�D �F@�
 AABH|qp���AAF�qt���.E�c
A�q����AAK4�q�����E�K�D h
CAHn
AAA(r�dE�K�D m
DAAL4r8����F�I�A �A(�D0[
(D ABBGD
(A ABBE4�r����fE�A�J t
DAGI
FAA4�r����~E�K�D x
FAEI
CAA,�r���oF�A�D �C
ABA($sH���yF�A�K �s
ABAPs����OHe
E(ls��mF�A�K �u
ABA�s���OHe
E(�sH���mF�A�K �u
ABA�s����OHe
E(�s����_E�K�D h
DAA(t�OHe
E(Dt(���_E�K�D h
DAApt\���OHe
E(�t����NE�K�D o
DAA�t����2H]
HL�tا���F�B�B �B(�A0�A8�G@@HHP[8A0A(B BBB($u����E�H�D @
AAE(Pu|����F�D�A �z
ABH|u�QHq
GG
E(�u0����E�H�D x
AAE(�u�����E�H�D x
AAE(�u����jE�M�D l
DAI v<���6HU
A<v`���>E�`
AXv����EE�(tv����	H�v�����F�B�B �E(�A0�I8�M@�
8D0A(B BBBAH�v����F�B�B �E(�A0�I8�M@
8D0A(B BBBAL w|���&F�I�A �A(�D0k
(D ABBGQ
(A ABBI(pw\����E�H�D0n
AAA,�w��F�A�A �v
ABG0�w�����F�D�D �F@�
 AABHxܳ��AAFx��.E�c
A(8x�dE�K�D m
DAALdx8���F�I�A �A(�D0[
(D ABBGQ
(A ABBI(�x����E�H�D x
AAE(�xl����E�H�D x
AAE(y��E�H�D x
AAE8y4���AAK4Ty8���~E�K�D x
FAEI
CAA8�y����{F�L�D �A(�G0v
(D ABBA(�y��nF�A�K �s
ABA(�y���mF�A�K �u
ABA zL���GHe
KI
A(@z|���mF�A�K �u
ABAlz����GHe
KI
A(�z�_E�K�D h
DAA�z$���2H]
H(�zH����F�D�A �z
ABH{����QHq
GG
E {����6HU
A(<{ ���jE�M�D l
DAIh{d����E���{����	(�{�E�H�D0�
AAA4�{���E�H�D E
DAEK
ADE �{P����E�D r
AD, |�����F�A�A �n
ABG<P|�����F�B�K �D(�I�
(A ABBH8�|<���F�B�D �D(�FP�
(A ABBC�|��4�|���E�H�D y
DAIW
DAE}���JHc
G(4}����E�A�D0U
AAA`}L��AAK(|}P��MF�D�A �y
ABA(�}t��MF�D�A �y
ABA(�}���MF�D�A �y
ABA(~���MF�D�A �y
ABA<,~���xF�E�D �C(�D�
(A ABBB(l~ ���E�J�D V
DAA�~���<E�c
A�~���KE�m
A(�~���jE�M�D l
DAI�~ ��6HU
A(D���F�O�H ��HID���	(X���E�H�D0�
AAAL�����F�I�B �B(�A0�A8�G�F
8A0A(B BBBA,�����B�K�A �C
ABE���&E�`$ ���BE�A�G \JJ,H�D���F�A�A �n
ABG8x�����F�B�K �D(�I`k
(A ABBG��x��<E�c
AЀ���AAK(����_A�K�D e
GAE����.He00����ME�D�J X
CAAZAA0d����E�D `
GH|
FFV
DH�����QHq
GG
E����QHq
GG
E\؁D���F�B�E �B(�D0�A8�F���K�K�A�c
8A0A(B BBBK�\g��q0L�p��:F�A�F �JP�
 AABH(��|��jE�M�D l
DAI�����6HU
A(Ȃ���KE�H�D 'FH���	H����F�B�B �E(�A0�I8�M@�
8D0A(B BBBA(T�H���E�H�D0n
AAA(�����E�H�D0�
AAA,������F�A�A �v
ABG0܃`��F�D�D �F@�
 AABH���AAF(,���_E�K�D h
DAALX���F�I�A �A(�D0[
(D ABBGQ
(A ABBI4�����E�K�D x
FAEI
CAA8�,�{F�L�D �A(�G0v
(D ABBA(�p�yF�A�K �s
ABAH���OHe
E(d���_E�K�D h
DAA��,�OHe
E(��`��F�D�A �z
ABH(؅���E�H�D x
AAE(�H��E�H�D x
AAE0���.E�c
AL���dHq
GG
El��6HU
A��4�+E���H���D�	(̆@�!E�H�D0�
AABH��D��F�B�B �E(�A0�I8�M@�
8D0A(B BBBA,D����F�A�A �n
ABG(t�(�rE�K�D m
DAAL��|�F�I�A �A(�D0[
(D ABBGQ
(A ABBI�L�AAK(�P�mF�A�K �u
ABA8���GHe
KI
A(X���mF�A�K �u
ABA���2H]
H��,�<E�c
A(��P�jE�M�D l
DAI���VHb
A���dE�L $�(��E�G0Q
ABH���OE�Ed���HO|���	����HO����E�V0ĉ���F�D�D �D0e
 DABA0��T�F�D�D �D0e
 DABA,���CL�^
AH��AAKd��2H]
H(��,�bF�G�D �t
ABHL��p�F�B�B �E(�D0�A8�G��
8A0A(B BBBD(����VE�A�N h
DAG((���RF�A�D �q
ABAT�(�GHe
KI
At�X�2H]
H��|�2H]
H����:He
H\ȋ��AF�I�A �A(�D0l
(D ABBFQ
(A ABBID
(G DBBE@(�����4F�B�B �D(�D0�F`(
0A(A BBBH4l������E�K�D B
FACI
CAA�����AAF�����.E�c
A(܌ ���cE�A�J p
DAA(�d���cE�A�J p
DAA4�����MHg
AP����AAK(l���RF�A�D �q
ABA(�����SE�D�N q
DAAčH����E��
A����.E�c
A(����VF�G�A �q
ABF(,����VF�G�A �q
ABF(X�D���VF�G�A �q
ABF(��x���VF�G�A �q
ABF@������@F�B�B �A(�A0�Dp�
0A(A BBBD4�����^F�A�C �\
DBLbAB,����6HU
A,H��GF�I�O ��
FPEGNU�0����%g��`��7_��V���`x� o��Іy� ���З���������@�����j�0���@���p�n�����F���FS�������������������x��o
�130>
�R�@o��eD�x�`��`����@����������:�B�M�Z�*�_�q�z�������������������������#�3�A�M�[�k�|��I�I�I�I�IIJ:
�p�%x�%���o`�p�
_J�%@Y����8	���o�����o�o0����oj��%@:P:`:p:�:�:�:�:�:�:�:�:;; ;0;@;P;`;p;�;�;�;�;�;�;�;�;<< <0<@<P<`<p<�<�<�<�<�<�<�<�<== =0=@=P=`=p=�=�=�=�=�=�=�=�=>> >0>@>P>`>p>�>�>�>�>�>�>�>�>?? ?0?@?P?`?p?�?�?�?�?�?�?�?�?@@ @0@@@P@`@p@�@�@�@�@�@�@�@�@AA A0A@APA`ApA�A�A�A�A�A�A�A�ABB B0B@BPB`BpB�B�B�B�B�B�B�B�BCC C0C@CPC`CpC�C�C�C�C�C�C�C�CDD D0D@DPD`DpD�D�D�D�D�D�D�D�DEE E0E@EPE`EpE�E�E�E�E�E�E�E�EFF F0F@FPF`FpF�F�F�F�F�F�F�F�FGG G0G@GPG`GpG�G�G�G�G�G�G�G�GHH H0H@HPH`HpH�H�H�H�H�H�H�H�HII I0I@IPI`IpI�I�I�I�I�I�I�I�IJJ J0J@JPJ`JpJ�J�J�J�J�J�J�J�JKK K0K@KPK`KpK�K�K�K�K�K�K�K�KLL L0L@LPL`LpL�L�L�L�L�L�L�L�LMM M0M@MPM`MpM�M�M�M�M�M�M�M�MNN N0N@NPN`NpN�N�N�N�N�N�N�N�NOO O0O@OPO`OpO�O�O�O�O�O�O�O�OPP P0P@PPP`PpP�P�P�P�P�P�P�P�PQQ Q0Q@QPQ`QpQ�Q�Q�Q�Q�Q�Q�Q�QRR R0R@RPR`RpR�R�R�R�R�R�R�R�RSS S0S@SPS`SpS�S�S�S�S�S�S�S�STT T0T@TPT`TpT�T�T�T�T�T�T�T�TUU U0U@UPU`UpU�U�U�U�U�U�U�U�UVV V0V@VPV`VpV�V�V�V�V�V�V�V�VWW W0W@WPW`WpW�W�W�W�W�W�W�W�WXX X0X@XPX`XpX�X�X�X�X�X�X�X�XYY Y0Y@YPY`YpY�Y�Y�Y�Y�Y�Y�Y�YZZ Z0Z@ZPZ`ZpZ�Z�Z�Z�Z�Z�Z�Z�Z[[ [0[@[P[`[p[�[�[�[�[�[�[�[�[\\ \0\@\P\`\p\�\�\�\�\�\�\�\�\]] ]0]@]P]`]p]�]�]�]�]�]�]�]�]^^ ^0^@^P^`^p^�^�^�^�^�^�^�^�^__ _0_@_P_`_p_�_�_�_�_�_�_�_�_`` `0`@`P```p`�`�`�`�`�`�`�`�`aa a0a@aPa`apa�a�a�a�a�a�a�a�abb b0b@bPb`bpb�b�b�b�b�b�b�b�bcc c0c@cPc`cpc�c�c�c�c�c�c�c�cdd d0d@dPd`dpd�d�d�d�d�d�d�d�dee e0e@ePe`epe�e�e�e�e�e�e�e�eff f0f@fPf`fpf�f�f�f�f�f�f�f�fgg g0g@gPg`gpg�g�g�g�g�g�g�g�ghh h0h@hPh`hph�h�h�h�h�h�h�h�hii i0i@iPi`ipi�i�i�i�i�i�i�i�ijj j0j@jPj`jpj�j�j�j�j�j�j�j�jkk k0k@kPk`kpk�k�k�k�k�k�k�k�kll l0l@lPl`lpl�l�l�l�l�l�l�l�lmm m0m@mPm`mpm�m�m�m�m�m�m�m�mnn n0n@nPn`npn�n�n�n�n�n�n�n�noo o0o@oPo`opo�o�o�o�o�o�o�o�opp p0p@pPp`ppp�p�p�p�p�p�p�p�pqq q0q@qPq`qpq�q�q�q�q�q�q�q�qrr r0r@rPr`rpr�r�r�r�r�r�r�r�rss s0s@sPs`sps�s�s�s�s�s�s�s�stt t0t@tPt`tpt�t�t�t�t�t�t�t�tuu u0u@uPu`upu�u�u�u�uGA$3a1:��GA$3p1094@��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1094P���GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@�X�GA+GLIBCXX_ASSERTIONS
GA*FORTIFYP��GA+GLIBCXX_ASSERTIONSopenssl.so-2.7.8-141.el8.x86_64.debug�og�7zXZ�ִF!t/���g${]?�E�h=��ڊ�2N����<�����5��SS�w���3̠t��1?��IH�ȍ>yY�#�N6:e�)ʯ�k���P��kX�:�R�W��k��꧅��>���\�s��{h���	�k;,����1�th�ǜ`J\ �u^d���%a��-��/���,�8��pŌ;���1��s�����l�6���yV,��ɼ_�m��tR����r�	��_�&�=�k4��`wk�2=�SM>�/Eьp��
�jz'�p�|�9���������&���&9��q�p��%����w��$h��q$�PmH����n�8�H5YJ	�^��
�(��Df�k�V�"�N<I��Dgv��b�G��M��!2�~��*^4����Ļe��f]V]†�����MքaG�I���ɼ�I�_o��ު�RrPV��0P�<�she�)�Hy^S�ä���o����������*��|e'3N���b�Ė���F<,.;|�?J'�"^VEs8��$��A�^�)PB��bT��%s\+
&~l��](X6�Hj;��9�X���f|ٕ,��Klc���T�+zo֯Jܱ���ovj���~M�/�V%�+Ai>����85�Ly�q�|3vظ�N����\�d�8�
!)d�j%
P����w���W�}�(Y��@|s�)
G�����W����OU̅S ��fx|A��7t�W�o��<�A�ѓ\������J�a��y�Zv��O�N��������Y	�֓�M��d!?�}+�;Q.�TJ�,�ne��B4���E�ט�/�b�����%��S�=c9�	�X�����T������
վ�Yy�q�:�x����kG�v��eq�>P	�z�nƜ�)���pk.�^�kY㳥2К����T-_��Z�q�� q��ͳʿ�����~��v9F����v̶�h���:�Γ�����Bot!��Bj�D���^��~�N��Ѝ^2[�i馢��çC�����*�$4���n�hy�|�YD��*f�,��_'w�
	=!/��c����AO�8�"y3�]������z4�Y�r0��	(�ڢ㛡��;tA���}jjev}<P�8�3���m�m�q�����W(f�k�^E<�En����{��E�jZ��O���޽,���3/��(**y��<ߤ��[�)L�ov�h�j"xC��)X��U�<A�ݸ�tS�xV�s�����q�v9��2�a<+~�R%a��	.�z�]��yE�z��^{��'O1�"e�y[`��D���I̕�z�4i���޹��&�*��e)��|���H�1�N���?��16L�|J�ʗ�"1�S�´�"~���!�M�ݝ�303�s�V���J�
�Nz	�Z���5�G���tC&l��4ٸ훈>0Q Uhi�w����3}�������'zZg-��'���^�TUt6@���d��ա��L��T��9�Z�	>0	Va/���QgD?j�C�u���!�"���MJ\��FRh��9��YBF���m��t������6h��)�>��'\�iȵQ/O\�0�`;*7�(]��ve��Ak�-��t:�u*�.�� �̃�\��6Q�����M����BO9�p�g��f��[�q4=��E�M�Dg#{l���d����Xk��.���ɠ)��B���P?D*+��5���m\��cr�Z����:pŸ|ANq��2�i�uN�x����hu65���u����y���o�7t���0�5�b��]2qBb�j�>�5c�(w��G+d��!�{!�"��2H��1���\(�VlX8�[�g�l��}�!��E%6�>�b���u�d�&s�4�RQ3C�Xf��Gq������$������J��P��.�i��֤��w'���)s�&�ב+Lq�>śװC+ޯ:��V���;WZ�!@4LT�XG��s:��|�4�:~W�����8A�j�M��_��y2�;HK���Eˉ3@uF'l�/(��T�z>|�-�/-+���s(
�a�j����#�㋆�����&YwC�$M̥�_/�@���]4���0i�v��k���}@���a�Y�p+E�íf�XK��O�;@7� gm<���$E�XQ�DAj�>uKG��Vr�do�>�a�$^�X�|b��
��+˘�j䗺��{�o&���{差��dѧu�w4����
��{%�Fۢ[�1�x�1�K�b4M1¥|���'�󍅐��|h89`f"9w@y}��dJ+8>b-g5��t�"��"��{���S�����Z������lݭ'(fB��'pp��C�։��B��E�����{m���2�B��Ӓ	����Rp�]��T��x��x(��C��S�r�Z����E��ۡ�>t H������g�
Eɔߙo�7e'��]�g�:�8�PD����z5��s��W.d�j��ޝ��^��Jv�Għ ��@7*����t��>'-E;��k�YG>e��@u�
�M��!%:�@���E[K'9
��?�6�И��q��S�R7������g������Z�Au��j���9c��OӪ��>��Oa�ʋ��4���Z��H�XVa��0����;����Q<��1�ּ�7��p(��vC��/��	�d��U��>�e�Ge8�X��j��:;pQf&���"U�mR���YG�_Pً1bs&�"���9�����k��46ơ�x��&�EOmd�_��ܛ��*�˒-�%0�T��*�i8%O�w�t�Ip6nu�#7e$�f�һ�1L��^�LTi�\��o�3
ѱl���'�W
&������� ="������������#}��W�φ2��G��	��<�4>�vÆrD�ŧn"5�vw
Hl�RLs�Bj����j8އ�fJ�Fl��2ؗ��}'�u���=����,�?+��:�����ΆTW���4������!&5�MX�KV
z��;m$Y �i�t�ϷH�s��J�{%��:G���e�O���3���(R�$�(��u����ҟ���G�p�w�&��攅�áC&��e>=U�.�&�8BS�j�G�L$ę�:�.Q.�nh�Z� �Fs���!21؃����]��~&=[�	f�7yBB#Cߤ�TԲ��P)��'ꛞa!�A뷒z��z�ݣ����€���1�mȳ���B��LDA�4��_���o�!;ɜdKˍ1	2Fb�B_}�h٠�nT��r/�돣;!|��`cN�͏�7�D�e��"L8m�y��!j/H��u�Kn�)���L�2���6azOO�$33�	��a�lF��ώ��~N������e�\�[o�g��R6@U��H��즓c��+�)�u&-�h�]h�d<l51w�<���o��9�t��7�k��{%��L�#j��2w�TM�qԕ��mt@b.�_eKc\MN7����ר<a����	��������'��VCJ�v��(�KRڨyt��H߄�s�I�,=Oѱ�� 
�7Y$��� ��R���ĊX��8�-\©�AҐr�Dlvy�E��Z�(��	�O����A�
���b�Qs���,O�Ni��V�<�8�U�������X}qIB�ɩ�e�K7�^�����3IxO��q�ՙr)l�w�ё7x���^����`� �)Nj��~�\�+���k,�a*3��5hS�3�ϙ�yj��ہ��l�=���c[���d��ء�u��{e���4R7&�2-XF�
'(�@�QÍ6���St��Q��$�O侭��}�J�a���t�A����]������D�"=.;��Âu�GC:�q9�Ôc��d���2�N�#�
��T�Si"��]=ƥ���5Z7��O	"�v^IEͧ"�#�[L�OV��.��u�3M�a�Ý�,�Q��i��&��n�@Tr�eGo�o������4Y�	���G��^�-��:�/���d��o�3rT�,a�����cq�#�s
��iH�x���j7n����D�(�jd0�vsB*$�`O�n���a�U8αF:�U��啕�u�*H��ձ�pb��}�]Hd�Iv�BX���Z|XJ�g4�	�_H�`66�T����G�k���m���)Jv�24��­�	��yl�������ԃEAoYID�evy���g�O�?Ť��d�?h�N�<��%�V_J~b� ����3h���Fz�O2KF��V!�s�� �:&i�fO������P����xr�ˤT#B��^e��&I��$�c�5������U�F���_6�Sa7 �5�4�e;����?���R�L!�i�-r:p����f�
����_ï��o.��}�x�	�u�<u�H�p��cE0q�̗�?��R��df9�ʫn�SE�Q�?�����w*\�}��7�ˁ2o���
������q�y��l�"�;�1��b/�Z���T��𞍧��CPf/�X�BV�1�qblO��u0�&\�L�P%�or:�Z$��DQ-�e�R>6^�yρ�߱c��]������5���dE�~�s���"
�V������ھ,��=����f�
s�6�\�w�L5�L�
�����xUp�)P ���~�O!��&褫�``2���-={�a�%r�]"1e1U�٪:��3/:���Ud�xU|�Z��a�Q�`T�KK�@X�G�"����)>R�_W{�SѬ�A`�ݵ�����Ah���
(p��
�a.]k[��*��
��NƫPF��3$MG��N�?�?�5Be.��I�$�q�D�I�c�L�#�dn�fd
#���,\�[�?���:����c��gZ�D+x��ӗ�\�f�ٴ1�0>ͩ�1e��be]T[@c����֦�G��7V(Njw�������B��)63
�ы+�@"r|�J��Aщ�\Ү����&_:�n��D����g?1<�أ2�ܶ� &��ȍ�1R�
}^_:�ɇY��μ�,l�K��Ӹ��d�+�+>�Viɸ�\��#�@0압��Џ��ܢy��I��*v��´�'8$ό�W0a�wW|��K=�s@�y�5�$�,˼����0LJY��h�A;G����
����^�D���k�"��^6ȿ��.�#>�Mlyc��.Cx��9gUޮvbR��O��IJ�=��<e�ً5��/Q"����&��)r���$H:�bK�L�h��Vr�Y���+����)ԓW�|��r;m���	�Q-z�m];R�u�G#���O�&�(;��VX%���R
�P�x��Lc��>%]�@���Ѯ�ϐ�M_mP�%���@u����ּ�MSy�6생���v�n�D�%��5���p�
���g��FiG��d	>��!�1�-槔�K
��|�b6�cډ�y�O�t�Ϡ� Z�����&�I��|B������3R�B���ޙNs�����ոߢz�SWn�o�ކ�]oϹ��@��Fn�Y�_�[G���:����%/�t���O|�z‡~U����O��"+�� �:~��2�_�1��Og���`א�g�
,�+o<�5��t�\$mbp#��Rg���y7Kz��
�g����Fql�d!�}�Pb�Ҏ�
niN�r^��zWN�Y�(�(E(���wn~��ຟ���FSb�C�8���#���ჹKj���8���El�(8	YiJ��Hy�"9�Cl+,T)��x
�8e>����V������N�e��ղX��y�G5wJ5�Y2���]U���3E��_[z7K��'�|]�@��܋[�	��;#��^a�)RpZ���5[{��b��%�R�%�빦��}h�5#������
F_��R�M¬���!�3�	߻Ksb�DO���y�a,����kEVGpY���Y�f(?�_����0z����<��i��dC�0�SB���(���Gb�m��Q ��]#����;��bB���0;XuʯKp
9nׄ�V�����bOԛ�&�������qcЭtyZ����m�{��F��o�aD���w��><�/����,?�4"���#+�*�maqx�����%A"��2
��OL	�Lv�[��X�HM�eܝ9r���0��ñ<׏NH,�K���&�4�pGa�$,bg\Mcn��:�=�v'�c�$�zPi-}V�k��T�9����ڊ�RX\_m�O�����u4��J��6���MvR�l1L��5���S�aJ=�hLe-��ZJee�EOs8ȃ� �w65���T�	�m�j�&0�6�.2����2�̭�a�B�_/�Z�3S-m�̖�Ǫ�,�"�JN��]h8���w0�ꦕA	(
w8;ZH��������5�+��C蒉(>p�'�Y��y@�v��m�&�!�
ǎ�K�>�F�gi�QxyKp-
_��0y`�1� ��l�x�M�*��m�������z�3��fpׁ�+��-�7W�zӑd���d��k nC"��kٕ?��Da�P�3��ݙN �W3��X�~"�Y�c����:�ঘ6@��Hz�&�R��k�s�'+�� ���1�40��-�*�C��p�����M��k4;鍦�Z�O2�hG5M_@���!�����hW3��A��=����/���/��\�I.yp�/��3|�/�*�F�a��K9��Qt U��U�(�KO���[_�_e�OD�TE��=ד̧K�6�xZ*��3�+��S_!�
d�T��BF�B�n��є�ie.��Eb�G��~H��t��[�q�}ֽ������
�11�q�g�0E�_|�a��k�)�wj:���U����"�2�
��j�޸�K�q3�f��~�K�"!��6�R���E�Z�?�.+��;g:���,���@S��*��7�|��H��(�Z��]dW@;�KH<��L��v+�n��x�'��x��_v�CUZ���r�(Ϳ˫��E^L��8��z����P2�w�n�Fy�Jpف�3��i��%K��1�V�:�3��?B�]��
ܵiҦ饕���ላ@���+r*����f�sGY�I���.y!�9�����3=�aW%"g���QBoT-yk������1~k�䑤'��`������`ǻb��bK7!�.c�*n'LԠ�����[fU��ŃAr.n�j��ȋn�|D^f�/��Xq�U`&R�TZ�f5ȵP�o���>�	yk�H�N���"%L?+҆�M?&-�|:�/����%�\X]L���-�D�-mMU������j|!�o��4	3��w��/ɑ��ӟ��=�e�1_K��|��2,�p���ף(�k��5̮k������>.����)Č�R5�^?���դ���-��<���H�18�.�(�>��*��b$^�-�o6�Mdbl)���P�(����:s/띞�|���=��Ļz �?.ӄ�J
fȞSY���~L�ș߭9x���V3�Ͳ8�R���!�$2���u�8�����+��fJq`���l��A�ce���i/��s~ӔA}��Z��)�A�piN\u��!�}����ʦ�6%lt
��KM�w8����BMl�%�3���
j��3���B*��`�A@<���?����q���o��tL�S�S��3!�������4%�ڑ����/,�?�h�hWI�!�"�d�^��R0�;(ojN9j����zs�i��/��FSi��/��ϖ!���N�P�Z �	�,��!�iÈ���_�SY��wp���5��{[�FZ9�	��n����,��7⸭ݐ���4��
��!�ӗ[X7�h���=>��.�Q��j����}�����!
��p�
��>QP���(cSD?8W�������Bq�nn�[�:������r��{�B�	��b^�g�C�ٚ9���Y����u%Ȋ*#�<8�����J;GƢ�/�
y��vg)?C�|�f"��Յ����j/B��3�T&�aG�(|�H�y�KW.+�%�8;�������b���h��g���*�6 ��������`�f3
� ���_\���O�:o���u9@`��p;-��q��_Q-{�D��+���v\X�#�Έfa	"�R2f��|�W<�n�Kg��l����F��τ�� �W.�~�/u5�Dn:Z��	�(ғ4���?�n5�^M�;i&!�kjV&��4b	T{�U�|/��B�;�5<^�H���j��@����ĕ���v`��ם�M�2s]}\��I	�?B0�
9��]�<���?G&�X��4a�7I7(h;'�������6jv���*������Iu(��O���_,����<+gR��.��3��: @�j���()���_�iVX@°��v�=꿍��t}����G�.<��w{�������N��l+�橶��^�6��Hv��Z��Wj^>7ڀ�/GD����[~�"���6�Z}
�
)4��;�,xJ,P�1q3C�'N�RD��'9�p�^���i��^�':a�P�2uKW��8����.�K_�N�W�4��q������ͺ���h���1
�8SqQ����a�9�o�p!X*�$�kEպ@!��:�~��<1lzu/�3�/}Ho5�P)��I����f��{����2Ü���]�k�t��:d��ؖ���I��O���	��{e�U�_�`J�ɿ*2����旆�pE^eMd�xi�15ے'zYn����E�Ƨ���M!2a�F����U�G5l��� 󥬼��&
P3�(��Lt��\�i��}�d7R0-�nޝ����$c�H{Y��o%M �G���]z�����^��Fi��V��P ��ɤZe�R7"�>���$ɸy/���Yj���:j�wGB��)_�;MG�>\ ����S��-��pP_��,���X(��N�aa��)���'
���T���'��f�7���Ƹ*�̾�����7���U�>|tR)邠@�F�]2SVLXRb,"}�1��:77�\8}`�0�{�@����� ����7�S�R��܍�:���F�mc�2s��a�E�p�ɥ���,�S�n��	�)4���]A`�UWc�[�K��[�Rlj�I��g�Y��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``,(��@h0�p�p_J8���o0�0��E���o�����T����8^B����@Yh::c0:0:�;n�u�u�;w@�@��}��
��� V �  <�`.`.x��ؽؽ �p�%p��x�%x����%�� ���%�����%��`��%����%�� ��f�d
<,h�$$'+PKl.�Z}�X{HVHV#ruby/bigdecimal-2.0.0/bigdecimal.sonuȯ��ELF> -@�N@8	@P0P0 �<�<!�<!x� h=h=!h=!��888$$000000  S�td000000  P�tdppp��Q�tdR�td�<�<!�<!ppGNUj7����h�	Kѝ^z��
�nKl�Ah@lqBE��|��X��=��|�!i��؁�9�w�qXF��Z��-E� &;���nZj����K���0~��v
&4�W�Gs� >�����^��V"\��p"�"���1@~�����Jg��T�e�"�, E���%F"��w#�Q��C!o D!�����(D!� d�$D!UC!�C!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegOne_ABCED9B4_CE73__00400511F31Druby_xfreerb_thread_currentrb_thread_local_asetrb_inspectrb_str_duprb_str_catrb_exc_new_strrb_exc_raiserb_obj_classrb_class_nameruby_xmallocmemsetstrlenmemmove__sprintf_chkrb_thread_local_arefrb_num2ushortrb_id2symrb_hash_lookup2rb_check_string_typestrncasecmprb_eArgErrorrb_raiserb_sym2strrb_yieldrb_protectrb_jump_tag__stack_chk_failrb_num2ulongrb_uint2bigrb_eFloatDomainErrorrb_fatalmemcpyrb_bugruby_xreallocrb_check_typeddatarb_keyword_given_prb_num2intrb_empty_keyword_given_prb_free_tmp_bufferrb_fix2intrb_error_arityrb_big_packrb_sym2idrb_eTypeErrorrmpd_parse_special_stringstrncmprb_str_tmp_newrb_str_new_cstrrb_str_resizerb_warnrb_data_typed_object_wraprb_freeze_singleton_classrb_string_value_cstrrb_cBigDecimalrb_eZeroDivErrorrb_num_coerce_binrb_intern2rb_assoc_newrb_rational_numrb_rational_denrb_typeddata_is_kind_ofrb_big2strrb_float_valuerb_funcallvrb_int2bigrb_str_new__errno_locationruby_strtodrb_float_newrb_ary_new_caparb_ary_pushrb_Rationalrb_memhashrb_num_coerce_reloprb_num_coerce_cmprb_eMathDomainErrorrb_big_cmpruby_snprintfrb_num2longsqrtrb_opts_exception_prb_cFalseClassrb_extract_keywordsrb_check_convert_typerb_cFloatrb_cIntegerrb_cSymbolrb_cTrueClassrb_cNilClassrb_alloc_tmp_buffer_with_countrb_hash_newrb_check_hash_typeInit_bigdecimalrb_cNumericrb_define_classrb_undef_methodrb_str_new_staticrb_define_constrb_define_modulerb_mBigMathrb_thread_check_intsroundrb_dbl2bigrb_define_global_functionrb_define_methodrb_define_singleton_methodlibruby.so.2.7libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.3.4GLIBC_2.14GLIBC_2.4/opt/alt/ruby27/lib64� ui	��ti	�����ii
�ui	��<!�.�<!�.�<!�<!�<!��<!��<!�=! =!�	0=!p08=!�.X?!`?!h?!qp?!x?!�?!�?!m�?!!�?!r�?!1�?!3�?!6�?!>�?!J�?!Y�?!\�?!]�?!`�?!c�?!j@! @!(@!0@!8@!@@!H@!P@!	X@!
`@!h@!
p@!x@!�@!�@!�@!�@!�@!�@!�@!�@!�@!�@!�@!�@!�@!�@! �@!"�@!#A!$A!%A!&A!' A!((A!)0A!*8A!+@A!,HA!-PA!.XA!/`A!0hA!2pA!4xA!5�A!7�A!8�A!9�A!:�A!;�A!<�A!=�A!?�A!@�A!A�A!B�A!C�A!D�A!E�A!F�A!GB!pB!HB!IB!K B!L(B!M0B!N8B!O@B!PHB!QPB!RXB!S`B!ThB!UpB!VxB!W�B!X�B!Z�B![�B!^�B!_�B!a�B!b�B!c�B!d�B!e�B!f�B!g�B!h�B!i�B!k��H��H�!!H��t��H����5r!�%s!��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1�������%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!D���%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!D���%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!D���%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!DH�=�1����H��H�=��1�L�D$L�L$H�$�#���H��H�$L�L$L�D$��=L����H�=Q�1����H�%1�H�='�������H�D$ 遡1�H�=������H�D$ �i�H�$H�=*�1��T$���H�$�T$�w�H�$H�=G�1��T$���H�$�T$H��t	�։��Y�H�D$ I�$H�D$�]��H�=�!H��!H9�tH�&!H��t	�����H�=�!H�5�!H)�H��H��H��?H�H�tH�U!H��t��fD�����=m!u+UH�=B!H��tH�=�
!����d����E!]������w������H�GH��(�ff.�@���!�fD��H�����B f���*f����f�����f����f�����L�Bf�H�M��t6�J$f���H*��Y
���X�I��v�J(f���H*��Y
u��X�H�RH��H�f��fW�������H�1�H���H��H��H��f���!f.��ztH�}!��^����!�1�H��H���H��H��H���H������H��f���H��t���f��ff.�@US��H��H�-q!������H��H��[H�TH��]����O f��t'f��tQf������y1�f���t�f.��NaN��@f��uJ������t|�0.0�Ã�t[��u�+H��H�Infinity�FH�����-0.0��F�H�-InfinitH��yf�F��@� H�����+0.0��F�� 0.0��F�SH��H��@��u	H�����u4����H�������!H�5��H���)���H��H���.���H��������H���)���H����@SH������H��1�H������[��H��tS�G �Pf��w�I� H��s�DH�W�>FH�D�u�H�OH�D�H��xH9�s�H)�H��H��@��f�H��H��H��H)�H��ff.�@AVAUATI��USH������H��t^I�����tTI�>(1�1��1fD<.tD���<Et3H��H�jL9�w@L9�s!H���H��t<-w�I��H�js�L9�r�[]A\A]A^ÐH�j1����I��H�{H��L��H)�H������ 1��AWI��A��AVAUATUSH��H��(H�T$��H�<$H�t$�4�����u0f�{ x8A����H�D$A��u+H��H�@�+��H��([]A\A]A^A_�A�-I�A�0.L�x�E1�f�H�$A�����H�@H�D$H���?f�H�$�	��F�l�$�D��1���A��A������tOH��t
�A9�r�D��1�H�
d�L����H�����I��1��y���L����1�I��f.�I��L9d$�q���H�4$A��H�F�N$L������w���������I�����9�w�@��0uI��A�A��0t�1�H�
���L��H��������H�|$�����H�t$H�|$H��([]A\A]A^A_�{���H�t$H�F� ���H�4$�.H�F�N$L�������U�����SH��!���H��H�����H��tH��[���f�H�a!���H��H����[�ff.�f�H���VUSH��H��H�=�
!����H�ߺ4H���a�H��H��4��H����<�2�u$H�����tH��H��������H�݃�tH�����H��H���H��H��� ��H�BH�ZH����H��u8�H�5 �H���������H�5��H��������H�	!H�8H��tnH��H�5�1����DH��[]���DH��H�Z��H���w����H�5��H���g��u��H��[]���;���H�5��1��z�f.�H����H��H��H����f.�H�i!H��H�8�H���fD�듐��f�SH�h!���H��H���h�H��tH��[��f�H�9!��H��H���t�1�[���USH��dH�%(H�D$1����H�T$�H�=�!�������H���^����|$��uH�L$dH3%(H��uH��[]�����B�f�SH��!��H��H����H��t"�tH�[�f�H��[�'��H�Y!����H��H����1�[�ATUSH�����H��H��������?H9�w*H�\L�%!��H��L��H���c�H��[]A\�H���p�H����ff.���USH��dH�%(H�D$1��!���H�T$�H�=X!H����H��H���]����|$��uH�L$dH3%(H��uH��[]������PXH�5g�H��H�!H��H�81���ff.�@H���G f��tf��t-f���tH������H�=��������H�=�������H�=������ff.�@PXH�5��H��H��!H�81���f�UH��S��H���P���f�� t*f��t5H�H��rH��H�=��1����@H�������H��1�[]��S�G H��f��tf��tMf���t'H�[�f�H�5����o���H�[�f.�H�5���O���H�[�f.�H�5����/���H�[�f.��G �Pf��w�IH�����H��s��F �Pf��vKH�WH�NH�GH9FHCFH9�t�H��H)�H)�HH�H�s�H��H�5������H��H���IH�����H��s��D�F f�����R f����f���@��f��A��D	�f��tef���t_@����������L���f����A��G$H�5��H�GfD�G �����@��tS������t���f����f��~N��1��G$H�5��H�Gf�O ����@������tbf���_���f�������G$H�Gf�w H�5!���W������f.��Hf�����d���f�f����f�����Df������<���f.��Jf�����$����f��~Lf��~L��G$H�Gf�W �a���f�f��~f��������f���$�������f��~�������G$H�Gf�G ����ff.�f�H�OL�1H��~;H��~'I�@H����H��������H�H��H����L�G��DH��y�I�@H����H�AH��v�H��H�H��H���f� �G$H�G��f�w H�5�������f�M����H��������H�I��H���N���fDf� ~1��G$H�Gf�W H�5H���h����������G$H�Gf�G ��fDM��~#H��������H�I��H���
����'���DH��H�I��H���������f.�H��H�I��H��������:���f������f�O ���f��O �Af��w#�]H��s���G$1�H�G�f�H�W�f.�H�B�D�D�$E��u2H��H��u��G$H�Gf��~f�1�f�W �f.��w$H�W��urU1�SH���H��H�u�L�$��t�H��tH)�H��H��H�W�����uH��[]�f������f�G 1��H�CH�t�(H�{$H�������ʸ�ff.�f�SH��H��uH�GH�p�H��tHH���A$�P�Q$���ɚ;veH�����D�$�P�T�$H�����ɚ;vA-�ɚ;�D�(H���uھH��������t�C$�H�C[�H���f�H���X����[ÐAWA��AVAUA��ATUSH��HH�GL�$�I���L��L�_H�r�q�qH��L��H��?H)�1�I��H�T$I9��y�D�$A�H�JH��L���$H��H��I��H)�H�D$8I)�L��H)�H�D$M����E1�1��f��؍�H���L9�|�k�d1҉D$�$��A��1������D$$D������H���������A)�I9�vT�t�$��K���	���i�ʚ;9����K�#D�t�$���	����i�ʚ;9���H��I9�wً$1�1�J�|$L�D$0�t$H�D$L�L$(�$H��������fA��L�L$(L�D$0wiH��E��Jc�H�>��@f� �G$H�G�NA�1�fD� H��H[]A\A]A^A_�D�$E��t1�f�} ���DM����1�D��H���I9�}�ɚ;�nM����f�} H�E�E$H�E�7�f�M H��H�EM��tYH���8��8��L��H��H��HUH��I)�t8�U$1ɾ�KfD��ҁ��ɚ;v��	H�E����H��I9�uۉU$H��H�[]A\A]A^A_�@�F�f������L�_1�M������G$I��L�\$�A��E1�A��$H�D$8H�D$�t���fDH�D$1�J�|$L�$L�D$H��������fA��L�$L�D$�����H�W�E��Jc�H�>��D�����f�U ����f�B�\�$H���������D$$A��w�B���D�\$$E���4���@��M���-����f.�A��������@B�D�$H�t$H���Z����O���DA�����1�fD�w ���fDD�4$�D$$E1��D$
����<$�������f�} ������D�,$E��������Y����A���N����x����t$$���<���H�|$8u1M���d���B�D� �������Q���A�������8��������؃������#���ff.�D�W$E��tWH�GA�����H��H��L��I)�D��A����A��	w	�D�щ�I��A�����	w�I�P������f�1��ff.�f�ATUH��SH�����H��I�������tbM��tMH��t@H��H���8��8��I�T$H��H��1�H��H9�w&��[L��H����]A\�-���DH�]�f�1�[]A\�f��������f�AVA��AUI��ATA��UH��S�G�L��H�����I�����u5E��t0f��w*H���Hc�H�>��f�A����vf�} x []A\A]A^��A����v�f�} ~�H��L�����[H��]A\A]A^����DA���E�#w��DA���d�w��DA���E�#w�A��e�A����w�A��t���A����w��j���f.�f.��&f(�fT
:�f.
����f��f.��ATf(�USH�� f/�wfW
���%��f/������1���^�H��f/�s�L�g1�H��H�$�T$J���L$�D$���L$f���T$f/���M����1���I9����Y�f��H,ɉʉL�$H���H*��\�f/�w�I9�vd�l$L�`�����f/�vj�YʺL�cf�S H�k�H,ɋT�$�f������G$H�Gf�O �f��t$1�I�D$�f/��������Y�f�S 1�L�cH�k�H,�M��u�H�� H��1�[]A\�G����f/��G$H�GvA�fD�G ������f�w �fD�%��1���f/��j���@�Y�H��f/�w��S���DE1��G$H�GfD�O �1�����AVAUATUS�F H��f������f����f������Pf����H�VL�nI��H�W���f����OŅ���L9oLFo��M�������L�oI��f�G ����
t.M9l$��M�1�A�L$$M��tA�T$ L��H�����L�kK�D�[]A\A]A^����C$��f��H�CN��~S�1�f�s []A\A]A^���G$1�H�G1�f�{ []A\A]A^�H�$H�v$L������O��������1�f�K �t�������G$��f��H�GN��~+��f�W �<���1�H�����L�k�$���D�����f�G �����DATI��UH��S�Ӻ
�:���H��v��L��[H��]A\���f�[1�]A\�f��N$��tyH�FH��~pH�V�N H9�ssH)�H�GH�GH9�HG�1�f����������H�Wf�G H�FH��tH��H�H��L���L�$A�L�$H��H9�u���f�����fD�G$H�Gf��~�f�W �f������f�G �fDAWI��AVI��AUM��ATI��UH��SH��L�D$�)�I�WH�|$P�E$H�L$XI�^H�uI+_L�M9VMCV��H�~�L�D$I9���H��I�uH���8��8��H��I�FH��H;EsRI�$I�OH�EH�4H9���H�KH9���H)�H�H�I�H�H9���A�D� H�L$XM�U��/@I�<$H9�r�A�D� H�L$P�뛐I�I�FI��I�$M�UI�FL�UH��H�E����H�����HD�H��H��[]A\A]A^A_�DI�M�U��I�����M�U�AWAVAUA��ATI��UH��SH��H��HdH�%(H�D$81������Ƀ���1҅�tOA�T$ �M �r�A��f���uef�����C$H�Cf���tA��fD�[ @H�\$8dH3%(H���qH��H[]A\A]A^A_�f.�f���_E1�A���H�EA��G�t6�I9D$���*M�D$H�}I9�H��IF�H��t5�E$A9D$$�|��1��f�D�\�$E9\�$wd��H��H9�u�I9�wP��A��1�f��M���@���f��NǍDp���u+A��C$�	H�CfD�S ����@M��1�f��A���E1�f��fD�K A��H�L$ G�|?�E��E�|G�H�D$fE����PL��H��H��H�D$ PL�L$@L�D$8���_AX�D$H����L�D$(I������L$L$H�|$ H�t$0�L$M��t3J�H9�r�f�J�H9���I��H��B�T�$�T�$M��u�H9��dI��I)�I�H���D�$I9�u�1�H����H��I��A�D�$B�D�$1�H��tnJ�L� H���f��1�H��H��tKH��AD�$=�ɚ;v�-ʚ;����DD���f��DN�A����v���fD�k ��{���I)�M��tBD� 1�fA����������f�C H�C1�H��t�T� �L$1�H���9���H�CH���,���@PH��H��L��H�D$ PL�L$@L�D$8�	���Y^�D$H����!L�D$(I�����t$�L$�9�r)�1҉t$H�|$ J�4H�L$0H9��nM��tMA�ʚ;A���fDJ�4A�H9���I��D��H��B+T�$D)҉T�$M��uѺH��H9�v'H��A�ʚ;D��H��H��)к�D�$H9�r�E1�H9���@H��tFH��H)�L��H���@)�1�A�t�$H��t"H��A�t�$9�s�ɚ;���f�H)�H��t)T� M9���1�fA�} E�����D�D��1�A����������f�C �E���D��H��H������H�CH���}���DI��L���p���D�L��H�����H�CH���K���vfDH��H��A�D�$�D�$H9�r�M�������L��L��H��H��L�<�L��M�I��!@)кʚ;D)�A�D�$H����A�D� H��D�L�$E�D9�r�)�1�D)����8E1��H��H��A�T�$�T�$H9�r�M���H��L�L� L��L)�M�T�1��f.�A�1�I��H��t*A�T� H��T�$�=�ɚ;v�-ʚ;A����DL)�L)�I���B���f.�L)�L)����DfA�|$ ~w�f�S ���f��L��H���0����p����L��H���������H��H9����������D���_����y���f.������f�C �,���I��1�������AWE1�I��AVAUATI�̹UH��SH��H��X�F$H�FfD�V L��H�T$@L���������A�W A�L$ �r�A��f�����f���f���`f���`��E$H�Ef�E H�|$@A�D$ f� �f������C$H�Cf�S f�H�EH��H��X[]A\A]A^A_�f����I�D$H�D$HH����H�EH�|$@H�D$0H�wH�CH�D$H9��H���C$H����H�V��DH�ȋL� �L�$H�HH9�u�H�D$H9T$v�H���D� H9�u�1�H�|$0H�T$0�<@H���D� H9�u�A�D$$H�D$8Hi�ʚ;H�|$HH�D$ H�D$v(A�D$(H�D$8HD$ 1�H�t$ H�|$H��H�H�D$H�D$H�t$0H��H9�HG�H�D$H����H�D$HA�I�SZ��/�DH�<�L�p�H�|$(f�J��I�uH�<�G$����Hi�ʚ;D�_(L�H9D$ ��H9D$��H9t$0�%1�H�t$8D
(M�L$M�I��L;L$����H�|$(L��B�L�$E1�H��L��L��M��GfD��ʚ;F�D)�L�$H���L�$E��tD9�se��ʚ;D)�A��L�$L��H)�I9�r\A�t� 1�I��H���ɚ;vH��H��	H��I��H���Љ�Hi�ʚ;H)։�H9�r�)�A��fDL��D)�E1�H)��L�$I9�s�D)��L�$B�D�$J�T� =�ɚ;v-ʚ;H���B�B���B=�ɚ;w�L;l$�����H�D$0�H��H�EH�D$@H�@H�E�N����]H��X1�[]A\A]A^A_�DI��L;l$�B����1�H�t$D
$I��I�D$M�L����L�\$HI�UI��v<�,A9|$,�B���r,M��K�<+I��O����E�T�$D9T�$����w	H��H9�u�I�D$L�P�O�LL9L$����L)�L��1�M���&fDʚ;�D)��D�$H��L��H)�L9�w A�|� �D�$D�7D9�r�)�1�)���fDH�A$���A$���f���`f���`A��E$H�EfD�E H�5����j��H��X[H�]A\A]A^A_�I�t$H��H������������H�|$@A�D$ f� �Lf������������f�E H���O�H�D$L�|$@H�߾H�CI�GH�C�|����.���1�fA� H����������f�C ������f�������������E$H�Ef�u ���A�|$$����I�|$�����L�|$@1�f��H���T�L����fA� �z���������C$H�Cf�K �~���f�������������E$H�Ef�} ���E1��E$H�5��H�EfD�M ����H��1���f������f�������������������A�D$$H�D$8Hi�ʚ;H�|$HH�D$ �������f���H����USH��H��H�FH�4�$�v��H�SH��H�PH�CH��H�EH�CH�E�C f�E �C"f�E"u
H��H��[]�H�}$H�s$���H��H��[]��ATUH��H�5�� SH���&��H�5�� H��I�����H9�tH��L���T���H�C H��[]A\����ATUSH��dH�%(H�D$1�����H�T$�H�=�� ���W��H������wIL�%:� �����H�TL��H���z���|$��u.H�L$dH3%(H��uH��[]A\�fD�[����������ff.�@��ATI��U��SH��dH�%(H�D$1��
��H�H�\�N��H�$��tr����tA1�M�$$����H������u$I��tL��A��u\�������Hc����H�L$dH3%(H����H��[]A\���;����x4H�$u�H��t�H���d���f������f�H���H���s���H�<$tH���4���1�������H��� H�5�H�81��n���I��f�H��dH�%(H�D$1�@��tv����u^H��H���H��t1������t'@��t!�����
u0H�����H�$H�Ѓ�H�L$dH3%(u.H���@1���u�H�H��H�Ѓ���1�H�����t�����ff.�H��@����@������������H����@��tH��4������������H;�� ��H;y� ��H;d� ��H;O� ��H;:� ��H;%� ��H;� ��H;�� ��H;�� ��H;�� ��H;�� u/�H����H������C����^���Ѓ���v�H��� H�5V�H�81�����봐��f���f���f���y���fD��i���fD��AUI��ATUS��H��dH�%(H�D$1����H�$��������M�e��ug�L��A���������Ä��������e��H���+H�����Ѓ������?����H�\�
f�I�m��~�H�<$tH��������������������{������H����H��t
H���b��t�‰ǃ���H����D�����������t��%����H����E���������t��%����H����E���������t��%���H����E��i���t����H�\�f.���H�\H�L$dH3%(H����H��[]A\A]�fD���������H�$M�e���uH���F���H������9���I�m��~����f.�H�-A� ��H�\���H��H��H���~���a���H�j� H�5��H�81����H��� H�5K�H�81�������@��AVH�5f�E1�AUATL�%�� UH��M��S�H��H�������t)I��I��I����I�]I�uH��H���t����u�H�T�
��t@����	��v�� u�H���
��u�(�[��K�vA�T�H�@�@$H�@��t-��t�����f�P �	�1�[]A\A]A^þf�p ��1�f�H ��f�AWA��AVAUATUH��SH��H��8�L$�0��H�}H���8��8��I��H��H��H��H��	I��I��H���n�H�މ���	��w�H�������	��v� t�#t]M��u0H��H�4$���H�4$H��I��tHH��8L��[]A\A]A^A_�fDH���8��8��I��L��H��H��H�BI9�LG��H���f�H��H�t$H�D$���H�x���H�t$L�D$H�H�D$ L�hH�$�� t	H�D$ L�h��P�A�E���/�$H��1��1�H��I�|I�>��$f���0��	�dH���LH��I�|H������&	E��uD��A��	A��v4�� t/��_u�H����L������9wI��r�E�����M��1�E1�L�l$�J�T%H�L$H���8��8��H��H��H��H��M��LD�I9�LB�J��$H�������<$H�L$I��L�p�@$H�@�A�fD�P I�@$1�H�S�H�L$H��L�$H�D$���H�L$L�$H���aH�D$�<-�SH�D$1�<+u	H���H9��0H�D$1�L�$I��������H�H��zDL��H�H��H���H��I��H��	��L�H��M��H�L��A��0Mc�M)�I9���H�L�X�H��/H����I9���H��H9��L��H��u�H�E1�1���<-������؉$H�F����DA�DE����E1�1�E1�E1�H�D$H��u	M����L�|$K�D
H�D$M�����L�A�
���.�OH�D$(E1�H�D$A�
���D��!�E1�1�E1�E�D��A��	A��v�� uH�t�H���ƒ�	��v� t�����E���_���H���T$(����>���M���5���f.�D�\$E���
���H������H�5�H��H�)� H�81�����E��u�J�<�$��1��I��L�p�@$H�@f�X ����$H��A�E<-��D$1�<+u	H���I���8��8��E1�H��A��1�G�\�f�L�L��H��?H��L1�H)�H��I��H��H��H��H��H9����$����H�t$1�H9���@�H9�v/H��w)1�D�<�A�D
H��H���DxЉH��wH9�w�H9���H��M��tXM�T�$1�fDL9��H���A�
H����<�A�H��H���Ly�A�
H��wL9�r�L9���I9���I�V�H��wI���B$��H���H��	u�B$L��I��?M�pL��H�r�q�qL�$H��1�L)ʃ|$��I�P������fA�@ ����L�$H�|$ 1�L�$�9���L�$����H��H��I9������1�����H��I��1�I9�������&����H���7����H������L�r����A�I��H�I!�M���hL�JL�XK�L
J�<I��H�L$�A�
��+����L�XH��J�<D�I�|1�D�E��tXE��uA�ƒ�	����A�� ��A��_��A�ƒ�0��	�wH��F�TH��I�|I��D�E��u�A��^���H���H�D$�������f�M��~;L��H�I��H����������H�|$L�$�$I��H�����H��H�I��H�����A�����fD�H ���H9�w�fD��tA�|
0��H��H9�r�M��t"��t1��	D��tA�<0��H��L9�r������_E���V�|$A�@$I�@���fA�x H�5���L�$���L�$���H���D$��������H��H��E1��I�|H�T$���tEE��uD��A��	A��vm�� th��_tB��0��	��H���LI��I�|H�����u�E1�1�E1�H�D$(���@M��tD�LD��A��0A��	v�E�������L�|$�1�L�l$M����H�|$L�$�$H��H���E���s���L�|$K�D
H�D$M����1�M��������|$A�@$I�@���fA�H �N���H�|$L�$�$I��H����H��tB�DA�ƒ�0��	�J���E�����L�|$�M��;���E1�1��`���E1�1�E1�E1�H�D$(H�D$�z��������fA�p ���������fA�P ���L�����H�t$L�$�$H�<.���M�������H��A�����H�D$(L����N�L��A�����1�E1�E1�H�D$�T���ff.�ATI��1�UH��H��H��� SH���a����L��H��H���Y�H�C H���u+H�����t"H��у���tH�р�H�{H�t��tH��[]A\�f�H��H�D$�3���H�D$��ff.����UH��SH��8H�t$H�|$dH�%(H�D$(1��T��������H����:����0��	��1��@H����:t��0��	��Hc�H��H�Q���u�H�S�H��	H��HG�H��H������H��H�H�D$H��v"H���8��8��H��H��H��H9WvH��H�W���H�t$(dH34%(u9H��8[]�1�H��H���k���H��H�H�D$��H�/� H�5��H�81�膵���a����AW�AVAUATUH��SH��H��HH�t$�M�����9H�D$�U �@ �Hf�������Jf������H�|$H�H�|$H���&L�eI���VH�|$L9���H�D$N�< H�CI��H��H�|$ H9��sH�EH��H�CH�D$H�p��������H�D$8H�D$f�} �@ ��f������������f�C N�,�1�H�{$L�����H�|$ L�{�sI�D$�L�t$ N�L+ E1�H�D$(H�D$I�SZ��/�DA��KH��H�D$I�G�H�D$0�M�~�L9l$��L�\$(L��H+|$H�D$I9���H�t$L�D�$�f�H��I��L9���A��t�$H��H��H��	H��I��H��H���ʉ�Hi�ʚ;H)�A1���ɚ;v���	��A����
i�ʚ;)�A�1��t�M��t�AA�L����A�A�=�ɚ;w%�z���f.��L�$щL�$���ɚ;�Z������	��A���i�ʚ;)��L�$H��H���u�H��I��L9��7���fDI��M��I��L9l$ ����H�|$8��H�����H�|$8�H���d��H���,���H�D$8H�@H��H[]H��A\A]A^A_�f���'f���'��C$�H�Cf�S H��H[]A\A]A^A_�K�<���H�56���I��H�EL��I�EH�D$H�p�<�����GL��茳��H��H1�[]A\A]A^A_�L��I��H�D$H��H�l$H�D$���H�|$�$����H������1�f��H��H���T��]��H�\$8����}$�����H�}�����f��H�t$H�����ҍT��!��H�\$8����f������������C$f�C �H�CH��H[]A\A]A^A_�H�D$0L)�L9l$(rL��I��H+|$����f�M��1�����f�������������j���1�H�����H�\$8�!���H�\$8L���%���AWAVAUI��ATI�ԺUSH��H�����H��hdH�%(H�D$X1��I��H�H�D$�؃���������H��1�H�������H��H����H�H�D$A�F f���+�K f���f����f������Qf�����H�5�� H�4$H�f����f�������f�����I�NI�FH�sH��?H1�H��?H)�IFH��H�CH1�H)�HCH�5��H9�HB�L�|�	L���[���K�|?H�5x�H��H�H�D$ H�$H��8���H��L��H��I��H�L��H�D$(�<��H�EH�5H�H�<�H�$H�H����1ɺH��I��H�L��L�L$H�D$0�l��L�L$H��L��L����������L��L��H������E L�L$��f���tfA�~ �C �<f���<M�$�I�mH�L$XdH3%(��H��h[]A\A]A^A_�H�����������������������I�FH�ߺH�4���H������f��t2f���t,��f�����H��� H�5�H�81�����fDH�-�� H�5Z��H�U���H�UH�5A�H��H�H�D$ ����H�I�$�I�]H�T$(����f�H�ߺ��.H��H���I���1�����f������H�P� L�ι����L���8��H��H������H�5]�H�<�H�$H�H������H��H��I��H�L��H�D$8���M�<$�M�u�e���H��� H�5	��H�H�$���fA�~ H��H�H�D$ ~Vf�{ ~V��E$H�Ef�U H�$H�5��H��w���H�I�,$I�E�H�T$(����Df�{ ~�������E$H�Ef�E ��H�5`������H�I�$�M�uH�T$ ���DH�50�����H�5�H��H�H�D$ H�$H��+������ff.����UH��SH��H��8dH�%(H�D$(1�H�L$H��H�$H�D$��H��u-�%H��H���}���H�t$(dH34%(u-H��8[]�fDH�$H�|$H�H�D$H�H�D$�R������K���ff.���UH��SH��H��HdH�%(H�D$81�H�L$H��H�$H�D$�R���H��uUH��� H��t)H��H���֮��H�L$8dH3%(ueH��H[]���H�=Ջ�ǯ��H��H�]� �H�$H�|$H�H�D$H�H�D$芽��H�<$H���~���H��H���s�����l���ff.��AWAVI��AUI��ATA�4U��SH�@H�H��dH�%(H��$�1�H�D6H�$A��tRA��� D�������I��tKA��tEI��4t?A�������w1H�f�Hc�H�>���I�����u�I��t	M��u�@����1�H��$�dH3%(��H��[]A\A]A^A_�DM����I��4�MM9�t�L���0�����H�����H������H��H��t�L�<$H����L��H�T$�m���H�T$H�D$H������I��I���^L��A��������Lc�M������H�t$L���7I�����DH�59� L���A���������I�F �����
L���Ӫ��H�D$8H�XH� tH�XH���e���H��H�x
H�O� H��?����f.�M����I�������L���u������f(�fT
�f.���f��f.�z��H�5� L��1�1�����I������@H�\$pM��1�H��I��H�
2�����H��� H�޿H�������fDH�t$H�L$0H�T$(H��H�D$(����H����H�H� H���gH�t$L���J���I���:���f�1�L�L$�d���H�
%� L�L$H�5H�H�D$H�I�y��L���H�����I��H�H�D$@���H�|$�H�����I��H�H�D$H���I�WH��H�H�rH�L$H�D$PH�AIFH�
�� H��H9�H�HF�H�5��H�|�	H��w�H�L$L��H�H��H�T$XL���|��H�|$蒷���=���L�L$L����L������L���R���I���2���f.�����J���fDL��H�D$���H�T$I�����fDM�������H�=����H��H��� �y���H��� L��H�8�ޯ��fDH�|$(辸��H���vI�����������L��让��H�5W�H��H�ͽ H�81�裥��H�a� 1���$H��E��$H��H�$����H�$����
Òf��H� � �^�H�f/�wH�5;�L�����y���H�50�L������e�������y���f���UH��S��H��HdH�%(H�D$81��ܦ��H�D$������� ����H��H������6���H�5��H��H�H��H�D$����1�H�p2����H�D$H�D$H��� tH�D$H�XH�EH�
r��H��H�����L��1�聩��H������1�1�H��H�4�ٯ��H������H�|$H���d���H�D$H�L$8dH3%(ujH��H[]��H�\$H���|���f��K�����x"H�D$��H���
���H�|$�j������H�|$t
H�|$�S����1������耤�����H��H����������P 1�f��tf��t�f���tH���fD1�H���f����H��H���������P �f��t1�f�����H�D��H���D��H���H������w���f�x H�H��������H���H������G���H�@ H��H�D����H�����H���������p$��tFH�@��H���������H��H��H����w0�H��H��H��H��H9�w�Hc�H�L	H��H���DH�H�L��ff.�@��S�H�����H��@dH�%(H�D$81��v���H�5фH��H�H��H�D$�L���1�H���R���H�D$H�D$H��� upH�t$H��1�1�H���K���H�D$H��� u>H�|$H���`���H�|$H���â��H�D$H�L$8dH3%(u)H��@[��H�D$H�x�DH�D$H�p�� �����S�H�����H������@ ��f����HD�H��[�ff.���H���H������g����@ ����f��H�H�����ff.���U�H�����SH��8dH�%(H�D$(1�����H�5��H��H�H�$H�CH�<�H�=� H�H��*�H��H��H�H��H�D$����H�D$(dH3%(uH��8H��[]�����������U�H�����SH��8dH�%(H�D$(1����H�5��H��H�H�$H�CH�<�H��� H�H���1ɺH��H��H�H��H�D$�
��H�D$(dH3%(uH��8H��[]�����z���f.���U�H�����SH��8dH�%(H�D$(1����H�5U�H��H�H�$H�EH�<�H�
� H�H����H��H��H�H��H�D$����C ��f��1�)�f�C H�D$(dH3%(uH��8H��[]�ϱ���ʟ��f.���AT�H�����USH��0dH�%(H�D$(1��3�H�t$H�|$H��H�H��H�D$ �������H�D$H==��H=����H�5K�H���Ѩ��1�H���ע��H�D$H�D$H��� �H�D$H�h1�1�H��H���ɩ���4���1�H���I���Q���A�<$"�D$u$f.$��~f(�fT
��f/
:�w�ۡ���Df�H�5�z��?���f�{ ����觡���D�D$蕡��H�L$(dH3%(udH��0[]A\�@�|���f�H�5Iz��߯��f�{ f��p�������C���묐H�l$H�����f��`��#�������ff.����U�H�����SH��8dH�%(H�D$(1��e�H�5�}H��H�H�$H�CH�<�H��� H�H��z������H��H��H�H��H�D$�?���H�D$(dH3%(uH��8H��[]�a����\���ff.����AW�H�����AVAUATUSH��XdH�%(H�D$H1���H�5I��H�L��H�D$ 蓦��1�H��虠��H�0H�D$H�t$�� �PH��H�D$A�D$ f���Uf����f������Pf����Ff��H�D$�w�-0�@f�H�D$��<-��H�\<N�HD�A�t$$��tKI�D$��H���������H��H��H�H�lH����w DH��H��H��H��H9�w�Hc�H�l	���H��H��I���%���H�\$L��H������H�|$�˛��H��H���0����L����H��L�����L��H�t$HdH34%(��H��X[]A\A]A^A_�f�H�D$H�@H�D$A�D$ f�������H�D$�NaN����H�|$I��f���I�D$H�D$H�����1�DE�|�$A�	���+fDL��1�H��H���������I��H��H��H��A��tKH��t
�I9�r�L��1�H�
�yL��H��H�����I��1�����L��褚��1�I��DH��H9l$�i���A�~�0A������f.�I��A�A�~�0t����@L�|$I�oH���G���H��L��H��H�����A�A�H���������L�w�-����@�0f����H�InfinityH�D$H�0�@�j���DH�-InfinitH�D$H�0�yf�p�E����˙��ff.���AW�H�����AVAUI��ATU1�SH��dH�%(H�D$1��(�I��H��蝪��fA�|$ A�L$$@��1�H�l-���t5I�D$H��H����w#H��������̺��H��H��H��H��H9�w�L������H� ��H��L�hM�eA�� ��I��A��H�5�� I��M)�H���L��1�1�I����I��H����M����H�5E� O�t6L�4$H���L����豙���*L��L���H�$蘙���H��蛙��H�\$dH3%(�H��[]A\A]A^A_��H�@ �#����M�e�0����I)�H�5�� O�d$L�$$H����L��������L��H�������w���f��H�=x�ߛ��H��H�e� ����L����*H��H�,$�ǘ��I��������H�=�w藛��H��H�
� ������H�=�w�o���H��H�� �L����K���ff.���AW�H�����AVAUATI��USH��HdH�%(H�D$81���H��H�H��H�D$�����M$��t`H�EH��H����w"H��������̺�H��H��H��H��H9�w�H��~(H��	R1�f�} ��H�D�H��H�D	�
��H�|$8dH3<%(�=H��H[]A\A]A^A_��L������H� ��H�@ H�5Ȱ L�`H���S1�1�L���G���I��I�$�� ��H����I��I��L�t$M)�f�} �7M����H�5W� O�|?L�|$H���:L������L��L��*H�D$�Ȗ���ƒ���t"�����H�����������������H��� H�5axH�81�脔��@H�������M�d$�9���fDI)�H�5�� O�d$L�d$H����L����1���H�5�� H�D$H����L��L�������?�����H�=u�ߘ��H��H�M� ���L��L���*H�D$�����•��I������H�=�t虘��H��H�� ����H�=�t�y���H��H�׮ �^����H�=t�Y���H��H��� �����5���D��AUI��ATUH��S��1�H��HdH�%(H�D$81��#���I������H�D$���B������H��H������h�H�5�sH��H�H�D$H�EH�<�H��� H�H��|��L��H��H�H�D$詣��1ɺH��H�����H���o���H���'���H�L$8dH3%(�+H��H[]A\A]��M�m����L��A�����ђ��A��H��H�������H�5sH��H�H�D$H�EH�<�H�ѩ H�H����L��H��H�H�D$���H��IcͺH���(���H��谤���D����#�����xWH�D$t8M�m��uGH���S���H�|$�<���L��A���I���蚖��A���D���f�H���{���H�|$�
����l���H�|$t
H�|$����1���蘔���#�����AUI��ATUH��S��1�H��HdH�%(H�D$81�����I�����H�D$���B������H��H������X�H�5�qH��H�H�D$H�EH�<�H�� H�H��l��L��H��H�H�D$虡��1ɺH��H���״��H���_���H������H�L$8dH3%(�+H��H[]A\A]��M�m����L��A�������A��H��H�������H�5
qH��H�H�D$H�EH�<�H��� H�H����L��H��H�H�D$�۠��H��IcͺH������H��蠢���D���������xWH�D$t8M�m��uGH���S���H�|$�,���L��A���I���芔��A���D���f�H���{���H�|$����l���H�|$t
H�|$����1���舒��������AUI��ATUH��S��1�H��HdH�%(H�D$81�����I�����H�D$���B������H��H������H�H�5�oH��H�H�D$H�EH�<�H�o� H�H��\��L��H��H�H�D$艟��1ɺH��H���Dz��H���O���H������H�L$8dH3%(�+H��H[]A\A]��M�m����L��A����豎��A��H��H�������H�5�nH��H�H�D$H�EH�<�H��� H�H����L��H��H�H�D$�˞��H��IcͺH������H��萠���D���������xWH�D$t8M�m��uGH���S���H�|$����L��A���I����z���A���D���f�H���{���H�|$����l���H�|$t
H�|$�֐���1����x���������AVI��AUI��ATUS��H��@dH�%(H�D$81�裚�����܎��H�D$���+���1�����A�A�H������������1�蛝��L��H�����I����H�5tmI��H�H�D$I�EH�<�H�+� H�H����L��I��H�H�D$�E���1���L��L��腰����� L������H�����H�L$8dH3%(��H��@[]A\A]A^�@M�&���)���M�v���"���H�|$t
H�|$�m����1��������L��A����6���Hc�A��uI�����tA������#L��������1��t���L��H�����I�����H�5MlI��H�H�D$I�EH�<�H�� H�H�����L��I��H�H�D$������H��L��L���]���L��������A��uI�����tA�$����trL��A��t\���Hc��T����H�|$�^�������f�����������H�D$����f�蛏�����fD����Hc����L��1��y��������L���j����������.���ff.���AWAVAUATUH��H�����S��H�׺H��XdH�%(H�D$H1����I��H�H�D$ ���H�D$����������H�D$H�|$��H�5�lL��1�E1�����1�H��1�����H�D$H�D$H��� �qL�t$I�����H��L��L���k�������fA� �����6L����I�^A�+�DH�EH�D$���KH�|$�H�|$I��A��uH�����t�������@���3�n������zLc�1�H�5�kL��1��0���H��DM���	���J�D.�1�I��H�t���H���C��<0t�<.�vM��tL��L���a����L���8���H�|$H��蛉��H�D$H�t$HdH34%(��H��X[]A\A]A^A_���L��L��L������fDH�D$L�p���f.�H�|$薋���������)�����;����������H�|$t
H�|$�a����1�������軌������fDA�-I�^I�oM�_H���I��E1�A�����M��uh��M��xfE�G$H��H�
]g1�H������L�\$L�$�q���H���	���L�$L�\$A�����H�M��u�.H��I��M9���I��M��t�C�D�$H�s	���1�H����0�׈C���A�����H9�u��DH�S
H��u�.H��H�S	@H�Z�H��y	�
����H��H�C�@�0H9�u���fDL)����0.H�sf���H�D�H�SH)�H�KfDH�B�@H���@�0H9�u�H�P	H9�u�H��H��H��H��H)�H�����H�\	���I�^A� �s����0f��}���H�|$�ԅ��H��� t1�+u"H�P�H���@K�L�L�lJ�H�H��������ʍq���v� t��0��	v΃�߀�F�����H�5�fL����H������H��H��������H�P�H���H�u� H�5�eH�81��D�������ff.�@��U�H�����SH��dH�%(H�D$1����H��H�H�] H�$H��t(H���t"H�L$dH3%(H�Du+H��[]�fDH�EH�}$H�4��S���H1�H]�腅��D��H���H�����dH�%(H�D$1����H�H�$H�L$dH3%(u'H�PH�@H���4ҍ<�Hc�Hc�H�t6H�|?��������@��SH��H��H�� dH�%(H�D$1��������@��t=�H������l��H�8H�<$H�D$dH3%(��H�� H��[餆��@H�����t������t-��u�H�C �H�@H�4����H�8H�<$�f�������H�H��H�$�B���H�L$dH3%(uH�� H��H��[�"�������ff.�f�AVAUA��ATI��UH��H�����S�ӺH��0dH�%(H�D$(1��x��I��H�H�$@����@���z������H��H���H����@�����E��������H�ThHc�H�>��fDI�F1�H��H�4����H�H�T$H�T$A�V f�����H f����f���@��f��@��	�f���
f����@���7f������*��"�����H�h��Hc�H�>��fDH�5I� H���Q�����u}��*��"�QH�Zh��Hc�H�>��D1ҾH���)��H�H�T$H�T$A�V f���3������*t1�H�L$(dH3%(�(H��0[]A\A]A^Ð1�H�����H������H�H�T$����f�H������V����}���fDH��� H���@�H�D$(dH3%(��H��0H��L��[]A\A]A^�ń��DH�y� H��uľH�=�a賅��H��H�Y� ��H�Q� H���H��L������H��������������I���_����H�� H����H�D$(dH3%(��H��0H��L��[]A\A]A^魂��D��)�@��EЅ���������*��H�؀�"�����H�
g��Hc�H�>��D�q�z��f���thf���_f����f����H�xI9~�?��f���������*��"�<���H�5g��Hc�H�>��1��i���f�f���f���H�����*��"�����H�g��Hc�H�>��fD����fDH�����������f�H���~����~���f�H����r����h���H��DH�H���Z���@�H�=�_跃��H��H�U� �����H�=�_菃��H��H�E� �8����H�=�b�o���H��H�� ����f���Q�������f���*��"�����H�
g��Hc�H�>��1��Q���f���s�����*��"�̃��H�ig��Hc�H�>��f��~z��*��"�����H��g��Hc�H�>��L�HM�FM9�L��IF�H��t+�p$A9v$w�r31��DD�T�$E9T�$w�rH��H9�u�M9�s3f����������f��~���*��"�-���H��g��Hc�H�>��v.f���6�����*��"����H�Ch��Hc�H�>���!~����*��"�݂��H��h��Hc�H�>��H���������G����f����>����f����L���f����<���f����=���f����*���f���AU�I��ATUSH��H�����H��8dH�%(H�D$(1����I��H�H�$�؃����;��t^1�H�����H������H��H����H�Ef�} H�D$t
fA�|$ uhI�$H�L$(dH3%(��H��8[]A\A]�DH�����t����������u�I�D$�H��H�4��N��H���|���fDH��L������I��H�����H�<�H�e� H�5�\H�H��K��H��H�H�D$M����fA�|$ �C$H�C���f�S H�D$(dH3%(��H��8H��[]A\A]����@��H�����H������fDH�ɒ H�5�[�
H����H��H�H�D$�����H��L��H��菡���x���f.�H�D$(dH3%(u.H��8H��L��-[]A\A]�f~��fD�����f�C �0����]{��ff.�f���AUATI��UH��H��SH��(dH�%(H�D$1������K��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]�T���@1����L��H��I���;���L��H�����H��H������L��H��H�H�$�m���H��H�������H�D$dH3%(u!H��(H��[]A\A]�m���D�z���C����Yz���ԋ��@��AU�I��ATUSH��H�����H��8dH�%(H�D$(1����I��H�H�$�؃����;��t^1�H�����H�����H��H����H�Ef�} H�D$t
fA�|$ uhI�$H�L$(dH3%(��H��8[]A\A]�DH�����t����������u�I�D$�H��H�4����H���|���fDH��L���Ջ��I��H�����H�<�H�%� H�5MYH�H�����H��H�H�D$M����fA�|$ �C$H�C���f�S H�D$(dH3%(��H��8H��[]A\A]�̊��@��H���V��H������fDH��� H�5�X�
H��m���H��H�H�D$�H��L��H���O����x���f.�H�D$(dH3%(u.H��8H��L��+[]A\A]�&{��fD�����f�C �0����x��ff.�f���AUATI��UH��H��SH��(dH�%(H�D$1������|��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]�T���@1�蹇��L��H��I���;���L��H��蠇��H��H��������H��H�H�$�-���H��H����返��H�D$dH3%(u!H��(H��[]A\A]�-���D��v���C����w��蔈��@��AU�I��ATUSH��H�����H��8dH�%(H�D$(1��{��I��H�H�$�؃���������1�H�����H���I��H��H����H�EH�5�VH�D$H�EID$H�<�H�a� H�H��N���H��L��H��H�H��H�D$���H�D$(dH3%(��H��8H��[]A\A]�/����H������a��������t1���N���I�D$�H��H�4����H���D���f.���H���n��H��H���%���H�D$(dH3%(uH��8H��L��*[]A\A]�x���u����AUATI��UH��H��SH��(dH�%(H�D$1������y��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]����@1��9���L��H��I�����L��H��� ���H��H��������H��H�H�$譁��H��H�����?���H�D$dH3%(u!H��(H��[]A\A]魆��D�St���C����t������@��AW�AVAUATI��USH��H�����H��xdH�%(H�D$h1����I��H�H�D$�؃����&����1�H�����H������H��H����H�EH��� H�5TH�D$H�EIEH�L�4�L��O�|6�Ż��H�L��H�5�SI��H�H�D$ 註��H�L��H�5�SI��H�H�D$(苻��H�L��H�5�SI��H�L�D$H�D$0�i���H��L��L��I��H�L��H�D$8�m���I�D$H�H�5uSL�,�M�L���/���H�H�5\SL��I��H�L�$H�D$@����L�$1ɺH��H�L��L��H�D$H�}���L��H��貖��L�D$H��H��L��L�$苼��L�$L��L���L��贘��H�D$hdH3%(��H��xL��[]A\A]A^A_骄��f.�H������^��������tq���K���I�E�H��H�4����H���B���H�� H��t\H��L��E1��6u��H���h���H�L$hdH3%(uQH��x[]A\A]A^A_�D��H�����H������fD�	H�=,R�u��H��H��� ���q��fD��AV�AUI��ATI��H�����USH��`dH�%(H�D$X1��9��H��H�H�D$0D������OA���1�H�����L�����H��H���FH�H�UH�5SQH�KL�-'� H�D$8H�EH��?H��?H1�H)�HEH��H�CH1�H)�HCH9�HB�I�UL�t�L���۸��I�UK�|6H�5�PI��H�H�D$@軸��H��H��L��I��H�L��H�D$H违��I�$�s$H�$I�EH�D$H�H�D$����H�D$XdH3%(��H��`L��[]A\A]A^�s���I��������A�$����t'������H�E�L��H�4�����H���������L�����H��H��������/L��L����r��H��tTH�L$XdH3%(u?H��`[]A\A]A^��A�E$1�L��Hi�ʚ;H��I�T$A�T� 1����"��������o���yt����AWAVAUI��ATUH��S��H��XdH�%(H�D$H1��p��H�D$�������iM�e��tgM�m���AI��tTL��A���w�Zs��Hc�H���@u|L��H���A���H�L$HdH3%(�$H��X[]A\A]A^A_�fDH�L$H�T$L��H��H�D$����H����H��� H���vL��H���q���@1��~��L�5z� H�{H�5�NI��I��\���H��H�����I��H�H�D$ ���L��H�����H��H�H�D$(����I�UH�5<NI��H�H�JH�D$0I�D$HEH��H9�I�HF�H�|�	H����L��L��H�H��H�T$8H�����L���}���z��L��H�����<���L�����������cm�����fD�#q������H�D$M�e��t-M�m���H���5���H�L$H���*p���#���DH�L$H���o���H��H�L$�p��H�L$�X����H�=RM�:q��H��H��� �j���H�|$���H��������H�|$t
H�|$�o�������No���Y~����l��@��AWH��AVAUATUSH��H��H�|$0H�T$(dH�<%(H��$�1��uD�u H�����tH�H�D$�D$����
��H��� H�5�LH�81��xk���H�l$(H�H�����tJ�����؃����UH��H���H��t/��t*�������wH�%WHc�H�>��H�����u�H� � H��H�8��t��DH���o����
H��$���<H��HDŽ$��l��H�������	H��� H�5HH�81��j��fDH�5� H����j�����r���L�c 1�A�L$ �Af��������f��@��f���@��	�f�����Ʌ���@����H�� H�5KH��H��ز��H�D$x��@$H��H�H�@f�H ��|��H��$�dH3%(��	H��[]A\A]A^A_þH���i��H����n��1�H�H����H��?	����1�H�����H������I��M���x���L���W|��H�5�J�H��H�)� H�����H�T$HH�T$xH���'|��H�5�J�H�D$HH��� H����H�T$PH�T$xH���{��H�}H�D$PH�D$@H�|$H�D$xH�@H��MH�D?A�L$$H�D$@E1�����I�D$L�4�H����w)H��������̺��H��I��H��H��H9�w�I����L��$�L��1�H��H��IL���'h��H�(� L��H�l$@H�����H���#{��H��H��H����H��H�t$HH���u�H�t$HH��L�d$@H����H��I���L��A���P�m��Lc�M�����CH��H�����H��H�D$XH�D$xH�T$@H��H����H�D$XH�D$`H�D$xH�D$hH�\$`H�D$xL�S H�\$hA�B ��f����
H�L$xL�t$8L��H��H�L$ A�I���������f��p$1Ʌ�t*H�@H��H����w���H��H��I��H��H9�w�E�B$E��t:I�B��H��H��I�������H��H��I��H��L9�w�H)�H��L�l$H��?H1�H)�I)�M����H�T$@H�|$XI�l$H��I���0���H��H�@L���O�l-H�@L��L�d-I���$L��A���a�\k��Lc�M�����ZL��H���?���H��H�|$`H�t$h��H��H�D$`H�D$hL�P A�B ��f����:H�G I�����H���j��f��1��f.�f(�fTkS��D�1�f/���f.S�q1�f.����E1��V���H�|$(��h��H������H��1�H���H��?����f���A�!H��H�@L����H����d��I��I������H�L$ H�T$pL��H��H�D$p�L���H����H�Ā H����L��H����h��H�������{e�����fD1���u��H�
�| I�~H�5�EH�D$H��z����H�����H��I��H�H��$�����L��H�����I��H�L�L$H��$���L�L$H�5NEI��H�H��$�I�UI�D$IAH��H�JH9�HF�H�
�{ H�|�	H�H����L�L$L��L��H�H��H��$�L�����H�|$�t���q��L��L�����6���L���v��H�����fDL���hc��I���@���L�t$8H�t$P��H�D$`M�������H�T$(H�|$0����H��H�@L���K�|6�H��������H���;v��H��H��� �H�|$`H������N���fDH�|$p�v��H������H����fDH)��6����H�=D��g��H��H��~ ���H�L$xH�T$pH��H��H�D$p����H����H�z~ H���%H��H���~f��H�������1c�����1��s��I�H�5�CI��H�Hz H��8���H��H�����I��H�H��$��ַ��H�ߺH�����H��H�H��$�贷��I�T$H�5CH��H�H�JH��$�H�CHEH��H9�HF�H�|�	H��y H�H�謪��H��L��H�H��H��$�H��谏��L����r���so��L��L��������L���t��H������E1��k���H�|$�3a�������E1���H�Ay H�5[BH��H��'���H�D$xH�1��@$H��f�P H�@�"t���M���f.���f/�s���u���H��蚶��I�����H�|$p��s��H�����H���'���L���`��H���t����H��H���X���I���H���H���e��H������H��$���<H��HDŽ$��b������H�=�A�se��H��H�1| ���H�����	������������r���.a��H�gx H�5h=H�81��6`��H�7x H�5x=H�81��`��ff.���AW�AVAUATI��H�����USH��XdH�%(H�D$H1��Z���H��H�H�D$ H�EH�<�H�?L��A���>�d�����NH�H�5�@H��H9�HC�H�Vw H�H���C���I��H�H�D$(�E �ƒ�f���Uf����Kf�����TH�}�yI�G�H9EH�5�@H��I��LCeH�<P��c�����H�5�@H��K��I�<DH��?���H�t$H��M�oH�|$I���6f��H�L$�D$H�r�q�qH��H��H��H��H��?H��H�9��8��8H��H)�H�t$H)�H�I��H9�tH���^�K�D$I��I��?I�I�f���Q�f.��f(�L���~��Mw�I��IF�K�T�I�GH��H��dH�C�dHM�E1�H�D$�}@I�GH�CL��H��L��H���׋�������L��H��L��褄��H�5�y L��H���R����C ��f���t]�L��H��L���r����L��L���B���I��L;t$t/I�GH�I9��w���M�oL���o����^�����fDA�G M�oH�߉�f��1�)�fA�G �^��M��tL���^��L���p��H�L$HdH3%(��H��X[]A\A]A^A_úH��L�������fD1�A�G$H�5M>� I�GfA�W �Po���fD�}$�}���H�}�r����A�G$I�GI�GfA�G �Q���@1�A�G$H�5�=� I�GfA�O ��n��� ����n���1]���L$��`���L$���ff.���UH��SH��(H�t$H�|$dH�%(H�D$1���[���1�1�H���C���H�Lq H��H��H�H��H�D$�\��H��uH�����uH�L$dH3%(u6H��([]�H��у���t�H�р�H�xH�t̀�u�H���_��H���\\��ff.����AWAVAUATU��SH��HL�-s dH�%(H�D$81�I�}����H�I����
���)�؃����CH��������H�CH9���H�Lp 1��%[��H�D$ H����\��H�D$(A�Dž�������1�H�=^9�Y_��I�$H�D$L�|$(H�l$ M�����H��A��*^��A��H�l$@��u|H�������H���E�����H�L$8dH3%(H���@H��H[]A\A]A^A_�f�H���������H���	H������H��q H�����H����H����@���j������H��H���H���z@���p�E�������^H��EHc�H�>��fDH��n 1��Y��H�D$ H���Q[��H�D$(��u%�]�����w���iH�T$(��H���J�����n\��fD���������FH�_n 1��8Y��H�D$ H����Z��H�D$(A�Dž��Hc�I�D����^��H�������^���������^��H�D$ H����H�|$ �X��L�t$ �U�H��M����^��E���f^��H���������I�$H�L$ H�D$��������Չ�t
DM�t$L�d$ H�T$(���<H����L����[��L��A��A�����
]��Lc����{���E�������H�p H�58H�81���W���H�T$(�����@I�D$������H����������H�����������K���I����E���0���H���e[��H�5�6H��H��o H�81��ZW��f.�H�5�l H���W������E��u,H�|$H�
�8�H��8��[��H�D$H�������H�|$��V��H�t$H� �H�vD��L���(���H���H�yn H������H����Z���Df(�fT
DDf.��ZI������E���:���H��n H�5�7H�81��oV���H��H������ԫ��H��H�������H�EH��H�D$0�i��H��uRH�k ��u9H�����t0H��ƒ���t#H�€�H�{H�t����f.�H�]����H��1��֊��H��럐�+Z��A�Dž��>I�$H�D$���n���L�|$(H�l$ M������H�|$(A�E1��(Y���H���+Y��A������U���i���fDH�|$(�X���2����H�������E����H��l H�5'4H�81��%U��DE������H��l H�5)4H�81��T���H�	m H����f�I�$H�D$���f�H�������H��L���0���H���W����H�D$ I�$H�D$��������>���fDH��l H��m���f�H�D$H�h ����f�H����W���S���I�U1���$����$H��H���kt������fDH�l H������H��k H������T�������H�|$(�{W�����H�|$(����X��H���X��H�=c2H�E1��XX��H�EH�D$���H�+k H�5�2H�81��S��Hc�I�|���tH��u'���&Y��H�D$ ���I�$H�D$���fD�ST��H�D$ ���f���U�H�=�4SH��dH�%(H�D$1��W���H�=�4H�Bo ��W���H�=�4H�"o ��W��f�f.n H�o �������H�5#4�����H�5�4�H�Fn �ɏ��H�=k4H�+n H�j H�0�W��H�j �����H�5���H�=;4H��
U��H�����G�ƒ�����H����<��H�xH�54�V��H����
��4�ƒ����6H���\<�tH�xH�5�3H���AV��H�;�H�r���H�5�3�T��H�;�����H�W���H�5R2�T��H�;�����H�܇��H�5�3�T��H�;1�H��X��H�5p3�hT��H�;�H�����H�5`3�MT��H�;1�H�Qa��H�5N3�5T��H�;1�H�Ɇ��H�5J3�T��H�;1�H�Qb��H�5E3�T���H�=?3�Q��H�;H�563H����U��H�;��5wH�5'3�U��H�;��H�53�U��H�;�H�53�U��H�;�H�53�rU��H�;�	H�53�^U��H�;�H�53�JU��H�;�!H�5
3�6U��H�;�H�53�"U��H�;�H�53�U��H�;�H�5�2�T��H�;�H�5�2��T��H�;�	H�5�2��T��H�;�H�5�2�T��H�;�
H�5�2�T��H�;�H�5�2�T��H�;�H�5�2�T��H�;�H�5�2�nT��H�;H�����H�5�2�XT��H�;�H�5�2�DT��H�;H�����H�5�2�.T��H�;�H�5�2�T��H�;H�����H�5�2�T���	H�=�2�O��H�H��H�$�o�H�;H�5t1H����S���H�=2�|O��H�H��H�$�8�H�;H�5z2H���S��H�;�H�����H�5`2�Q��H�;1�H����H�5X2�sQ��H�;�H�$��H�5C2�XQ��H�;�H����H�5,2�=Q��H�;�H�n��H�52�"Q��H�;�����H�C��H�5�.�Q��H�;1�H����H�5�1��P��H�;�����H����H�5�1��P��H�;1�H�X���H�5�.�P��H�;1�H�@���H�5�1�P��H�;1�H�����H�5�1�P��H�;1�H����H�5�1�tP��H�;�H����H�5m1�YP��H�;�H����H�5T1�>P��H�;1�H�rT��H�5>1�&P��H�;1�H�����H�5)1�P��H�;�H����H�5�-��O��H�;�H����H�5�0��O��H�;�H����H�5�0�O��H�;�H�����H�5�0�O��H�;�H�����H�5�0�O��H�;�H����H�5�-�lO��H�;�H���H�5?-�QO��H�;1�H�%���H�5f0�9O��H�;1�H�
���H�5T0�!O��H�;1�H�%���H�5@0�	O��H�;1�H�]���H�5-0��N��H�;�H���H�50��N��H�;1�H�����H�50�N��H�;�����H����H�5�/�N��H�;1�H�Ǫ��H�5�/�N��H�;�����H�<���H�5�/�pN��H�;�����H����H�5�/�UN��H�;�����H�6H�5�/�:N��H�;�H��%H�5%,�N��H�;�H�@��H�5,�N��H�;�H���H�5O/��M��H�;�H����H�53/��M��H�;�H����H�5/�M��H�;�H����H�5/�M��H�;�H����H�5�+�}M��H�;�H�^��H�5o+�bM��H�;�H�3��H�5V+�GM��H�;1�H�+���H�5�.�/M��H�;1�H�Ө��H�5�.�M��H�;�H����H�5u.�L��H�;1�H�����H�5d.��L��H�;1�H����H�5T.��L��H�;1�H�Ц��H�5E.�L��H�;1�H�����H�52.�L��H�;1�H�0���H�5.�L��H�;1�H�ȥ��H�5	.�lL��H�;�����H�����H�5�-�QL��H�;�����H�"���H�5�-�6L��H�=�-�M��H��` �H��H��H�5�-H��L��H�;�H����H�5�-�K���H�=�-�M���H�=�-H��d �M���H�=U-H��d �M���H�=\-H��d �qM���H�=L-H��d �YM���	H�=<-H�nd �AM���	H�=.-H�Nd �)M���H�= -H�.d �M���H�=-H�d �L���H�=b,H��c ��L���H�=D,H��c ��L���H�=�+H��c �L���H�=&,H��c �L���H�=�,H�nc �L��H�Zc H�D$dH3%(�5H��[]��H����������H����H�������H�B_ H�8�z���f.�H�_ ��^U4�Mb �Z�H��������H��t>H�����H��^ H�8���fDH��^ H�8���H��^ H�8�����H�y^ H�8��H��^ H�8���H�I^ H�8���H�9^ H�8�~�H�q^ H�8�n�H�a^ H�8��H��^ H�8�N�H�y^ H�8���G��ff.����AWAVAUATUH��SH��H��H���H�T$HdH�%(H��$�1�����H�H�|$H�|$��@��tO@���r�������H��H���H��t3@��t-�E������wH�/2Hc�H�>��DH�����u�H��] H��H�8�]O��D�H��H�D$�p���H�t$1�H���ʚ��H��t��H f�L$>H�H�D$H�D$H��f�|$>H�$��H��\ H�5�&�H����H����W��L�@ H��H�D$@A�@ ��f����:H�L$XI��I��L��H�L$(H�L$P�H���������H�L$0fD�p$1Ʌ�t2H�@H��H����w!��f�H��H��H��H��H9�w�A�x$��t;I�@��H��H��H�����p�H��H��H��H��H9�r�H)�H��L�4$H��?H1�H)�I)��AE��M���pH�t$L��I�������I��H�@L��+O�t6H�@H���L�d-I����L��A�����H��Lc�M������L��L�����I��L��L��H�����M�D$ I��A�@ ��f�����I�G ���H�5�X H���C���������H�E �H f�L$>f���rf����hf�|$>����H��Z H�|$H�5�#H�豋��1��@$H�@f�H �:H����F��f(�fT
c0f.
0��f��1�f/�������H�t$������H���dU��H��$�dH3%(�KH���[]A\A]A^A_�1�H�����H���ʗ�����D���A�!I��H�@H��\���H���A��I��I���V���H�L$(H�T$0L��L��H�D$P����H����H��] H���SL��L���E��I���>����KB������fD1�L�D$ �R��H�
eY L�D$ H�5�"H�D$H�I�x�@���L��H�����I��H�H�D$`���L��H�����I��H�H�D$h�–��I�VH�5 "I��H�H�JH�D$pI�D$IEH��H9�HF�H�
�X H�|�	H�H�轉��L��L��H�H��H�T$xL����n��H�|$��Q���N��L�D$ L����L���_��L���S��I���0���f�L���H@��I������L�|$@f�|$>�kI�G �p$��tIH�@��H���������H��H��H������f.�H��H��H��H��H9�w�H)L$H�@H�\$H��WH�DH�t$HL���H�D$H����{����H�|$P��R��H��膩��I���\���fDH)����H��W H�|$H�5� H��u�����@$H�@f�p H�D$XH��H��mR��������H�=w �_D��H��H�[ ���H��H�t$X�H�D$X���H�t$H���t���H�D$H�@ f�P ����H�|$HH��ts@��uV�?��Hc�H������H�|$@L������c���f.�����1ҾH���N�������H�|$�_>�������C��Hc���D$>�����H�|$@H�L$XH�T$PL��H�D$P賍��H���$H�+Z H���+H�|$@H��L���*B������1��NO��H�{H�5:I��H�V H���H�|$@�H�����H��H�H��$�荓��L���H�����I��H�H��$��k���H�UH�5�I��H�H�JH��$�I�FIEH��H9�HF�H�|�	H�wU H�H��d���L��H��H�H��H��$�L���hk��L���N���+K��H��H�����[��H���EP������H)D$����H�|$P�,P��H���������H�=6�B��H��X ����=��H�6U H�57H�81��=���`O����AWAVAUI��ATUH��S��H��xdH�%(H�D$h1��>��H�D$0�������QL�}�����H�����L������H��H�H�D$@H�CA�H��H�$f�{ ��H�D$0H�-C)H�D$M��A����E��A����D��������I����A���I��4�uA��������cHcD�H�>��f.�L���@����8��x	�ƒ����.H��H���H���<�������S	���:	��
��L���?��I����6���
�����.L��H���H���A���A������@
����
��
�D��f�H�5yP L���;����tkH�t$L���H�D$0�ҭ���=L��H��買��H�������L���n���I��M��A���m���I����������I��t	M�������L���>��H�5+H��H�!R H�81��:���L���>���D$�:���L$f.��*�$��'f/��}f/
�'�o�L,�O�|����L�u�����H�����L������H��H�H�D$@I���^���A����L��H�f�{ H�$�\���H��Q H�<$H�5�H��q���H�D$0E1��@$H��H�H�@fD�x �jL��f.�H�L$hdH3%(�3H��x[]A\A]A^A_�DE1��C ��f����tM���L��H���.H�5�T H�L$8�L��L�L$H�D$8�;��L�L$H������������$H��P H�<$H�5_H�蔁��H���K���G����f(��9��I���Q����H��������H�5mT H�L$8�H��H�D$8�z:��H���������������L��D��H��?H��A��ueM���I������
A�����
�������������H�L$8�<L��H�D$8�9��1�H������…�tWH�4$�L���Y���I���|�����+<�����JH�D$0L�}����H�������A�H�|$0�8;�����A�A�A��C ��f�����L���H��?����M�������#L��H���H���wA��A���iA���_A������|������
�>H��N H�H�<$H�5����H���I���Z���f.�D��E�����Q���M���I�������A�����
��D������t	����L��D�L$�:��f��1�D�L$f/�������@L���9��H�$�����H��������H�5
R H�L$8�L��H�D$8�8��H���������������L���:��I�����fDL�u���jH���8�������DE1�L��H����������@D�ȃ����!���H�L$8��<L��D�L$H�D$8�7��D�L$H���������������H�,M H�<$H�5BH��~��H�D$0f�{ H��A��@$H�@fD�h �8���D��A���E���L��H���H��������������A�������A���������������
�����M����A����D�������(L��H���H���A���
A���������Z��
���C f���gf����]M����M���:I������-A�����
�L��莔��H�Ũ���u
�����H��H���H���@�����E���������6
��
��L�d$8��<H��H�D$8L���5��D��D����H����������i
A�����
��
������
����
L���<L��H�D$8�A5��H�������������f�{ �!���L���j����������DI��Q�IE�H��J H�f���}H�5���{��I��H�H�D$H�C �Pf�����M����f���6	M���
A�A�E$I�EfE�U I����L���ME������H���������f�H���7��������H�����������f���������L���<6��f��1�f/�������f.�A���������������
�����H��t]E1��E���f�I����������H�5�M H�L$8�L��H�D$8�3��H��������������������L��H�5NM H�L$8�L��L�L$H�D$8�V3��L�L$H�������������
L�����DL��L�L$��5��L�L$��L���H���C��������L��L�L$�5��L�L$H�D$L���5������H�H�����H�D$�����H�H���������DI�1�I�������L���O5��������H���}������L��L�L$�,5��L��H���4��L�L$����H�H������@������H�H���������1�I�������L��L��H�H���������L��H������D��D�����qM����I�������A�����
�m	����������H�L$8��<L��H�D$8�1��H�������������f�{ �n������VM��uI�����tA�����
�VH�G H�H�<$H�55��w��H���B�������u|M������I���������A�����
������H�t$0L��H�$��1��H�T$0H�$H�҃��������A������@$H�@fD�p ����L��H�����M��uI�����t�A�����
t���u�L��H�H�҃��L��H��?���I�H�D$(A�A ��f����c���H�$L�L$H�@H�H�i�ML�%�E H�3H�l-H��I�<$�&��L�L$H��I�9H��H���P���H�$H��H�@H���H�T	I�<$H����H�T$(H�T$0H�T$(�A�f����f����f����Q���IH�{��M������H�D$����I��I�E��H�5MH�|��j����H�52H��H�@H��H�|	�j���H��L��I���O��I��L�|$���H��H���O��H�|$��A��	fDI��H��H��L���Ww���L��H���gO��K�?H;D$v�L��H)L$H��L�|$L��L���!w���L��L���1O��M���v���H�|$��XM��tL����-��H����-��I�����A�E f������f������f���������9��H�$L�����E����������h���L���.0��f��1�f/����z����A�E$I�EI�EfA�E �V���A�E �|���H��C H�<$H�5�H��qt��f�{ I���.���kM��uI�����tA�����
��H�C H�5@H�81��f+��H�CH��H�5NH��H�H��H���t��I��H�H�D$H�m���M�O ����L��虀��I����M��uUI����������A�����
u4H�t$0�L����-��H�D$0H�Ѓ�H��B H������������m���L��H�H�Ѓ���A�����
��H�t$0�L���x-��H�D$0H�Ѓ����W�A�E$I�EfA�m ���M���Q���L��A�E$H��I�E��	�M�������q�fA�} ���E1�A�E$I�EfE�E ���H�<$�)��H������H���|)��L�%}A H�3H��I�<$�ֽ��H��H���[)��L�L$H�����L����q)��H���.�����o��!�L���O)��H���.�������M���A�������A�����A�E$I�EfE�M �����w���M��u2I������u���A�����A�E$I�EfE�e �����u�L��H�H�Ѓ��k���H�D$�a���H�{�;����{$�1���fA�E f�{ A�E$I�EI�E����A������fA�E ������D�A�E$I�EfA�] ���A��t�A�����A�E$I�EfE�] ��������fA�M ���H��C L��H��L����U���H��L���J���~���H������
�H�5�C H�L$8�H��H�D$8��)��H����������������������fA�u �"��������fA�U ��������A�����
�������;���2L���<L��H�D$8�H)��H�������������H��> H�<$H�5H���o��L��H���^������f�{ �E$H�E��f�E H���9���Z�H���+��H��I���*������H�H�����A�����I�I�������H��H�H���������I���
�H�|$0t
H�|$0�*�������)���L���&��H���Q+��������'��L���L*��f��1�f/�������L��H��?���f�{ �E$H�E����f�E �������L���%��H����*�������L��H��?���L����)��f��1�f/����q�L���i%��H���*�����T�f���H��H���H�t$H�t$�a�H�����H��H��� can't be coerced into BigDecimalComputation results to 'NaN'(Not a Number)Computation results to 'Infinity'Computation results to '-Infinity'ERROR(VpDivd): space for remainder too small.second argument must be true or falsefirst argument for BigDecimal.mode invalidinvalid value for BigDecimal(): "%li"Conversion from String to BigDecimal overflow (last few digits discarded).load failed: invalid character in the marshaled string%li can't be coerced into BigDecimal without a precisionBigDecimal to Float conversionUndefined operation in BigDecimalCmp()Zero or negative precision for expComplex argument for BigMath.logZero or negative argument for logKeyword flag set when calling rb_scan_args, but last entry is not a hashThe last argument is nil, treating as empty keywordsUsing the last argument as keyword parameters is deprecatedThe last argument is split into positional and keyword parametersPassing the keyword argument as the last hash parameter is deprecatedcan't convert nil into BigDecimalcan't convert true into BigDecimalcan't convert false into BigDecimalcan't omit precision for a %li.wrong argument type %li (expected scalar Numeric)a non-integral exponent for a negative base%lue%zdinvalid rounding mode: nilinvalid rounding mode: %li%snegative precisionExponent overflowComputation results to 'NaN'Exponent underflowDivide by zeroargument must be positiveinvalid rounding modeexponent overflow#0divided by 0divmod-0div%zu:to_i**F<=>>=<=remainderprecision must be an Integer21E%ldsqrt of negative valuesqrt of 'NaN'(Not a Number)#1precision too large.to_strStringBigDecimal.exception_modeBigDecimal.rounding_modeBigDecimal.precision_limit.5BigDecimalallocatenewinterpret_looselydouble_fig_loadsave_exception_modesave_rounding_modesave_limit2.0.0VERSIONBASEEXCEPTION_ALLEXCEPTION_NaNEXCEPTION_INFINITYEXCEPTION_UNDERFLOWEXCEPTION_OVERFLOWEXCEPTION_ZERODIVIDEROUND_MODEROUND_UPROUND_DOWNROUND_HALF_UPROUND_HALF_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_EVENSIGN_NaNSIGN_POSITIVE_ZEROSIGN_NEGATIVE_ZEROSIGN_POSITIVE_FINITESIGN_NEGATIVE_FINITESIGN_POSITIVE_INFINITESIGN_NEGATIVE_INFINITE+InfinityNANinitialize_copyprecsaddsubmulthashto_sto_intto_rsplit+-+@-@/quo%moduloclonedupto_fabssqrtfixroundfracfloorceilpower===eql?<nonzero?coerceinspectexponentsignnan?infinite?truncate_dumpBigMathexploghalf_updefaulthalf_downhalf_evenbankerceilinghalf-InfinityT6���8��T6��<8��8��:6���8���8��46��8��46��8���7��#6���8���8��\:���:��\:���:���:��l:��L:���:��r���p���p���p���p���p���q���p���q���p���p���p���p���p���p���p���p���r������g���g���g���g���g�����g���T���g���g�������g���g���g���g���g�����Ě�����������������������������������������������������x���x���s���������������������������s���������������x���������������������������������������������������H������������������������������������������������������������ԙ��`�������������������������������������������[���g�������������������������������������ϗ��Ԗ��Ԗ������������������Ԗ����������ϗ��ۘ��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��t��C���H���H���t��t��t��t��t��t��t��t��H���t��t��t��t��C�����������������������������������������������������������������������������������������������������������������×��\��\��\��\��\��\��\��\��\��\��\��\��\��\��\��\��\��+���0���0���\��\��\��\��\��\��\��\��0���\��\��\��\��+���������������������������������������������������������������������������������������������������������������{���D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D��D�����������D��D��D��D��D��D��D��D�����D��D��D��D�����ؕ�������������������������������������������������������������������������������������������������������������D���,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,��,������������,��,��,��,��,��,��,��,������,��,��,��,������
��������1����h����³����������r����w���w���w���w���w���H���w���`���w���w��� ���w���w���w���w���w���H���������������������
������������������������������
�����~��~��~��~��~�����~����~��~��0��~��~��~��~��~����������&�.>�C��]r2<��������?e��A��C����������;�q ����������h���|
������ ���p������������,��@ ��TP��|@�����������@������ ���` ���0"����"���"��0P#��X�#��� $���P$����$����$��0%��,�%��X@&��p`(���*��� +����+����0��X1��l�1����2����4��T	�6���	�6���	�7��
9��P
0@���
@G��|PG����G���H����H��$�I��X�J��t L����N����O��
[���
�[���
�\���
�a���Pf����f���g��0@m��|�n���o���@o���po����o��0p��,q��PPq��l�q��� r����r���ps��@u��<�u��hpy����{����P���� ����0������H ��������� ���� ���@����P����`����p����������������0������ ���H �������������8`��������4`����@���� ��� ��L ���� ��P��T���zRx�$h���FJw�?:*3$"D���\x��p���
�����|��N����$����-A�A�F SDI���������\A����A�V0���q<D`���B�B�B �D(�A0�l
(A BBBBd����B�H�B �B(�A0�A8�G`M
8A0A(B BBBAW
8A0A(B BBBE�x��SA�a
Nb@����K�A�G 
A�A�JvAAH��H ��PD��PA�a
N_(pt��nE�A�D0W
AAA$����`A�e
JD
L_(����UB�A�A �}
ABD(�$��oE�A�D0X
AAAh��!AAK8|��QDY
AT���AAK$p���YA�D�F ICA(����vA�\
CU
KU
KU�P���]U������ ���4p"����C�D xAAC��L ��a��<H#���A��
DVd\�#���B�E�B �E(�A0�A8�D��
8A0A(B BBBA�
8F0A(B BBBE�@(��c8��(���B�A�D �K
JBJK
ABJL�(���B�E�E �D(�D0�M
(A BBBH\
(D BBBJXd�)��Ot�E�A �D@
���h@���{ F�A�B�D@���x���X@���`��+���B�B�B �A(�A0��
(A BBBDi
(A BBBHX
(A BBBA4$�,��7B�D�D �Y
DBGACB\�,���Hp�-��mB�E�E �E(�D0�D8�DP 
8D0A(B BBBFl��.��B�B�B �E(�D0�D8�G��
8A0A(B BBBK�O�P�B�u�O�P�A�|,h5��B�H�B �B(�I0�D8�G��
8A0A(B BBBA�
8C0A(B BBBF:
8A0C(B BBBA$zRx��������,@����;��0��;��oA�A�G F
DADQDA(0�;��HF�A�K �rAB0\<���F�A�A �D0y
 AABG0��<��'F�D�C �D0�
 AABH��=���D o
E�$>��zD�
I8��?���F�E�A �A(�F@�
(A ABBG<8	�A���F�L�B �H(�G0��
(A BBBAHx	�B��eB�E�B �B(�A0�D8�Gp�
8D0A(B BBBG zRx�p������(:
��:0�	xM���B�F�N �D0X
 AABJ(0
�M��E�D�DP�
AAA�\
�N���B�G�B �B(�A0�D8�G��
8A0A(F BBBAs
8A0A(B BBBAJ
8C0A(B BBBA�
8A0A(B BBBDL�
�R���B�B�B �E(�I0�A8�N�
8A0A(B BBBD(DpW���E�D�GPW
AAG(p�W���E�D�G`^
AAHH��X��gB�B�E �E(�G0�C8�T��
8A0A(B BBBF(��]��pE�D�F`�
AAI_��GMl
GF40_��;MmLX_��)H]dp_��(HZ|�_���Oc
F ��_���E�PP�
AI��`��2E�l��`��2Hf(�a���E�M�DPj
DAE(
ha���E�M�DPq
DAE(H
�a���E�M�DP�
DAE0t
`b���F�M�A �DPG
 AABE(�
�c���E�M�DPo
DAEL�
pd���F�N�B �B(�A0�A8�D��
8A0A(B BBBCH$�g��uF�N�B �E(�A0�C8�DPJ
8A0A(B BBBIHp�i��F�N�B �B(�D0�A8�D��
8A0A(B BBBI8��l��
F�E�A �D(�Hp�
(A ABBI8�|n��
F�E�A �D(�Hp�
(A ABBI84Pp��
F�E�A �D(�Hp�
(A ABBI@p$r���F�E�E �A(�A0�Fp
0A(A BBBEL��t��F�B�B �B(�A0�K8�N��
8A0A(B BBBD(�y���E�M�D0I
AAG0�y��lH D
[,L8z���E�J0T
DIr
GEl|{��B�B�E �D(�K0�K`�
0A(A BBBBh
0G(A BBBJ�
0G(A BBBJ zRx�`�����(L��$����8|���Lx���`t���tp����l���`�h���3F�J�A �A(�N`�
(A ABBF�
(D ABBI|
(L ABBKLD����F�B�D �G(�DPD
(G ABBIe
(D ABBJ`P�3F�J�A �A(�N`�
(A ABBF�
(D ABBI|
(L ABBKL�Є���F�B�D �G(�DPD
(G ABBIe
(D ABBJL����}F�J�A �A(�N`�
(D ABBLz
(L ABBELT�����F�B�D �G(�DPD
(G ABBIe
(D ABBJd�`����F�G�B �B(�D0�A8�N��
8D0A(B BBBOx
8A0A(B BBBFX����-F�G�E �K(�A0�D�+
0D(A BBBH�
0A(A BBBH zRx�������(���
H�T����F�B�B �E(�A0�D8�F��
8A0A(B BBBGL�؍���F�E�B �B(�A0�A8�J�
8A0A(B BBBAL<h����F�G�B �B(�K0�A8�D��
8A0A(B BBBA(������E�D�D@p
AAAL�����7F�B�B �B(�A0�C8�D�/
8A0A(B BBBC$zRx��������,D����(D@����E�M�D0�
AAHLp���0	F�B�B �B(�A0�D8�M��
8A0A(B BBBAL��wF�B�B �E(�A0�D8�F�~
8A0A(B BBBF$��$H [GNU��.�.�<!��	�	�����	p0�.���p!
d�<!�<!���o`�
�
@!���	���o����o�o����o
h=!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'P'@�@�?GA$3a1p!qGA$3p1094 -dGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�.dGA+GLIBCXX_ASSERTIONSbigdecimal.so-2.7.8-141.el8.x86_64.debugy�0�7zXZ�ִF!t/����]?�E�h=��ڊ�2N�/ ���7]|l�]����ύE��Eč�i����pI�>����"�
�Ȳ?�fVr`�yQ�v;���^U�����N�����kC-}�]m!�|��LZ�C*M$f�Lޙ�t�~)Ɖ�`!�y:�sR)u=�k�7���دm����Fx`�W�ȸ>&n�צ��9_�{�j�B��_]r(��b�*��r�І-��S�9.��./{�������}�1� w��d��BϺ?F9_g���}�`�X8�6��KJ�w��t�.�:��l�^+E���1���� ��s�|s�I�cZ�w����#w�$=eZ�X<��=L9�C�چ/���fU >�@Ǖ��̜k����6�s��F��Z��v��?��^�������)��?�PG
4\P���]F�+9:��dAe$ R��Pc��{�,�t�����l���6�3�f�l���H�ϐCF�ҹu.�ޕC�,lɇH;���fOM�ZG�x�k�+��w�����m?�'0g��	��i�Y�g��
q���,��`}3UM���z~�F�)���g}ֶ�[cO�u�7?�az��r	�%F�Lw�e�</L*�y��)
l�\�-Q�^B\9�-!���z��~-�	B���矰��K�=�oތ*e<	Z��'����#k�%7��;���i��"���e��E�|�L�2�?�kɯ��
�H���А���]��1MU����V�vJ�؄Z4�:J�T�KIa��@�L����ܫ1v��O)�Wxv��,��Ml�T�0�Qq�Q��ܮ|�v��F]�!�|�����E—!�Ό��	Eu�9[j�"|M�K<�������A�6%(ძ>������}�[o?k#Рxgl��~����&���(K.��*�#.�(��l��h�^3rQY,�Xas�°龗��M��9����c�gn�ƶ�)��$,{džXm�A���[?��Ƿ��$a	S 8F�6#���O�`�[�\�^p��)�I�˔X3�k��䆴4�$xQ�~�^�=6'[T+�騧$$#'�q,�@�"�e��Č!EC}�C���,[o!�Q�ƀ����ڈw:�r�nQt@��]e��G�R#�QF���ۧ�֛��Ѹ���)��^��Ջа��n�j��Yq}M��z^���`̲�8��I�{Z}��i'��]le3e��`�^D�(TPm ��G�G�G˱@�[_ŷ ���E�����]�'�W�$ �D�M��U~��G�`m忞v���̋{2M��j��@��/Ŵ9K�4	���N�J'[D�������=�w�oR�����PbP��^�'��VإS��X)�x
1�t3ˆ���j~�sA5�*>7Ԭ���r�R�ߋw��E��$�`��p��(�a����[BOT�CN��}���׹��V�*�%?�7;�ce��^��a�-����,_���v�|v��vE�7�����P���-�*;��=GZ��|��y��s�@
=�{%H("C����T?#�����P��-n��:CXIA���Q4[6�E�=�y�W�
~��"Cc�x����3�s�lb�
�=�-����c�rCi^)Վx��~�,(#�뮒����s������߃Ϣ(5R����M���#�QO�L8~8��Z��
�+#ē��ښavզ�tx�;�Ҩ�U�ToI%@���ڀ@�|2-�^`e�eWp�$�dWC�/z\�,��<#�'V(���
�Y�/^�ߒ8�]Uևw���s����K��j��H®#����c  �������KĠ���`����dc�~j��~Ǥ����՞�P�[��@��������$~�c��-��0�l�Bb��&���,u����B�GK����*��6/3ɩ��1���}'ƲC��?{ 1�yu���LJ~u�jgg�C�`.2XY��R���0������?���ʱ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``D(���
0�
�
8���o���E���o��pT�^B���hp!p!c�!�!�n`'`'�w - -D�}dd
�����pp��(�0000 ��<!�<��<!�<��<!�<� �h=!h=��X?!X?��@!@���B!�B�C!C �(DaCDLE0"|E�M1PK�#[(ruby/bigdecimal-3.0.0/gem.build_completenu�[���PK�#[/*��S�S#ruby/bigdecimal-3.0.0/bigdecimal.sonuȯ��ELF>�.@�L@8	@�-�- P9P9!P9!�� (:(:!(:!888$$�-�-�-  S�td�-�-�-  P�td�����Q�tdR�tdP9P9!P9!��GNUһ�n��n�����\iW��q�Ah@qvBE��|��X��=��|�!i��؁�9�w�qX��F���)��h� ������Ex��tnY�@�M��hv
�l�UB�1���M� T]�����R5Ze�"�{y��"�"�1'��^��$A��+��#���x, 6���w�bF"pq#���@!>(A!�@�D0A!��c�4 A!U@!�@!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizegOne_ABCED9B4_CE73__00400511F31Druby_xfreerb_thread_currentrb_thread_local_asetrb_obj_classrb_class_namerb_str_duprb_str_catrb_exc_new_strrb_exc_raiserb_inspectruby_xmallocmemsetstrlenmemmove__sprintf_chkrb_thread_local_arefrb_num2ushortrb_yieldrb_protectrb_jump_tag__stack_chk_failrb_num2ullrb_ull2inumrb_eFloatDomainErrorrb_raiserb_eArgErrorrb_fatalmemcpyrb_bugruby_xreallocruby_malloc_size_overflowrb_num2intrb_fix2intrb_error_arityrb_id2symrb_hash_lookup2rb_check_string_typerb_sym2strstrncasecmpstderr__fprintf_chkrb_sym2idrb_eTypeErrorrmpd_parse_special_stringstrncmprb_str_tmp_newrb_str_new_cstrrb_str_resizerb_warnrb_data_typed_object_wraprb_freeze_singleton_classrb_string_value_cstrrb_cBigDecimalrb_eZeroDivErrorrb_num_coerce_binrb_intern2rb_assoc_newrb_float_valuerb_funcallvrb_typeddata_is_kind_ofrb_big2strrb_rational_numrb_rational_denrb_int2bigrb_str_newrb_ll2inum__errno_locationruby_strtodrb_float_newrb_ary_new_caparb_ary_pushrb_Rationalrb_usascii_str_newrb_memhashrb_category_warnrb_num_coerce_cmprb_num_coerce_reloprb_num2llrb_big_cmprb_eMathDomainErrorruby_snprintfsqrtrb_cFloatrb_keyword_given_prb_opts_exception_prb_hash_duprb_cFalseClassrb_cIntegerrb_complex_imagrb_complex_realrb_check_convert_typerb_cNilClassrb_cTrueClassrb_cSymbolInit_bigdecimalrb_ext_ractor_saferb_cNumericrb_define_classrb_undef_alloc_funcrb_undef_methodrb_str_new_staticrb_define_constrb_define_modulerb_mBigMathrb_thread_check_intsrb_check_typeddataroundrb_dbl2bigrb_big_packrb_define_methodrb_define_global_functionrb_define_singleton_methodlibruby.so.3.0libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.3.4GLIBC_2.14GLIBC_2.4/opt/alt/ruby30/lib64� ui	�ti	���ii
)ui	P9!�0X9!`0`9!`9!�9!��9!��9!�	�9!#�9!��9!@2�9!�0P?!	X?!`?!vh?!p?!x?!�?!r�?!"�?!w�?!5�?!7�?!:�?!C�?!N�?!]�?!a�?!b�?!e�?!i�?!m�?!oP<!X<!`<!h<!p<!x<!�<!�<!�<!
�<!�<!�<!
�<!�<!�<!�<!�<!�<!�<!�<!�<!�<!=!=!=!=! =! (=!!0=!#8=!$@=!%H=!&P=!'X=!(`=!)h=!*p=!+x=!,�=!-�=!.�=!/�=!0�=!1�=!2�=!3�=!4�=!6�=!8�=!9�=!;�=!<�=!=�=!>�=!?>!@>!A>!B>!D >!E(>!F0>!G8>!H@>!IH>!JP>!KX>!u`>!Lh>!Mp>!Ox>!P�>!Q�>!R�>!S�>!T�>!U�>!V�>!W�>!X�>!Y�>!Z�>![�>!\�>!^�>!_�>!`�>!c?!d?!f?!g?!h ?!i(?!j0?!k8?!l@?!nH?!p��H��H��!H��t��H����5z!�%{!��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_�������%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!D���%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!D���%u!D���%m!D���%e!D���%]!D���%U!D���%M!D���%E!D���%=!D���%5!D���%-!D���%%!D���%!D���%!D���%
!D���%!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%�!D���%}!DH�=q�1�����H��H�=��1�L�D$L�L$H�$�3���H��H�$L�L$L�D$�;L����H��!H�
R��H�0�H�81������%��UH�56�SH���H��dH�%(H�D$1�����H���H���KMH��H�Hk{	H�$�7���Hk{	H���*���H�L$dH3%(t�u���H��H��H��[]���H�=�1�����H�%f.�f�H�=!H�!H9�tH�N!H��t	�����H�=�!H�5�!H)�H��H��H��?H�H�tH�}!H��t��fD�����=�!u+UH�=j!H��tH�=�!����d����}!]������w������H�GH��(�ff.�@���!�fD��H�����B f���*f����f�����f����f�����L�Bf�H�M��t6�J$f���H*��Y
���X�I��v�J(f���H*��Y
���X�H�RH��H�f��fW�������H�1�H���H�Y�H��H��f��(!f. �ztH��
!��^��!�1�H��H��H��H��H���H������H��f���H��t�r���f��ff.�@US��H��H�-�!���H��H�TH��[H��]�e���D�O f��t'f��tQf������y1�f���t�f.��NaN��@f��uJ������t|�0.0�Ã�t[��u�+H��H�Infinity�FH�����-0.0��F�H�-InfinitH��yf�F��@� H�����+0.0��F�� 0.0��F�SH��H��@��uEH�����t<����H���=���H�������!H�5��H������H��H�����H���^���������SH�����H��1�H������[��H��tS�G �Pf��w�I� H��s�DH�W�>FH�D�u�H�OH�D�H��xH9�s�H)�H��H��@��f�H��H��H��H)�H��ff.�@AVAUATI��USH�����H��t^I�����tTI�>(1�1��1fD<.tD���<Et3H��H�jL9�w@L9�s!H���H��t<-w�I��H�js�L9�r�[]A\A]A^ÐH�j1����I��H�{H��L��H)�H������� 1��AWI��A��AVAUATUSH��H��(H�T$��H�<$H�t$�4�����u0f�{ x8A����H�D$A��u+H��H�@�+��H��([]A\A]A^A_�A�-I�A�0.L�x�E1�f�H�$A�����H�@H�D$H���?f�H�$�	��F�l�$�D��1���A��A������tOH��t
�A9�r�D��1�H�
��L����H�����I��1��i���L�����1�I��f.�I��L9d$�q���H�4$A��H�F�N$L������w���������I�����9�w�@��0uI��A�A��0t�1�H�
��L��H���������H�|$�����H�t$H�|$H��([]A\A]A^A_�{���H�t$H�F� ���H�4$�.H�F�N$L�������U�����SH��	!��H��H���x���H��tH��[��f�H��	!��H��H���d�[�ff.�f�SH�p	!�S�H��H������H��tH��[�9�f�H�A	!�$�H��H����1�[���USH��dH�%(H�D$1����H�T$�H�=�!������H���.����|$��uH�L$dH3%(H��uH��[]��W����f�USH��H��!��H��H���S�H��tH��H��[]���1��1���H�b!H���R�H��H��H���4�H��1�[]�ff.�ATUH��S���H��H�����H�-!I���
�L��H��H�����H��[]A\�@��USH��dH�%(H�D$1��1���H�T$�H�=`!H���x�H��H���}����|$��uH�L$dH3%(H��uH��[]��6���PXH�5X�H��H�!H��H�81���ff.�@H���G f��tf��t-f���tH�������H�=��������H�=5�������H�=������ff.�@PXH�5��H��H��!H�81��"�f�UH��S��H���`���f�� t*f��t5H�H��rH��H�=|�1���@H�������H��1�[]��S�G H��f��tf��tMf���t'H�[�f�H�5���o���H�[�f.�H�5I���O���H�[�f.�H�5���/���H�[�f.��G �Pf��w�IH�����H��s��F �Pf��vKH�WH�NH�GH9FHCFH9�t�H��H)�H)�HH�H�s�H��H�5������H��H���IH�����H��s��D�F f�����R f����f���@��f��A��D	�f��tef���t_@����������L���f����A��G$H�5��H�GfD�G �����@��tS������t���f����f��~N��1��G$H�5��H�Gf�O ����@������tbf���_���f�������G$H�Gf�w H�5Q���W������f.��Hf�����d���f�f����f�����Df������<���f.��Jf�����$����f��~Lf��~L��G$H�Gf�W �a���f�f��~f��������f���$�������f��~�������G$H�Gf�G ����ff.�f�H�OL�1H��~;H��~'I�@H����H��������H�H��H����L�G��DH��y�I�@H����H�AH��v�H��H�H��H���f� �G$H�G��f�w H�5�������f�M����H��������H�I��H���N���fDf� ~1��G$H�Gf�W H�59���h����������G$H�Gf�G ��fDM��~#H��������H�I��H���
����'���DH��H�I��H���������f.�H��H�I��H��������:���f������f�O ���f��O �Af��w#�]H��s���G$1�H�G�f�H�W�f.�H�B�D�D�$E��u2H��H��u��G$H�Gf��~f�1�f�W �f.��w$H�W��urU1�SH���H��H�u�L�$��t�H��tH)�H��H��H�W�����uH��[]�f������f�G 1��H�CH�t�(H�{$H������ʸ�ff.�f�SH��H��uH�GH�p�H��tHH���A$�P�Q$���ɚ;veH�����D�$�P�T�$H�����ɚ;vA-�ɚ;�D�(H���uھH��������t�C$�H�C[�H���f�H���X����[ÐAWA��AVAUA��ATUSH��HH�GL�$�I���L��L�_H�r�q�qH��L��H��?H)�1�I��H�T$I9��y�D�$A�H�JH��L���$H��H��I��H)�H�D$8I)�L��H)�H�D$M����E1�1��f��؍�H���L9�|�k�d1҉D$�$��A��1������D$$D������H���������A)�I9�vT�t�$��K���	���i�ʚ;9����K�#D�t�$���	����i�ʚ;9���H��I9�wً$1�1�J�|$L�D$0�t$H�D$L�L$(�$H�������2�fA��L�L$(L�D$0wiH�6�E��Jc�H�>��@f� �G$H�G�NA�1�fD� H��H[]A\A]A^A_�D�$E��t1�f�} ���DM����1�D��H���I9�}�ɚ;�nM����f�} H�E�E$H�E�7�f�M H��H�EM��tYH���8��8��L��H��H��HUH��I)�t8�U$1ɾ�KfD��ҁ��ɚ;v��	H�E����H��I9�uۉU$H��H�[]A\A]A^A_�@�F�f������L�_1�M������G$I��L�\$�A��E1�A��$H�D$8H�D$�t���fDH�D$1�J�|$L�$L�D$H�������^�fA��L�$L�D$�����H��E��Jc�H�>��D�����f�U ����f�B�\�$H���������D$$A��w�B���D�\$$E���4���@��M���-����f.�A��������@B�D�$H�t$H���Z����O���DA�����1�fD�w ���fDD�4$�D$$E1��D$
����<$�������f�} ������D�,$E��������Y����A���N����x����t$$���<���H�|$8u1M���d���B�D� �������Q���A�������8��������؃������#���ff.�D�W$E��tWH�GA�����H��H��L��I)�D��A����A��	w	�D�щ�I��A�����	w�I�P������f�1��ff.�f�ATUH��SH�����H��I�������tbM��tMH��t@H��H���8��8��I�T$H��H��1�H��H9�w&��[L��H����]A\�-���DH�]�f�1�[]A\�f��������f�AVA��AUI��ATA��UH��S�'�L��H�����I�����u5E��t0f��w*H���Hc�H�>��f�A����vf�} x []A\A]A^��A����v�f�} ~�H��L�����[H��]A\A]A^����DA���E�#w��DA���d�w��DA���E�#w�A��e�A����w�A��t���A����w��j���f.�f.��&f(�fT
Z�f.
���f��f.��ATf(�USH�� f/�wfW
��%��f/������1���^�H��f/�s�L�g1�H��H�$�T$J���L$�D$�&��L$f���T$f/���M����1���I9����Y�f��H,ɉʉL�$H���H*��\�f/�w�I9�vd�l$L�`�����f/�vj�YʺL�cf�S H�k�H,ɋT�$�f������G$H�Gf�O �f��t$1�I�D$�f/��������Y�f�S 1�L�cH�k�H,�M��u�H�� H��1�[]A\�G����f/8��G$H�GvA�fD�G ������f�w �fD�% �1��6�f/��j���@�Y�H��f/�w��S���DE1��G$H�GfD�O �1�����AVAUATUS�F H��f������f����f������Pf����H�VL�nI��H�W���f����OŅ���L9oLFo��M�������L�oI��f�G ����
t.M9l$��M�1�A�L$$M��tA�T$ L��H�����L�kK�D�[]A\A]A^����C$��f��H�CN��~S�1�f�s []A\A]A^���G$1�H�G1�f�{ []A\A]A^�H�$H�v$L���P��O��������1�f�K �t�������G$��f��H�GN��~+��f�W �<���1�H�����L�k�$���D�����f�G �����DATI��UH��S�Ӻ
�:���H��v��L��[H��]A\���f�[1�]A\�f��N$��tyH�FH��~pH�V�N H9�ssH)�H�GH�GH9�HG�1�f����������H�Wf�G H�FH��tH��H�H��L���L�$A�L�$H��H9�u���f�����fD�G$H�Gf��~�f�W �f������f�G �fDAWI��AVI��AUM��ATI��UH��SH��L�D$�9�I�WH�|$P�E$H�L$XI�^H�uI+_L�M9VMCV��H�~�L�D$I9���H��I�uH���8��8��H��I�FH��H;EsRI�$I�OH�EH�4H9���H�KH9���H)�H�H�I�H�H9���A�D� H�L$XM�U��/@I�<$H9�r�A�D� H�L$P�뛐I�I�FI��I�$M�UI�FL�UH��H�E����H�����HD�H��H��[]A\A]A^A_�DI�M�U��I�����M�U�AWAVAUA��ATI��UH��SH��H��HdH�%(H�D$81������Ƀ���1҅�tOA�T$ �M �r�A��f���uef�����C$H�Cf���tA��fD�[ @H�\$8dH3%(H���qH��H[]A\A]A^A_�f.�f���_E1�A���H�EA��G�t6�I9D$���*M�D$H�}I9�H��IF�H��t5�E$A9D$$�|��1��f�D�\�$E9\�$wd��H��H9�u�I9�wP��A��1�f��M���@���f��NǍDp���u+A��C$�	H�CfD�S ����@M��1�f��A���E1�f��fD�K A��H�L$ G�|?�E��E�|G�H�D$fE����PL��H��H��H�D$ PL�L$@L�D$8���_AX�D$H����L�D$(I������L$L$H�|$ H�t$0�L$M��t3J�H9�r�f�J�H9���I��H��B�T�$�T�$M��u�H9��dI��I)�I�H���D�$I9�u�1�H����H��I��A�D�$B�D�$1�H��tnJ�L� H���f��1�H��H��tKH��AD�$=�ɚ;v�-ʚ;����DD���f��DN�A����v���fD�k ��{���I)�M��tBD� 1�fA����������f�C H�C1�H��t�T� �L$1�H���9���H�CH���,���@PH��H��L��H�D$ PL�L$@L�D$8�	���Y^�D$H����!L�D$(I�����t$�L$�9�r)�1҉t$H�|$ J�4H�L$0H9��nM��tMA�ʚ;A���fDJ�4A�H9���I��D��H��B+T�$D)҉T�$M��uѺH��H9�v'H��A�ʚ;D��H��H��)к�D�$H9�r�E1�H9���@H��tFH��H)�L��H���@)�1�A�t�$H��t"H��A�t�$9�s�ɚ;���f�H)�H��t)T� M9���1�fA�} E�����D�D��1�A����������f�C �E���D��H��H������H�CH���}���DI��L���p���D�L��H�����H�CH���K���vfDH��H��A�D�$�D�$H9�r�M�������L��L��H��H��L�<�L��M�I��!@)кʚ;D)�A�D�$H����A�D� H��D�L�$E�D9�r�)�1�D)����8E1��H��H��A�T�$�T�$H9�r�M���H��L�L� L��L)�M�T�1��f.�A�1�I��H��t*A�T� H��T�$�=�ɚ;v�-ʚ;A����DL)�L)�I���B���f.�L)�L)����DfA�|$ ~w�f�S ���f��L��H���0����p����L��H���������H��H9����������D���_����y���f.������f�C �,���I��1�������AWE1�I��AVAUATI�̹UH��SH��H��X�F$H�FfD�V L��H�T$@L���������A�W A�L$ �r�A��f�����f���f���`f���`��E$H�Ef�E H�|$@A�D$ f� �f������C$H�Cf�S f�H�EH��H��X[]A\A]A^A_�f����I�D$H�D$HH����H�EH�|$@H�D$0H�wH�CH�D$H9�����C$H����H�V��DH�ȋL� �L�$H�HH9�u�H�D$H9T$v�H���D� H9�u�1�H�|$0H�T$0�<@H���D� H9�u�A�D$$H�D$8Hi�ʚ;H�|$HH�D$ H�D$v(A�D$(H�D$8HD$ 1�H�t$ H�|$H��H�H�D$H�D$H�t$0H��H9�HG�H�D$H����H�D$HA�I�SZ��/�DH�<�L�p�H�|$(f�J��I�uH�<�G$����Hi�ʚ;D�_(L�H9D$ ��H9D$��H9t$0�%1�H�t$8D
(M�L$M�I��L;L$����H�|$(L��B�L�$E1�H��L��L��M��GfD��ʚ;F�D)�L�$H���L�$E��tD9�se��ʚ;D)�A��L�$L��H)�I9�r\A�t� 1�I��H���ɚ;vH��H��	H��I��H���Љ�Hi�ʚ;H)։�H9�r�)�A��fDL��D)�E1�H)��L�$I9�s�D)��L�$B�D�$J�T� =�ɚ;v-ʚ;H���B�B���B=�ɚ;w�L;l$�����H�D$0�H��H�EH�D$@H�@H�E�N����]H��X1�[]A\A]A^A_�DI��L;l$�B����1�H�t$D
$I��I�D$M�L����L�\$HI�UI��v<�,A9|$,�B���r,M��K�<+I��O����E�T�$D9T�$����w	H��H9�u�I�D$L�P�O�LL9L$����L)�L��1�M���&fDʚ;�D)��D�$H��L��H)�L9�w A�|� �D�$D�7D9�r�)�1�)���fDH�A$���A$���f���`f���`A��E$H�EfD�E H�5}���j��H��X[H�]A\A]A^A_�I�t$H��H������������H�|$@A�D$ f� �Lf������������f�E H���O�H�D$L�|$@H�߾H�CI�GH�C�|����.���1�fA� H����������f�C ������f�������������E$H�Ef�u ���A�|$$����I�|$�����L�|$@1�f��H���T�L����fA� �z���������C$H�Cf�K �~���f�������������E$H�Ef�} ���E1��E$H�5��H�EfD�M ����H��1���f������f�������������������A�D$$H�D$8Hi�ʚ;H�|$HH�D$ �������f���H����USH��H��H�FH�4�$���H�sH��H�pH�CH�EH�CH�E�C f�E �C"f�E"H��H��>u1H��H��u
H��H��[]�H�}$H�s$���H��H��[]ÿ������ATUSH��dH�%(H�D$1�����H�T$�H�=.� ���F��H���Ã���wHL�%�� �l��H�TL��H���L���|$��u0H�L$dH3%(H��uH��[]A\���k�����T������ff.�@��ATI��US���^��H��������xIH��u
H��[]A\�D��u2I�<$H��t�@��u�����x'Hc����H��[]A\�f��K����1����[��H�l� H�5զH�81�����H��tzATUSH��H�=� ���H�ߺ4H���w��H��H��4t>H��t8<tL�uH�������H�����H���8H��H�H���0�[]A\�G����;��H��� ��H��H��H��� ��L�eM����H�EH����H��u8�H�5w�L����������H�5Q�L����������H�V� H�8H��t}H��H�5�1����@H�H�ƒ�H���U���H��H�������T���L�eH�����[�����H�5��L���L����u��[]A\�fDH�5W�1��:��H��� H�8�f���H��� H�
B��H� �H�81�����H�E�� �����n���f���f���f�H��H��H��@��tOH��H���H��tH��t@��u@��tB�L���Ѓ�����H�� H�5̤H�81��u��DH��t�H���H��u�����H;� tqH;�� txH;�� toH;�� tvH;�� tmH;�� ��H;�� tgH;�� t^H;w� teH;f� t\H;U� �b����H���D���f����f����f���f���f���f���U��SH����~H�>��t �����������fD�@��uU�����ń�uU=�T���H��tH���D����Ѓ�����������H��H�\H��[]�fD�3���ń�t��(��H��t�H��t
H����@��t��%����H����E��������@��t��%����H����E��������@��t��%����H����E��l�������t��%���H����E��I�����H����H�\H��[]�f�H�-�� ��H�\���H��H��H�����H��H��[]�H�u� H�5��H�81�����H�^���H��� H�5��H�81����ff.���AVH�5��E1�AUATL�%�� UH��M��S�H��H�������t)I��I��I����I�]I�uH��H�������u�H�T�
��t@����	��v�� u�H���
��u�(���K�vA�T�H�@�@$H�@��t-��t�����f�P �	�1�[]A\A]A^þf�p ��1�f�H ��f�AWA��AVAUATUH��SH��H��8�L$���H�}H���8��8��I��H��H��H��H��	I��I��H���n�H�މ���	��w�H�������	��v� t�#t]M��u0H��H�4$����H�4$H��I��tHH��8L��[]A\A]A^A_�fDH���8��8��I��L��H��H��H�BI9�LG��H���f�H��H�t$H�D$���H�x����H�t$L�D$H�H�D$ H�$�� �^H�D$ L�h��P�A�E����<-������؉$H�F�1�H��I�|I�>��*���0��	�\H���LH��I�|H������&	E��uD��A��	A��v4�� t/��_u�H�����L������9wI��r�E�����M��1�E1�L�l$�J�T%H�L$H���8��8��H��H��H��H��M��LD�I9�LB�J��$H������<$H�L$I��L�p�@$H�@�A�fD�P I�@$1�H�S�H�L$H��L�$H�D$���H�L$L�$H���dH�D$�<-�SH�D$1�<+u	H���H9��3H�D$1�L�$I��������H�H��zDL��H�H��H���H��I��H��	��L�H��M��H�L��A��0Mc�M)�I9���H�L�X�H��/H����I9���H��H9��L��H��u�H�E1�1���L�hM����������fDA�DE����E1�1�E1�E1�H�D$H��u	M����L�|$K�D
H�D$M�����L�A�
���.�YH�D$(E1�H�D$A�
���D��!�E1�1�E1�E�D��A��	A��v�� uH�t�H���ƒ�	��v� t�����E���_���H���T$(����>���M���5���f�D�\$E���
���H���Z��H�5K�H��H��� H�81������E��u�J�<�$����I��L�p�@$H�@f�X ���f�H���$1��N����$H��A�E<-�p�D$1�<+u	H���I���8��8��E1�H��A��1�G�\�fDL�L��H��?H��L1�H)�H��I��H��H��H��H��H9����$���H�t$1�H9���@�H��w.H9�v)1�D�<�A�D
H��H���DxЉH��wH9�w�H9���H��M��tXM�T�$1�fDH���L9��A�
H����<�A�H��H���Ly�A�
H��wL9�r�L9���I9���I�V�H��wI���B$��H���H��	u�B$L��I��?M�pL��H�r�q�qL�$H��1�L)ʃ|$��I�P������fA�@ �-��L�$H�|$ 1�L�$�)���L�$����H��H��I9�����1�����H��I��1�I9�������F���H���7����H������L�r����A�I��H�I!�M���hL�JL�XK�L
J�<I��H�L$�A�
��+����L�XH��J�<D�I�|1�D�E��tXE��uA�ƒ�	����A�� ��A��_��A�ƒ�0��	�wH��F�TH��I�|I��D�E��u�A��V���H���H�D$�������f�M��~;L��H�I��H����������H�|$L�$�$I��H�����H��H�I��H�����A�����fD�H ���H���D$��������H9�w����tA�|
0��H��H9�r�M��t"��t1��	D��tA�<0��H��L9�r������GE���>�|$A�@$I�@���fA�x H�5���L�$�e��L�$�s���H��H��E1��I�|H�T$���tEE��uD��A��	A��vk�� tf��_t@��0��	��H���LI��I�|H�����u�E1�1�E1�H�D$(���f�M��tD�LD��A��0A��	v�E�������L�|$�1�L�l$M����H�|$L�$�$H��H����E���c���L�|$K�D
H�D$M����1�M��������|$A�@$I�@���fA�H �N���H�|$L�$�$I��H����H��tB�DA�ƒ�0��	�J���E������L�|$�M��;���E1�1��X���E1�1�E1�E1�H�D$(H�D$�r��������fA�p �3��������fA�P ���L�����H�t$L�$�$H�<.���M�������H��A�����H�D$(L����N�L��A����1�E1�E1�H�D$�L���ff.�ATI��1�UH��H��H��� SH���a����L��H��H���I�H�C H���u	H�����uH��[]A\�H�H�у�H��t�H�р�H�{H�tՀ�u�H��H�D$�W���H�D$���UH��SH��8H�t$H�|$dH�%(H�D$(1��t��������H����:����0��	��1��@H����:t��0��	��Hc�H��H�Q���u�H�S�H��	H��HG�H��H������H��H�H�D$H��v"H���8��8��H��H��H��H9WvH��H�W���H�t$(dH34%(u9H��8[]�1�H��H���{���H��H�H�D$��H��� H�5@�H�81�薷���q����AW�AVAUATUH��SH��H��HH�t$������9H�D$�U �@ �Hf�������Jf������H�|$H�H�|$H���&L�eI���VH�|$L9���H�D$N�< H�CI��H��H�|$ H9��sH�EH��H�CH�D$H�p�<������H�D$8H�D$f�} �@ ��f������������f�C N�,�1�H�{$L�����H�|$ L�{�sI�D$�L�t$ N�L+ E1�H�D$(H�D$I�SZ��/�DA��KH��H�D$I�G�H�D$0�M�~�L9l$��L�\$(L��H+|$H�D$I9���H�t$L�D�$�f�H��I��L9���A��t�$H��H��H��	H��I��H��H���ʉ�Hi�ʚ;H)�A1���ɚ;v���	��A����
i�ʚ;)�A�1��t�M��t�AA�L����A�A�=�ɚ;w%�z���f.��L�$щL�$���ɚ;�Z������	��A���i�ʚ;)��L�$H��H���u�H��I��L9��7���fDI��M��I��L9l$ ����H�|$8��H�����H�|$8�H������H���<���H�D$8H�@H��H[]H��A\A]A^A_�f���'f���'��C$�H�Cf�S H��H[]A\A]A^A_�K�<���H�5Ґ��I��H�EL��I�EH�D$H�p������GL��蜵��H��H1�[]A\A]A^A_�L��I��H�D$H��H�l$H�D$���H�|$�$����H������1�f��H��H���T�����H�\$8����}$�����H�}�����f��H�t$H�����ҍT����H�\$8����f������������C$f�C �H�CH��H[]A\A]A^A_�H�D$0L)�L9l$(rL��I��H+|$����f�M��1�����f�������������j���1�H�����H�\$8�!���H�\$8L���%���AWAVAUI��ATI�ԺUSH��H�����H��hdH�%(H�D$X1��(H��H�H�D$H�؃�H���e��u
H������1�H�����H����I��M���.I�H�D$�E f���AA�N f���3f����f������Qf�����H�5B� H�4$H�f���qf����g��f�����H�MH�EI�vH��?H1�H��?H)�HEH��I�FH1�H)�IFH�57�H9�HB�L�|�	L���`���K�|?H�5	�H��H�H�D$ H�$H��=���L��H��H��I��H�L��H�D$(���H�CH�5ٍH�<�H�$H�H�����1ɺH��I��H�L��L�L$H�D$0����L�L$L��L��L���~��������L��H��H������C L�L$��f����ef�} A�F �Ef���LH�� L�ι����L������L��H���j��H�5&�H�<�H�$H�H��P����L��H��H��H�H��H�D$8���M�<$�I�m�H���H��t,H������H�E�H��H�4��I������D��H���I�����fDH�-1� H�5͎�H�U���H�UH�5��H��H�H�D$ ����H�I�$�I�]H�T$(H�L$XdH3%(��H��h[]A\A]A^A_�@f��������M�$�I�]뺐f���^���f����T�����f����u2H��� H�5��H�81��:���f.�1��r���f�H�I� H�5���H�H�$���f�} H��H�H�D$ ��fA�~ ����C$H�Cf�S H�$H�5���H��o���H�I�$I�E�H�T$(����DH�5���?���H�I�$�I�mH�T$ ���DH�5܊�����H�5ˊH��H�H�D$ H�$H��[���fA�~ �F���������C$H�Cf�C �A��������UH��SH��H��8dH�%(H�D$(1�H�L$H��H�$H�D$���H��u-�%H��H��蝱��H�t$(dH34%(u-H��8[]�fDH�$H�|$H�H�D$H�H�D$貾�����K���ff.���ATUH��SH��H��@dH�%(H�D$81�H�L$H��H�$H�D$�@���H��u[H�� L�%��H��u!��L���#���H��� H��t�H��H��H���ɰ��H�L$8dH3%(u@H��@[]A\�H�$H�|$H�H�D$H�H�D$���H�<$H���ֽ��H��H��蛯����d���@AWAVI��AUI��ATA�4U��SH�@H�H��dH�%(H��$�1�H�D6H�$A��uJI�������M��u8����1�H��$�dH3%(�\H��[]A\A]A^A_�DI��t�I��t�I��4t�A����A��t�M���mI���L��������f(�fT
��f.��qf��f.�z��H�5�� L��1�1�莭��I���.���fDI��������.���H�C�Hc�H�>��DH�5�� L��虫��������I�F ������
L���C���H��H�D$8H� �.H�hH��H��诫��H��H�x
H�� H������@M���gI��4�M9������L��蜯����H�����H������H��H���_���L�<$H����L��H�T$赮��H�T$H�D$H��蓻��I��I����L��A���y脯��Lc�M�����RH�t$L���8I������DH�\$pM��1�H��I��H�
���B���H�� H�޿H������fDH�hH������L�%D� 1�H�
ˀH����I�<$�N���H� ��H�[H�������I�<$H�
��1�H��H�o�������g���fDH�t$H�L$0H�T$(H��H�D$(�H���H����H�H� L�=��H��u@�L���+���H�$� H��t�H�t$L��H���Ϭ��I������1�L�L$�D���H�
� L�L$H�54�H�D$H�I�y�`�L���H�����I��H�H�D$@����H�|$�H�����I��H�H�D$H���I�WH��H�H�rH�L$H�D$PH�AIFH�
i� H��H9�H�HF�H�5��H�|�	H����H�L$L��H�H��H�T$XL���<��H�|$�r����ݵ��L�L$L����L�����L������I�����f.��K������fDL��H�D$�#���H�T$I���$���fDM������H�|$(趸��H���I���.���H�_� L��H�8脱��@���0���L���P���H�5�H��H��� H�81��%���DH�I� 1���$H�����$H��H�$���H�$�����
ˏf��H�� �^�H�f/�wH�5G�L���|����H�5<�L���h�����~���H������P�����USH��HdH�%(H�L$81Ʌ�x��v
�1��ѩ���H��H������H������H�5��H��H�H��H�D$�߰��1�H�p2�Ī��H�D$H�\$H� uyH��H�EH�
���H��H�����L��1��H���H��谦��1�1�H��H�4谱��H��蘦��H�|$H�����H�D$H�L$8dH3%(u@H��H[]��H�[H��u�H� � H�
�|�H���H�81��+����Y����A�������H��H����������P 1�f��tf��t�f���tH���fD1�H���f����H��H������w����P �f��t1�f�����H�D��H���D��H���H������7���f�x H�H��������H���H���������H�@ H��H�D����H���H���������1��H$��t9H�@H�<�H����w(H��������̺�fDH��H��H��H��H9�w�H��霣��ff.����U�H�����SH��HdH�%(H�D$81��U���H�53�H��H�H��H�D$�k���1�H���Q���H�D$H�D$H�hH� t
H�hH����H��1�1�H���^���H�D$H�XH� t	H�XH��t3H���+���H�|$H���~���H�D$H�L$8dH3%(ubH��H[]�f�H��� H�
Jz�H�(H�81��̧���f.�H��� H�
z�H��~H�81�蜧���J���貣��f���S�H�����H���7����@ ��f����HD�H��[�ff.���H���H���������@ ����f��H�H�����ff.���U�H�����SH��8dH�%(H�D$(1����H�5�~H��H�H�$H�CH�<�H�5� H�H���H��H��H�H��H�D$����H�D$(dH3%(uH��8H��[]����衢�����U�H�����SH��8dH�%(H�D$(1�����H�5~H��H�H�$H�CH�<�H��� H�H��*�1ɺH��H��H�H��H�D$���H�D$(dH3%(uH��8H��[]�o����
���f.���U�H�����SH��8dH�%(H�D$(1��u�H�5q}H��H�H�$H�EH�<�H�� H�H����H��H��H�H��H�D$����C ��f��1�)�f�C H�D$(dH3%(uH��8H��[]鿱���Z���f.���AT�H�����USH��0dH�%(H�D$(1����H�t$H�|$H��H�H��H�D$ �Ƨ�����
H�D$H==��H=����H�5^~H��衪��1�H��臤��H�D$H�D$H�hH� t
H�hH���#1�1�H��H��蔫��迟��1�H���I�����A�<$"�D$u'f.7���f(�fT
��f/
M�w+胣��H�L$(dH3%(��H��0[]A\�fDH�5Qx�����f�{ xp���;����f��D$�%�����y���f.�H�5x�迯��f�{ f��h����������[���fD�p��ˢ���C���fDH�1� H�
�u�H��zH�81��<�������R���f���U�H�����SH��8dH�%(H�D$(1����H�5�zH��H�H�$H�CH�<�H�U� H�H���������H��H��H�H��H�D$���H�D$(dH3%(uH��8H��[]�!���輞��ff.����AW�H�����AVAUATUSH��XdH�%(H�D$H1���H�5�{I��H�L��H�D$ �3���1�H������H�0H�D$H�t$H�pH�t$H�D$ tH�@H�D$H����A�D$ f���gf����f������Pf����f��H�D$���-0�@f�H�D$��<-��A�L$$<NH�l�HD�1ۅ�t=I�D$H��H����w+H��������̺�f�H��H��H��H��H9�w��s���H��H��I��襠��L�|$L��L��蕠��H�|$�+���L��H��耝���L���s���H���˛��L��H���`���L��H�|$HdH3<%(��H��X[]A\A]A^A_�f.�H�|$I��f���/I�D$H�D$H�����1�DE�|�$A�	���+fDL��1�H��H���������I��H��H��H��A��tKH��t
�I9�r�L��1�H�
wL��H��H�����I��1�輠��L���$���1�I��DH��H9l$�i���A�~�0A��0���f.�I��A�A�~�0t�����@L�|$I�oH���Ǜ��H��L��H��H��薞��A�A�H���������H�D$�NaN����L�w�-����@H�A� H�
�q�H��vH�81��L����A�����0f��y���H�InfinityH�D$H�0�@�[���DH�D$�yH�-InfinitH�8f�p�6�������ff.���AW�H�����AVAUE1�ATI��USH��dH�%(H�D$1��g�H��H���<���f�} �M$A��1�O�l-���t8H�EH��H����w'H��������̺�DH��H��H��H��H9�r�L�����H� �(H��L�pM�&A�� �M�fH�M� I��M)�H��u#H�-�u�H���c���H�$� H��t�L��1�1�H���8���H��I��I����(M����K�D?H�$H�ׯ H��u#H��u�H������H��� H��t�H��H�ƿ�Қ���*L��H��H�$蹚���H��輚��H�L$dH3%(��H��[]A\A]A^A_�f�I��A�����H�@ �����I)�K�D$H�$H�� H��u!H��t��H���C���H��� H��t�H��H�ƿ����L��H�������V���f�H���*H��L�,$���I�����蚘��f.���AW�H�����AVAUATI��USH��HdH�%(H�D$81���H��H�H��H�D$�ǧ���M$��t`H�EH��H����w"H��������̺�H��H��H��H��H9�w�H��~(H��	R1�f�} ��H�D�H��H�D	�
��H�|$8dH3<%(�EH��H[]A\A]A^A_��L�����H� �+H�@ L�pH��� H��u L�%8s�L���Û��H�l� H��t�1�1�H��L��蘘��I��I��� ��M�vI��L�d$M)�f�} ��M����K�D?H�D$H��� H��u)H��rf��H���C���H�Ԭ H��t�L��H�ƿ����L��L��*H�D$���H�ƒ�H��t$�����H����������H���H�������H��� H�5�tH�81�萕��H�������H����I�������I)�K�D6H�D$H�4� H��u H��q�H���s���H�� H��t�L��H�ƿ�B���H�D$H�� H��u*H��qf.��H���#���H��� H��t�L��H��L��������L��L���*H�D$�����ʖ��I���S����}���ff.�f���AUI��ATUH��S��1�H��8dH�%(H�D$(1�������XI����H��H�������H�5�pH��H�H�$H�EH�<�H�N� H�H�����L��H��H�H�D$耣��1ɺH��H��螶��H���&���H�L$(dH3%(��H��8H��[]A\A]��������I�}@�����4���I��H��H������
�H�5	pH��H�H�$H�EH�<�H��� H�H��"��L��H��H�H�D$�Ϣ��IcͺH��H�����H�D$(dH3%(u7H��8H��[]A\A]�Z���f.��[���I���b����1����e����Г����AUI��ATUH��S��1�H��8dH�%(H�D$(1��C������XI����H��H�������H�5oH��H�H�$H�EH�<�H��� H�H��3��L��H��H�H�D$���1ɺH��H�����H��膣��H�L$(dH3%(��H��8H��[]A\A]�p�������I�}@����蔒��I��H��H������m�H�5inH��H�H�$H�EH�<�H��� H�H����L��H��H�H�D$�/���IcͺH��H���L���H�D$(dH3%(u7H��8H��[]A\A]麢��f.�軖��I���b����1����Ŕ���0�����AUI��ATUH��S��1�H��8dH�%(H�D$(1�裠�����XI����H��H������~�H�5zmH��H�H�$H�EH�<�H�� H�H����L��H��H�H�D$�@���1ɺH��H���^���H�����H�L$(dH3%(��H��8H��[]A\A]��������I�}@������I��H��H��������H�5�lH��H�H�$H�EH�<�H�]� H�H�����L��H��H�H�D$菟��IcͺH��H��謲��H�D$(dH3%(u7H��8H��[]A\A]����f.�����I���b����1����%���萐����AWI��AVAUATI��US��H��HdH�%(H�D$81��q������D����I�<$���BM�d$�9������@�����ʏ��Hc�A��uI�����tI�$��H����L���?��A��1�腞��L���H�����I���n�H�5jkI��H�H�D$I�D$H�<�H��� H�H����L��H��H�H�D$�.���A��H��L��H���L�����E1�A�1������H�����L��H�D$���H�5�jI��H�H�D$I�D$H�<�H�u� H�H����H�|$H��H�H�D$襝����L��L��H���İ��E��u/H�D$8dH3%(��H��HH��[]A\A]A^A_�%���DH������H�L$8dH3%(��H��HH��[]A\A]A^A_���fD@��t2@��u`�'���E1�Lc�A�����fD�˒���<���fDH�����t�H���H��u����1�A���@���L���t��A���0���臒��랺1���藐�������A����f���AWAVAUATUH��H�����S��H�׺H��XdH�%(H�D$H1��U�I��H�H�D$ ���S��H�5kL��1�E1�H�D$�O���H��1�蕍��H�D$H�D$L�pH� t
L�pM����������L��L��L���9���L���!���H�|$H���t���H�D$H�t$HdH34%(��H��X[]A\A]A^A_�@H�}H�|$����I��A����@���1�z�������Lc�1�H�5;jL��1��|���H��f�M������J�D.�1�I��H�t������L��L���Ӕ�����2���fA� x{����L��urI�^A�+�h�H������Z���H���H���J���H�|$�)���H��� ��1�+��H�P�H���fDA�-I�^I�oM�_H����I��E1�A�����M��up�f�M��xfE�G$H��H�
Ef1�H������L�\$L�$����H���i���L�$L�\$A�����H�M��u�.H��I��M9��I��M��t�C�D�$H�s	���1�H����0�׈C���A�����H9�u��DH�S
H��u�.H��H�S	@H�Z�H��y	� @H��H�C�@�0H9�u���fDH���C��<0t�<.��M���o���L��L������_���H�I� H�
�`�H��eH�81��T���������ʍq���v�� t��0��	��K�L�L�lJ�H�H����u��t����L)��0�����0.H�sf���H�D�H�SH)�H�KfDH�B�@H���@�0H9�u�H�P	H9�u�H��H��H��H��H)�H�����H�\	����0f����I�^A� ����	���������߀�F����H�5AeL���I���H������H�P�H��� ���H��H���������1����ы��H�� H�5KdH�81��I����$���@��U�H�����SH��dH�%(H�D$1����H��H�H�] H�$H��tPH���tJH��x-H��������?H!�H�L$dH3%(H�DuAH��[]�@H��H	���f�H�EH�}$H�4��;���H1�H]��m���ff.�f���H���H�����dH�%(H�D$1�����H�H�$H�PH��~+�L� H�r���t��fDH�V��L�$��u,H��H��u�H�t$dH34%(���H���fD�x$����A�	A������	��׉�A��A�����	w�Mcȉ�A�����A������9�um1����Љ�A������9�u�ȃ�A�����	w�Hc�H�|$dH3<%(u0H�<�H��L)�H)�����x$H�օ��\���A�	�|���1������D��H��H������dH�%(H�D$1����H��H�H�~H�$H����L�NM�����N$E1�A����̅�u���щ�I��A�����	w�L9��L��H���/F�\� E��t��D�T�$E����H��u�L9����N$L�Dž�t1������f���H�������	v�щ������9�t�fDH�D$dH3%(��H��髄��H��t�H�|����@�L�NH)�H��H��M��yH��	�f.�t�L��I��H���[���B�L� 1����=���L��I��2fDH�|��L��k���L���`����H��I�L9�}�L�$L������A����H������SH��H��H��0dH�%(H�D$(1�H���H����@��u	H�����uB�H��������H�8H�<$H�D$(dH3%(��H��0H��[���f�H���H��t,H��u�H�C �H�@H�4��8��H�8H�<$�������H�H��H�T$�ɔ��H�L$(dH3%(uH��0H��H��[�y����D���@AVAUI��ATI��H�����U��S�ӺH��0dH�%(H�D$(1����I��H�H�$L��H��A����L��H���H����H����A����A����1ҾL���Q��H�H�T$H�T$A�V f�����H f����f���@��f��@��	�f����f�����@����f������*��"���H��c��Hc�H�>��H�5ْ L��豂����uM��*��"�!H��c��Hc�H�>��DH��t�I�$������w�H�YdHc�H�>��1�H�����L���_��H�H�T$H�T$A�V f���������*tf.�1�H�L$(dH3%(�AH��0[]A\A]A^�DI�F1�L��H�4����H�H�T$���f�H�i� H��]H����f��H���c���H�<� H��t��f�H�1� H��]H����f��H���#���H�� H��t��aDH��� H��`H��uD�H�����H�ԗ H��t�H��L��L���A���H�������������H��H�L$(dH3%(�H��0L��L��H��[]A\A]A^�V���fDH�q� H��u%H��\D�H���[���H�L� H��t�H�L$(dH3%(��H��0L��L��H��[]A\A]A^鑂�����)�@��EЅ�������*��H�؀�"�E���H�
fb��Hc�H�>��D�q�z��f�����f���3f���^f����H�xI9~���f������*��"�ԅ��H��b��Hc�H�>����f���D��*��"�����H��b��Hc�H�>��1����f�f����f���}�����*��"�^���H�#c��Hc�H�>��fD�����fDH������������f�H��������f�H����������H��D�H�B���f.�f������d���f���*��"�����H�c��Hc�H�>��1��f���������*��"�����H�pc��Hc�H�>��f������*��"�j���H��c��Hc�H�>��L�HM�FM9�L��IF�H��t*A�v$9p$r�w61��@D�T�$E9T�$w�r H��H9�u�M9��L���f����������f��������*��"���H��c��Hc�H�>���4~����*��"�ă��H�Ed��Hc�H�>��H���}���ff.����G���f����>���f����L���f����<���f����=�r���f����*�b���f���AU�ATI��USH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H������u	H�����u[1�H�����H������I��M���VI�EfA�} H�D$tf�} uvH�EH�L$(dH3%(�aH��8[]A\A]�H���H��t$H��u�H�E�H��H�4��a��I���@��H���F��I���o���fDL��H���m���I��H���tTH�<�H�ɑ H�5XH�H��G��H��H�H�D$M��uMf�} �C$H�C���f�S �;f�H�y� H�5�W�
H����H��H�H�D$�����L��H��H���7���H�D$(dH3%(uRH��8H��[]A\A]�5���DH�D$(dH3%(u+H��8H��L��-[]A\A]�~��fD�����f�C ��{����AUATI��UH��H��SH��(dH�%(H�D$1���������Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]���@1�蹉��L��H��I���k���L��H��蠉��H��H��������H��H�H�$���H��H����蟖��H�D$dH3%(u!H��(H��[]A\A]�
���D�Sz���C����z���t���@��AU�ATI��USH��H�����H��8dH�%(H�D$(1����H��H�H�$H�؃�H������u	H�����u[1�H�����H������I��M���VI�EfA�} H�D$tf�} uvH�EH�L$(dH3%(�aH��8[]A\A]�H���H��t$H��u�H�E�H��H�4��Q��I���@��H���6��I���o���fDL��H���]���I��H���tTH�<�H��� H�5UH�H��7���H��H�H�D$M��uMf�} �C$H�C���f�S �;f�H�i� H�5�T�
H����H��H�H�D$�L��H��H���'���H�D$(dH3%(uRH��8H��[]A\A]�%���DH�D$(dH3%(u+H��8H��L��+[]A\A]�{��fD�����f�C ��x����AUATI��UH��H��SH��(dH�%(H�D$1������|��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]���@1�詆��L��H��I���k���L��H��萆��H��H������|��H��H�H�$�݄��H��H����菓��H�D$dH3%(u!H��(H��[]A\A]���D�Cw���C����w���d���@��AU�ATI��USH��H�����H��8dH�%(H�D$(1�����H��H�H�$H�؃�H������u
H�������1�H�����H�����I��M����I�EH�5�RH�D$I�EHEH�<�H�/� H�H�贼��L��H��H��H�H��H�D$�K���H�D$(dH3%(��H��8H��[]A\A]���DH���H��t,H���[���H�E�H��H�4����I���R���D��H������I���3���fDH�D$(dH3%(uH��8H��L��*[]A\A]�y���	v��f���AUATI��UH��H��SH��(dH�%(H�D$1������;z��Hc�H����u-H�D$dH3%(��H��(L��H��[]A\A]����@1��)���L��H��I�����L��H������H��H��������H��H�H�$�]���H��H��������H�D$dH3%(u!H��(H��[]A\A]�}���D��t���C����	u�����@��AW�AVAUATI��USH��H�����H��xdH�%(H�D$h1��g��H��H�H�D$H�؃�H������u
H�������1�H�����H���)��I��M����I�EH�‰ H�5PH�D$I�EHEH�L�4�L��O�|6�*���H�L��H�5�OI��H�H�D$ �
���H�L��H�5�OI��H�H�D$(��H�L��H�5�OI��H�L�D$H�D$0�ι��L��H��L��I��H�L��H�D$8�2���I�D$H�H�5fOH�,�H�H��蔹��H�H�5MOH��I��H�L�$H�D$@�s���L�$1ɺH��H�L��L��H�D$H�B���L��H���w���L�D$L��H��L��L�$���L�$L��L���L���y���H�D$hdH3%(��H��xL��[]A\A]A^A_�o����H���H��t,H���X���H�E�H��H�4��}��I���O���D��H���^��I���0���fDH�Ɉ H��u%H�-iND�	H����v��H��� H��t�H��H��L��E1��~u��H���+���H�L$hdH3%(uH��x[]A\A]A^A_��@r����AV�AUI��ATUH��H�����SH��`dH�%(H�D$X1����H��H�H�D$0H���H���V@��u
H������1�H�����H���j��I��M���FI�$H�SH�5DMI�L$L�-� H�D$8H�CH��?H��?H1�H)�HCH��I�D$H1�H)�ID$H9�HB�I�UL�t�L���=���I�UK�|6H�5�LH��H�H�D$@����L��H��H��I��H�L��H�D$H聜��H�EA�t$$H�$I�EH�D$I�$H�D$����H�D$XdH3%(��H��`H��[]A\A]A^�2���f�H�E��H��t+H������H�C�H��H�4��D��I������@��H���&��I�����fD�/H��L���xs��H��tPH�L$XdH3%(u;H��`[]A\A]A^�DA�E$1�H��Hi�ʚ;H��H�U�T� 1�����������p���u��ff.�f���AWAVAUATUSH��HdH�%(H�D$81���~oI��H���u_H�L$H��H��L��H�$��H��tWH�<$����H�����fDH�L$8dH3%(utH��H[]A\A]A^A_�f���t\����q��@H��� H�-�JH��uD�H���s��H�|� H��t�H��H��L���)r���|����o��H�~H���2���@��t+�fs��Hc�H���u(H��L������@�����{n����f�1��Y}��L�5� H�}H�5JJI��I��|���L��H�����I��H�H�D$����H�ߺH�����I��H�H�D$���I�UH�5�IH��H�H�JH�D$ H�CID$H��H9�I�HF�H�|�	H�����H��L��H�H��H�T$(L���g���L���|���
{��L��H����載��L���D~���G����}��f.���AWH��AVAUATUSH��H��H�|$0H�T$dH�%(H��$�1ɨuD���H�������H�D$H�H�$��H��
��H�|$�-n��H����H�l$H�H����
H��H�����H��H���H���^H���U���'���CH���[p��f��1Ҹf.�f(�fT U��E�1�f/���f.�T��1�f.����E1���@����H�� H�5(HH��H��h���H�D$x��@$H��H�H�@f�H �|��H��$�dH3%(��	H��[]A\A]A^A_��H��tkH��������c	H��RHc�H�>��H���j��H���cp��1�H�H����H��?	���1�H�����H���l���I��M����H�a� H��H�8�t��H�O� H�5vGH�81��j��H���o����lH��$���<H��HDŽ$��l��H������"H�݀ H�5~DH�81��\j��@H�5�z H���j�����a���L�c 1�A�L$ �Af��������f��@��f���@��	�f�������3���H��1�H���H��?���L���){��H�5�F�H��H�� H�苰��H�T$HH�T$xH���z��H�5�F�H�D$HH�� H��Y���H�T$PH�T$xH����z��H�D$PH�EH��H�$H�D$@H�D$x�h��A�L$$E1�H�D$@����I�D$L�<�H����w$H��������̺�f�H��I��H��H��H9�w�I���#L��$�L���1�H��H��EL���h��H� L��H�l$@H�蓯��H���z��H��H��H����H��H�t$HH�����H�t$HH��L�d$@H�����H��I���(L��A������m��Lc�M�����vH��H�����H��H�D$XH�D$xH�T$@H��H����H�D$XH�D$`H�D$xH�D$hH�l$`H�D$xL�M H�l$hA�A ��f����H�L$xL�|$8L��H��H�L$ H�L$pA�H���������H�L$(��p$1Ʌ�t*H�@H��H����w���H��H��H��H��H9�w�E�A$E��t:I�A��H��H��I������H��H��H��H��L9�w�H)�H��L�,$H��?H1�H)�I)�M���]H�T$@H�|$XH��I����I���IM�H���f��L��I���f��I��I��tnL��A�����<l��Lc�M�����L��H���o���H��H�|$`H�t$h�
�H��H�D$`H�D$hL�H A�A ��f�����H�G ����H�L$ H�T$(H��H��H�D$p蒳��H���iH��} H��u"D�H�=�B�wk��H�p} H��t�L��H��H���j��H���Y���D1��u��H�
B| I�H�5�BH�D$H�躬���H�����H��I��H�H��$��X���L��H�����I��H�L�L$H��$��1���L�L$H�5BI��H�H��$�I�FI�UIQH��H�HH9�HF�H�
�{ H�|�	H�H��%���L�L$L��L��H�H��H��$�L��脑��H�|$�t���%s��L��L�����ׁ��L���_v��H���K�����e������fDH�|$p�6v��H���>��H������fDL�|$8H�t$P�1�H�D$`M���C���H�T$H�|$0����L��H���4d���H�����H������H����u��H��H�����H�|$`H�������H)��	���H�L$xH�T$pH��H��H�D$p�e���H����H�e{ L�%�@H��u"f��L���Ci��H�<{ H��t�H��H��H����g��H�����1��js��I�~H�5b@I��H�z H�荪��H��H�����I��H�H��$��+���H�ߺH�����H��H�H��$��	���I�T$H�5�?H��H�H�JH��$�H�CHEH��H9�HF�H�|�	H�|y H�H�����H��L��H�H��H��$�H���e���L���r���q��L��L�������L���Bt��H������c���w���E1��.���f.���f/�s��tk��E1����H��x H�50?H��H��p���H�D$xH�1��@$H��f�P H�@��s������H�|$p�s��H������H��������H���ڵ��I���i����H��H���µ��I���Q���H���2g��H�������H��$���<H��HDŽ$��#d�����H������	������u���f��r���b��1�1�1�1�E1���H�/x H�5�;H�81��a��H�/x H�5h;H�81��a��fD��AW�AVAUATI��H�����USH��XdH�%(H�D$H1��ڴ��H��H�H�D$ H�EH�<�H�?L��A���>�f�����NH�H�5�=H��H9�HC�H�>w H�H���ç��I��H�H�D$(�E �ƒ�f���Uf����Kf�����TH�}�yI�G�H9EH�5�=H��I��LCeH�<P��ӛ����H�5�=H��K��I�<DH�诛��H�t$H��M�oH�|$I���g��H�L$�D$H�r�q�qH��H��H��H��H��?H��H�9��8��8H��H)�H�t$H)�H�I��H9�tH���^�H�D$I��I��?I�I�f���Q�f.��f(�L���}~��Mw�I��IF�K�T�I�GH��H��dH�C�dHM�E1�H�D$�}@I�GH�CL��H��L��H��跋�������L��H��L��脄��H�5�v L��H���§���C ��f���t]�L��H��L���R����L��L���"���I��L;t$t/I�GH�I9��w���M�oL���o����_�����fDA�G M�oH�߉�f��1�)�fA�G �8`��M��tL���+`��L����o��H�L$HdH3%(��H��X[]A\A]A^A_úH��L�������fD1�A�G$H�5Y;� I�GfA�W �0o���fD�}$�}���H�}�r����A�G$I�GI�GfA�G �Q���@1�A�G$H�5�:� I�GfA�O �n��� ����n���^���L$�b���L$���ff.���UH��SH��(H�t$H�|$dH�%(H�D$1��t]���1�1�H��賘��H��m H��H��H�H��H�D$�]��H��uH�����uH�L$dH3%(uAH��([]�H�H�у�H��t�H�р�H�xH�t��tH���H���`������]�����AWAVAUATU��SH��8dH�%(H�D$(1����DH�I�����H����H�����������H��r H�
�r H�H�9H9���f���t+��uvI�D$�umH�����teH���H��uYf�H�L$(dH3%(H����H��8[]A\A]A^A_�f.�H�������H�CH�
(r H�9H9�t�H�yl 1��"\��H��Hc�M�t���]�����uiI�$H�D$��u{�A�E1��x_����H�D$�u}L�5nCL�|$ H�������H��������jIc�L�>��f�L���Z��H�ǃ�tI�$H�D$��t�f�M�l$���������^���H���.H���H��H��H���H��H����H�������<��H��H�D$�_����CH�D$f(�fT
�Cf.��I������tgH�q H�5�7H�81��Z��DH��p H�k 1�H�8�Z���1�����)^����A��t%L���_��Lc�������������L���Z����f�H���b���H�xp H��	������t�H��o H�5V4H�81���Y��@H�Yp H������I�����t�H����]��H�5k4H��H�1p H�81��Y���H���`[����H������|H�5�p L���H��H�D$ �|[��H������������aH�|$�[��H�D$��%���H�����t ���@H�5�i H���Y��������u,H�|$H�
6�H�6�]��H�D$H�������H�|$�X��H�D$L�hH� t
L�hM���X��L��L���ޓ��H��H���\���H�EH��H�D$ �i��H��ulH�k ��u3H�����t*H�H�ƒ�H��tH�€�H�{H�t����f�H�]�����H�����H��蜫��H���y���@H��1��f���H���H����H�����fD�������H��m H�52H�81���W���H��m H������L��H��� ���H������H��m H�����H����������H��H���H����������H���������DH����Z������������H�,m H�5�1H�81��W��H�D$H�h �o���f.�H�����tE��t���
�k���H�hm H�5�1H�81���V���H�am H����f�H���[���t�H���S����f�H��l 1���D$H��4����D$H��H���u������fDH��l H�
r-�H�P2H�81���Z�������
W��H��l H�5�1H�81��V��f���U�SH��dH�%(H�D$1��U���H�=3�[���H�=3H��m ��Z���H�=3H�pm ��Z��f�f.Ol H�Pm �������H�5�2豐����H�5�2�H��l 菐��H�=�2H�yl H�Zk H�0�Z��H�[k �����H�5/���H�=�2H��X��H�;��X��H��tQH����
H����
���
<��
H��j H�8�<�H�	k ��^}=�ek �$���H������|
H��u�H�k H�8H�52H���6Y��H�;�H����H�52�W��H�;�����H�܌��H�5�0�W��H�;�����H���H�52�W��H�;1�H��[��H�5�1�mW��H�;�H�^���H�5�1�RW��H�;1�H��b��H�5�1�:W��H�;1�H�·��H�5�1�"W��H�;1�H��c��H�5�1�
W���H�=�1�iT��H�;H�5�1H����X��H�;��5wH�51��X��H�;��H�5p1�X��H�;�H�5j1�X��H�;�H�5d1�X��H�;�	H�5c1�sX��H�;�H�5c1�_X��H�;�!H�5b1�KX��H�;�H�5c1�7X��H�;�H�5Z1�#X��H�;�H�5O1�X��H�;�H�5F1�W��H�;�	H�5@1��W��H�;�H�5<1��W��H�;�
H�561�W��H�;�H�5.1�W��H�;�H�5*1�W��H�;�H�51�W��H�;H�����H�51�mW��H�;�H�51�YW��H�;H�����H�51�CW��H�;�H�51�/W��H�;H�����H�51�W���	H�="1�R��H�H��H�$���H�;H�5�/H����V���H�=i0�QR��H�H��H�$��H�;H�5�0H���V��H�;1�H�UW��H�5�0�T��H�;1�H���H�5�,�{T��H�;1�H����H�5�0�cT��H�;�H�t��H�5�0�HT��H�;�H�I��H�5t0�-T��H�;�H����H�5]0�T��H�;�����H���H�5K-�S��H�;1�H�k��H�5/0��S��H�;�����H����H�50��S��H�;1�H�ȸ��H�5	-�S��H�;1�H�����H�5�/�S��H�;1�H�(���H�5�/�|S��H�;1�H�`���H�5�/�dS��H�;�H�e��H�5�/�IS��H�;�H�:��H�5�/�.S��H�;1�H�rW��H�5�/�S��H�;1�H�Z���H�5q/�R��H�;�H���H�5F,��R��H�;�H�4��H�5>/��R��H�;�H���H�5%/�R��H�;�H�^���H�5/�R��H�;�H�C���H�5�.�wR��H�;�H���H�5�+�\R��H�;�H�����H�5�+�AR��H�;1�H�E���H�5�.�)R��H�;1�H�-���H�5�.�R��H�;1�H�U���H�5�.�Q��H�;1�H�����H�5u.��Q��H�;�H��H�5^.��Q��H�;1�H�����H�5K.�Q��H�;�����H�����H�54.�Q��H�;1�H�����H�5".�{Q��H�;�����H�ܼ��H�5.�`Q��H�;�����H�!���H�5�-�EQ��H�;�����H��H�5�-�*Q��H�;�H��#H�5q*�Q��H�;�H����H�5[*��P��H�;�H����H�5�-��P��H�;�H����H�5{-�P��H�;�H����H�5d-�P��H�;�H�d��H�5N-�P��H�;�H�9��H�5�)�mP��H�;�H���H�5�)�RP��H�;�H����H�5�)�7P��H�;1�H�[���H�5�,�P��H�;1�H����H�5�,�P��H�;�H�X��H�5�,��O��H�;1�H�����H�5�,��O��H�;1�H����H�5�,�O��H�;1�H�Ч��H�5�,�O��H�;1�H�����H�5z,�O��H�;1�H�0���H�5g,�tO��H�;1�H�Ȧ��H�5Q,�\O��H�;�����H�}���H�5>,�AO��H�;�����H�b���H�5,,�&O��H�=&,�jP��H��a �H�H��H�5,H��O��H�;�H����H�5�+��N���H�=�+�P���H�=�+H�&c �P���H�=�+H�c �P���H�=�+H��b �qP���H�=�+H��b �YP���	H�=�+H��b �AP���	H�=v+H��b �)P���H�=h+H�fb �P���H�=W+H�Fb �O���H�=�*H�&b ��O���H�=�*H�b ��O���H�=)*H��a �O���H�=n*H��a �O���H�=�*H��a �O��H��a H�D$dH3%(�eH��[]��H�x����H��` H�8�t���f�H�!` H�8�\����H�I` H�8�L����H�y` H�8�<����J��ff.����AWAVAUATUH��H��SH��H���H�T$HdH�%(H��$�1�����H�H�|$H�|$�8H��H����}H��t}H��H���H��tp���V��tbH���uM��f(�fT
I2f.
2�f��1�f/��…��^H�t$���r���H���*Z���DH��uH�\_ H��H�8�R��f�H�������w�H��0Hc�H�>���KJ��H�D$����H�t$1�H������H��t�H��@ H�\$H�\$f�D$>H��H�$f����H�^ H�5W%�H����H���sY��L�@ H��H�D$@A�@ ��f�����H�L$XH��I��L��H�L$(H�L$PA�H���������H�L$0��p$1Ʌ�t*H�@H��H����w���H��H��H��H��H9�w�A�x$��t;I�@��H��H��H�������H��H��H��H��H9�r�H)�H��L�$$H��?H1�H)�I)��qH��M���H�t$L�����I���IM�I���F��L��I���F��I��I���>L��A�����LL��Lc�M������L��L�����I��H��L��I�����M�E H��A�@ ��f�����H�E ����H�54W H���G���������H�C �P f���f����f����H��\ H�|$H�5�"H�����1��@$H�@f�H H�D$XH��H��oW��H��$�dH3%(��H���[]A\A]A^A_�f.�z�1ҾH���q����j���1�H�����H���[����T���fDH�L$(H�T$0H��L��H�D$P�Ғ��H���YH��\ H��u"D�H�="�J��H��\ H��t�L��H��L���]I��I�����D1�L�D$ ��T��H�
}[ L�D$ H�5�!H�D$H�I�x��L��H�����I��H�H�D$`葘��L��H�����I��H�H�D$h�r���I�VH�5\!I��H�H�JH�D$pI�D$IEH��H9�HF�H�
�Z H�|�	H�H��m���L��L��H�H��H�T$xL����p��H�|$�
T���uR��L�D$ L����L���"a��L���U��I�����f���D���Z���fDH�|$P�U��H��莬��I���Z���H�l$@�f�|$>�H�E �p$��tAH�@��H���������H��H��H������f�H��H��H��H��H9�w�H)L$H�|$�^C��H�t$HH��H�D$H�������f�H)��>���H��Y H�|$H�5
 H��M�����@$H�@f�p �1������Z���H��H�t$X�H�D$X�]�H�5�S H��H���D��L�t$H�5�S H��L����D��I9�uXH�C �H�\$f�P ���H�|$HH��tG@��u)�C��Hc�H������H�|$@H���s������H����H��H���v��H�C �H�|$@H�L$XH�T$PH��H�D$P趏��H���AH��Y H�H��u�H���G��H��Y H��t�H�|$@H��H���AF������1���Q��H�{H�5�I��H�`X H����H�|$@�H�����I��H�H��$�脕��H��H�����I��H�H��$��b���I�T$H�5KH��H�H�JH��$�H�EIFH��H9�HF�H�|�	H��W H�H��Z���H��L��H�H��H��$�L���m��L���P���aO��L��H�����^��L���R���'���H)D$�t���H�|$P�R��H��芩������H��W H�5�H�81��A���A����Q����AWAVAUATUSH��dH�%(H�D$x1����,H��L�>����H�����H���@���H��H�H�D$PH�D$H�CH��H�D$f�{ ��H�D$@L�-�(H�D$M��A��u:M��I����M��u(L���pD��H�5yH��H�OV H�81��E@��DI��t�I��t�I��4t�A���hA��t�L���VD���D$ �+@���L$ f.�������(f/���f/
�(���H,�L�|�C���fD���_���C���I��������&���IcD�L�>��L���xD�����H�����tH��H���H��t��3H�5�V H�L$H�H��H�D$H�QA��H�������������L��H��?A��u@I���H��
��L����H��t
H���fL���"C��f��1�f/���D����A�A��C E1�f�����L���H��?���L��H��M���
L��H���H��tH��t	H����
H�5�U H�L$H�L��H�D$H�g@��H�������������H�\T H�H�|$H�5��؄��H���PO���mH�5�N L���i>���������H�t$L���H�D$@�&����=L��H���f���H�������L������I���'���f.�H������A���H������|���\��
� ���L���A��I����hH�����tH���H��t
A���>H�5�T H�L$H�L��H�D$H�B?��H������������CL���B��I���{���fDf(���=��I���d����H�	S H�|$H�5PH�腃��H�D$@E1��@$H��H�H�@fD�` ��M��H�L$xdH3%(��H�Ĉ[]A\A]A^A_��E1��C ��f���uPA�������M����L����H���L���u@��f��1�f/���1�����H���������f�M��I��M����L��H���H���[M���RM���D$A����H�5S H�L$H�L��H�D$H��=��H������������hH��Q H�|$H�5�H��@���H���L�������D$M��t�I������}���`��
��M���wH�5�R H�L$H�L��H�D$H�7=��H������������eH���]���H����������H�������������
�����H�t$�L���9���H�T$H�L$�D$I��H��H�H��HD�H�D$�C ��f�������A������E1�I���������I���H��
��L����H���	���H�������H�L$H��<L��H�D$H�<<��H�������1����m���H���?��������H���}�������E1�L��H�������4���L����>���t	H���'���I�������E1�������
�e����C f���Pf����FM���4M����I������~I���H��
�nH���/���H�Ũ��H���H��tH�����t
@����H�5pP H�L$H�H��H�D$H�%;��H������������V���L�d$H��<H��H�D$HL����:��L����H������$
L��H��?H��u;I���H��
��
L����H��t
H����
L����<��f��1�f/������$
f�{ �/���I�����
��H�t$@�L���a;��H�D$@H�Ѓ��������H�WN H�H�|$H�5���~��H���KI���h���I�1�I��������L��L�L$ ��<��L�L$ H�D$(L���&<�������H�H�������H�D$(����H�H���������f�L����s7��H����<�����E1�1�H��M H�|$H�5�H��#~��H�D$@f�{ H�����@$H�@f�X ����L��M��I��H������L��H���H����M����I��A�������L��H�H����������L����;��L��I���!;��I��A���&���H�E1�H������M��A���	���I�E1�I����������f�H����M���.���I������!���I���H��
����I�����
�:�H�t$@L��H�D$�[9��H�T$@H�D$H�҃�������������@$H�@f�h ����L����5��H���A;��������I��d�IE�H�L H�5L�H�f�����s|��H�I��HcD$H�T�P�C �Pf����>M���f����M����A�D$$�I�D$fA�|$ H�|$�^L���F�����M��A����M���6L����H���]L���R9��f��1�f/������Tf�{ �����M���M�������I����������I���H��
�����I�����
��H�t$@�L����7��H�D$@H�Ѓ�H��J H����\����\���E1����H������I�������������
�������I�EH�D$8A�E ��f��������L�t$M�fL���3��H�-&J H�3H��H�}���L��H���3��I�}H��H���;��L��H���r3��H�}H��H����H�T$8H�T$@H�T$8�!���L���8����|���H�������n���1�I�����Y���M���D$���H�L$H��<L��H�D$H�5��H�����������f���f����f���������H�{��M������H�D$����I��I�D$��H�5jH�|��+n����H�5OH��H�@H��H�|	�n���H��L��I���S��I��t�H��H���S��I���A��
f.�I��H��H��L����z���L��H���_S��K�6I9�s�L��H��L��L��I)��z���L��L���2S��M���H�|$��vM��tL���3��H���|3��H�|$�����A�D$ f�������f�������f����������?��H�T$L�����I���v���L��H��M���'L��H���H������H���v���L��H�H�҃��]���L��H��?�w���L��H�����I���0���A�D$$�I�D$I�D$fA�D$ ���H�L$H�|$�L���H�AHE�H�D$蔄��I����H�|$�D$�M�o �^���A�D$ ��L��H��M���L��H���H�������H�������L��H�H�Ѓ�����H��F H�|$H�5
H��Nw��f�{ H����M���M��u
I������H��F H�5�H�81��M0��DH���������H������i������
�*������H�CH��H�5�H��H�H��H���<���I����������I���H��
��L����H�������H�������H�L$H��<L��H�D$H�1��H������������H���`�������M������A�D$$L��I�D$H�Ѓ�	�M�������b�fA�T$ ����A�D$$1�I�D$fA�L$ �������v������f.�I�������I�����
�cH�t$@�L����1��H�D$@H�Ѓ�����A��E$H�EfD�U H����?����L��H��?H��u;I���H��
��L����H��t
H����L���2��f��1�f/���������H�rD H�|$H�5�
H���t��H��I�����
�	H�t$@�L���*1��H�D$@H�Ѓ�����f�{ �E$H�E��f�E �-���H�����������H���2��H��I���2������H�H�����A�����I�I���������#���H��H�H�������h�M���X���I�����tL��H���H����A������E$H�EfD�] �z����L����,��H���Z2����������?������@�H�����L���\����D$H�H�@H�T$XH��HD$����M����A���1���A�D$$�����I�D$fA�t$ �,���A�D$$A�I�D$fE�L$ �	������zfA�D$ ��H�D$�4���H�{�����{$����fA�D$ f�{ A�D$$I�D$I�D$�����A�������fA�D$ �����fA�D$ ������A���I���A�D$$A�����I�D$fE�D$ �R���H��B L��H��L����W���H��L���L���`������:���L��H�H�Ѓ�������+�L��H�H�Ѓ���I���H��
�����E���f�{ �E$H�E�A���f�E ���n�����u�L��H�H�Ѓ�����L����*��H���80�����k�fA�D$ ���z����L���*��H���0�����e���L���<L��H�D$H�,��H�����������L���<L��H�D$H�,��H�������������H�F�H��H��I��H�D$�}��H��H�H�D$PI���q�H�D$�t
H�H�D$�q�H�|$�+��H�D$�]���*�����H��H���H�t$H�t$��H�����H��H��� can't be coerced into BigDecimalComputation results to 'NaN'(Not a Number)Computation results to 'Infinity'Computation results to '-Infinity'ERROR(VpDivd): space for remainder too small.RSTRING_PTR is returning NULL!! SIGSEGV is highly expected to follow immediately. If you could reproduce, attach your debugger here, and look at the passed string.second argument must be true or falsefirst argument for BigDecimal.mode invalidinvalid value for BigDecimal(): "%li"Conversion from String to BigDecimal overflow (last few digits discarded).load failed: invalid character in the marshaled string%li can't be coerced into BigDecimal without a precisionBigDecimal to Float conversionBigDecimal#precs is deprecated and will be removed in the future; use BigDecimal#precision instead.Undefined operation in BigDecimalCmp()Zero or negative precision for expComplex argument for BigMath.logZero or negative argument for logcan't convert nil into BigDecimalcan't convert true into BigDecimalcan't convert false into BigDecimalcan't omit precision for a %li.Unable to make a BigDecimal from non-zero imaginary numberwrong argument type %li (expected scalar Numeric)a non-integral exponent for a negative base%lue%zd%snegative precisionExponent overflowComputation results to 'NaN'Exponent underflowDivide by zeroargument must be positive%s
invalid rounding mode: nilinvalid rounding mode: %liinvalid rounding modeexponent overflow#0divided by 0divmod-0div%zu:to_i**F<=>>=<=remainderprecision must be an Integer21E%ldsqrt of negative valuesqrt of 'NaN'(Not a Number)#1precision too large.to_strStringBigDecimal.exception_modeBigDecimal.rounding_modeBigDecimal.precision_limit.5BigDecimalnewinterpret_looselydouble_fig_loadsave_exception_modesave_rounding_modesave_limit3.0.0VERSIONBASEEXCEPTION_ALLEXCEPTION_NaNEXCEPTION_INFINITYEXCEPTION_UNDERFLOWEXCEPTION_OVERFLOWEXCEPTION_ZERODIVIDEROUND_MODEROUND_UPROUND_DOWNROUND_HALF_UPROUND_HALF_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_EVENSIGN_NaNSIGN_POSITIVE_ZEROSIGN_NEGATIVE_ZEROSIGN_POSITIVE_FINITESIGN_NEGATIVE_FINITESIGN_POSITIVE_INFINITESIGN_NEGATIVE_INFINITE+InfinityNANprecsn_significant_digitsaddsubmulthashto_sto_intto_rsplit+-+@-@/quo%moduloclonedupto_fabssqrtfixroundfracfloorceilpower===eql?<nonzero?coerceinspectexponentsignnan?infinite?truncate_dumpBigMathexploghalf_updefaulthalf_downhalf_evenbankerceilinghalf-Infinity,9���;��,9��;���:��9��x;���;��9���:��9���:���:���8��c;���;��4=���=��4=���=��t=��D=��$=���=��>s���r���r���r���r���r���s���r���s���r���r��Dt���r���r���r���r���r���t���8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��8%��������'���8%��8%��8%��8%��8%��8%��8%��8%��'���8%��8%��8%��8%������� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� �������P������� ��� ��� ��� ��� ��� ��� ��� ������ ��� ��� ��� ���М��Ě��g���g���g���g���g�������g���T���g���g������g���g���g���g���g����������#���#���#���#���#���#���#���#���#���#���#���#���#���#���#���#���#��̞�����������#���#���#���#���#���#���#���#�������#���#���#���#��ǜ��O���L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��L#��;��� ��� ���L#��L#��L#��L#��L#��L#��L#��L#�� ���L#��L#��L#��L#��;���|����"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���"���������������"���"���"���"���"���"���"���"�������"���"���"���"������7���4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��4"��#���������4"��4"��4"��4"��4"��4"��4"��4"�����4"��4"��4"��4"��#��������!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!���!��|�������|����!���!���!���!���!���!���!���!�������!���!���!���!���������!��!��!��!��!��!��!��!��!��!��!��!��!��!��!��!��!�������!��!��!��!��!��!��!��!���!��!��!��!�����L���� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��d���d������� ��� ��� ��� ��� ��� ��� ��� ������ ��� ��� ��� ��d���T��� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ���ؗ��ؗ�� �� �� �� �� �� �� �� ��ؗ�� �� �� �� ���̚��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��x��L���g���L���x��x��x��x��x��x��x��x��g���x��x��x��x��g���M�����������������������H������������������������������������������k���M�����������������������������������X����������������������������������������5������O���������������z��0��0��0��0��0��(��0�����0��0����0��0��0��0��0��(�������&�.>�C��]r2<��������?e��A��C����������;�p@���P���P��(^��H
���8L��(Z���0���P���`��p��$���8���L ��t!���`!����!���"����"���$��x %���p%����%���P&���&��D'��p0'����'����'���(����(�� )��0@+��D�,��X.����.����3���3��,�4��h�5����7��	�9��x	�9���	�:���	�;��
C���
 J��<0J��P�J���pK���L���N��8PO��T Q���R����]��\
 ^���
@_���
�c��T�h���pi���Pj��@p��Ppq��|�q���r���0r���`r����r���t��(@t��D�t��\u����u���`v���`x��y��@�|��� ���@���(��x����� �������������P��������p���`p��������<����P��d��x���������� ��� ���h0����0�������l�����p���$�������@���T �������������H�������zRx�$���FJw�?:*3$"Dx��\@��pL��
�H���D��N����$����+A�A�G PID������p��YA����A�V0���q<D(���B�B�B �D(�A0�l
(A BBBBd����B�H�B �B(�A0�A8�G`M
8A0A(B BBBAW
8A0A(B BBBE�@��SA�a
Nb���PA�a
N_(,���nE�A�D0W
AAA0X���eA�A�D a
DALhCA(�0 ��<B�A�D �qAB(�D ��oE�A�D0X
AAA�� ��!AAK� ��QDY
A� ��AAK$8� ��YA�D�F ICA(`!��vA�\
CU
KU
KU�p!���]U��!����#���4��%����C�D xAAC��L ��a��h&���A��
DVd$�&���B�E�B �E(�A0�A8�D��
8A0A(B BBBA�
8F0A(B BBBE�`+��c8��+���B�A�D �K
JBJK
ABJL�,���B�E�E �D(�D0�M
(A BBBH\
(D BBBJX,�,��Ot�E�A �D@
���h@���{ F�A�B�D@���x���X@���`��.���B�B�B �A(�A0��
(A BBBDi
(A BBBHX
(A BBBA4�0��7B�D�D �Y
DBGACB$0���H8�0��mB�E�E �E(�D0�D8�DP 
8D0A(B BBBFl��1��B�B�B �E(�D0�D8�G��
8A0A(B BBBK�O�P�B�u�O�P�A�|��8��B�H�B �B(�I0�D8�G��
8A0A(B BBBA�
8C0A(B BBBF:
8A0C(B BBBA$zRx��������, ����>��4��>���A�A�G V
DADQ
DAA0�0?���F�A�A �D0w
 AABI40�?���F�D�A �\
ABFj
ABC@h@���H�A�A �g�A�B�T ����
ABG��A��GG�
F@��B���E�C�D {
IAG�
LACf
DAA<	�D���F�L�B �H(�G0��
(A BBBAHL	0E��uB�E�B �B(�A0�D8�Gp�
8D0A(B BBBG zRx�p������(��h0�	,P���B�F�N �D0v
 AABD(
�P��E�D�DP�
AAA�0
|Q���B�G�B �B(�A0�D8�G��
8A0A(F BBBAs
8A0A(B BBBAJ
8C0A(B BBBA�
8A0A(B BBBDL�
�U���B�B�B �E(�I0�A8�N�
8A0A(B BBBE($Z���E�D�GPW
AAG0D�Z���F�A�D �G`�
 AABAHxD[���B�B�E �E(�G0�C8�T�\
8A0A(B BBBF(��`��/E�A�D`�
AAH��a��GMl
GFb��;Mm(Db��)H]@\b��(HZXtb��dHW(p�b��.E�M�D`�
AAC��c��2E�l��c��2Hf(�d���E�M�DPj
DAE(��d���E�M�DPq
DAE((
�d���E�M�DP�
DAE0T
xe���F�M�A �DP

 AABG(�
Dg���E�M�DPo
DAEL�
�g���F�N�B �B(�A0�A8�D��
8A0A(B BBBKHk��fF�N�B �E(�D0�A8�DP�
8A0A(B BBBJHP<m��F�N�B �B(�D0�A8�D��
8A0A(B BBBIL�p���F�E�A �D(�H`�
(D ABBE�
(D ABBOL�`q���F�E�A �D(�H`�
(D ABBE�
(D ABBOL<�r���F�E�A �D(�H`�
(D ABBE�
(D ABBOd�t���F�E�B �B(�D0�A8�F��
8D0A(B BBBJ`
8D0A(B BBBKH�8v���F�B�B �B(�A0�K8�N��
8A0A(B BBBE(@�z���E�M�D0[
AAE lP{��KH y
G�
K�||���H 
H$�����E�H�L0`GA,�~���E�J@_
DNk
GEp�~��5B�B�E �K(�C0�K`�
0A(A BBBF
0J(A BBBKI
0J(A BBBF zRx�`�����(���l����h����d����`���\���X���`(T���F�G�D �A(�N`�
(A ABBD
(D ABBJT
(L ABBKL�����F�B�D �G(�DPD
(G ABBIe
(D ABBJ`�����F�G�D �A(�N`�
(A ABBD
(D ABBJT
(L ABBKL@\����F�B�D �G(�DPD
(G ABBIe
(D ABBJL����wF�G�D �A(�N`�
(D ABBJl
(L ABBEL�<����F�B�D �G(�DPD
(G ABBIe
(D ABBJd0���F�G�B �B(�D0�A8�N��
8D0A(B BBBL�
8A0A(B BBBAX�D���3F�G�E �A(�K0�D�<
0D(A BBBG�
0A(A BBBF zRx�������(���
H,�&F�B�B �B(�A0�A8�D�j
8A0A(B BBBJLxԐ��ZF�E�B �B(�A0�A8�J�s
8A0A(B BBBHL����F�G�B �B(�K0�A8�D��
8A0A(B BBBA(t����E�D�D@p
AAAHD����F�B�B �B(�A0�C8�Dp�
8A0A(B BBBK(�����DE�F�D0�
AAHL������F�B�B �B(�A0�G8�J��
8A0A(B BBBAL ���F�B�B �B(�A0�A8�G�x
8A0A(B BBBI\���$H [GNU��0`0`9!��	�		����#�@2�0���3�"
��P9!X9!���o`�
I8<!	���	���o���o@���o�oJ���o
(:!�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'P'`'p'�'�'�'�'�'�'�'�'(( (0(@(P(`(p(�(�(�(�(�(@�@�?GA$3a1�"��GA$3p1113�.��GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GOW*�F/�/GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYF/�0GA+GLIBCXX_ASSERTIONSGA*F/�/GA!GA*GA*bigdecimal.so-3.0.7-167.el8.x86_64.debug8_���7zXZ�ִF!t/��'�]?�E�h=��ڊ�2N�`Ɣ� ��cY�<���Xm3�oh4J����*Y�~��a��'�\�bPq�ѵ�~
+��:��pd��H5�%�J&>,�F�����%�Jd}�z�p~h����g��!a�[�����2N\XD��
2��,!��$
���u�Lh����G����!���`�W%1{ṭ��{���C6D�n��\e�sPP(M�Ŵ��+�[D�]�<�3�c�q*�N��
��
��F�n�.�وd�gs��2���dv'�*J2��R��F�r.��M��������A��Ǔ��M��q��.���E�<��&Բt�@h�,�6f:��OM9�CUG��_�hw(�{��v���u7���W;�!���a�{�O�H�F�I33J3A��O� `9|�hM]�[�1%��oT�J�7�I��MbP��r0�I�੄���]��jʖE��(1Dob)��v��ǽ�ʢ5�X��,�����1}yu������!"����m

ޒ�
K�T
�A��:")��m���gT�A}��Ppx%��G׉�o��	%5v�eЂ��5-�C�~s~E�y��P�ly�#[T�Yj^�����������*;R-1Y�e�#��<�I�f+՟H�ŧ��w=���/T���8�r�'�ltI�o�B��z�P;��\��2���a��#4�z=��V[p����"G4����9������z��F�?�E��oq�`;B�ݻm��a�^�,o_��x�а�,�j3�s�s��K��%�
���ۏ(]��Ƈ��=R��L�S��W}���	"�4k���|]H�v�*�a���|=�i��`x	\Ɲ\�.ǖ�BQ���@��,�!ބ|�y��O��Nn�Ȟ��=�'�����,�}<E�n��
��s������l�r����VA�
�s1)�c�I��/@��B����]�,<�j�h���k��twv�׏2C'#����LWHw�����1~Š�8�+�z*C�w �/戂��˟�{��/�3\�5�U�sg�[<��.]��U7l��=s1ܶ��M�e�N�1�Y�Ctrc�VlI�l����U�[�u"��0�)P�K�|;�;B��b31)�t�r3�g�%\����-�@v�����[�HƊ�0v�����՟�s���٪��w�ִ!Y�P��R&�Y�����D�e^�t�R�_\�S����$��ǃ�V�wH9&���iOfrmm��K�� [5��>Wtg�B��W5���ٽ+k7���G�B��
�G����1�Qώkۻ��
؁ R1I�O�����T����w��W y=�5�Cӊ��w()�>���>�A�μ���ʰK�z��lb��D�`���ƨ�[n���V���uL�c::��E�=�"������;cP?O��r��s��>�AP�!�����_��S��a�.���}����S�u�y�Q�N3����b?�,�+L`{�?��W��sK_�0(d����N���_�T�
1�¨��Y��̟��]�Zi�7�v�с}i�j��Ϩȹ� �v����1��/{ǀ��naV�'�Q��=H��`�0��
�I�Ԋ���T*��'�Zq�#�3���7�h$�^u!��Yʛ3\���-&�U��[�7��VF0H��1.�a+~^�ܳt�c�,r���d��z3��瑨��,&���UƎa�c
/s�Ѻf��!Q�65&wz����E�$3�,�|�q�[��㩪|�%�U���W�q.Qg]R�u:��b<�\������/�@:�_']`���.R�X�Z��F�b@J��F�3���i�B��F{4ek_D��	ُ"��ct�R	Rgb�[�(2}�Β<`&�p��3��\��E
��ϳ���<x���,v��>�uM>��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``D(��X0I8���oJJ�E���o@@pT���^B��	h�"�"c�"�"n�(�(w�.�.��}����
�����������t��-�- �P9!P9�X9!X9�`9!`9� �(:!(:�8<!8<��@!@�@!@ �0Aa@P
`C0�C��K(PK�#[��Q�����ruby/psych-3.3.2/psych.sonuȯ��ELF>0-@�z@8	@�c�c �i�i �i `X hjhj hj   888$$�c�c�c  S�td�c�c�c  P�td�Z�Z�Z��Q�tdR�td�i�i �i `pGNU�X�=j�o�	��αԜa� B��HH	�ailx�
BE��"a��j������
��|�S��E6
Z�qXH���8������ZUr �kX�N��Y?�j
}��S(,��,B��� �	�O)�D�"��*woET�"�"\���1�d^��i{������, �>2�F"�yv>8��f��@rp �pV��@T���p ��p "�p ��.X� WZ��p p ��p %�p __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeyaml_get_versionrb_ary_new_from_values__stack_chk_failInit_psychrb_ext_ractor_saferb_define_modulemPsychInit_psych_parserInit_psych_emitterInit_psych_to_rubyInit_psych_yaml_treerb_define_singleton_methodrb_check_typeddatayaml_emitter_deleteruby_xfreeyaml_emitter_set_canonicalrb_data_typed_object_zallocyaml_emitter_initializeyaml_emitter_set_unicodeyaml_emitter_set_indentyaml_emitter_emitrb_eRuntimeErrorrb_raiseyaml_mapping_end_event_initializeyaml_sequence_end_event_initializeyaml_document_end_event_initializeyaml_stream_end_event_initializerb_fix2intrb_num2intyaml_emitter_set_widthyaml_stream_start_event_initializerb_check_typerb_attr_getrb_utf8_encodingrb_enc_str_newrb_funcallvyaml_alias_event_initializerb_str_export_to_encrb_string_value_cstryaml_mapping_start_event_initializeyaml_sequence_start_event_initializerb_string_value_ptryaml_scalar_event_initializeyaml_document_start_event_initializerb_ary_entryruby_xcallocrb_string_valuerb_ivar_setyaml_emitter_set_outputrb_error_arityrb_cObjectrb_define_class_undercPsychEmitterrb_define_alloc_funcrb_internrb_define_methodyaml_parser_deleterb_funcallv_publicrb_ull2inummemcpyyaml_parser_initializerb_intern2cPsychParserrb_const_get_atrb_class_new_instancerb_utf8_encindexrb_default_internal_encodingrb_iv_getrb_respond_torb_enc_find_indexrb_enc_get_indexyaml_parser_set_encodingyaml_parser_set_input_stringyaml_parser_parserb_protectrb_ascii8bit_encindexrb_usascii_encindexyaml_parser_set_inputrb_str_new_cstrrb_enc_associate_indexyaml_event_deleterb_jump_tagrb_str_newrb_ary_newrb_ary_new_from_argsrb_ary_pushrb_to_encoding_indexrb_str_new_staticstderr__fprintf_chkrb_const_getrb_usascii_str_new_cstrrb_exc_raiserb_define_constrb_requirerb_path_to_classrb_obj_allocrb_iv_setrb_define_module_undercPsychVisitorsToRubyrb_define_private_methodcPsychVisitorsYamlTreelibruby.so.3.0libyaml-0.so.2libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.3.4GLIBC_2.14GLIBC_2.4/opt/alt/ruby30/lib64ui	'ti	3���?ii
J�i .�i �-�i �i �i �X�i �/ j bY0j C�o �o �o l�o )�o j�o e�o f�o m�o K�o Q�o V�o _�l �l �l �l �l �l �l �l �l 	�l 
�l �l 
m m m m  m (m a0m 8m @m Hm Pm Xm `m hm pm xm i�m c�m �m �m �m  �m !�m "�m #�m $�m d�m %�m &�m '�m (�m *�m +n ,n -n .n / n 0(n 10n 28n 3@n 4Hn 5Pn 6Xn 7`n 8hn 9pn :xn ;�n <�n =�n >�n ?�n @�n A�n B�n C�n D�n E�n F�n G�n H�n I�n J�n Lo Mo No Oo P o R(o S0o T8o U@o VHo WPo XXo Y`o Zho [po \xo ]�o ^�o `��H��H�YN H��t��H����5*K �%+K ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]���������%EE D���%=E D���%5E D���%-E D���%%E D���%E D���%E D���%
E D���%E D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%�D D���%}D D���%uD D���%mD D���%eD D���%]D D���%UD D���%MD D���%ED D���%=D D���%5D D���%-D D���%%D D���%D D���%D D���%
D D���%D D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%�C D���%}C D���%uC D���%mC D���%eC D���%]C D���%UC D���%MC D���%EC D���%=C D���%5C D���%-C D���%%C D���%C D���%C D���%
C D���%C D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%�B D���%}B D���%uB D���%mB D���%eB D���%]B D���H�����H���7���H����f.�DH�=�B H��B H9�tH�B H��t	�����H�=iB H�5bB H)�H��H��H��?H�H�tH�B H��t��fD�����=%B u+UH�=�A H��tH�=�; ����d�����A ]������w������H��8dH�%(H�D$(1�H�T$H�t$H�|$�t���HcD$H�t$�H�DH�D$HcD$H�DH�D$HcD$H�DH�D$ ���H�L$(dH3%(uH��8��>���ff.���H������H�=�(�B���H��@ 1�H�5�(H��H�H�5����0�������f�������H��������H��H�5�: �\���Hc��H��H�D�ff.���H��H�5q: �,���Hc��H��H�D�ff.���H��H�5A: ����x|H�H��H�Ѓ��f.���SH����H��[�z���f.���SH��H�5�9 ���1�H��H��@������H��[�D��UH��9 ��SH�����H�X H��H���V���H�߾�)���H�߾����H��H��[]�f�SH�������t[�H�z? H�SH�5E'H�81��e���D��ATH�5C9 USH��H��pdH�%(H�D$h1�H�����H��I���'���H��L�����H�T$hdH3%(uH��pH��[]A\�����ff.���ATH�5�8 USH��H��pdH�%(H�D$h1�H���r���H��I���7���H��L������H�T$hdH3%(uH��pH��[]A\����ff.���ATUH��H�5_8 SH��H��pdH�%(H�D$h1�����1�H��H��@��I��H�����H��L�����H�T$hdH3%(uH��pH��[]A\�����ff.�@��ATH�5�7 USH��H��pdH�%(H�D$h1�H�����H��I������H��L���,���H�T$hdH3%(uH��pH��[]A\����ff.���USH��H�5p7 H���'���H��H���t�����H������H��H��[]������f���USH��H�5 7 H������H��H���t�W�����H�����H��H��[]������f���ATUH��H�5�6 SH��H��pdH�%(H�D$h1��r���I��@������H�����H��H��H���/���H��L������H��H�T$hdH3%(u	H��p[]A\������ATI��UH��SH��H�5�< dH�%(H�D$1����H���:���L��H��H����H��H��H�5j< H�$����H�Ǩt"�E���H�\$dH3%(uH��[]A\�@�������ff.����ATUSH��H�ĀH�t$H�5�5 dH�%(H�D$x1��P���H�|$I��H��u:1�H�l$H�����H��L�����H��H�T$xdH3%(usH��[]A\�@@��u	H�����uI��_�����3���H�|$H���6���H�D$H��t�H�|$���H���y���f�H���H��u����ff.�f���AWAVAUI��ATUH��SL��H��H�t$H�5�4 H�$dH�%(H�D$x1��M�I����H�|$I��H����H�<$H����H�߃�����E1�M���A��E1�H�<$tH���&�I��1�H�|$t
H�|$��H��L�l$L��A��D��L������L��L���{���H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_�f�@��u
H�����������H�<$�L����H�߃�H�$�7��������2���fD@��u	H�����u)���H�|$f�L���x�H�D$����fDH���H��u���f.�H���H���c����s����6�fD��AWAVAUATI��UH��SL��H��H�t$H�$dH�%(H�D$x1����H�|$I��H���
H�<$H����H��H�5�2 �e�H�߃�I�����Q�E1�M���A��E1�H�<$tH���c�I��1�H�|$t
H�|$�L�H��L�d$L��A��D��L�����L��L�����H��H�T$xdH3%(��H�Ĉ[]A\A]A^A_��@��u
H����������H�<$�L����H�$����������-���fD@��u	H�����u1����H�|$f.�L����H�D$���fDH���H��u���f.�H���H���[����k����f�fD��AWAVM��AUM��ATUH��SH��H�t$(H�51 H��$�H�T$ H�L$dH�%(H��$�1���H�|$(I��@����������H�|$(H��I�����H�|$ H�D$(H����H�|$H���4H�߃��e���M����A��1�M����E���D$H�D$(L�A�� �AL�xH�|$(���1�H�|$H��tH�|$H�D$��H�L$H��1�H�|$ t!H�|$ H�L$H�T$��H�L$H�T$H��L�l$0SE��AVD�L$L����XL��ZL���W���H��H��$�dH3%(�H�Ĩ[]A\A]A^A_�@��u
H����������H�|$ fDL����H�|$H�D$ H������@��u
H���������w�H�|$f�L���X�H�߃�H�D$�����������DI��M��A������H���������H���H���	�������fDH���H���3����C���H���H���_����k������fD��AWAVAUATUH��H�5�. SH��H���H�|$H�L$dH�%(H��$�1���H�D$@�������H���l�H�E�� ���H�EH����H�������E1�E1�L�l$PH�EE1�H�|$A���� �YH����H��H�t$H�L��HN�L��L����H�|$L���6�M��tL����H��$�dH3%(H�D$�H���[]A\A]A^A_�H����H���M���1�H�����H��I�����L��A��I������L��A���D$H���s�D$LH�����������H�D$ ��uH�;H����H��tH�߾��H�;�� �H����H�<$����1�H�<$I��I���H�CL�t$0L�t$ L�l$@H�D$(L�d$PH�l$8H��H��� �LH����H9���H�D$(H���A���H��H�D$ �u�H�D$ H�0�� �B�����H�pH�@H�D$@H�FL��I��H��H�D$P�~�L��L�d$ �q�H�|$@L����H�|$PL��H�D$@���L��H�D$P��L��I�G���I�G�H;,$�#���L�t$0H�l$8L�l$ ����H�E����H������&���H�EH�ƒ�H�������� �.����������L��A���D$H�������
���H9k~jH�C H�������H����������H�0H����H��������� �����H�x~FH�p H�H�D$@����H�CH�$H����L�t$0H�l$8L�l$P���L�l$P���L�t$0L����H��0 H�5pH�81��������AWAVAUI��ATUH��H�5V* S��H��H��������I��L�e��u;H�5�0 L��L���a�L��L��H�5����H��L��[]A\A]A^A_�D����H�]H�5<0 1�1�H�����H�5!0 1�1�H��I�����H�50 1�1�H��H����L��A��H��u@�[�L�����Q�H���t9�����L����1�H��L��@���X��0������f�����������SH�=��o�H�5H��H��. H��H���H��H�5H�����H��. H�5�H��H���H�;�����H�Y���H�5���H�;�H���H�5����H�;1�H���H�5����H�;�H����H�5���H�;�H���H�5���H�;�H����H�5��y�H�;�H����H�5��^�H�;1�H�2�H�5w�F�H�;�H�'�H�5i�+�H�;1�H���H�5_��H�;�H��H�5P��H�;1�H�\�H�5>���H�;�H���H�5-���H�;1�H���H�5 ��H�;�H���H�5��H�;1�H���H�5�z�H�;�H���H�5��_�H�=���H�=�H�m- ���H�=�H�R- ���H�=�H�7- ���H�=lH�- ��[H�- �f.�@��SH���S�H��[�
�f.���H�5]- 1�1��|�ff.����H�5M- 1�1��\�ff.����H�5�, 1�1��<�ff.����H�5�, 1�1���ff.����H��H�5�, �dH�%(H�D$1�H�GH�?H��H�$���H�T$dH3%(uH������ff.�@��H��H�5i, �dH�%(H�D$1�H�GH�?H��H�$�y�H�T$dH3%(uH�����ff.�@��H��H�5!, �dH�%(H�D$1�H�GH�?H��H�$��H�T$dH3%(uH�����ff.�@��H�OH�5�+ H�?���@��H�OH�5q+ H�?���@��H�OH�5Y+ H�?��d�@��H�OH�5Q+ H�?��D�@��H�OH�5�* H�?��$�@��ATI��H��UH��SH��H�� dH�%(H�D$1��3�H�5+ H�L$L��H�D$��H�H�D$H��u#H�t$dH34%(�uGH�� []A\�DH�|$�F�H�L$H��� tH�QH�H��t�H��H������H��������f���SH��# ���j�H�x H���.�H��[�f���UH�5�# SH��(dH�%(H�D$1���H��H��) H��u$H�-@�H���#�H��) H��t�H��H�) H�8��H���H����H���H�$���H���H�D$���H��H��H�D$��H�L$dH3%(uH��([]���@��AWAVAUATI��U��SH��H��hH�T$@dH�%(H��$X1��D$l���D$�e�H�58H��H�D$(��������I�<$H��H�|$p���I�D$H�D$H���`H�|$@H�5U" ��I��H��H�D$��L����H�5�( H�|$p�������H�|$p�5�H�D$pH�=�H�D$x�O�H�=����A�H�|$xA����9D$�2
9��]
A9��
�t�H�|$xH���w�H�T$xH�D$xH��$�H�T$x�H�|$H�D$p���H�D$pH��� ��	H�hL�`H���
H�|$L��H���Z��H�D$lL��$�H�$H��$�H�-2H�D$H��$ H�D$ �H�|$L���������	H��$���H��$�I����H��$�I����H��$�I���~�H�$H�t$H�=��H��$�L��$�L��$L��$H��$�q���$�
����$�HcD�H�>��H�5�& �$�����H�5�& H�|$p1�1�����H�D$H����DH�Q& L�d$pH��u H�-��H�����H�,& H��t�1�1�H��L�����H���(�����b�9l$�9��H�=����9�tH�=|��1�9�@�ƍ4vL�|$L�d$pL�����H�T$pH�5���L��������f�H��$�H���w�*��t$H��I�����H�t$(H���[L��A�����H��$�I��H��t$�����t$H��I����H�t$(L�����I��Hc�$���$�H�=����H��$ H�H�t$ L��$(H�TH��L��$0H��$@H�$��H��$8���L���h��|$l���l�������H�$H��H�=���M����H��$�H���'�"���t$H��I������H�t$(H���L��A�����H��$�I��H��t$�����t$H��I�����H�t$(L�����I��Hc�$���$�H�=����H��$ H�H�t$ L��$(H�TH��L��$0H��$@H�$��H��$8�x����H��$�H��$��{���t$H��I������H�t$(H����L�����H��$�I��H���"�
���t$H��I�����H�t$(L������H��$�I��H��������t$H��I���y��H�t$(L�����I��$�Hc�$�H�=���H��$ H�H�t$ L��$(H��H�L	L��$0����$�L��$8H�H��$@H�$H��H��$P��H��$H�M�������H��$�A�H��t,����t$H��I�����H�D$(H��tL��H������I��H�$H�t$ H�=����H��$ L��$(�����W��������$�H�t$ HE�H�$H�=����H��$ H��$(�������H�$H��H�=���}����������I��H��$�H���GHcPHc�H�tH�T1����H�D$8L��$�M���H�D$8���$�H�=;���H�t$ H��$ H��$(�HE�H�$L��$0H��$8�����O����H�$H��H�=�����L������|$l���5���H��$XdH3%(H�D$@��H��h[]A\A]A^A_�H�$Hc�$�H�=��H��$ H�t$ H�DH��$(�>�����f�H�$H��H�=r��������A�H��$�A�H��� ��������t$H��I�����H�|$(�������fDA�H��$�A�H����������t$H��I���7��H�|$(��������fDH��$�A�H��t�X���t$H��I�����H��$�A�H���y����-���t$H��I�������`���f�H��$�I9����H�\$PH�\$(L�|$XI���������t$H��I���|��H��t|L��H�����I�|$�I��H��t)����t$H��H�D$0�D��H�T$0H��H���t��H��L���1�I������L��H�����M9�tNI�<$H���q���A�I�|$�H��t��7���t$H��H�D$0����H��H�T$0t��f.�H�\$PL�|$X�����k��H�D$8�����H��$�H��t�����t$A�H��I���y�����A�A����H��H�h��I���f�����"���H������������H�D$x��
���H�D$x����f��	H�='���H�D$H����H�D$x�����H�' H�
��H�H�81��b������H�D$H�HHH�@PH�$H�XH�9 L�aH��u H�-��H�����H� H��t�H��H�� H�8���L��H��H�D$HH��$ �~��H��H��$(�n��H�\$H��$0H�{�X��H�{H��$8�H��t�m��H��$@H�D$H�x8�H��t�M��H��$HH�n H��u H�3�H�����H�N H��t�H��$ �H��H�����L�|$H��L���a��L���i��H���a������������ff.���H�M SH�5�H�H�c H�8�[��H�\ H�5��H��H����H�;�H�5�N��H�;�H�5o�:��H�;�H�5`�&��H�;�H�5T���H�=P�V��H�;�����H�G�H�5H���H�;1�H�_�H�56����H�=/���H�=(H�� ���H�=H�v �q��H�=�H�[ �^��H�=�H�@ �K��H�=�H�% �8��H�=�H�
 �%��H�=�H�� ���H�=qH�� ���H�=eH�� ����H�=aH�� ����H�=[H�� ����H�=VH�h ���H�=OH�M ���[H�8 ����H���d��@��UH��H��SH���{��H��H�5�H��H���V��H��H��[]�ff.����ATH�=US���H�-
 H�5�H��H��H�U���H��H�5�I���}��H�UH�5�H��H�����H��H�5�H������H�� �H�5H��H�H�5����`��[L��]�H����H�5eA\�A�����SH�=d����H�5H������H�5H��H�G H��H��d��H��H�5"H���R��H�C H�[���H��H���Psychlibyaml_version%stag tuple must be of length 2HandlerEmitterinitializestart_streamend_streamstart_documentend_documentscalarstart_sequenceend_sequencestart_mappingend_mappingaliascanonicalcanonical=indentationindentation=line_widthline_width=iowritePsych/emitterMark@handler<unknown>external_encodingUTF-16LEUTF-16BE%s
SyntaxErrornewParserANYUTF8UTF16LEUTF16BEpsych/syntax_errorparsemarkreadpathemptyevent_locationPsych/parserRSTRING_PTR is returning NULL!! SIGSEGV is highly expected to follow immediately. If you could reproduce, attach your debugger here, and look at the passed string.����x��� ���x���x����X�mesgClassLoaderVisitorsVisitorToRubybuild_exceptionpath2classYAMLTree;�1�����������d������|��$���<���T��l,���\�����������L�����P<�����������L�����xl���\�����,���x�����$��p|����������������|���0<�L\�`|�t����������������,����|������������������	zRx�$���FJw�?:*3$"D����\����H@t
Ax��XHK�P��%HW�h��%HW����&HW����E�L����+E�e$���NE�M�D rDA<���+A�M
A0X���eF�H�A �G�B
 DABA0�(��eF�H�A �G�B
 DABA0�d��qF�A�K �G�K
 DABA0����eF�H�A �G�B
 DABA((���GE�A�N c
DAD(T��GE�A�N c
DAD0�4��}F�A�K �G�Z
 AABAzRx�����$0��!0�L���F�D�D �D0m
 AABE0����F�A�A �G�`
 AABEHPt���F�B�B �E(�A0�D8�J��
8A0A(B BBBCH�����F�B�B �B(�D0�D8�J��
8A0A(B BBBH\�l���F�B�E �E(�A0�D8�G�,�E�N�D�i
8A0A(B BBBDHH���(F�B�B �B(�A0�K8�J��
8A0A(B BBBDH����8F�B�B �E(�A0�K8�I@A
8D0A(B BBBF����rE�e���E�L��,��@�T�h�QH C
A�`�QH C
A���QH C
A�����������0 $��F�G�D �G@^
 AABFT��'E�a(p���E�H�D@�
AAAL�h�
F�B�B �B(�D0�C8�J�5
8A0A(B BBBD�(��L����$ ��4E�G�D ^DA(H��F�H�A ��DUt��ZE�TGNU�.�-�i �X�/bYC���T@!
|W�i �i ���o`
�
j�l �p��	���o���oX���o�oz���ohj p!�!�!�!�!�!�!�!�!"" "0"@"P"`"p"�"�"�"�"�"�"�"�"## #0#@#P#`#p#�#�#�#�#�#�#�#�#$$ $0$@$P$`$p$�$�$�$�$�$�$�$�$%% %0%@%P%`%p%�%�%�%�%�%�%�%�%&& &0&@&P&`&p&�&�&�&�&�&�&�&�&'' '0'@'GA$3a1@!�WGA$3p11130-zWGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113/WGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY .,V
GA*FORTIFY/zWGA+GLIBCXX_ASSERTIONSGA+GLIBCXX_ASSERTIONS .,Vpsych.so-3.0.7-167.el8.x86_64.debugAz��7zXZ�ִF!t/����]?�E�h=��ڊ�2N���%�����$��Ev['K�b��T�>��������~�FQQ�����݉����<\ϖ�����
f��A������ъ�F�^�{1Ja?���W
D�H*P���3�g [�4��J�K�ը��Ć�A�p��<��e�	:���gT�ꋙx�T,>�~Q�~�XHt~�=��<�
h%NOR)�=r��$kL�w��5�I8je�]^-$�r5HN�7�Sq`�叟�R�e���4>�?�`|B[$܃i?l$�De�-�7�I�0�ƕk���ә�Ot��+q̜�~��p12]���t��b&���[�O�HT������S%���T]�u�"Oj^zyZV9�seh�4�ǹpQ���
vP�A�,�Kca�p��C�
q�$0�y��cw�s�t��h4��mu�\/^%�v�,��|Q��o��p=�Z�@>����c�
1Y۫W�o�x�-�̈���АF�jnh`�՜��'��������vNnLj���t��^��y�=�vn~~?-��LP��Y��&kX�1�r��Z�4�>�ͪ7��*;��Τ�4����p��ƏY&v>�O�(�D�o�ng\k�?�ԓ�h��I/E���2H8��rҙ:����.1���
m8�'
�ۅ�c�*���	
�P��6$��s�5�d\u{�n�x�홻���wGkVt�T%\M���m`�bD�«��ʱ�g�������iǂ�	�!��v�/6+��YO!:z��_.�=�0J;����
�ƴ4=g�.aZµRO�˲';�F�����3��?�B���G�!A3)ބ�ۍFn}Z�7�@
��>�Cۆ{�+������!	�n尗~ֵk���+x��_�����!�DK�z�P�ڛ:��T:mӐ�y[4��%2F�2���/r�-m4��m������_2������X�y�����y&��\˙�nr���E}Vѐ�'��iNC�yy��6y�),t����DAhF��U�nt������.�
{����45ڐ�U+?�'>�tK���>V�W��;�^�;T���՗���V�(��Y��d��x��.�c�d�+ؖ�T��G\���e�g�-��8X���4����-�PX5�n��z:A�ë�YzozO
����}�µl�b�R����'i|�o[�����	�'�ī���g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o```(��P
0

j8���ozz�E���oXXPT���^Bpp�h@!@!c`!`!�nP'P'�w0-0-J*}|W|W
��W�W��Z�Z��(\(\���c�c ��i �i��i �i��i �i� �hj hj ��l �lh�p �o���p`�o|lt(�t��y"PK�#[#ruby/psych-3.3.2/gem.build_completenu�[���PK�#["ruby/json-2.5.1/gem.build_completenu�[���PK�#[�_�}�~�~"ruby/json-2.5.1/json/ext/parser.sonuȯ��ELF>�@�w@8	@�[�[ kk k �� �k�k �k 888$$�[�[�[  S�td�[�[�[  P�td X X X��Q�tdR�tdkk k ��GNU7�K8C�����5�-��^�G�@ �GJBE���|ŷ|!�qXQ
`�� ��s���.q��  _�U�����1���x�� Z�"A
���"��h���?�`~�A, -IF"��jO:�Pp c�p T�G&Wp __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeruby_xfreerb_gc_mark_mayberuby_xrealloc2ruby_xmalloc2rb_check_typeddatarb_str_duprb_eTypeErrorrb_raiserb_funcallvrb_ary_entryrb_ary_push__stack_chk_failrb_data_typed_object_zallocruby_xmallocrb_str_buf_newrb_ary_new_caparb_hash_foreachrb_str_freezerb_str_catrb_str_internrb_utf8_encodingrb_enc_associaterb_enc_raiserb_error_arityrb_keyword_given_prb_string_valuerb_enc_getrb_ascii8bit_encodingrb_str_conv_encrb_hash_duprb_id2symrb_hash_arefrb_eArgErrorstderr__fprintf_chkrb_fix2intrb_check_typerb_freeze_singleton_classrb_class_new_instancerb_cstr2inumrb_ary_newrb_hash_newrb_respond_torb_str_new_cstrmemcpyrb_hash_asetrb_cstr_to_dblrb_float_newrb_class_namestrrchrrb_str_substrrb_path_to_classrb_sym2idrb_mKernelInit_parserrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_path2classrb_gc_register_mark_objectrb_define_alloc_funcrb_internrb_const_getrb_define_methodlibruby.so.3.0libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.14GLIBC_2.2.5GLIBC_2.4/opt/alt/ruby30/lib64Fti	h���tui	ii
�k Pk  k  k @k �LHk   Pk �Xk ��o �o �o �o %�o =�o >�o ?�o @�o E�m �m �m �m �m �m 	�m 
�m �m �m 
n n n n  n (n 0n 8n @n Hn Pn Xn `n hn pn xn �n �n �n  �n !�n "�n #�n $�n &�n '�n (�n )�n *�n +�n ,�n -�n .o /o 0o 1o 2 o 3(o 40o 58o 6@o 7Ho 8Po 9Xo :`o ;ho <po @xo A�o B�o C�o D�o F��H��H�!Y H��t��H����5�V �%�V ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=���������%S D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%�R D���%}R D���%uR D���%mR D���%eR D���%]R D���%UR D���%MR D���%ER D���%=R D���%5R D���%-R D���%%R D���%R D���%R D���%
R D���%R D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%�Q D���%}Q D���%uQ D���%mQ D���%eQ D���%]Q D���%UQ D���%MQ D���%EQ D���%=Q D���%5Q D���%-Q D���%%Q D���%Q D��H�ǾH�D$����H�D$��H�=YQ H�RQ H9�tH��P H��t	�����H�=)Q H�5"Q H)�H��H��H��?H�H�tH��P H��t��fD�����=�P u+UH�=�P H��tH�=�K ����d�����P ]������w�����H�
�7H���x=�WH���x0H��H	��WH���xH��H	��WH���xH��H	�ø���f.���H�GhH�@H��p�ff.�@��USH��H��H�ohH�}H��t���H�����H��H��[]���ff.���SH��H�?���H�{ ���H�{@���H�{H���H�{P���H�{`[���f�ATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?��+���I�$I�D$I�L$�ff.���H��H�5AJ ���H�8H��t	H���+���H��N H�5�)H�81������AUATUS�H��dH�%(H�D$1�H��4t&I��H�5EO H��I��1�1�L������H�����u#1�H�L$dH3%(��uIH��[]A\A]�@1�L���V���H��H��H�5�N H�$���H�����t�L��L��������q������UH�TI �pSH���5���� H�h H�����f�@H�@H�H�EhH��H��[]�ff.�@AWI��AVAUI��ATUSH��1�H��8H�$dH�%(H�D$(1��^���H�$I�EL�{I9��IA�?"�/1�sX��uVI�}�K4��t�S0����@������I�O�HD�H�\$(dH3%(�H��8[]A\A]A^A_�L�c`I�����t������I�uI��H�����H�5���L��L������L������H������Y���I�UH�5TM H��H�L$H�T$����H��I�E�/����H������=���H���H���-����C8���"���H�iL ���1�1�H��H�����I�E���@H��M��M�fL9���A�F<"t4<\uM�fL9���A�F<u�&<��M���f�I�OI��L9�r��M9��OL�ɀ9\L�Iu�I9����A<f���<r��J<t�r<u��I�F�I9��wH�yH�$����H�$I��%�H=��L�II�F�I9��i�y\�H�5N'���yu��H�yH�$�z���H�$L��I��
%�H��E��L�I��H��H��I	�I	�L�кH�t$$H�����D$$L��H����?�Ȁ�D$%L��A��?H��A�ʀ��?D�T$'�Ȁ�D$&�d@<\��<b��<"t|M��M9������L��L)�L��H������I�mH����M�����@�H�5�%<nu�H��L�$����L�$M�yM���L���@�H�5M%��f��H�5?%��f��H�53%�f�H��L��H��L�L$L)�H�$�v���H�$L�L$�A<f�����H�5�$�p����H�5�$�_�����H�5�$�G��������I�E�,���f�����I�}M��H���w����f�L�II��w&D�T$$�H�t$$��f�����fDI�����I�����fI���������D$$?�H�t$$���DI�NH9���A�F<@����0<	��I�NH9��|A�F<@����0<	��I�NH9��dA�F<@����0<	wxM�fL9��PA�F<@����0<	�R���M��1�����fDL��A��?�H��A�ʀH�t$$��D�T$%�D$$����fD<F�M�����a<�B���I�����D<F�R�����a<�G�����<F�[�����a<�P�����<F�������a<������X����L�кH�t$$H�����D$$L��A��?H��A�ʀ��?D�T$&�Ȁ�D$%�%���DI�׽���1�����I�׽����I�׽����I�׽���I�׽���I�׽����V�H��G �j�M����H��#H��H��1��^�H��G �B�M����H��#H��H��1��6�fD��AVI��AUI��H�5�A ATU��H��SH��0dH�%(H�D$(1��y�H�8���������f.�H��Hc�M�d��p����I�EH�D$��u�H�C(dH�5�F 1�1��CXH�=�F �T�H�C@H�C H�CHH�CPL�d$L����H��H����I����I9��7�*�H��I����H��L��H����H��L��H�l$�a�H�D$H��� � H�PH�hH�SH����H�L��H�kH�L$(dH3%(��H��0[]A\A]A^�L�����I�ă������I�EH�D$�������I�����H�=�E H�l$ ��H��L��H�5EE I��H�D$ �0�H��������C(dH�=FE �q�H��L��H�5E I��H�D$ ���H��������C,H�=E �3�H��L��H�5�D I��H�D$ ��H�������C4H�=ZD ��H��L��H�5�D I��H�D$ �v�H��������C8H�=�D ��H��L��H�5MD I��H�D$ �8�H��������CXH�=fD �y�H��L��H�5D I��H�D$ ��H������VL��L����H�C H�=�C �3�H��L��H�5�C I��H�D$ ��H�������H�C@H�=�C ���H��L��H�5�C I��H�D$ �u�H������yH�CHH�=jC ��H��L��H�5KC I��H�D$ �6�H������H�CPH�=C �v�H��L��H�5C I��H�D$ ��H�������H�C`���fD@��tbH����H�����H��H��������f�H��H�h��H�S���@H�5�B H�=C 1�1���H�C ����H�����t�H�EH�ƒ�H���������������s���DL��L���U�H������[�C(����DL��L���-�H����������C,����f�L��L����H�CH�{���@L��L�����H�C@�$���@L��L�����H����������C8�>����L��L����H����������C4����L��L����1�H���‰SX�S4���9���H���0���H��@ H�5GH�81���DL��L���M��H�����HD�H�C`����DL��L���%�H�CP����H��@ H�
>�H��H�81���H�D$��������H������C(�����H��? H�5�H�81���f�AWI��AVI��AUATUH��SH��XdH�%(H�D$H1�H9���H��H�f�M�A�<n����Hc�H�>��f.�L��DH��H9�u�I��A�fDA�W8��tPI�>@��uGH�����t.H�H�ƒ�H��tH�€�H�H�t��u
���DA���UfDE1��G��0��	�&@H�EH9����	H�5�H���������A�,����H��? L�m	I���fDL�mL9��E1�}n�&���L�mL9��;�}f����L�mL9��h�}i�����L�mL9���}n���L�mL9��,�}i����L�mL9����}t�����L�mL9����}y�����A�,��H�? L�mI��fDL�mL9��#E1�}a�^���L�mL9����}N�G���A�w,����H��> L�mI����L�mL9��E1�}r����L�mL9��1�}u���L�mL9��=�}e����I�L�m�fA�G(E�`I�W@H�D$ ���KA9��BH�=#> D��H�5�1���f.�L��H��H��L���o�I��H��LD�A�G8���QH�t$HdH34%(L���MH��X[]A\A]A^A_�L�mL9��
E1�}a����L�mL9��6�}l�����L�mL9��c�}s���L�mL9����}e����I�L�m�\����L�mL9��{E1�}u�����L�mL9���
�}l�����L�mL9����}l�x���I�L�m�����A�@I�WH�Ɖ$A�G(9��W���OH�=�< ��1�H�5Q���L�mL9��X�E<*ts</t*��A�O8���O���E1�����A�}
�����I��L9�u�A�	����f�I��I�mH9���
A�E<*t�</�����I��@I��L9���A�}*u���f���
�������V���I��E1��c���H����1�1���I�H9�tE�}{H��u<L�BL9�t3�B<"����<
t< ��L��L�BL9�u�f�I������H���61�1���I�H9��4�}[�*H��H�
�L�jL9����r�F�<n����Hc�H�>���0@��	���H�D$(H�D$H�D$0H�D$D�$H�L$H��L��H�D$(L������I��H���^I�HH�t$(I�>�MH�t$0H�L$�H�5�9 �"�I�D$�H�PH9�t%�H��,t@q��
t	�� ��H��H�PH9�u�I������
�$
����L��L�jL9����J�A�<nw�H�=4��Hc�H�>�����/���]�~H��I��LD�����fDI��A��R���f�</��<}��E�OXE����I�@I�w L�$I�>�v
H�t$0H�L$0�H�5�8 ��L�$H��txH�59 H�=�9 L�d$0�L��L�$H�D$0���H�509 1�1�H��H�����L�$H�����t-I�H�59 L��H�ߺH�D$0��L�$I��I��M��LD�����H�PH9�������@<*tK</t�iD�:
�\���H��H9�u��Z���f�H��H9��D����<*t�</�)���@H��H9��$����:*u���@��	������I���@�;�����fDI�oH9������E<-��<0����1I��<w5I��L9���A�$<E��<e��<.����0<	v�@I�o�E<-�h<0�P��1I��<v���f�A�E��0<	w	I��L9�u�I�_hM��H�CI)����H���&�H�CH�S�
�I�GhH�CH�x��I���I�LD��n���I��L9���A�}*u�I��L9���A�E<*t�</u�f�L������L������L�jL9����B<*t�</��I��L9���A�}
u��L�jL9�to�B<*tA</ucDI��L9�tUA�}
u��m���I��L9�t=A�E<*t�</�P���fDI��L9�tA�}*u���@��
�X���@���B���H�k6 ��M�蹷H��H�H��1���f.��[�����fD����I�����,����I��I�PH�5W5 �����UI�GPL�-?5 H�$I�GI�OhL��H)�H�AH�t$��H�ϾH�L$�P�H�L$H�AH�Q�I�GhH�AH�xM�������H�<$H�L$(L��H�D$(��I���I����h���L��I�oH9��\�������I�D$H9�t�A�T$��+t��-uI�D$H9�t�A�T$��0��	����H��H9�����E������e�������.������0��	v�����f���	<�0����@���H�D$ L�-�H�$H�D$(H�D$H�D$0H�D$H�$H��L��L��A�G0��A�G0H����H�H�H�AH9�����Q�� ��
��/�D��:�#H�pH9�������H�Q�n�d��IcT�L�>���0��	�����@H�L$E��H��L��H�D$(���I��H���X���I�@H�t$ ��H�D$H�L$�H�D$(I�>H�t$0H�53 H�D$8�+��L�D$I�@�L�@L9������P��,t<�G��
t	�� �KL��L�@L9�u������<
t��	<������L��I��L9�������B< t�~�<"�����</u�L�BL9�������B<*t6</t�|���A�8
t�I��L9�u��h���I��L9��[���A�<*t�</t�I��L9��B���A�8*u��Ҁ�
��������(���H���e���H�pH9������@<*t4</t
�����>
t�H��H9�u����H��H9�����<*t�</t�H��H9������>*u�����
�H��������/�e��}�]�����	����������@L�BL9��{����B<*tS</t�j���f.�A�8
�A���I��L9�u��H����I��L9��3���A�<*t�</����I��L9�����A�8*u���H��L�hL9������@��0<	��������@H��L�`L9�������@<E����<e�����<.����I�D$H9�����A�T$��0��	�$�����L�`L9�������@<E�����<e�����<.����0<	����L��L�`L9�u����A��=�DA��-�DA�
��DA��
�DA���DL�mL9�����E<0���1<���������L�eL9�����E<0����1<������/������	���������H�AH9��s��Q��*tB��/t�`�8
�����H��H9�u��I�H��H9��<����*t�/�t���H��H9���8*u���H��L���)��H�{L��H{H���v��LcI�_h����A����A����A����A���A���A�������L�$���@��u6H�����t-H�H�ƒ�H��tH�€�H�~H�t	����H�t$ H�T$(I�>L�D$���L�D$�+���L�@L9��4��@<*t></t�#�A�8
�1���I��L9�u���I��L9����A�<*t�</����I��L9����A�8*u���L������L�����I��A���A���A���A���A���A�����J������I����I������H��H�D$H�L$�s��H�L$H�D$H�T$H�yH��Hy���H�L$H�D$HAI�Oh����I�PH�5�, �M����t/I�GPL�-�, H�$������A����A�
���I�P@���I��H�$I���T���H���H��t5E1��@�����0��	�+����H��L�D$���H�t$ L�D$�����!��I��H�@H�D$I�E tI�EH�D$H����H�|$�:���H���1�H�P�L��H+T$H�D$�Y��H�����H�L$H�$I�EH��H��H+t$�� ��I�EH)�L��H�����H������H���M��I���b���E1�H�$�R���<,�#����8�A���I�����H�, ���I�����H�+ H�
��H��H�81��(���
���H��+ �w��I����l���H�����C���H��* L��H�H�$�(��H�����I�����I�>A�@������H�y+ ���L�E�������A����A�����UH�5�% SH��dH�%(H�D$1�H�$�R��H�8�H�XH�hH�
�H�H9����3�V�n����Hc�H�>���0@��	wp�E1�H��H��H��H����H����H���D��
t��	��w3H��H�XH9����P�� t�/u�H�XH9�t�@<*tL</taH��H�^* ���I��)H��H��H��1�����DH��H9�t��<*t�</t�@H��H9�t��;*u��؀;
�l���H��H9�u��@��H9������H�t$dH34%(H�$��H��[]�H��f�H��H9�������I���fDH�SH9��6����s@��*tI@��/tH�������:
t�H��H9�u�����H��H�ZH9�������R��*t�/t�H��@H��H9������:*u���@@��
�E���@���\���������H��' H�5TH�81����f.���H�������H�=�����H�=�����H�5�H��H��( ����H��' H�5�H��H����H�=zH��( ����H�=yH�v( ���H�=j( H�[( �>��H�=O( �2��H�=S( H�5T���?��H�=@( �����H���H�54���H�=!( 1�H�����H�5#�d��H�=( 1�H���H�5
�H��H�=�L��H�=�' H���]��H��H��' ���H�=��"��H�=�' H���3��H��H��' �t��H�=����H�=�' H���	��H��H�O' �J��H�=�����H�=�H�(' ���H�=�H�
' ���H�=�H��& ���H�=�H��& ���H�=�v��H�=H��& �c��H�=vH��& �P��H�=sH�z& �=��H�=mH�_& �*��H�=fH�D& ���H�=aH�)& ���H�=TH��% ����H�=NH��% ����H�=@H��% ����H�=<H��% ���H�=-H��% ���H�=H��% ���H�=
H�l% ���H�=�H�Q% �l��H�=�H�6% �Y��H�=�H�% �F��H�% H�����H��H���uninitialized instance
	"\already initialized instance%s
nesting of %d is too deep%u: unexpected token at '%s'-Infinityjson/commonJSONExtJSON::ParserErrorJSON::NestingErrorinitializeparsesourceNaNMinusInfinityjson_creatable?json_createcreate_idcreate_additionschrmax_nestingallow_nansymbolize_namesobject_classarray_classdecimal_classmatchmatch_stringkey?deep_const_get[]=[]<<newtry_convertfreeze-@JSON/Parser%u: incomplete unicode character escape sequence at '%s'%u: incomplete surrogate pair at '%s'options :symbolize_names and :create_additions cannot be  used in conjunctionRSTRING_PTR is returning NULL!! SIGSEGV is highly expected to follow immediately. If you could reproduce, attach your debugger here, and look at the passed string.��`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`���`�`�`�`�`�`�`�`�`�`�`�`�P�`���`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`�`���`�`�`�`�h�`�`�`�`�`�`�`�`�`�`�`�`���`�`�`�`�`�`�`�`�`�`���`�`�`�`�`�`�`� �`�`�`�`�`���`�`�`�`�`�`����.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.���.���.�.�.�.�.�.�.�.�.�.���.���.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.�.���.�.�.�.���.�.�.�.�.�.�.�.�.�.�.�.���.���.�.�.�.�.�.�.�.���.�.�.�.�.�.�.���.�.�.�.�.���.�.�.�.�.�.����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r���r�,�r�r�r�r�r�r�r�r�r�r�,�r���r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�,�r�r�r�r�,�r�r�r�r�r�r�r�r�r�r�r�r�,�r�r�r�r�r�r�r�r�r�r�,�r�r�r�r�r�r�r�,�r�r�r�r�r�,�r�r�r�r�r�r�,���P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P��P��P�P�P�P�P�P�P�P�P�P��P���P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P��P�P�P�P��P�P�P�P�P�P�P�P�P�P�P�P��P�P�P�P�P�P�P�P�P�P��P�P�P�P�P�P�P��P�P�P�P�P��P�P�P�P�P�P��������������������������������������������������	�������

��������������������������

���������������������������������������������������������������������������������������������������������������������������������������������������������;����������`���@������������8@��T����������� ��0��P����`���HzRx�$���FJw�?:*3$"D�����\P��Vp���$����5E�A�G ^DA����>E�t,�����B�D�D �V
ABE�D��=HX
E8h���F�B�A �A(�I@R
(A ABBE$P���QE�M�D uDAHx��
B�E�B �E(�A0�A8�Ip�
8A0A(B BBBD@����gF�E�L �A(�F0�D`E
0A(A BBBA zRx�`�����(��� L@����B�E�E �B(�A0�D8�D�+
8A0A(B BBBD(�<�VE�H�D0p
AAA�p�&HGNU�P k �L  ��-<F��
Kk k ���o`�	�
��m ��8�	���o���o����o�oL���o�k ���� 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��GA$3a1�KGA$3p1113�KGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY`KGA+GLIBCXX_ASSERTIONSparser.so-3.0.7-167.el8.x86_64.debug���7zXZ�ִF!t/����]?�E�h=��ڊ�2N����� ��Fgxoة�� A���J���Lz%�y�sa�)ݫԺ[�jT.�#H�6��=4�����4'c50��_���&݀�$��J����)Zl�����+�FA&�N����C��-��A�*�
����e��bJ��e�F�J��M`V1�A�te�7x��3Ұ��2�xyL8��K�O� Ҷ�>�#`�Μc1����yo�m��>dI�V/b�.�R����'5
k�3)�q�'�Аs��"
��G�ӘB�+A���0֢��r�eC�$���3QJ/��׍�O=q�\�=��Ҏ$�'��gt8ɍ����i~��ز���k2���f�@6�
��
�o�u\$�I�^�ϫ�}�*��bV.K�4HH�b����<1Ҵ��켕3�U��[�oh��!�[�uW�0�k���ɻ�TA��%���c,�^�l�9�C���X}"0�wJ؂����1�we��� wA��X�2=�>������wq�ӡv%�_*� x����PV�MW��
DK�I�Ёč�e�&��ԼTk&�҉���uQ�.>
E��#��	R����=�?heԞ��T�g��*�����M`C$� �9&�XZ�ۦ��,��$�vI�ZZ+��*n�E ���ڎR,�SKFGN]"p�	��"�K4I�7�݂�Q��>�s��, �s�/����P�*����ā���co|�k��'�;D
��;�8�*g.	=��Uk����,�Z�|Š�"W1?r��k�G�w��L��؃����
���@"u�:��q��B�6��-|y�G�Q:��N=�r��	�8���[)���Ѧx"MW�h��7��� _��w��ۮ�]��=��Dk�䗝����N{7N�i�������2*/D?x���em	�BT�a21�!�:JJ}U�6ᱺ�hXEX��/��f0Ʊ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(��0�	�	�8���oLL�E���o��PT88�^B���h��c���n���w���,}KK
� K K
 � X X���X�X���[�[ �k k�k k� k  kh ��k �k��m �mP�p �o���p`�oH0r,\r\v"PK�#[��(�(�%ruby/json-2.5.1/json/ext/generator.sonuȯ��ELF>�@(�@8	@�{�{ �� �  h�h� h� 888$$�{�{�{  S�td�{�{�{  P�td�l�l�lTTQ�tdR�td�� � GNU*�cH�}��&Ӭ��_k�48M�@$�MOPBE���|�qX�t�)���_G $�����G�^�7a�T��r�RU�k*� |$_��y�B\"�m"I�P=�.�8{-����, Ro�F"��m����� �� �� � ]
	__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_funcallv__stack_chk_failrb_check_typeddataruby_xfreeruby_xmallocruby_xrealloc2ruby_xmalloc2rb_str_newrb_utf8_encodingrb_enc_associaterb_data_typed_object_zallocrb_hash_newrb_obj_classrb_class_namerb_hash_asetrb_str_new_staticrb_str_duprb_str_catrb_str_concatrb_str_internrb_sym2idrb_ivar_setrb_attr_getrb_obj_is_kind_ofrb_cHashrb_class_new_instancerb_intern2rb_ary_entryrb_string_value_cstrrb_iv_getrb_str_substrrb_id2symmemcpyrb_string_value_ptrrb_float_valuerb_raiserb_error_arityrb_hash_foreachrb_eArgErrorrb_check_typerb_hash_arefstderr__fprintf_chkrb_enc_getrb_usascii_encodingrb_str_encoderb_enc_str_asciionly_prb_path2classrb_check_convert_typerb_convert_typerb_cFloatrb_cFalseClassrb_cArrayrb_cStringrb_cIntegerrb_cNilClassrb_respond_torb_cTrueClassrb_cSymbolrb_id2strInit_generatorrb_ext_ractor_saferb_requirerb_define_modulerb_define_module_underrb_gc_register_mark_objectrb_cObjectrb_define_class_underrb_define_alloc_funcrb_define_aliasrb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.0libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.3.4GLIBC_2.14GLIBC_2.4/opt/alt/ruby30/lib64�ui	�ti	�����ii
�� 0!�� � � �  � �i0� �$8�  "x� �� �� 	�� �� �� �� "�� *�� 3�� 5ȏ @Џ A؏ B� D� J� L�� �� �� �� �� �� �� 
ȍ Ѝ ؍ 
� � � �� � � � �  � (� 0� 8� @� H� P� X�  `� !h� #p� $x� %�� &�� '�� (�� )�� +�� ,�� -�� .�� /Ȏ 0Ў 1؎ 2� 4� 6� 7�� 8� 9� :� ;� < � =(� >0� ?8� C@� DH� EP� FX� G`� Hh� Ip� K��H��H��w H��t��H����5ju �%ku ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!�������%�q D���%�q D���%�q D���%}q D���%uq D���%mq D���%eq D���%]q D���%Uq D���%Mq D���%Eq D���%=q D���%5q D���%-q D���%%q D���%q D���%q D���%
q D���%q D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%�p D���%}p D���%up D���%mp D���%ep D���%]p D���%Up D���%Mp D���%Ep D���%=p D���%5p D���%-p D���%%p D���%p D���%p D���%
p D���%p D���%�o D���%�o D���%�o D���%�o D���%�o D���%�o D���%�o D���%�o D���%�o D���%�o D���H��H�D$����H�D$�����H��H�D$���H�D$�����H��H�D$���H�D$���H�ǾH�D$�j���H�D$�7-��H�ǾH�D$�J���H�D$�x-��H�ǾH�D$�*���H�D$�@-H�=yo H�ro H9�tH��n H��t	�����H�=Io H�5Bo H)�H��H��H��?H�H�tH��n H��t��fD�����=o u+UH�=�n H��tH�=�i �9����d�����n ]������w����H�7H��thv$H��tNH��u8�R�1��€��?v2�f�H��u��B�<A�������	Ѓ��1��DH�W@�B��H�1���?w�H���J�1����w�����tKv���t$���u/���v��f����u���w��D���w��f.�1����o����W��������`����fD��H�?��t
H�GH�H�t	H�WH�DH� t	H�W(H�DH�0t	H�W8H�DH�@t	H�WHH�DH�WPH��tHBH�WXH��tHBH�W`H��tHB�ff.�@��H��H��H�5~m �dH�%(H�D$1�H��m H��H�$�f���H�T$dH3%(uH������ff.����H��H�5h ���H���H��H�D�ff.���H��H�5�g ����H�@xH��H�D�ff.���H��H�5�g ����xqH�H��H�Ѓ��f.���H��H�5qg �l����xpH�H��H�Ѓ��f.���H��H�5Ag �<���H�xhH�H��H�Ѓ��f���SH��H�5g ����H������@r�[�f.���H��H�5�f �����xrH�H��H�Ѓ��f.���H��H�5�f ���H�@hH��H�D�ff.�SH��H�H��t�n���H��[�e���D��SH��H�?H��t�K���H�{H��t�=���H�{ H��t�/���H�{0H��t�!���H�{@H��t����H�{PH��t���H�{XH��t�w���H�{`H��t�i���H��[���SH��H���HDؿ �F���f�@H�@H�[ÐATI��UH��SH�tWH�OI�T$H��H)�H9�v:H���H�H��H)�H9�r�H9�vI�|$�H�����I�\$I�D$[]A\�@H�?�����I�$I�D$I�L$�ff.�USH��H��H�wH��
���H��H�������J���H��H���o���H��H��[]�D��H��d ������ff.���ATUH��SH��dH�%(H�D$1��<���H��H���1���H���Y���H�5�i 1�1�H�=Wj I�����L��H��H�������H�=�?��H��H��H�5~i H�$�u����H�=�AH�����H��H��H�����H�T$dH3%(uH��H��[]A\����f���AV1�I��1�AUATUSH��H��H�� H�5li dH�%(H�D$1�I����H��H������H�5AH���u���L��H��H�5�h I��H�$���H�����u_�H�=�>��H��H���c�H������H������L��H��H�������H�L$dH3%(u2H�� []A\A]A^�L��H��L�,$H�5h L�t$�0������f���AT1�1�USH��H��H��H�5ch dH�%(H�D$1�I�����L��H��H�5�g H��H�$���H�����t5L��H��H�,$H�5�g ��H�T$dH3%(uCH��[]A\�H�=w=���H��H���D�H�����H����H��H���I�������f���UH��SH��H��H��H��dH�%(H�D$1��E���H��t H�T$dH3%(H��ubH��[]�fDH�Af H��H�0����H��t)H��H��H�$H�5#g ���H���f�H�Ig 1�1���H�����fD1�H�==���f���H��H�5Qa �L�H�x@H��tH�pHH���&���fDH���f.���H��H�5a ��H�x0H��tH�p8H�����fDH���w������H��H�5�` ���H�x H��tH�p(H����fDH���7������H��H�5�` ��H�xH��tH�pH���f�fDH��������H��H�5Q` �L�H�8H��tH�pH���'��H��������AWAVAUI��ATUSH��(dH�%(H�D$1���H�5�_ L��H�����H��H��d H��u&L�%�:fD�L����H��d H��t�1�1�H��L�����E1�I��H�D$H�$�@H����I9���L�=e L��L�����1�1�L��H����H�H�D$�� �FH�PH�<$H�T$I��� �L��H����H�T$H�|$�I��H�����H���r�L��H��H���T�I�$�� �_���I�D$I9��a���H�sH�;��H�=>d I���n�L��H��H����H�sH�{��H�=d I���D�L��H��H�����H�s(H�{ �i�H�=�c I����L��H��H����H�s8H�{0�?�H�=�c I�����L��H��H����H�sHH�{@��H�=vc I�����L��H��H���h�{pH�=Ec M���I��H��A��H��L���@�{qH�=c M��}�I��H��A��H��L����H�ChH�=�b L�d�S�L��H��H�����{rH�=zb M��2�I��H��A��H��L�����H�CxH�=bb L�d��L��H��H����H���H�=4b H�\���H��H��H����H��H�L$dH3%(uH��([]A\A]A^A_�f�H���������ff.�@ATI��H��UH��SH������H�{H��H{L���H�Hk[]A\�ff.�@ATH�5�\ US��H���H�����H�kXI��H���)H�EH�����H�EH�U�,H�EH�k`H���H�EH�s H��t
H�S(H�����H���S���H�EH�U�:H�sH�EH��t	H�SH��uhH�kPH��tqH�E�H������H�EH�U�,H�s@H�EH��t	H�SHH��uL��[]A\��H�{P���L��[]A\��H�{`���H�kPH��u���|���H��H�CP�H���x���H�k`�/������N���H��H�CX����f���6���H��H�C`���f.���H�?6f������N��f������N�у�f��������N�F���DI���������SH��:H�� dH�%(H�D$1�H��I��H��?L��I��I1�I)��f�L��L��L�II��H��H��H�I)�B�I��A�A�H��u�H��yH�AA�-L��I��L��L9�v#f���0H��H��@�q�P�H9�w�M)�uH�D$dH3%(uH�� [�L��L���
�������fDUH��SH��H��H�>���H�H��uH��[]�DH�uH��H�D$����H�D$H��[]�ff.�UH��SH��(H�t$H�\$H��dH�%(H�D$1���H�L$H��� t0H�QH�\$H�L$H��u3H�D$dH3%(u0H��([]�fDH��H�\$��H�L$H��t�H��H���'������ATI��UH��H��SH��H����E�$$1�1�H�5g^ H���D$��E��u"�D$f(�fT
2:f.
::wf.�zBH��H��H��[]A\���H��H�D$���H�D$H�=^ ��H�5�3H��1��p�H��H�D$���H�D$H�=�] ��H�5�3H��1��A����ATUS��x\I��uO�H�=�] ���H�5X H��H����H��H���Q���H�spL��H��H������[H��]A\��H�6��t��1���ff.��SH��H��H�52] 1�1����H��[H�����ff.�f���USH����xZH��uM�H�=!] �<���H�5UW H��H���J�H�����H���u2H��H������H��H��[]���H�6��t��1��l�@H�H��H���:���H��H��[]��ff.��AWAVAUATI��UH��SH��H��HL�z0L�*dH�%(H�D$81�H�B8L�rH�RhH�D$H�ExH��H�ExH��t	H9���H��H�$��H�CH�SH�57%H�$�{H�T$H�CH��L�d$ H�\$H�l$�D$(���L�exI�D$�H�ExM��tLH�|$��M��t;H��~6A��1��fD��D9�t M��t�L��L��H�߃�����D9�u�D�H����H�CH�S�}H�CH�D$8dH3%(u[H��H[]A\A]A^A_�H�T$L��H��H�$���H�$M���d�������H�ExH�=�Z H�5�0H�P�1�H�Ux�_����f.���AUATUSH����xfI��uY�H�=�Z ��H�5U H��H����H��I���[���L��L��H��H��H������H��H��[]A\A]��DH�6��t��1���ff.����S��x_uU�H�=YZ �t�H�5�T H��H����H�������H�5�/H��H�����H��[�*�f.�H�6��t��1���ff.����S��x_uU�H�=�Y ���H�5
T H��H����H���Z����H�5t/H��H������H��[��f.�H�6��t��1���ff.����S��x_uU�H�=YY �t�H�5�S H��H����H�������H�5�.H��H�����H��[�*�f.�H�6��t��1���ff.��H��t3UH��SH��H��H�����H��H��H����H��[]�D1�H���f���ATI��USH9��$H��H�5�R ���H��H�5�R H����H��H�����oE�oHM�oP U �oX0]0�o`@e@�ohPmP�op`u`�oxp}pH���H���H�sH�;����H�sH�{H�E�
���H�s(H�{ H�E���H�s8H�{0H�E ���H�{@H�sHH�E0����H�{PH�E@H��tH�wH������H�EPH�{XH��tH�wH�����H�EXH�{`H��tH�wH������H�E`L��[]A\�H�aV H�53-H�81������SH��H�5�Q H���x�����H�H�XxH���[�ff.�f���SH��H�5AQ H���8������H�H�XhH��H��[�ff.�@��SH��H�5Q H���������H�H��~H���H���[�D��UH��S��H��H������t-H�ǾH�D$�#�H�D$H��H���H��[]�K���H�����t�H���H��u���f���SH��H��dH�%(H�D$1���tw�H�����f��H�=�-��H��H������H�=8+H�����H��H��H�56U H�$�%�H�T$dH3%(u+H��[��H�����t�H���H���p����z����U�D��AVAUATUH��H�5�O S��I��@�������H����H�uH��% uIf�H��I�|$0H���I��H��u:H��t�/�I�D$0[�]A\A]A^��L�mI�|$0L��H��t�H��t��H�E% L�uH��t	L�uM��tbH��L�����M�l$8I�D$0�[]A\A]A^��H������+���H�uH���H������H��% �1����l���@H�IS H�
-�H�*H�81��t��u���ff.�@��AVAUATUH��H�5;N S�5�I��@�������H����H�uH��% uIf�H��I�|$@H���I��H��u:H��t����I�D$@[�]A\A]A^��L�mI�|$@L��H��t�H��t���H�E% L�uH��t	L�uM��tbH��L���O���M�l$HI�D$@�[]A\A]A^��H������+���H�uH���H������H��% �1����l���@H��Q H�
�+�H��(H�81����u���ff.�@��AVAUATUH��H�5�L S����I��@�������H���7��H�uH��% uQf�H��I�|$H���I��H��uBH��t�o��I�D$I�D$[�]A\A]A^��L�mI�|$L��H��t�H��t�-��H�E% L�uH��t	L�uM��tbH��L�����M�l$I�D$�[]A\A]A^��H������#���H�uH���H������H��% �)����l���@H��P H�
B*�H�O'H�81�����u������AVAUATUH��H�5{K S�u��I��@�������H������H�uH��% uQf�H��I�|$ H���I��H��uBH��t���I�D$ I�D$([�]A\A]A^��L�mI�|$ L��H��t�H��t����H�E% L�uH��t	L�uM��tbH��L�����M�l$(I�D$ �[]A\A]A^��H������#���H�uH���H������H��% �)����l���@H�!O H�
�(�H��%H�81��L���u������AVAUATUH��H�5J S���I��@�������H���w��H�uH��% uIf�H��I�<$H���I��H��u:H��t���I�$I�D$[�]A\A]A^ÐL�mI�<$L��H��t�H��t�v��H�E% L�uH��t	L�uM��tcH��L���0���M�l$I�$�[]A\A]A^�f�H������+���H�uH���H������H��% �1����l���@H��M H�
�'�H��$H�81������t���ff.�@AWAVI��AUI��ATI��USH��H��8dH�%(H�D$(1����H�CH�SL���"H�C����H���k��H9�t#���H9�tH�5=N L���1�����I��I�.E�mL��H��� A�<$��L�t$H���I��H�����\uL��D$$f�|$"I9��A�H�
r(I��f���A��L�H9��FL�=�'L�d$"@D��L��A�qHc��������5A����E��Kc�L�>��DH����M�fH�����\uL���D$$E1�f�t$"���E1ɉD$H�����K�<4�<�q�P����=H�5'��Hc�H�>��f�A�L�=�"L��L)���L��L��H����M�NM��I9�r�L��L)�tK�4H��H������H�����H�CH�S�"H�CH�D$(dH3%(��H��8[]A\A]A^A_��L��A�L�="L)��k����K�4H��L�$�h�L�$�K����A�L�=�!�&���fDA�L�=�!����fDA�L�=�!���fDf��H�5!���00f���f�L$$A���L�|$"��D$'�T$&����M�fM���I�n����f.�1�A�I��H�H��H��A�I��H�H��A�I��H�H��H��A�I��H�H��A�I��H�Ic�H�
w%H+�H�����&H��(��H=���H�B�H��_�EH��/�H��\��H��"���H��H�$���H�CH�KH�$�H�Cf�L9���A�H�
,%I��f���A��L�H9�����H�=P �f��H�5�#H��1����D1����f�1����f�1����f�1����f�A��I��H������M�vM����H�h���f��H�5�H����L9��,���H�D$H�D$H�D$����@</��<\t|<"t`�T$�����H�
"$f�4����I�I9����������������fDH�=6�L��H�5�"H��1��k��A�L�=
�F���fDA�L�=��.���fDE���g���A�L�=��
���D�H�5�H�����/����E��������H�5�H���������fDH�B�H����H�
�"Hc�H�>��H�5DH����������H�5*H���������H�5H���l������H�5�H���L��g�����H�5�H���,��G����H������H����L��H��H��H�$H��
f��(����H�$��f��f��$��L��H�������I������H�YF H�
 �H�'H�81����I�.�� ��������H�!F H�
��H��H�81��L��H�D$H�(�� ��������H�=�����H�5� H��1�������1�������ATUS��xdI��uW�H�=�F ���H�5�@ H��H�����H��H����H�SrH�sqL��H��H������[H��]A\�_���H�6��t��1�����@��AWAVAUI��ATI��H�5W@ USH��(dH�%(H�D$1��<��H�
�L��H�H���>��H��H����H�=�E ���H��H�����H�������H�=WE ���H��H�����H�������H�=,E �o��H��H���d��H������@H�=�D �L��H��H���A��H�������H�=�D �)��H��H�����H�������H�=�D L�d$���L��H��H�EhdH�5OD I��H�D$�Z��H������H�=D ����L��H��H�ExH�5D I��H�D$���H�������H�=�C ���L��H��H�5�C I��H�D$����H�������H�=�C �L��H��H���A��H�=�C H������Ep�+��H��H��� ��H�=YC H������Eq�
��H��H�����H�����L���ErH�L$dH3%(��H��([]A\A]A^A_��L��H�����H�������H�Eh����@L��H�����H�������H�Ex���@L��H���m��H������	��������H�H�������H�������H�
pH�d�L�����H���\���D�����H�H�Eh�6���@��h��H�H�Ex�]���@��pH�ǾH�D$���H�D$L�0fDA�� �kL�pL�`M�~M����L��L����L�uH�E���fD��(H�ǾH�D$�6��H�D$L�0fDA�� �{L�pL�`M�~M����L��L���K�L�uH�E���fD���H�ǾH�D$����H�D$L�0fDA�� �+L�pL�`M�~M���^L��L�����L�u(H�E �^���fD���H�ǾH�D$�f��H�D$L�0fDA�� ��L�pL�`M�~M���&L��L���{�L�uHH�E@����fDI��L�`A��M�~�����8H�ǾH�D$����H�D$L�0fDA�� twL�pL�`M�~M����L��L����L�u8H�E0���f�I��L�`A��M�~���I��L�`A��M�~����I��L�`A��M�~�%���I��L�`A��M�~�fDL�0L���H���}�������L�0L���H����������L�0L���H���
����(����L�0L���H���U����p����L�0L���H������������H��> H�
��H��H�81�����	����H��> H�
r�H�H�81������A����H��> H�
B�H�OH�81�����y����H�Q> H�
�H�H�81��|������H�!> H�
��H��H�81��L���������f���ATI��UH��H�59 S��H�����H�@hdHǀ���xuL��[]A\�H�u��t�1����9��H��t�L���[���L��[]A\�AUI��ATI��UH��SH��H��(dH�%(H�D$1���tuH���+H���A�������H��< H��< H�H9uef�H��H��L��L���_�H�D$dH3%(��H��([]A\A]�H�������H���u���H��< H�H�q< H9t�H��< H9�$H�M< H9�TH���jH���!H������ubH��uuH�����tlH���H��
u`H��L�������I����H�C�w����H�< H��a����H��; H��Q����H��L��H�������DH��; H9�xH�5�< H���i�����H�5�< H�L$�H��L�l$�#����SH�ǾH�D$�Y��H�D$H��L���9�����@H��H��L��L���o�k���f.��H�5L������H����H�UrH�uqH��L�����)�����H�5�L���l�������H��: H��1�����H�5�L���<�������H�5�; 1�1�H���-�����H�ǾH�D$�c��H�D$H�UrH�uqH��L�������fDH��: H�����H�upH��L������]���@H����������H���H�����������H������o���H���H���_����q�������f.�AWAVAUI��H��ATUH��SH��XH�B@L�zH�T$H�D$8H�BHH�t$ H�D$@H�H�RhH�D$H�APH�xH�@H�|$HH�yxH�D$H�wH�|$0H�t$(H�qxH��t	H9����H�����H�EH�U�[H�EH�|$8tH�|$@�}�D$01�D�`�QDH����H9�}RH�|$t���H�|$��H��L��H�����H�T$H�t$ H��H���t���I�E�� u�I�EH9�|�H�D$H�T$0H�|$8H�PxtOH�|$@��L�l$M��t9H�D$0H��~/A��1��
D��A9�tM��t�L��L��H�������A9�u�H������H�EH�U�]H�EH��X[]A\A]A^A_�H�|$(�,���E1���A��E9�����M��t�H�t$L��H���v����@H�T$H�t$HH���^������H�T$@H�t$8H���G��L�l$M���#����W���H�T$@H�t$8H���"���l���H���e��H�D$H�=�8 H�5HH�PxH�T$H��H�Px1�����f.���AUATUSH����xfI��uY�H�=]8 �x��H�5�2 H��H�����H��I������L��L��H��H��H���'���H��H��[]A\A]�%��DH�6��t��1����ff.��ATI��USH�����H��H�52 H�����H��L��H��H���>���[H��]A\����f���USH��H�����H��H�5�1 H������H��H��[]�f���AT1�U��H��1�SH��H�557 ������x\I��uO�A��uI�����t
I�$��H��t
�L������H�="7 H���:��[L��]H��A\����H���t��1������f���AWAVI��AUATUSH��H��HL�zH�BH�t$ H�*I�w`I�XH�D$I�I�O0M�_8M�gH�WM�oxH�D$H�FH�D$(H�FH�D$�C��~	H���-H��t	M����H�|$tKM��~FE��H�\$0E1�L��E����A��E9�tH��t�H�t$H��H��A�����E9�u�H�\$0L�����I������kM����H��4 H�H�
�4 H;t5H�
�4 H9��H�5�5 1�L��1��1��H��I�ƃ�H�����L���b��f�H�t$L��L��H���
���H�|$�H�L$ H�t$L��H������CH��H1�[]A\A]A^A_��I���6I���<A���
A���GH��3 H�H�5�3 H9�V���H�
4 H9�*���L�����H�����H��I�ƃ�H���-���I������ ���I���H����������f.�L��H��H������.���DH�
A3 I�VH9�����I���H�����������H�T$H�t$(H����������H�wH��L�\$8H�L$0���L�\$8H�L$0���H�3 H����f�H��2 H������H��2 H�
�2 H�H;�����2���H��2 H�5�2 H�H9�����
���f���S�H��dH�%(H�D$1�轾��H�=�	�!���H�=+	���H�5�	H��H��3 ���H�5�	H�����H�=^	H�Z3 �m���H�=�	H�3 �Z���H�=3 H�3 �G���H�=�2 �;���H��1 H�=3 H�5�H����H�5G��H��H��2 ���H�=�2 �H����H�5'	�9���H�=�2 �����H���H�5	���H�=�2 �H����H�5��ۿ��H�=�2 1�H�[��H�5�迿��H�=h2 �H�l�H�5�蠿��H�=I2 1�H����H�5�脿��H�=-2 �H�q��H�5��e���H�=2 1�H�e��H�5��I���H�=�1 �H���H�5��*���H�=�1 1�H����H�5y����H�=�1 �H�;��H�5d���H�=�1 1�H�o��H�5S�Ӿ��H�=|1 �H�`��H�5=贾��H�=]1 1�H����H�5+蘾��H�=A1 �H�%��H�5�y���H�="1 1�H�i��H�5	�]���H�=1 1�H�M��H�5��A���H�=�0 �H����H�5��"���H�=�0 1�H����H�5�����H�=�0 1�H�f��H�5����H�=�0 1�H���H�5��ν��H�=w0 1�H����H�5�貽��H�=[0 �H����H�5�蓽��H�=<0 1�H�c��H�5��w���H�= 0 �H�D��H�5w�X���H�=0 �H���H�5o�9���H�=�/ H�\H�5_����H�=�/ 1�H����H�5�����H�=�/ H��H�5��ټ��H�=�/ �H����H�5�ʼ��H�=s/ �H����H�5�諼��H�=T/ �H�����H�5�茼��H�==/ H�5��i���H�5�H��H�/ �S��������H�����H�5�H���H���H�=�. H�5�%��������H����H�5�H������H�=�. H�5}��������H�+���H�5]H�����H�=�. H�5U�ɼ�������H�=��H�5/H��辻��H�=_. H�5/蛼�������H�_��H�5H��萻��H�=1. H�5�m����H��H�5�H��H�. �{���H�=�- �����H�H�H�5��<���H�=�- �����H�I��H�5�����H�=�- 1�H�-��H�5�����H�=�- H�5��޻���H�b��H�5�H��H�i- �̺��H�=m- H�5�詻�������H����H�5H��螺��H�=?- H�5a�{��������H�?��H�5�H���p���H�=- H�5>�M��������H����H�5�H���B���H�= �F���H�=�H��, �3���H�=H��, � ���H�=8H�r, �
���H�=4H�W, ���H�=.H�<, ���H�=6H�!, �Ը��H�=8H�, ���H�=8H��+ 许��H�=>H��+ 蛸��H�=rH�]+ 舸��H�=iH��+ �u���H�=UH��+ �b���H�=OH�4+ �O���H�==H�+ �<���H�=(H�F+ �)���H�=H�++ ����H�=H�+ ����H�=H��* ��H�=H��* �ݷ��H�=��ѷ��H�=�H��* 辷��H�=�H��* 諷��H�=�蟷��H�=�蓷���H�=���H�=�H�$�r���H�=�H���#���H��H��H���`���H�=�H��* �=���H�=��1���H�D$dH3%(uH��[�薶����H��H���C*@instance_variables0123456789abcdef%u: %li not allowed in JSONnesting of %ld is too deepnullfalsetrueunallocated JSON::State%s
\n\r\t\f\b\\\"\/JSON::GeneratorErrorto_hashHashto_hjson/commonExtGeneratorJSON::NestingErrorfrom_stateinitializeinitialize_copyindentindent=spacespace=space_beforespace_before=object_nlobject_nl=array_nlarray_nl=max_nestingmax_nesting=escape_slashescape_slash?escape_slash=check_circular?allow_nan?ascii_only?depthdepth=buffer_initial_lengthbuffer_initial_length=configuremerge[][]=generateGeneratorMethodsObjectto_jsonArrayIntegerFloatStringincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassto_snewallow_nanascii_onlyunpackcreate_idextendkey?__send__respond_to?matchkeysduputf-8findEncodingencodingencodeJSON/Generator/StateRSTRING_PTR is returning NULL!! SIGSEGV is highly expected to follow immediately. If you could reproduce, attach your debugger here, and look at the passed string.partial character in source, but hit endsource sequence is illegal/malformed utf-8source sequence is illegal/malformed utf8�������������������������������������������5��p��P��0123456789�0� � �� �� ���������������;TIX���p8��������	(����	H����	h���������h���������X������������$��<���TH���lx���������ط��������x��������8���<x���d����xh����x����H���$����P���dH���������Ƚ�������H�������P���|X��������������$h��P8��������������(��T����8�������8���x��	���L	���	X���	���
���0
���T
���
x���
���D8�������x��0���`8����
(�X
���
8��
x���88�hh�zRx�$���FJw�?:*3$"D�����\��p���������TH F
A�\���%HW�t���"HT�����&HW�����&HW����'HXԳ��&E�`4��&HWL���"HTd���A�U�����E�v�����/A�m,������B�D�D �V
ABE$��;A�A�G lDA���0$����F�A�D �D0�
 DABA@X����F�I�B �A(�A0�JP�
0A(A BBBD0������F�E�A �J0t
 AABB(�����E�D�M0q
AAG���������6H]
KD0����9H]
KDPܷ��9H]
KDp����9H]
KD����9H\
LDH�<���1F�B�B �E(�A0�A8�D`�
8A0A(B BBBC(�0���1B�G�D �`AB8(D����B�H�A ��
ABHM
ABHd����K xԼ���K�K0�
AD0�����EA�D�G0T
AAFZAA(������A�D�D@V
AAG0�����B�D�G �G0N
 GABE,0����tF�A�A �J
DBH`����#A�Z0|����E�A�D K
DAFjDAL�|����B�B�B �B(�D0�D8�G�#
8A0A(B BBBD8����F�B�A �A(�D0O
(D ABBJ< ���tE�L
O\����tE�L
O|��tE�L
O(�@��>F�D�O WAAF��,�T��XF�D�A �1
ABA����3E�N YFzRx� � x��� Ht��1E�N YDTd��� |���;E�N aF�P��� (����^E�D�I0d
IAH �����E�G �
AHL\��QF�B�B �A(�K0�e
(F BBBIQ
(A BBBHLPl��QF�B�B �A(�K0�e
(F BBBIQ
(A BBBHL�|��YF�B�B �A(�K0�n
(F BBBHQ
(A BBBHL����YF�B�B �A(�K0�n
(F BBBHQ
(A BBBHL@	���QF�B�B �A(�K0�l
(F BBBBO
(A BBBJH�	����B�B�E �E(�I0�A8�Gp'
8A0A(B BBBH,�	@��|F�A�A �N
DBLH
���>F�B�B �E(�K0�A8�D`'
8A0A(B BBBH zRx�`������(����`4�
L��mF�D�K �g
ABAiAB8�
���vB�E�D �D(�GP�
(A ABBAL���vB�B�B �H(�A0�D8�D��
8A0A(B BBBA8T����F�B�A �A(�D0O
(D ABBJ(�L��>B�D�A �lDB$�`��.E�A�G [DA,�h���F�C�H �V
DEHL���.F�B�E �B(�A0�A8�G�t
8C0A(B BBBH d��
	E�I �
AAGNU�0!� � �i�$ "�����
,f� �� ���o`0
�
x� �8(	���o���o����o�o6���oh�  0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p�������GA$3a1�9fGA$3p1113�*fGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY@!*fGA+GLIBCXX_ASSERTIONSgenerator.so-3.0.7-167.el8.x86_64.debug=&���7zXZ�ִF!t/��WS]?�E�h=��ڊ�2N�<�� ��D/~�ة�� A���J���g��' �x��y��?�(����6���FL�‹��3d��
;c�uHF��R��yo�;��&�\B췔Ыgv�1(�����	Jq��[�K~�e���RG\=
c>_��������]Lj>JB+DR��6 W_5�DRY|m$z�Vv��+۔�@���'Y��J]u�8�P�_煖�>͛v
���u�F)+��V�*'���L��)�A2lv��|Xz���ֺlQ�U��Vmo�DS�5�m��}ʑ��I˼d앬�_&r�vO[A��Q��jz��WNi;��l��ja�^7��ݰz���a(�^��2FH��\�۝{��7"�Y�zJ��aX�-�}�U�x�������x�_�~�"f��V��$@'��3^@|TY�u%B�̼Y9��]��d���#Wߒ�(`��Q��P]V�?��R��/�%�
�������MPR;Y����	��m�k�â���F�uW��_`�H�nKt7ٻX嵈rR��Z3����k�*0�i��<�=��rA:�_�/�p�⹤�A�E�"b늪�}���^:����@��qf�aqyhLO~�:�6���s.�T��������!����.c)v�`^��|�\(�+��&�B�-�M����KY�X~ܕآ6ʀ|�1��u!���\jf`��p%S�\F����ީZ%�?DOׄfG]ƛ�%����ʙX\�e~���,�3�A���{ߔ��k�D�T|���ᗺ��Qk�<���!��lG,�L��~H�3��z�t7���<#��3{0(Rjj|d��}���y��b�2�뺕�,�G�kl[�8�7�{�S�M�X����$p��OPn6[0%�V��G;����>8�<Z�$%�k�l9�|9�yAВȍQ[/�s��Gԧ;��t�:����0##��/�&�`���Y���4l4�Q	��+���Z�]��"뮘��殃#������`,��h9�m͌�/��4Z�tXHN|���Åʒ8w>�: � 8+3����d(�"LEˢ�A۬ۼ�hk`��E��n�v�u"_\����/�i���
"X|ֺ��QpPM��ls�x�Ho�.�N��±�D��^`�������­ff��6��[-��; ���D�j|��Fl4��Ͽ����?iB�~��w�����qg��=��L#j��OaB�3�h�l�e�vCy.�@�C}*����m�!���b���V�T����l�g��F�)U�p�E��@A~>#l�f󬤙kcU4��`�h�kT�߻b*�ulEz�l��*�Sd��,�U�t��QDJ�1%��Vo�>0�wL��|�3���o$1�C��j��*m/���'�h��:t6h������+�^~�1�oq�.'(��%pxC-[9/���V�`��W�v���ai�Yp�����k9�\:୳�4�YM��:�?��$��w��q�+��e�+�C(J���W,v�����M��0�8sj��S
H>��$(�
A�v�t_�ZK�؇5ЧI7N��Բ�'��h�����q��4�L5!��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``4(���00
0
8���o66�E���o��PT((^B88�h��c�n���w��jF},f,f
�@f@fx ��l�lT�oo���{�{ �� ���� ���� �h �h� h��x� x���� ����`��H@�,l���"PK�#[(ruby/io-console-0.5.7/gem.build_completenu�[���PK�#[�a��0p0p#ruby/io-console-0.5.7/io/console.sonuȯ��ELF>`"@0i@8	@WW �Z�Z �Z H� ([([ ([ 888$$�V�V�V  S�td�V�V�V  P�td8K8K8K��Q�tdR�td�Z�Z �Z HPGNU����Tz����k����JT�H!@TVXBE���|�qX/D�o����{�>��� 9�p0�����p�S��6:Hf����U$h�� U_.�����H������"�"h�c�y,����Q�f�, �TF"r;�|��` �X` �` ��Bpv0G�__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizerb_check_typeddatacfmakerawrb_data_typed_object_zallocrb_funcallvrb_default_rsrb_io_write__errno_locationtcsetattrrb_num2uintrb_sprintfrb_io_taint_checkrb_io_check_closedrb_sys_fail_str__stack_chk_failtcgetattrtcflushrb_string_value_cstrrb_io_get_write_iorb_ensurerb_stdinrb_stderrrb_error_arityrb_str_new_staticrb_str_catfrb_io_flushrb_convert_typerb_eArgErrorrb_raiserb_cIOrb_cFilerb_const_definedrb_cloexec_openrb_update_max_fdrb_class_new_instancerb_obj_freezerb_const_setrb_check_typerb_const_getrb_const_removerb_id2symrb_io_closerb_check_idstrlenrb_io_getbyterb_ary_newrb_ary_pushrb_str_newrb_str_new_cstrioctlrb_assoc_newrb_fix2intrb_num2intrb_Arrayrb_ary_detransientrb_protectrb_syserr_failrb_jump_tagrb_io_getsrb_yieldrb_keyword_given_prb_hash_duprb_hash_arefrb_funcallv_publicrb_ary_resizerb_ary_ptr_use_startrb_ary_ptr_use_end__fprintf_chkrb_obj_classInitVM_consolerb_f_notimplementrb_define_module_underrb_cObjectrb_define_class_underrb_define_alloc_funcrb_undef_methodInit_consolerb_internrb_define_methodrb_define_singleton_methodlibruby.so.3.0libm.so.6libc.so.6_edata__bss_startGLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/alt/ruby30/lib64�ti	�ii
�ui	�Z @#�Z #�Z �Z �Z J�_ �_ 	�_ 
�_ �_  �_ (�_ *�_ 4�_ =�_ K�_ L�_ M�_ N�_ R�_ SP] X] `] h] p] x] �] �] 
�] �] �] �] �] �] �] �] �] �] �] �] �] �] ^ ^ ^ ^  ^ (^ !0^ "8^ #@^ $H^ %P^ &X^ '`^ )h^ +p^ ,x^ -�^ .�^ /�^ 0�^ 1�^ 2�^ 3�^ 5�^ 6�^ 7�^ 8�^ 9�^ :�^ ;�^ <�^ >�^ ?_ @_ A_ B_ W _ C(_ D0_ E8_ F@_ GH_ HP_ IX_ J`_ Nh_ Op_ Px_ Q��H��H�1F H��t��H����5�C �%�C ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE��������%E? D���%=? D���%5? D���%-? D���%%? D���%? D���%? D���%
? D���%? D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%�> D���%}> D���%u> D���%m> D���%e> D���%]> D���%U> D���%M> D���%E> D���%=> D���%5> D���%-> D���%%> D���%> D���%> D���%
> D���%> D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%�= D���%}= D���%u= D���%m= D���%e= D���%]= D���%U= D���%M= D���%E= D���%== D���%5= D���%-= D���%%= D���%= DH��= H�
(�H�&H�81�����%f�H�=i= H�b= H9�tH��< H��t	�����H�=9= H�52= H)�H��H��H��?H�H�tH��< H��t��fD�����=�< u+UH�=�< H��tH�=�7 ����d�����< ]������w������H�"�O{�H	�����g�����H��H�wH�� ff.�@��UH��H�517 SH��H������H�����t�HxH��H��[]�D�`�H��H��[]�f.���ATI��H�5�6 UH��S����L��H�5�6 H������o�oHK�oP S H�P0H�S0�@8�C8H��[]A\�D��UH��SH��H������C��ωCH��t.�U��x�S�U��x�S�U��t���CH�H	H��[]����H�%6 �<�k���ff.�SH�6 H��<�K���foH�P foKJfoS R H�K0H�J0�K8�J8[�ff.�����H��H�5 ; H�׉�����fD��H�5; 1�1����ff.����H�5: H�0���ff.�f�U��SH��H���
�����8u&1�H�ډ������u�H���[]�f.�H��1�[]����SH��H���0���H�="�p1�����H��H���4���H��[�ff.�@��ATI��UH��H��S���L��H�������SH�=�!�p1����H��H�����H��[]A\����UH��H�5q4 SH��H��H��XdH�%(H�D$H1��A���H���o)$�oH)L$�oP )T$ H�P0H�T$0�@8�D$8���H�XH������{H�������tH�L$HdH3%(H��uH��X[]�H�{ �?�������f.���USH��XdH�%(H�D$H1�H������H�XH���"����{H��������u&H�=�8 H���t���H�T$HdH3%(uH��X[]�H�{ �������ff.�@��SH��PdH�%(H�D$H1����H�XH������{H�������u)�D$��H��H�H�Ѓ�H�T$HdH3%(uH��P[�H�{ �E���� �����AVI��AUATUH��SH��PdH�%(H�D$H1�I���"���H�XH���&���D�cL��D��������uL�D$I�����u6��D$L��D��������t)H�T$HdH3%(H��uH��P[]A\A]A^Ã�x�D$��H�{ ����y���f���AUATUH��SH��XdH�%(H�D$H1�I���w���H�XH���{���D�cL��D���\�����uCL��D��H�"�L${�H	$�g�����tH�T$HdH3%(H��uH��X[]A\A]�H�{ ����������UH��SH�����H�XH�����{1������u
H��H��[]�H�{ ����SH��dH�%(H�D$1�H�H��tH��H��H�$�c�H�4$H���g�H�D$dH3%(uH��[��<���ff.����AUATA��USH������H��I��H������H��H9�tXA��uH��L���_���H��H��H�"���H�=��F���H��H��tH�5�5 1�1�H�����H��H��[]A\A]�@H�5 H9u�H�55 H�(됺1��t���@AUI��ATI��U��SH��H��XdH�%(H�D$H1����1���uDH�C0�oL���oK�oS H�D$0�C8H��)$H��)L$)T$ �D$8A��H�މ��n�����H�T$HdH3%(��uH��X[]A\A]����f.���S��H������H�=�1ƃ�S)�1��m���H��[H����AUATI��H�=�U��1�S��H���a�I�Ņ�t&����L����H�5d1��)ƒ�A1����t$�؉�H�5DL����1Ã�C��)�1��l�L��L���A�H��L��[]A\A]�?�ff.�@��SH�H��H�
�H����M�H��� t%H����H��u3H��H�PH�0H��[���@H�xuH�@ H��[H�PH�0���H�N3 H�5�H�81���ff.�f���AWAVAUATA��USH��8dH�%(H�D$(1�����I��H���1�H��2 H9u
H�3 H�H�5P3 H������H���_1ҾH�=�,�Lc�E���0D����H��H�t$K�D-�H�D$H�D$��H��I�����L�xL�����H�=��k�H�����A�OL��H��I�G H�5�2 ���H����H�L$(dH3%(L����H��8[]A\A]A^A_�f�H�.@�����@����H���������H�512 H����I�ŨtrH�52 H���[�H������H�=�1 �V�H9������A�������A��F���DH�=�1 �$�A�������H9���������H�����t�H���H���v���I�EH���i����x��_���H�����H�=i1 ���A��uVH9�uQL��A���H�5L1 H��������H���������H�E��H�����������DI�H�|$H�D$���H��t!A��I��L��L��D��H����I���A���H��0 �ރ�1��������AVAUATUSH��H��dH�%(H�D$1�H����H��D�n@����H�����tyH���H��umH���e�L�`L���i�M�t$XH��M���H���A�|$H��H����H���u`A�D$��u$H�����H��H���l�H���u9fD�H�L$dH3%(�H��[]A\A]A^�f.�E1�H����H��7u�H����H=�u��
�1�I��DH���x�H��t+H���J���;tE�PЃ�	w-�T�H�ߍlP��M�H��u�H��L�����\����E��t#A9�uE1�롐Hc�L��H�t-1��^��@Hc�L��D$H�t-�D�H�|$�����k�L��H�����L�����������ff.���ATUH��S��H�XH�����H�{XH��u�{�����u"H��[]A\�f���L�`L����A�|$��H�{ �_�ff.�@��ATUH��S�P�H�XH���T�H�{XH��u+�{�H�5��H��x*H��[]A\�f.���L�`L����A�|$�H�{ ���ff.�@��USH��dH�%(H�D$1���H�XH�����H�{XH��uL�{1�H��T�����uQ�D$H�t�$H�|���H�L$dH3%(u$H��[]���[�H�hH���_��}���H�{ �,�ff.����AUATUH��SH����H�XH����H�{XD�cH��u!�D������uOH��H��[]A\A]�f����L�hL�����E�mA���t�E9�t�1�D�������u�D������t�H�{ �����SH��H����t �{���t
��H���]���H��[�������f���SH��H����t �;���t��H�������H��[�fD����f���SH��H����t����uH��[�f��k���t��H��1����H��[�fD��SH��H����t����uH��[�f��+���t��H��1����H��[�fD��USH����w^H��uH��H��H����H�57+ 1�1�H����H��H��tH�5+ 1�1�H����H��* H��H�0�
�H��H��[]ú1�������SH��H����t����uH��[�f��k���t��H��1�����H��[�@��SH��H����t����uH��[�f��+���t��H��1������H��[�@��AWAVAUI��ATUSH��H��(dH�%(H�D$1��c�L�`L���g�H�����H��H��� ttH��H����H���v��MI�|$XH�KA�A�H�SH����H�T$H�$���H�XH�����[H�T$H�$�[�H�kH��t
H������H�[ H�H�SA�A�H��uL�{L�sI�|$XH��u�A�\$H�D$1�H��tH��H�$� �H�$f�D$1�H��tH����f�D$1�I��tL�����f�D$1�I��tL�����f�D$H�T$1��T���U���ubH�t$dH34%(L��uYH��([]A\A]A^A_��H���0�H� ����H���
���H�3( H��H�5�H�81���I�|$ ���`�AWAVAUATM��UH��SH��H��H�t$H�T$dH�%(H��$�1��D$,�����L�L�xL���P�E�wA�����I�XE���D$H�����D$,����H��E1���H�XH����A���tD9k��E���	�|$,���MH��$�dH3%(H���%H�ĸ[]A\A]A^A_ÐH�t$0L��H��D���������D$,E��E�w�D$I�XH��tE���]�E��L�xL���^�E�wA����&���E9�����H�t$lL��H��D���t���LH�t$H�|$H�T$,�D$,A����H��H�����H�XH�����A������f�H�{XH����{D9�����H�t$l������������D$,������D$f��|$1���D���t���fDH�t$H�|$H�T$,E1��9�H��H���N�H�XH���R�A����_���D9k�L���H�t$0D���Q����7����$��D$,������D$E���m����(������A�����E�w��D$�h���fD���A�������D$���f.���H�XH�����{D9�����������Y�f���H�5�$ E1�H�
��H��������H�5�$ E1�H�
k�H�������H�5�$ E1�H�
+�H�����H��tzATI��U��SH��@��uX@��t"H�{$ H��L��H�5�H�81����@H�����t�H���H��
u�H���C�H�‰�9�r�[]A\�D��H����fD1��ff.�f���SH��H��H����T���H�=���1����H��H���9�H��[�@��S�H�����H�ߺ����H��[����SH�0H��H������H�=$��1��t�H��H�����H��[�@AVAUATU��SH��dH�%(H�D$1���.��1�H�T$dH3%(��H��[]A\A]A^�DHc�A��H��L�d�����uD9�~�D��1����(��L�����I��D9��H��t�H�=(# ��L��H��� �H�=	# I���q�L��H����H�=�" I���W�L��H�����H�H���C1�I��tL��A��������H��I��t/L��H���*H�$���H�Ǩtb���CH��H������H��u�CH�������H��tH��! H��H�5jH�81��@��CH���������f����U�������1���������AT1��USH��1�H��0dH�%(H�D$(1�H�L$���H�T$H��H�\$I��H��H�
��H�D$H�5��H��H�D$ �����uH��H�����u,@�H�t$(dH34%(H���!H��0[]A\�H�H�ƒ�H��u�� ��H�{u�H�S H�B�u�H�����t�H�H�΃�H��u��� ��H����H��u�H���8R�s���L�"�H��H�j��L�����H��I�����A��H��Mc�H���:��K�T$H�߃�H�Hc����H�����H�T-H��H�P��������fDH5�H�S���6������fDH�x����H�@H���L����c����ff.���AVAUATI��1�USH��`dH�%(H�D$X1�H�L$H�\$�,���L��I����H�hH����D�mH��D�������u:L��H�����H��D������t H�T$XdH3%(L��uH��`[]A\A]A^�H�} ���j��f.���SH��1�H�� dH�%(H�D$1�H�L$���H�5� H��H��I��H�
Q����H�T$dH3%(uH�� [�������SH��1�H�� dH�%(H�D$1�H�L$�(���H��H�
��H��I��H�5���\���H�T$dH3%(uH�� [�������ATI��H�5P UH��S��H��H��`dH�%(H�D$X1����H�L$��L���oH�\$)D$�oH)L$ �oP )T$0H�P0H�T$@�@81҉D$H�z���H��H���O�H���g��H��H����H�L$XdH3%(u	H��`[]A\�����ff.���AUI��H�5� ATA��H��USH��H��(dH�%(H�D$1��Z��1�H�L$L��D��H�����H��H����H�T$dH3%(uH��(H��[]A\A]��g�����U�����H���H�5�SH��H�� H�;����H�;�����H����H�5�����H�;1�H�����H�5p���H�;1�H���H�5_���H�;�����H����H�5L���H�;�H���H�57�s��H�;1�H��H�5%�[��H�;1�H��H�5�C��H�;�H���H�5�(��H�;1�H�,���H�5����H�;1�H���H�5����H�;�H���H�5�����H�;1�H�A�H�5�����H�;1�H�Y�H�5����H�;1�H���H�5����H�;1�H���H�5��}��H�;�H���H�5y�b��H�;1�H�����H�5f�J��H�;�H�k�H�5R�/��H�;�H���H�5?���H�;�H���H�5.���H�;�H���H�5����H�;�H�/�H�5����H�;�H���H�5���H�;�H���H�5����H�;�H�^���H�5��r��H�;�H�C�H�5��W��H�;�H�h�H�5��<��H�;1�H�P���H�5��$��H�-� H�;�H�5�H�����H�;H��1�H�5�����H�;�����H���H�5�����H�;�����H���H�5�����H�;H�5����������H����H�5SH��H����������H��H�`�H�5=�t��H� H�;H�5HH����H�5$��H��H�r �5��H�=f H�5(�B��H�=S �H�/��H�5���H�=4 �H����H�5�����H�= �����H�A���H�5����H�=� H�������[H�]���H�5W]�����H��H�=����H�=�H�� ���H�=�H�� ���H�=;H�� ���H�=yH�� �p��H�=lH�� �]��H�=]H�� �J��H�=OH�l �7��H�=AH�Q �$��H�- H�������H��H���[%dG[%d;%dH[%d%cto_aryArrayexpected 2D coordinate/dev/ttywrong %s mode: %liscreen erase[%dJline erase[%dK%s
rawraw!cookedcooked!getchecho=echo?console_modeconsole_mode=noechowinsizewinsize=iflushioflushbeepgotocursorcursor=cursor_upcursor_downcursor_leftcursor_rightgoto_columnerase_lineerase_screenscroll_forwardscroll_backwardclear_screenpressed?check_winsize_changedgetpassconsolegeneric_readableConsoleModeinitializeinitialize_copygetcgetschomp!closemintimeintr__send__console-modewrong number of arguments (given %ld, expected 2 or 4)true or false expected as intr: %liRSTRING_PTR is returning NULL!! SIGSEGV is highly expected to follow immediately. If you could reproduce, attach your debugger here, and look at the passed string.;�<X�����0(��X
��H8��\H��ph����������x����� ���<��P(��dH��x��������(������ X��L���px������X�����@h��|��8����h�0X�|H�����8���D��������H������$H�D��d��������	��$	��8	��l	��	��	8�	�
��l
�����
���
H����
���,����h�����zRx�$H��pFJw�?:*3$"D���`\���p���	����0����FE�K�G V
DAFHDA(����[F�K�D �BAB$�,��XE�D�G EAA d��4p��BA�@P���d���x���0����IA�C�G c
FAKDCA����1E�k(���HF�D�G �sAB(,���E�K�Jp{
AAA(4���qE�A�DpV
AAA `��pE�D`W
AA@�P���F�E�B �A(�D0�D�q
0A(A BBBA8�����F�B�A �D(�D�s
(A ABBA( ��?E�D�D c
DAA 04��TA�D H
AA8Tp���F�B�D �A(�D0i
(D ABBE8�����B�E�D �C(�G�u
(A ABBA�H��/C�d4�\���B�B�K �E(�F0i(D ABB  ����E�B
IO
LHD0���F�B�B �B(�D0�A8�Dp
8A0A(B BBBJ@�����F�B�B �A(�A0�G@�
0A(A BBBK(����aF�A�D �o
ABC(���qF�A�D �w
ABK(,��E�A�D0l
AAH8X���F�B�A �D(�D0s
(D ABBC��7E�b
I�$�7E�d
G�H�:E�X
CY�h�:E�X
CY(��yE�A�D ]
DAA8��<E�X
C[X��<E�X
C[Hx�F�B�B �E(�A0�A8�G`�
8A0A(B BBBHH���B�B�B �B(�D0�D8�J��
8A0A(B BBBB��$��8��0L���H�D�C �X
ABFP�����<E�v�8�)E�c�L�<E�v@�p��B�B�B �A(�C0�D@t
0A(A BBBF0���F�H�A �IP�
 AABDzRx�P���$���.@�d��F�B�B �F(�A0�D�z
0A(A BBBA ���_E�I0J
AA ��_E�I0J
AA0	H��F�K�D �I��
 AABA8@	��yF�L�G �A(�GPI
(D ABBA(|	�pE�T�D 9FO�	\�H�GNU�@##�Z J��������!���h
�G�Z �Z ���o`�
�
'8] ���	���o���o����o�o���o([ ������ 0@P`p�������� 0@P`p�������� 0@P`p�������� 0@P`p��������GA$3a1h�GGA$3p1113`"�GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFYP#�GGA+GLIBCXX_ASSERTIONSconsole.so-3.0.7-167.el8.x86_64.debugW�i��7zXZ�ִF!t/���`]?�E�h=��ڊ�2N��c|��]϶�5�ܹE��&-��p2A#
�oil�՚�ђ�M��+o�tx9Ҏ
q�$���F�û�%�=��r=��?sԜW��+H����4n<���8e��%X�Ɏ��ѣ��vY��GV��hF3��^��1�uc�f�89���ĉ!��RCUL�:�(�/!L@�d?�G���iRL�a�e�3�C�1����
gӋ�;&�DbI�/�w�LLD$�Z�֫�uĥ�8o�K��1��%�;/����z���4}pDfc̀|�	��=8��$%"�a���@��R�—�.x�*��.�Zc�!�H<g�N@�y�:+(ǯ��X�t��z�k�cV�X#��cETo�Ǥ9$�t�8Fn���y Na�im��"�9��{��5J�?��K_��F��\�����嬾3c�
eZ�OS��1hٝ�*�܏�ŀ[U{%�B�A������/���2�(�u7�,1cs�?�j1<��r�� �)`��9�Oe����k5��f�Y�DD{�#�K�=��
A�ے�	����em}e9Y9ZN��JxlM#b����<ȍ`�#E��;�<��b��I<AӨ?߱�|����eѝ�F"�*��|���T���?��<Łb
�.>
j+Y�7T'
{�c���cܦ
���[[��_]�wkC�t�Z�Q�![.�f0������;؉�˜�/^x��t�3��u��ځ�yƧ8�1f^�B��;��C��w_׀Zv�gހ�B�]�6��R��P_��~�?o���o=)
��/�ET��$zs��j&��]����%D`�[�h�v0��򗮛�&��?��N��9ױ�;��;*8��Ds+�nS`�P�/�uʮ���A�+�M�}*O6s3``�ș�n���yY&
Vd�mF��$���0ۼk�8��G�i�R�l�8�Ģ��$i"/�X{+�}�d�(���T�؍l��wN-{�ڨ�.�:L%�*��ã��O�ϣ�X-��gi���[�!���iV=����e���"�`X�iT����#3���g��O�ݲ������2�z�.V�ղ�Qb�(Y����Z);y��~אod��b����s8��@������1����\��Bs����T�ș4�H%)��w�>�@�����Ys�����mw��)�,���T:Ɓ.��/�<F}S�t/����*DTB���	��]�3_u��jOl�YyW��T�[��^�C���چ़�!�j�]�ˮ^��wMOU�OҸ+��t��*�����$�y��u��8
�'�W��k�tF-"��
�-G�S��g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``8(��X0�
�
'8���o�E���o��@T�^B���hhhc��pn`w`"`"�%}�G�G
�HH7�8K8K��(M(M�	��V�V ��Z �Z��Z �Z��Z �Zh �([ ([�8] 8]��` �_X�X``�_H@b,lb�h"PK"#[�k��#specifications/rdoc-6.4.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rdoc 6.4.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "rdoc".freeze
  s.version = "6.4.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 2.2".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Eric Hodel".freeze, "Dave Thomas".freeze, "Phil Hagelberg".freeze, "Tony Strauss".freeze, "Zachary Scott".freeze, "Hiroshi SHIBATA".freeze, "ITOYANAGI Sakura".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "RDoc produces HTML and command-line documentation for Ruby projects.\nRDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentation from the command-line.\n".freeze
  s.email = ["drbrain@segment7.net".freeze, "".freeze, "".freeze, "".freeze, "mail@zzak.io".freeze, "hsbt@ruby-lang.org".freeze, "aycabta@gmail.com".freeze]
  s.executables = ["rdoc".freeze, "ri".freeze]
  s.extra_rdoc_files = ["CVE-2013-0256.rdoc".freeze, "CONTRIBUTING.rdoc".freeze, "ExampleMarkdown.md".freeze, "ExampleRDoc.rdoc".freeze, "History.rdoc".freeze, "LEGAL.rdoc".freeze, "LICENSE.rdoc".freeze, "README.rdoc".freeze, "RI.rdoc".freeze, "TODO.rdoc".freeze]
  s.files = ["CONTRIBUTING.rdoc".freeze, "CVE-2013-0256.rdoc".freeze, "ExampleMarkdown.md".freeze, "ExampleRDoc.rdoc".freeze, "History.rdoc".freeze, "LEGAL.rdoc".freeze, "LICENSE.rdoc".freeze, "README.rdoc".freeze, "RI.rdoc".freeze, "TODO.rdoc".freeze, "exe/rdoc".freeze, "exe/ri".freeze, "lib/rdoc.rb".freeze, "lib/rdoc/alias.rb".freeze, "lib/rdoc/anon_class.rb".freeze, "lib/rdoc/any_method.rb".freeze, "lib/rdoc/attr.rb".freeze, "lib/rdoc/class_module.rb".freeze, "lib/rdoc/code_object.rb".freeze, "lib/rdoc/code_objects.rb".freeze, "lib/rdoc/comment.rb".freeze, "lib/rdoc/constant.rb".freeze, "lib/rdoc/context.rb".freeze, "lib/rdoc/context/section.rb".freeze, "lib/rdoc/cross_reference.rb".freeze, "lib/rdoc/encoding.rb".freeze, "lib/rdoc/erb_partial.rb".freeze, "lib/rdoc/erbio.rb".freeze, "lib/rdoc/extend.rb".freeze, "lib/rdoc/generator.rb".freeze, "lib/rdoc/generator/darkfish.rb".freeze, "lib/rdoc/generator/json_index.rb".freeze, "lib/rdoc/generator/markup.rb".freeze, "lib/rdoc/generator/pot.rb".freeze, "lib/rdoc/generator/pot/message_extractor.rb".freeze, "lib/rdoc/generator/pot/po.rb".freeze, "lib/rdoc/generator/pot/po_entry.rb".freeze, "lib/rdoc/generator/ri.rb".freeze, "lib/rdoc/ghost_method.rb".freeze, "lib/rdoc/i18n.rb".freeze, "lib/rdoc/i18n/locale.rb".freeze, "lib/rdoc/i18n/text.rb".freeze, "lib/rdoc/include.rb".freeze, "lib/rdoc/known_classes.rb".freeze, "lib/rdoc/markdown.rb".freeze, "lib/rdoc/markdown/entities.rb".freeze, "lib/rdoc/markdown/literals.rb".freeze, "lib/rdoc/markup.rb".freeze, "lib/rdoc/markup/attr_changer.rb".freeze, "lib/rdoc/markup/attr_span.rb".freeze, "lib/rdoc/markup/attribute_manager.rb".freeze, "lib/rdoc/markup/attributes.rb".freeze, "lib/rdoc/markup/blank_line.rb".freeze, "lib/rdoc/markup/block_quote.rb".freeze, "lib/rdoc/markup/document.rb".freeze, "lib/rdoc/markup/formatter.rb".freeze, "lib/rdoc/markup/hard_break.rb".freeze, "lib/rdoc/markup/heading.rb".freeze, "lib/rdoc/markup/include.rb".freeze, "lib/rdoc/markup/indented_paragraph.rb".freeze, "lib/rdoc/markup/list.rb".freeze, "lib/rdoc/markup/list_item.rb".freeze, "lib/rdoc/markup/paragraph.rb".freeze, "lib/rdoc/markup/parser.rb".freeze, "lib/rdoc/markup/pre_process.rb".freeze, "lib/rdoc/markup/raw.rb".freeze, "lib/rdoc/markup/regexp_handling.rb".freeze, "lib/rdoc/markup/rule.rb".freeze, "lib/rdoc/markup/table.rb".freeze, "lib/rdoc/markup/to_ansi.rb".freeze, "lib/rdoc/markup/to_bs.rb".freeze, "lib/rdoc/markup/to_html.rb".freeze, "lib/rdoc/markup/to_html_crossref.rb".freeze, "lib/rdoc/markup/to_html_snippet.rb".freeze, "lib/rdoc/markup/to_joined_paragraph.rb".freeze, "lib/rdoc/markup/to_label.rb".freeze, "lib/rdoc/markup/to_markdown.rb".freeze, "lib/rdoc/markup/to_rdoc.rb".freeze, "lib/rdoc/markup/to_table_of_contents.rb".freeze, "lib/rdoc/markup/to_test.rb".freeze, "lib/rdoc/markup/to_tt_only.rb".freeze, "lib/rdoc/markup/verbatim.rb".freeze, "lib/rdoc/meta_method.rb".freeze, "lib/rdoc/method_attr.rb".freeze, "lib/rdoc/mixin.rb".freeze, "lib/rdoc/normal_class.rb".freeze, "lib/rdoc/normal_module.rb".freeze, "lib/rdoc/options.rb".freeze, "lib/rdoc/parser.rb".freeze, "lib/rdoc/parser/c.rb".freeze, "lib/rdoc/parser/changelog.rb".freeze, "lib/rdoc/parser/markdown.rb".freeze, "lib/rdoc/parser/rd.rb".freeze, "lib/rdoc/parser/ripper_state_lex.rb".freeze, "lib/rdoc/parser/ruby.rb".freeze, "lib/rdoc/parser/ruby_tools.rb".freeze, "lib/rdoc/parser/simple.rb".freeze, "lib/rdoc/parser/text.rb".freeze, "lib/rdoc/rd.rb".freeze, "lib/rdoc/rd/block_parser.rb".freeze, "lib/rdoc/rd/inline.rb".freeze, "lib/rdoc/rd/inline_parser.rb".freeze, "lib/rdoc/rdoc.rb".freeze, "lib/rdoc/require.rb".freeze, "lib/rdoc/ri.rb".freeze, "lib/rdoc/ri/driver.rb".freeze, "lib/rdoc/ri/formatter.rb".freeze, "lib/rdoc/ri/paths.rb".freeze, "lib/rdoc/ri/store.rb".freeze, "lib/rdoc/ri/task.rb".freeze, "lib/rdoc/rubygems_hook.rb".freeze, "lib/rdoc/servlet.rb".freeze, "lib/rdoc/single_class.rb".freeze, "lib/rdoc/stats.rb".freeze, "lib/rdoc/stats/normal.rb".freeze, "lib/rdoc/stats/quiet.rb".freeze, "lib/rdoc/stats/verbose.rb".freeze, "lib/rdoc/store.rb".freeze, "lib/rdoc/task.rb".freeze, "lib/rdoc/text.rb".freeze, "lib/rdoc/token_stream.rb".freeze, "lib/rdoc/tom_doc.rb".freeze, "lib/rdoc/top_level.rb".freeze, "lib/rdoc/version.rb".freeze]
  s.homepage = "https://ruby.github.io/rdoc".freeze
  s.licenses = ["Ruby".freeze]
  s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "RDoc produces HTML and command-line documentation for Ruby projects".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<psych>.freeze, [">= 4.0.0"])
  else
    s.add_dependency(%q<psych>.freeze, [">= 4.0.0"])
  end
end
PK"#[\��B$.$.%specifications/bundler-2.3.27.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: bundler 2.3.27 ruby lib

Gem::Specification.new do |s|
  s.name = "bundler".freeze
  s.version = "2.3.27"

  s.required_rubygems_version = Gem::Requirement.new(">= 2.5.2".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/rubygems/rubygems/issues?q=is%3Aopen+is%3Aissue+label%3ABundler", "changelog_uri" => "https://github.com/rubygems/rubygems/blob/master/bundler/CHANGELOG.md", "homepage_uri" => "https://bundler.io/", "source_code_uri" => "https://github.com/rubygems/rubygems/tree/master/bundler" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Andr\u00E9 Arko".freeze, "Samuel Giddins".freeze, "Colby Swandale".freeze, "Hiroshi Shibata".freeze, "David Rodr\u00EDguez".freeze, "Grey Baker".freeze, "Stephanie Morillo".freeze, "Chris Morris".freeze, "James Wen".freeze, "Tim Moore".freeze, "Andr\u00E9 Medeiros".freeze, "Jessica Lynn Suttles".freeze, "Terence Lee".freeze, "Carl Lerche".freeze, "Yehuda Katz".freeze]
  s.bindir = "libexec".freeze
  s.date = "2025-04-28"
  s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably".freeze
  s.email = ["team@bundler.io".freeze]
  s.executables = ["bundle".freeze, "bundler".freeze]
  s.files = ["lib/bundler.rb".freeze, "lib/bundler/build_metadata.rb".freeze, "lib/bundler/capistrano.rb".freeze, "lib/bundler/cli.rb".freeze, "lib/bundler/cli/add.rb".freeze, "lib/bundler/cli/binstubs.rb".freeze, "lib/bundler/cli/cache.rb".freeze, "lib/bundler/cli/check.rb".freeze, "lib/bundler/cli/clean.rb".freeze, "lib/bundler/cli/common.rb".freeze, "lib/bundler/cli/config.rb".freeze, "lib/bundler/cli/console.rb".freeze, "lib/bundler/cli/doctor.rb".freeze, "lib/bundler/cli/exec.rb".freeze, "lib/bundler/cli/fund.rb".freeze, "lib/bundler/cli/gem.rb".freeze, "lib/bundler/cli/info.rb".freeze, "lib/bundler/cli/init.rb".freeze, "lib/bundler/cli/inject.rb".freeze, "lib/bundler/cli/install.rb".freeze, "lib/bundler/cli/issue.rb".freeze, "lib/bundler/cli/list.rb".freeze, "lib/bundler/cli/lock.rb".freeze, "lib/bundler/cli/open.rb".freeze, "lib/bundler/cli/outdated.rb".freeze, "lib/bundler/cli/platform.rb".freeze, "lib/bundler/cli/plugin.rb".freeze, "lib/bundler/cli/pristine.rb".freeze, "lib/bundler/cli/remove.rb".freeze, "lib/bundler/cli/show.rb".freeze, "lib/bundler/cli/update.rb".freeze, "lib/bundler/cli/viz.rb".freeze, "lib/bundler/compact_index_client.rb".freeze, "lib/bundler/compact_index_client/cache.rb".freeze, "lib/bundler/compact_index_client/gem_parser.rb".freeze, "lib/bundler/compact_index_client/updater.rb".freeze, "lib/bundler/constants.rb".freeze, "lib/bundler/current_ruby.rb".freeze, "lib/bundler/definition.rb".freeze, "lib/bundler/dependency.rb".freeze, "lib/bundler/deployment.rb".freeze, "lib/bundler/deprecate.rb".freeze, "lib/bundler/digest.rb".freeze, "lib/bundler/dsl.rb".freeze, "lib/bundler/endpoint_specification.rb".freeze, "lib/bundler/env.rb".freeze, "lib/bundler/environment_preserver.rb".freeze, "lib/bundler/errors.rb".freeze, "lib/bundler/feature_flag.rb".freeze, "lib/bundler/fetcher.rb".freeze, "lib/bundler/fetcher/base.rb".freeze, "lib/bundler/fetcher/compact_index.rb".freeze, "lib/bundler/fetcher/dependency.rb".freeze, "lib/bundler/fetcher/downloader.rb".freeze, "lib/bundler/fetcher/index.rb".freeze, "lib/bundler/friendly_errors.rb".freeze, "lib/bundler/gem_helper.rb".freeze, "lib/bundler/gem_helpers.rb".freeze, "lib/bundler/gem_tasks.rb".freeze, "lib/bundler/gem_version_promoter.rb".freeze, "lib/bundler/graph.rb".freeze, "lib/bundler/index.rb".freeze, "lib/bundler/injector.rb".freeze, "lib/bundler/inline.rb".freeze, "lib/bundler/installer.rb".freeze, "lib/bundler/installer/gem_installer.rb".freeze, "lib/bundler/installer/parallel_installer.rb".freeze, "lib/bundler/installer/standalone.rb".freeze, "lib/bundler/lazy_specification.rb".freeze, "lib/bundler/lockfile_generator.rb".freeze, "lib/bundler/lockfile_parser.rb".freeze, "lib/bundler/match_metadata.rb".freeze, "lib/bundler/match_platform.rb".freeze, "lib/bundler/match_remote_metadata.rb".freeze, "lib/bundler/mirror.rb".freeze, "lib/bundler/plugin.rb".freeze, "lib/bundler/plugin/api.rb".freeze, "lib/bundler/plugin/api/source.rb".freeze, "lib/bundler/plugin/dsl.rb".freeze, "lib/bundler/plugin/events.rb".freeze, "lib/bundler/plugin/index.rb".freeze, "lib/bundler/plugin/installer.rb".freeze, "lib/bundler/plugin/installer/git.rb".freeze, "lib/bundler/plugin/installer/rubygems.rb".freeze, "lib/bundler/plugin/source_list.rb".freeze, "lib/bundler/process_lock.rb".freeze, "lib/bundler/remote_specification.rb".freeze, "lib/bundler/resolver.rb".freeze, "lib/bundler/resolver/base.rb".freeze, "lib/bundler/resolver/spec_group.rb".freeze, "lib/bundler/retry.rb".freeze, "lib/bundler/ruby_dsl.rb".freeze, "lib/bundler/ruby_version.rb".freeze, "lib/bundler/rubygems_ext.rb".freeze, "lib/bundler/rubygems_gem_installer.rb".freeze, "lib/bundler/rubygems_integration.rb".freeze, "lib/bundler/runtime.rb".freeze, "lib/bundler/self_manager.rb".freeze, "lib/bundler/settings.rb".freeze, "lib/bundler/settings/validator.rb".freeze, "lib/bundler/setup.rb".freeze, "lib/bundler/shared_helpers.rb".freeze, "lib/bundler/similarity_detector.rb".freeze, "lib/bundler/source.rb".freeze, "lib/bundler/source/gemspec.rb".freeze, "lib/bundler/source/git.rb".freeze, "lib/bundler/source/git/git_proxy.rb".freeze, "lib/bundler/source/metadata.rb".freeze, "lib/bundler/source/path.rb".freeze, "lib/bundler/source/path/installer.rb".freeze, "lib/bundler/source/rubygems.rb".freeze, "lib/bundler/source/rubygems/remote.rb".freeze, "lib/bundler/source/rubygems_aggregate.rb".freeze, "lib/bundler/source_list.rb".freeze, "lib/bundler/source_map.rb".freeze, "lib/bundler/spec_set.rb".freeze, "lib/bundler/stub_specification.rb".freeze, "lib/bundler/templates/gems.rb".freeze, "lib/bundler/ui.rb".freeze, "lib/bundler/ui/rg_proxy.rb".freeze, "lib/bundler/ui/shell.rb".freeze, "lib/bundler/ui/silent.rb".freeze, "lib/bundler/uri_credentials_filter.rb".freeze, "lib/bundler/vendor/connection_pool/lib/connection_pool.rb".freeze, "lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb".freeze, "lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb".freeze, "lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb".freeze, "lib/bundler/vendor/fileutils/lib/fileutils.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/errors.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb".freeze, "lib/bundler/vendor/molinillo/lib/molinillo/state.rb".freeze, "lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb".freeze, "lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb".freeze, "lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb".freeze, "lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb".freeze, "lib/bundler/vendor/thor/lib/thor.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions/create_file.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions/create_link.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions/directory.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb".freeze, "lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb".freeze, "lib/bundler/vendor/thor/lib/thor/base.rb".freeze, "lib/bundler/vendor/thor/lib/thor/command.rb".freeze, "lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb".freeze, "lib/bundler/vendor/thor/lib/thor/error.rb".freeze, "lib/bundler/vendor/thor/lib/thor/group.rb".freeze, "lib/bundler/vendor/thor/lib/thor/invocation.rb".freeze, "lib/bundler/vendor/thor/lib/thor/line_editor.rb".freeze, "lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb".freeze, "lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb".freeze, "lib/bundler/vendor/thor/lib/thor/nested_context.rb".freeze, "lib/bundler/vendor/thor/lib/thor/parser.rb".freeze, "lib/bundler/vendor/thor/lib/thor/parser/argument.rb".freeze, "lib/bundler/vendor/thor/lib/thor/parser/arguments.rb".freeze, "lib/bundler/vendor/thor/lib/thor/parser/option.rb".freeze, "lib/bundler/vendor/thor/lib/thor/parser/options.rb".freeze, "lib/bundler/vendor/thor/lib/thor/rake_compat.rb".freeze, "lib/bundler/vendor/thor/lib/thor/runner.rb".freeze, "lib/bundler/vendor/thor/lib/thor/shell.rb".freeze, "lib/bundler/vendor/thor/lib/thor/shell/basic.rb".freeze, "lib/bundler/vendor/thor/lib/thor/shell/color.rb".freeze, "lib/bundler/vendor/thor/lib/thor/shell/html.rb".freeze, "lib/bundler/vendor/thor/lib/thor/util.rb".freeze, "lib/bundler/vendor/thor/lib/thor/version.rb".freeze, "lib/bundler/vendor/tmpdir/lib/tmpdir.rb".freeze, "lib/bundler/vendor/tsort/lib/tsort.rb".freeze, "lib/bundler/vendor/uri/lib/uri.rb".freeze, "lib/bundler/vendor/uri/lib/uri/common.rb".freeze, "lib/bundler/vendor/uri/lib/uri/file.rb".freeze, "lib/bundler/vendor/uri/lib/uri/ftp.rb".freeze, "lib/bundler/vendor/uri/lib/uri/generic.rb".freeze, "lib/bundler/vendor/uri/lib/uri/http.rb".freeze, "lib/bundler/vendor/uri/lib/uri/https.rb".freeze, "lib/bundler/vendor/uri/lib/uri/ldap.rb".freeze, "lib/bundler/vendor/uri/lib/uri/ldaps.rb".freeze, "lib/bundler/vendor/uri/lib/uri/mailto.rb".freeze, "lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb".freeze, "lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb".freeze, "lib/bundler/vendor/uri/lib/uri/version.rb".freeze, "lib/bundler/vendor/uri/lib/uri/ws.rb".freeze, "lib/bundler/vendor/uri/lib/uri/wss.rb".freeze, "lib/bundler/vendored_fileutils.rb".freeze, "lib/bundler/vendored_molinillo.rb".freeze, "lib/bundler/vendored_persistent.rb".freeze, "lib/bundler/vendored_thor.rb".freeze, "lib/bundler/vendored_tmpdir.rb".freeze, "lib/bundler/vendored_tsort.rb".freeze, "lib/bundler/vendored_uri.rb".freeze, "lib/bundler/version.rb".freeze, "lib/bundler/version_ranges.rb".freeze, "lib/bundler/vlad.rb".freeze, "lib/bundler/worker.rb".freeze, "lib/bundler/yaml_serializer.rb".freeze, "libexec/bundle".freeze, "libexec/bundler".freeze]
  s.homepage = "https://bundler.io".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "The best way to manage your application's dependencies".freeze
end
PK"#[㕸��%specifications/ruby-lsapi-5.6.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ruby-lsapi 5.6 ruby lib
# stub: ext/lsapi/extconf.rb

Gem::Specification.new do |s|
  s.name = "ruby-lsapi".freeze
  s.version = "5.6"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["LiteSpeed Technologies Inc.".freeze]
  s.date = "2024-01-22"
  s.description = "This is a ruby extension for fast communication with LiteSpeed Web Server.".freeze
  s.email = "info@litespeedtech.com".freeze
  s.extensions = ["ext/lsapi/extconf.rb".freeze]
  s.extra_rdoc_files = ["README".freeze]
  s.files = ["README".freeze, "ext/lsapi/extconf.rb".freeze]
  s.homepage = "http://www.litespeedtech.com/".freeze
  s.rubygems_version = "3.3.26".freeze
  s.summary = "A ruby extension for fast communication with LiteSpeed Web Server.".freeze

  s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version
end
PK"#[����||!specifications/rack-3.0.8.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rack 3.0.8 ruby lib

Gem::Specification.new do |s|
  s.name = "rack".freeze
  s.version = "3.0.8"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/rack/rack/issues", "changelog_uri" => "https://github.com/rack/rack/blob/main/CHANGELOG.md", "documentation_uri" => "https://rubydoc.info/github/rack/rack", "source_code_uri" => "https://github.com/rack/rack" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Leah Neukirchen".freeze]
  s.date = "2023-06-14"
  s.description = "Rack provides a minimal, modular and adaptable interface for developing\nweb applications in Ruby. By wrapping HTTP requests and responses in\nthe simplest way possible, it unifies and distills the API for web\nservers, web frameworks, and software in between (the so-called\nmiddleware) into a single method call.\n".freeze
  s.email = "leah@vuxu.org".freeze
  s.extra_rdoc_files = ["README.md".freeze, "CHANGELOG.md".freeze, "CONTRIBUTING.md".freeze]
  s.files = ["CHANGELOG.md".freeze, "CONTRIBUTING.md".freeze, "README.md".freeze]
  s.homepage = "https://github.com/rack/rack".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.3.26".freeze
  s.summary = "A modular Ruby webserver interface.".freeze

  s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<minitest>.freeze, ["~> 5.0"])
    s.add_development_dependency(%q<minitest-global_expectations>.freeze, [">= 0"])
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
  else
    s.add_dependency(%q<minitest>.freeze, ["~> 5.0"])
    s.add_dependency(%q<minitest-global_expectations>.freeze, [">= 0"])
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
  end
end
PK"#[t���QQ,specifications/default/io-wait-0.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: io-wait 0.2.1 ruby lib
# stub: ext/io/wait/extconf.rb

Gem::Specification.new do |s|
  s.name = "io-wait".freeze
  s.version = "0.2.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/io-wait", "source_code_uri" => "https://github.com/ruby/io-wait" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Waits until IO is readable or writable without blocking.".freeze
  s.email = ["nobu@ruby-lang.org".freeze]
  s.extensions = ["ext/io/wait/extconf.rb".freeze]
  s.files = ["ext/io/wait/extconf.rb".freeze, "io/wait.so".freeze]
  s.homepage = "https://github.com/ruby/io-wait".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Waits until IO is readable or writable without blocking.".freeze
end
PK"#[�V��-specifications/default/readline-0.0.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: readline 0.0.3 ruby lib

Gem::Specification.new do |s|
  s.name = "readline".freeze
  s.version = "0.0.3"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["aycabta".freeze]
  s.date = "2025-04-28"
  s.description = "This is just a loader for \"readline\". If Ruby has the \"readline-ext\" gem\nthat is a native extension, this gem will load it. If Ruby does not have\nthe \"readline-ext\" gem this gem will load \"reline\", a library that is\ncompatible with the \"readline-ext\" gem and implemented in pure Ruby.\n".freeze
  s.email = ["aycabta@gmail.com".freeze]
  s.files = ["readline.rb".freeze]
  s.homepage = "https://github.com/ruby/readline".freeze
  s.licenses = ["Ruby".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Loader for \"readline\".".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<reline>.freeze, [">= 0"])
  else
    s.add_dependency(%q<reline>.freeze, [">= 0"])
  end
end
PK"#[M`���)specifications/default/find-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: find 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "find".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/find", "source_code_uri" => "https://github.com/ruby/find" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Kazuki Tsujimoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "This module supports top-down traversal of a set of file paths.".freeze
  s.email = ["kazuki@callcc.net".freeze]
  s.files = ["find.rb".freeze]
  s.homepage = "https://github.com/ruby/find".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "This module supports top-down traversal of a set of file paths.".freeze
end
PK"#[�����*specifications/default/fcntl-1.0.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: fcntl 1.0.1 ruby lib
# stub: ext/fcntl/extconf.rb

Gem::Specification.new do |s|
  s.name = "fcntl".freeze
  s.version = "1.0.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Loads constants defined in the OS fcntl.h C header file".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/fcntl/extconf.rb".freeze]
  s.files = ["ext/fcntl/extconf.rb".freeze, "fcntl.so".freeze]
  s.homepage = "https://github.com/ruby/fcntl".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Loads constants defined in the OS fcntl.h C header file".freeze
end
PK"#[G�@���.specifications/default/benchmark-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: benchmark 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "benchmark".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/benchmark", "source_code_uri" => "https://github.com/ruby/benchmark" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "a performance benchmarking library".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/benchmark.rb".freeze, "lib/benchmark/version.rb".freeze]
  s.homepage = "https://github.com/ruby/benchmark".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "a performance benchmarking library".freeze
end
PK"#[�F�[��,specifications/default/strscan-3.0.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: strscan 3.0.1 ruby lib
# stub: ext/strscan/extconf.rb

Gem::Specification.new do |s|
  s.name = "strscan".freeze
  s.version = "3.0.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Minero Aoki".freeze, "Sutou Kouhei".freeze]
  s.date = "2025-04-28"
  s.description = "Provides lexical scanning operations on a String.".freeze
  s.email = [nil, "kou@cozmixng.org".freeze]
  s.extensions = ["ext/strscan/extconf.rb".freeze]
  s.files = ["ext/strscan/extconf.rb".freeze, "strscan.so".freeze]
  s.homepage = "https://github.com/ruby/strscan".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides lexical scanning operations on a String.".freeze
end
PK"#[U�kp��+specifications/default/pstore-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: pstore 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "pstore".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/pstore", "source_code_uri" => "https://github.com/ruby/pstore" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Transactional File Storage for Ruby Objects".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/pstore.rb".freeze]
  s.homepage = "https://github.com/ruby/pstore".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Transactional File Storage for Ruby Objects".freeze
end
PK"#[2��(specifications/default/drb-2.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: drb 2.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "drb".freeze
  s.version = "2.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/drb", "source_code_uri" => "https://github.com/ruby/drb" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Masatoshi SEKI".freeze]
  s.date = "2025-04-28"
  s.description = "Distributed object system for Ruby".freeze
  s.email = ["seki@ruby-lang.org".freeze]
  s.files = ["lib/drb.rb".freeze, "lib/drb/acl.rb".freeze, "lib/drb/drb.rb".freeze, "lib/drb/eq.rb".freeze, "lib/drb/extserv.rb".freeze, "lib/drb/extservm.rb".freeze, "lib/drb/gw.rb".freeze, "lib/drb/invokemethod.rb".freeze, "lib/drb/observer.rb".freeze, "lib/drb/ssl.rb".freeze, "lib/drb/timeridconv.rb".freeze, "lib/drb/unix.rb".freeze, "lib/drb/version.rb".freeze, "lib/drb/weakidconv.rb".freeze]
  s.homepage = "https://github.com/ruby/drb".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Distributed object system for Ruby".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<ruby2_keywords>.freeze, [">= 0"])
  else
    s.add_dependency(%q<ruby2_keywords>.freeze, [">= 0"])
  end
end
PK"#[��ק�'specifications/default/pp-0.3.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: pp 0.3.0 ruby lib

Gem::Specification.new do |s|
  s.name = "pp".freeze
  s.version = "0.3.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/pp", "source_code_uri" => "https://github.com/ruby/pp" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Provides a PrettyPrinter for Ruby objects".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["pp.rb".freeze]
  s.homepage = "https://github.com/ruby/pp".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides a PrettyPrinter for Ruby objects".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<prettyprint>.freeze, [">= 0"])
  else
    s.add_dependency(%q<prettyprint>.freeze, [">= 0"])
  end
end
PK"#[ݐ�=��)specifications/default/yaml-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: yaml 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "yaml".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/yaml", "source_code_uri" => "https://github.com/ruby/yaml" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Aaron Patterson".freeze, "SHIBATA Hiroshi".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "YAML Ain't Markup Language".freeze
  s.email = ["aaron@tenderlovemaking.com".freeze, "hsbt@ruby-lang.org".freeze]
  s.files = ["lib/yaml.rb".freeze, "lib/yaml/dbm.rb".freeze, "lib/yaml/store.rb".freeze]
  s.homepage = "https://github.com/ruby/yaml".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "YAML Ain't Markup Language".freeze
end
PK"#[��d�SS0specifications/default/io-nonblock-0.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: io-nonblock 0.1.0 ruby lib
# stub: ext/io/nonblock/extconf.rb

Gem::Specification.new do |s|
  s.name = "io-nonblock".freeze
  s.version = "0.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/io-nonblock", "source_code_uri" => "https://github.com/ruby/io-nonblock" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Enables non-blocking mode with IO class".freeze
  s.email = ["nobu@ruby-lang.org".freeze]
  s.extensions = ["ext/io/nonblock/extconf.rb".freeze]
  s.files = ["ext/io/nonblock/extconf.rb".freeze, "io/nonblock.so".freeze]
  s.homepage = "https://github.com/ruby/io-nonblock".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Enables non-blocking mode with IO class".freeze
end
PK"#[^k� ��+specifications/default/fiddle-1.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: fiddle 1.1.0 ruby lib
# stub: ext/fiddle/extconf.rb

Gem::Specification.new do |s|
  s.name = "fiddle".freeze
  s.version = "1.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "msys2_mingw_dependencies" => "libffi" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Aaron Patterson".freeze, "SHIBATA Hiroshi".freeze]
  s.date = "2025-04-28"
  s.description = "A libffi wrapper for Ruby.".freeze
  s.email = ["aaron@tenderlovemaking.com".freeze, "hsbt@ruby-lang.org".freeze]
  s.extensions = ["ext/fiddle/extconf.rb".freeze]
  s.files = ["ext/fiddle/extconf.rb".freeze, "fiddle.rb".freeze, "fiddle.so".freeze, "fiddle/closure.rb".freeze, "fiddle/cparser.rb".freeze, "fiddle/function.rb".freeze, "fiddle/import.rb".freeze, "fiddle/pack.rb".freeze, "fiddle/struct.rb".freeze, "fiddle/types.rb".freeze, "fiddle/value.rb".freeze, "fiddle/version.rb".freeze]
  s.homepage = "https://github.com/ruby/fiddle".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "A libffi wrapper for Ruby.".freeze
end
PK"#[��tt+specifications/default/ipaddr-1.2.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ipaddr 1.2.4 ruby lib

Gem::Specification.new do |s|
  s.name = "ipaddr".freeze
  s.version = "1.2.4"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze, "Hajimu UMEMOTO".freeze]
  s.date = "2025-04-28"
  s.description = "IPAddr provides a set of methods to manipulate an IP address.\nBoth IPv4 and IPv6 are supported.\n".freeze
  s.email = ["knu@idaemons.org".freeze, "ume@mahoroba.org".freeze]
  s.files = ["ipaddr.rb".freeze]
  s.homepage = "https://github.com/ruby/ipaddr".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "A class to manipulate an IP address in ruby".freeze
end
PK"#[��Cd+specifications/default/base64-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: base64 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "base64".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/base64", "source_code_uri" => "https://github.com/ruby/base64" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yusuke Endoh".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Support for encoding and decoding binary data using a Base64 representation.".freeze
  s.email = ["mame@ruby-lang.org".freeze]
  s.files = ["base64.rb".freeze]
  s.homepage = "https://github.com/ruby/base64".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Support for encoding and decoding binary data using a Base64 representation.".freeze
end
PK"#[�%b���,specifications/default/ostruct-0.5.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ostruct 0.5.2 ruby lib

Gem::Specification.new do |s|
  s.name = "ostruct".freeze
  s.version = "0.5.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Marc-Andre Lafortune".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Class to build custom data structures, similar to a Hash.".freeze
  s.email = ["ruby-core@marc-andre.ca".freeze]
  s.files = ["lib/ostruct.rb".freeze]
  s.homepage = "https://github.com/ruby/ostruct".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Class to build custom data structures, similar to a Hash.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
  else
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
  end
end
PK"#[� �*��(specifications/default/cgi-0.3.7.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: cgi 0.3.7 ruby lib
# stub: ext/cgi/escape/extconf.rb

Gem::Specification.new do |s|
  s.name = "cgi".freeze
  s.version = "0.3.7"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/cgi", "source_code_uri" => "https://github.com/ruby/cgi" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-04-28"
  s.description = "Support for the Common Gateway Interface protocol.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/cgi/escape/extconf.rb".freeze]
  s.files = ["ext/cgi/escape/extconf.rb".freeze, "lib/cgi.rb".freeze, "lib/cgi/cookie.rb".freeze, "lib/cgi/core.rb".freeze, "lib/cgi/html.rb".freeze, "lib/cgi/session.rb".freeze, "lib/cgi/session/pstore.rb".freeze, "lib/cgi/util.rb".freeze]
  s.homepage = "https://github.com/ruby/cgi".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Support for the Common Gateway Interface protocol.".freeze
end
PK"#[���.specifications/default/fileutils-1.6.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: fileutils 1.6.0 ruby lib

Gem::Specification.new do |s|
  s.name = "fileutils".freeze
  s.version = "1.6.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "source_code_uri" => "https://github.com/ruby/fileutils" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Minero Aoki".freeze]
  s.date = "2025-04-28"
  s.description = "Several file utility methods for copying, moving, removing, etc.".freeze
  s.email = [nil]
  s.files = ["fileutils.rb".freeze]
  s.homepage = "https://github.com/ruby/fileutils".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Several file utility methods for copying, moving, removing, etc.".freeze
end
PK"#[ף��]]+specifications/default/syslog-0.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: syslog 0.1.0 ruby lib
# stub: ext/syslog/extconf.rb

Gem::Specification.new do |s|
  s.name = "syslog".freeze
  s.version = "0.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/syslog", "source_code_uri" => "https://github.com/ruby/syslog" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Ruby interface for the POSIX system logging facility.".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.extensions = ["ext/syslog/extconf.rb".freeze]
  s.files = ["ext/syslog/extconf.rb".freeze, "syslog.so".freeze, "syslog/logger.rb".freeze]
  s.homepage = "https://github.com/ruby/syslog".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Ruby interface for the POSIX system logging facility.".freeze
end
PK"#[�.�<XX,specifications/default/openssl-3.0.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: openssl 3.0.1 ruby lib
# stub: ext/openssl/extconf.rb

Gem::Specification.new do |s|
  s.name = "openssl".freeze
  s.version = "3.0.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "msys2_mingw_dependencies" => "openssl" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Martin Bosslet".freeze, "SHIBATA Hiroshi".freeze, "Zachary Scott".freeze, "Kazuki Yamaguchi".freeze]
  s.date = "2025-04-28"
  s.description = "It wraps the OpenSSL library.".freeze
  s.email = ["ruby-core@ruby-lang.org".freeze]
  s.extensions = ["ext/openssl/extconf.rb".freeze]
  s.extra_rdoc_files = ["CONTRIBUTING.md".freeze, "NEWS.md".freeze, "README.ja.md".freeze, "README.md".freeze]
  s.files = ["CONTRIBUTING.md".freeze, "NEWS.md".freeze, "README.ja.md".freeze, "README.md".freeze, "ext/openssl/extconf.rb".freeze, "openssl.rb".freeze, "openssl.so".freeze, "openssl/bn.rb".freeze, "openssl/buffering.rb".freeze, "openssl/cipher.rb".freeze, "openssl/digest.rb".freeze, "openssl/hmac.rb".freeze, "openssl/marshal.rb".freeze, "openssl/pkcs5.rb".freeze, "openssl/pkey.rb".freeze, "openssl/ssl.rb".freeze, "openssl/version.rb".freeze, "openssl/x509.rb".freeze]
  s.homepage = "https://github.com/ruby/openssl".freeze
  s.licenses = ["Ruby".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography.".freeze
end
PK"#[4�?bWW1specifications/default/net-protocol-0.1.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: net-protocol 0.1.2 ruby lib

Gem::Specification.new do |s|
  s.name = "net-protocol".freeze
  s.version = "0.1.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/net-protocol", "source_code_uri" => "https://github.com/ruby/net-protocol" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "The abstruct interface for net-* client.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/net/protocol.rb".freeze]
  s.homepage = "https://github.com/ruby/net-protocol".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "The abstruct interface for net-* client.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<timeout>.freeze, [">= 0"])
    s.add_runtime_dependency(%q<io-wait>.freeze, [">= 0"])
  else
    s.add_dependency(%q<timeout>.freeze, [">= 0"])
    s.add_dependency(%q<io-wait>.freeze, [">= 0"])
  end
end
PK"#[�J���-specifications/default/tempfile-0.1.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: tempfile 0.1.2 ruby lib

Gem::Specification.new do |s|
  s.name = "tempfile".freeze
  s.version = "0.1.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/tempfile", "source_code_uri" => "https://github.com/ruby/tempfile" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "A utility class for managing temporary files.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["tempfile.rb".freeze]
  s.homepage = "https://github.com/ruby/tempfile".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "A utility class for managing temporary files.".freeze
end
PK"#[k>\���-specifications/default/pathname-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: pathname 0.2.0 ruby lib
# stub: ext/pathname/extconf.rb

Gem::Specification.new do |s|
  s.name = "pathname".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/pathname", "source_code_uri" => "https://github.com/ruby/pathname" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Representation of the name of a file or directory on the filesystem".freeze
  s.email = ["akr@fsij.org".freeze]
  s.extensions = ["ext/pathname/extconf.rb".freeze]
  s.files = ["ext/pathname/extconf.rb".freeze, "pathname.rb".freeze, "pathname.so".freeze]
  s.homepage = "https://github.com/ruby/pathname".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Representation of the name of a file or directory on the filesystem".freeze
end
PK"#[�x_���1specifications/default/securerandom-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: securerandom 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "securerandom".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/securerandom", "source_code_uri" => "https://github.com/ruby/securerandom" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Interface for secure random number generator.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["securerandom.rb".freeze]
  s.homepage = "https://github.com/ruby/securerandom".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Interface for secure random number generator.".freeze
end
PK"#[|��//1specifications/default/readline-ext-0.1.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: readline-ext 0.1.4 ruby lib
# stub: ext/readline/extconf.rb

Gem::Specification.new do |s|
  s.name = "readline-ext".freeze
  s.version = "0.1.4"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/readline-ext", "source_code_uri" => "https://github.com/ruby/readline-ext" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Provides an interface for GNU Readline and Edit Line (libedit).".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/readline/extconf.rb".freeze]
  s.files = ["ext/readline/extconf.rb".freeze, "readline.so".freeze]
  s.homepage = "https://github.com/ruby/readline-ext".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides an interface for GNU Readline and Edit Line (libedit).".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake-compiler>.freeze, [">= 0"])
  else
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
    s.add_dependency(%q<rake-compiler>.freeze, [">= 0"])
  end
end
PK"#[+�����(specifications/default/nkf-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: nkf 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "nkf".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/nkf", "source_code_uri" => "https://github.com/ruby/nkf" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["NARUSE Yui".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Ruby extension for Network Kanji Filter".freeze
  s.email = ["naruse@airemix.jp".freeze]
  s.files = ["nkf.so".freeze]
  s.homepage = "https://github.com/ruby/nkf".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Ruby extension for Network Kanji Filter".freeze
end
PK"#[킥���*specifications/default/open3-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: open3 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "open3".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/open3", "source_code_uri" => "https://github.com/ruby/open3" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Popen, but with stderr, too".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/open3.rb".freeze, "lib/open3/version.rb".freeze]
  s.homepage = "https://github.com/ruby/open3".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Popen, but with stderr, too".freeze
end
PK"#[�Mv�+specifications/default/digest-3.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: digest 3.1.0 ruby lib
# stub: ext/digest/bubblebabble/extconf.rbext/digest/extconf.rbext/digest/md5/extconf.rbext/digest/rmd160/extconf.rbext/digest/sha1/extconf.rbext/digest/sha2/extconf.rb

Gem::Specification.new do |s|
  s.name = "digest".freeze
  s.version = "3.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "msys2_mingw_dependencies" => "openssl" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Provides a framework for message digest libraries.".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.extensions = ["ext/digest/bubblebabble/extconf.rb".freeze, "ext/digest/extconf.rb".freeze, "ext/digest/md5/extconf.rb".freeze, "ext/digest/rmd160/extconf.rb".freeze, "ext/digest/sha1/extconf.rb".freeze, "ext/digest/sha2/extconf.rb".freeze]
  s.files = ["digest.rb".freeze, "digest.so".freeze, "digest/bubblebabble.so".freeze, "digest/loader.rb".freeze, "digest/md5.so".freeze, "digest/rmd160.so".freeze, "digest/sha1.so".freeze, "digest/sha2.rb".freeze, "digest/sha2.so".freeze, "digest/sha2/loader.rb".freeze, "digest/version.rb".freeze, "ext/digest/bubblebabble/extconf.rb".freeze, "ext/digest/extconf.rb".freeze, "ext/digest/md5/extconf.rb".freeze, "ext/digest/rmd160/extconf.rb".freeze, "ext/digest/sha1/extconf.rb".freeze, "ext/digest/sha2/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/digest".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides a framework for message digest libraries.".freeze
end
PK"#[B���55(specifications/default/set-1.0.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: set 1.0.2 ruby lib

Gem::Specification.new do |s|
  s.name = "set".freeze
  s.version = "1.0.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "changelog_uri" => "https://github.com/ruby/set/blob/v1.0.2/CHANGELOG.md", "homepage_uri" => "https://github.com/ruby/set", "source_code_uri" => "https://github.com/ruby/set" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.date = "2025-04-28"
  s.description = "Provides a class to deal with collections of unordered, unique values".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.files = ["lib/set.rb".freeze, "lib/set/sorted_set.rb".freeze]
  s.homepage = "https://github.com/ruby/set".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides a class to deal with collections of unordered, unique values".freeze
end
PK"#[�	**(specifications/default/csv-3.2.5.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: csv 3.2.5 ruby lib

Gem::Specification.new do |s|
  s.name = "csv".freeze
  s.version = "3.2.5"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["James Edward Gray II".freeze, "Kouhei Sutou".freeze]
  s.date = "2025-04-28"
  s.description = "The CSV library provides a complete interface to CSV files and data. It offers tools to enable you to read and write to and from Strings or IO objects, as needed.".freeze
  s.email = [nil, "kou@cozmixng.org".freeze]
  s.extra_rdoc_files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze]
  s.files = ["LICENSE.txt".freeze, "NEWS.md".freeze, "README.md".freeze, "lib/csv.rb".freeze, "lib/csv/core_ext/array.rb".freeze, "lib/csv/core_ext/string.rb".freeze, "lib/csv/delete_suffix.rb".freeze, "lib/csv/fields_converter.rb".freeze, "lib/csv/input_record_separator.rb".freeze, "lib/csv/match_p.rb".freeze, "lib/csv/parser.rb".freeze, "lib/csv/row.rb".freeze, "lib/csv/table.rb".freeze, "lib/csv/version.rb".freeze, "lib/csv/writer.rb".freeze]
  s.homepage = "https://github.com/ruby/csv".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "CSV Reading and Writing".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
    s.add_development_dependency(%q<benchmark_driver>.freeze, [">= 0"])
    s.add_development_dependency(%q<test-unit>.freeze, [">= 3.4.8"])
  else
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
    s.add_dependency(%q<benchmark_driver>.freeze, [">= 0"])
    s.add_dependency(%q<test-unit>.freeze, [">= 3.4.8"])
  end
end
PK"#[�c���,specifications/default/english-0.7.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: english 0.7.1 ruby lib

Gem::Specification.new do |s|
  s.name = "english".freeze
  s.version = "0.7.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/English", "source_code_uri" => "https://github.com/ruby/English" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-04-28"
  s.description = "Require 'English.rb' to reference global variables with less cryptic names.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["English.rb".freeze]
  s.homepage = "https://github.com/ruby/English".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Require 'English.rb' to reference global variables with less cryptic names.".freeze
end
PK"#[K-���.specifications/default/singleton-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: singleton 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "singleton".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/singleton", "source_code_uri" => "https://github.com/ruby/singleton" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "The Singleton module implements the Singleton pattern.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/singleton.rb".freeze]
  s.homepage = "https://github.com/ruby/singleton".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "The Singleton module implements the Singleton pattern.".freeze
end
PK"#[�:d88)specifications/default/racc-1.6.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: racc 1.6.0 ruby lib
# stub: ext/racc/cparse/extconf.rb

Gem::Specification.new do |s|
  s.name = "racc".freeze
  s.version = "1.6.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Minero Aoki".freeze, "Aaron Patterson".freeze]
  s.date = "2025-04-28"
  s.description = "Racc is a LALR(1) parser generator.\n  It is written in Ruby itself, and generates Ruby program.\n\n  NOTE: Ruby 1.8.x comes with Racc runtime module.  You\n  can run your parsers generated by racc 1.4.x out of the\n  box.\n".freeze
  s.email = [nil, "aaron@tenderlovemaking.com".freeze]
  s.executables = ["racc".freeze]
  s.extensions = ["ext/racc/cparse/extconf.rb".freeze]
  s.extra_rdoc_files = ["README.ja.rdoc".freeze, "README.rdoc".freeze]
  s.files = ["README.ja.rdoc".freeze, "README.rdoc".freeze, "bin/racc".freeze, "ext/racc/cparse/extconf.rb".freeze, "lib/racc.rb".freeze, "lib/racc/compat.rb".freeze, "lib/racc/debugflags.rb".freeze, "lib/racc/exception.rb".freeze, "lib/racc/grammar.rb".freeze, "lib/racc/grammarfileparser.rb".freeze, "lib/racc/info.rb".freeze, "lib/racc/iset.rb".freeze, "lib/racc/logfilegenerator.rb".freeze, "lib/racc/parser-text.rb".freeze, "lib/racc/parser.rb".freeze, "lib/racc/parserfilegenerator.rb".freeze, "lib/racc/sourcetext.rb".freeze, "lib/racc/state.rb".freeze, "lib/racc/statetransitiontable.rb".freeze, "lib/racc/static.rb".freeze]
  s.homepage = "https://i.loveruby.net/en/projects/racc/".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Racc is a LALR(1) parser generator".freeze
end
PK"#[��#~��-specifications/default/observer-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: observer 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "observer".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/observer", "source_code_uri" => "https://github.com/ruby/observer" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Implementation of the Observer object-oriented design pattern.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/observer.rb".freeze]
  s.homepage = "https://github.com/ruby/observer".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Implementation of the Observer object-oriented design pattern.".freeze
end
PK"#[�˕/specifications/default/shellwords-0.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: shellwords 0.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "shellwords".freeze
  s.version = "0.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/shellwords", "source_code_uri" => "https://github.com/ruby/shellwords" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Manipulates strings with word parsing rules of UNIX Bourne shell.".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.files = ["shellwords.rb".freeze]
  s.homepage = "https://github.com/ruby/shellwords".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Manipulates strings with word parsing rules of UNIX Bourne shell.".freeze
end
PK"#[m"k�CC1specifications/default/did_you_mean-1.6.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: did_you_mean 1.6.1 ruby lib

Gem::Specification.new do |s|
  s.name = "did_you_mean".freeze
  s.version = "1.6.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yuki Nishijima".freeze]
  s.date = "2025-04-28"
  s.description = "The gem that has been saving people from typos since 2014.".freeze
  s.email = ["mail@yukinishijima.net".freeze]
  s.files = ["lib/did_you_mean.rb".freeze, "lib/did_you_mean/core_ext/name_error.rb".freeze, "lib/did_you_mean/experimental.rb".freeze, "lib/did_you_mean/formatter.rb".freeze, "lib/did_you_mean/formatters/plain_formatter.rb".freeze, "lib/did_you_mean/formatters/verbose_formatter.rb".freeze, "lib/did_you_mean/jaro_winkler.rb".freeze, "lib/did_you_mean/levenshtein.rb".freeze, "lib/did_you_mean/spell_checker.rb".freeze, "lib/did_you_mean/spell_checkers/key_error_checker.rb".freeze, "lib/did_you_mean/spell_checkers/method_name_checker.rb".freeze, "lib/did_you_mean/spell_checkers/name_error_checkers.rb".freeze, "lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb".freeze, "lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb".freeze, "lib/did_you_mean/spell_checkers/null_checker.rb".freeze, "lib/did_you_mean/spell_checkers/pattern_key_name_checker.rb".freeze, "lib/did_you_mean/spell_checkers/require_path_checker.rb".freeze, "lib/did_you_mean/tree_spell_checker.rb".freeze, "lib/did_you_mean/verbose.rb".freeze, "lib/did_you_mean/version.rb".freeze]
  s.homepage = "https://github.com/ruby/did_you_mean".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "\"Did you mean?\" experience in Ruby".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
  else
    s.add_dependency(%q<rake>.freeze, [">= 0"])
  end
end
PK"#[�^n�((/specifications/default/net-http-0.3.0.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: net-http 0.3.0.1 ruby lib

Gem::Specification.new do |s|
  s.name = "net-http".freeze
  s.version = "0.3.0.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/net-http", "source_code_uri" => "https://github.com/ruby/net-http" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["NARUSE, Yui".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "HTTP client api for Ruby.".freeze
  s.email = ["naruse@airemix.jp".freeze]
  s.files = ["lib/net/http.rb".freeze, "lib/net/http/backward.rb".freeze, "lib/net/http/exceptions.rb".freeze, "lib/net/http/generic_request.rb".freeze, "lib/net/http/header.rb".freeze, "lib/net/http/proxy_delta.rb".freeze, "lib/net/http/request.rb".freeze, "lib/net/http/requests.rb".freeze, "lib/net/http/response.rb".freeze, "lib/net/http/responses.rb".freeze, "lib/net/http/status.rb".freeze, "lib/net/https.rb".freeze]
  s.homepage = "https://github.com/ruby/net-http".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "HTTP client api for Ruby.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<uri>.freeze, [">= 0"])
  else
    s.add_dependency(%q<uri>.freeze, [">= 0"])
  end
end
PK"#[��z���*specifications/default/tsort-0.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: tsort 0.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "tsort".freeze
  s.version = "0.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/tsort", "source_code_uri" => "https://github.com/ruby/tsort" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Topological sorting using Tarjan's algorithm".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["tsort.rb".freeze]
  s.homepage = "https://github.com/ruby/tsort".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Topological sorting using Tarjan's algorithm".freeze
end
PK"#[�p���,specifications/default/mutex_m-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: mutex_m 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "mutex_m".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Keiju ISHITSUKA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Mixin to extend objects to be handled like a Mutex.".freeze
  s.email = ["keiju@ruby-lang.org".freeze]
  s.files = ["mutex_m.rb".freeze]
  s.homepage = "https://github.com/ruby/mutex_m".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Mixin to extend objects to be handled like a Mutex.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
    s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
  else
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
    s.add_dependency(%q<test-unit>.freeze, [">= 0"])
  end
end
PK"#[`�R��-specifications/default/optparse-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: optparse 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "optparse".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/optparse", "source_code_uri" => "https://github.com/ruby/optparse" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "OptionParser is a class for command-line option analysis.".freeze
  s.email = ["nobu@ruby-lang.org".freeze]
  s.files = ["lib/optionparser.rb".freeze, "lib/optparse.rb".freeze, "lib/optparse/ac.rb".freeze, "lib/optparse/date.rb".freeze, "lib/optparse/kwargs.rb".freeze, "lib/optparse/shellwords.rb".freeze, "lib/optparse/time.rb".freeze, "lib/optparse/uri.rb".freeze, "lib/optparse/version.rb".freeze]
  s.homepage = "https://github.com/ruby/optparse".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "OptionParser is a class for command-line option analysis.".freeze
end
PK"#[\`S��)specifications/default/date-3.2.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: date 3.2.2 ruby lib
# stub: ext/date/extconf.rb

Gem::Specification.new do |s|
  s.name = "date".freeze
  s.version = "3.2.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tadayoshi Funaba".freeze]
  s.date = "2025-04-28"
  s.description = "A subclass of Object includes Comparable module for handling dates.".freeze
  s.email = [nil]
  s.extensions = ["ext/date/extconf.rb".freeze]
  s.files = ["date.rb".freeze, "ext/date/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/date".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "A subclass of Object includes Comparable module for handling dates.".freeze
end
PK"#[�Nf;tt)specifications/default/uri-0.12.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: uri 0.12.4 ruby lib

Gem::Specification.new do |s|
  s.name = "uri".freeze
  s.version = "0.12.4"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/uri", "source_code_uri" => "https://github.com/ruby/uri" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akira Yamada".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "URI is a module providing classes to handle Uniform Resource Identifiers".freeze
  s.email = ["akira@ruby-lang.org".freeze]
  s.files = ["lib/uri.rb".freeze, "lib/uri/common.rb".freeze, "lib/uri/file.rb".freeze, "lib/uri/ftp.rb".freeze, "lib/uri/generic.rb".freeze, "lib/uri/http.rb".freeze, "lib/uri/https.rb".freeze, "lib/uri/ldap.rb".freeze, "lib/uri/ldaps.rb".freeze, "lib/uri/mailto.rb".freeze, "lib/uri/rfc2396_parser.rb".freeze, "lib/uri/rfc3986_parser.rb".freeze, "lib/uri/version.rb".freeze, "lib/uri/ws.rb".freeze, "lib/uri/wss.rb".freeze]
  s.homepage = "https://github.com/ruby/uri".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "URI is a module providing classes to handle Uniform Resource Identifiers".freeze
end
PK"#[�B�
��,specifications/default/timeout-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: timeout 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "timeout".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/timeout", "source_code_uri" => "https://github.com/ruby/timeout" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Auto-terminate potentially long-running operations in Ruby.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/timeout.rb".freeze]
  s.homepage = "https://github.com/ruby/timeout".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Auto-terminate potentially long-running operations in Ruby.".freeze
end
PK"#[����+specifications/default/abbrev-0.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: abbrev 0.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "abbrev".freeze
  s.version = "0.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/abbrev", "source_code_uri" => "https://github.com/ruby/abbrev" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Akinori MUSHA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Calculates a set of unique abbreviations for a given set of strings".freeze
  s.email = ["knu@idaemons.org".freeze]
  s.files = ["abbrev.rb".freeze]
  s.homepage = "https://github.com/ruby/abbrev".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Calculates a set of unique abbreviations for a given set of strings".freeze
end
PK"#[�����+specifications/default/reline-0.3.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: reline 0.3.1 ruby lib

Gem::Specification.new do |s|
  s.name = "reline".freeze
  s.version = "0.3.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["aycabta".freeze]
  s.date = "2025-04-28"
  s.description = "Alternative GNU Readline or Editline implementation by pure Ruby.".freeze
  s.email = ["aycabta@gmail.com".freeze]
  s.files = ["lib/reline.rb".freeze, "lib/reline/ansi.rb".freeze, "lib/reline/config.rb".freeze, "lib/reline/general_io.rb".freeze, "lib/reline/history.rb".freeze, "lib/reline/key_actor.rb".freeze, "lib/reline/key_actor/base.rb".freeze, "lib/reline/key_actor/emacs.rb".freeze, "lib/reline/key_actor/vi_command.rb".freeze, "lib/reline/key_actor/vi_insert.rb".freeze, "lib/reline/key_stroke.rb".freeze, "lib/reline/kill_ring.rb".freeze, "lib/reline/line_editor.rb".freeze, "lib/reline/terminfo.rb".freeze, "lib/reline/unicode.rb".freeze, "lib/reline/unicode/east_asian_width.rb".freeze, "lib/reline/version.rb".freeze, "lib/reline/windows.rb".freeze]
  s.homepage = "https://github.com/ruby/reline".freeze
  s.licenses = ["Ruby".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Alternative GNU Readline or Editline implementation by pure Ruby.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<io-console>.freeze, ["~> 0.5"])
  else
    s.add_dependency(%q<io-console>.freeze, ["~> 0.5"])
  end
end
PK"#[,ı���0specifications/default/forwardable-1.3.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: forwardable 1.3.2 ruby lib

Gem::Specification.new do |s|
  s.name = "forwardable".freeze
  s.version = "1.3.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Keiju ISHITSUKA".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Provides delegation of specified methods to a designated object.".freeze
  s.email = ["keiju@ruby-lang.org".freeze]
  s.files = ["lib/forwardable.rb".freeze, "lib/forwardable/impl.rb".freeze]
  s.homepage = "https://github.com/ruby/forwardable".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides delegation of specified methods to a designated object.".freeze
end
PK"#[0��{kk/specifications/default/stringio-3.0.1.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: stringio 3.0.1.2 ruby lib
# stub: ext/stringio/extconf.rb

Gem::Specification.new do |s|
  s.name = "stringio".freeze
  s.version = "3.0.1.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 2.6".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.date = "2025-04-28"
  s.description = "Pseudo `IO` class from/to `String`.".freeze
  s.email = "nobu@ruby-lang.org".freeze
  s.extensions = ["ext/stringio/extconf.rb".freeze]
  s.files = ["ext/stringio/extconf.rb".freeze, "stringio.so".freeze]
  s.homepage = "https://github.com/ruby/stringio".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Pseudo IO on String".freeze
end
PK"#[��-specifications/default/open-uri-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: open-uri 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "open-uri".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/open-uri", "source_code_uri" => "https://github.com/ruby/open-uri" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.date = "2025-04-28"
  s.description = "An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["open-uri.rb".freeze]
  s.homepage = "https://github.com/ruby/open-uri".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "An easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<uri>.freeze, [">= 0"])
    s.add_runtime_dependency(%q<stringio>.freeze, [">= 0"])
    s.add_runtime_dependency(%q<time>.freeze, [">= 0"])
  else
    s.add_dependency(%q<uri>.freeze, [">= 0"])
    s.add_dependency(%q<stringio>.freeze, [">= 0"])
    s.add_dependency(%q<time>.freeze, [">= 0"])
  end
end
PK"#[��
f��'specifications/default/un-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: un 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "un".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/un", "source_code_uri" => "https://github.com/ruby/un" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["WATANABE Hirofumi".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Utilities to replace common UNIX commands".freeze
  s.email = ["eban@ruby-lang.org".freeze]
  s.files = ["un.rb".freeze]
  s.homepage = "https://github.com/ruby/un".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Utilities to replace common UNIX commands".freeze
end
PK"#[��	Ʌ�+specifications/default/logger-1.5.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: logger 1.5.0 ruby lib

Gem::Specification.new do |s|
  s.name = "logger".freeze
  s.version = "1.5.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Naotoshi Seo".freeze, "SHIBATA Hiroshi".freeze]
  s.date = "2025-04-28"
  s.description = "Provides a simple logging utility for outputting messages.".freeze
  s.email = ["sonots@gmail.com".freeze, "hsbt@ruby-lang.org".freeze]
  s.files = ["lib/logger.rb".freeze, "lib/logger/errors.rb".freeze, "lib/logger/formatter.rb".freeze, "lib/logger/log_device.rb".freeze, "lib/logger/period.rb".freeze, "lib/logger/severity.rb".freeze, "lib/logger/version.rb".freeze]
  s.homepage = "https://github.com/ruby/logger".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides a simple logging utility for outputting messages.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 12.3.3"])
    s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
    s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
  else
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 12.3.3"])
    s.add_dependency(%q<test-unit>.freeze, [">= 0"])
    s.add_dependency(%q<rdoc>.freeze, [">= 0"])
  end
end
PK"#[�����+specifications/default/tmpdir-0.1.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: tmpdir 0.1.2 ruby lib

Gem::Specification.new do |s|
  s.name = "tmpdir".freeze
  s.version = "0.1.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/tmpdir", "source_code_uri" => "https://github.com/ruby/tmpdir" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Extends the Dir class to manage the OS temporary file path.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["tmpdir.rb".freeze]
  s.homepage = "https://github.com/ruby/tmpdir".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Extends the Dir class to manage the OS temporary file path.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<fileutils>.freeze, [">= 0"])
  else
    s.add_dependency(%q<fileutils>.freeze, [">= 0"])
  end
end
PK"#[!zSS/specifications/default/getoptlong-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: getoptlong 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "getoptlong".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/getoptlong", "source_code_uri" => "https://github.com/ruby/getoptlong" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-04-28"
  s.description = "GetoptLong for Ruby".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/getoptlong.rb".freeze]
  s.homepage = "https://github.com/ruby/getoptlong".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "GetoptLong for Ruby".freeze
end
PK"#[0�3��*specifications/default/rinda-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rinda 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "rinda".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/rinda", "source_code_uri" => "https://github.com/ruby/rinda" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Masatoshi SEKI".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "The Linda distributed computing paradigm in Ruby.".freeze
  s.email = ["seki@ruby-lang.org".freeze]
  s.files = ["lib/rinda/rinda.rb".freeze, "lib/rinda/ring.rb".freeze, "lib/rinda/tuplespace.rb".freeze]
  s.homepage = "https://github.com/ruby/rinda".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "The Linda distributed computing paradigm in Ruby.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<drb>.freeze, [">= 0"])
    s.add_runtime_dependency(%q<ipaddr>.freeze, [">= 0"])
    s.add_runtime_dependency(%q<forwardable>.freeze, [">= 0"])
  else
    s.add_dependency(%q<drb>.freeze, [">= 0"])
    s.add_dependency(%q<ipaddr>.freeze, [">= 0"])
    s.add_dependency(%q<forwardable>.freeze, [">= 0"])
  end
end
PK"#[�sz��3specifications/default/resolv-replace-0.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: resolv-replace 0.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "resolv-replace".freeze
  s.version = "0.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/resolv-replace", "source_code_uri" => "https://github.com/ruby/resolv-replace" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.date = "2025-04-28"
  s.description = "Replace Socket DNS with Resolv.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["resolv-replace.rb".freeze]
  s.homepage = "https://github.com/ruby/resolv-replace".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Replace Socket DNS with Resolv.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<resolv>.freeze, [">= 0"])
  else
    s.add_dependency(%q<resolv>.freeze, [">= 0"])
  end
end
PK"#[%fZ3��,specifications/default/weakref-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: weakref 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "weakref".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/weakref", "source_code_uri" => "https://github.com/ruby/weakref" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Allows a referenced object to be garbage-collected.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/weakref.rb".freeze]
  s.homepage = "https://github.com/ruby/weakref".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Allows a referenced object to be garbage-collected.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<delegate>.freeze, [">= 0"])
  else
    s.add_dependency(%q<delegate>.freeze, [">= 0"])
  end
end
PK"#[���P��(specifications/default/erb-2.2.3.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: erb 2.2.3 ruby lib

Gem::Specification.new do |s|
  s.name = "erb".freeze
  s.version = "2.2.3"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/erb", "source_code_uri" => "https://github.com/ruby/erb" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Masatoshi SEKI".freeze]
  s.bindir = "libexec".freeze
  s.date = "2025-04-28"
  s.description = "An easy to use but powerful templating system for Ruby.".freeze
  s.email = ["seki@ruby-lang.org".freeze]
  s.executables = ["erb".freeze]
  s.files = ["erb.rb".freeze, "libexec/erb".freeze]
  s.homepage = "https://github.com/ruby/erb".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "An easy to use but powerful templating system for Ruby.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<cgi>.freeze, [">= 0"])
  else
    s.add_dependency(%q<cgi>.freeze, [">= 0"])
  end
end
PK"#[�S4p%%(specifications/default/etc-1.3.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: etc 1.3.0 ruby lib
# stub: ext/etc/extconf.rb

Gem::Specification.new do |s|
  s.name = "etc".freeze
  s.version = "1.3.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Provides access to information typically stored in UNIX /etc directory.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.extensions = ["ext/etc/extconf.rb".freeze]
  s.files = ["etc.so".freeze, "ext/etc/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/etc".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides access to information typically stored in UNIX /etc directory.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake-compiler>.freeze, [">= 0"])
    s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
  else
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
    s.add_dependency(%q<rake-compiler>.freeze, [">= 0"])
    s.add_dependency(%q<test-unit>.freeze, [">= 0"])
  end
end
PK"#[��"3specifications/default/ruby2_keywords-0.0.5.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: ruby2_keywords 0.0.5 ruby lib

Gem::Specification.new do |s|
  s.name = "ruby2_keywords".freeze
  s.version = "0.0.5"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobuyoshi Nakada".freeze]
  s.date = "2025-04-28"
  s.extra_rdoc_files = ["LICENSE".freeze, "README.md".freeze, "ChangeLog".freeze]
  s.files = ["ChangeLog".freeze, "LICENSE".freeze, "README.md".freeze, "ruby2_keywords.rb".freeze]
  s.homepage = "https://github.com/ruby/ruby2_keywords".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.0.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Shim library for Module#ruby2_keywords".freeze
end
PK"#[ `?���)specifications/default/zlib-2.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: zlib 2.1.1 ruby lib
# stub: ext/zlib/extconf.rb

Gem::Specification.new do |s|
  s.name = "zlib".freeze
  s.version = "2.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze, "UENO Katsuhiro".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Ruby interface for the zlib compression/decompression library".freeze
  s.email = ["matz@ruby-lang.org".freeze, nil]
  s.extensions = ["ext/zlib/extconf.rb".freeze]
  s.files = ["ext/zlib/extconf.rb".freeze, "zlib.so".freeze]
  s.homepage = "https://github.com/ruby/zlib".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Ruby interface for the zlib compression/decompression library".freeze
end
PK"#[5��54specifications/default/error_highlight-0.3.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: error_highlight 0.3.0 ruby lib

Gem::Specification.new do |s|
  s.name = "error_highlight".freeze
  s.version = "0.3.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yusuke Endoh".freeze]
  s.date = "2025-04-28"
  s.description = "The gem enhances Exception#message by adding a short explanation where the exception is raised".freeze
  s.email = ["mame@ruby-lang.org".freeze]
  s.files = ["lib/error_highlight.rb".freeze, "lib/error_highlight/base.rb".freeze, "lib/error_highlight/core_ext.rb".freeze, "lib/error_highlight/formatter.rb".freeze, "lib/error_highlight/version.rb".freeze]
  s.homepage = "https://github.com/ruby/error_highlight".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 3.1.0.dev".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Shows a one-line code snippet with an underline in the error backtrace".freeze
end
PK"#[��f���)specifications/default/time-0.2.2.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: time 0.2.2 ruby lib

Gem::Specification.new do |s|
  s.name = "time".freeze
  s.version = "0.2.2"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/time", "source_code_uri" => "https://github.com/ruby/time" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Extends the Time class with methods for parsing and conversion.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["time.rb".freeze]
  s.homepage = "https://github.com/ruby/time".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Extends the Time class with methods for parsing and conversion.".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<date>.freeze, [">= 0"])
  else
    s.add_dependency(%q<date>.freeze, [">= 0"])
  end
end
PK"#[��dY��0specifications/default/prettyprint-0.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: prettyprint 0.1.1 ruby lib

Gem::Specification.new do |s|
  s.name = "prettyprint".freeze
  s.version = "0.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/prettyprint", "source_code_uri" => "https://github.com/ruby/prettyprint" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Implements a pretty printing algorithm for readable structure.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["prettyprint.rb".freeze]
  s.homepage = "https://github.com/ruby/prettyprint".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Implements a pretty printing algorithm for readable structure.".freeze
end
PK"#[oK��-specifications/default/delegate-0.2.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: delegate 0.2.0 ruby lib

Gem::Specification.new do |s|
  s.name = "delegate".freeze
  s.version = "0.2.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/delegate", "source_code_uri" => "https://github.com/ruby/delegate" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Yukihiro Matsumoto".freeze]
  s.date = "2025-04-28"
  s.description = "Provides three abilities to delegate method calls to an object.".freeze
  s.email = ["matz@ruby-lang.org".freeze]
  s.files = ["lib/delegate.rb".freeze]
  s.homepage = "https://github.com/ruby/delegate".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.7".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Provides three abilities to delegate method calls to an object.".freeze
end
PK"#[5��i��+specifications/default/resolv-0.2.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: resolv 0.2.1 ruby lib

Gem::Specification.new do |s|
  s.name = "resolv".freeze
  s.version = "0.2.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "homepage_uri" => "https://github.com/ruby/resolv", "source_code_uri" => "https://github.com/ruby/resolv" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Tanaka Akira".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Thread-aware DNS resolver library in Ruby.".freeze
  s.email = ["akr@fsij.org".freeze]
  s.files = ["resolv.rb".freeze]
  s.homepage = "https://github.com/ruby/resolv".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Thread-aware DNS resolver library in Ruby.".freeze
end
PK"#[����'specifications/bigdecimal-3.1.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: bigdecimal 3.1.1 ruby lib
# stub: ext/bigdecimal/extconf.rb

Gem::Specification.new do |s|
  s.name = "bigdecimal".freeze
  s.version = "3.1.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Kenta Murata".freeze, "Zachary Scott".freeze, "Shigeo Kobayashi".freeze]
  s.date = "2025-04-28"
  s.description = "This library provides arbitrary-precision decimal floating-point number class.".freeze
  s.email = ["mrkn@mrkn.jp".freeze]
  s.extensions = ["ext/bigdecimal/extconf.rb".freeze]
  s.files = ["bigdecimal.rb".freeze, "bigdecimal.so".freeze, "bigdecimal/jacobian.rb".freeze, "bigdecimal/ludcmp.rb".freeze, "bigdecimal/math.rb".freeze, "bigdecimal/newton.rb".freeze, "bigdecimal/util.rb".freeze, "ext/bigdecimal/extconf.rb".freeze]
  s.homepage = "https://github.com/ruby/bigdecimal".freeze
  s.licenses = ["Ruby".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Arbitrary-precision decimal floating-point number library.".freeze
end
PK"#[�J��
�
"specifications/psych-4.0.4.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: psych 4.0.4 ruby lib
# stub: ext/psych/extconf.rb

Gem::Specification.new do |s|
  s.name = "psych".freeze
  s.version = "4.0.4"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Aaron Patterson".freeze, "SHIBATA Hiroshi".freeze, "Charles Oliver Nutter".freeze]
  s.date = "2025-04-28"
  s.description = "Psych is a YAML parser and emitter. Psych leverages libyaml[https://pyyaml.org/wiki/LibYAML]\nfor its YAML parsing and emitting capabilities. In addition to wrapping libyaml,\nPsych also knows how to serialize and de-serialize most Ruby objects to and from the YAML format.\n".freeze
  s.email = ["aaron@tenderlovemaking.com".freeze, "hsbt@ruby-lang.org".freeze, "headius@headius.com".freeze]
  s.extensions = ["ext/psych/extconf.rb".freeze]
  s.extra_rdoc_files = ["README.md".freeze]
  s.files = ["README.md".freeze, "ext/psych/extconf.rb".freeze, "psych.rb".freeze, "psych.so".freeze, "psych/class_loader.rb".freeze, "psych/coder.rb".freeze, "psych/core_ext.rb".freeze, "psych/exception.rb".freeze, "psych/handler.rb".freeze, "psych/handlers/document_stream.rb".freeze, "psych/handlers/recorder.rb".freeze, "psych/json/ruby_events.rb".freeze, "psych/json/stream.rb".freeze, "psych/json/tree_builder.rb".freeze, "psych/json/yaml_events.rb".freeze, "psych/nodes.rb".freeze, "psych/nodes/alias.rb".freeze, "psych/nodes/document.rb".freeze, "psych/nodes/mapping.rb".freeze, "psych/nodes/node.rb".freeze, "psych/nodes/scalar.rb".freeze, "psych/nodes/sequence.rb".freeze, "psych/nodes/stream.rb".freeze, "psych/omap.rb".freeze, "psych/parser.rb".freeze, "psych/scalar_scanner.rb".freeze, "psych/set.rb".freeze, "psych/stream.rb".freeze, "psych/streaming.rb".freeze, "psych/syntax_error.rb".freeze, "psych/tree_builder.rb".freeze, "psych/versions.rb".freeze, "psych/visitors.rb".freeze, "psych/visitors/depth_first.rb".freeze, "psych/visitors/emitter.rb".freeze, "psych/visitors/json_tree.rb".freeze, "psych/visitors/to_ruby.rb".freeze, "psych/visitors/visitor.rb".freeze, "psych/visitors/yaml_tree.rb".freeze, "psych/y.rb".freeze]
  s.homepage = "https://github.com/ruby/psych".freeze
  s.licenses = ["MIT".freeze]
  s.rdoc_options = ["--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Psych is a YAML parser and emitter".freeze

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<stringio>.freeze, [">= 0"])
  else
    s.add_dependency(%q<stringio>.freeze, [">= 0"])
  end
end
PK"#[ƺ:WZZ"specifications/rake-13.0.6.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rake 13.0.6 ruby lib

Gem::Specification.new do |s|
  s.name = "rake".freeze
  s.version = "13.0.6"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/ruby/rake/issues", "changelog_uri" => "https://github.com/ruby/rake/blob/v13.0.6/History.rdoc", "documentation_uri" => "https://ruby.github.io/rake", "source_code_uri" => "https://github.com/ruby/rake/tree/v13.0.6" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Hiroshi SHIBATA".freeze, "Eric Hodel".freeze, "Jim Weirich".freeze]
  s.bindir = "exe".freeze
  s.date = "2025-04-28"
  s.description = "Rake is a Make-like program implemented in Ruby. Tasks and dependencies are\nspecified in standard Ruby syntax.\nRake has the following features:\n  * Rakefiles (rake's version of Makefiles) are completely defined in standard Ruby syntax.\n    No XML files to edit. No quirky Makefile syntax to worry about (is that a tab or a space?)\n  * Users can specify tasks with prerequisites.\n  * Rake supports rule patterns to synthesize implicit tasks.\n  * Flexible FileLists that act like arrays but know about manipulating file names and paths.\n  * Supports parallel execution of tasks.\n".freeze
  s.email = ["hsbt@ruby-lang.org".freeze, "drbrain@segment7.net".freeze, "".freeze]
  s.executables = ["rake".freeze]
  s.files = ["exe/rake".freeze]
  s.homepage = "https://github.com/ruby/rake".freeze
  s.licenses = ["MIT".freeze]
  s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.2".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Rake is a Make-like program implemented in Ruby".freeze

  s.installed_by_version = "3.3.27" if s.respond_to? :installed_by_version
end
PK"#[U�v��!specifications/json-2.6.1.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: json 2.6.1 ruby lib
# stub: ext/json/ext/generator/extconf.rbext/json/ext/parser/extconf.rbext/json/extconf.rb

Gem::Specification.new do |s|
  s.name = "json".freeze
  s.version = "2.6.1"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "bug_tracker_uri" => "https://github.com/flori/json/issues", "changelog_uri" => "https://github.com/flori/json/blob/master/CHANGES.md", "documentation_uri" => "http://flori.github.io/json/doc/index.html", "homepage_uri" => "http://flori.github.io/json/", "source_code_uri" => "https://github.com/flori/json", "wiki_uri" => "https://github.com/flori/json/wiki" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Florian Frank".freeze]
  s.date = "2025-04-28"
  s.description = "This is a JSON implementation as a Ruby extension in C.".freeze
  s.email = "flori@ping.de".freeze
  s.extensions = ["ext/json/ext/generator/extconf.rb".freeze, "ext/json/ext/parser/extconf.rb".freeze, "ext/json/extconf.rb".freeze]
  s.extra_rdoc_files = ["README.md".freeze]
  s.files = ["README.md".freeze, "ext/json/ext/generator/extconf.rb".freeze, "ext/json/ext/parser/extconf.rb".freeze, "ext/json/extconf.rb".freeze, "json.rb".freeze, "json/add/bigdecimal.rb".freeze, "json/add/complex.rb".freeze, "json/add/core.rb".freeze, "json/add/date.rb".freeze, "json/add/date_time.rb".freeze, "json/add/exception.rb".freeze, "json/add/ostruct.rb".freeze, "json/add/range.rb".freeze, "json/add/rational.rb".freeze, "json/add/regexp.rb".freeze, "json/add/set.rb".freeze, "json/add/struct.rb".freeze, "json/add/symbol.rb".freeze, "json/add/time.rb".freeze, "json/common.rb".freeze, "json/ext.rb".freeze, "json/ext/generator.so".freeze, "json/ext/parser.so".freeze, "json/generic_object.rb".freeze, "json/version.rb".freeze]
  s.homepage = "http://flori.github.com/json".freeze
  s.licenses = ["Ruby".freeze]
  s.rdoc_options = ["--title".freeze, "JSON implementation for Ruby".freeze, "--main".freeze, "README.md".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.3".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "JSON Implementation for Ruby".freeze
end
PK"#[hso���#specifications/rackup-2.1.0.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: rackup 2.1.0 ruby lib

Gem::Specification.new do |s|
  s.name = "rackup".freeze
  s.version = "2.1.0"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.require_paths = ["lib".freeze]
  s.authors = ["Samuel Williams".freeze, "Jeremy Evans".freeze]
  s.date = "2023-01-27"
  s.executables = ["rackup".freeze]
  s.files = ["bin/rackup".freeze]
  s.homepage = "https://github.com/rack/rackup".freeze
  s.licenses = ["MIT".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.4.0".freeze)
  s.rubygems_version = "3.3.26".freeze
  s.summary = "A general server command for Rack applications.".freeze

  s.installed_by_version = "3.3.26" if s.respond_to? :installed_by_version

  if s.respond_to? :specification_version then
    s.specification_version = 4
  end

  if s.respond_to? :add_runtime_dependency then
    s.add_runtime_dependency(%q<rack>.freeze, [">= 3"])
    s.add_runtime_dependency(%q<webrick>.freeze, ["~> 1.8"])
    s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_development_dependency(%q<minitest>.freeze, ["~> 5.0"])
    s.add_development_dependency(%q<minitest-global_expectations>.freeze, [">= 0"])
    s.add_development_dependency(%q<minitest-sprint>.freeze, [">= 0"])
    s.add_development_dependency(%q<rake>.freeze, [">= 0"])
  else
    s.add_dependency(%q<rack>.freeze, [">= 3"])
    s.add_dependency(%q<webrick>.freeze, ["~> 1.8"])
    s.add_dependency(%q<bundler>.freeze, [">= 0"])
    s.add_dependency(%q<minitest>.freeze, ["~> 5.0"])
    s.add_dependency(%q<minitest-global_expectations>.freeze, [">= 0"])
    s.add_dependency(%q<minitest-sprint>.freeze, [">= 0"])
    s.add_dependency(%q<rake>.freeze, [">= 0"])
  end
end
PK"#[O?�R(specifications/io-console-0.5.11.gemspecnu�[���# -*- encoding: utf-8 -*-
# stub: io-console 0.5.11 ruby lib
# stub: ext/io/console/extconf.rb

Gem::Specification.new do |s|
  s.name = "io-console".freeze
  s.version = "0.5.11"

  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
  s.metadata = { "source_code_url" => "https://github.com/ruby/io-console" } if s.respond_to? :metadata=
  s.require_paths = ["lib".freeze]
  s.authors = ["Nobu Nakada".freeze]
  s.date = "2025-04-28"
  s.description = "add console capabilities to IO instances.".freeze
  s.email = "nobu@ruby-lang.org".freeze
  s.extensions = ["ext/io/console/extconf.rb".freeze]
  s.files = ["ext/io/console/extconf.rb".freeze, "io/console.so".freeze, "io/console/size.rb".freeze]
  s.homepage = "https://github.com/ruby/io-console".freeze
  s.licenses = ["Ruby".freeze, "BSD-2-Clause".freeze]
  s.required_ruby_version = Gem::Requirement.new(">= 2.6.0".freeze)
  s.rubygems_version = "3.3.27".freeze
  s.summary = "Console interface".freeze
end
PK"#[@��ϼ�&gems/psych-4.0.4/lib/psych/versions.rbnu�[���# frozen_string_literal: true

module Psych
  # The version of Psych you are using
  VERSION = '4.0.4'

  if RUBY_ENGINE == 'jruby'
    DEFAULT_SNAKEYAML_VERSION = '1.28'.freeze
  end
end
PK"#[)��))+gems/psych-4.0.4/lib/psych/nodes/mapping.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a {YAML Mapping}[http://yaml.org/spec/1.1/#mapping].
    #
    # A Psych::Nodes::Mapping node may have 0 or more children, but must have
    # an even number of children.  Here are the valid children a
    # Psych::Nodes::Mapping node may have:
    #
    # * Psych::Nodes::Sequence
    # * Psych::Nodes::Mapping
    # * Psych::Nodes::Scalar
    # * Psych::Nodes::Alias
    class Mapping < Psych::Nodes::Node
      # Any Map Style
      ANY   = 0

      # Block Map Style
      BLOCK = 1

      # Flow Map Style
      FLOW  = 2

      # The optional anchor for this mapping
      attr_accessor :anchor

      # The optional tag for this mapping
      attr_accessor :tag

      # Is this an implicit mapping?
      attr_accessor :implicit

      # The style of this mapping
      attr_accessor :style

      ###
      # Create a new Psych::Nodes::Mapping object.
      #
      # +anchor+ is the anchor associated with the map or +nil+.
      # +tag+ is the tag associated with the map or +nil+.
      # +implicit+ is a boolean indicating whether or not the map was implicitly
      # started.
      # +style+ is an integer indicating the mapping style.
      #
      # == See Also
      # See also Psych::Handler#start_mapping
      def initialize anchor = nil, tag = nil, implicit = true, style = BLOCK
        super()
        @anchor   = anchor
        @tag      = tag
        @implicit = implicit
        @style    = style
      end

      def mapping?; true; end
    end
  end
end
PK"#[Ϧ[*gems/psych-4.0.4/lib/psych/nodes/stream.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # Represents a YAML stream.  This is the root node for any YAML parse
    # tree.  This node must have one or more child nodes.  The only valid
    # child node for a Psych::Nodes::Stream node is Psych::Nodes::Document.
    class Stream < Psych::Nodes::Node

      # Encodings supported by Psych (and libyaml)

      # Any encoding
      ANY     = Psych::Parser::ANY

      # UTF-8 encoding
      UTF8    = Psych::Parser::UTF8

      # UTF-16LE encoding
      UTF16LE = Psych::Parser::UTF16LE

      # UTF-16BE encoding
      UTF16BE = Psych::Parser::UTF16BE

      # The encoding used for this stream
      attr_accessor :encoding

      ###
      # Create a new Psych::Nodes::Stream node with an +encoding+ that
      # defaults to Psych::Nodes::Stream::UTF8.
      #
      # See also Psych::Handler#start_stream
      def initialize encoding = UTF8
        super()
        @encoding = encoding
      end

      def stream?; true; end
    end
  end
end
PK"#[��AA,gems/psych-4.0.4/lib/psych/nodes/document.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This represents a YAML Document.  This node must be a child of
    # Psych::Nodes::Stream.  A Psych::Nodes::Document must have one child,
    # and that child may be one of the following:
    #
    # * Psych::Nodes::Sequence
    # * Psych::Nodes::Mapping
    # * Psych::Nodes::Scalar
    class Document < Psych::Nodes::Node
      # The version of the YAML document
      attr_accessor :version

      # A list of tag directives for this document
      attr_accessor :tag_directives

      # Was this document implicitly created?
      attr_accessor :implicit

      # Is the end of the document implicit?
      attr_accessor :implicit_end

      ###
      # Create a new Psych::Nodes::Document object.
      #
      # +version+ is a list indicating the YAML version.
      # +tags_directives+ is a list of tag directive declarations
      # +implicit+ is a flag indicating whether the document will be implicitly
      # started.
      #
      # == Example:
      # This creates a YAML document object that represents a YAML 1.1 document
      # with one tag directive, and has an implicit start:
      #
      #   Psych::Nodes::Document.new(
      #     [1,1],
      #     [["!", "tag:tenderlovemaking.com,2009:"]],
      #     true
      #   )
      #
      # == See Also
      # See also Psych::Handler#start_document
      def initialize version = [], tag_directives = [], implicit = false
        super()
        @version        = version
        @tag_directives = tag_directives
        @implicit       = implicit
        @implicit_end   = true
      end

      ###
      # Returns the root node.  A Document may only have one root node:
      # http://yaml.org/spec/1.1/#id898031
      def root
        children.first
      end

      def document?; true; end
    end
  end
end
PK"#[�����*gems/psych-4.0.4/lib/psych/nodes/scalar.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a {YAML Scalar}[http://yaml.org/spec/1.1/#id858081].
    #
    # This node type is a terminal node and should not have any children.
    class Scalar < Psych::Nodes::Node
      # Any style scalar, the emitter chooses
      ANY           = 0

      # Plain scalar style
      PLAIN         = 1

      # Single quoted style
      SINGLE_QUOTED = 2

      # Double quoted style
      DOUBLE_QUOTED = 3

      # Literal style
      LITERAL       = 4

      # Folded style
      FOLDED        = 5

      # The scalar value
      attr_accessor :value

      # The anchor value (if there is one)
      attr_accessor :anchor

      # The tag value (if there is one)
      attr_accessor :tag

      # Is this a plain scalar?
      attr_accessor :plain

      # Is this scalar quoted?
      attr_accessor :quoted

      # The style of this scalar
      attr_accessor :style

      ###
      # Create a new Psych::Nodes::Scalar object.
      #
      # +value+ is the string value of the scalar
      # +anchor+ is an associated anchor or nil
      # +tag+ is an associated tag or nil
      # +plain+ is a boolean value
      # +quoted+ is a boolean value
      # +style+ is an integer indicating the string style
      #
      # == See Also
      #
      # See also Psych::Handler#scalar
      def initialize value, anchor = nil, tag = nil, plain = true, quoted = false, style = ANY
        @value  = value
        @anchor = anchor
        @tag    = tag
        @plain  = plain
        @quoted = quoted
        @style  = style
      end

      def scalar?; true; end
    end
  end
end
PK"#[�ɉ)gems/psych-4.0.4/lib/psych/nodes/alias.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a {YAML Alias}[http://yaml.org/spec/1.1/#alias].
    # It points to an +anchor+.
    #
    # A Psych::Nodes::Alias is a terminal node and may have no children.
    class Alias < Psych::Nodes::Node
      # The anchor this alias links to
      attr_accessor :anchor

      # Create a new Alias that points to an +anchor+
      def initialize anchor
        @anchor = anchor
      end

      def alias?; true; end
    end
  end
end
PK"#[�믍!!,gems/psych-4.0.4/lib/psych/nodes/sequence.rbnu�[���# frozen_string_literal: true
module Psych
  module Nodes
    ###
    # This class represents a
    # {YAML sequence}[http://yaml.org/spec/1.1/#sequence/syntax].
    #
    # A YAML sequence is basically a list, and looks like this:
    #
    #   %YAML 1.1
    #   ---
    #   - I am
    #   - a Sequence
    #
    # A YAML sequence may have an anchor like this:
    #
    #   %YAML 1.1
    #   ---
    #   &A [
    #     "This sequence",
    #     "has an anchor"
    #   ]
    #
    # A YAML sequence may also have a tag like this:
    #
    #   %YAML 1.1
    #   ---
    #   !!seq [
    #     "This sequence",
    #     "has a tag"
    #   ]
    #
    # This class represents a sequence in a YAML document.  A
    # Psych::Nodes::Sequence node may have 0 or more children.  Valid children
    # for this node are:
    #
    # * Psych::Nodes::Sequence
    # * Psych::Nodes::Mapping
    # * Psych::Nodes::Scalar
    # * Psych::Nodes::Alias
    class Sequence < Psych::Nodes::Node
      # Any Styles, emitter chooses
      ANY   = 0

      # Block style sequence
      BLOCK = 1

      # Flow style sequence
      FLOW  = 2

      # The anchor for this sequence (if any)
      attr_accessor :anchor

      # The tag name for this sequence (if any)
      attr_accessor :tag

      # Is this sequence started implicitly?
      attr_accessor :implicit

      # The sequence style used
      attr_accessor :style

      ###
      # Create a new object representing a YAML sequence.
      #
      # +anchor+ is the anchor associated with the sequence or nil.
      # +tag+ is the tag associated with the sequence or nil.
      # +implicit+ a boolean indicating whether or not the sequence was
      # implicitly started.
      # +style+ is an integer indicating the list style.
      #
      # See Psych::Handler#start_sequence
      def initialize anchor = nil, tag = nil, implicit = true, style = BLOCK
        super()
        @anchor   = anchor
        @tag      = tag
        @implicit = implicit
        @style    = style
      end

      def sequence?; true; end
    end
  end
end
PK "#[0 ��(gems/psych-4.0.4/lib/psych/nodes/node.rbnu�[���# frozen_string_literal: true
require 'stringio'
require_relative '../class_loader'
require_relative '../scalar_scanner'

module Psych
  module Nodes
    ###
    # The base class for any Node in a YAML parse tree.  This class should
    # never be instantiated.
    class Node
      include Enumerable

      # The children of this node
      attr_reader :children

      # An associated tag
      attr_reader :tag

      # The line number where this node start
      attr_accessor :start_line

      # The column number where this node start
      attr_accessor :start_column

      # The line number where this node ends
      attr_accessor :end_line

      # The column number where this node ends
      attr_accessor :end_column

      # Create a new Psych::Nodes::Node
      def initialize
        @children = []
      end

      ###
      # Iterate over each node in the tree. Yields each node to +block+ depth
      # first.
      def each &block
        return enum_for :each unless block_given?
        Visitors::DepthFirst.new(block).accept self
      end

      ###
      # Convert this node to Ruby.
      #
      # See also Psych::Visitors::ToRuby
      def to_ruby(symbolize_names: false, freeze: false, strict_integer: false)
        Visitors::ToRuby.create(symbolize_names: symbolize_names, freeze: freeze, strict_integer: strict_integer).accept(self)
      end
      alias :transform :to_ruby

      ###
      # Convert this node to YAML.
      #
      # See also Psych::Visitors::Emitter
      def yaml io = nil, options = {}
        real_io = io || StringIO.new(''.encode('utf-8'))

        Visitors::Emitter.new(real_io, options).accept self
        return real_io.string unless io
        io
      end
      alias :to_yaml :yaml

      def alias?;    false; end
      def document?; false; end
      def mapping?;  false; end
      def scalar?;   false; end
      def sequence?; false; end
      def stream?;   false; end
    end
  end
end
PK "#[��'K��gems/psych-4.0.4/lib/psych/y.rbnu�[���# frozen_string_literal: true
module Kernel
  ###
  # An alias for Psych.dump_stream meant to be used with IRB.
  def y *objects
    puts Psych.dump_stream(*objects)
  end
  private :y
end

PK "#[	M�,��*gems/psych-4.0.4/lib/psych/class_loader.rbnu�[���# frozen_string_literal: true
require_relative 'omap'
require_relative 'set'

module Psych
  class ClassLoader # :nodoc:
    BIG_DECIMAL = 'BigDecimal'
    COMPLEX     = 'Complex'
    DATE        = 'Date'
    DATE_TIME   = 'DateTime'
    EXCEPTION   = 'Exception'
    OBJECT      = 'Object'
    PSYCH_OMAP  = 'Psych::Omap'
    PSYCH_SET   = 'Psych::Set'
    RANGE       = 'Range'
    RATIONAL    = 'Rational'
    REGEXP      = 'Regexp'
    STRUCT      = 'Struct'
    SYMBOL      = 'Symbol'

    def initialize
      @cache = CACHE.dup
    end

    def load klassname
      return nil if !klassname || klassname.empty?

      find klassname
    end

    def symbolize sym
      symbol
      sym.to_sym
    end

    constants.each do |const|
      konst = const_get const
      class_eval <<~RUBY
        def #{const.to_s.downcase}
          load #{konst.inspect}
        end
      RUBY
    end

    private

    def find klassname
      @cache[klassname] ||= resolve(klassname)
    end

    def resolve klassname
      name    = klassname
      retried = false

      begin
        path2class(name)
      rescue ArgumentError, NameError => ex
        unless retried
          name    = "Struct::#{name}"
          retried = ex
          retry
        end
        raise retried
      end
    end

    CACHE = Hash[constants.map { |const|
      val = const_get const
      begin
        [val, ::Object.const_get(val)]
      rescue
        nil
      end
    }.compact].freeze

    class Restricted < ClassLoader
      def initialize classes, symbols
        @classes = classes
        @symbols = symbols
        super()
      end

      def symbolize sym
        return super if @symbols.empty?

        if @symbols.include? sym
          super
        else
          raise DisallowedClass.new('load', 'Symbol')
        end
      end

      private

      def find klassname
        if @classes.include? klassname
          super
        else
          raise DisallowedClass.new('load', klassname)
        end
      end
    end
  end
end
PK "#[�2P'gems/psych-4.0.4/lib/psych/exception.rbnu�[���# frozen_string_literal: true
module Psych
  class Exception < RuntimeError
  end

  class BadAlias < Exception
  end

  class DisallowedClass < Exception
    def initialize action, klass_name
      super "Tried to #{action} unspecified class: #{klass_name}"
    end
  end
end
PK "#[MA�+��.gems/psych-4.0.4/lib/psych/visitors/visitor.rbnu�[���# frozen_string_literal: true
module Psych
  module Visitors
    class Visitor
      def accept target
        visit target
      end

      private

      # @api private
      def self.dispatch_cache
        Hash.new do |hash, klass|
          hash[klass] = :"visit_#{klass.name.gsub('::', '_')}"
        end.compare_by_identity
      end

      if defined?(Ractor)
        def dispatch
          @dispatch_cache ||= (Ractor.current[:Psych_Visitors_Visitor] ||= Visitor.dispatch_cache)
        end
      else
        DISPATCH = dispatch_cache
        def dispatch
          DISPATCH
        end
      end

      def visit target
        send dispatch[target.class], target
      end
    end
  end
end
PK "#[��{>QQ0gems/psych-4.0.4/lib/psych/visitors/json_tree.rbnu�[���# frozen_string_literal: true
require_relative '../json/ruby_events'

module Psych
  module Visitors
    class JSONTree < YAMLTree
      include Psych::JSON::RubyEvents

      def self.create options = {}
        emitter = Psych::JSON::TreeBuilder.new
        class_loader = ClassLoader.new
        ss           = ScalarScanner.new class_loader
        new(emitter, ss, options)
      end

      def accept target
        if target.respond_to?(:encode_with)
          dump_coder target
        else
          send(@dispatch_cache[target.class], target)
        end
      end
    end
  end
end
PK "#[���Z��.gems/psych-4.0.4/lib/psych/visitors/emitter.rbnu�[���# frozen_string_literal: true
module Psych
  module Visitors
    class Emitter < Psych::Visitors::Visitor
      def initialize io, options = {}
        opts = [:indentation, :canonical, :line_width].find_all { |opt|
          options.key?(opt)
        }

        if opts.empty?
          @handler = Psych::Emitter.new io
        else
          du = Handler::DumperOptions.new
          opts.each { |option| du.send :"#{option}=", options[option] }
          @handler = Psych::Emitter.new io, du
        end
      end

      def visit_Psych_Nodes_Stream o
        @handler.start_stream o.encoding
        o.children.each { |c| accept c }
        @handler.end_stream
      end

      def visit_Psych_Nodes_Document o
        @handler.start_document o.version, o.tag_directives, o.implicit
        o.children.each { |c| accept c }
        @handler.end_document o.implicit_end
      end

      def visit_Psych_Nodes_Scalar o
        @handler.scalar o.value, o.anchor, o.tag, o.plain, o.quoted, o.style
      end

      def visit_Psych_Nodes_Sequence o
        @handler.start_sequence o.anchor, o.tag, o.implicit, o.style
        o.children.each { |c| accept c }
        @handler.end_sequence
      end

      def visit_Psych_Nodes_Mapping o
        @handler.start_mapping o.anchor, o.tag, o.implicit, o.style
        o.children.each { |c| accept c }
        @handler.end_mapping
      end

      def visit_Psych_Nodes_Alias o
        @handler.alias o.anchor
      end
    end
  end
end
PK "#[R��(rr2gems/psych-4.0.4/lib/psych/visitors/depth_first.rbnu�[���# frozen_string_literal: true
module Psych
  module Visitors
    class DepthFirst < Psych::Visitors::Visitor
      def initialize block
        @block = block
      end

      private

      def nary o
        o.children.each { |x| visit x }
        @block.call o
      end
      alias :visit_Psych_Nodes_Stream   :nary
      alias :visit_Psych_Nodes_Document :nary
      alias :visit_Psych_Nodes_Sequence :nary
      alias :visit_Psych_Nodes_Mapping  :nary

      def terminal o
        @block.call o
      end
      alias :visit_Psych_Nodes_Scalar :terminal
      alias :visit_Psych_Nodes_Alias  :terminal
    end
  end
end
PK "#[$�]cAcA0gems/psych-4.0.4/lib/psych/visitors/yaml_tree.rbnu�[���# frozen_string_literal: true
require_relative '../tree_builder'
require_relative '../scalar_scanner'
require_relative '../class_loader'

module Psych
  module Visitors
    ###
    # YAMLTree builds a YAML ast given a Ruby object.  For example:
    #
    #   builder = Psych::Visitors::YAMLTree.new
    #   builder << { :foo => 'bar' }
    #   builder.tree # => #<Psych::Nodes::Stream .. }
    #
    class YAMLTree < Psych::Visitors::Visitor
      class Registrar # :nodoc:
        def initialize
          @obj_to_id   = {}
          @obj_to_node = {}
          @targets     = []
          @counter     = 0
        end

        def register target, node
          return unless target.respond_to? :object_id
          @targets << target
          @obj_to_node[target.object_id] = node
        end

        def key? target
          @obj_to_node.key? target.object_id
        rescue NoMethodError
          false
        end

        def id_for target
          @obj_to_id[target.object_id] ||= (@counter += 1)
        end

        def node_for target
          @obj_to_node[target.object_id]
        end
      end

      attr_reader :started, :finished
      alias :finished? :finished
      alias :started? :started

      def self.create options = {}, emitter = nil
        emitter      ||= TreeBuilder.new
        class_loader = ClassLoader.new
        ss           = ScalarScanner.new class_loader
        new(emitter, ss, options)
      end

      def initialize emitter, ss, options
        super()
        @started    = false
        @finished   = false
        @emitter    = emitter
        @st         = Registrar.new
        @ss         = ss
        @options    = options
        @line_width = options[:line_width]
        if @line_width && @line_width < 0
          if @line_width == -1
            # Treat -1 as unlimited line-width, same as libyaml does.
            @line_width = nil
          else
            fail(ArgumentError, "Invalid line_width #{@line_width}, must be non-negative or -1 for unlimited.")
          end
        end
        @coders     = []

        @dispatch_cache = Hash.new do |h,klass|
          method = "visit_#{(klass.name || '').split('::').join('_')}"

          method = respond_to?(method) ? method : h[klass.superclass]

          raise(TypeError, "Can't dump #{target.class}") unless method

          h[klass] = method
        end.compare_by_identity
      end

      def start encoding = Nodes::Stream::UTF8
        @emitter.start_stream(encoding).tap do
          @started = true
        end
      end

      def finish
        @emitter.end_stream.tap do
          @finished = true
        end
      end

      def tree
        finish unless finished?
        @emitter.root
      end

      def push object
        start unless started?
        version = []
        version = [1,1] if @options[:header]

        case @options[:version]
        when Array
          version = @options[:version]
        when String
          version = @options[:version].split('.').map { |x| x.to_i }
        else
          version = [1,1]
        end if @options.key? :version

        @emitter.start_document version, [], false
        accept object
        @emitter.end_document !@emitter.streaming?
      end
      alias :<< :push

      def accept target
        # return any aliases we find
        if @st.key? target
          oid         = @st.id_for target
          node        = @st.node_for target
          anchor      = oid.to_s
          node.anchor = anchor
          return @emitter.alias anchor
        end

        if target.respond_to?(:encode_with)
          dump_coder target
        else
          send(@dispatch_cache[target.class], target)
        end
      end

      def visit_Psych_Omap o
        seq = @emitter.start_sequence(nil, 'tag:yaml.org,2002:omap', false, Nodes::Sequence::BLOCK)
        register(o, seq)

        o.each { |k,v| visit_Hash k => v }
        @emitter.end_sequence
      end

      def visit_Encoding o
        tag = "!ruby/encoding"
        @emitter.scalar o.name, nil, tag, false, false, Nodes::Scalar::ANY
      end

      def visit_Object o
        tag = Psych.dump_tags[o.class]
        unless tag
          klass = o.class == Object ? nil : o.class.name
          tag   = ['!ruby/object', klass].compact.join(':')
        end

        map = @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
        register(o, map)

        dump_ivars o
        @emitter.end_mapping
      end

      alias :visit_Delegator :visit_Object

      def visit_Struct o
        tag = ['!ruby/struct', o.class.name].compact.join(':')

        register o, @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
        o.members.each do |member|
          @emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY
          accept o[member]
        end

        dump_ivars o

        @emitter.end_mapping
      end

      def visit_Exception o
        dump_exception o, o.message.to_s
      end

      def visit_NameError o
        dump_exception o, o.message.to_s
      end

      def visit_Regexp o
        register o, @emitter.scalar(o.inspect, nil, '!ruby/regexp', false, false, Nodes::Scalar::ANY)
      end

      def visit_DateTime o
        formatted = if o.offset.zero?
                      o.strftime("%Y-%m-%d %H:%M:%S.%9N Z".freeze)
                    else
                      o.strftime("%Y-%m-%d %H:%M:%S.%9N %:z".freeze)
                    end
        tag = '!ruby/object:DateTime'
        register o, @emitter.scalar(formatted, nil, tag, false, false, Nodes::Scalar::ANY)
      end

      def visit_Time o
        formatted = format_time o
        register o, @emitter.scalar(formatted, nil, nil, true, false, Nodes::Scalar::ANY)
      end

      def visit_Rational o
        register o, @emitter.start_mapping(nil, '!ruby/object:Rational', false, Nodes::Mapping::BLOCK)

        [
          'denominator', o.denominator.to_s,
          'numerator', o.numerator.to_s
        ].each do |m|
          @emitter.scalar m, nil, nil, true, false, Nodes::Scalar::ANY
        end

        @emitter.end_mapping
      end

      def visit_Complex o
        register o, @emitter.start_mapping(nil, '!ruby/object:Complex', false, Nodes::Mapping::BLOCK)

        ['real', o.real.to_s, 'image', o.imag.to_s].each do |m|
          @emitter.scalar m, nil, nil, true, false, Nodes::Scalar::ANY
        end

        @emitter.end_mapping
      end

      def visit_Integer o
        @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
      end
      alias :visit_TrueClass :visit_Integer
      alias :visit_FalseClass :visit_Integer
      alias :visit_Date :visit_Integer

      def visit_Float o
        if o.nan?
          @emitter.scalar '.nan', nil, nil, true, false, Nodes::Scalar::ANY
        elsif o.infinite?
          @emitter.scalar((o.infinite? > 0 ? '.inf' : '-.inf'),
            nil, nil, true, false, Nodes::Scalar::ANY)
        else
          @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
        end
      end

      def visit_BigDecimal o
        @emitter.scalar o._dump, nil, '!ruby/object:BigDecimal', false, false, Nodes::Scalar::ANY
      end

      def visit_String o
        plain = true
        quote = true
        style = Nodes::Scalar::PLAIN
        tag   = nil

        if binary?(o)
          o     = [o].pack('m0')
          tag   = '!binary' # FIXME: change to below when syck is removed
          #tag   = 'tag:yaml.org,2002:binary'
          style = Nodes::Scalar::LITERAL
          plain = false
          quote = false
        elsif o =~ /\n(?!\Z)/  # match \n except blank line at the end of string
          style = Nodes::Scalar::LITERAL
        elsif o == '<<'
          style = Nodes::Scalar::SINGLE_QUOTED
          tag   = 'tag:yaml.org,2002:str'
          plain = false
          quote = false
        elsif o == 'y' || o == 'n'
          style = Nodes::Scalar::DOUBLE_QUOTED
        elsif @line_width && o.length > @line_width
          style = Nodes::Scalar::FOLDED
        elsif o =~ /^[^[:word:]][^"]*$/
          style = Nodes::Scalar::DOUBLE_QUOTED
        elsif not String === @ss.tokenize(o) or /\A0[0-7]*[89]/ =~ o
          style = Nodes::Scalar::SINGLE_QUOTED
        end

        is_primitive = o.class == ::String
        ivars = is_primitive ? [] : o.instance_variables

        if ivars.empty?
          unless is_primitive
            tag = "!ruby/string:#{o.class}"
            plain = false
            quote = false
          end
          @emitter.scalar o, nil, tag, plain, quote, style
        else
          maptag = '!ruby/string'.dup
          maptag << ":#{o.class}" unless o.class == ::String

          register o, @emitter.start_mapping(nil, maptag, false, Nodes::Mapping::BLOCK)
          @emitter.scalar 'str', nil, nil, true, false, Nodes::Scalar::ANY
          @emitter.scalar o, nil, tag, plain, quote, style

          dump_ivars o

          @emitter.end_mapping
        end
      end

      def visit_Module o
        raise TypeError, "can't dump anonymous module: #{o}" unless o.name
        register o, @emitter.scalar(o.name, nil, '!ruby/module', false, false, Nodes::Scalar::SINGLE_QUOTED)
      end

      def visit_Class o
        raise TypeError, "can't dump anonymous class: #{o}" unless o.name
        register o, @emitter.scalar(o.name, nil, '!ruby/class', false, false, Nodes::Scalar::SINGLE_QUOTED)
      end

      def visit_Range o
        register o, @emitter.start_mapping(nil, '!ruby/range', false, Nodes::Mapping::BLOCK)
        ['begin', o.begin, 'end', o.end, 'excl', o.exclude_end?].each do |m|
          accept m
        end
        @emitter.end_mapping
      end

      def visit_Hash o
        if o.class == ::Hash
          register(o, @emitter.start_mapping(nil, nil, true, Psych::Nodes::Mapping::BLOCK))
          o.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping
        else
          visit_hash_subclass o
        end
      end

      def visit_Psych_Set o
        register(o, @emitter.start_mapping(nil, '!set', false, Psych::Nodes::Mapping::BLOCK))

        o.each do |k,v|
          accept k
          accept v
        end

        @emitter.end_mapping
      end

      def visit_Array o
        if o.class == ::Array
          visit_Enumerator o
        else
          visit_array_subclass o
        end
      end

      def visit_Enumerator o
        register o, @emitter.start_sequence(nil, nil, true, Nodes::Sequence::BLOCK)
        o.each { |c| accept c }
        @emitter.end_sequence
      end

      def visit_NilClass o
        @emitter.scalar('', nil, 'tag:yaml.org,2002:null', true, false, Nodes::Scalar::ANY)
      end

      def visit_Symbol o
        if o.empty?
          @emitter.scalar "", nil, '!ruby/symbol', false, false, Nodes::Scalar::ANY
        else
          @emitter.scalar ":#{o}", nil, nil, true, false, Nodes::Scalar::ANY
        end
      end

      def visit_BasicObject o
        tag = Psych.dump_tags[o.class]
        tag ||= "!ruby/marshalable:#{o.class.name}"

        map = @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
        register(o, map)

        o.marshal_dump.each(&method(:accept))

        @emitter.end_mapping
      end

      private

      def binary? string
        string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?
      end

      def visit_array_subclass o
        tag = "!ruby/array:#{o.class}"
        ivars = o.instance_variables
        if ivars.empty?
          node = @emitter.start_sequence(nil, tag, false, Nodes::Sequence::BLOCK)
          register o, node
          o.each { |c| accept c }
          @emitter.end_sequence
        else
          node = @emitter.start_mapping(nil, tag, false, Nodes::Sequence::BLOCK)
          register o, node

          # Dump the internal list
          accept 'internal'
          @emitter.start_sequence(nil, nil, true, Nodes::Sequence::BLOCK)
          o.each { |c| accept c }
          @emitter.end_sequence

          # Dump the ivars
          accept 'ivars'
          @emitter.start_mapping(nil, nil, true, Nodes::Sequence::BLOCK)
          ivars.each do |ivar|
            accept ivar
            accept o.instance_variable_get ivar
          end
          @emitter.end_mapping

          @emitter.end_mapping
        end
      end

      def visit_hash_subclass o
        ivars = o.instance_variables
        if ivars.any?
          tag = "!ruby/hash-with-ivars:#{o.class}"
          node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
          register(o, node)

          # Dump the ivars
          accept 'ivars'
          @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
          o.instance_variables.each do |ivar|
            accept ivar
            accept o.instance_variable_get ivar
          end
          @emitter.end_mapping

          # Dump the elements
          accept 'elements'
          @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
          o.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping

          @emitter.end_mapping
        else
          tag = "!ruby/hash:#{o.class}"
          node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
          register(o, node)
          o.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping
        end
      end

      def dump_list o
      end

      def dump_exception o, msg
        tag = ['!ruby/exception', o.class.name].join ':'

        @emitter.start_mapping nil, tag, false, Nodes::Mapping::BLOCK

        if msg
          @emitter.scalar 'message', nil, nil, true, false, Nodes::Scalar::ANY
          accept msg
        end

        @emitter.scalar 'backtrace', nil, nil, true, false, Nodes::Scalar::ANY
        accept o.backtrace

        dump_ivars o

        @emitter.end_mapping
      end

      def format_time time
        if time.utc?
          time.strftime("%Y-%m-%d %H:%M:%S.%9N Z")
        else
          time.strftime("%Y-%m-%d %H:%M:%S.%9N %:z")
        end
      end

      def register target, yaml_obj
        @st.register target, yaml_obj
        yaml_obj
      end

      def dump_coder o
        @coders << o
        tag = Psych.dump_tags[o.class]
        unless tag
          klass = o.class == Object ? nil : o.class.name
          tag   = ['!ruby/object', klass].compact.join(':')
        end

        c = Psych::Coder.new(tag)
        o.encode_with(c)
        emit_coder c, o
      end

      def emit_coder c, o
        case c.type
        when :scalar
          @emitter.scalar c.scalar, nil, c.tag, c.tag.nil?, false, c.style
        when :seq
          @emitter.start_sequence nil, c.tag, c.tag.nil?, c.style
          c.seq.each do |thing|
            accept thing
          end
          @emitter.end_sequence
        when :map
          register o, @emitter.start_mapping(nil, c.tag, c.implicit, c.style)
          c.map.each do |k,v|
            accept k
            accept v
          end
          @emitter.end_mapping
        when :object
          accept c.object
        end
      end

      def dump_ivars target
        target.instance_variables.each do |iv|
          @emitter.scalar("#{iv.to_s.sub(/^@/, '')}", nil, nil, true, false, Nodes::Scalar::ANY)
          accept target.instance_variable_get(iv)
        end
      end
    end

    class RestrictedYAMLTree < YAMLTree
      DEFAULT_PERMITTED_CLASSES = {
        TrueClass => true,
        FalseClass => true,
        NilClass => true,
        Integer => true,
        Float => true,
        String => true,
        Array => true,
        Hash => true,
      }.compare_by_identity.freeze

      def initialize emitter, ss, options
        super
        @permitted_classes = DEFAULT_PERMITTED_CLASSES.dup
        Array(options[:permitted_classes]).each do |klass|
          @permitted_classes[klass] = true
        end
        @permitted_symbols = {}.compare_by_identity
        Array(options[:permitted_symbols]).each do |symbol|
          @permitted_symbols[symbol] = true
        end
        @aliases = options.fetch(:aliases, false)
      end

      def accept target
        if !@aliases && @st.key?(target)
          raise BadAlias, "Tried to dump an aliased object"
        end

        unless @permitted_classes[target.class]
          raise DisallowedClass.new('dump', target.class.name || target.class.inspect)
        end

        super
      end

      def visit_Symbol sym
        unless @permitted_symbols[sym]
          raise DisallowedClass.new('dump', "Symbol(#{sym.inspect})")
        end

        super
      end
    end
  end
end
PK "#[�,��H1H1.gems/psych-4.0.4/lib/psych/visitors/to_ruby.rbnu�[���# frozen_string_literal: true
require_relative '../scalar_scanner'
require_relative '../class_loader'
require_relative '../exception'

unless defined?(Regexp::NOENCODING)
  Regexp::NOENCODING = 32
end

module Psych
  module Visitors
    ###
    # This class walks a YAML AST, converting each node to Ruby
    class ToRuby < Psych::Visitors::Visitor
      def self.create(symbolize_names: false, freeze: false, strict_integer: false)
        class_loader = ClassLoader.new
        scanner      = ScalarScanner.new class_loader, strict_integer: strict_integer
        new(scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze)
      end

      attr_reader :class_loader

      def initialize ss, class_loader, symbolize_names: false, freeze: false
        super()
        @st = {}
        @ss = ss
        @load_tags = Psych.load_tags
        @domain_types = Psych.domain_types
        @class_loader = class_loader
        @symbolize_names = symbolize_names
        @freeze = freeze
      end

      def accept target
        result = super

        unless @domain_types.empty? || !target.tag
          key = target.tag.sub(/^[!\/]*/, '').sub(/(,\d+)\//, '\1:')
          key = "tag:#{key}" unless key =~ /^(?:tag:|x-private)/

          if @domain_types.key? key
            value, block = @domain_types[key]
            result = block.call value, result
          end
        end

        result = deduplicate(result).freeze if @freeze
        result
      end

      def deserialize o
        if klass = resolve_class(@load_tags[o.tag])
          instance = klass.allocate

          if instance.respond_to?(:init_with)
            coder = Psych::Coder.new(o.tag)
            coder.scalar = o.value
            instance.init_with coder
          end

          return instance
        end

        return o.value if o.quoted
        return @ss.tokenize(o.value) unless o.tag

        case o.tag
        when '!binary', 'tag:yaml.org,2002:binary'
          o.value.unpack('m').first
        when /^!(?:str|ruby\/string)(?::(.*))?$/, 'tag:yaml.org,2002:str'
          klass = resolve_class($1)
          if klass
            klass.allocate.replace o.value
          else
            o.value
          end
        when '!ruby/object:BigDecimal'
          require 'bigdecimal' unless defined? BigDecimal
          class_loader.big_decimal._load o.value
        when "!ruby/object:DateTime"
          class_loader.date_time
          require 'date' unless defined? DateTime
          @ss.parse_time(o.value).to_datetime
        when '!ruby/encoding'
          ::Encoding.find o.value
        when "!ruby/object:Complex"
          class_loader.complex
          Complex(o.value)
        when "!ruby/object:Rational"
          class_loader.rational
          Rational(o.value)
        when "!ruby/class", "!ruby/module"
          resolve_class o.value
        when "tag:yaml.org,2002:float", "!float"
          Float(@ss.tokenize(o.value))
        when "!ruby/regexp"
          klass = class_loader.regexp
          o.value =~ /^\/(.*)\/([mixn]*)$/m
          source  = $1
          options = 0
          lang    = nil
          ($2 || '').split('').each do |option|
            case option
            when 'x' then options |= Regexp::EXTENDED
            when 'i' then options |= Regexp::IGNORECASE
            when 'm' then options |= Regexp::MULTILINE
            when 'n' then options |= Regexp::NOENCODING
            else lang = option
            end
          end
          klass.new(*[source, options, lang].compact)
        when "!ruby/range"
          klass = class_loader.range
          args = o.value.split(/([.]{2,3})/, 2).map { |s|
            accept Nodes::Scalar.new(s)
          }
          args.push(args.delete_at(1) == '...')
          klass.new(*args)
        when /^!ruby\/sym(bol)?:?(.*)?$/
          class_loader.symbolize o.value
        else
          @ss.tokenize o.value
        end
      end
      private :deserialize

      def visit_Psych_Nodes_Scalar o
        register o, deserialize(o)
      end

      def visit_Psych_Nodes_Sequence o
        if klass = resolve_class(@load_tags[o.tag])
          instance = klass.allocate

          if instance.respond_to?(:init_with)
            coder = Psych::Coder.new(o.tag)
            coder.seq = o.children.map { |c| accept c }
            instance.init_with coder
          end

          return instance
        end

        case o.tag
        when nil
          register_empty(o)
        when '!omap', 'tag:yaml.org,2002:omap'
          map = register(o, Psych::Omap.new)
          o.children.each { |a|
            map[accept(a.children.first)] = accept a.children.last
          }
          map
        when /^!(?:seq|ruby\/array):(.*)$/
          klass = resolve_class($1)
          list  = register(o, klass.allocate)
          o.children.each { |c| list.push accept c }
          list
        else
          register_empty(o)
        end
      end

      def visit_Psych_Nodes_Mapping o
        if @load_tags[o.tag]
          return revive(resolve_class(@load_tags[o.tag]), o)
        end
        return revive_hash(register(o, {}), o) unless o.tag

        case o.tag
        when /^!ruby\/struct:?(.*)?$/
          klass = resolve_class($1) if $1

          if klass
            s = register(o, klass.allocate)

            members = {}
            struct_members = s.members.map { |x| class_loader.symbolize x }
            o.children.each_slice(2) do |k,v|
              member = accept(k)
              value  = accept(v)
              if struct_members.include?(class_loader.symbolize(member))
                s.send("#{member}=", value)
              else
                members[member.to_s.sub(/^@/, '')] = value
              end
            end
            init_with(s, members, o)
          else
            klass = class_loader.struct
            members = o.children.map { |c| accept c }
            h = Hash[*members]
            s = klass.new(*h.map { |k,v|
              class_loader.symbolize k
            }).new(*h.map { |k,v| v })
            register(o, s)
            s
          end

        when /^!ruby\/object:?(.*)?$/
          name = $1 || 'Object'

          if name == 'Complex'
            class_loader.complex
            h = Hash[*o.children.map { |c| accept c }]
            register o, Complex(h['real'], h['image'])
          elsif name == 'Rational'
            class_loader.rational
            h = Hash[*o.children.map { |c| accept c }]
            register o, Rational(h['numerator'], h['denominator'])
          elsif name == 'Hash'
            revive_hash(register(o, {}), o)
          else
            obj = revive((resolve_class(name) || class_loader.object), o)
            obj
          end

        when /^!(?:str|ruby\/string)(?::(.*))?$/, 'tag:yaml.org,2002:str'
          klass   = resolve_class($1)
          members = {}
          string  = nil

          o.children.each_slice(2) do |k,v|
            key   = accept k
            value = accept v

            if key == 'str'
              if klass
                string = klass.allocate.replace value
              else
                string = value
              end
              register(o, string)
            else
              members[key] = value
            end
          end
          init_with(string, members.map { |k,v| [k.to_s.sub(/^@/, ''),v] }, o)
        when /^!ruby\/array:(.*)$/
          klass = resolve_class($1)
          list  = register(o, klass.allocate)

          members = Hash[o.children.map { |c| accept c }.each_slice(2).to_a]
          list.replace members['internal']

          members['ivars'].each do |ivar, v|
            list.instance_variable_set ivar, v
          end
          list

        when '!ruby/range'
          klass = class_loader.range
          h = Hash[*o.children.map { |c| accept c }]
          register o, klass.new(h['begin'], h['end'], h['excl'])

        when /^!ruby\/exception:?(.*)?$/
          h = Hash[*o.children.map { |c| accept c }]

          e = build_exception((resolve_class($1) || class_loader.exception),
                              h.delete('message'))

          e.set_backtrace h.delete('backtrace') if h.key? 'backtrace'
          init_with(e, h, o)

        when '!set', 'tag:yaml.org,2002:set'
          set = class_loader.psych_set.new
          @st[o.anchor] = set if o.anchor
          o.children.each_slice(2) do |k,v|
            set[accept(k)] = accept(v)
          end
          set

        when /^!ruby\/hash-with-ivars(?::(.*))?$/
          hash = $1 ? resolve_class($1).allocate : {}
          register o, hash
          o.children.each_slice(2) do |key, value|
            case key.value
            when 'elements'
              revive_hash hash, value
            when 'ivars'
              value.children.each_slice(2) do |k,v|
                hash.instance_variable_set accept(k), accept(v)
              end
            end
          end
          hash

        when /^!map:(.*)$/, /^!ruby\/hash:(.*)$/
          revive_hash register(o, resolve_class($1).allocate), o

        when '!omap', 'tag:yaml.org,2002:omap'
          map = register(o, class_loader.psych_omap.new)
          o.children.each_slice(2) do |l,r|
            map[accept(l)] = accept r
          end
          map

        when /^!ruby\/marshalable:(.*)$/
          name = $1
          klass = resolve_class(name)
          obj = register(o, klass.allocate)

          if obj.respond_to?(:init_with)
            init_with(obj, revive_hash({}, o), o)
          elsif obj.respond_to?(:marshal_load)
            marshal_data = o.children.map(&method(:accept))
            obj.marshal_load(marshal_data)
            obj
          else
            raise ArgumentError, "Cannot deserialize #{name}"
          end

        else
          revive_hash(register(o, {}), o)
        end
      end

      def visit_Psych_Nodes_Document o
        accept o.root
      end

      def visit_Psych_Nodes_Stream o
        o.children.map { |c| accept c }
      end

      def visit_Psych_Nodes_Alias o
        @st.fetch(o.anchor) { raise BadAlias, "Unknown alias: #{o.anchor}" }
      end

      private

      def register node, object
        @st[node.anchor] = object if node.anchor
        object
      end

      def register_empty object
        list = register(object, [])
        object.children.each { |c| list.push accept c }
        list
      end

      def revive_hash hash, o, tagged= false
        o.children.each_slice(2) { |k,v|
          key = accept(k)
          val = accept(v)

          if key == '<<' && k.tag != "tag:yaml.org,2002:str"
            case v
            when Nodes::Alias, Nodes::Mapping
              begin
                hash.merge! val
              rescue TypeError
                hash[key] = val
              end
            when Nodes::Sequence
              begin
                h = {}
                val.reverse_each do |value|
                  h.merge! value
                end
                hash.merge! h
              rescue TypeError
                hash[key] = val
              end
            else
              hash[key] = val
            end
          else
            if !tagged && @symbolize_names && key.is_a?(String)
              key = key.to_sym
            elsif !@freeze
              key = deduplicate(key)
            end

            hash[key] = val
          end

        }
        hash
      end

      if RUBY_VERSION < '2.7'
        def deduplicate key
          if key.is_a?(String)
            # It is important to untaint the string, otherwise it won't
            # be deduplicated into an fstring, but simply frozen.
            -(key.untaint)
          else
            key
          end
        end
      else
        def deduplicate key
          if key.is_a?(String)
            -key
          else
            key
          end
        end
      end

      def merge_key hash, key, val
      end

      def revive klass, node
        s = register(node, klass.allocate)
        init_with(s, revive_hash({}, node, true), node)
      end

      def init_with o, h, node
        c = Psych::Coder.new(node.tag)
        c.map = h

        if o.respond_to?(:init_with)
          o.init_with c
        else
          h.each { |k,v| o.instance_variable_set(:"@#{k}", v) }
        end
        o
      end

      # Convert +klassname+ to a Class
      def resolve_class klassname
        class_loader.load klassname
      end
    end

    class NoAliasRuby < ToRuby
      def visit_Psych_Nodes_Alias o
        raise BadAlias, "Unknown alias: #{o.anchor}"
      end
    end
  end
end
PK "#[r���$gems/psych-4.0.4/lib/psych/stream.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # Psych::Stream is a streaming YAML emitter.  It will not buffer your YAML,
  # but send it straight to an IO.
  #
  # Here is an example use:
  #
  #   stream = Psych::Stream.new($stdout)
  #   stream.start
  #   stream.push({:foo => 'bar'})
  #   stream.finish
  #
  # YAML will be immediately emitted to $stdout with no buffering.
  #
  # Psych::Stream#start will take a block and ensure that Psych::Stream#finish
  # is called, so you can do this form:
  #
  #   stream = Psych::Stream.new($stdout)
  #   stream.start do |em|
  #     em.push(:foo => 'bar')
  #   end
  #
  class Stream < Psych::Visitors::YAMLTree
    class Emitter < Psych::Emitter # :nodoc:
      def end_document implicit_end = !streaming?
        super
      end

      def streaming?
        true
      end
    end

    include Psych::Streaming
    extend Psych::Streaming::ClassMethods
  end
end
PK "#[��,��%gems/psych-4.0.4/lib/psych/handler.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # Psych::Handler is an abstract base class that defines the events used
  # when dealing with Psych::Parser.  Clients who want to use Psych::Parser
  # should implement a class that inherits from Psych::Handler and define
  # events that they can handle.
  #
  # Psych::Handler defines all events that Psych::Parser can possibly send to
  # event handlers.
  #
  # See Psych::Parser for more details
  class Handler
    ###
    # Configuration options for dumping YAML.
    class DumperOptions
      attr_accessor :line_width, :indentation, :canonical

      def initialize
        @line_width  = 0
        @indentation = 2
        @canonical   = false
      end
    end

    # Default dumping options
    OPTIONS = DumperOptions.new

    # Events that a Handler should respond to.
    EVENTS = [ :alias,
               :empty,
               :end_document,
               :end_mapping,
               :end_sequence,
               :end_stream,
               :scalar,
               :start_document,
               :start_mapping,
               :start_sequence,
               :start_stream ]

    ###
    # Called with +encoding+ when the YAML stream starts.  This method is
    # called once per stream.  A stream may contain multiple documents.
    #
    # See the constants in Psych::Parser for the possible values of +encoding+.
    def start_stream encoding
    end

    ###
    # Called when the document starts with the declared +version+,
    # +tag_directives+, if the document is +implicit+.
    #
    # +version+ will be an array of integers indicating the YAML version being
    # dealt with, +tag_directives+ is a list of tuples indicating the prefix
    # and suffix of each tag, and +implicit+ is a boolean indicating whether
    # the document is started implicitly.
    #
    # === Example
    #
    # Given the following YAML:
    #
    #   %YAML 1.1
    #   %TAG ! tag:tenderlovemaking.com,2009:
    #   --- !squee
    #
    # The parameters for start_document must be this:
    #
    #   version         # => [1, 1]
    #   tag_directives  # => [["!", "tag:tenderlovemaking.com,2009:"]]
    #   implicit        # => false
    def start_document version, tag_directives, implicit
    end

    ###
    # Called with the document ends.  +implicit+ is a boolean value indicating
    # whether or not the document has an implicit ending.
    #
    # === Example
    #
    # Given the following YAML:
    #
    #   ---
    #     hello world
    #
    # +implicit+ will be true.  Given this YAML:
    #
    #   ---
    #     hello world
    #   ...
    #
    # +implicit+ will be false.
    def end_document implicit
    end

    ###
    # Called when an alias is found to +anchor+.  +anchor+ will be the name
    # of the anchor found.
    #
    # === Example
    #
    # Here we have an example of an array that references itself in YAML:
    #
    #   --- &ponies
    #   - first element
    #   - *ponies
    #
    # &ponies is the anchor, *ponies is the alias.  In this case, alias is
    # called with "ponies".
    def alias anchor
    end

    ###
    # Called when a scalar +value+ is found.  The scalar may have an
    # +anchor+, a +tag+, be implicitly +plain+ or implicitly +quoted+
    #
    # +value+ is the string value of the scalar
    # +anchor+ is an associated anchor or nil
    # +tag+ is an associated tag or nil
    # +plain+ is a boolean value
    # +quoted+ is a boolean value
    # +style+ is an integer indicating the string style
    #
    # See the constants in Psych::Nodes::Scalar for the possible values of
    # +style+
    #
    # === Example
    #
    # Here is a YAML document that exercises most of the possible ways this
    # method can be called:
    #
    #   ---
    #   - !str "foo"
    #   - &anchor fun
    #   - many
    #     lines
    #   - |
    #     many
    #     newlines
    #
    # The above YAML document contains a list with four strings.  Here are
    # the parameters sent to this method in the same order:
    #
    #   # value               anchor    tag     plain   quoted  style
    #   ["foo",               nil,      "!str", false,  false,  3    ]
    #   ["fun",               "anchor", nil,    true,   false,  1    ]
    #   ["many lines",        nil,      nil,    true,   false,  1    ]
    #   ["many\nnewlines\n",  nil,      nil,    false,  true,   4    ]
    #
    def scalar value, anchor, tag, plain, quoted, style
    end

    ###
    # Called when a sequence is started.
    #
    # +anchor+ is the anchor associated with the sequence or nil.
    # +tag+ is the tag associated with the sequence or nil.
    # +implicit+ a boolean indicating whether or not the sequence was implicitly
    # started.
    # +style+ is an integer indicating the list style.
    #
    # See the constants in Psych::Nodes::Sequence for the possible values of
    # +style+.
    #
    # === Example
    #
    # Here is a YAML document that exercises most of the possible ways this
    # method can be called:
    #
    #   ---
    #   - !!seq [
    #     a
    #   ]
    #   - &pewpew
    #     - b
    #
    # The above YAML document consists of three lists, an outer list that
    # contains two inner lists.  Here is a matrix of the parameters sent
    # to represent these lists:
    #
    #   # anchor    tag                       implicit  style
    #   [nil,       nil,                      true,     1     ]
    #   [nil,       "tag:yaml.org,2002:seq",  false,    2     ]
    #   ["pewpew",  nil,                      true,     1     ]

    def start_sequence anchor, tag, implicit, style
    end

    ###
    # Called when a sequence ends.
    def end_sequence
    end

    ###
    # Called when a map starts.
    #
    # +anchor+ is the anchor associated with the map or +nil+.
    # +tag+ is the tag associated with the map or +nil+.
    # +implicit+ is a boolean indicating whether or not the map was implicitly
    # started.
    # +style+ is an integer indicating the mapping style.
    #
    # See the constants in Psych::Nodes::Mapping for the possible values of
    # +style+.
    #
    # === Example
    #
    # Here is a YAML document that exercises most of the possible ways this
    # method can be called:
    #
    #   ---
    #   k: !!map { hello: world }
    #   v: &pewpew
    #     hello: world
    #
    # The above YAML document consists of three maps, an outer map that contains
    # two inner maps.  Below is a matrix of the parameters sent in order to
    # represent these three maps:
    #
    #   # anchor    tag                       implicit  style
    #   [nil,       nil,                      true,     1     ]
    #   [nil,       "tag:yaml.org,2002:map",  false,    2     ]
    #   ["pewpew",  nil,                      true,     1     ]

    def start_mapping anchor, tag, implicit, style
    end

    ###
    # Called when a map ends
    def end_mapping
    end

    ###
    # Called when an empty event happens. (Which, as far as I can tell, is
    # never).
    def empty
    end

    ###
    # Called when the YAML stream ends
    def end_stream
    end

    ###
    # Called before each event with line/column information.
    def event_location(start_line, start_column, end_line, end_column)
    end

    ###
    # Is this handler a streaming handler?
    def streaming?
      false
    end
  end
end
PK "#[*JJ!gems/psych-4.0.4/lib/psych/set.rbnu�[���# frozen_string_literal: true
module Psych
  class Set < ::Hash
  end
end
PK!"#[:�6gems/psych-4.0.4/lib/psych/handlers/document_stream.rbnu�[���# frozen_string_literal: true
require_relative '../tree_builder'

module Psych
  module Handlers
    class DocumentStream < Psych::TreeBuilder # :nodoc:
      def initialize &block
        super
        @block = block
      end

      def start_document version, tag_directives, implicit
        n = Nodes::Document.new version, tag_directives, implicit
        push n
      end

      def end_document implicit_end = !streaming?
        @last.implicit_end = implicit_end
        @block.call pop
      end
    end
  end
end
PK!"#[.�^{{/gems/psych-4.0.4/lib/psych/handlers/recorder.rbnu�[���# frozen_string_literal: true
require_relative '../handler'

module Psych
  module Handlers
    ###
    # This handler will capture an event and record the event.  Recorder events
    # are available vial Psych::Handlers::Recorder#events.
    #
    # For example:
    #
    #   recorder = Psych::Handlers::Recorder.new
    #   parser = Psych::Parser.new recorder
    #   parser.parse '--- foo'
    #
    #   recorder.events # => [list of events]
    #
    #   # Replay the events
    #
    #   emitter = Psych::Emitter.new $stdout
    #   recorder.events.each do |m, args|
    #     emitter.send m, *args
    #   end

    class Recorder < Psych::Handler
      attr_reader :events

      def initialize
        @events = []
        super
      end

      EVENTS.each do |event|
        define_method event do |*args|
          @events << [event, args]
        end
      end
    end
  end
end
PK!"#[���KK"gems/psych-4.0.4/lib/psych/omap.rbnu�[���# frozen_string_literal: true
module Psych
  class Omap < ::Hash
  end
end
PK!"#[/��	�	#gems/psych-4.0.4/lib/psych/nodes.rbnu�[���# frozen_string_literal: true
require_relative 'nodes/node'
require_relative 'nodes/stream'
require_relative 'nodes/document'
require_relative 'nodes/sequence'
require_relative 'nodes/scalar'
require_relative 'nodes/mapping'
require_relative 'nodes/alias'

module Psych
  ###
  # = Overview
  #
  # When using Psych.load to deserialize a YAML document, the document is
  # translated to an intermediary AST.  That intermediary AST is then
  # translated in to a Ruby object graph.
  #
  # In the opposite direction, when using Psych.dump, the Ruby object graph is
  # translated to an intermediary AST which is then converted to a YAML
  # document.
  #
  # Psych::Nodes contains all of the classes that make up the nodes of a YAML
  # AST.  You can manually build an AST and use one of the visitors (see
  # Psych::Visitors) to convert that AST to either a YAML document or to a
  # Ruby object graph.
  #
  # Here is an example of building an AST that represents a list with one
  # scalar:
  #
  #   # Create our nodes
  #   stream = Psych::Nodes::Stream.new
  #   doc    = Psych::Nodes::Document.new
  #   seq    = Psych::Nodes::Sequence.new
  #   scalar = Psych::Nodes::Scalar.new('foo')
  #
  #   # Build up our tree
  #   stream.children << doc
  #   doc.children    << seq
  #   seq.children    << scalar
  #
  # The stream is the root of the tree.  We can then convert the tree to YAML:
  #
  #   stream.to_yaml => "---\n- foo\n"
  #
  # Or convert it to Ruby:
  #
  #   stream.to_ruby => [["foo"]]
  #
  # == YAML AST Requirements
  #
  # A valid YAML AST *must* have one Psych::Nodes::Stream at the root.  A
  # Psych::Nodes::Stream node must have 1 or more Psych::Nodes::Document nodes
  # as children.
  #
  # Psych::Nodes::Document nodes must have one and *only* one child.  That child
  # may be one of:
  #
  # * Psych::Nodes::Sequence
  # * Psych::Nodes::Mapping
  # * Psych::Nodes::Scalar
  #
  # Psych::Nodes::Sequence and Psych::Nodes::Mapping nodes may have many
  # children, but Psych::Nodes::Mapping nodes should have an even number of
  # children.
  #
  # All of these are valid children for Psych::Nodes::Sequence and
  # Psych::Nodes::Mapping nodes:
  #
  # * Psych::Nodes::Sequence
  # * Psych::Nodes::Mapping
  # * Psych::Nodes::Scalar
  # * Psych::Nodes::Alias
  #
  # Psych::Nodes::Scalar and Psych::Nodes::Alias are both terminal nodes and
  # should not have any children.
  module Nodes
  end
end
PK!"#[u�>22#gems/psych-4.0.4/lib/psych/coder.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # If an object defines +encode_with+, then an instance of Psych::Coder will
  # be passed to the method when the object is being serialized.  The Coder
  # automatically assumes a Psych::Nodes::Mapping is being emitted.  Other
  # objects like Sequence and Scalar may be emitted if +seq=+ or +scalar=+ are
  # called, respectively.
  class Coder
    attr_accessor :tag, :style, :implicit, :object
    attr_reader   :type, :seq

    def initialize tag
      @map      = {}
      @seq      = []
      @implicit = false
      @type     = :map
      @tag      = tag
      @style    = Psych::Nodes::Mapping::BLOCK
      @scalar   = nil
      @object   = nil
    end

    def scalar *args
      if args.length > 0
        warn "#{caller[0]}: Coder#scalar(a,b,c) is deprecated" if $VERBOSE
        @tag, @scalar, _ = args
        @type = :scalar
      end
      @scalar
    end

    # Emit a map.  The coder will be yielded to the block.
    def map tag = @tag, style = @style
      @tag   = tag
      @style = style
      yield self if block_given?
      @map
    end

    # Emit a scalar with +value+ and +tag+
    def represent_scalar tag, value
      self.tag    = tag
      self.scalar = value
    end

    # Emit a sequence with +list+ and +tag+
    def represent_seq tag, list
      @tag = tag
      self.seq = list
    end

    # Emit a sequence with +map+ and +tag+
    def represent_map tag, map
      @tag = tag
      self.map = map
    end

    # Emit an arbitrary object +obj+ and +tag+
    def represent_object tag, obj
      @tag    = tag
      @type   = :object
      @object = obj
    end

    # Emit a scalar with +value+
    def scalar= value
      @type   = :scalar
      @scalar = value
    end

    # Emit a map with +value+
    def map= map
      @type = :map
      @map  = map
    end

    def []= k, v
      @type = :map
      @map[k] = v
    end
    alias :add :[]=

    def [] k
      @type = :map
      @map[k]
    end

    # Emit a sequence of +list+
    def seq= list
      @type = :seq
      @seq  = list
    end
  end
end
PK!"#[�!����*gems/psych-4.0.4/lib/psych/tree_builder.rbnu�[���# frozen_string_literal: true
require_relative 'handler'

module Psych
  ###
  # This class works in conjunction with Psych::Parser to build an in-memory
  # parse tree that represents a YAML document.
  #
  # == Example
  #
  #   parser = Psych::Parser.new Psych::TreeBuilder.new
  #   parser.parse('--- foo')
  #   tree = parser.handler.root
  #
  # See Psych::Handler for documentation on the event methods used in this
  # class.
  class TreeBuilder < Psych::Handler
    # Returns the root node for the built tree
    attr_reader :root

    # Create a new TreeBuilder instance
    def initialize
      @stack = []
      @last  = nil
      @root  = nil

      @start_line   = nil
      @start_column = nil
      @end_line     = nil
      @end_column   = nil
    end

    def event_location(start_line, start_column, end_line, end_column)
      @start_line   = start_line
      @start_column = start_column
      @end_line     = end_line
      @end_column   = end_column
    end

    %w{
      Sequence
      Mapping
    }.each do |node|
      class_eval %{
        def start_#{node.downcase}(anchor, tag, implicit, style)
          n = Nodes::#{node}.new(anchor, tag, implicit, style)
          set_start_location(n)
          @last.children << n
          push n
        end

        def end_#{node.downcase}
          n = pop
          set_end_location(n)
          n
        end
      }
    end

    ###
    # Handles start_document events with +version+, +tag_directives+,
    # and +implicit+ styling.
    #
    # See Psych::Handler#start_document
    def start_document version, tag_directives, implicit
      n = Nodes::Document.new version, tag_directives, implicit
      set_start_location(n)
      @last.children << n
      push n
    end

    ###
    # Handles end_document events with +version+, +tag_directives+,
    # and +implicit+ styling.
    #
    # See Psych::Handler#start_document
    def end_document implicit_end = !streaming?
      @last.implicit_end = implicit_end
      n = pop
      set_end_location(n)
      n
    end

    def start_stream encoding
      @root = Nodes::Stream.new(encoding)
      set_start_location(@root)
      push @root
    end

    def end_stream
      n = pop
      set_end_location(n)
      n
    end

    def scalar value, anchor, tag, plain, quoted, style
      s = Nodes::Scalar.new(value,anchor,tag,plain,quoted,style)
      set_location(s)
      @last.children << s
      s
    end

    def alias anchor
      a = Nodes::Alias.new(anchor)
      set_location(a)
      @last.children << a
      a
    end

    private
    def push value
      @stack.push value
      @last = value
    end

    def pop
      x = @stack.pop
      @last = @stack.last
      x
    end

    def set_location(node)
      set_start_location(node)
      set_end_location(node)
    end

    def set_start_location(node)
      node.start_line   = @start_line
      node.start_column = @start_column
    end

    def set_end_location(node)
      node.end_line   = @end_line
      node.end_column = @end_column
    end
  end
end
PK!"#[g��jj&gems/psych-4.0.4/lib/psych/core_ext.rbnu�[���# frozen_string_literal: true
class Object
  def self.yaml_tag url
    Psych.add_tag(url, self)
  end

  ###
  # call-seq: to_yaml(options = {})
  #
  # Convert an object to YAML.  See Psych.dump for more information on the
  # available +options+.
  def to_yaml options = {}
    Psych.dump self, options
  end
end

if defined?(::IRB)
  require_relative 'y'
end
PK!"#[�y2K��'gems/psych-4.0.4/lib/psych/streaming.rbnu�[���# frozen_string_literal: true
module Psych
  module Streaming
    module ClassMethods
      ###
      # Create a new streaming emitter.  Emitter will print to +io+.  See
      # Psych::Stream for an example.
      def new io
        emitter      = const_get(:Emitter).new(io)
        class_loader = ClassLoader.new
        ss           = ScalarScanner.new class_loader
        super(emitter, ss, {})
      end
    end

    ###
    # Start streaming using +encoding+
    def start encoding = Nodes::Stream::UTF8
      super.tap { yield self if block_given?  }
    ensure
      finish if block_given?
    end

    private
    def register target, obj
    end
  end
end
PK!"#[H��LL*gems/psych-4.0.4/lib/psych/syntax_error.rbnu�[���# frozen_string_literal: true
require_relative 'exception'

module Psych
  class SyntaxError < Psych::Exception
    attr_reader :file, :line, :column, :offset, :problem, :context

    def initialize file, line, col, offset, problem, context
      err      = [problem, context].compact.join ' '
      filename = file || '<unknown>'
      message  = "(%s): %s at line %d column %d" % [filename, err, line, col]

      @file    = file
      @line    = line
      @column  = col
      @offset  = offset
      @problem = problem
      @context = context
      super(message)
    end
  end
end
PK!"#[��.gems/psych-4.0.4/lib/psych/json/yaml_events.rbnu�[���# frozen_string_literal: true
module Psych
  module JSON
    module YAMLEvents # :nodoc:
      def start_document version, tag_directives, implicit
        super(version, tag_directives, !streaming?)
      end

      def end_document implicit_end = !streaming?
        super(implicit_end)
      end

      def start_mapping anchor, tag, implicit, style
        super(anchor, nil, true, Nodes::Mapping::FLOW)
      end

      def start_sequence anchor, tag, implicit, style
        super(anchor, nil, true, Nodes::Sequence::FLOW)
      end

      def scalar value, anchor, tag, plain, quoted, style
        if "tag:yaml.org,2002:null" == tag
          super('null', nil, nil, true, false, Nodes::Scalar::PLAIN)
        else
          super
        end
      end
    end
  end
end
PK!"#[��:���)gems/psych-4.0.4/lib/psych/json/stream.rbnu�[���# frozen_string_literal: true
require_relative 'ruby_events'
require_relative 'yaml_events'

module Psych
  module JSON
    class Stream < Psych::Visitors::JSONTree
      include Psych::JSON::RubyEvents
      include Psych::Streaming
      extend Psych::Streaming::ClassMethods

      class Emitter < Psych::Stream::Emitter # :nodoc:
        include Psych::JSON::YAMLEvents
      end
    end
  end
end
PK!"#[�����.gems/psych-4.0.4/lib/psych/json/ruby_events.rbnu�[���# frozen_string_literal: true
module Psych
  module JSON
    module RubyEvents # :nodoc:
      def visit_Time o
        formatted = format_time o
        @emitter.scalar formatted, nil, nil, false, true, Nodes::Scalar::DOUBLE_QUOTED
      end

      def visit_DateTime o
        visit_Time o.to_time
      end

      def visit_String o
        @emitter.scalar o.to_s, nil, nil, false, true, Nodes::Scalar::DOUBLE_QUOTED
      end
      alias :visit_Symbol :visit_String
    end
  end
end
PK!"#[�Хcc/gems/psych-4.0.4/lib/psych/json/tree_builder.rbnu�[���# frozen_string_literal: true
require_relative 'yaml_events'

module Psych
  module JSON
    ###
    # Psych::JSON::TreeBuilder is an event based AST builder.  Events are sent
    # to an instance of Psych::JSON::TreeBuilder and a JSON AST is constructed.
    class TreeBuilder < Psych::TreeBuilder
      include Psych::JSON::YAMLEvents
    end
  end
end
PK!"#[��R:��&gems/psych-4.0.4/lib/psych/visitors.rbnu�[���# frozen_string_literal: true
require_relative 'visitors/visitor'
require_relative 'visitors/to_ruby'
require_relative 'visitors/emitter'
require_relative 'visitors/yaml_tree'
require_relative 'visitors/json_tree'
require_relative 'visitors/depth_first'
PK!"#["5x��,gems/psych-4.0.4/lib/psych/scalar_scanner.rbnu�[���# frozen_string_literal: true

module Psych
  ###
  # Scan scalars for built in types
  class ScalarScanner
    # Taken from http://yaml.org/type/timestamp.html
    TIME = /^-?\d{4}-\d{1,2}-\d{1,2}(?:[Tt]|\s+)\d{1,2}:\d\d:\d\d(?:\.\d*)?(?:\s*(?:Z|[-+]\d{1,2}:?(?:\d\d)?))?$/

    # Taken from http://yaml.org/type/float.html
    # Base 60, [-+]inf and NaN are handled separately
    FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10))$/x

    # Taken from http://yaml.org/type/int.html
    INTEGER_STRICT = /^(?:[-+]?0b[0-1_]+                  (?# base 2)
                         |[-+]?0[0-7_]+                   (?# base 8)
                         |[-+]?(0|[1-9][0-9_]*)           (?# base 10)
                         |[-+]?0x[0-9a-fA-F_]+            (?# base 16))$/x

    # Same as above, but allows commas.
    # Not to YML spec, but kept for backwards compatibility
    INTEGER_LEGACY = /^(?:[-+]?0b[0-1_,]+                        (?# base 2)
                         |[-+]?0[0-7_,]+                         (?# base 8)
                         |[-+]?(?:0|[1-9](?:[0-9]|,[0-9]|_[0-9])*) (?# base 10)
                         |[-+]?0x[0-9a-fA-F_,]+                  (?# base 16))$/x

    attr_reader :class_loader

    # Create a new scanner
    def initialize class_loader, strict_integer: false
      @symbol_cache = {}
      @class_loader = class_loader
      @strict_integer = strict_integer
    end

    # Tokenize +string+ returning the Ruby object
    def tokenize string
      return nil if string.empty?
      return @symbol_cache[string] if @symbol_cache.key?(string)
      integer_regex = @strict_integer ? INTEGER_STRICT : INTEGER_LEGACY
      # Check for a String type, being careful not to get caught by hash keys, hex values, and
      # special floats (e.g., -.inf).
      if string.match?(%r{^[^\d.:-]?[[:alpha:]_\s!@#$%\^&*(){}<>|/\\~;=]+}) || string.match?(/\n/)
        return string if string.length > 5

        if string.match?(/^[^ytonf~]/i)
          string
        elsif string == '~' || string.match?(/^null$/i)
          nil
        elsif string.match?(/^(yes|true|on)$/i)
          true
        elsif string.match?(/^(no|false|off)$/i)
          false
        else
          string
        end
      elsif string.match?(TIME)
        begin
          parse_time string
        rescue ArgumentError
          string
        end
      elsif string.match?(/^\d{4}-(?:1[012]|0\d|\d)-(?:[12]\d|3[01]|0\d|\d)$/)
        require 'date'
        begin
          class_loader.date.strptime(string, '%Y-%m-%d')
        rescue ArgumentError
          string
        end
      elsif string.match?(/^\+?\.inf$/i)
        Float::INFINITY
      elsif string.match?(/^-\.inf$/i)
        -Float::INFINITY
      elsif string.match?(/^\.nan$/i)
        Float::NAN
      elsif string.match?(/^:./)
        if string =~ /^:(["'])(.*)\1/
          @symbol_cache[string] = class_loader.symbolize($2.sub(/^:/, ''))
        else
          @symbol_cache[string] = class_loader.symbolize(string.sub(/^:/, ''))
        end
      elsif string.match?(/^[-+]?[0-9][0-9_]*(:[0-5]?[0-9]){1,2}$/)
        i = 0
        string.split(':').each_with_index do |n,e|
          i += (n.to_i * 60 ** (e - 2).abs)
        end
        i
      elsif string.match?(/^[-+]?[0-9][0-9_]*(:[0-5]?[0-9]){1,2}\.[0-9_]*$/)
        i = 0
        string.split(':').each_with_index do |n,e|
          i += (n.to_f * 60 ** (e - 2).abs)
        end
        i
      elsif string.match?(FLOAT)
        if string.match?(/\A[-+]?\.\Z/)
          string
        else
          Float(string.delete(',_').gsub(/\.([Ee]|$)/, '\1'))
        end
      elsif string.match?(integer_regex)
        parse_int string
      else
        string
      end
    end

    ###
    # Parse and return an int from +string+
    def parse_int string
      Integer(string.delete(',_'))
    end

    ###
    # Parse and return a Time from +string+
    def parse_time string
      klass = class_loader.load 'Time'

      date, time = *(string.split(/[ tT]/, 2))
      (yy, m, dd) = date.match(/^(-?\d{4})-(\d{1,2})-(\d{1,2})/).captures.map { |x| x.to_i }
      md = time.match(/(\d+:\d+:\d+)(?:\.(\d*))?\s*(Z|[-+]\d+(:\d\d)?)?/)

      (hh, mm, ss) = md[1].split(':').map { |x| x.to_i }
      us = (md[2] ? Rational("0.#{md[2]}") : 0) * 1000000

      time = klass.utc(yy, m, dd, hh, mm, ss, us)

      return time if 'Z' == md[3]
      return klass.at(time.to_i, us) unless md[3]

      tz = md[3].match(/^([+\-]?\d{1,2})\:?(\d{1,2})?$/)[1..-1].compact.map { |digit| Integer(digit, 10) }
      offset = tz.first * 3600

      if offset < 0
        offset -= ((tz[1] || 0) * 60)
      else
        offset += ((tz[1] || 0) * 60)
      end

      klass.new(yy, m, dd, hh, mm, ss+us/(1_000_000r), offset)
    end
  end
end
PK!"#[��[��$gems/psych-4.0.4/lib/psych/parser.rbnu�[���# frozen_string_literal: true
module Psych
  ###
  # YAML event parser class.  This class parses a YAML document and calls
  # events on the handler that is passed to the constructor.  The events can
  # be used for things such as constructing a YAML AST or deserializing YAML
  # documents.  It can even be fed back to Psych::Emitter to emit the same
  # document that was parsed.
  #
  # See Psych::Handler for documentation on the events that Psych::Parser emits.
  #
  # Here is an example that prints out ever scalar found in a YAML document:
  #
  #   # Handler for detecting scalar values
  #   class ScalarHandler < Psych::Handler
  #     def scalar value, anchor, tag, plain, quoted, style
  #       puts value
  #     end
  #   end
  #
  #   parser = Psych::Parser.new(ScalarHandler.new)
  #   parser.parse(yaml_document)
  #
  # Here is an example that feeds the parser back in to Psych::Emitter.  The
  # YAML document is read from STDIN and written back out to STDERR:
  #
  #   parser = Psych::Parser.new(Psych::Emitter.new($stderr))
  #   parser.parse($stdin)
  #
  # Psych uses Psych::Parser in combination with Psych::TreeBuilder to
  # construct an AST of the parsed YAML document.

  class Parser
    class Mark < Struct.new(:index, :line, :column)
    end

    # The handler on which events will be called
    attr_accessor :handler

    # Set the encoding for this parser to +encoding+
    attr_writer :external_encoding

    ###
    # Creates a new Psych::Parser instance with +handler+.  YAML events will
    # be called on +handler+.  See Psych::Parser for more details.

    def initialize handler = Handler.new
      @handler = handler
      @external_encoding = ANY
    end
  end
end
PK!"#[���obobgems/psych-4.0.4/lib/psych.rbnu�[���# frozen_string_literal: true
require_relative 'psych/versions'
case RUBY_ENGINE
when 'jruby'
  require_relative 'psych_jars'
  if JRuby::Util.respond_to?(:load_ext)
    JRuby::Util.load_ext('org.jruby.ext.psych.PsychLibrary')
  else
    require 'java'; require 'jruby'
    org.jruby.ext.psych.PsychLibrary.new.load(JRuby.runtime, false)
  end
else
  require 'psych.so'
end
require_relative 'psych/nodes'
require_relative 'psych/streaming'
require_relative 'psych/visitors'
require_relative 'psych/handler'
require_relative 'psych/tree_builder'
require_relative 'psych/parser'
require_relative 'psych/omap'
require_relative 'psych/set'
require_relative 'psych/coder'
require_relative 'psych/core_ext'
require_relative 'psych/stream'
require_relative 'psych/json/tree_builder'
require_relative 'psych/json/stream'
require_relative 'psych/handlers/document_stream'
require_relative 'psych/class_loader'

###
# = Overview
#
# Psych is a YAML parser and emitter.
# Psych leverages libyaml [Home page: https://pyyaml.org/wiki/LibYAML]
# or [git repo: https://github.com/yaml/libyaml] for its YAML parsing
# and emitting capabilities. In addition to wrapping libyaml, Psych also
# knows how to serialize and de-serialize most Ruby objects to and from
# the YAML format.
#
# = I NEED TO PARSE OR EMIT YAML RIGHT NOW!
#
#   # Parse some YAML
#   Psych.load("--- foo") # => "foo"
#
#   # Emit some YAML
#   Psych.dump("foo")     # => "--- foo\n...\n"
#   { :a => 'b'}.to_yaml  # => "---\n:a: b\n"
#
# Got more time on your hands?  Keep on reading!
#
# == YAML Parsing
#
# Psych provides a range of interfaces for parsing a YAML document ranging from
# low level to high level, depending on your parsing needs.  At the lowest
# level, is an event based parser.  Mid level is access to the raw YAML AST,
# and at the highest level is the ability to unmarshal YAML to Ruby objects.
#
# == YAML Emitting
#
# Psych provides a range of interfaces ranging from low to high level for
# producing YAML documents.  Very similar to the YAML parsing interfaces, Psych
# provides at the lowest level, an event based system, mid-level is building
# a YAML AST, and the highest level is converting a Ruby object straight to
# a YAML document.
#
# == High-level API
#
# === Parsing
#
# The high level YAML parser provided by Psych simply takes YAML as input and
# returns a Ruby data structure.  For information on using the high level parser
# see Psych.load
#
# ==== Reading from a string
#
#   Psych.safe_load("--- a")             # => 'a'
#   Psych.safe_load("---\n - a\n - b")   # => ['a', 'b']
#   # From a trusted string:
#   Psych.load("--- !ruby/range\nbegin: 0\nend: 42\nexcl: false\n") # => 0..42
#
# ==== Reading from a file
#
#   Psych.safe_load_file("data.yml", permitted_classes: [Date])
#   Psych.load_file("trusted_database.yml")
#
# ==== Exception handling
#
#   begin
#     # The second argument changes only the exception contents
#     Psych.parse("--- `", "file.txt")
#   rescue Psych::SyntaxError => ex
#     ex.file    # => 'file.txt'
#     ex.message # => "(file.txt): found character that cannot start any token"
#   end
#
# === Emitting
#
# The high level emitter has the easiest interface.  Psych simply takes a Ruby
# data structure and converts it to a YAML document.  See Psych.dump for more
# information on dumping a Ruby data structure.
#
# ==== Writing to a string
#
#   # Dump an array, get back a YAML string
#   Psych.dump(['a', 'b'])  # => "---\n- a\n- b\n"
#
#   # Dump an array to an IO object
#   Psych.dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>
#
#   # Dump an array with indentation set
#   Psych.dump(['a', ['b']], :indentation => 3) # => "---\n- a\n-  - b\n"
#
#   # Dump an array to an IO with indentation set
#   Psych.dump(['a', ['b']], StringIO.new, :indentation => 3)
#
# ==== Writing to a file
#
# Currently there is no direct API for dumping Ruby structure to file:
#
#   File.open('database.yml', 'w') do |file|
#     file.write(Psych.dump(['a', 'b']))
#   end
#
# == Mid-level API
#
# === Parsing
#
# Psych provides access to an AST produced from parsing a YAML document.  This
# tree is built using the Psych::Parser and Psych::TreeBuilder.  The AST can
# be examined and manipulated freely.  Please see Psych::parse_stream,
# Psych::Nodes, and Psych::Nodes::Node for more information on dealing with
# YAML syntax trees.
#
# ==== Reading from a string
#
#   # Returns Psych::Nodes::Stream
#   Psych.parse_stream("---\n - a\n - b")
#
#   # Returns Psych::Nodes::Document
#   Psych.parse("---\n - a\n - b")
#
# ==== Reading from a file
#
#   # Returns Psych::Nodes::Stream
#   Psych.parse_stream(File.read('database.yml'))
#
#   # Returns Psych::Nodes::Document
#   Psych.parse_file('database.yml')
#
# ==== Exception handling
#
#   begin
#     # The second argument changes only the exception contents
#     Psych.parse("--- `", "file.txt")
#   rescue Psych::SyntaxError => ex
#     ex.file    # => 'file.txt'
#     ex.message # => "(file.txt): found character that cannot start any token"
#   end
#
# === Emitting
#
# At the mid level is building an AST.  This AST is exactly the same as the AST
# used when parsing a YAML document.  Users can build an AST by hand and the
# AST knows how to emit itself as a YAML document.  See Psych::Nodes,
# Psych::Nodes::Node, and Psych::TreeBuilder for more information on building
# a YAML AST.
#
# ==== Writing to a string
#
#   # We need Psych::Nodes::Stream (not Psych::Nodes::Document)
#   stream = Psych.parse_stream("---\n - a\n - b")
#
#   stream.to_yaml # => "---\n- a\n- b\n"
#
# ==== Writing to a file
#
#   # We need Psych::Nodes::Stream (not Psych::Nodes::Document)
#   stream = Psych.parse_stream(File.read('database.yml'))
#
#   File.open('database.yml', 'w') do |file|
#     file.write(stream.to_yaml)
#   end
#
# == Low-level API
#
# === Parsing
#
# The lowest level parser should be used when the YAML input is already known,
# and the developer does not want to pay the price of building an AST or
# automatic detection and conversion to Ruby objects.  See Psych::Parser for
# more information on using the event based parser.
#
# ==== Reading to Psych::Nodes::Stream structure
#
#   parser = Psych::Parser.new(TreeBuilder.new) # => #<Psych::Parser>
#   parser = Psych.parser                       # it's an alias for the above
#
#   parser.parse("---\n - a\n - b")             # => #<Psych::Parser>
#   parser.handler                              # => #<Psych::TreeBuilder>
#   parser.handler.root                         # => #<Psych::Nodes::Stream>
#
# ==== Receiving an events stream
#
#   recorder = Psych::Handlers::Recorder.new
#   parser = Psych::Parser.new(recorder)
#
#   parser.parse("---\n - a\n - b")
#   recorder.events # => [list of [event, args] lists]
#                   # event is one of: Psych::Handler::EVENTS
#                   # args are the arguments passed to the event
#
# === Emitting
#
# The lowest level emitter is an event based system.  Events are sent to a
# Psych::Emitter object.  That object knows how to convert the events to a YAML
# document.  This interface should be used when document format is known in
# advance or speed is a concern.  See Psych::Emitter for more information.
#
# ==== Writing to a Ruby structure
#
#   Psych.parser.parse("--- a")       # => #<Psych::Parser>
#
#   parser.handler.first              # => #<Psych::Nodes::Stream>
#   parser.handler.first.to_ruby      # => ["a"]
#
#   parser.handler.root.first         # => #<Psych::Nodes::Document>
#   parser.handler.root.first.to_ruby # => "a"
#
#   # You can instantiate an Emitter manually
#   Psych::Visitors::ToRuby.new.accept(parser.handler.root.first)
#   # => "a"

module Psych
  # The version of libyaml Psych is using
  LIBYAML_VERSION = Psych.libyaml_version.join('.').freeze

  ###
  # Load +yaml+ in to a Ruby data structure.  If multiple documents are
  # provided, the object contained in the first document will be returned.
  # +filename+ will be used in the exception message if any exception
  # is raised while parsing.  If +yaml+ is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.unsafe_load("--- a")             # => 'a'
  #   Psych.unsafe_load("---\n - a\n - b")   # => ['a', 'b']
  #
  #   begin
  #     Psych.unsafe_load("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # When the optional +symbolize_names+ keyword argument is set to a
  # true value, returns symbols for keys in Hash objects (default: strings).
  #
  #   Psych.unsafe_load("---\n foo: bar")                         # => {"foo"=>"bar"}
  #   Psych.unsafe_load("---\n foo: bar", symbolize_names: true)  # => {:foo=>"bar"}
  #
  # Raises a TypeError when `yaml` parameter is NilClass
  #
  # NOTE: This method *should not* be used to parse untrusted documents, such as
  # YAML documents that are supplied via user input.  Instead, please use the
  # load method or the safe_load method.
  #
  def self.unsafe_load yaml, filename: nil, fallback: false, symbolize_names: false, freeze: false, strict_integer: false
    result = parse(yaml, filename: filename)
    return fallback unless result
    result.to_ruby(symbolize_names: symbolize_names, freeze: freeze, strict_integer: strict_integer)
  end

  ###
  # Safely load the yaml string in +yaml+.  By default, only the following
  # classes are allowed to be deserialized:
  #
  # * TrueClass
  # * FalseClass
  # * NilClass
  # * Integer
  # * Float
  # * String
  # * Array
  # * Hash
  #
  # Recursive data structures are not allowed by default.  Arbitrary classes
  # can be allowed by adding those classes to the +permitted_classes+ keyword argument.  They are
  # additive.  For example, to allow Date deserialization:
  #
  #   Psych.safe_load(yaml, permitted_classes: [Date])
  #
  # Now the Date class can be loaded in addition to the classes listed above.
  #
  # Aliases can be explicitly allowed by changing the +aliases+ keyword argument.
  # For example:
  #
  #   x = []
  #   x << x
  #   yaml = Psych.dump x
  #   Psych.safe_load yaml               # => raises an exception
  #   Psych.safe_load yaml, aliases: true # => loads the aliases
  #
  # A Psych::DisallowedClass exception will be raised if the yaml contains a
  # class that isn't in the +permitted_classes+ list.
  #
  # A Psych::BadAlias exception will be raised if the yaml contains aliases
  # but the +aliases+ keyword argument is set to false.
  #
  # +filename+ will be used in the exception message if any exception is raised
  # while parsing.
  #
  # When the optional +symbolize_names+ keyword argument is set to a
  # true value, returns symbols for keys in Hash objects (default: strings).
  #
  #   Psych.safe_load("---\n foo: bar")                         # => {"foo"=>"bar"}
  #   Psych.safe_load("---\n foo: bar", symbolize_names: true)  # => {:foo=>"bar"}
  #
  def self.safe_load yaml, permitted_classes: [], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false
    result = parse(yaml, filename: filename)
    return fallback unless result

    class_loader = ClassLoader::Restricted.new(permitted_classes.map(&:to_s),
                                               permitted_symbols.map(&:to_s))
    scanner      = ScalarScanner.new class_loader, strict_integer: strict_integer
    visitor = if aliases
                Visitors::ToRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze
              else
                Visitors::NoAliasRuby.new scanner, class_loader, symbolize_names: symbolize_names, freeze: freeze
              end
    result = visitor.accept result
    result
  end

  ###
  # Load +yaml+ in to a Ruby data structure.  If multiple documents are
  # provided, the object contained in the first document will be returned.
  # +filename+ will be used in the exception message if any exception
  # is raised while parsing.  If +yaml+ is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.load("--- a")             # => 'a'
  #   Psych.load("---\n - a\n - b")   # => ['a', 'b']
  #
  #   begin
  #     Psych.load("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # When the optional +symbolize_names+ keyword argument is set to a
  # true value, returns symbols for keys in Hash objects (default: strings).
  #
  #   Psych.load("---\n foo: bar")                         # => {"foo"=>"bar"}
  #   Psych.load("---\n foo: bar", symbolize_names: true)  # => {:foo=>"bar"}
  #
  # Raises a TypeError when `yaml` parameter is NilClass.  This method is
  # similar to `safe_load` except that `Symbol` objects are allowed by default.
  #
  def self.load yaml, permitted_classes: [Symbol], permitted_symbols: [], aliases: false, filename: nil, fallback: nil, symbolize_names: false, freeze: false, strict_integer: false
    safe_load yaml, permitted_classes: permitted_classes,
                    permitted_symbols: permitted_symbols,
                    aliases: aliases,
                    filename: filename,
                    fallback: fallback,
                    symbolize_names: symbolize_names,
                    freeze: freeze,
                    strict_integer: strict_integer
  end

  ###
  # Parse a YAML string in +yaml+.  Returns the Psych::Nodes::Document.
  # +filename+ is used in the exception message if a Psych::SyntaxError is
  # raised.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.parse("---\n - a\n - b") # => #<Psych::Nodes::Document:0x00>
  #
  #   begin
  #     Psych.parse("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # See Psych::Nodes for more information about YAML AST.
  def self.parse yaml, filename: nil
    parse_stream(yaml, filename: filename) do |node|
      return node
    end

    false
  end

  ###
  # Parse a file at +filename+. Returns the Psych::Nodes::Document.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  def self.parse_file filename, fallback: false
    result = File.open filename, 'r:bom|utf-8' do |f|
      parse f, filename: filename
    end
    result || fallback
  end

  ###
  # Returns a default parser
  def self.parser
    Psych::Parser.new(TreeBuilder.new)
  end

  ###
  # Parse a YAML string in +yaml+.  Returns the Psych::Nodes::Stream.
  # This method can handle multiple YAML documents contained in +yaml+.
  # +filename+ is used in the exception message if a Psych::SyntaxError is
  # raised.
  #
  # If a block is given, a Psych::Nodes::Document node will be yielded to the
  # block as it's being parsed.
  #
  # Raises a Psych::SyntaxError when a YAML syntax error is detected.
  #
  # Example:
  #
  #   Psych.parse_stream("---\n - a\n - b") # => #<Psych::Nodes::Stream:0x00>
  #
  #   Psych.parse_stream("--- a\n--- b") do |node|
  #     node # => #<Psych::Nodes::Document:0x00>
  #   end
  #
  #   begin
  #     Psych.parse_stream("--- `", filename: "file.txt")
  #   rescue Psych::SyntaxError => ex
  #     ex.file    # => 'file.txt'
  #     ex.message # => "(file.txt): found character that cannot start any token"
  #   end
  #
  # Raises a TypeError when NilClass is passed.
  #
  # See Psych::Nodes for more information about YAML AST.
  def self.parse_stream yaml, filename: nil, &block
    if block_given?
      parser = Psych::Parser.new(Handlers::DocumentStream.new(&block))
      parser.parse yaml, filename
    else
      parser = self.parser
      parser.parse yaml, filename
      parser.handler.root
    end
  end

  ###
  # call-seq:
  #   Psych.dump(o)               -> string of yaml
  #   Psych.dump(o, options)      -> string of yaml
  #   Psych.dump(o, io)           -> io object passed in
  #   Psych.dump(o, io, options)  -> io object passed in
  #
  # Dump Ruby object +o+ to a YAML string.  Optional +options+ may be passed in
  # to control the output format.  If an IO object is passed in, the YAML will
  # be dumped to that IO object.
  #
  # Currently supported options are:
  #
  # [<tt>:indentation</tt>]   Number of space characters used to indent.
  #                           Acceptable value should be in <tt>0..9</tt> range,
  #                           otherwise option is ignored.
  #
  #                           Default: <tt>2</tt>.
  # [<tt>:line_width</tt>]    Max character to wrap line at.
  #
  #                           Default: <tt>0</tt> (meaning "wrap at 81").
  # [<tt>:canonical</tt>]     Write "canonical" YAML form (very verbose, yet
  #                           strictly formal).
  #
  #                           Default: <tt>false</tt>.
  # [<tt>:header</tt>]        Write <tt>%YAML [version]</tt> at the beginning of document.
  #
  #                           Default: <tt>false</tt>.
  #
  # Example:
  #
  #   # Dump an array, get back a YAML string
  #   Psych.dump(['a', 'b'])  # => "---\n- a\n- b\n"
  #
  #   # Dump an array to an IO object
  #   Psych.dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>
  #
  #   # Dump an array with indentation set
  #   Psych.dump(['a', ['b']], indentation: 3) # => "---\n- a\n-  - b\n"
  #
  #   # Dump an array to an IO with indentation set
  #   Psych.dump(['a', ['b']], StringIO.new, indentation: 3)
  def self.dump o, io = nil, options = {}
    if Hash === io
      options = io
      io      = nil
    end

    visitor = Psych::Visitors::YAMLTree.create options
    visitor << o
    visitor.tree.yaml io, options
  end

  ###
  # call-seq:
  #   Psych.safe_dump(o)               -> string of yaml
  #   Psych.safe_dump(o, options)      -> string of yaml
  #   Psych.safe_dump(o, io)           -> io object passed in
  #   Psych.safe_dump(o, io, options)  -> io object passed in
  #
  # Safely dump Ruby object +o+ to a YAML string. Optional +options+ may be passed in
  # to control the output format.  If an IO object is passed in, the YAML will
  # be dumped to that IO object. By default, only the following
  # classes are allowed to be serialized:
  #
  # * TrueClass
  # * FalseClass
  # * NilClass
  # * Integer
  # * Float
  # * String
  # * Array
  # * Hash
  #
  # Arbitrary classes can be allowed by adding those classes to the +permitted_classes+
  # keyword argument.  They are additive.  For example, to allow Date serialization:
  #
  #   Psych.safe_dump(yaml, permitted_classes: [Date])
  #
  # Now the Date class can be dumped in addition to the classes listed above.
  #
  # A Psych::DisallowedClass exception will be raised if the object contains a
  # class that isn't in the +permitted_classes+ list.
  #
  # Currently supported options are:
  #
  # [<tt>:indentation</tt>]   Number of space characters used to indent.
  #                           Acceptable value should be in <tt>0..9</tt> range,
  #                           otherwise option is ignored.
  #
  #                           Default: <tt>2</tt>.
  # [<tt>:line_width</tt>]    Max character to wrap line at.
  #
  #                           Default: <tt>0</tt> (meaning "wrap at 81").
  # [<tt>:canonical</tt>]     Write "canonical" YAML form (very verbose, yet
  #                           strictly formal).
  #
  #                           Default: <tt>false</tt>.
  # [<tt>:header</tt>]        Write <tt>%YAML [version]</tt> at the beginning of document.
  #
  #                           Default: <tt>false</tt>.
  #
  # Example:
  #
  #   # Dump an array, get back a YAML string
  #   Psych.safe_dump(['a', 'b'])  # => "---\n- a\n- b\n"
  #
  #   # Dump an array to an IO object
  #   Psych.safe_dump(['a', 'b'], StringIO.new)  # => #<StringIO:0x000001009d0890>
  #
  #   # Dump an array with indentation set
  #   Psych.safe_dump(['a', ['b']], indentation: 3) # => "---\n- a\n-  - b\n"
  #
  #   # Dump an array to an IO with indentation set
  #   Psych.safe_dump(['a', ['b']], StringIO.new, indentation: 3)
  def self.safe_dump o, io = nil, options = {}
    if Hash === io
      options = io
      io      = nil
    end

    visitor = Psych::Visitors::RestrictedYAMLTree.create options
    visitor << o
    visitor.tree.yaml io, options
  end

  ###
  # Dump a list of objects as separate documents to a document stream.
  #
  # Example:
  #
  #   Psych.dump_stream("foo\n  ", {}) # => "--- ! \"foo\\n  \"\n--- {}\n"
  def self.dump_stream *objects
    visitor = Psych::Visitors::YAMLTree.create({})
    objects.each do |o|
      visitor << o
    end
    visitor.tree.yaml
  end

  ###
  # Dump Ruby +object+ to a JSON string.
  def self.to_json object
    visitor = Psych::Visitors::JSONTree.create
    visitor << object
    visitor.tree.yaml
  end

  ###
  # Load multiple documents given in +yaml+.  Returns the parsed documents
  # as a list.  If a block is given, each document will be converted to Ruby
  # and passed to the block during parsing
  #
  # Example:
  #
  #   Psych.load_stream("--- foo\n...\n--- bar\n...") # => ['foo', 'bar']
  #
  #   list = []
  #   Psych.load_stream("--- foo\n...\n--- bar\n...") do |ruby|
  #     list << ruby
  #   end
  #   list # => ['foo', 'bar']
  #
  def self.load_stream yaml, filename: nil, fallback: [], **kwargs
    result = if block_given?
               parse_stream(yaml, filename: filename) do |node|
                 yield node.to_ruby(**kwargs)
               end
             else
               parse_stream(yaml, filename: filename).children.map { |node| node.to_ruby(**kwargs) }
             end

    return fallback if result.is_a?(Array) && result.empty?
    result
  end

  ###
  # Load the document contained in +filename+.  Returns the yaml contained in
  # +filename+ as a Ruby object, or if the file is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  #
  # NOTE: This method *should not* be used to parse untrusted documents, such as
  # YAML documents that are supplied via user input.  Instead, please use the
  # safe_load_file method.
  def self.unsafe_load_file filename, **kwargs
    File.open(filename, 'r:bom|utf-8') { |f|
      self.unsafe_load f, filename: filename, **kwargs
    }
  end

  ###
  # Safely loads the document contained in +filename+.  Returns the yaml contained in
  # +filename+ as a Ruby object, or if the file is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  # See safe_load for options.
  def self.safe_load_file filename, **kwargs
    File.open(filename, 'r:bom|utf-8') { |f|
      self.safe_load f, filename: filename, **kwargs
    }
  end

  ###
  # Loads the document contained in +filename+.  Returns the yaml contained in
  # +filename+ as a Ruby object, or if the file is empty, it returns
  # the specified +fallback+ return value, which defaults to +false+.
  # See load for options.
  def self.load_file filename, **kwargs
    File.open(filename, 'r:bom|utf-8') { |f|
      self.load f, filename: filename, **kwargs
    }
  end

  # :stopdoc:
  def self.add_domain_type domain, type_tag, &block
    key = ['tag', domain, type_tag].join ':'
    domain_types[key] = [key, block]
    domain_types["tag:#{type_tag}"] = [key, block]
  end

  def self.add_builtin_type type_tag, &block
    domain = 'yaml.org,2002'
    key = ['tag', domain, type_tag].join ':'
    domain_types[key] = [key, block]
  end

  def self.remove_type type_tag
    domain_types.delete type_tag
  end

  def self.add_tag tag, klass
    load_tags[tag] = klass.name
    dump_tags[klass] = tag
  end

  # Workaround for emulating `warn '...', uplevel: 1` in Ruby 2.4 or lower.
  def self.warn_with_uplevel(message, uplevel: 1)
    at = parse_caller(caller[uplevel]).join(':')
    warn "#{at}: #{message}"
  end

  def self.parse_caller(at)
    if /^(.+?):(\d+)(?::in `.*')?/ =~ at
      file = $1
      line = $2.to_i
      [file, line]
    end
  end
  private_class_method :warn_with_uplevel, :parse_caller

  class << self
    if defined?(Ractor)
      require 'forwardable'
      extend Forwardable

      class Config
        attr_accessor :load_tags, :dump_tags, :domain_types
        def initialize
          @load_tags = {}
          @dump_tags = {}
          @domain_types = {}
        end
      end

      def config
        Ractor.current[:PsychConfig] ||= Config.new
      end

      def_delegators :config, :load_tags, :dump_tags, :domain_types, :load_tags=, :dump_tags=, :domain_types=
    else
      attr_accessor :load_tags
      attr_accessor :dump_tags
      attr_accessor :domain_types
    end
  end
  self.load_tags = {}
  self.dump_tags = {}
  self.domain_types = {}
  # :startdoc:
end
PK!"#[��"��gems/erb-2.2.3/libexec/erbnuȯ��#!/opt/alt/ruby31/bin/ruby
# Tiny eRuby --- ERB2
# Copyright (c) 1999-2000,2002 Masatoshi SEKI
# You can redistribute it and/or modify it under the same terms as Ruby.

require 'erb'

class ERB
  module Main
    def ARGV.switch
      return nil if self.empty?
      arg = self.shift
      return nil if arg == '--'
      case arg
      when /\A-(.)(.*)/
        if $1 == '-'
          arg, @maybe_arg = arg.split(/=/, 2)
          return arg
        end
        raise 'unknown switch "-"' if $2[0] == ?- and $1 != 'T'
        if $2.size > 0
          self.unshift "-#{$2}"
          @maybe_arg = $2
        else
          @maybe_arg = nil
        end
        "-#{$1}"
      when /\A(\w+)=/
        arg
      else
        self.unshift arg
        nil
      end
    end

    def ARGV.req_arg
      (@maybe_arg || self.shift || raise('missing argument')).tap {
        @maybe_arg = nil
      }
    end

    def trim_mode_opt(trim_mode, disable_percent)
      return trim_mode if disable_percent
      case trim_mode
      when 0
        return '%'
      when 1
        return '%>'
      when 2
        return '%<>'
      when '-'
        return '%-'
      end
    end
    module_function :trim_mode_opt

    def run(factory=ERB)
      trim_mode = 0
      disable_percent = false
      variables = {}
      begin
        while switch = ARGV.switch
          case switch
          when '-x'                        # ruby source
            output = true
          when '-n'                        # line number
            number = true
          when '-v'                        # verbose
            $VERBOSE = true
          when '--version'                 # version
            STDERR.puts factory.version
            exit
          when '-d', '--debug'             # debug
            $DEBUG = true
          when '-r'                        # require
            require ARGV.req_arg
          when '-S'                        # security level
            warn 'warning: -S option of erb command is deprecated. Please do not use this.'
            arg = ARGV.req_arg
            raise "invalid safe_level #{arg.dump}" unless arg =~ /\A[0-1]\z/
            safe_level = arg.to_i
          when '-T'                        # trim mode
            arg = ARGV.req_arg
            if arg == '-'
              trim_mode = arg
              next
            end
            raise "invalid trim mode #{arg.dump}" unless arg =~ /\A[0-2]\z/
            trim_mode = arg.to_i
          when '-E', '--encoding'
            arg = ARGV.req_arg
            set_encoding(*arg.split(/:/, 2))
          when '-U'
            set_encoding(Encoding::UTF_8, Encoding::UTF_8)
          when '-P'
            disable_percent = true
          when '--help'
            raise "print this help"
          when /\A-/
            raise "unknown switch #{switch.dump}"
          else
            var, val = *switch.split('=', 2)
            (variables ||= {})[var] = val
          end
        end
      rescue                               # usage
        STDERR.puts $!.to_s
        STDERR.puts File.basename($0) +
          " [switches] [var=value...] [inputfile]"
        STDERR.puts <<EOU
  -x               print ruby script
  -n               print ruby script with line number
  -v               enable verbose mode
  -d               set $DEBUG to true
  -r library       load a library
  -E ex[:in]       set default external/internal encodings
  -U               set default encoding to UTF-8
  -T trim_mode     specify trim_mode (0..2, -)
  -P               disable ruby code evaluation for lines beginning with %
  var=value        set variable
EOU
        exit 1
      end

      $<.set_encoding(Encoding::UTF_8, nil)
      src = $<.read
      filename = $FILENAME
      exit 2 unless src
      trim = trim_mode_opt(trim_mode, disable_percent)
      if safe_level.nil?
        erb = factory.new(src, trim_mode: trim)
      else
        # [deprecated] This will be removed at Ruby 2.7.
        erb = factory.new(src, safe_level, trim_mode: trim)
      end
      erb.filename = filename
      if output
        if number
          erb.src.each_line.with_index do |line, l|
            puts "%3d %s"%[l+1, line]
          end
        else
          puts erb.src
        end
      else
        bind = TOPLEVEL_BINDING
        if variables
          enc = erb.encoding
          for var, val in variables do
            val = val.encode(enc) if val
            bind.local_variable_set(var, val)
          end
        end
        erb.run(bind)
      end
    end
    module_function :run

    def set_encoding(extern, intern = nil)
      verbose, $VERBOSE = $VERBOSE, nil
      Encoding.default_external = extern unless extern.nil? || extern == ""
      Encoding.default_internal = intern unless intern.nil? || intern == ""
      [$stdin, $stdout, $stderr].each do |io|
        io.set_encoding(extern, intern)
      end
    ensure
      $VERBOSE = verbose
    end
    module_function :set_encoding
    class << self; private :set_encoding; end
  end
end

ERB::Main.run
PK!"#[ǻ��iigems/rackup-2.1.0/bin/rackupnuȯ��#!/usr/bin/env ruby
# frozen_string_literal: true

require_relative "../lib/rackup"
Rackup::Server.start
PK!"#[z����gems/rackup-2.1.0/license.mdnu�[���# MIT License

Copyright, 2007-2009, by Leah Neukirchen.  
Copyright, 2008, by Marc-André Cournoyer.  
Copyright, 2009, by Aaron Pfeifer.  
Copyright, 2009-2010, by Megan Batty.  
Copyright, 2009-2010, by Michael Fellinger.  
Copyright, 2009, by Genki Takiuchi.  
Copyright, 2009, by Joshua Peek.  
Copyright, 2009, by Yehuda Katz + Carl Lerche.  
Copyright, 2009, by Carl Lerche.  
Copyright, 2010, by Julik Tarkhanov.  
Copyright, 2010-2016, by James Tucker.  
Copyright, 2010, by Timur Batyrshin.  
Copyright, 2010, by Loren Segal.  
Copyright, 2010, by Andrew Bortz.  
Copyright, 2010, by John Barnette.  
Copyright, 2010, by John Sumsion.  
Copyright, 2011-2018, by Aaron Patterson.  
Copyright, 2011, by Konstantin Haase.  
Copyright, 2011, by Blake Mizerany.  
Copyright, 2011, by Tsutomu Kuroda.  
Copyright, 2012, by Jean Boussier.  
Copyright, 2012, by Trevor Wennblom.  
Copyright, 2012, by Anurag Priyam.  
Copyright, 2012, by Hrvoje Šimić.  
Copyright, 2013, by Uchio KONDO.  
Copyright, 2013, by Tim Moore.  
Copyright, 2013, by Postmodern.  
Copyright, 2013, by Bas Vodde.  
Copyright, 2013, by Joe Fiorini.  
Copyright, 2014, by Wyatt Pan.  
Copyright, 2014, by Lenny Marks.  
Copyright, 2014, by Igor Bochkariov.  
Copyright, 2014, by Max Cantor.  
Copyright, 2014, by David Celis.  
Copyright, 2014, by Rafael Mendonça França.  
Copyright, 2014, by Jeremy Kemper.  
Copyright, 2014, by Richard Schneeman.  
Copyright, 2015, by Peter Wilmott.  
Copyright, 2015, by Sean McGivern.  
Copyright, 2015, by Tadashi Saito.  
Copyright, 2015, by deepj.  
Copyright, 2015, by Zachary Scott.  
Copyright, 2016, by Sophie Deziel.  
Copyright, 2016, by Kazuya Hotta.  
Copyright, 2017, by Ryunosuke Sato.  
Copyright, 2017-2023, by Samuel Williams.  
Copyright, 2018, by Dillon Welch.  
Copyright, 2018, by Yoshiyuki Hirano.  
Copyright, 2018, by Nick LaMuro.  
Copyright, 2019, by Rafael França.  
Copyright, 2019, by Krzysztof Rybka.  
Copyright, 2019, by Misaki Shioi.  
Copyright, 2020-2022, by Jeremy Evans.  
Copyright, 2021, by Katsuhiko YOSHIDA.  
Copyright, 2021, by KS.  
Copyright, 2021, by Stephen Paul Weber.  
Copyright, 2022, by Akira Matsuda.  
Copyright, 2022, by Andrew Hoglund.  

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
PK!"#[<�d��gems/rackup-2.1.0/readme.mdnu�[���# Rackup

`rackup` provides a command line interface for running a Rack-compatible application.

[![Development Status](https://github.com/rack/rackup/workflows/Test/badge.svg)](https://github.com/rack/rackup/actions?workflow=Test)

## Installation

``` bash
$ gem install rackup
```

## Usage

In a directory with your `config.ru` simply run the command:

``` bash
$ rackup
```

Your application should now be available locally, typically `http://localhost:9292`.

## Contributing

We welcome contributions to this project.

1.  Fork it.
2.  Create your feature branch (`git checkout -b my-new-feature`).
3.  Commit your changes (`git commit -am 'Add some feature'`).
4.  Push to the branch (`git push origin my-new-feature`).
5.  Create new Pull Request.
PK!"#[�cϛ��'gems/rackup-2.1.0/lib/rackup/version.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

module Rackup
  VERSION = "2.1.0"
end
PK!"#[���HH+gems/rackup-2.1.0/lib/rackup/handler/cgi.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

module Rackup
  module Handler
    class CGI
      include Rack

      def self.run(app, **options)
        $stdin.binmode
        serve app
      end

      def self.serve(app)
        env = ENV.to_hash
        env.delete "HTTP_CONTENT_LENGTH"

        env[SCRIPT_NAME] = ""  if env[SCRIPT_NAME] == "/"

        env.update(
          RACK_INPUT        => $stdin,
          RACK_ERRORS       => $stderr,
          RACK_URL_SCHEME   => ["yes", "on", "1"].include?(ENV[HTTPS]) ? "https" : "http"
        )

        env[QUERY_STRING] ||= ""
        env[REQUEST_PATH] ||= "/"

        status, headers, body = app.call(env)
        begin
          send_headers status, headers
          send_body body
        ensure
          body.close  if body.respond_to? :close
        end
      end

      def self.send_headers(status, headers)
        $stdout.print "Status: #{status}\r\n"
        headers.each { |k, vs|
          vs.split("\n").each { |v|
            $stdout.print "#{k}: #{v}\r\n"
          }
        }
        $stdout.print "\r\n"
        $stdout.flush
      end

      def self.send_body(body)
        body.each { |part|
          $stdout.print part
          $stdout.flush
        }
      end
    end

    register :cgi, CGI
  end
end
PK!"#[���|��/gems/rackup-2.1.0/lib/rackup/handler/webrick.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.
# Copyright, 2022, by Jeremy Evans.

require 'webrick'
require 'stringio'

require 'rack/constants'
require_relative '../handler'
require_relative '../version'

require_relative '../stream'

module Rackup
  module Handler
    class WEBrick < ::WEBrick::HTTPServlet::AbstractServlet
      def self.run(app, **options)
        environment  = ENV['RACK_ENV'] || 'development'
        default_host = environment == 'development' ? 'localhost' : nil

        if !options[:BindAddress] || options[:Host]
          options[:BindAddress] = options.delete(:Host) || default_host
        end
        options[:Port] ||= 8080
        if options[:SSLEnable]
          require 'webrick/https'
        end

        @server = ::WEBrick::HTTPServer.new(options)
        @server.mount "/", Rackup::Handler::WEBrick, app
        yield @server if block_given?
        @server.start
      end

      def self.valid_options
        environment  = ENV['RACK_ENV'] || 'development'
        default_host = environment == 'development' ? 'localhost' : '0.0.0.0'

        {
          "Host=HOST" => "Hostname to listen on (default: #{default_host})",
          "Port=PORT" => "Port to listen on (default: 8080)",
        }
      end

      def self.shutdown
        if @server
          @server.shutdown
          @server = nil
        end
      end

      def initialize(server, app)
        super server
        @app = app
      end

      # This handles mapping the WEBrick request to a Rack input stream.
      class Input
        include Stream::Reader

        def initialize(request)
          @request = request

          @reader = Fiber.new do
            @request.body do |chunk|
              Fiber.yield(chunk)
            end

            Fiber.yield(nil)

            # End of stream:
            @reader = nil
          end
        end

        def close
          @request = nil
          @reader = nil
        end

        private

        # Read one chunk from the request body.
        def read_next
          @reader&.resume
        end
      end

      def service(req, res)
        env = req.meta_vars
        env.delete_if { |k, v| v.nil? }

        input = Input.new(req)

        env.update(
          ::Rack::RACK_INPUT => input,
          ::Rack::RACK_ERRORS => $stderr,
          ::Rack::RACK_URL_SCHEME => ["yes", "on", "1"].include?(env[::Rack::HTTPS]) ? "https" : "http",
          ::Rack::RACK_IS_HIJACK => true,
        )

        env[::Rack::QUERY_STRING] ||= ""
        unless env[::Rack::PATH_INFO] == ""
          path, n = req.request_uri.path, env[::Rack::SCRIPT_NAME].length
          env[::Rack::PATH_INFO] = path[n, path.length - n]
        end
        env[::Rack::REQUEST_PATH] ||= [env[::Rack::SCRIPT_NAME], env[::Rack::PATH_INFO]].join

        status, headers, body = @app.call(env)
        begin
          res.status = status

          if value = headers[::Rack::RACK_HIJACK]
            io_lambda = value
            body = nil
          elsif !body.respond_to?(:to_path) && !body.respond_to?(:each)
            io_lambda = body
            body = nil
          end

          if value = headers.delete('set-cookie')
            res.cookies.concat(Array(value))
          end

          headers.each do |key, value|
            # Skip keys starting with rack., per Rack SPEC
            next if key.start_with?('rack.')

            # Since WEBrick won't accept repeated headers,
            # merge the values per RFC 1945 section 4.2.
            value = value.join(", ") if Array === value
            res[key] = value
          end

          if io_lambda
            protocol = headers['rack.protocol'] || headers['upgrade']

            if protocol
              # Set all the headers correctly for an upgrade response:
              res.upgrade!(protocol)
            end
            res.body = io_lambda
          elsif body.respond_to?(:to_path)
            res.body = ::File.open(body.to_path, 'rb')
          else
            buffer = String.new
            body.each do |part|
              buffer << part
            end
            res.body = buffer
          end
        ensure
          body.close if body.respond_to?(:close)
        end
      end
    end

    register :webrick, WEBrick
  end
end
PK!"#[lo|	��&gems/rackup-2.1.0/lib/rackup/stream.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2019-2022, by Samuel Williams.

module Rackup
  # The input stream is an IO-like object which contains the raw HTTP POST data. When applicable, its external encoding must be “ASCII-8BIT” and it must be opened in binary mode, for Ruby 1.9 compatibility. The input stream must respond to gets, each, read and rewind.
  class Stream
    def initialize(input = nil, output = Buffered.new)
      @input = input
      @output = output

      raise ArgumentError, "Non-writable output!" unless output.respond_to?(:write)

      # Will hold remaining data in `#read`.
      @buffer = nil
      @closed = false
    end

    attr :input
    attr :output

    # This provides a read-only interface for data, which is surprisingly tricky to implement correctly.
    module Reader
      # rack.hijack_io must respond to:
      # read, write, read_nonblock, write_nonblock, flush, close, close_read, close_write, closed?

      # read behaves like IO#read. Its signature is read([length, [buffer]]). If given, length must be a non-negative Integer (>= 0) or nil, and buffer must be a String and may not be nil. If length is given and not nil, then this method reads at most length bytes from the input stream. If length is not given or nil, then this method reads all data until EOF. When EOF is reached, this method returns nil if length is given and not nil, or “” if length is not given or is nil. If buffer is given, then the read data will be placed into buffer instead of a newly created String object.
      # @param length [Integer] the amount of data to read
      # @param buffer [String] the buffer which will receive the data
      # @return a buffer containing the data
      def read(length = nil, buffer = nil)
        return '' if length == 0

        buffer ||= String.new.force_encoding(Encoding::BINARY)

        # Take any previously buffered data and replace it into the given buffer.
        if @buffer
          buffer.replace(@buffer)
          @buffer = nil
        else
          buffer.clear
        end

        if length
          while buffer.bytesize < length and chunk = read_next
            buffer << chunk
          end

          # This ensures the subsequent `slice!` works correctly.
          buffer.force_encoding(Encoding::BINARY)

          # This will be at least one copy:
          @buffer = buffer.byteslice(length, buffer.bytesize)

          # This should be zero-copy:
          buffer.slice!(length, buffer.bytesize)

          if buffer.empty?
            return nil
          else
            return buffer
          end
        else
          while chunk = read_next
            buffer << chunk
          end

          return buffer
        end
      end

      # Read at most `length` bytes from the stream. Will avoid reading from the underlying stream if possible.
      def read_partial(length = nil)
        if @buffer
          buffer = @buffer
          @buffer = nil
        else
          buffer = read_next
        end

        if buffer and length
          if buffer.bytesize > length
            # This ensures the subsequent `slice!` works correctly.
            buffer.force_encoding(Encoding::BINARY)

            @buffer = buffer.byteslice(length, buffer.bytesize)
            buffer.slice!(length, buffer.bytesize)
          end
        end

        return buffer
      end

      def gets
        read_partial
      end

      def each
        while chunk = read_partial
          yield chunk
        end
      end

      def read_nonblock(length, buffer = nil)
        @buffer ||= read_next
        chunk = nil

        unless @buffer
          buffer&.clear
          return
        end

        if @buffer.bytesize > length
          chunk = @buffer.byteslice(0, length)
          @buffer = @buffer.byteslice(length, @buffer.bytesize)
        else
          chunk = @buffer
          @buffer = nil
        end

        if buffer
          buffer.replace(chunk)
        else
          buffer = chunk
        end

        return buffer
      end
    end

    include Reader

    def write(buffer)
      if @output
        @output.write(buffer)
        return buffer.bytesize
      else
        raise IOError, "Stream is not writable, output has been closed!"
      end
    end

    def write_nonblock(buffer)
      write(buffer)
    end

    def <<(buffer)
      write(buffer)
    end

    def flush
    end

    def close_read
      @input&.close
      @input = nil
    end

    # close must never be called on the input stream. huh?
    def close_write
      if @output.respond_to?(:close)
        @output&.close
      end

      @output = nil
    end

    # Close the input and output bodies.
    def close(error = nil)
      self.close_read
      self.close_write

      return nil
    ensure
      @closed = true
    end

    # Whether the stream has been closed.
    def closed?
      @closed
    end

    # Whether there are any output chunks remaining?
    def empty?
      @output.empty?
    end

    private

    def read_next
      if @input
        return @input.read
      else
        @input = nil
        raise IOError, "Stream is not readable, input has been closed!"
      end
    end
  end
end
PK!"#[�F��;;'gems/rackup-2.1.0/lib/rackup/handler.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

module Rackup
  # *Handlers* connect web servers with Rack.
  #
  # Rackup includes Handlers for WEBrick and CGI.
  #
  # Handlers usually are activated by calling <tt>MyHandler.run(myapp)</tt>.
  # A second optional hash can be passed to include server-specific
  # configuration.
  module Handler
    @handlers = {}

    # Register a named handler class.
    def self.register(name, klass)
      if klass.is_a?(String)
        warn "Calling Rackup::Handler.register with a string is deprecated, use the class/module itself.", uplevel: 1

        klass = self.const_get(klass, false)
      end

      name = name.to_sym

      @handlers[name] = klass
    end

    def self.[](name)
      name = name.to_sym

      begin
        @handlers[name] || self.const_get(name, false)
      rescue NameError
        # Ignore.
      end
    end

    def self.get(name)
      return nil unless name

      name = name.to_sym

      if server = self[name]
        return server
      end

      begin
        require_handler("rackup/handler", name)
      rescue LoadError
        require_handler("rack/handler", name)
      end

      return self[name]
    end

    RACK_HANDLER = 'RACK_HANDLER'
    RACKUP_HANDLER = 'RACKUP_HANDLER'

    SERVER_NAMES = %i(puma falcon webrick).freeze
    private_constant :SERVER_NAMES

    # Select first available Rack handler given an `Array` of server names.
    # Raises `LoadError` if no handler was found.
    #
    #   > pick ['puma', 'webrick']
    #   => Rackup::Handler::WEBrick
    def self.pick(server_names)
      server_names = Array(server_names)

      server_names.each do |server_name|
        begin
          server = self.get(server_name)
         return server if server
        rescue LoadError
          # Ignore.
        end
      end

      raise LoadError, "Couldn't find handler for: #{server_names.join(', ')}."
    end

    def self.default
      if rack_handler = ENV[RACKUP_HANDLER]
        self.get(rack_handler)
      elsif rack_handler = ENV[RACK_HANDLER]
        warn "RACK_HANDLER is deprecated, use RACKUP_HANDLER."
        self.get(rack_handler)
      else
        pick SERVER_NAMES
      end
    end

    # Transforms server-name constants to their canonical form as filenames,
    # then tries to require them but silences the LoadError if not found
    #
    # Naming convention:
    #
    #   Foo # => 'foo'
    #   FooBar # => 'foo_bar.rb'
    #   FooBAR # => 'foobar.rb'
    #   FOObar # => 'foobar.rb'
    #   FOOBAR # => 'foobar.rb'
    #   FooBarBaz # => 'foo_bar_baz.rb'
    def self.require_handler(prefix, const_name)
      file = const_name.to_s.gsub(/^[A-Z]+/) { |pre| pre.downcase }.
        gsub(/[A-Z]+[^A-Z]/, '_\&').downcase

      require(::File.join(prefix, file))
    end
  end
end
PK!"#[/�:�4�4&gems/rackup-2.1.0/lib/rackup/server.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

require 'optparse'
require 'fileutils'

require 'rack/builder'
require 'rack/common_logger'
require 'rack/content_length'
require 'rack/show_exceptions'
require 'rack/lint'
require 'rack/tempfile_reaper'

require 'rack/version'

require_relative 'version'
require_relative 'handler'

module Rackup
  class Server
    class Options
      def parse!(args)
        options = {}
        opt_parser = OptionParser.new("", 24, '  ') do |opts|
          opts.banner = "Usage: rackup [ruby options] [rack options] [rackup config]"

          opts.separator ""
          opts.separator "Ruby options:"

          lineno = 1
          opts.on("-e", "--eval LINE", "evaluate a LINE of code") { |line|
            eval line, TOPLEVEL_BINDING, "-e", lineno
            lineno += 1
          }

          opts.on("-d", "--debug", "set debugging flags (set $DEBUG to true)") {
            options[:debug] = true
          }
          opts.on("-w", "--warn", "turn warnings on for your script") {
            options[:warn] = true
          }
          opts.on("-q", "--quiet", "turn off logging") {
            options[:quiet] = true
          }

          opts.on("-I", "--include PATH",
                  "specify $LOAD_PATH (may be used more than once)") { |path|
            (options[:include] ||= []).concat(path.split(":"))
          }

          opts.on("-r", "--require LIBRARY",
                  "require the library, before executing your script") { |library|
            (options[:require] ||= []) << library
          }

          opts.separator ""
          opts.separator "Rack options:"
          opts.on("-b", "--builder BUILDER_LINE", "evaluate a BUILDER_LINE of code as a builder script") { |line|
            options[:builder] = line
          }

          opts.on("-s", "--server SERVER", "serve using SERVER (thin/puma/webrick)") { |s|
            options[:server] = s
          }

          opts.on("-o", "--host HOST", "listen on HOST (default: localhost)") { |host|
            options[:Host] = host
          }

          opts.on("-p", "--port PORT", "use PORT (default: 9292)") { |port|
            options[:Port] = port
          }

          opts.on("-O", "--option NAME[=VALUE]", "pass VALUE to the server as option NAME. If no VALUE, sets it to true. Run '#{$0} -s SERVER -h' to get a list of options for SERVER") { |name|
            name, value = name.split('=', 2)
            value = true if value.nil?
            options[name.to_sym] = value
          }

          opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
            options[:environment] = e
          }

          opts.on("-D", "--daemonize", "run daemonized in the background") { |d|
            options[:daemonize] ||= true
          }

          opts.on("--daemonize-noclose", "run daemonized in the background without closing stdout/stderr") {
            options[:daemonize] = :noclose
          }

          opts.on("-P", "--pid FILE", "file to store PID") { |f|
            options[:pid] = ::File.expand_path(f)
          }

          opts.separator ""
          opts.separator "Profiling options:"

          opts.on("--heap HEAPFILE", "Build the application, then dump the heap to HEAPFILE") do |e|
            options[:heapfile] = e
          end

          opts.on("--profile PROFILE", "Dump CPU or Memory profile to PROFILE (defaults to a tempfile)") do |e|
            options[:profile_file] = e
          end

          opts.on("--profile-mode MODE", "Profile mode (cpu|wall|object)") do |e|
            unless %w[cpu wall object].include?(e)
              raise OptionParser::InvalidOption, "unknown profile mode: #{e}"
            end
            options[:profile_mode] = e.to_sym
          end

          opts.separator ""
          opts.separator "Common options:"

          opts.on_tail("-h", "-?", "--help", "Show this message") do
            puts opts
            puts handler_opts(options)

            exit
          end

          opts.on_tail("--version", "Show version") do
            puts "Rack #{Rack::RELEASE}"
            exit
          end
        end

        begin
          opt_parser.parse! args
        rescue OptionParser::InvalidOption => e
          warn e.message
          abort opt_parser.to_s
        end

        options[:config] = args.last if args.last && !args.last.empty?
        options
      end

      def handler_opts(options)
        info = []
        server = Rackup::Handler.get(options[:server]) || Rackup::Handler.default
        if server && server.respond_to?(:valid_options)
          info << ""
          info << "Server-specific options for #{server.name}:"

          has_options = false
          server.valid_options.each do |name, description|
            next if /^(Host|Port)[^a-zA-Z]/.match?(name.to_s) # ignore handler's host and port options, we do our own.
            info << sprintf("  -O %-21s %s", name, description)
            has_options = true
          end
          return "" if !has_options
        end
        info.join("\n")
      rescue NameError, LoadError
        return "Warning: Could not find handler specified (#{options[:server] || 'default'}) to determine handler-specific options"
      end
    end

    # Start a new rack server (like running rackup). This will parse ARGV and
    # provide standard ARGV rackup options, defaulting to load 'config.ru'.
    #
    # Providing an options hash will prevent ARGV parsing and will not include
    # any default options.
    #
    # This method can be used to very easily launch a CGI application, for
    # example:
    #
    #  Rack::Server.start(
    #    :app => lambda do |e|
    #      [200, {'content-type' => 'text/html'}, ['hello world']]
    #    end,
    #    :server => 'cgi'
    #  )
    #
    # Further options available here are documented on Rack::Server#initialize
    def self.start(options = nil)
      new(options).start
    end

    attr_writer :options

    # Options may include:
    # * :app
    #     a rack application to run (overrides :config and :builder)
    # * :builder
    #     a string to evaluate a Rack::Builder from
    # * :config
    #     a rackup configuration file path to load (.ru)
    # * :environment
    #     this selects the middleware that will be wrapped around
    #     your application. Default options available are:
    #       - development: CommonLogger, ShowExceptions, and Lint
    #       - deployment: CommonLogger
    #       - none: no extra middleware
    #     note: when the server is a cgi server, CommonLogger is not included.
    # * :server
    #     choose a specific Rackup::Handler, e.g. cgi, fcgi, webrick
    # * :daemonize
    #     if truthy, the server will daemonize itself (fork, detach, etc)
    #     if :noclose, the server will not close STDOUT/STDERR
    # * :pid
    #     path to write a pid file after daemonize
    # * :Host
    #     the host address to bind to (used by supporting Rackup::Handler)
    # * :Port
    #     the port to bind to (used by supporting Rackup::Handler)
    # * :AccessLog
    #     webrick access log options (or supporting Rackup::Handler)
    # * :debug
    #     turn on debug output ($DEBUG = true)
    # * :warn
    #     turn on warnings ($-w = true)
    # * :include
    #     add given paths to $LOAD_PATH
    # * :require
    #     require the given libraries
    #
    # Additional options for profiling app initialization include:
    # * :heapfile
    #     location for ObjectSpace.dump_all to write the output to
    # * :profile_file
    #     location for CPU/Memory (StackProf) profile output (defaults to a tempfile)
    # * :profile_mode
    #     StackProf profile mode (cpu|wall|object)
    def initialize(options = nil)
      @ignore_options = []

      if options
        @use_default_options = false
        @options = options
        @app = options[:app] if options[:app]
      else
        @use_default_options = true
        @options = parse_options(ARGV)
      end
    end

    def options
      merged_options = @use_default_options ? default_options.merge(@options) : @options
      merged_options.reject { |k, v| @ignore_options.include?(k) }
    end

    def default_options
      environment  = ENV['RACK_ENV'] || 'development'
      default_host = environment == 'development' ? 'localhost' : '0.0.0.0'

      {
        environment: environment,
        pid: nil,
        Port: 9292,
        Host: default_host,
        AccessLog: [],
        config: "config.ru"
      }
    end

    def app
      @app ||= options[:builder] ? build_app_from_string : build_app_and_options_from_config
    end

    class << self
      def logging_middleware
        lambda { |server|
          /CGI/.match?(server.server.name) || server.options[:quiet] ? nil : [Rack::CommonLogger, $stderr]
        }
      end

      def default_middleware_by_environment
        m = Hash.new {|h, k| h[k] = []}
        m["deployment"] = [
          [Rack::ContentLength],
          logging_middleware,
          [Rack::TempfileReaper]
        ]
        m["development"] = [
          [Rack::ContentLength],
          logging_middleware,
          [Rack::ShowExceptions],
          [Rack::Lint],
          [Rack::TempfileReaper]
        ]

        m
      end

      def middleware
        default_middleware_by_environment
      end
    end

    def middleware
      self.class.middleware
    end

    def start(&block)
      if options[:warn]
        $-w = true
      end

      if includes = options[:include]
        $LOAD_PATH.unshift(*includes)
      end

      Array(options[:require]).each do |library|
        require library
      end

      if options[:debug]
        $DEBUG = true
        require 'pp'
        p options[:server]
        pp wrapped_app
        pp app
      end

      check_pid! if options[:pid]

      # Touch the wrapped app, so that the config.ru is loaded before
      # daemonization (i.e. before chdir, etc).
      handle_profiling(options[:heapfile], options[:profile_mode], options[:profile_file]) do
        wrapped_app
      end

      daemonize_app if options[:daemonize]

      write_pid if options[:pid]

      trap(:INT) do
        if server.respond_to?(:shutdown)
          server.shutdown
        else
          exit
        end
      end

      server.run(wrapped_app, **options, &block)
    end

    def server
      @_server ||= Handler.get(options[:server]) || Handler.default
    end

    private
      def build_app_and_options_from_config
        if !::File.exist? options[:config]
          abort "configuration #{options[:config]} not found"
        end

        return Rack::Builder.parse_file(self.options[:config])
      end

      def handle_profiling(heapfile, profile_mode, filename)
        if heapfile
          require "objspace"
          ObjectSpace.trace_object_allocations_start
          yield
          GC.start
          ::File.open(heapfile, "w") { |f| ObjectSpace.dump_all(output: f) }
          exit
        end

        if profile_mode
          require "stackprof"
          require "tempfile"

          make_profile_name(filename) do |filename|
            ::File.open(filename, "w") do |f|
              StackProf.run(mode: profile_mode, out: f) do
                yield
              end
              puts "Profile written to: #{filename}"
            end
          end
          exit
        end

        yield
      end

      def make_profile_name(filename)
        if filename
          yield filename
        else
          ::Dir::Tmpname.create("profile.dump") do |tmpname, _, _|
            yield tmpname
          end
        end
      end

      def build_app_from_string
        Rack::Builder.new_from_string(self.options[:builder])
      end

      def parse_options(args)
        # Don't evaluate CGI ISINDEX parameters.
        args.clear if ENV.include?(Rack::REQUEST_METHOD)

        @options = opt_parser.parse!(args)
        @options[:config] = ::File.expand_path(options[:config])
        ENV["RACK_ENV"] = options[:environment]
        @options
      end

      def opt_parser
        Options.new
      end

      def build_app(app)
        middleware[options[:environment]].reverse_each do |middleware|
          middleware = middleware.call(self) if middleware.respond_to?(:call)
          next unless middleware
          klass, *args = middleware
          app = klass.new(app, *args)
        end
        app
      end

      def wrapped_app
        @wrapped_app ||= build_app app
      end

      def daemonize_app
        # Cannot be covered as it forks
        # :nocov:
        Process.daemon(true, options[:daemonize] == :noclose)
        # :nocov:
      end

      def write_pid
        ::File.open(options[:pid], ::File::CREAT | ::File::EXCL | ::File::WRONLY ){ |f| f.write("#{Process.pid}") }
        at_exit { ::FileUtils.rm_f(options[:pid]) }
      rescue Errno::EEXIST
        check_pid!
        retry
      end

      def check_pid!
        return unless ::File.exist?(options[:pid])

        pid = ::File.read(options[:pid]).to_i
        raise Errno::ESRCH if pid == 0

        Process.kill(0, pid)
        exit_with_pid(pid)
      rescue Errno::ESRCH
        ::File.delete(options[:pid])
      rescue Errno::EPERM
        exit_with_pid(pid)
      end

      def exit_with_pid(pid)
        $stderr.puts "A server is already running (pid: #{pid}, file: #{options[:pid]})."
        exit(1)
      end
  end

end
PK!"#[�����'gems/rackup-2.1.0/lib/rackup/lobster.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

require 'zlib'

require 'rack/constants'
require 'rack/request'
require 'rack/response'

module Rackup
  # Paste has a Pony, Rack has a Lobster!
  class Lobster
    include Rack

    LobsterString = Zlib::Inflate.inflate("eJx9kEEOwyAMBO99xd7MAcytUhPlJyj2
    P6jy9i4k9EQyGAnBarEXeCBqSkntNXsi/ZCvC48zGQoZKikGrFMZvgS5ZHd+aGWVuWwhVF0
    t1drVmiR42HcWNz5w3QanT+2gIvTVCiE1lm1Y0eU4JGmIIbaKwextKn8rvW+p5PIwFl8ZWJ
    I8jyiTlhTcYXkekJAzTyYN6E08A+dk8voBkAVTJQ==".delete("\n ").unpack("m*")[0])

    LambdaLobster = lambda { |env|
      if env[QUERY_STRING].include?("flip")
        lobster = LobsterString.split("\n").
          map { |line| line.ljust(42).reverse }.
          join("\n")
        href = "?"
      else
        lobster = LobsterString
        href = "?flip"
      end

      content = ["<title>Lobstericious!</title>",
                 "<pre>", lobster, "</pre>",
                 "<a href='#{href}'>flip!</a>"]
      length = content.inject(0) { |a, e| a + e.size }.to_s
      [200, { CONTENT_TYPE => "text/html", CONTENT_LENGTH => length }, content]
    }

    def call(env)
      req = Request.new(env)
      if req.GET["flip"] == "left"
        lobster = LobsterString.split("\n").map do |line|
          line.ljust(42).reverse.
            gsub('\\', 'TEMP').
            gsub('/', '\\').
            gsub('TEMP', '/').
            gsub('{', '}').
            gsub('(', ')')
        end.join("\n")
        href = "?flip=right"
      elsif req.GET["flip"] == "crash"
        raise "Lobster crashed"
      else
        lobster = LobsterString
        href = "?flip=left"
      end

      res = Response.new
      res.write "<title>Lobstericious!</title>"
      res.write "<pre>"
      res.write lobster
      res.write "</pre>"
      res.write "<p><a href='#{href}'>flip!</a></p>"
      res.write "<p><a href='?flip=crash'>crash!</a></p>"
      res.finish
    end

  end
end

if $0 == __FILE__
  # :nocov:
  require_relative 'server'
  require_relative 'show_exceptions'
  require_relative 'lint'
  Rackup::Server.start(
    app: Rack::ShowExceptions.new(Rack::Lint.new(Rackup::Lobster.new)), Port: 9292
  )
  # :nocov:
end
PK!"#[��9�$$gems/rackup-2.1.0/lib/rackup.rbnu�[���# frozen_string_literal: true

# Released under the MIT License.
# Copyright, 2022-2023, by Samuel Williams.

require_relative 'rackup/handler'
require_relative 'rackup/server'
require_relative 'rackup/version'

require_relative 'rackup/handler/webrick'
require_relative 'rackup/handler/cgi'
PK!"#[e
�eegems/rackup-2.1.0/security.mdnu�[���# Security Policy

Please see our main security policy: https://github.com/rack/rack/security/policy
PK!"#[t2�����gems/rack-3.0.8/CHANGELOG.mdnu�[���# Changelog

All notable changes to this project will be documented in this file. For info on how to format all future additions to this file please reference [Keep A Changelog](https://keepachangelog.com/en/1.0.0/).

## [3.0.7] - 2023-03-16

- Make query parameters without `=` have `nil` values. ([#2059](https://github.com/rack/rack/pull/2059), [@jeremyevans])

## [3.0.6.1] - 2023-03-13

- [CVE-2023-27539] Avoid ReDoS in header parsing

## [3.0.6] - 2023-03-13

- Add `QueryParser#missing_value` for handling missing values + tests. ([#2052](https://github.com/rack/rack/pull/2052), [@ioquatix])

## [3.0.5] - 2023-03-13

- Split form/query parsing into two steps. ([#2038](https://github.com/rack/rack/pull/2038), [@matthewd](https://github.com/matthewd))

## [3.0.4.1] - 2023-03-02

- [CVE-2023-27530] Introduce multipart_total_part_limit to limit total parts

## [3.0.4.1] - 2023-01-17

- [CVE-2022-44571] Fix ReDoS vulnerability in multipart parser
- [CVE-2022-44570] Fix ReDoS in Rack::Utils.get_byte_ranges
- [CVE-2022-44572] Forbid control characters in attributes (also ReDoS)

## [3.0.4] - 2023-01-17

- `Rack::Request#POST` should consistently raise errors. Cache errors that occur when invoking `Rack::Request#POST` so they can be raised again later. ([#2010](https://github.com/rack/rack/pull/2010), [@ioquatix])
- Fix `Rack::Lint` error message for `HTTP_CONTENT_TYPE` and `HTTP_CONTENT_LENGTH`. ([#2007](https://github.com/rack/rack/pull/2007), [@byroot](https://github.com/byroot))
- Extend `Rack::MethodOverride` to handle `QueryParser::ParamsTooDeepError` error. ([#2006](https://github.com/rack/rack/pull/2006), [@byroot](https://github.com/byroot))

## [3.0.3] - 2022-12-27

### Fixed

- `Rack::URLMap` uses non-deprecated form of `Regexp.new`. ([#1998](https://github.com/rack/rack/pull/1998), [@weizheheng](https://github.com/weizheheng))

## [3.0.2] - 2022-12-05

### Fixed

- `Utils.build_nested_query` URL-encodes nested field names including the square brackets.
- Allow `Rack::Response` to pass through streaming bodies. ([#1993](https://github.com/rack/rack/pull/1993), [@ioquatix])

## [3.0.1] - 2022-11-18

### Fixed

- `MethodOverride` does not look for an override if a request does not include form/parseable data.
- `Rack::Lint::Wrapper` correctly handles `respond_to?` with `to_ary`, `each`, `call` and `to_path`, forwarding to the body. ([#1981](https://github.com/rack/rack/pull/1981), [@ioquatix])

## [3.0.0] - 2022-09-06

- No changes

## [3.0.0.rc1] - 2022-09-04

### SPEC Changes

- Stream argument must implement `<<` https://github.com/rack/rack/pull/1959
- `close` may be called on `rack.input` https://github.com/rack/rack/pull/1956
- `rack.response_finished` may be used for executing code after the response has been finished https://github.com/rack/rack/pull/1952

## [3.0.0.beta1] - 2022-08-08

### Security

- Do not use semicolon as GET parameter separator. ([#1733](https://github.com/rack/rack/pull/1733), [@jeremyevans])

### SPEC Changes

- Response array must now be non-frozen.
- Response `status` must now be an integer greater than or equal to 100.
- Response `headers` must now be an unfrozen hash.
- Response header keys can no longer include uppercase characters.
- Response header values can be an `Array` to handle multiple values (and no longer supports `\n` encoded headers).
- Response body can now respond to `#call` (streaming body) instead of `#each` (enumerable body), for the equivalent of response hijacking in previous versions.
- Middleware must no longer call `#each` on the body, but they can call `#to_ary` on the body if it responds to `#to_ary`.
- `rack.input` is no longer required to be rewindable.
- `rack.multithread`/`rack.multiprocess`/`rack.run_once`/`rack.version` are no longer required environment keys.
- `SERVER_PROTOCOL` is now a required environment key, matching the HTTP protocol used in the request.
- `rack.hijack?` (partial hijack) and `rack.hijack` (full hijack) are now independently optional.
- `rack.hijack_io` has been removed completely.
- `rack.response_finished` is an optional environment key which contains an array of callable objects that must accept `#call(env, status, headers, error)` and are invoked after the response is finished (either successfully or unsuccessfully).
- It is okay to call `#close` on `rack.input` to indicate that you no longer need or care about the input.
- The stream argument supplied to the streaming body and hijack must support `#<<` for writing output.

### Removed

- Remove `rack.multithread`/`rack.multiprocess`/`rack.run_once`. These variables generally come too late to be useful. ([#1720](https://github.com/rack/rack/pull/1720), [@ioquatix], [@jeremyevans]))
- Remove deprecated Rack::Request::SCHEME_WHITELIST. ([@jeremyevans])
- Remove internal cookie deletion using pattern matching, there are very few practical cases where it would be useful and browsers handle it correctly without us doing anything special. ([#1844](https://github.com/rack/rack/pull/1844), [@ioquatix])
- Remove `rack.version` as it comes too late to be useful. ([#1938](https://github.com/rack/rack/pull/1938), [@ioquatix])
- Extract `rackup` command, `Rack::Server`, `Rack::Handler` and related code into a separate gem. ([#1937](https://github.com/rack/rack/pull/1937), [@ioquatix])

### Added

- `Rack::Headers` added to support lower-case header keys. ([@jeremyevans])
- `Rack::Utils#set_cookie_header` now supports `escape_key: false` to avoid key escaping.  ([@jeremyevans])
- `Rack::RewindableInput` supports size. ([@ahorek](https://github.com/ahorek))
- `Rack::RewindableInput::Middleware` added for making `rack.input` rewindable. ([@jeremyevans])
- The RFC 7239 Forwarded header is now supported and considered by default when looking for information on forwarding, falling back to the X-Forwarded-* headers. `Rack::Request.forwarded_priority` accessor has been added for configuring the priority of which header to check.  ([#1423](https://github.com/rack/rack/issues/1423), [@jeremyevans])
- Allow response headers to contain array of values. ([#1598](https://github.com/rack/rack/issues/1598), [@ioquatix])
- Support callable body for explicit streaming support and clarify streaming response body behaviour. ([#1745](https://github.com/rack/rack/pull/1745), [@ioquatix], [#1748](https://github.com/rack/rack/pull/1748), [@wjordan])
- Allow `Rack::Builder#run` to take a block instead of an argument. ([#1942](https://github.com/rack/rack/pull/1942), [@ioquatix])
- Add `rack.response_finished` to `Rack::Lint`. ([#1802](https://github.com/rack/rack/pull/1802), [@BlakeWilliams], [#1952](https://github.com/rack/rack/pull/1952), [@ioquatix])
- The stream argument must implement `#<<`. ([#1959](https://github.com/rack/rack/pull/1959), [@ioquatix])

### Changed

- BREAKING CHANGE: Require `status` to be an Integer. ([#1662](https://github.com/rack/rack/pull/1662), [@olleolleolle](https://github.com/olleolleolle))
- BREAKING CHANGE: Query parsing now treats parameters without `=` as having the empty string value instead of nil value, to conform to the URL spec. ([#1696](https://github.com/rack/rack/issues/1696), [@jeremyevans])
- Relax validations around `Rack::Request#host` and `Rack::Request#hostname`. ([#1606](https://github.com/rack/rack/issues/1606), [@pvande](https://github.com/pvande))
- Removed antiquated handlers: FCGI, LSWS, SCGI, Thin. ([#1658](https://github.com/rack/rack/pull/1658), [@ioquatix])
- Removed options from `Rack::Builder.parse_file` and `Rack::Builder.load_file`. ([#1663](https://github.com/rack/rack/pull/1663), [@ioquatix])
- `Rack::HTTP_VERSION` has been removed and the `HTTP_VERSION` env setting is no longer set in the CGI and Webrick handlers. ([#970](https://github.com/rack/rack/issues/970), [@jeremyevans])
- `Rack::Request#[]` and `#[]=` now warn even in non-verbose mode. ([#1277](https://github.com/rack/rack/issues/1277), [@jeremyevans])
- Decrease default allowed parameter recursion level from 100 to 32. ([#1640](https://github.com/rack/rack/issues/1640), [@jeremyevans])
- Attempting to parse a multipart response with an empty body now raises Rack::Multipart::EmptyContentError. ([#1603](https://github.com/rack/rack/issues/1603), [@jeremyevans])
- `Rack::Utils.secure_compare` uses OpenSSL's faster implementation if available. ([#1711](https://github.com/rack/rack/pull/1711), [@bdewater](https://github.com/bdewater))
- `Rack::Request#POST` now caches an empty hash if input content type is not parseable. ([#749](https://github.com/rack/rack/pull/749), [@jeremyevans])
- BREAKING CHANGE: Updated `trusted_proxy?` to match full 127.0.0.0/8 network. ([#1781](https://github.com/rack/rack/pull/1781), [@snbloch](https://github.com/snbloch))
- Explicitly deprecate `Rack::File` which was an alias for `Rack::Files`. ([#1811](https://github.com/rack/rack/pull/1720), [@ioquatix]).
- Moved `Rack::Session` into [separate gem](https://github.com/rack/rack-session). ([#1805](https://github.com/rack/rack/pull/1805), [@ioquatix])
- `rackup -D` option to daemonizes no longer changes the working directory to the root. ([#1813](https://github.com/rack/rack/pull/1813), [@jeremyevans])
- The `x-forwarded-proto` header is now considered before the `x-forwarded-scheme` header for determining the forwarded protocol. `Rack::Request.x_forwarded_proto_priority` accessor has been added for configuring the priority of which header to check.  ([#1809](https://github.com/rack/rack/issues/1809), [@jeremyevans])
- `Rack::Request.forwarded_authority` (and methods that call it, such as `host`) now returns the last authority in the forwarded header, instead of the first, as earlier forwarded authorities can be forged by clients. This restores the Rack 2.1 behavior. ([#1829](https://github.com/rack/rack/issues/1809), [@jeremyevans])
- Use lower case cookie attributes when creating cookies, and fold cookie attributes to lower case when reading cookies (specifically impacting `secure` and `httponly` attributes). ([#1849](https://github.com/rack/rack/pull/1849), [@ioquatix])
- The response array must now be mutable (non-frozen) so middleware can modify it without allocating a new Array,therefore reducing object allocations. ([#1887](https://github.com/rack/rack/pull/1887), [#1927](https://github.com/rack/rack/pull/1927), [@amatsuda], [@ioquatix])
- `rack.hijack?` (partial hijack) and `rack.hijack` (full hijack) are now independently optional. `rack.hijack_io` is no longer required/specified. ([#1939](https://github.com/rack/rack/pull/1939), [@ioquatix])
- Allow calling close on `rack.input`. ([#1956](https://github.com/rack/rack/pull/1956), [@ioquatix])

### Fixed

- Make Rack::MockResponse handle non-hash headers. ([#1629](https://github.com/rack/rack/issues/1629), [@jeremyevans])
- TempfileReaper now deletes temp files if application raises an exception. ([#1679](https://github.com/rack/rack/issues/1679), [@jeremyevans])
- Handle cookies with values that end in '=' ([#1645](https://github.com/rack/rack/pull/1645), [@lukaso](https://github.com/lukaso))
- Make `Rack::NullLogger` respond to `#fatal!` [@jeremyevans])
- Fix multipart filename generation for filenames that contain spaces. Encode spaces as "%20" instead of "+" which will be decoded properly by the multipart parser. ([#1736](https://github.com/rack/rack/pull/1645), [@muirdm](https://github.com/muirdm))
- `Rack::Request#scheme` returns `ws` or `wss` when one of the `X-Forwarded-Scheme` / `X-Forwarded-Proto` headers is set to `ws` or `wss`, respectively. ([#1730](https://github.com/rack/rack/issues/1730), [@erwanst](https://github.com/erwanst))

## [2.2.4] - 2022-06-30

- Better support for lower case headers in `Rack::ETag` middleware. ([#1919](https://github.com/rack/rack/pull/1919), [@ioquatix](https://github.com/ioquatix))
- Use custom exception on params too deep error. ([#1838](https://github.com/rack/rack/pull/1838), [@simi](https://github.com/simi))

## [2.2.3.1] - 2022-05-27

- [CVE-2022-30123] Fix shell escaping issue in Common Logger
- [CVE-2022-30122] Restrict parsing of broken MIME attachments

## [2.2.3] - 2020-06-15

### Security

- [[CVE-2020-8184](https://nvd.nist.gov/vuln/detail/CVE-2020-8184)] Do not allow percent-encoded cookie name to override existing cookie names. BREAKING CHANGE: Accessing cookie names that require URL encoding with decoded name no longer works. ([@fletchto99](https://github.com/fletchto99))

## [2.2.2] - 2020-02-11

### Fixed

- Fix incorrect `Rack::Request#host` value. ([#1591](https://github.com/rack/rack/pull/1591), [@ioquatix])
- Revert `Rack::Handler::Thin` implementation. ([#1583](https://github.com/rack/rack/pull/1583), [@jeremyevans])
- Double assignment is still needed to prevent an "unused variable" warning. ([#1589](https://github.com/rack/rack/pull/1589), [@kamipo](https://github.com/kamipo))
- Fix to handle same_site option for session pool. ([#1587](https://github.com/rack/rack/pull/1587), [@kamipo](https://github.com/kamipo))

## [2.2.1] - 2020-02-09

### Fixed

- Rework `Rack::Request#ip` to handle empty `forwarded_for`. ([#1577](https://github.com/rack/rack/pull/1577), [@ioquatix])

## [2.2.0] - 2020-02-08

### SPEC Changes

- `rack.session` request environment entry must respond to `to_hash` and return unfrozen Hash. ([@jeremyevans])
- Request environment cannot be frozen. ([@jeremyevans])
- CGI values in the request environment with non-ASCII characters must use ASCII-8BIT encoding. ([@jeremyevans])
- Improve SPEC/lint relating to SERVER_NAME, SERVER_PORT and HTTP_HOST. ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix])

### Added

- `rackup` supports multiple `-r` options and will require all arguments. ([@jeremyevans])
- `Server` supports an array of paths to require for the `:require` option. ([@khotta](https://github.com/khotta))
- `Files` supports multipart range requests. ([@fatkodima](https://github.com/fatkodima))
- `Multipart::UploadedFile` supports an IO-like object instead of using the filesystem, using `:filename` and `:io` options. ([@jeremyevans])
- `Multipart::UploadedFile` supports keyword arguments `:path`, `:content_type`, and `:binary` in addition to positional arguments. ([@jeremyevans])
- `Static` supports a `:cascade` option for calling the app if there is no matching file. ([@jeremyevans])
- `Session::Abstract::SessionHash#dig`. ([@jeremyevans])
- `Response.[]` and `MockResponse.[]` for creating instances using status, headers, and body. ([@ioquatix])
- Convenient cache and content type methods for `Rack::Response`. ([#1555](https://github.com/rack/rack/pull/1555), [@ioquatix])

### Changed

- `Request#params` no longer rescues EOFError. ([@jeremyevans])
- `Directory` uses a streaming approach, significantly improving time to first byte for large directories. ([@jeremyevans])
- `Directory` no longer includes a Parent directory link in the root directory index. ([@jeremyevans])
- `QueryParser#parse_nested_query` uses original backtrace when reraising exception with new class. ([@jeremyevans])
- `ConditionalGet` follows RFC 7232 precedence if both If-None-Match and If-Modified-Since headers are provided. ([@jeremyevans])
- `.ru` files supports the `frozen-string-literal` magic comment. ([@eregon](https://github.com/eregon))
- Rely on autoload to load constants instead of requiring internal files, make sure to require 'rack' and not just 'rack/...'. ([@jeremyevans])
- BREAKING CHANGE: `Etag` will continue sending ETag even if the response should not be cached. Streaming no longer works without a workaround, see [#1619](https://github.com/rack/rack/issues/1619#issuecomment-848460528). ([@henm](https://github.com/henm))
- `Request#host_with_port` no longer includes a colon for a missing or empty port. ([@AlexWayfer](https://github.com/AlexWayfer))
- All handlers uses keywords arguments instead of an options hash argument. ([@ioquatix])
- `Files` handling of range requests no longer return a body that supports `to_path`, to ensure range requests are handled correctly. ([@jeremyevans])
- `Multipart::Generator` only includes `Content-Length` for files with paths, and `Content-Disposition` `filename` if the `UploadedFile` instance has one. ([@jeremyevans])
- `Request#ssl?` is true for the `wss` scheme (secure websockets). ([@jeremyevans])
- `Rack::HeaderHash` is memoized by default. ([#1549](https://github.com/rack/rack/pull/1549), [@ioquatix])
- `Rack::Directory` allow directory traversal inside root directory. ([#1417](https://github.com/rack/rack/pull/1417), [@ThomasSevestre](https://github.com/ThomasSevestre))
- Sort encodings by server preference. ([#1184](https://github.com/rack/rack/pull/1184), [@ioquatix], [@wjordan](https://github.com/wjordan))
- Rework host/hostname/authority implementation in `Rack::Request`. `#host` and `#host_with_port` have been changed to correctly return IPv6 addresses formatted with square brackets, as defined by [RFC3986](https://tools.ietf.org/html/rfc3986#section-3.2.2). ([#1561](https://github.com/rack/rack/pull/1561), [@ioquatix])
- `Rack::Builder` parsing options on first `#\` line is deprecated. ([#1574](https://github.com/rack/rack/pull/1574), [@ioquatix])

### Removed

- `Directory#path` as it was not used and always returned nil. ([@jeremyevans])
- `BodyProxy#each` as it was only needed to work around a bug in Ruby <1.9.3. ([@jeremyevans])
- `URLMap::INFINITY` and `URLMap::NEGATIVE_INFINITY`, in favor of `Float::INFINITY`. ([@ch1c0t](https://github.com/ch1c0t))
- Deprecation of `Rack::File`. It will be deprecated again in rack 2.2 or 3.0. ([@rafaelfranca](https://github.com/rafaelfranca))
- Support for Ruby 2.2 as it is well past EOL. ([@ioquatix])
- Remove `Rack::Files#response_body` as the implementation was broken. ([#1153](https://github.com/rack/rack/pull/1153), [@ioquatix])
- Remove `SERVER_ADDR` which was never part of the original SPEC. ([#1573](https://github.com/rack/rack/pull/1573), [@ioquatix])

### Fixed

- `Directory` correctly handles root paths containing glob metacharacters. ([@jeremyevans])
- `Cascade` uses a new response object for each call if initialized with no apps. ([@jeremyevans])
- `BodyProxy` correctly delegates keyword arguments to the body object on Ruby 2.7+. ([@jeremyevans])
- `BodyProxy#method` correctly handles methods delegated to the body object. ([@jeremyevans])
- `Request#host` and `Request#host_with_port` handle IPv6 addresses correctly. ([@AlexWayfer](https://github.com/AlexWayfer))
- `Lint` checks when response hijacking that `rack.hijack` is called with a valid object. ([@jeremyevans])
- `Response#write` correctly updates `Content-Length` if initialized with a body. ([@jeremyevans])
- `CommonLogger` includes `SCRIPT_NAME` when logging. ([@Erol](https://github.com/Erol))
- `Utils.parse_nested_query` correctly handles empty queries, using an empty instance of the params class instead of a hash. ([@jeremyevans])
- `Directory` correctly escapes paths in links. ([@yous](https://github.com/yous))
- `Request#delete_cookie` and related `Utils` methods handle `:domain` and `:path` options in same call. ([@jeremyevans])
- `Request#delete_cookie` and related `Utils` methods do an exact match on `:domain` and `:path` options. ([@jeremyevans])
- `Static` no longer adds headers when a gzipped file request has a 304 response. ([@chooh](https://github.com/chooh))
- `ContentLength` sets `Content-Length` response header even for bodies not responding to `to_ary`. ([@jeremyevans])
- Thin handler supports options passed directly to `Thin::Controllers::Controller`. ([@jeremyevans])
- WEBrick handler no longer ignores `:BindAddress` option. ([@jeremyevans])
- `ShowExceptions` handles invalid POST data. ([@jeremyevans])
- Basic authentication requires a password, even if the password is empty. ([@jeremyevans])
- `Lint` checks response is array with 3 elements, per SPEC. ([@jeremyevans])
- Support for using `:SSLEnable` option when using WEBrick handler. (Gregor Melhorn)
- Close response body after buffering it when buffering. ([@ioquatix])
- Only accept `;` as delimiter when parsing cookies. ([@mrageh](https://github.com/mrageh))
- `Utils::HeaderHash#clear` clears the name mapping as well. ([@raxoft](https://github.com/raxoft))
- Support for passing `nil` `Rack::Files.new`, which notably fixes Rails' current `ActiveStorage::FileServer` implementation. ([@ioquatix])

### Documentation

- CHANGELOG updates. ([@aupajo](https://github.com/aupajo))
- Added [CONTRIBUTING](CONTRIBUTING.md). ([@dblock](https://github.com/dblock))

## [2.0.9] - 2020-02-08

- Handle case where session id key is requested but missing ([@jeremyevans])
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans])
- Add support for `SameSite=None` cookie value. ([@hennikul](https://github.com/hennikul))

## [2.1.2] - 2020-01-27

- Fix multipart parser for some files to prevent denial of service ([@aiomaster](https://github.com/aiomaster))
- Fix `Rack::Builder#use` with keyword arguments ([@kamipo](https://github.com/kamipo))
- Skip deflating in Rack::Deflater if Content-Length is 0 ([@jeremyevans])
- Remove `SessionHash#transform_keys`, no longer needed ([@pavel](https://github.com/pavel))
- Add to_hash to wrap Hash and Session classes ([@oleh-demyanyuk](https://github.com/oleh-demyanyuk))
- Handle case where session id key is requested but missing ([@jeremyevans])

## [2.1.1] - 2020-01-12

- Remove `Rack::Chunked` from `Rack::Server` default middleware. ([#1475](https://github.com/rack/rack/pull/1475), [@ioquatix])
- Restore support for code relying on `SessionId#to_s`. ([@jeremyevans])

## [2.1.0] - 2020-01-10

### Added

- Add support for `SameSite=None` cookie value. ([@hennikul](https://github.com/hennikul))
- Add trailer headers. ([@eileencodes](https://github.com/eileencodes))
- Add MIME Types for video streaming. ([@styd](https://github.com/styd))
- Add MIME Type for WASM. ([@buildrtech](https://github.com/buildrtech))
- Add `Early Hints(103)` to status codes. ([@egtra](https://github.com/egtra))
- Add `Too Early(425)` to status codes. ([@y-yagi]((https://github.com/y-yagi)))
- Add `Bandwidth Limit Exceeded(509)` to status codes. ([@CJKinni](https://github.com/CJKinni))
- Add method for custom `ip_filter`. ([@svcastaneda](https://github.com/svcastaneda))
- Add boot-time profiling capabilities to `rackup`. ([@tenderlove](https://github.com/tenderlove))
- Add multi mapping support for `X-Accel-Mappings` header. ([@yoshuki](https://github.com/yoshuki))
- Add `sync: false` option to `Rack::Deflater`. (Eric Wong)
- Add `Builder#freeze_app` to freeze application and all middleware instances. ([@jeremyevans])
- Add API to extract cookies from `Rack::MockResponse`. ([@petercline](https://github.com/petercline))

### Changed

- Don't propagate nil values from middleware. ([@ioquatix])
- Lazily initialize the response body and only buffer it if required. ([@ioquatix])
- Fix deflater zlib buffer errors on empty body part. ([@felixbuenemann](https://github.com/felixbuenemann))
- Set `X-Accel-Redirect` to percent-encoded path. ([@diskkid](https://github.com/diskkid))
- Remove unnecessary buffer growing when parsing multipart. ([@tainoe](https://github.com/tainoe))
- Expand the root path in `Rack::Static` upon initialization. ([@rosenfeld](https://github.com/rosenfeld))
- Make `ShowExceptions` work with binary data. ([@axyjo](https://github.com/axyjo))
- Use buffer string when parsing multipart requests. ([@janko-m](https://github.com/janko-m))
- Support optional UTF-8 Byte Order Mark (BOM) in config.ru. ([@mikegee](https://github.com/mikegee))
- Handle `X-Forwarded-For` with optional port. ([@dpritchett](https://github.com/dpritchett))
- Use `Time#httpdate` format for Expires, as proposed by RFC 7231. ([@nanaya](https://github.com/nanaya))
- Make `Utils.status_code` raise an error when the status symbol is invalid instead of `500`. ([@adambutler](https://github.com/adambutler))
- Rename `Request::SCHEME_WHITELIST` to `Request::ALLOWED_SCHEMES`.
- Make `Multipart::Parser.get_filename` accept files with `+` in their name. ([@lucaskanashiro](https://github.com/lucaskanashiro))
- Add Falcon to the default handler fallbacks. ([@ioquatix])
- Update codebase to avoid string mutations in preparation for `frozen_string_literals`. ([@pat](https://github.com/pat))
- Change `MockRequest#env_for` to rely on the input optionally responding to `#size` instead of `#length`. ([@janko](https://github.com/janko))
- Rename `Rack::File` -> `Rack::Files` and add deprecation notice. ([@postmodern](https://github.com/postmodern))
- Prefer Base64 “strict encoding” for Base64 cookies. ([@ioquatix])

### Removed

- BREAKING CHANGE: Remove `to_ary` from Response ([@tenderlove](https://github.com/tenderlove))
- Deprecate `Rack::Session::Memcache` in favor of `Rack::Session::Dalli` from dalli gem ([@fatkodima](https://github.com/fatkodima))

### Fixed

- Eliminate warnings for Ruby 2.7. ([@osamtimizer](https://github.com/osamtimizer]))

### Documentation

- Update broken example in `Session::Abstract::ID` documentation. ([tonytonyjan](https://github.com/tonytonyjan))
- Add Padrino to the list of frameworks implementing Rack. ([@wikimatze](https://github.com/wikimatze))
- Remove Mongrel from the suggested server options in the help output. ([@tricknotes](https://github.com/tricknotes))
- Replace `HISTORY.md` and `NEWS.md` with `CHANGELOG.md`. ([@twitnithegirl](https://github.com/twitnithegirl))
- CHANGELOG updates. ([@drenmi](https://github.com/Drenmi), [@p8](https://github.com/p8))

## [2.0.8] - 2019-12-08

### Security

- [[CVE-2019-16782](https://nvd.nist.gov/vuln/detail/CVE-2019-16782)] Prevent timing attacks targeted at session ID lookup. BREAKING CHANGE: Session ID is now a SessionId instance instead of a String. ([@tenderlove](https://github.com/tenderlove), [@rafaelfranca](https://github.com/rafaelfranca))

## [1.6.12] - 2019-12-08

### Security

- [[CVE-2019-16782](https://nvd.nist.gov/vuln/detail/CVE-2019-16782)] Prevent timing attacks targeted at session ID lookup. BREAKING CHANGE: Session ID is now a SessionId instance instead of a String. ([@tenderlove](https://github.com/tenderlove), [@rafaelfranca](https://github.com/rafaelfranca))

## [2.0.7] - 2019-04-02

### Fixed

- Remove calls to `#eof?` on Rack input in `Multipart::Parser`, as this breaks the specification. ([@matthewd](https://github.com/matthewd))
- Preserve forwarded IP addresses for trusted proxy chains. ([@SamSaffron](https://github.com/SamSaffron))

## [2.0.6] - 2018-11-05

### Fixed

- [[CVE-2018-16470](https://nvd.nist.gov/vuln/detail/CVE-2018-16470)] Reduce buffer size of `Multipart::Parser` to avoid pathological parsing. ([@tenderlove](https://github.com/tenderlove))
- Fix a call to a non-existing method `#accepts_html` in the `ShowExceptions` middleware. ([@tomelm](https://github.com/tomelm))
- [[CVE-2018-16471](https://nvd.nist.gov/vuln/detail/CVE-2018-16471)] Whitelist HTTP and HTTPS schemes in `Request#scheme` to prevent a possible XSS attack. ([@PatrickTulskie](https://github.com/PatrickTulskie))

## [2.0.5] - 2018-04-23

### Fixed

- Record errors originating from invalid UTF8 in `MethodOverride` middleware instead of breaking. ([@mclark](https://github.com/mclark))

## [2.0.4] - 2018-01-31

### Changed

- Ensure the `Lock` middleware passes the original `env` object. ([@lugray](https://github.com/lugray))
- Improve performance of `Multipart::Parser` when uploading large files. ([@tompng](https://github.com/tompng))
- Increase buffer size in `Multipart::Parser` for better performance. ([@jkowens](https://github.com/jkowens))
- Reduce memory usage of `Multipart::Parser` when uploading large files. ([@tompng](https://github.com/tompng))
- Replace ConcurrentRuby dependency with native `Queue`. ([@devmchakan](https://github.com/devmchakan))

### Fixed

- Require the correct digest algorithm in the `ETag` middleware. ([@matthewd](https://github.com/matthewd))

### Documentation

- Update homepage links to use SSL. ([@hugoabonizio](https://github.com/hugoabonizio))

## [2.0.3] - 2017-05-15

### Changed

- Ensure `env` values are ASCII 8-bit encoded. ([@eileencodes](https://github.com/eileencodes))

### Fixed

- Prevent exceptions when a class with mixins inherits from `Session::Abstract::ID`. ([@jnraine](https://github.com/jnraine))

## [2.0.2] - 2017-05-08

### Added

- Allow `Session::Abstract::SessionHash#fetch` to accept a block with a default value. ([@yannvanhalewyn](https://github.com/yannvanhalewyn))
- Add `Builder#freeze_app` to freeze application and all middleware. ([@jeremyevans])

### Changed

- Freeze default session options to avoid accidental mutation. ([@kirs](https://github.com/kirs))
- Detect partial hijack without hash headers. ([@devmchakan](https://github.com/devmchakan))
- Update tests to use MiniTest 6 matchers. ([@tonytonyjan](https://github.com/tonytonyjan))
- Allow 205 Reset Content responses to set a Content-Length, as RFC 7231 proposes setting this to 0. ([@devmchakan](https://github.com/devmchakan))

### Fixed

- Handle `NULL` bytes in multipart filenames. ([@casperisfine](https://github.com/casperisfine))
- Remove warnings due to miscapitalized global. ([@ioquatix])
- Prevent exceptions caused by a race condition on multi-threaded servers. ([@sophiedeziel](https://github.com/sophiedeziel))
- Add RDoc as an explicit dependency for `doc` group. ([@tonytonyjan](https://github.com/tonytonyjan))
- Record errors originating from `Multipart::Parser` in the `MethodOverride` middleware instead of letting them bubble up. ([@carlzulauf](https://github.com/carlzulauf))
- Remove remaining use of removed `Utils#bytesize` method from the `File` middleware. ([@brauliomartinezlm](https://github.com/brauliomartinezlm))

### Removed

- Remove `deflate` encoding support to reduce caching overhead. ([@devmchakan](https://github.com/devmchakan))

### Documentation

- Update broken example in `Deflater` documentation. ([@mwpastore](https://github.com/mwpastore))

## [2.0.1] - 2016-06-30

### Changed

- Remove JSON as an explicit dependency. ([@mperham](https://github.com/mperham))


# History/News Archive
Items below this line are from the previously maintained HISTORY.md and NEWS.md files.

## [2.0.0.rc1] 2016-05-06
- Rack::Session::Abstract::ID is deprecated. Please change to use Rack::Session::Abstract::Persisted

## [2.0.0.alpha] 2015-12-04
- First-party "SameSite" cookies. Browsers omit SameSite cookies from third-party requests, closing the door on many CSRF attacks.
- Pass `same_site: true` (or `:strict`) to enable: response.set_cookie 'foo', value: 'bar', same_site: true or `same_site: :lax` to use Lax enforcement: response.set_cookie 'foo', value: 'bar', same_site: :lax
- Based on version 7 of the Same-site Cookies internet draft:
	https://tools.ietf.org/html/draft-west-first-party-cookies-07
- Thanks to Ben Toews (@mastahyeti) and Bob Long (@bobjflong) for updating to drafts 5 and 7.
- Add `Rack::Events` middleware for adding event based middleware: middleware that does not care about the response body, but only cares about doing work at particular points in the request / response lifecycle.
- Add `Rack::Request#authority` to calculate the authority under which the response is being made (this will be handy for h2 pushes).
- Add `Rack::Response::Helpers#cache_control` and `cache_control=`. Use this for setting cache control headers on your response objects.
- Add `Rack::Response::Helpers#etag` and `etag=`.  Use this for setting etag values on the response.
- Introduce `Rack::Response::Helpers#add_header` to add a value to a multi-valued response header. Implemented in terms of other `Response#*_header` methods, so it's available to any response-like class that includes the `Helpers` module.
- Add `Rack::Request#add_header` to match.
- `Rack::Session::Abstract::ID` IS DEPRECATED.  Please switch to `Rack::Session::Abstract::Persisted`. `Rack::Session::Abstract::Persisted` uses a request object rather than the `env` hash.
- Pull `ENV` access inside the request object in to a module.  This will help with legacy Request objects that are ENV based but don't want to inherit from Rack::Request
- Move most methods on the `Rack::Request` to a module `Rack::Request::Helpers` and use public API to get values from the request object.  This enables users to mix `Rack::Request::Helpers` in to their own objects so they can implement `(get|set|fetch|each)_header` as they see fit (for example a proxy object).
- Files and directories with + in the name are served correctly. Rather than unescaping paths like a form, we unescape with a URI parser using `Rack::Utils.unescape_path`. Fixes #265
- Tempfiles are automatically closed in the case that there were too
	many posted.
- Added methods for manipulating response headers that don't assume
	they're stored as a Hash. Response-like classes may include the
	Rack::Response::Helpers module if they define these methods:
    - Rack::Response#has_header?
	- Rack::Response#get_header
	- Rack::Response#set_header
	- Rack::Response#delete_header
- Introduce Util.get_byte_ranges that will parse the value of the HTTP_RANGE string passed to it without depending on the `env` hash. `byte_ranges` is deprecated in favor of this method.
- Change Session internals to use Request objects for looking up session information. This allows us to only allocate one request object when dealing with session objects (rather than doing it every time we need to manipulate cookies, etc).
- Add `Rack::Request#initialize_copy` so that the env is duped when the request gets duped.
- Added methods for manipulating request specific data.  This includes
	data set as CGI parameters, and just any arbitrary data the user wants
	to associate with a particular request.  New methods:
	 - Rack::Request#has_header?
	 - Rack::Request#get_header
	 - Rack::Request#fetch_header
	 - Rack::Request#each_header
	 - Rack::Request#set_header
	 - Rack::Request#delete_header
- lib/rack/utils.rb: add a method for constructing "delete" cookie
	headers.  This allows us to construct cookie headers without depending
	on the side effects of mutating a hash.
- Prevent extremely deep parameters from being parsed. CVE-2015-3225

## [1.6.1] 2015-05-06
  - Fix CVE-2014-9490, denial of service attack in OkJson
  - Use a monotonic time for Rack::Runtime, if available
  - RACK_MULTIPART_LIMIT changed to RACK_MULTIPART_PART_LIMIT (RACK_MULTIPART_LIMIT is deprecated and will be removed in 1.7.0)

## [1.5.3] 2015-05-06
  - Fix CVE-2014-9490, denial of service attack in OkJson
  - Backport bug fixes to 1.5 series

## [1.6.0] 2014-01-18
  - Response#unauthorized? helper
  - Deflater now accepts an options hash to control compression on a per-request level
  - Builder#warmup method for app preloading
  - Request#accept_language method to extract HTTP_ACCEPT_LANGUAGE
  - Add quiet mode of rack server, rackup --quiet
  - Update HTTP Status Codes to RFC 7231
  - Less strict header name validation according to RFC 2616
  - SPEC updated to specify headers conform to RFC7230 specification
  - Etag correctly marks etags as weak
  - Request#port supports multiple x-http-forwarded-proto values
  - Utils#multipart_part_limit configures the maximum number of parts a request can contain
  - Default host to localhost when in development mode
  - Various bugfixes and performance improvements

## [1.5.2] 2013-02-07
  - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
  - Fix CVE-2013-0262, symlink path traversal in Rack::File
  - Add various methods to Session for enhanced Rails compatibility
  - Request#trusted_proxy? now only matches whole strings
  - Add JSON cookie coder, to be default in Rack 1.6+ due to security concerns
  - URLMap host matching in environments that don't set the Host header fixed
  - Fix a race condition that could result in overwritten pidfiles
  - Various documentation additions

## [1.4.5] 2013-02-07
  - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie
  - Fix CVE-2013-0262, symlink path traversal in Rack::File

## [1.1.6, 1.2.8, 1.3.10] 2013-02-07
  - Fix CVE-2013-0263, timing attack against Rack::Session::Cookie

## [1.5.1] 2013-01-28
  - Rack::Lint check_hijack now conforms to other parts of SPEC
  - Added hash-like methods to Abstract::ID::SessionHash for compatibility
  - Various documentation corrections

## [1.5.0] 2013-01-21
  - Introduced hijack SPEC, for before-response and after-response hijacking
  - SessionHash is no longer a Hash subclass
  - Rack::File cache_control parameter is removed, in place of headers options
  - Rack::Auth::AbstractRequest#scheme now yields strings, not symbols
  - Rack::Utils cookie functions now format expires in RFC 2822 format
  - Rack::File now has a default mime type
  - rackup -b 'run Rack::Files.new(".")', option provides command line configs
  - Rack::Deflater will no longer double encode bodies
  - Rack::Mime#match? provides convenience for Accept header matching
  - Rack::Utils#q_values provides splitting for Accept headers
  - Rack::Utils#best_q_match provides a helper for Accept headers
  - Rack::Handler.pick provides convenience for finding available servers
  - Puma added to the list of default servers (preferred over Webrick)
  - Various middleware now correctly close body when replacing it
  - Rack::Request#params is no longer persistent with only GET params
  - Rack::Request#update_param and #delete_param provide persistent operations
  - Rack::Request#trusted_proxy? now returns true for local unix sockets
  - Rack::Response no longer forces Content-Types
  - Rack::Sendfile provides local mapping configuration options
  - Rack::Utils#rfc2109 provides old netscape style time output
  - Updated HTTP status codes
  - Ruby 1.8.6 likely no longer passes tests, and is no longer fully supported

## [1.4.4, 1.3.9, 1.2.7, 1.1.5] 2013-01-13
  - [SEC] Rack::Auth::AbstractRequest no longer symbolizes arbitrary strings
  - Fixed erroneous test case in the 1.3.x series

## [1.4.3] 2013-01-07
  - Security: Prevent unbounded reads in large multipart boundaries

## [1.3.8] 2013-01-07
  - Security: Prevent unbounded reads in large multipart boundaries

## [1.4.2] 2013-01-06
  - Add warnings when users do not provide a session secret
  - Fix parsing performance for unquoted filenames
  - Updated URI backports
  - Fix URI backport version matching, and silence constant warnings
  - Correct parameter parsing with empty values
  - Correct rackup '-I' flag, to allow multiple uses
  - Correct rackup pidfile handling
  - Report rackup line numbers correctly
  - Fix request loops caused by non-stale nonces with time limits
  - Fix reloader on Windows
  - Prevent infinite recursions from Response#to_ary
  - Various middleware better conforms to the body close specification
  - Updated language for the body close specification
  - Additional notes regarding ECMA escape compatibility issues
  - Fix the parsing of multiple ranges in range headers
  - Prevent errors from empty parameter keys
  - Added PATCH verb to Rack::Request
  - Various documentation updates
  - Fix session merge semantics (fixes rack-test)
  - Rack::Static :index can now handle multiple directories
  - All tests now utilize Rack::Lint (special thanks to Lars Gierth)
  - Rack::File cache_control parameter is now deprecated, and removed by 1.5
  - Correct Rack::Directory script name escaping
  - Rack::Static supports header rules for sophisticated configurations
  - Multipart parsing now works without a Content-Length header
  - New logos courtesy of Zachary Scott!
  - Rack::BodyProxy now explicitly defines #each, useful for C extensions
  - Cookies that are not URI escaped no longer cause exceptions

## [1.3.7] 2013-01-06
  - Add warnings when users do not provide a session secret
  - Fix parsing performance for unquoted filenames
  - Updated URI backports
  - Fix URI backport version matching, and silence constant warnings
  - Correct parameter parsing with empty values
  - Correct rackup '-I' flag, to allow multiple uses
  - Correct rackup pidfile handling
  - Report rackup line numbers correctly
  - Fix request loops caused by non-stale nonces with time limits
  - Fix reloader on Windows
  - Prevent infinite recursions from Response#to_ary
  - Various middleware better conforms to the body close specification
  - Updated language for the body close specification
  - Additional notes regarding ECMA escape compatibility issues
  - Fix the parsing of multiple ranges in range headers

## [1.2.6] 2013-01-06
  - Add warnings when users do not provide a session secret
  - Fix parsing performance for unquoted filenames

## [1.1.4] 2013-01-06
  - Add warnings when users do not provide a session secret

## [1.4.1] 2012-01-22
  - Alter the keyspace limit calculations to reduce issues with nested params
  - Add a workaround for multipart parsing where files contain unescaped "%"
  - Added Rack::Response::Helpers#method_not_allowed? (code 405)
  - Rack::File now returns 404 for illegal directory traversals
  - Rack::File now returns 405 for illegal methods (non HEAD/GET)
  - Rack::Cascade now catches 405 by default, as well as 404
  - Cookies missing '--' no longer cause an exception to be raised
  - Various style changes and documentation spelling errors
  - Rack::BodyProxy always ensures to execute its block
  - Additional test coverage around cookies and secrets
  - Rack::Session::Cookie can now be supplied either secret or old_secret
  - Tests are no longer dependent on set order
  - Rack::Static no longer defaults to serving index files
  - Rack.release was fixed

## [1.4.0] 2011-12-28
  - Ruby 1.8.6 support has officially been dropped. Not all tests pass.
  - Raise sane error messages for broken config.ru
  - Allow combining run and map in a config.ru
  - Rack::ContentType will not set Content-Type for responses without a body
  - Status code 205 does not send a response body
  - Rack::Response::Helpers will not rely on instance variables
  - Rack::Utils.build_query no longer outputs '=' for nil query values
  - Various mime types added
  - Rack::MockRequest now supports HEAD
  - Rack::Directory now supports files that contain RFC3986 reserved chars
  - Rack::File now only supports GET and HEAD requests
  - Rack::Server#start now passes the block to Rack::Handler::<h>#run
  - Rack::Static now supports an index option
  - Added the Teapot status code
  - rackup now defaults to Thin instead of Mongrel (if installed)
  - Support added for HTTP_X_FORWARDED_SCHEME
  - Numerous bug fixes, including many fixes for new and alternate rubies

## [1.1.3] 2011-12-28
  - Security fix. http://www.ocert.org/advisories/ocert-2011-003.html
    Further information here: http://jruby.org/2011/12/27/jruby-1-6-5-1

## [1.3.5] 2011-10-17
  - Fix annoying warnings caused by the backport in 1.3.4

## [1.3.4] 2011-10-01
  - Backport security fix from 1.9.3, also fixes some roundtrip issues in URI
  - Small documentation update
  - Fix an issue where BodyProxy could cause an infinite recursion
  - Add some supporting files for travis-ci

## [1.2.4] 2011-09-16
  - Fix a bug with MRI regex engine to prevent XSS by malformed unicode

## [1.3.3] 2011-09-16
  - Fix bug with broken query parameters in Rack::ShowExceptions
  - Rack::Request#cookies no longer swallows exceptions on broken input
  - Prevents XSS attacks enabled by bug in Ruby 1.8's regexp engine
  - Rack::ConditionalGet handles broken If-Modified-Since helpers

## [1.3.2] 2011-07-16
  - Fix for Rails and rack-test, Rack::Utils#escape calls to_s

## [1.3.1] 2011-07-13
  - Fix 1.9.1 support
  - Fix JRuby support
  - Properly handle $KCODE in Rack::Utils.escape
  - Make method_missing/respond_to behavior consistent for Rack::Lock,
    Rack::Auth::Digest::Request and Rack::Multipart::UploadedFile
  - Reenable passing rack.session to session middleware
  - Rack::CommonLogger handles streaming responses correctly
  - Rack::MockResponse calls close on the body object
  - Fix a DOS vector from MRI stdlib backport

## [1.2.3] 2011-05-22
  - Pulled in relevant bug fixes from 1.3
  - Fixed 1.8.6 support

## [1.3.0] 2011-05-22
  - Various performance optimizations
  - Various multipart fixes
  - Various multipart refactors
  - Infinite loop fix for multipart
  - Test coverage for Rack::Server returns
  - Allow files with '..', but not path components that are '..'
  - rackup accepts handler-specific options on the command line
  - Request#params no longer merges POST into GET (but returns the same)
  - Use URI.encode_www_form_component instead. Use core methods for escaping.
  - Allow multi-line comments in the config file
  - Bug L#94 reported by Nikolai Lugovoi, query parameter unescaping.
  - Rack::Response now deletes Content-Length when appropriate
  - Rack::Deflater now supports streaming
  - Improved Rack::Handler loading and searching
  - Support for the PATCH verb
  - env['rack.session.options'] now contains session options
  - Cookies respect renew
  - Session middleware uses SecureRandom.hex

## [1.2.2, 1.1.2] 2011-03-13
  - Security fix in Rack::Auth::Digest::MD5: when authenticator
    returned nil, permission was granted on empty password.

## [1.2.1] 2010-06-15
  - Make CGI handler rewindable
  - Rename spec/ to test/ to not conflict with SPEC on lesser
    operating systems

## [1.2.0] 2010-06-13
  - Removed Camping adapter: Camping 2.0 supports Rack as-is
  - Removed parsing of quoted values
  - Add Request.trace? and Request.options?
  - Add mime-type for .webm and .htc
  - Fix HTTP_X_FORWARDED_FOR
  - Various multipart fixes
  - Switch test suite to bacon

## [1.1.0] 2010-01-03
  - Moved Auth::OpenID to rack-contrib.
  - SPEC change that relaxes Lint slightly to allow subclasses of the
    required types
  - SPEC change to document rack.input binary mode in greater detail
  - SPEC define optional rack.logger specification
  - File servers support X-Cascade header
  - Imported Config middleware
  - Imported ETag middleware
  - Imported Runtime middleware
  - Imported Sendfile middleware
  - New Logger and NullLogger middlewares
  - Added mime type for .ogv and .manifest.
  - Don't squeeze PATH_INFO slashes
  - Use Content-Type to determine POST params parsing
  - Update Rack::Utils::HTTP_STATUS_CODES hash
  - Add status code lookup utility
  - Response should call #to_i on the status
  - Add Request#user_agent
  - Request#host knows about forwarded host
  - Return an empty string for Request#host if HTTP_HOST and
    SERVER_NAME are both missing
  - Allow MockRequest to accept hash params
  - Optimizations to HeaderHash
  - Refactored rackup into Rack::Server
  - Added Utils.build_nested_query to complement Utils.parse_nested_query
  - Added Utils::Multipart.build_multipart to complement
    Utils::Multipart.parse_multipart
  - Extracted set and delete cookie helpers into Utils so they can be
    used outside Response
  - Extract parse_query and parse_multipart in Request so subclasses
    can change their behavior
  - Enforce binary encoding in RewindableInput
  - Set correct external_encoding for handlers that don't use RewindableInput

## [1.0.1] 2009-10-18
  - Bump remainder of rack.versions.
  - Support the pure Ruby FCGI implementation.
  - Fix for form names containing "=": split first then unescape components
  - Fixes the handling of the filename parameter with semicolons in names.
  - Add anchor to nested params parsing regexp to prevent stack overflows
  - Use more compatible gzip write api instead of "<<".
  - Make sure that Reloader doesn't break when executed via ruby -e
  - Make sure WEBrick respects the :Host option
  - Many Ruby 1.9 fixes.

## [1.0.0] 2009-04-25
  - SPEC change: Rack::VERSION has been pushed to [1,0].
  - SPEC change: header values must be Strings now, split on "\n".
  - SPEC change: Content-Length can be missing, in this case chunked transfer
    encoding is used.
  - SPEC change: rack.input must be rewindable and support reading into
    a buffer, wrap with Rack::RewindableInput if it isn't.
  - SPEC change: rack.session is now specified.
  - SPEC change: Bodies can now additionally respond to #to_path with
    a filename to be served.
  - NOTE: String bodies break in 1.9, use an Array consisting of a
    single String instead.
  - New middleware Rack::Lock.
  - New middleware Rack::ContentType.
  - Rack::Reloader has been rewritten.
  - Major update to Rack::Auth::OpenID.
  - Support for nested parameter parsing in Rack::Response.
  - Support for redirects in Rack::Response.
  - HttpOnly cookie support in Rack::Response.
  - The Rakefile has been rewritten.
  - Many bugfixes and small improvements.

## [0.9.1] 2009-01-09
  - Fix directory traversal exploits in Rack::File and Rack::Directory.

## [0.9] 2009-01-06
  - Rack is now managed by the Rack Core Team.
  - Rack::Lint is stricter and follows the HTTP RFCs more closely.
  - Added ConditionalGet middleware.
  - Added ContentLength middleware.
  - Added Deflater middleware.
  - Added Head middleware.
  - Added MethodOverride middleware.
  - Rack::Mime now provides popular MIME-types and their extension.
  - Mongrel Header now streams.
  - Added Thin handler.
  - Official support for swiftiplied Mongrel.
  - Secure cookies.
  - Made HeaderHash case-preserving.
  - Many bugfixes and small improvements.

## [0.4] 2008-08-21
  - New middleware, Rack::Deflater, by Christoffer Sawicki.
  - OpenID authentication now needs ruby-openid 2.
  - New Memcache sessions, by blink.
  - Explicit EventedMongrel handler, by Joshua Peek <josh@joshpeek.com>
  - Rack::Reloader is not loaded in rackup development mode.
  - rackup can daemonize with -D.
  - Many bugfixes, especially for pool sessions, URLMap, thread safety
    and tempfile handling.
  - Improved tests.
  - Rack moved to Git.

## [0.3] 2008-02-26
  - LiteSpeed handler, by Adrian Madrid.
  - SCGI handler, by Jeremy Evans.
  - Pool sessions, by blink.
  - OpenID authentication, by blink.
  - :Port and :File options for opening FastCGI sockets, by blink.
  - Last-Modified HTTP header for Rack::File, by blink.
  - Rack::Builder#use now accepts blocks, by Corey Jewett.
    (See example/protectedlobster.ru)
  - HTTP status 201 can contain a Content-Type and a body now.
  - Many bugfixes, especially related to Cookie handling.

## [0.2] 2007-05-16
  - HTTP Basic authentication.
  - Cookie Sessions.
  - Static file handler.
  - Improved Rack::Request.
  - Improved Rack::Response.
  - Added Rack::ShowStatus, for better default error messages.
  - Bug fixes in the Camping adapter.
  - Removed Rails adapter, was too alpha.

## [0.1] 2007-03-03

[@ioquatix]: https://github.com/ioquatix "Samuel Williams"
[@jeremyevans]: https://github.com/jeremyevans "Jeremy Evans"
[@amatsuda]: https://github.com/amatsuda "Akira Matsuda"
[@wjordan]: https://github.com/wjordan "Will Jordan"
[@BlakeWilliams]: https://github.com/BlakeWilliams "Blake Williams"
PK!"#[�tz��,�,gems/rack-3.0.8/README.mdnu�[���# ![Rack](contrib/logo.webp)

> **_NOTE:_** Rack v3.0.0 was recently released. Please check the [Upgrade
> Guide](UPGRADE-GUIDE.md) for more details about migrating your existing
> servers, middlewares and applications. For detailed information on specific
> changes, check the [Change Log](CHANGELOG.md).

Rack provides a minimal, modular, and adaptable interface for developing web
applications in Ruby. By wrapping HTTP requests and responses in the simplest
way possible, it unifies and distills the bridge between web servers, web
frameworks, and web application into a single method call.

The exact details of this are described in the [Rack Specification], which all
Rack applications should conform to.

## Installation

Add the rack gem to your application bundle, or follow the instructions provided
by a [supported web framework](#supported-web-frameworks):

```bash
# Install it generally:
$ gem install rack --pre

# or, add it to your current application gemfile:
$ bundle add rack --version 3.0.0
```

If you need features from `Rack::Session` or `bin/rackup` please add those gems separately.

```bash
$ gem install rack-session rackup
```

## Usage

Create a file called `config.ru` with the following contents:

```ruby
run do |env|
  [200, {}, ["Hello World"]]
end
```

Run this using the rackup gem or another [supported web
server](#supported-web-servers).

```bash
$ gem install rackup
$ rackup
$ curl http://localhost:9292
Hello World
```

## Supported web servers

Rack is supported by a wide range of servers, including:

* [Agoo](https://github.com/ohler55/agoo)
* [Falcon](https://github.com/socketry/falcon) **(Rack 3 Compatible)**
* [Iodine](https://github.com/boazsegev/iodine)
* [NGINX Unit](https://unit.nginx.org/)
* [Phusion Passenger](https://www.phusionpassenger.com/) (which is mod_rack for
  Apache and for nginx)
* [Puma](https://puma.io/)
* [Thin](https://github.com/macournoyer/thin)
* [Unicorn](https://yhbt.net/unicorn/)
* [uWSGI](https://uwsgi-docs.readthedocs.io/en/latest/)
* [Lamby](https://lamby.custominktech.com) (for AWS Lambda)

You will need to consult the server documentation to find out what features and
limitations they may have. In general, any valid Rack app will run the same on
all these servers, without changing anything.

### Rackup

Rack provides a separate gem, [rackup](https://github.com/rack/rackup) which is
a generic interface for running a Rack application on supported servers, which
include `WEBRick`, `Puma`, `Falcon` and others.

## Supported web frameworks

These frameworks and many others support the [Rack Specification]:

* [Camping](https://github.com/camping/camping)
* [Hanami](https://hanamirb.org/)
* [Padrino](https://padrinorb.com/)
* [Roda](https://github.com/jeremyevans/roda) **(Rack 3 Compatible)**
* [Ruby on Rails](https://rubyonrails.org/)
* [Sinatra](https://sinatrarb.com/)
* [Utopia](https://github.com/socketry/utopia) **(Rack 3 Compatible)**
* [WABuR](https://github.com/ohler55/wabur)

### Older (possibly unsupported) web frameworks

* [Ramaze](http://ramaze.net/)
* [Rum](https://github.com/leahneukirchen/rum)

## Available middleware shipped with Rack

Between the server and the framework, Rack can be customized to your
applications needs using middleware. Rack itself ships with the following
middleware:

* `Rack::CommonLogger` for creating Apache-style logfiles.
* `Rack::ConditionalGet` for returning [Not
  Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/304)
  responses when the response has not changed.
* `Rack::Config` for modifying the environment before processing the request.
* `Rack::ContentLength` for setting a `content-length` header based on body
  size.
* `Rack::ContentType` for setting a default `content-type` header for responses.
* `Rack::Deflater` for compressing responses with gzip.
* `Rack::ETag` for setting `etag` header on bodies that can be buffered.
* `Rack::Events` for providing easy hooks when a request is received and when
  the response is sent.
* `Rack::Files` for serving static files.
* `Rack::Head` for returning an empty body for HEAD requests.
* `Rack::Lint` for checking conformance to the [Rack Specification].
* `Rack::Lock` for serializing requests using a mutex.
* `Rack::Logger` for setting a logger to handle logging errors.
* `Rack::MethodOverride` for modifying the request method based on a submitted
  parameter.
* `Rack::Recursive` for including data from other paths in the application, and
  for performing internal redirects.
* `Rack::Reloader` for reloading files if they have been modified.
* `Rack::Runtime` for including a response header with the time taken to process
  the request.
* `Rack::Sendfile` for working with web servers that can use optimized file
  serving for file system paths.
* `Rack::ShowException` for catching unhandled exceptions and presenting them in
  a nice and helpful way with clickable backtrace.
* `Rack::ShowStatus` for using nice error pages for empty client error
  responses.
* `Rack::Static` for more configurable serving of static files.
* `Rack::TempfileReaper` for removing temporary files creating during a request.

All these components use the same interface, which is described in detail in the
[Rack Specification]. These optional components can be used in any way you wish.

### Convenience interfaces

If you want to develop outside of existing frameworks, implement your own ones,
or develop middleware, Rack provides many helpers to create Rack applications
quickly and without doing the same web stuff all over:

* `Rack::Request` which also provides query string parsing and multipart
  handling.
* `Rack::Response` for convenient generation of HTTP replies and cookie
  handling.
* `Rack::MockRequest` and `Rack::MockResponse` for efficient and quick testing
  of Rack application without real HTTP round-trips.
* `Rack::Cascade` for trying additional Rack applications if an application
  returns a not found or method not supported response.
* `Rack::Directory` for serving files under a given directory, with directory
  indexes.
* `Rack::MediaType` for parsing content-type headers.
* `Rack::Mime` for determining content-type based on file extension.
* `Rack::RewindableInput` for making any IO object rewindable, using a temporary
  file buffer.
* `Rack::URLMap` to route to multiple applications inside the same process.

## Configuration

Rack exposes several configuration parameters to control various features of the
implementation.

### `param_depth_limit`

```ruby
Rack::Utils.param_depth_limit = 32 # default
```

The maximum amount of nesting allowed in parameters. For example, if set to 3,
this query string would be allowed:

```
?a[b][c]=d
```

but this query string would not be allowed:

```
?a[b][c][d]=e
```

Limiting the depth prevents a possible stack overflow when parsing parameters.

### `multipart_file_limit`

```ruby
Rack::Utils.multipart_file_limit = 128 # default
```

The maximum number of parts with a filename a request can contain. Accepting
too many parts can lead to the server running out of file handles.

The default is 128, which means that a single request can't upload more than 128
files at once. Set to 0 for no limit.

Can also be set via the `RACK_MULTIPART_FILE_LIMIT` environment variable.

(This is also aliased as `multipart_part_limit` and `RACK_MULTIPART_PART_LIMIT` for compatibility)


### `multipart_total_part_limit`

The maximum total number of parts a request can contain of any type, including
both file and non-file form fields.

The default is 4096, which means that a single request can't contain more than
4096 parts.

Set to 0 for no limit.

Can also be set via the `RACK_MULTIPART_TOTAL_PART_LIMIT` environment variable.


## Changelog

See [CHANGELOG.md](CHANGELOG.md).

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for specific details about how to make a
contribution to Rack.

Please post bugs, suggestions and patches to [GitHub
Issues](https://github.com/rack/rack/issues).

Please check our [Security Policy](https://github.com/rack/rack/security/policy)
for responsible disclosure and security bug reporting process. Due to wide usage
of the library, it is strongly preferred that we manage timing in order to
provide viable patches at the time of disclosure. Your assistance in this matter
is greatly appreciated.

## See Also

### `rack-contrib`

The plethora of useful middleware created the need for a project that collects
fresh Rack middleware. `rack-contrib` includes a variety of add-on components
for Rack and it is easy to contribute new modules.

* https://github.com/rack/rack-contrib

### `rack-session`

Provides convenient session management for Rack.

* https://github.com/rack/rack-session

## Thanks

The Rack Core Team, consisting of

* Aaron Patterson [tenderlove](https://github.com/tenderlove)
* Samuel Williams [ioquatix](https://github.com/ioquatix)
* Jeremy Evans [jeremyevans](https://github.com/jeremyevans)
* Eileen Uchitelle [eileencodes](https://github.com/eileencodes)
* Matthew Draper [matthewd](https://github.com/matthewd)
* Rafael França [rafaelfranca](https://github.com/rafaelfranca)

and the Rack Alumni

* Ryan Tomayko [rtomayko](https://github.com/rtomayko)
* Scytrin dai Kinthra [scytrin](https://github.com/scytrin)
* Leah Neukirchen [leahneukirchen](https://github.com/leahneukirchen)
* James Tucker [raggi](https://github.com/raggi)
* Josh Peek [josh](https://github.com/josh)
* José Valim [josevalim](https://github.com/josevalim)
* Michael Fellinger [manveru](https://github.com/manveru)
* Santiago Pastorino [spastorino](https://github.com/spastorino)
* Konstantin Haase [rkh](https://github.com/rkh)

would like to thank:

* Adrian Madrid, for the LiteSpeed handler.
* Christoffer Sawicki, for the first Rails adapter and `Rack::Deflater`.
* Tim Fletcher, for the HTTP authentication code.
* Luc Heinrich for the Cookie sessions, the static file handler and bugfixes.
* Armin Ronacher, for the logo and racktools.
* Alex Beregszaszi, Alexander Kahn, Anil Wadghule, Aredridel, Ben Alpert, Dan
  Kubb, Daniel Roethlisberger, Matt Todd, Tom Robinson, Phil Hagelberg, S. Brent
  Faulkner, Bosko Milekic, Daniel Rodríguez Troitiño, Genki Takiuchi, Geoffrey
  Grosenbach, Julien Sanchez, Kamal Fariz Mahyuddin, Masayoshi Takahashi,
  Patrick Aljordm, Mig, Kazuhiro Nishiyama, Jon Bardin, Konstantin Haase, Larry
  Siden, Matias Korhonen, Sam Ruby, Simon Chiang, Tim Connor, Timur Batyrshin,
  and Zach Brock for bug fixing and other improvements.
* Eric Wong, Hongli Lai, Jeremy Kemper for their continuous support and API
  improvements.
* Yehuda Katz and Carl Lerche for refactoring rackup.
* Brian Candler, for `Rack::ContentType`.
* Graham Batty, for improved handler loading.
* Stephen Bannasch, for bug reports and documentation.
* Gary Wright, for proposing a better `Rack::Response` interface.
* Jonathan Buch, for improvements regarding `Rack::Response`.
* Armin Röhrl, for tracking down bugs in the Cookie generator.
* Alexander Kellett for testing the Gem and reviewing the announcement.
* Marcus Rückert, for help with configuring and debugging lighttpd.
* The WSGI team for the well-done and documented work they've done and Rack
  builds up on.
* All bug reporters and patch contributors not mentioned above.

## License

Rack is released under the [MIT License](MIT-LICENSE).

[Rack Specification]: SPEC.rdoc
PK!"#[G�	TTgems/rack-3.0.8/MIT-LICENSEnu�[���The MIT License (MIT)

Copyright (C) 2007-2021 Leah Neukirchen <http://leahneukirchen.org/infopage.html>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
PK!"#[�um�	�	gems/rack-3.0.8/lib/rack.rbnu�[���# frozen_string_literal: true

# Copyright (C) 2007-2019 Leah Neukirchen <http://leahneukirchen.org/infopage.html>
#
# Rack is freely distributable under the terms of an MIT-style license.
# See MIT-LICENSE or https://opensource.org/licenses/MIT.

# The Rack main module, serving as a namespace for all core Rack
# modules and classes.
#
# All modules meant for use in your application are <tt>autoload</tt>ed here,
# so it should be enough just to <tt>require 'rack'</tt> in your code.

require_relative 'rack/version'
require_relative 'rack/constants'

module Rack
  autoload :Builder, "rack/builder"
  autoload :BodyProxy, "rack/body_proxy"
  autoload :Cascade, "rack/cascade"
  autoload :Chunked, "rack/chunked"
  autoload :CommonLogger, "rack/common_logger"
  autoload :ConditionalGet, "rack/conditional_get"
  autoload :Config, "rack/config"
  autoload :ContentLength, "rack/content_length"
  autoload :ContentType, "rack/content_type"
  autoload :ETag, "rack/etag"
  autoload :Events, "rack/events"
  autoload :File, "rack/file"
  autoload :Files, "rack/files"
  autoload :Deflater, "rack/deflater"
  autoload :Directory, "rack/directory"
  autoload :ForwardRequest, "rack/recursive"
  autoload :Handler, "rack/handler"
  autoload :Head, "rack/head"
  autoload :Headers, "rack/headers"
  autoload :Lint, "rack/lint"
  autoload :Lock, "rack/lock"
  autoload :Logger, "rack/logger"
  autoload :MediaType, "rack/media_type"
  autoload :MethodOverride, "rack/method_override"
  autoload :Mime, "rack/mime"
  autoload :NullLogger, "rack/null_logger"
  autoload :QueryParser, "rack/query_parser"
  autoload :Recursive, "rack/recursive"
  autoload :Reloader, "rack/reloader"
  autoload :RewindableInput, "rack/rewindable_input"
  autoload :Runtime, "rack/runtime"
  autoload :Sendfile, "rack/sendfile"
  autoload :Server, "rack/server"
  autoload :ShowExceptions, "rack/show_exceptions"
  autoload :ShowStatus, "rack/show_status"
  autoload :Static, "rack/static"
  autoload :TempfileReaper, "rack/tempfile_reaper"
  autoload :URLMap, "rack/urlmap"
  autoload :Utils, "rack/utils"
  autoload :Multipart, "rack/multipart"

  autoload :MockRequest, "rack/mock_request"
  autoload :MockResponse, "rack/mock_response"

  autoload :Request, "rack/request"
  autoload :Response, "rack/response"

  module Auth
    autoload :Basic, "rack/auth/basic"
    autoload :AbstractRequest, "rack/auth/abstract/request"
    autoload :AbstractHandler, "rack/auth/abstract/handler"
    autoload :Digest, "rack/auth/digest"
  end
end
PK!"#[�|��!gems/rack-3.0.8/lib/rack/files.rbnu�[���# frozen_string_literal: true

require 'time'

require_relative 'constants'
require_relative 'head'
require_relative 'utils'
require_relative 'request'
require_relative 'mime'

module Rack
  # Rack::Files serves files below the +root+ directory given, according to the
  # path info of the Rack request.
  # e.g. when Rack::Files.new("/etc") is used, you can access 'passwd' file
  # as http://localhost:9292/passwd
  #
  # Handlers can detect if bodies are a Rack::Files, and use mechanisms
  # like sendfile on the +path+.

  class Files
    ALLOWED_VERBS = %w[GET HEAD OPTIONS]
    ALLOW_HEADER = ALLOWED_VERBS.join(', ')
    MULTIPART_BOUNDARY = 'AaB03x'

    attr_reader :root

    def initialize(root, headers = {}, default_mime = 'text/plain')
      @root = (::File.expand_path(root) if root)
      @headers = headers
      @default_mime = default_mime
      @head = Rack::Head.new(lambda { |env| get env })
    end

    def call(env)
      # HEAD requests drop the response body, including 4xx error messages.
      @head.call env
    end

    def get(env)
      request = Rack::Request.new env
      unless ALLOWED_VERBS.include? request.request_method
        return fail(405, "Method Not Allowed", { 'allow' => ALLOW_HEADER })
      end

      path_info = Utils.unescape_path request.path_info
      return fail(400, "Bad Request") unless Utils.valid_path?(path_info)

      clean_path_info = Utils.clean_path_info(path_info)
      path = ::File.join(@root, clean_path_info)

      available = begin
        ::File.file?(path) && ::File.readable?(path)
      rescue SystemCallError
        # Not sure in what conditions this exception can occur, but this
        # is a safe way to handle such an error.
        # :nocov:
        false
        # :nocov:
      end

      if available
        serving(request, path)
      else
        fail(404, "File not found: #{path_info}")
      end
    end

    def serving(request, path)
      if request.options?
        return [200, { 'allow' => ALLOW_HEADER, CONTENT_LENGTH => '0' }, []]
      end
      last_modified = ::File.mtime(path).httpdate
      return [304, {}, []] if request.get_header('HTTP_IF_MODIFIED_SINCE') == last_modified

      headers = { "last-modified" => last_modified }
      mime_type = mime_type path, @default_mime
      headers[CONTENT_TYPE] = mime_type if mime_type

      # Set custom headers
      headers.merge!(@headers) if @headers

      status = 200
      size = filesize path

      ranges = Rack::Utils.get_byte_ranges(request.get_header('HTTP_RANGE'), size)
      if ranges.nil?
        # No ranges:
        ranges = [0..size - 1]
      elsif ranges.empty?
        # Unsatisfiable. Return error, and file size:
        response = fail(416, "Byte range unsatisfiable")
        response[1]["content-range"] = "bytes */#{size}"
        return response
      else
        # Partial content
        partial_content = true

        if ranges.size == 1
          range = ranges[0]
          headers["content-range"] = "bytes #{range.begin}-#{range.end}/#{size}"
        else
          headers[CONTENT_TYPE] = "multipart/byteranges; boundary=#{MULTIPART_BOUNDARY}"
        end

        status = 206
        body = BaseIterator.new(path, ranges, mime_type: mime_type, size: size)
        size = body.bytesize
      end

      headers[CONTENT_LENGTH] = size.to_s

      if request.head?
        body = []
      elsif !partial_content
        body = Iterator.new(path, ranges, mime_type: mime_type, size: size)
      end

      [status, headers, body]
    end

    class BaseIterator
      attr_reader :path, :ranges, :options

      def initialize(path, ranges, options)
        @path = path
        @ranges = ranges
        @options = options
      end

      def each
        ::File.open(path, "rb") do |file|
          ranges.each do |range|
            yield multipart_heading(range) if multipart?

            each_range_part(file, range) do |part|
              yield part
            end
          end

          yield "\r\n--#{MULTIPART_BOUNDARY}--\r\n" if multipart?
        end
      end

      def bytesize
        size = ranges.inject(0) do |sum, range|
          sum += multipart_heading(range).bytesize if multipart?
          sum += range.size
        end
        size += "\r\n--#{MULTIPART_BOUNDARY}--\r\n".bytesize if multipart?
        size
      end

      def close; end

      private

      def multipart?
        ranges.size > 1
      end

      def multipart_heading(range)
<<-EOF
\r
--#{MULTIPART_BOUNDARY}\r
content-type: #{options[:mime_type]}\r
content-range: bytes #{range.begin}-#{range.end}/#{options[:size]}\r
\r
EOF
      end

      def each_range_part(file, range)
        file.seek(range.begin)
        remaining_len = range.end - range.begin + 1
        while remaining_len > 0
          part = file.read([8192, remaining_len].min)
          break unless part
          remaining_len -= part.length

          yield part
        end
      end
    end

    class Iterator < BaseIterator
      alias :to_path :path
    end

    private

    def fail(status, body, headers = {})
      body += "\n"

      [
        status,
        {
          CONTENT_TYPE   => "text/plain",
          CONTENT_LENGTH => body.size.to_s,
          "x-cascade" => "pass"
        }.merge!(headers),
        [body]
      ]
    end

    # The MIME type for the contents of the file located at @path
    def mime_type(path, default_mime)
      Mime.mime_type(::File.extname(path), default_mime)
    end

    def filesize(path)
      #   We check via File::size? whether this file provides size info
      #   via stat (e.g. /proc files often don't), otherwise we have to
      #   figure it out by reading the whole file into memory.
      ::File.size?(path) || ::File.read(path).bytesize
    end
  end
end
PK!"#[ɸHO��#gems/rack-3.0.8/lib/rack/version.rbnu�[���# frozen_string_literal: true

# Copyright (C) 2007-2019 Leah Neukirchen <http://leahneukirchen.org/infopage.html>
#
# Rack is freely distributable under the terms of an MIT-style license.
# See MIT-LICENSE or https://opensource.org/licenses/MIT.

# The Rack main module, serving as a namespace for all core Rack
# modules and classes.
#
# All modules meant for use in your application are <tt>autoload</tt>ed here,
# so it should be enough just to <tt>require 'rack'</tt> in your code.

module Rack
  # The Rack protocol version number implemented.
  VERSION = [1, 3].freeze
  deprecate_constant :VERSION

  VERSION_STRING = "1.3".freeze
  deprecate_constant :VERSION_STRING

  # The Rack protocol version number implemented.
  def self.version
    warn "Rack.version is deprecated and will be removed in Rack 3.1!", uplevel: 1
    VERSION
  end

  RELEASE = "3.0.8"

  # Return the Rack release as a dotted string.
  def self.release
    RELEASE
  end
end
PK!"#[��3���+gems/rack-3.0.8/lib/rack/method_override.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'request'
require_relative 'utils'

module Rack
  class MethodOverride
    HTTP_METHODS = %w[GET HEAD PUT POST DELETE OPTIONS PATCH LINK UNLINK]

    METHOD_OVERRIDE_PARAM_KEY = "_method"
    HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE"
    ALLOWED_METHODS = %w[POST]

    def initialize(app)
      @app = app
    end

    def call(env)
      if allowed_methods.include?(env[REQUEST_METHOD])
        method = method_override(env)
        if HTTP_METHODS.include?(method)
          env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] = env[REQUEST_METHOD]
          env[REQUEST_METHOD] = method
        end
      end

      @app.call(env)
    end

    def method_override(env)
      req = Request.new(env)
      method = method_override_param(req) ||
        env[HTTP_METHOD_OVERRIDE_HEADER]
      begin
        method.to_s.upcase
      rescue ArgumentError
        env[RACK_ERRORS].puts "Invalid string for method"
      end
    end

    private

    def allowed_methods
      ALLOWED_METHODS
    end

    def method_override_param(req)
      req.POST[METHOD_OVERRIDE_PARAM_KEY] if req.form_data? || req.parseable_data?
    rescue Utils::InvalidParameterError, Utils::ParameterTypeError, QueryParser::ParamsTooDeepError
      req.get_header(RACK_ERRORS).puts "Invalid or incomplete POST params"
    rescue EOFError
      req.get_header(RACK_ERRORS).puts "Bad request content body"
    end
  end
end
PK!"#[���4
4
#gems/rack-3.0.8/lib/rack/chunked.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

module Rack
  warn "Rack::Chunked is deprecated and will be removed in Rack 3.1", uplevel: 1

  # Middleware that applies chunked transfer encoding to response bodies
  # when the response does not include a content-length header.
  #
  # This supports the trailer response header to allow the use of trailing
  # headers in the chunked encoding.  However, using this requires you manually
  # specify a response body that supports a +trailers+ method.  Example:
  #
  #   [200, { 'trailer' => 'expires'}, ["Hello", "World"]]
  #   # error raised
  #
  #   body = ["Hello", "World"]
  #   def body.trailers
  #     { 'expires' => Time.now.to_s }
  #   end
  #   [200, { 'trailer' => 'expires'}, body]
  #   # No exception raised
  class Chunked
    include Rack::Utils

    # A body wrapper that emits chunked responses.
    class Body
      TERM = "\r\n"
      TAIL = "0#{TERM}"

      # Store the response body to be chunked.
      def initialize(body)
        @body = body
      end

      # For each element yielded by the response body, yield
      # the element in chunked encoding.
      def each(&block)
        term = TERM
        @body.each do |chunk|
          size = chunk.bytesize
          next if size == 0

          yield [size.to_s(16), term, chunk.b, term].join
        end
        yield TAIL
        yield_trailers(&block)
        yield term
      end

      # Close the response body if the response body supports it.
      def close
        @body.close if @body.respond_to?(:close)
      end

      private

      # Do nothing as this class does not support trailer headers.
      def yield_trailers
      end
    end

    # A body wrapper that emits chunked responses and also supports
    # sending Trailer headers.  Note that the response body provided to
    # initialize must have a +trailers+ method that returns a hash
    # of trailer headers, and the rack response itself should have a
    # Trailer header listing the headers that the +trailers+ method
    # will return.
    class TrailerBody < Body
      private

      # Yield strings for each trailer header.
      def yield_trailers
        @body.trailers.each_pair do |k, v|
          yield "#{k}: #{v}\r\n"
        end
      end
    end

    def initialize(app)
      @app = app
    end

    # Whether the HTTP version supports chunked encoding (HTTP 1.1 does).
    def chunkable_version?(ver)
      case ver
      # pre-HTTP/1.0 (informally "HTTP/0.9") HTTP requests did not have
      # a version (nor response headers)
      when 'HTTP/1.0', nil, 'HTTP/0.9'
        false
      else
        true
      end
    end

    # If the rack app returns a response that should have a body,
    # but does not have content-length or transfer-encoding headers,
    # modify the response to use chunked transfer-encoding.
    def call(env)
      status, headers, body = response = @app.call(env)

      if chunkable_version?(env[SERVER_PROTOCOL]) &&
         !STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) &&
         !headers[CONTENT_LENGTH] &&
         !headers[TRANSFER_ENCODING]

        headers[TRANSFER_ENCODING] = 'chunked'
        if headers['trailer']
          response[2] = TrailerBody.new(body)
        else
          response[2] = Body.new(body)
        end
      end

      response
    end
  end
end
PK!"#[��44"gems/rack-3.0.8/lib/rack/events.rbnu�[���# frozen_string_literal: true

require_relative 'body_proxy'
require_relative 'request'
require_relative 'response'

module Rack
  ### This middleware provides hooks to certain places in the request /
  # response lifecycle.  This is so that middleware that don't need to filter
  # the response data can safely leave it alone and not have to send messages
  # down the traditional "rack stack".
  #
  # The events are:
  #
  # * on_start(request, response)
  #
  #   This event is sent at the start of the request, before the next
  #   middleware in the chain is called.  This method is called with a request
  #   object, and a response object.  Right now, the response object is always
  #   nil, but in the future it may actually be a real response object.
  #
  # * on_commit(request, response)
  #
  #   The response has been committed.  The application has returned, but the
  #   response has not been sent to the webserver yet.  This method is always
  #   called with a request object and the response object.  The response
  #   object is constructed from the rack triple that the application returned.
  #   Changes may still be made to the response object at this point.
  #
  # * on_send(request, response)
  #
  #   The webserver has started iterating over the response body and presumably
  #   has started sending data over the wire. This method is always called with
  #   a request object and the response object.  The response object is
  #   constructed from the rack triple that the application returned.  Changes
  #   SHOULD NOT be made to the response object as the webserver has already
  #   started sending data.  Any mutations will likely result in an exception.
  #
  # * on_finish(request, response)
  #
  #   The webserver has closed the response, and all data has been written to
  #   the response socket.  The request and response object should both be
  #   read-only at this point.  The body MAY NOT be available on the response
  #   object as it may have been flushed to the socket.
  #
  # * on_error(request, response, error)
  #
  #   An exception has occurred in the application or an `on_commit` event.
  #   This method will get the request, the response (if available) and the
  #   exception that was raised.
  #
  # ## Order
  #
  # `on_start` is called on the handlers in the order that they were passed to
  # the constructor.  `on_commit`, on_send`, `on_finish`, and `on_error` are
  # called in the reverse order.  `on_finish` handlers are called inside an
  # `ensure` block, so they are guaranteed to be called even if something
  # raises an exception.  If something raises an exception in a `on_finish`
  # method, then nothing is guaranteed.

  class Events
    module Abstract
      def on_start(req, res)
      end

      def on_commit(req, res)
      end

      def on_send(req, res)
      end

      def on_finish(req, res)
      end

      def on_error(req, res, e)
      end
    end

    class EventedBodyProxy < Rack::BodyProxy # :nodoc:
      attr_reader :request, :response

      def initialize(body, request, response, handlers, &block)
        super(body, &block)
        @request  = request
        @response = response
        @handlers = handlers
      end

      def each
        @handlers.reverse_each { |handler| handler.on_send request, response }
        super
      end
    end

    class BufferedResponse < Rack::Response::Raw # :nodoc:
      attr_reader :body

      def initialize(status, headers, body)
        super(status, headers)
        @body = body
      end

      def to_a; [status, headers, body]; end
    end

    def initialize(app, handlers)
      @app      = app
      @handlers = handlers
    end

    def call(env)
      request = make_request env
      on_start request, nil

      begin
        status, headers, body = @app.call request.env
        response = make_response status, headers, body
        on_commit request, response
      rescue StandardError => e
        on_error request, response, e
        on_finish request, response
        raise
      end

      body = EventedBodyProxy.new(body, request, response, @handlers) do
        on_finish request, response
      end
      [response.status, response.headers, body]
    end

    private

    def on_error(request, response, e)
      @handlers.reverse_each { |handler| handler.on_error request, response, e }
    end

    def on_commit(request, response)
      @handlers.reverse_each { |handler| handler.on_commit request, response }
    end

    def on_start(request, response)
      @handlers.each { |handler| handler.on_start request, nil }
    end

    def on_finish(request, response)
      @handlers.reverse_each { |handler| handler.on_finish request, response }
    end

    def make_request(env)
      Rack::Request.new env
    end

    def make_response(status, headers, body)
      BufferedResponse.new status, headers, body
    end
  end
end
PK!"#[H��SGbGb#gems/rack-3.0.8/lib/rack/request.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'media_type'

module Rack
  # Rack::Request provides a convenient interface to a Rack
  # environment.  It is stateless, the environment +env+ passed to the
  # constructor will be directly modified.
  #
  #   req = Rack::Request.new(env)
  #   req.post?
  #   req.params["data"]

  class Request
    class << self
      attr_accessor :ip_filter

      # The priority when checking forwarded headers. The default
      # is <tt>[:forwarded, :x_forwarded]</tt>, which means, check the
      # +Forwarded+ header first, followed by the appropriate
      # <tt>X-Forwarded-*</tt> header.  You can revert the priority by
      # reversing the priority, or remove checking of either
      # or both headers by removing elements from the array.
      #
      # This should be set as appropriate in your environment
      # based on what reverse proxies are in use.  If you are not
      # using reverse proxies, you should probably use an empty
      # array.
      attr_accessor :forwarded_priority

      # The priority when checking either the <tt>X-Forwarded-Proto</tt>
      # or <tt>X-Forwarded-Scheme</tt> header for the forwarded protocol.
      # The default is <tt>[:proto, :scheme]</tt>, to try the
      # <tt>X-Forwarded-Proto</tt> header before the
      # <tt>X-Forwarded-Scheme</tt> header.  Rack 2 had behavior
      # similar to <tt>[:scheme, :proto]</tt>.  You can remove either or
      # both of the entries in array to ignore that respective header.
      attr_accessor :x_forwarded_proto_priority
    end

    @forwarded_priority = [:forwarded, :x_forwarded]
    @x_forwarded_proto_priority = [:proto, :scheme]

    valid_ipv4_octet = /\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])/

    trusted_proxies = Regexp.union(
      /\A127#{valid_ipv4_octet}{3}\z/,                          # localhost IPv4 range 127.x.x.x, per RFC-3330
      /\A::1\z/,                                                # localhost IPv6 ::1
      /\Af[cd][0-9a-f]{2}(?::[0-9a-f]{0,4}){0,7}\z/i,           # private IPv6 range fc00 .. fdff
      /\A10#{valid_ipv4_octet}{3}\z/,                           # private IPv4 range 10.x.x.x
      /\A172\.(1[6-9]|2[0-9]|3[01])#{valid_ipv4_octet}{2}\z/,   # private IPv4 range 172.16.0.0 .. 172.31.255.255
      /\A192\.168#{valid_ipv4_octet}{2}\z/,                     # private IPv4 range 192.168.x.x
      /\Alocalhost\z|\Aunix(\z|:)/i,                            # localhost hostname, and unix domain sockets
    )

    self.ip_filter = lambda { |ip| trusted_proxies.match?(ip) }

    ALLOWED_SCHEMES = %w(https http wss ws).freeze

    def initialize(env)
      @env = env
      @params = nil
    end

    def params
      @params ||= super
    end

    def update_param(k, v)
      super
      @params = nil
    end

    def delete_param(k)
      v = super
      @params = nil
      v
    end

    module Env
      # The environment of the request.
      attr_reader :env

      def initialize(env)
        @env = env
        # This module is included at least in `ActionDispatch::Request`
        # The call to `super()` allows additional mixed-in initializers are called
        super()
      end

      # Predicate method to test to see if `name` has been set as request
      # specific data
      def has_header?(name)
        @env.key? name
      end

      # Get a request specific value for `name`.
      def get_header(name)
        @env[name]
      end

      # If a block is given, it yields to the block if the value hasn't been set
      # on the request.
      def fetch_header(name, &block)
        @env.fetch(name, &block)
      end

      # Loops through each key / value pair in the request specific data.
      def each_header(&block)
        @env.each(&block)
      end

      # Set a request specific value for `name` to `v`
      def set_header(name, v)
        @env[name] = v
      end

      # Add a header that may have multiple values.
      #
      # Example:
      #   request.add_header 'Accept', 'image/png'
      #   request.add_header 'Accept', '*/*'
      #
      #   assert_equal 'image/png,*/*', request.get_header('Accept')
      #
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
      def add_header(key, v)
        if v.nil?
          get_header key
        elsif has_header? key
          set_header key, "#{get_header key},#{v}"
        else
          set_header key, v
        end
      end

      # Delete a request specific value for `name`.
      def delete_header(name)
        @env.delete name
      end

      def initialize_copy(other)
        @env = other.env.dup
      end
    end

    module Helpers
      # The set of form-data media-types. Requests that do not indicate
      # one of the media types present in this list will not be eligible
      # for form-data / param parsing.
      FORM_DATA_MEDIA_TYPES = [
        'application/x-www-form-urlencoded',
        'multipart/form-data'
      ]

      # The set of media-types. Requests that do not indicate
      # one of the media types present in this list will not be eligible
      # for param parsing like soap attachments or generic multiparts
      PARSEABLE_DATA_MEDIA_TYPES = [
        'multipart/related',
        'multipart/mixed'
      ]

      # Default ports depending on scheme. Used to decide whether or not
      # to include the port in a generated URI.
      DEFAULT_PORTS = { 'http' => 80, 'https' => 443, 'coffee' => 80 }

      # The address of the client which connected to the proxy.
      HTTP_X_FORWARDED_FOR = 'HTTP_X_FORWARDED_FOR'

      # The contents of the host/:authority header sent to the proxy.
      HTTP_X_FORWARDED_HOST = 'HTTP_X_FORWARDED_HOST'

      HTTP_FORWARDED          = 'HTTP_FORWARDED'

      # The value of the scheme sent to the proxy.
      HTTP_X_FORWARDED_SCHEME = 'HTTP_X_FORWARDED_SCHEME'

      # The protocol used to connect to the proxy.
      HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'

      # The port used to connect to the proxy.
      HTTP_X_FORWARDED_PORT = 'HTTP_X_FORWARDED_PORT'

      # Another way for specifying https scheme was used.
      HTTP_X_FORWARDED_SSL = 'HTTP_X_FORWARDED_SSL'

      def body;            get_header(RACK_INPUT)                         end
      def script_name;     get_header(SCRIPT_NAME).to_s                   end
      def script_name=(s); set_header(SCRIPT_NAME, s.to_s)                end

      def path_info;       get_header(PATH_INFO).to_s                     end
      def path_info=(s);   set_header(PATH_INFO, s.to_s)                  end

      def request_method;  get_header(REQUEST_METHOD)                     end
      def query_string;    get_header(QUERY_STRING).to_s                  end
      def content_length;  get_header('CONTENT_LENGTH')                   end
      def logger;          get_header(RACK_LOGGER)                        end
      def user_agent;      get_header('HTTP_USER_AGENT')                  end

      # the referer of the client
      def referer;         get_header('HTTP_REFERER')                     end
      alias referrer referer

      def session
        fetch_header(RACK_SESSION) do |k|
          set_header RACK_SESSION, default_session
        end
      end

      def session_options
        fetch_header(RACK_SESSION_OPTIONS) do |k|
          set_header RACK_SESSION_OPTIONS, {}
        end
      end

      # Checks the HTTP request method (or verb) to see if it was of type DELETE
      def delete?;  request_method == DELETE  end

      # Checks the HTTP request method (or verb) to see if it was of type GET
      def get?;     request_method == GET     end

      # Checks the HTTP request method (or verb) to see if it was of type HEAD
      def head?;    request_method == HEAD    end

      # Checks the HTTP request method (or verb) to see if it was of type OPTIONS
      def options?; request_method == OPTIONS end

      # Checks the HTTP request method (or verb) to see if it was of type LINK
      def link?;    request_method == LINK    end

      # Checks the HTTP request method (or verb) to see if it was of type PATCH
      def patch?;   request_method == PATCH   end

      # Checks the HTTP request method (or verb) to see if it was of type POST
      def post?;    request_method == POST    end

      # Checks the HTTP request method (or verb) to see if it was of type PUT
      def put?;     request_method == PUT     end

      # Checks the HTTP request method (or verb) to see if it was of type TRACE
      def trace?;   request_method == TRACE   end

      # Checks the HTTP request method (or verb) to see if it was of type UNLINK
      def unlink?;  request_method == UNLINK  end

      def scheme
        if get_header(HTTPS) == 'on'
          'https'
        elsif get_header(HTTP_X_FORWARDED_SSL) == 'on'
          'https'
        elsif forwarded_scheme
          forwarded_scheme
        else
          get_header(RACK_URL_SCHEME)
        end
      end

      # The authority of the incoming request as defined by RFC3976.
      # https://tools.ietf.org/html/rfc3986#section-3.2
      #
      # In HTTP/1, this is the `host` header.
      # In HTTP/2, this is the `:authority` pseudo-header.
      def authority
        forwarded_authority || host_authority || server_authority
      end

      # The authority as defined by the `SERVER_NAME` and `SERVER_PORT`
      # variables.
      def server_authority
        host = self.server_name
        port = self.server_port

        if host
          if port
            "#{host}:#{port}"
          else
            host
          end
        end
      end

      def server_name
        get_header(SERVER_NAME)
      end

      def server_port
        get_header(SERVER_PORT)
      end

      def cookies
        hash = fetch_header(RACK_REQUEST_COOKIE_HASH) do |key|
          set_header(key, {})
        end

        string = get_header(HTTP_COOKIE)

        unless string == get_header(RACK_REQUEST_COOKIE_STRING)
          hash.replace Utils.parse_cookies_header(string)
          set_header(RACK_REQUEST_COOKIE_STRING, string)
        end

        hash
      end

      def content_type
        content_type = get_header('CONTENT_TYPE')
        content_type.nil? || content_type.empty? ? nil : content_type
      end

      def xhr?
        get_header("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest"
      end

      # The `HTTP_HOST` header.
      def host_authority
        get_header(HTTP_HOST)
      end

      def host_with_port(authority = self.authority)
        host, _, port = split_authority(authority)

        if port == DEFAULT_PORTS[self.scheme]
          host
        else
          authority
        end
      end

      # Returns a formatted host, suitable for being used in a URI.
      def host
        split_authority(self.authority)[0]
      end

      # Returns an address suitable for being to resolve to an address.
      # In the case of a domain name or IPv4 address, the result is the same
      # as +host+. In the case of IPv6 or future address formats, the square
      # brackets are removed.
      def hostname
        split_authority(self.authority)[1]
      end

      def port
        if authority = self.authority
          _, _, port = split_authority(authority)
        end

        port || forwarded_port&.last || DEFAULT_PORTS[scheme] || server_port
      end

      def forwarded_for
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if forwarded_for = get_http_forwarded(:for)
              return(forwarded_for.map! do |authority|
                split_authority(authority)[1]
              end)
            end
          when :x_forwarded
            if value = get_header(HTTP_X_FORWARDED_FOR)
              return(split_header(value).map do |authority|
                split_authority(wrap_ipv6(authority))[1]
              end)
            end
          end
        end

        nil
      end

      def forwarded_port
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if forwarded = get_http_forwarded(:for)
              return(forwarded.map do |authority|
                split_authority(authority)[2]
              end.compact)
            end
          when :x_forwarded
            if value = get_header(HTTP_X_FORWARDED_PORT)
              return split_header(value).map(&:to_i)
            end
          end
        end

        nil
      end

      def forwarded_authority
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if forwarded = get_http_forwarded(:host)
              return forwarded.last
            end
          when :x_forwarded
            if value = get_header(HTTP_X_FORWARDED_HOST)
              return wrap_ipv6(split_header(value).last)
            end
          end
        end

        nil
      end

      def ssl?
        scheme == 'https' || scheme == 'wss'
      end

      def ip
        remote_addresses = split_header(get_header('REMOTE_ADDR'))
        external_addresses = reject_trusted_ip_addresses(remote_addresses)

        unless external_addresses.empty?
          return external_addresses.last
        end

        if (forwarded_for = self.forwarded_for) && !forwarded_for.empty?
          # The forwarded for addresses are ordered: client, proxy1, proxy2.
          # So we reject all the trusted addresses (proxy*) and return the
          # last client. Or if we trust everyone, we just return the first
          # address.
          return reject_trusted_ip_addresses(forwarded_for).last || forwarded_for.first
        end

        # If all the addresses are trusted, and we aren't forwarded, just return
        # the first remote address, which represents the source of the request.
        remote_addresses.first
      end

      # The media type (type/subtype) portion of the CONTENT_TYPE header
      # without any media type parameters. e.g., when CONTENT_TYPE is
      # "text/plain;charset=utf-8", the media-type is "text/plain".
      #
      # For more information on the use of media types in HTTP, see:
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
      def media_type
        MediaType.type(content_type)
      end

      # The media type parameters provided in CONTENT_TYPE as a Hash, or
      # an empty Hash if no CONTENT_TYPE or media-type parameters were
      # provided.  e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",
      # this method responds with the following Hash:
      #   { 'charset' => 'utf-8' }
      def media_type_params
        MediaType.params(content_type)
      end

      # The character set of the request body if a "charset" media type
      # parameter was given, or nil if no "charset" was specified. Note
      # that, per RFC2616, text/* media types that specify no explicit
      # charset are to be considered ISO-8859-1.
      def content_charset
        media_type_params['charset']
      end

      # Determine whether the request body contains form-data by checking
      # the request content-type for one of the media-types:
      # "application/x-www-form-urlencoded" or "multipart/form-data". The
      # list of form-data media types can be modified through the
      # +FORM_DATA_MEDIA_TYPES+ array.
      #
      # A request body is also assumed to contain form-data when no
      # content-type header is provided and the request_method is POST.
      def form_data?
        type = media_type
        meth = get_header(RACK_METHODOVERRIDE_ORIGINAL_METHOD) || get_header(REQUEST_METHOD)

        (meth == POST && type.nil?) || FORM_DATA_MEDIA_TYPES.include?(type)
      end

      # Determine whether the request body contains data by checking
      # the request media_type against registered parse-data media-types
      def parseable_data?
        PARSEABLE_DATA_MEDIA_TYPES.include?(media_type)
      end

      # Returns the data received in the query string.
      def GET
        if get_header(RACK_REQUEST_QUERY_STRING) == query_string
          get_header(RACK_REQUEST_QUERY_HASH)
        else
          query_hash = parse_query(query_string, '&')
          set_header(RACK_REQUEST_QUERY_STRING, query_string)
          set_header(RACK_REQUEST_QUERY_HASH, query_hash)
        end
      end

      # Returns the data received in the request body.
      #
      # This method support both application/x-www-form-urlencoded and
      # multipart/form-data.
      def POST
        if error = get_header(RACK_REQUEST_FORM_ERROR)
          raise error.class, error.message, cause: error.cause
        end

        begin
          rack_input = get_header(RACK_INPUT)

          # If the form hash was already memoized:
          if form_hash = get_header(RACK_REQUEST_FORM_HASH)
            # And it was memoized from the same input:
            if get_header(RACK_REQUEST_FORM_INPUT).equal?(rack_input)
              return form_hash
            end
          end

          # Otherwise, figure out how to parse the input:
          if rack_input.nil?
            set_header RACK_REQUEST_FORM_INPUT, nil
            set_header(RACK_REQUEST_FORM_HASH, {})
          elsif form_data? || parseable_data?
            unless set_header(RACK_REQUEST_FORM_HASH, parse_multipart)
              form_vars = get_header(RACK_INPUT).read

              # Fix for Safari Ajax postings that always append \0
              # form_vars.sub!(/\0\z/, '') # performance replacement:
              form_vars.slice!(-1) if form_vars.end_with?("\0")

              set_header RACK_REQUEST_FORM_VARS, form_vars
              set_header RACK_REQUEST_FORM_HASH, parse_query(form_vars, '&')
            end

            set_header RACK_REQUEST_FORM_INPUT, get_header(RACK_INPUT)
            get_header RACK_REQUEST_FORM_HASH
          else
            set_header RACK_REQUEST_FORM_INPUT, get_header(RACK_INPUT)
            set_header(RACK_REQUEST_FORM_HASH, {})
          end
        rescue => error
          set_header(RACK_REQUEST_FORM_ERROR, error)
          raise
        end
      end

      # The union of GET and POST data.
      #
      # Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params.
      def params
        self.GET.merge(self.POST)
      end

      # Destructively update a parameter, whether it's in GET and/or POST. Returns nil.
      #
      # The parameter is updated wherever it was previous defined, so GET, POST, or both. If it wasn't previously defined, it's inserted into GET.
      #
      # <tt>env['rack.input']</tt> is not touched.
      def update_param(k, v)
        found = false
        if self.GET.has_key?(k)
          found = true
          self.GET[k] = v
        end
        if self.POST.has_key?(k)
          found = true
          self.POST[k] = v
        end
        unless found
          self.GET[k] = v
        end
      end

      # Destructively delete a parameter, whether it's in GET or POST. Returns the value of the deleted parameter.
      #
      # If the parameter is in both GET and POST, the POST value takes precedence since that's how #params works.
      #
      # <tt>env['rack.input']</tt> is not touched.
      def delete_param(k)
        post_value, get_value = self.POST.delete(k), self.GET.delete(k)
        post_value || get_value
      end

      def base_url
        "#{scheme}://#{host_with_port}"
      end

      # Tries to return a remake of the original request URL as a string.
      def url
        base_url + fullpath
      end

      def path
        script_name + path_info
      end

      def fullpath
        query_string.empty? ? path : "#{path}?#{query_string}"
      end

      def accept_encoding
        parse_http_accept_header(get_header("HTTP_ACCEPT_ENCODING"))
      end

      def accept_language
        parse_http_accept_header(get_header("HTTP_ACCEPT_LANGUAGE"))
      end

      def trusted_proxy?(ip)
        Rack::Request.ip_filter.call(ip)
      end

      # shortcut for <tt>request.params[key]</tt>
      def [](key)
        warn("Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead", uplevel: 1)

        params[key.to_s]
      end

      # shortcut for <tt>request.params[key] = value</tt>
      #
      # Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to destructively modify params.
      def []=(key, value)
        warn("Request#[]= is deprecated and will be removed in a future version of Rack. Please use request.params[]= instead", uplevel: 1)

        params[key.to_s] = value
      end

      # like Hash#values_at
      def values_at(*keys)
        keys.map { |key| params[key] }
      end

      private

      def default_session; {}; end

      # Assist with compatibility when processing `X-Forwarded-For`.
      def wrap_ipv6(host)
        # Even thought IPv6 addresses should be wrapped in square brackets,
        # sometimes this is not done in various legacy/underspecified headers.
        # So we try to fix this situation for compatibility reasons.

        # Try to detect IPv6 addresses which aren't escaped yet:
        if !host.start_with?('[') && host.count(':') > 1
          "[#{host}]"
        else
          host
        end
      end

      def parse_http_accept_header(header)
        header.to_s.split(",").each(&:strip!).map do |part|
          attribute, parameters = part.split(";", 2).each(&:strip!)
          quality = 1.0
          if parameters and /\Aq=([\d.]+)/ =~ parameters
            quality = $1.to_f
          end
          [attribute, quality]
        end
      end

      # Get an array of values set in the RFC 7239 `Forwarded` request header.
      def get_http_forwarded(token)
        Utils.forwarded_values(get_header(HTTP_FORWARDED))&.[](token)
      end

      def query_parser
        Utils.default_query_parser
      end

      def parse_query(qs, d = '&')
        query_parser.parse_nested_query(qs, d)
      end

      def parse_multipart
        Rack::Multipart.extract_multipart(self, query_parser)
      end

      def split_header(value)
        value ? value.strip.split(/[,\s]+/) : []
      end

      # ipv6 extracted from resolv stdlib, simplified
      # to remove numbered match group creation.
      ipv6 = Regexp.union(
        /(?:[0-9A-Fa-f]{1,4}:){7}
         [0-9A-Fa-f]{1,4}/x,
        /(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)? ::
         (?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?/x,
        /(?:[0-9A-Fa-f]{1,4}:){6,6}
         \d+\.\d+\.\d+\.\d+/x,
        /(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)? ::
         (?:[0-9A-Fa-f]{1,4}:)*
         \d+\.\d+\.\d+\.\d+/x,
        /[Ff][Ee]80
         (?::[0-9A-Fa-f]{1,4}){7}
         %[-0-9A-Za-z._~]+/x,
        /[Ff][Ee]80:
         (?:
           (?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)? ::
           (?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?
           |
           :(?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?
         )?
         :[0-9A-Fa-f]{1,4}%[-0-9A-Za-z._~]+/x)

      AUTHORITY = /
        \A
        (?<host>
          # Match IPv6 as a string of hex digits and colons in square brackets
          \[(?<address>#{ipv6})\]
          |
          # Match any other printable string (except square brackets) as a hostname
          (?<address>[[[:graph:]&&[^\[\]]]]*?)
        )
        (:(?<port>\d+))?
        \z
      /x

      private_constant :AUTHORITY

      def split_authority(authority)
        return [] if authority.nil?
        return [] unless match = AUTHORITY.match(authority)
        return match[:host], match[:address], match[:port]&.to_i
      end

      def reject_trusted_ip_addresses(ip_addresses)
        ip_addresses.reject { |ip| trusted_proxy?(ip) }
      end

      FORWARDED_SCHEME_HEADERS = {
        proto: HTTP_X_FORWARDED_PROTO,
        scheme: HTTP_X_FORWARDED_SCHEME
      }.freeze
      private_constant :FORWARDED_SCHEME_HEADERS
      def forwarded_scheme
        forwarded_priority.each do |type|
          case type
          when :forwarded
            if (forwarded_proto = get_http_forwarded(:proto)) &&
               (scheme = allowed_scheme(forwarded_proto.last))
              return scheme
            end
          when :x_forwarded
            x_forwarded_proto_priority.each do |x_type|
              if header = FORWARDED_SCHEME_HEADERS[x_type]
                split_header(get_header(header)).reverse_each do |scheme|
                  if allowed_scheme(scheme)
                    return scheme
                  end
                end
              end
            end
          end
        end

        nil
      end

      def allowed_scheme(header)
        header if ALLOWED_SCHEMES.include?(header)
      end

      def forwarded_priority
        Request.forwarded_priority
      end

      def x_forwarded_proto_priority
        Request.x_forwarded_proto_priority
      end
    end

    include Env
    include Helpers
  end
end

# :nocov:
require_relative 'multipart' unless defined?(Rack::Multipart)
# :nocov:
PK!"#[[�J$gems/rack-3.0.8/lib/rack/deflater.rbnu�[���# frozen_string_literal: true

require "zlib"
require "time"  # for Time.httpdate

require_relative 'constants'
require_relative 'utils'
require_relative 'request'
require_relative 'body_proxy'

module Rack
  # This middleware enables content encoding of http responses,
  # usually for purposes of compression.
  #
  # Currently supported encodings:
  #
  # * gzip
  # * identity (no transformation)
  #
  # This middleware automatically detects when encoding is supported
  # and allowed. For example no encoding is made when a cache
  # directive of 'no-transform' is present, when the response status
  # code is one that doesn't allow an entity body, or when the body
  # is empty.
  #
  # Note that despite the name, Deflater does not support the +deflate+
  # encoding.
  class Deflater
    # Creates Rack::Deflater middleware. Options:
    #
    # :if :: a lambda enabling / disabling deflation based on returned boolean value
    #        (e.g <tt>use Rack::Deflater, :if => lambda { |*, body| sum=0; body.each { |i| sum += i.length }; sum > 512 }</tt>).
    #        However, be aware that calling `body.each` inside the block will break cases where `body.each` is not idempotent,
    #        such as when it is an +IO+ instance.
    # :include :: a list of content types that should be compressed. By default, all content types are compressed.
    # :sync :: determines if the stream is going to be flushed after every chunk.  Flushing after every chunk reduces
    #          latency for time-sensitive streaming applications, but hurts compression and throughput.
    #          Defaults to +true+.
    def initialize(app, options = {})
      @app = app
      @condition = options[:if]
      @compressible_types = options[:include]
      @sync = options.fetch(:sync, true)
    end

    def call(env)
      status, headers, body = response = @app.call(env)

      unless should_deflate?(env, status, headers, body)
        return response
      end

      request = Request.new(env)

      encoding = Utils.select_best_encoding(%w(gzip identity),
                                            request.accept_encoding)

      # Set the Vary HTTP header.
      vary = headers["vary"].to_s.split(",").map(&:strip)
      unless vary.include?("*") || vary.any?{|v| v.downcase == 'accept-encoding'}
        headers["vary"] = vary.push("Accept-Encoding").join(",")
      end

      case encoding
      when "gzip"
        headers['content-encoding'] = "gzip"
        headers.delete(CONTENT_LENGTH)
        mtime = headers["last-modified"]
        mtime = Time.httpdate(mtime).to_i if mtime
        response[2] = GzipStream.new(body, mtime, @sync)
        response
      when "identity"
        response
      else # when nil
        # Only possible encoding values here are 'gzip', 'identity', and nil
        message = "An acceptable encoding for the requested resource #{request.fullpath} could not be found."
        bp = Rack::BodyProxy.new([message]) { body.close if body.respond_to?(:close) }
        [406, { CONTENT_TYPE => "text/plain", CONTENT_LENGTH => message.length.to_s }, bp]
      end
    end

    # Body class used for gzip encoded responses.
    class GzipStream

      BUFFER_LENGTH = 128 * 1_024

      # Initialize the gzip stream.  Arguments:
      # body :: Response body to compress with gzip
      # mtime :: The modification time of the body, used to set the
      #          modification time in the gzip header.
      # sync :: Whether to flush each gzip chunk as soon as it is ready.
      def initialize(body, mtime, sync)
        @body = body
        @mtime = mtime
        @sync = sync
      end

      # Yield gzip compressed strings to the given block.
      def each(&block)
        @writer = block
        gzip = ::Zlib::GzipWriter.new(self)
        gzip.mtime = @mtime if @mtime
        # @body.each is equivalent to @body.gets (slow)
        if @body.is_a? ::File # XXX: Should probably be ::IO
          while part = @body.read(BUFFER_LENGTH)
            gzip.write(part)
            gzip.flush if @sync
          end
        else
          @body.each { |part|
            # Skip empty strings, as they would result in no output,
            # and flushing empty parts would raise Zlib::BufError.
            next if part.empty?
            gzip.write(part)
            gzip.flush if @sync
          }
        end
      ensure
        gzip.finish
      end

      # Call the block passed to #each with the gzipped data.
      def write(data)
        @writer.call(data)
      end

      # Close the original body if possible.
      def close
        @body.close if @body.respond_to?(:close)
      end
    end

    private

    # Whether the body should be compressed.
    def should_deflate?(env, status, headers, body)
      # Skip compressing empty entity body responses and responses with
      # no-transform set.
      if Utils::STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) ||
          /\bno-transform\b/.match?(headers[CACHE_CONTROL].to_s) ||
          headers['content-encoding']&.!~(/\bidentity\b/)
        return false
      end

      # Skip if @compressible_types are given and does not include request's content type
      return false if @compressible_types && !(headers.has_key?(CONTENT_TYPE) && @compressible_types.include?(headers[CONTENT_TYPE][/[^;]*/]))

      # Skip if @condition lambda is given and evaluates to false
      return false if @condition && !@condition.call(env, status, headers, body)

      # No point in compressing empty body, also handles usage with
      # Rack::Sendfile.
      return false if headers[CONTENT_LENGTH] == '0'

      true
    end
  end
end
PK!"#[;�`�ff#gems/rack-3.0.8/lib/rack/runtime.rbnu�[���# frozen_string_literal: true

require_relative 'utils'

module Rack
  # Sets an "x-runtime" response header, indicating the response
  # time of the request, in seconds
  #
  # You can put it right before the application to see the processing
  # time, or before all the other middlewares to include time for them,
  # too.
  class Runtime
    FORMAT_STRING = "%0.6f" # :nodoc:
    HEADER_NAME = "x-runtime" # :nodoc:

    def initialize(app, name = nil)
      @app = app
      @header_name = HEADER_NAME
      @header_name += "-#{name.to_s.downcase}" if name
    end

    def call(env)
      start_time = Utils.clock_time
      _, headers, _ = response = @app.call(env)

      request_time = Utils.clock_time - start_time

      unless headers.key?(@header_name)
        headers[@header_name] = FORMAT_STRING % request_time
      end

      response
    end
  end
end
PK!"#[_��l��'gems/rack-3.0.8/lib/rack/null_logger.rbnu�[���# frozen_string_literal: true

require_relative 'constants'

module Rack
  class NullLogger
    def initialize(app)
      @app = app
    end

    def call(env)
      env[RACK_LOGGER] = self
      @app.call(env)
    end

    def info(progname = nil, &block); end
    def debug(progname = nil, &block); end
    def warn(progname = nil, &block); end
    def error(progname = nil, &block); end
    def fatal(progname = nil, &block); end
    def unknown(progname = nil, &block); end
    def info? ;  end
    def debug? ; end
    def warn? ;  end
    def error? ; end
    def fatal? ; end
    def debug! ; end
    def error! ; end
    def fatal! ; end
    def info! ; end
    def warn! ; end
    def level ; end
    def progname ; end
    def datetime_format ; end
    def formatter ; end
    def sev_threshold ; end
    def level=(level); end
    def progname=(progname); end
    def datetime_format=(datetime_format); end
    def formatter=(formatter); end
    def sev_threshold=(sev_threshold); end
    def close ; end
    def add(severity, message = nil, progname = nil, &block); end
    def log(severity, message = nil, progname = nil, &block); end
    def <<(msg); end
    def reopen(logdev = nil); end
  end
end
PK!"#[d�NN'gems/rack-3.0.8/lib/rack/show_status.rbnu�[���# frozen_string_literal: true

require 'erb'

require_relative 'constants'
require_relative 'utils'
require_relative 'request'
require_relative 'body_proxy'

module Rack
  # Rack::ShowStatus catches all empty responses and replaces them
  # with a site explaining the error.
  #
  # Additional details can be put into <tt>rack.showstatus.detail</tt>
  # and will be shown as HTML.  If such details exist, the error page
  # is always rendered, even if the reply was not empty.

  class ShowStatus
    def initialize(app)
      @app = app
      @template = ERB.new(TEMPLATE)
    end

    def call(env)
      status, headers, body = response = @app.call(env)
      empty = headers[CONTENT_LENGTH].to_i <= 0

      # client or server error, or explicit message
      if (status.to_i >= 400 && empty) || env[RACK_SHOWSTATUS_DETAIL]
        # This double assignment is to prevent an "unused variable" warning.
        # Yes, it is dumb, but I don't like Ruby yelling at me.
        req = req = Rack::Request.new(env)

        message = Rack::Utils::HTTP_STATUS_CODES[status.to_i] || status.to_s

        # This double assignment is to prevent an "unused variable" warning.
        # Yes, it is dumb, but I don't like Ruby yelling at me.
        detail = detail = env[RACK_SHOWSTATUS_DETAIL] || message

        html = @template.result(binding)
        size = html.bytesize

        response[2] = Rack::BodyProxy.new([html]) do
          body.close if body.respond_to?(:close)
        end

        headers[CONTENT_TYPE] = "text/html"
        headers[CONTENT_LENGTH] = size.to_s
      end

      response
    end

    def h(obj)                  # :nodoc:
      case obj
      when String
        Utils.escape_html(obj)
      else
        Utils.escape_html(obj.inspect)
      end
    end

    # :stopdoc:

# adapted from Django <www.djangoproject.com>
# Copyright (c) Django Software Foundation and individual contributors.
# Used under the modified BSD license:
# http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
TEMPLATE = <<'HTML'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title><%=h message %> at <%=h req.script_name + req.path_info %></title>
  <meta name="robots" content="NONE,NOARCHIVE" />
  <style type="text/css">
    html * { padding:0; margin:0; }
    body * { padding:10px 20px; }
    body * * { padding:0; }
    body { font:small sans-serif; background:#eee; }
    body>div { border-bottom:1px solid #ddd; }
    h1 { font-weight:normal; margin-bottom:.4em; }
    h1 span { font-size:60%; color:#666; font-weight:normal; }
    table { border:none; border-collapse: collapse; width:100%; }
    td, th { vertical-align:top; padding:2px 3px; }
    th { width:12em; text-align:right; color:#666; padding-right:.5em; }
    #info { background:#f6f6f6; }
    #info ol { margin: 0.5em 4em; }
    #info ol li { font-family: monospace; }
    #summary { background: #ffc; }
    #explanation { background:#eee; border-bottom: 0px none; }
  </style>
</head>
<body>
  <div id="summary">
    <h1><%=h message %> <span>(<%= status.to_i %>)</span></h1>
    <table class="meta">
      <tr>
        <th>Request Method:</th>
        <td><%=h req.request_method %></td>
      </tr>
      <tr>
        <th>Request URL:</th>
      <td><%=h req.url %></td>
      </tr>
    </table>
  </div>
  <div id="info">
    <p><%=h detail %></p>
  </div>

  <div id="explanation">
    <p>
    You're seeing this error because you use <code>Rack::ShowStatus</code>.
    </p>
  </div>
</body>
</html>
HTML

    # :startdoc:
  end
end
PK!"#[�ӎ cTcT!gems/rack-3.0.8/lib/rack/utils.rbnu�[���# -*- encoding: binary -*-
# frozen_string_literal: true

require 'uri'
require 'fileutils'
require 'set'
require 'tempfile'
require 'time'

require_relative 'query_parser'
require_relative 'mime'
require_relative 'headers'
require_relative 'constants'

module Rack
  # Rack::Utils contains a grab-bag of useful methods for writing web
  # applications adopted from all kinds of Ruby libraries.

  module Utils
    ParameterTypeError = QueryParser::ParameterTypeError
    InvalidParameterError = QueryParser::InvalidParameterError
    ParamsTooDeepError = QueryParser::ParamsTooDeepError
    DEFAULT_SEP = QueryParser::DEFAULT_SEP
    COMMON_SEP = QueryParser::COMMON_SEP
    KeySpaceConstrainedParams = QueryParser::Params

    class << self
      attr_accessor :default_query_parser
    end
    # The default amount of nesting to allowed by hash parameters.
    # This helps prevent a rogue client from triggering a possible stack overflow
    # when parsing parameters.
    self.default_query_parser = QueryParser.make_default(32)

    module_function

    # URI escapes. (CGI style space to +)
    def escape(s)
      URI.encode_www_form_component(s)
    end

    # Like URI escaping, but with %20 instead of +. Strictly speaking this is
    # true URI escaping.
    def escape_path(s)
      ::URI::DEFAULT_PARSER.escape s
    end

    # Unescapes the **path** component of a URI.  See Rack::Utils.unescape for
    # unescaping query parameters or form components.
    def unescape_path(s)
      ::URI::DEFAULT_PARSER.unescape s
    end

    # Unescapes a URI escaped string with +encoding+. +encoding+ will be the
    # target encoding of the string returned, and it defaults to UTF-8
    def unescape(s, encoding = Encoding::UTF_8)
      URI.decode_www_form_component(s, encoding)
    end

    class << self
      attr_accessor :multipart_total_part_limit

      attr_accessor :multipart_file_limit

      # multipart_part_limit is the original name of multipart_file_limit, but
      # the limit only counts parts with filenames.
      alias multipart_part_limit multipart_file_limit
      alias multipart_part_limit= multipart_file_limit=
    end

    # The maximum number of file parts a request can contain. Accepting too
    # many parts can lead to the server running out of file handles.
    # Set to `0` for no limit.
    self.multipart_file_limit = (ENV['RACK_MULTIPART_PART_LIMIT'] || ENV['RACK_MULTIPART_FILE_LIMIT'] || 128).to_i

    # The maximum total number of parts a request can contain. Accepting too
    # many can lead to excessive memory use and parsing time.
    self.multipart_total_part_limit = (ENV['RACK_MULTIPART_TOTAL_PART_LIMIT'] || 4096).to_i

    def self.param_depth_limit
      default_query_parser.param_depth_limit
    end

    def self.param_depth_limit=(v)
      self.default_query_parser = self.default_query_parser.new_depth_limit(v)
    end

    def self.key_space_limit
      warn("`Rack::Utils.key_space_limit` is deprecated as this value no longer has an effect. It will be removed in Rack 3.1", uplevel: 1)
      65536
    end

    def self.key_space_limit=(v)
      warn("`Rack::Utils.key_space_limit=` is deprecated and no longer has an effect. It will be removed in Rack 3.1", uplevel: 1)
    end

    if defined?(Process::CLOCK_MONOTONIC)
      def clock_time
        Process.clock_gettime(Process::CLOCK_MONOTONIC)
      end
    else
      # :nocov:
      def clock_time
        Time.now.to_f
      end
      # :nocov:
    end

    def parse_query(qs, d = nil, &unescaper)
      Rack::Utils.default_query_parser.parse_query(qs, d, &unescaper)
    end

    def parse_nested_query(qs, d = nil)
      Rack::Utils.default_query_parser.parse_nested_query(qs, d)
    end

    def build_query(params)
      params.map { |k, v|
        if v.class == Array
          build_query(v.map { |x| [k, x] })
        else
          v.nil? ? escape(k) : "#{escape(k)}=#{escape(v)}"
        end
      }.join("&")
    end

    def build_nested_query(value, prefix = nil)
      case value
      when Array
        value.map { |v|
          build_nested_query(v, "#{prefix}[]")
        }.join("&")
      when Hash
        value.map { |k, v|
          build_nested_query(v, prefix ? "#{prefix}[#{k}]" : k)
        }.delete_if(&:empty?).join('&')
      when nil
        escape(prefix)
      else
        raise ArgumentError, "value must be a Hash" if prefix.nil?
        "#{escape(prefix)}=#{escape(value)}"
      end
    end

    def q_values(q_value_header)
      q_value_header.to_s.split(/\s*,\s*/).map do |part|
        value, parameters = part.split(/\s*;\s*/, 2)
        quality = 1.0
        if parameters && (md = /\Aq=([\d.]+)/.match(parameters))
          quality = md[1].to_f
        end
        [value, quality]
      end
    end

    def forwarded_values(forwarded_header)
      return nil unless forwarded_header
      forwarded_header = forwarded_header.to_s.gsub("\n", ";")

      forwarded_header.split(/\s*;\s*/).each_with_object({}) do |field, values|
        field.split(/\s*,\s*/).each do |pair|
          return nil unless pair =~ /\A\s*(by|for|host|proto)\s*=\s*"?([^"]+)"?\s*\Z/i
          (values[$1.downcase.to_sym] ||= []) << $2
        end
      end
    end
    module_function :forwarded_values

    # Return best accept value to use, based on the algorithm
    # in RFC 2616 Section 14.  If there are multiple best
    # matches (same specificity and quality), the value returned
    # is arbitrary.
    def best_q_match(q_value_header, available_mimes)
      values = q_values(q_value_header)

      matches = values.map do |req_mime, quality|
        match = available_mimes.find { |am| Rack::Mime.match?(am, req_mime) }
        next unless match
        [match, quality]
      end.compact.sort_by do |match, quality|
        (match.split('/', 2).count('*') * -10) + quality
      end.last
      matches&.first
    end

    ESCAPE_HTML = {
      "&" => "&amp;",
      "<" => "&lt;",
      ">" => "&gt;",
      "'" => "&#x27;",
      '"' => "&quot;",
      "/" => "&#x2F;"
    }

    ESCAPE_HTML_PATTERN = Regexp.union(*ESCAPE_HTML.keys)

    # Escape ampersands, brackets and quotes to their HTML/XML entities.
    def escape_html(string)
      string.to_s.gsub(ESCAPE_HTML_PATTERN){|c| ESCAPE_HTML[c] }
    end

    def select_best_encoding(available_encodings, accept_encoding)
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

      expanded_accept_encoding = []

      accept_encoding.each do |m, q|
        preference = available_encodings.index(m) || available_encodings.size

        if m == "*"
          (available_encodings - accept_encoding.map(&:first)).each do |m2|
            expanded_accept_encoding << [m2, q, preference]
          end
        else
          expanded_accept_encoding << [m, q, preference]
        end
      end

      encoding_candidates = expanded_accept_encoding
        .sort_by { |_, q, p| [-q, p] }
        .map!(&:first)

      unless encoding_candidates.include?("identity")
        encoding_candidates.push("identity")
      end

      expanded_accept_encoding.each do |m, q|
        encoding_candidates.delete(m) if q == 0.0
      end

      (encoding_candidates & available_encodings)[0]
    end

    # :call-seq:
    #   parse_cookies_header(value) -> hash
    #
    # Parse cookies from the provided header +value+ according to RFC6265. The
    # syntax for cookie headers only supports semicolons. Returns a map of
    # cookie +key+ to cookie +value+.
    #
    #   parse_cookies_header('myname=myvalue; max-age=0')
    #   # => {"myname"=>"myvalue", "max-age"=>"0"}
    #
    def parse_cookies_header(value)
      return {} unless value

      value.split(/; */n).each_with_object({}) do |cookie, cookies|
        next if cookie.empty?
        key, value = cookie.split('=', 2)
        cookies[key] = (unescape(value) rescue value) unless cookies.key?(key)
      end
    end

    def add_cookie_to_header(header, key, value)
      warn("add_cookie_to_header is deprecated and will be removed in Rack 3.1", uplevel: 1)

      case header
      when nil, ''
        return set_cookie_header(key, value)
      when String
        [header, set_cookie_header(key, value)]
      when Array
        header + [set_cookie_header(key, value)]
      else
        raise ArgumentError, "Unrecognized cookie header value. Expected String, Array, or nil, got #{header.inspect}"
      end
    end

    # :call-seq:
    #   parse_cookies(env) -> hash
    #
    # Parse cookies from the provided request environment using
    # parse_cookies_header. Returns a map of cookie +key+ to cookie +value+.
    #
    #   parse_cookies({'HTTP_COOKIE' => 'myname=myvalue'})
    #   # => {'myname' => 'myvalue'}
    #
    def parse_cookies(env)
      parse_cookies_header env[HTTP_COOKIE]
    end

    # :call-seq:
    #   set_cookie_header(key, value) -> encoded string
    #
    # Generate an encoded string using the provided +key+ and +value+ suitable
    # for the +set-cookie+ header according to RFC6265. The +value+ may be an
    # instance of either +String+ or +Hash+.
    #
    # If the cookie +value+ is an instance of +Hash+, it considers the following
    # cookie attribute keys: +domain+, +max_age+, +expires+ (must be instance
    # of +Time+), +secure+, +http_only+, +same_site+ and +value+. For more
    # details about the interpretation of these fields, consult
    # [RFC6265 Section 5.2](https://datatracker.ietf.org/doc/html/rfc6265#section-5.2).
    #
    # An extra cookie attribute +escape_key+ can be provided to control whether
    # or not the cookie key is URL encoded. If explicitly set to +false+, the
    # cookie key name will not be url encoded (escaped). The default is +true+.
    #
    #   set_cookie_header("myname", "myvalue")
    #   # => "myname=myvalue"
    #
    #   set_cookie_header("myname", {value: "myvalue", max_age: 10})
    #   # => "myname=myvalue; max-age=10"
    #
    def set_cookie_header(key, value)
      case value
      when Hash
        key = escape(key) unless value[:escape_key] == false
        domain  = "; domain=#{value[:domain]}"   if value[:domain]
        path    = "; path=#{value[:path]}"       if value[:path]
        max_age = "; max-age=#{value[:max_age]}" if value[:max_age]
        expires = "; expires=#{value[:expires].httpdate}" if value[:expires]
        secure = "; secure"  if value[:secure]
        httponly = "; httponly" if (value.key?(:httponly) ? value[:httponly] : value[:http_only])
        same_site =
          case value[:same_site]
          when false, nil
            nil
          when :none, 'None', :None
            '; SameSite=None'
          when :lax, 'Lax', :Lax
            '; SameSite=Lax'
          when true, :strict, 'Strict', :Strict
            '; SameSite=Strict'
          else
            raise ArgumentError, "Invalid SameSite value: #{value[:same_site].inspect}"
          end
        value = value[:value]
      else
        key = escape(key)
      end

      value = [value] unless Array === value

      return "#{key}=#{value.map { |v| escape v }.join('&')}#{domain}" \
        "#{path}#{max_age}#{expires}#{secure}#{httponly}#{same_site}"
    end

    # :call-seq:
    #   set_cookie_header!(headers, key, value) -> header value
    #
    # Append a cookie in the specified headers with the given cookie +key+ and
    # +value+ using set_cookie_header.
    #
    # If the headers already contains a +set-cookie+ key, it will be converted
    # to an +Array+ if not already, and appended to.
    def set_cookie_header!(headers, key, value)
      if header = headers[SET_COOKIE]
        if header.is_a?(Array)
          header << set_cookie_header(key, value)
        else
          headers[SET_COOKIE] = [header, set_cookie_header(key, value)]
        end
      else
        headers[SET_COOKIE] = set_cookie_header(key, value)
      end
    end

    # :call-seq:
    #   delete_set_cookie_header(key, value = {}) -> encoded string
    #
    # Generate an encoded string based on the given +key+ and +value+ using
    # set_cookie_header for the purpose of causing the specified cookie to be
    # deleted. The +value+ may be an instance of +Hash+ and can include
    # attributes as outlined by set_cookie_header. The encoded cookie will have
    # a +max_age+ of 0 seconds, an +expires+ date in the past and an empty
    # +value+. When used with the +set-cookie+ header, it will cause the client
    # to *remove* any matching cookie.
    #
    #   delete_set_cookie_header("myname")
    #   # => "myname=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
    #
    def delete_set_cookie_header(key, value = {})
      set_cookie_header(key, value.merge(max_age: '0', expires: Time.at(0), value: ''))
    end

    def make_delete_cookie_header(header, key, value)
      warn("make_delete_cookie_header is deprecated and will be removed in Rack 3.1, use delete_set_cookie_header! instead", uplevel: 1)

      delete_set_cookie_header!(header, key, value)
    end

    def delete_cookie_header!(headers, key, value = {})
      headers[SET_COOKIE] = delete_set_cookie_header!(headers[SET_COOKIE], key, value)

      return nil
    end

    def add_remove_cookie_to_header(header, key, value = {})
      warn("add_remove_cookie_to_header is deprecated and will be removed in Rack 3.1, use delete_set_cookie_header! instead", uplevel: 1)

      delete_set_cookie_header!(header, key, value)
    end

    # :call-seq:
    #   delete_set_cookie_header!(header, key, value = {}) -> header value
    #
    # Set an expired cookie in the specified headers with the given cookie
    # +key+ and +value+ using delete_set_cookie_header. This causes
    # the client to immediately delete the specified cookie.
    #
    #   delete_set_cookie_header!(nil, "mycookie")
    #   # => "mycookie=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"
    #
    # If the header is non-nil, it will be modified in place.
    #
    #   header = []
    #   delete_set_cookie_header!(header, "mycookie")
    #   # => ["mycookie=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"]
    #   header
    #   # => ["mycookie=; max-age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT"]
    #
    def delete_set_cookie_header!(header, key, value = {})
      if header
        header = Array(header)
        header << delete_set_cookie_header(key, value)
      else
        header = delete_set_cookie_header(key, value)
      end

      return header
    end

    def rfc2822(time)
      time.rfc2822
    end

    # Parses the "Range:" header, if present, into an array of Range objects.
    # Returns nil if the header is missing or syntactically invalid.
    # Returns an empty array if none of the ranges are satisfiable.
    def byte_ranges(env, size)
      get_byte_ranges env['HTTP_RANGE'], size
    end

    def get_byte_ranges(http_range, size)
      # See <http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35>
      return nil unless http_range && http_range =~ /bytes=([^;]+)/
      ranges = []
      $1.split(/,\s*/).each do |range_spec|
        return nil unless range_spec.include?('-')
        range = range_spec.split('-')
        r0, r1 = range[0], range[1]
        if r0.nil? || r0.empty?
          return nil if r1.nil?
          # suffix-byte-range-spec, represents trailing suffix of file
          r0 = size - r1.to_i
          r0 = 0  if r0 < 0
          r1 = size - 1
        else
          r0 = r0.to_i
          if r1.nil?
            r1 = size - 1
          else
            r1 = r1.to_i
            return nil  if r1 < r0  # backwards range is syntactically invalid
            r1 = size - 1  if r1 >= size
          end
        end
        ranges << (r0..r1)  if r0 <= r1
      end
      ranges
    end

    # :nocov:
    if defined?(OpenSSL.fixed_length_secure_compare)
      # Constant time string comparison.
      #
      # NOTE: the values compared should be of fixed length, such as strings
      # that have already been processed by HMAC. This should not be used
      # on variable length plaintext strings because it could leak length info
      # via timing attacks.
      def secure_compare(a, b)
        return false unless a.bytesize == b.bytesize

        OpenSSL.fixed_length_secure_compare(a, b)
      end
    # :nocov:
    else
      def secure_compare(a, b)
        return false unless a.bytesize == b.bytesize

        l = a.unpack("C*")

        r, i = 0, -1
        b.each_byte { |v| r |= v ^ l[i += 1] }
        r == 0
      end
    end

    # Context allows the use of a compatible middleware at different points
    # in a request handling stack. A compatible middleware must define
    # #context which should take the arguments env and app. The first of which
    # would be the request environment. The second of which would be the rack
    # application that the request would be forwarded to.
    class Context
      attr_reader :for, :app

      def initialize(app_f, app_r)
        raise 'running context does not respond to #context' unless app_f.respond_to? :context
        @for, @app = app_f, app_r
      end

      def call(env)
        @for.context(env, @app)
      end

      def recontext(app)
        self.class.new(@for, app)
      end

      def context(env, app = @app)
        recontext(app).call(env)
      end
    end

    # A wrapper around Headers
    # header when set.
    #
    # @api private
    class HeaderHash < Hash # :nodoc:
      def self.[](headers)
        warn "Rack::Utils::HeaderHash is deprecated and will be removed in Rack 3.1, switch to Rack::Headers", uplevel: 1
        if headers.is_a?(Headers) && !headers.frozen?
          return headers
        end

        new_headers = Headers.new
        headers.each{|k,v| new_headers[k] = v}
        new_headers
      end

      def self.new(hash = {})
        warn "Rack::Utils::HeaderHash is deprecated and will be removed in Rack 3.1, switch to Rack::Headers", uplevel: 1
        headers = Headers.new
        hash.each{|k,v| headers[k] = v}
        headers
      end

      def self.allocate
        raise TypeError, "cannot allocate HeaderHash"
      end
    end

    # Every standard HTTP code mapped to the appropriate message.
    # Generated with:
    #   curl -s https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv | \
    #     ruby -ne 'm = /^(\d{3}),(?!Unassigned|\(Unused\))([^,]+)/.match($_) and \
    #               puts "#{m[1]} => \x27#{m[2].strip}\x27,"'
    HTTP_STATUS_CODES = {
      100 => 'Continue',
      101 => 'Switching Protocols',
      102 => 'Processing',
      103 => 'Early Hints',
      200 => 'OK',
      201 => 'Created',
      202 => 'Accepted',
      203 => 'Non-Authoritative Information',
      204 => 'No Content',
      205 => 'Reset Content',
      206 => 'Partial Content',
      207 => 'Multi-Status',
      208 => 'Already Reported',
      226 => 'IM Used',
      300 => 'Multiple Choices',
      301 => 'Moved Permanently',
      302 => 'Found',
      303 => 'See Other',
      304 => 'Not Modified',
      305 => 'Use Proxy',
      306 => '(Unused)',
      307 => 'Temporary Redirect',
      308 => 'Permanent Redirect',
      400 => 'Bad Request',
      401 => 'Unauthorized',
      402 => 'Payment Required',
      403 => 'Forbidden',
      404 => 'Not Found',
      405 => 'Method Not Allowed',
      406 => 'Not Acceptable',
      407 => 'Proxy Authentication Required',
      408 => 'Request Timeout',
      409 => 'Conflict',
      410 => 'Gone',
      411 => 'Length Required',
      412 => 'Precondition Failed',
      413 => 'Payload Too Large',
      414 => 'URI Too Long',
      415 => 'Unsupported Media Type',
      416 => 'Range Not Satisfiable',
      417 => 'Expectation Failed',
      421 => 'Misdirected Request',
      422 => 'Unprocessable Entity',
      423 => 'Locked',
      424 => 'Failed Dependency',
      425 => 'Too Early',
      426 => 'Upgrade Required',
      428 => 'Precondition Required',
      429 => 'Too Many Requests',
      431 => 'Request Header Fields Too Large',
      451 => 'Unavailable for Legal Reasons',
      500 => 'Internal Server Error',
      501 => 'Not Implemented',
      502 => 'Bad Gateway',
      503 => 'Service Unavailable',
      504 => 'Gateway Timeout',
      505 => 'HTTP Version Not Supported',
      506 => 'Variant Also Negotiates',
      507 => 'Insufficient Storage',
      508 => 'Loop Detected',
      509 => 'Bandwidth Limit Exceeded',
      510 => 'Not Extended',
      511 => 'Network Authentication Required'
    }

    # Responses with HTTP status codes that should not have an entity body
    STATUS_WITH_NO_ENTITY_BODY = Hash[((100..199).to_a << 204 << 304).product([true])]

    SYMBOL_TO_STATUS_CODE = Hash[*HTTP_STATUS_CODES.map { |code, message|
      [message.downcase.gsub(/\s|-|'/, '_').to_sym, code]
    }.flatten]

    def status_code(status)
      if status.is_a?(Symbol)
        SYMBOL_TO_STATUS_CODE.fetch(status) { raise ArgumentError, "Unrecognized status code #{status.inspect}" }
      else
        status.to_i
      end
    end

    PATH_SEPS = Regexp.union(*[::File::SEPARATOR, ::File::ALT_SEPARATOR].compact)

    def clean_path_info(path_info)
      parts = path_info.split PATH_SEPS

      clean = []

      parts.each do |part|
        next if part.empty? || part == '.'
        part == '..' ? clean.pop : clean << part
      end

      clean_path = clean.join(::File::SEPARATOR)
      clean_path.prepend("/") if parts.empty? || parts.first.empty?
      clean_path
    end

    NULL_BYTE = "\0"

    def valid_path?(path)
      path.valid_encoding? && !path.include?(NULL_BYTE)
    end

  end
end
PK!"#[ѝo� gems/rack-3.0.8/lib/rack/head.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'body_proxy'

module Rack
  # Rack::Head returns an empty body for all HEAD requests. It leaves
  # all other requests unchanged.
  class Head
    def initialize(app)
      @app = app
    end

    def call(env)
      _, _, body = response = @app.call(env)

      if env[REQUEST_METHOD] == HEAD
        response[2] = Rack::BodyProxy.new([]) do
          body.close if body.respond_to? :close
        end
      end

      response
    end
  end
end
PK!"#[�/�{{(gems/rack-3.0.8/lib/rack/mock_request.rbnu�[���# frozen_string_literal: true

require 'uri'
require 'stringio'

require_relative 'constants'
require_relative 'mock_response'

module Rack
  # Rack::MockRequest helps testing your Rack application without
  # actually using HTTP.
  #
  # After performing a request on a URL with get/post/put/patch/delete, it
  # returns a MockResponse with useful helper methods for effective
  # testing.
  #
  # You can pass a hash with additional configuration to the
  # get/post/put/patch/delete.
  # <tt>:input</tt>:: A String or IO-like to be used as rack.input.
  # <tt>:fatal</tt>:: Raise a FatalWarning if the app writes to rack.errors.
  # <tt>:lint</tt>:: If true, wrap the application in a Rack::Lint.

  class MockRequest
    class FatalWarning < RuntimeError
    end

    class FatalWarner
      def puts(warning)
        raise FatalWarning, warning
      end

      def write(warning)
        raise FatalWarning, warning
      end

      def flush
      end

      def string
        ""
      end
    end

    DEFAULT_ENV = {
      RACK_INPUT        => StringIO.new,
      RACK_ERRORS       => StringIO.new,
    }.freeze

    def initialize(app)
      @app = app
    end

    # Make a GET request and return a MockResponse. See #request.
    def get(uri, opts = {})     request(GET, uri, opts)     end
    # Make a POST request and return a MockResponse. See #request.
    def post(uri, opts = {})    request(POST, uri, opts)    end
    # Make a PUT request and return a MockResponse. See #request.
    def put(uri, opts = {})     request(PUT, uri, opts)     end
    # Make a PATCH request and return a MockResponse. See #request.
    def patch(uri, opts = {})   request(PATCH, uri, opts)   end
    # Make a DELETE request and return a MockResponse. See #request.
    def delete(uri, opts = {})  request(DELETE, uri, opts)  end
    # Make a HEAD request and return a MockResponse. See #request.
    def head(uri, opts = {})    request(HEAD, uri, opts)    end
    # Make an OPTIONS request and return a MockResponse. See #request.
    def options(uri, opts = {}) request(OPTIONS, uri, opts) end

    # Make a request using the given request method for the given
    # uri to the rack application and return a MockResponse.
    # Options given are passed to MockRequest.env_for.
    def request(method = GET, uri = "", opts = {})
      env = self.class.env_for(uri, opts.merge(method: method))

      if opts[:lint]
        app = Rack::Lint.new(@app)
      else
        app = @app
      end

      errors = env[RACK_ERRORS]
      status, headers, body = app.call(env)
      MockResponse.new(status, headers, body, errors)
    ensure
      body.close if body.respond_to?(:close)
    end

    # For historical reasons, we're pinning to RFC 2396.
    # URI::Parser = URI::RFC2396_Parser
    def self.parse_uri_rfc2396(uri)
      @parser ||= URI::Parser.new
      @parser.parse(uri)
    end

    # Return the Rack environment used for a request to +uri+.
    # All options that are strings are added to the returned environment.
    # Options:
    # :fatal :: Whether to raise an exception if request outputs to rack.errors
    # :input :: The rack.input to set
    # :http_version :: The SERVER_PROTOCOL to set
    # :method :: The HTTP request method to use
    # :params :: The params to use
    # :script_name :: The SCRIPT_NAME to set
    def self.env_for(uri = "", opts = {})
      uri = parse_uri_rfc2396(uri)
      uri.path = "/#{uri.path}" unless uri.path[0] == ?/

      env = DEFAULT_ENV.dup

      env[REQUEST_METHOD]  = (opts[:method] ? opts[:method].to_s.upcase : GET).b
      env[SERVER_NAME]     = (uri.host || "example.org").b
      env[SERVER_PORT]     = (uri.port ? uri.port.to_s : "80").b
      env[SERVER_PROTOCOL] = opts[:http_version] || 'HTTP/1.1'
      env[QUERY_STRING]    = (uri.query.to_s).b
      env[PATH_INFO]       = (uri.path).b
      env[RACK_URL_SCHEME] = (uri.scheme || "http").b
      env[HTTPS]           = (env[RACK_URL_SCHEME] == "https" ? "on" : "off").b

      env[SCRIPT_NAME] = opts[:script_name] || ""

      if opts[:fatal]
        env[RACK_ERRORS] = FatalWarner.new
      else
        env[RACK_ERRORS] = StringIO.new
      end

      if params = opts[:params]
        if env[REQUEST_METHOD] == GET
          params = Utils.parse_nested_query(params) if params.is_a?(String)
          params.update(Utils.parse_nested_query(env[QUERY_STRING]))
          env[QUERY_STRING] = Utils.build_nested_query(params)
        elsif !opts.has_key?(:input)
          opts["CONTENT_TYPE"] = "application/x-www-form-urlencoded"
          if params.is_a?(Hash)
            if data = Rack::Multipart.build_multipart(params)
              opts[:input] = data
              opts["CONTENT_LENGTH"] ||= data.length.to_s
              opts["CONTENT_TYPE"] = "multipart/form-data; boundary=#{Rack::Multipart::MULTIPART_BOUNDARY}"
            else
              opts[:input] = Utils.build_nested_query(params)
            end
          else
            opts[:input] = params
          end
        end
      end

      opts[:input] ||= String.new
      if String === opts[:input]
        rack_input = StringIO.new(opts[:input])
      else
        rack_input = opts[:input]
      end

      rack_input.set_encoding(Encoding::BINARY)
      env[RACK_INPUT] = rack_input

      env["CONTENT_LENGTH"] ||= env[RACK_INPUT].size.to_s if env[RACK_INPUT].respond_to?(:size)

      opts.each { |field, value|
        env[field] = value  if String === field
      }

      env
    end
  end
end
PK!"#[��A�%gems/rack-3.0.8/lib/rack/directory.rbnu�[���# frozen_string_literal: true

require 'time'

require_relative 'constants'
require_relative 'utils'
require_relative 'head'
require_relative 'mime'
require_relative 'files'

module Rack
  # Rack::Directory serves entries below the +root+ given, according to the
  # path info of the Rack request. If a directory is found, the file's contents
  # will be presented in an html based index. If a file is found, the env will
  # be passed to the specified +app+.
  #
  # If +app+ is not specified, a Rack::Files of the same +root+ will be used.

  class Directory
    DIR_FILE = "<tr><td class='name'><a href='%s'>%s</a></td><td class='size'>%s</td><td class='type'>%s</td><td class='mtime'>%s</td></tr>\n"
    DIR_PAGE_HEADER = <<-PAGE
<html><head>
  <title>%s</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <style type='text/css'>
table { width:100%%; }
.name { text-align:left; }
.size, .mtime { text-align:right; }
.type { width:11em; }
.mtime { width:15em; }
  </style>
</head><body>
<h1>%s</h1>
<hr />
<table>
  <tr>
    <th class='name'>Name</th>
    <th class='size'>Size</th>
    <th class='type'>Type</th>
    <th class='mtime'>Last Modified</th>
  </tr>
    PAGE
    DIR_PAGE_FOOTER = <<-PAGE
</table>
<hr />
</body></html>
    PAGE

    # Body class for directory entries, showing an index page with links
    # to each file.
    class DirectoryBody < Struct.new(:root, :path, :files)
      # Yield strings for each part of the directory entry
      def each
        show_path = Utils.escape_html(path.sub(/^#{root}/, ''))
        yield(DIR_PAGE_HEADER % [ show_path, show_path ])

        unless path.chomp('/') == root
          yield(DIR_FILE % DIR_FILE_escape(files.call('..')))
        end

        Dir.foreach(path) do |basename|
          next if basename.start_with?('.')
          next unless f = files.call(basename)
          yield(DIR_FILE % DIR_FILE_escape(f))
        end

        yield(DIR_PAGE_FOOTER)
      end

      private

      # Escape each element in the array of html strings.
      def DIR_FILE_escape(htmls)
        htmls.map { |e| Utils.escape_html(e) }
      end
    end

    # The root of the directory hierarchy.  Only requests for files and
    # directories inside of the root directory are supported.
    attr_reader :root

    # Set the root directory and application for serving files.
    def initialize(root, app = nil)
      @root = ::File.expand_path(root)
      @app = app || Files.new(@root)
      @head = Head.new(method(:get))
    end

    def call(env)
      # strip body if this is a HEAD call
      @head.call env
    end

    # Internals of request handling.  Similar to call but does
    # not remove body for HEAD requests.
    def get(env)
      script_name = env[SCRIPT_NAME]
      path_info = Utils.unescape_path(env[PATH_INFO])

      if client_error_response = check_bad_request(path_info) || check_forbidden(path_info)
        client_error_response
      else
        path = ::File.join(@root, path_info)
        list_path(env, path, path_info, script_name)
      end
    end

    # Rack response to use for requests with invalid paths, or nil if path is valid.
    def check_bad_request(path_info)
      return if Utils.valid_path?(path_info)

      body = "Bad Request\n"
      [400, { CONTENT_TYPE => "text/plain",
        CONTENT_LENGTH => body.bytesize.to_s,
        "x-cascade" => "pass" }, [body]]
    end

    # Rack response to use for requests with paths outside the root, or nil if path is inside the root.
    def check_forbidden(path_info)
      return unless path_info.include? ".."
      return if ::File.expand_path(::File.join(@root, path_info)).start_with?(@root)

      body = "Forbidden\n"
      [403, { CONTENT_TYPE => "text/plain",
        CONTENT_LENGTH => body.bytesize.to_s,
        "x-cascade" => "pass" }, [body]]
    end

    # Rack response to use for directories under the root.
    def list_directory(path_info, path, script_name)
      url_head = (script_name.split('/') + path_info.split('/')).map do |part|
        Utils.escape_path part
      end

      # Globbing not safe as path could contain glob metacharacters
      body = DirectoryBody.new(@root, path, ->(basename) do
        stat = stat(::File.join(path, basename))
        next unless stat

        url = ::File.join(*url_head + [Utils.escape_path(basename)])
        mtime = stat.mtime.httpdate
        if stat.directory?
          type = 'directory'
          size = '-'
          url << '/'
          if basename == '..'
            basename = 'Parent Directory'
          else
            basename << '/'
          end
        else
          type = Mime.mime_type(::File.extname(basename))
          size = filesize_format(stat.size)
        end

        [ url, basename, size, type, mtime ]
      end)

      [ 200, { CONTENT_TYPE => 'text/html; charset=utf-8' }, body ]
    end

    # File::Stat for the given path, but return nil for missing/bad entries.
    def stat(path)
      ::File.stat(path)
    rescue Errno::ENOENT, Errno::ELOOP
      return nil
    end

    # Rack response to use for files and directories under the root.
    # Unreadable and non-file, non-directory entries will get a 404 response.
    def list_path(env, path, path_info, script_name)
      if (stat = stat(path)) && stat.readable?
        return @app.call(env) if stat.file?
        return list_directory(path_info, path, script_name) if stat.directory?
      end

      entity_not_found(path_info)
    end

    # Rack response to use for unreadable and non-file, non-directory entries.
    def entity_not_found(path_info)
      body = "Entity not found: #{path_info}\n"
      [404, { CONTENT_TYPE => "text/plain",
        CONTENT_LENGTH => body.bytesize.to_s,
        "x-cascade" => "pass" }, [body]]
    end

    # Stolen from Ramaze
    FILESIZE_FORMAT = [
      ['%.1fT', 1 << 40],
      ['%.1fG', 1 << 30],
      ['%.1fM', 1 << 20],
      ['%.1fK', 1 << 10],
    ]

    # Provide human readable file sizes
    def filesize_format(int)
      FILESIZE_FORMAT.each do |format, size|
        return format % (int.to_f / size) if int >= size
      end

      "#{int}B"
    end
  end
end
PK!"#[K�bx$gems/rack-3.0.8/lib/rack/reloader.rbnu�[���# frozen_string_literal: true

# Copyright (C) 2009-2018 Michael Fellinger <m.fellinger@gmail.com>
# Rack::Reloader is subject to the terms of an MIT-style license.
# See MIT-LICENSE or https://opensource.org/licenses/MIT.

require 'pathname'

module Rack

  # High performant source reloader
  #
  # This class acts as Rack middleware.
  #
  # What makes it especially suited for use in a production environment is that
  # any file will only be checked once and there will only be made one system
  # call stat(2).
  #
  # Please note that this will not reload files in the background, it does so
  # only when actively called.
  #
  # It is performing a check/reload cycle at the start of every request, but
  # also respects a cool down time, during which nothing will be done.
  class Reloader
    def initialize(app, cooldown = 10, backend = Stat)
      @app = app
      @cooldown = cooldown
      @last = (Time.now - cooldown)
      @cache = {}
      @mtimes = {}
      @reload_mutex = Mutex.new

      extend backend
    end

    def call(env)
      if @cooldown and Time.now > @last + @cooldown
        if Thread.list.size > 1
          @reload_mutex.synchronize{ reload! }
        else
          reload!
        end

        @last = Time.now
      end

      @app.call(env)
    end

    def reload!(stderr = $stderr)
      rotation do |file, mtime|
        previous_mtime = @mtimes[file] ||= mtime
        safe_load(file, mtime, stderr) if mtime > previous_mtime
      end
    end

    # A safe Kernel::load, issuing the hooks depending on the results
    def safe_load(file, mtime, stderr = $stderr)
      load(file)
      stderr.puts "#{self.class}: reloaded `#{file}'"
      file
    rescue LoadError, SyntaxError => ex
      stderr.puts ex
    ensure
      @mtimes[file] = mtime
    end

    module Stat
      def rotation
        files = [$0, *$LOADED_FEATURES].uniq
        paths = ['./', *$LOAD_PATH].uniq

        files.map{|file|
          next if /\.(so|bundle)$/.match?(file) # cannot reload compiled files

          found, stat = figure_path(file, paths)
          next unless found && stat && mtime = stat.mtime

          @cache[file] = found

          yield(found, mtime)
        }.compact
      end

      # Takes a relative or absolute +file+ name, a couple possible +paths+ that
      # the +file+ might reside in. Returns the full path and File::Stat for the
      # path.
      def figure_path(file, paths)
        found = @cache[file]
        found = file if !found and Pathname.new(file).absolute?
        found, stat = safe_stat(found)
        return found, stat if found

        paths.find do |possible_path|
          path = ::File.join(possible_path, file)
          found, stat = safe_stat(path)
          return ::File.expand_path(found), stat if found
        end

        return false, false
      end

      def safe_stat(file)
        return unless file
        stat = ::File.stat(file)
        return file, stat if stat.file?
      rescue Errno::ENOENT, Errno::ENOTDIR, Errno::ESRCH
        @cache.delete(file) and false
      end
    end
  end
end
PK!"#[VM�Vww gems/rack-3.0.8/lib/rack/etag.rbnu�[���# frozen_string_literal: true

require 'digest/sha2'

require_relative 'constants'
require_relative 'utils'

module Rack
  # Automatically sets the etag header on all String bodies.
  #
  # The etag header is skipped if etag or last-modified headers are sent or if
  # a sendfile body (body.responds_to :to_path) is given (since such cases
  # should be handled by apache/nginx).
  #
  # On initialization, you can pass two parameters: a cache-control directive
  # used when etag is absent and a directive when it is present. The first
  # defaults to nil, while the second defaults to "max-age=0, private, must-revalidate"
  class ETag
    ETAG_STRING = Rack::ETAG
    DEFAULT_CACHE_CONTROL = "max-age=0, private, must-revalidate"

    def initialize(app, no_cache_control = nil, cache_control = DEFAULT_CACHE_CONTROL)
      @app = app
      @cache_control = cache_control
      @no_cache_control = no_cache_control
    end

    def call(env)
      status, headers, body = response = @app.call(env)

      if etag_status?(status) && body.respond_to?(:to_ary) && !skip_caching?(headers)
        body = body.to_ary
        digest = digest_body(body)
        headers[ETAG_STRING] = %(W/"#{digest}") if digest
      end

      unless headers[CACHE_CONTROL]
        if digest
          headers[CACHE_CONTROL] = @cache_control if @cache_control
        else
          headers[CACHE_CONTROL] = @no_cache_control if @no_cache_control
        end
      end

      response
    end

    private

      def etag_status?(status)
        status == 200 || status == 201
      end

      def skip_caching?(headers)
        headers.key?(ETAG_STRING) || headers.key?('last-modified')
      end

      def digest_body(body)
        digest = nil

        body.each do |part|
          (digest ||= Digest::SHA256.new) << part unless part.empty?
        end

        digest && digest.hexdigest.byteslice(0,32)
      end
  end
end
PK!"#[�ю	��"gems/rack-3.0.8/lib/rack/static.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'files'
require_relative 'mime'

module Rack

  # The Rack::Static middleware intercepts requests for static files
  # (javascript files, images, stylesheets, etc) based on the url prefixes or
  # route mappings passed in the options, and serves them using a Rack::Files
  # object. This allows a Rack stack to serve both static and dynamic content.
  #
  # Examples:
  #
  # Serve all requests beginning with /media from the "media" folder located
  # in the current directory (ie media/*):
  #
  #     use Rack::Static, :urls => ["/media"]
  #
  # Same as previous, but instead of returning 404 for missing files under
  # /media, call the next middleware:
  #
  #     use Rack::Static, :urls => ["/media"], :cascade => true
  #
  # Serve all requests beginning with /css or /images from the folder "public"
  # in the current directory (ie public/css/* and public/images/*):
  #
  #     use Rack::Static, :urls => ["/css", "/images"], :root => "public"
  #
  # Serve all requests to / with "index.html" from the folder "public" in the
  # current directory (ie public/index.html):
  #
  #     use Rack::Static, :urls => {"/" => 'index.html'}, :root => 'public'
  #
  # Serve all requests normally from the folder "public" in the current
  # directory but uses index.html as default route for "/"
  #
  #     use Rack::Static, :urls => [""], :root => 'public', :index =>
  #     'index.html'
  #
  # Set custom HTTP Headers for based on rules:
  #
  #     use Rack::Static, :root => 'public',
  #         :header_rules => [
  #           [rule, {header_field => content, header_field => content}],
  #           [rule, {header_field => content}]
  #         ]
  #
  #  Rules for selecting files:
  #
  #  1) All files
  #     Provide the :all symbol
  #     :all => Matches every file
  #
  #  2) Folders
  #     Provide the folder path as a string
  #     '/folder' or '/folder/subfolder' => Matches files in a certain folder
  #
  #  3) File Extensions
  #     Provide the file extensions as an array
  #     ['css', 'js'] or %w(css js) => Matches files ending in .css or .js
  #
  #  4) Regular Expressions / Regexp
  #     Provide a regular expression
  #     %r{\.(?:css|js)\z} => Matches files ending in .css or .js
  #     /\.(?:eot|ttf|otf|woff2|woff|svg)\z/ => Matches files ending in
  #       the most common web font formats (.eot, .ttf, .otf, .woff2, .woff, .svg)
  #       Note: This Regexp is available as a shortcut, using the :fonts rule
  #
  #  5) Font Shortcut
  #     Provide the :fonts symbol
  #     :fonts => Uses the Regexp rule stated right above to match all common web font endings
  #
  #  Rule Ordering:
  #    Rules are applied in the order that they are provided.
  #    List rather general rules above special ones.
  #
  #  Complete example use case including HTTP header rules:
  #
  #     use Rack::Static, :root => 'public',
  #         :header_rules => [
  #           # Cache all static files in public caches (e.g. Rack::Cache)
  #           #  as well as in the browser
  #           [:all, {'cache-control' => 'public, max-age=31536000'}],
  #
  #           # Provide web fonts with cross-origin access-control-headers
  #           #  Firefox requires this when serving assets using a Content Delivery Network
  #           [:fonts, {'access-control-allow-origin' => '*'}]
  #         ]
  #
  class Static
    def initialize(app, options = {})
      @app = app
      @urls = options[:urls] || ["/favicon.ico"]
      @index = options[:index]
      @gzip = options[:gzip]
      @cascade = options[:cascade]
      root = options[:root] || Dir.pwd

      # HTTP Headers
      @header_rules = options[:header_rules] || []
      # Allow for legacy :cache_control option while prioritizing global header_rules setting
      @header_rules.unshift([:all, { CACHE_CONTROL => options[:cache_control] }]) if options[:cache_control]

      @file_server = Rack::Files.new(root)
    end

    def add_index_root?(path)
      @index && route_file(path) && path.end_with?('/')
    end

    def overwrite_file_path(path)
      @urls.kind_of?(Hash) && @urls.key?(path) || add_index_root?(path)
    end

    def route_file(path)
      @urls.kind_of?(Array) && @urls.any? { |url| path.index(url) == 0 }
    end

    def can_serve(path)
      route_file(path) || overwrite_file_path(path)
    end

    def call(env)
      path = env[PATH_INFO]

      if can_serve(path)
        if overwrite_file_path(path)
          env[PATH_INFO] = (add_index_root?(path) ? path + @index : @urls[path])
        elsif @gzip && env['HTTP_ACCEPT_ENCODING'] && /\bgzip\b/.match?(env['HTTP_ACCEPT_ENCODING'])
          path = env[PATH_INFO]
          env[PATH_INFO] += '.gz'
          response = @file_server.call(env)
          env[PATH_INFO] = path

          if response[0] == 404
            response = nil
          elsif response[0] == 304
            # Do nothing, leave headers as is
          else
            response[1][CONTENT_TYPE] = Mime.mime_type(::File.extname(path), 'text/plain')
            response[1]['content-encoding'] = 'gzip'
          end
        end

        path = env[PATH_INFO]
        response ||= @file_server.call(env)

        if @cascade && response[0] == 404
          return @app.call(env)
        end

        headers = response[1]
        applicable_rules(path).each do |rule, new_headers|
          new_headers.each { |field, content| headers[field] = content }
        end

        response
      else
        @app.call(env)
      end
    end

    # Convert HTTP header rules to HTTP headers
    def applicable_rules(path)
      @header_rules.find_all do |rule, new_headers|
        case rule
        when :all
          true
        when :fonts
          /\.(?:ttf|otf|eot|woff2|woff|svg)\z/.match?(path)
        when String
          path = ::Rack::Utils.unescape(path)
          path.start_with?(rule) || path.start_with?('/' + rule)
        when Array
          /\.(#{rule.join('|')})\z/.match?(path)
        when Regexp
          rule.match?(path)
        else
          false
        end
      end
    end

  end
end
PK!"#[��l�	�	/gems/rack-3.0.8/lib/rack/multipart/generator.rbnu�[���# frozen_string_literal: true

require_relative 'uploaded_file'

module Rack
  module Multipart
    class Generator
      def initialize(params, first = true)
        @params, @first = params, first

        if @first && !@params.is_a?(Hash)
          raise ArgumentError, "value must be a Hash"
        end
      end

      def dump
        return nil if @first && !multipart?
        return flattened_params unless @first

        flattened_params.map do |name, file|
          if file.respond_to?(:original_filename)
            if file.path
              ::File.open(file.path, 'rb') do |f|
                f.set_encoding(Encoding::BINARY)
                content_for_tempfile(f, file, name)
              end
            else
              content_for_tempfile(file, file, name)
            end
          else
            content_for_other(file, name)
          end
        end.join << "--#{MULTIPART_BOUNDARY}--\r"
      end

      private
      def multipart?
        query = lambda { |value|
          case value
          when Array
            value.any?(&query)
          when Hash
            value.values.any?(&query)
          when Rack::Multipart::UploadedFile
            true
          end
        }

        @params.values.any?(&query)
      end

      def flattened_params
        @flattened_params ||= begin
          h = Hash.new
          @params.each do |key, value|
            k = @first ? key.to_s : "[#{key}]"

            case value
            when Array
              value.map { |v|
                Multipart.build_multipart(v, false).each { |subkey, subvalue|
                  h["#{k}[]#{subkey}"] = subvalue
                }
              }
            when Hash
              Multipart.build_multipart(value, false).each { |subkey, subvalue|
                h[k + subkey] = subvalue
              }
            else
              h[k] = value
            end
          end
          h
        end
      end

      def content_for_tempfile(io, file, name)
        length = ::File.stat(file.path).size if file.path
        filename = "; filename=\"#{Utils.escape_path(file.original_filename)}\""
<<-EOF
--#{MULTIPART_BOUNDARY}\r
content-disposition: form-data; name="#{name}"#{filename}\r
content-type: #{file.content_type}\r
#{"content-length: #{length}\r\n" if length}\r
#{io.read}\r
EOF
      end

      def content_for_other(file, name)
<<-EOF
--#{MULTIPART_BOUNDARY}\r
content-disposition: form-data; name="#{name}"\r
\r
#{file}\r
EOF
      end
    end
  end
end
PK!"#[�N�$$3gems/rack-3.0.8/lib/rack/multipart/uploaded_file.rbnu�[���# frozen_string_literal: true

require 'tempfile'
require 'fileutils'

module Rack
  module Multipart
    class UploadedFile

      # The filename, *not* including the path, of the "uploaded" file
      attr_reader :original_filename

      # The content type of the "uploaded" file
      attr_accessor :content_type

      def initialize(filepath = nil, ct = "text/plain", bin = false,
                     path: filepath, content_type: ct, binary: bin, filename: nil, io: nil)
        if io
          @tempfile = io
          @original_filename = filename
        else
          raise "#{path} file does not exist" unless ::File.exist?(path)
          @original_filename = filename || ::File.basename(path)
          @tempfile = Tempfile.new([@original_filename, ::File.extname(path)], encoding: Encoding::BINARY)
          @tempfile.binmode if binary
          FileUtils.copy_file(path, @tempfile.path)
        end
        @content_type = content_type
      end

      def path
        @tempfile.path if @tempfile.respond_to?(:path)
      end
      alias_method :local_path, :path

      def respond_to?(*args)
        super or @tempfile.respond_to?(*args)
      end

      def method_missing(method_name, *args, &block) #:nodoc:
        @tempfile.__send__(method_name, *args, &block)
      end
    end
  end
end
PK!"#[��&�4�4,gems/rack-3.0.8/lib/rack/multipart/parser.rbnu�[���# frozen_string_literal: true

require 'strscan'

require_relative '../utils'

module Rack
  module Multipart
    class MultipartPartLimitError < Errno::EMFILE; end

    class MultipartTotalPartLimitError < StandardError; end

    # Use specific error class when parsing multipart request
    # that ends early.
    class EmptyContentError < ::EOFError; end

    # Base class for multipart exceptions that do not subclass from
    # other exception classes for backwards compatibility.
    class Error < StandardError; end

    EOL = "\r\n"
    MULTIPART = %r|\Amultipart/.*boundary=\"?([^\";,]+)\"?|ni
    TOKEN = /[^\s()<>,;:\\"\/\[\]?=]+/
    CONDISP = /Content-Disposition:\s*#{TOKEN}\s*/i
    VALUE = /"(?:\\"|[^"])*"|#{TOKEN}/
    BROKEN = /^#{CONDISP}.*;\s*filename=(#{VALUE})/i
    MULTIPART_CONTENT_TYPE = /Content-Type: (.*)#{EOL}/ni
    MULTIPART_CONTENT_DISPOSITION = /Content-Disposition:[^:]*;\s*name=(#{VALUE})/ni
    MULTIPART_CONTENT_ID = /Content-ID:\s*([^#{EOL}]*)/ni
    # Updated definitions from RFC 2231
    ATTRIBUTE_CHAR = %r{[^ \x00-\x1f\x7f)(><@,;:\\"/\[\]?='*%]}
    ATTRIBUTE = /#{ATTRIBUTE_CHAR}+/
    SECTION = /\*[0-9]+/
    REGULAR_PARAMETER_NAME = /#{ATTRIBUTE}#{SECTION}?/
    REGULAR_PARAMETER = /(#{REGULAR_PARAMETER_NAME})=(#{VALUE})/
    EXTENDED_OTHER_NAME = /#{ATTRIBUTE}\*[1-9][0-9]*\*/
    EXTENDED_OTHER_VALUE = /%[0-9a-fA-F]{2}|#{ATTRIBUTE_CHAR}/
    EXTENDED_OTHER_PARAMETER = /(#{EXTENDED_OTHER_NAME})=(#{EXTENDED_OTHER_VALUE}*)/
    EXTENDED_INITIAL_NAME = /#{ATTRIBUTE}(?:\*0)?\*/
    EXTENDED_INITIAL_VALUE = /[a-zA-Z0-9\-]*'[a-zA-Z0-9\-]*'#{EXTENDED_OTHER_VALUE}*/
    EXTENDED_INITIAL_PARAMETER = /(#{EXTENDED_INITIAL_NAME})=(#{EXTENDED_INITIAL_VALUE})/
    EXTENDED_PARAMETER = /#{EXTENDED_INITIAL_PARAMETER}|#{EXTENDED_OTHER_PARAMETER}/
    DISPPARM = /;\s*(?:#{REGULAR_PARAMETER}|#{EXTENDED_PARAMETER})\s*/
    RFC2183 = /^#{CONDISP}(#{DISPPARM})+$/i

    class Parser
      BUFSIZE = 1_048_576
      TEXT_PLAIN = "text/plain"
      TEMPFILE_FACTORY = lambda { |filename, content_type|
        Tempfile.new(["RackMultipart", ::File.extname(filename.gsub("\0", '%00'))])
      }

      class BoundedIO # :nodoc:
        def initialize(io, content_length)
          @io             = io
          @content_length = content_length
          @cursor = 0
        end

        def read(size, outbuf = nil)
          return if @cursor >= @content_length

          left = @content_length - @cursor

          str = if left < size
                  @io.read left, outbuf
                else
                  @io.read size, outbuf
                end

          if str
            @cursor += str.bytesize
          else
            # Raise an error for mismatching content-length and actual contents
            raise EOFError, "bad content body"
          end

          str
        end
      end

      MultipartInfo = Struct.new :params, :tmp_files
      EMPTY         = MultipartInfo.new(nil, [])

      def self.parse_boundary(content_type)
        return unless content_type
        data = content_type.match(MULTIPART)
        return unless data
        data[1]
      end

      def self.parse(io, content_length, content_type, tmpfile, bufsize, qp)
        return EMPTY if 0 == content_length

        boundary = parse_boundary content_type
        return EMPTY unless boundary

        if boundary.length > 70
          # RFC 1521 Section 7.2.1 imposes a 70 character maximum for the boundary.
          # Most clients use no more than 55 characters.
          raise Error, "multipart boundary size too large (#{boundary.length} characters)"
        end

        io = BoundedIO.new(io, content_length) if content_length

        parser = new(boundary, tmpfile, bufsize, qp)
        parser.parse(io)

        parser.result
      end

      class Collector
        class MimePart < Struct.new(:body, :head, :filename, :content_type, :name)
          def get_data
            data = body
            if filename == ""
              # filename is blank which means no file has been selected
              return
            elsif filename
              body.rewind if body.respond_to?(:rewind)

              # Take the basename of the upload's original filename.
              # This handles the full Windows paths given by Internet Explorer
              # (and perhaps other broken user agents) without affecting
              # those which give the lone filename.
              fn = filename.split(/[\/\\]/).last

              data = { filename: fn, type: content_type,
                      name: name, tempfile: body, head: head }
            end

            yield data
          end
        end

        class BufferPart < MimePart
          def file?; false; end
          def close; end
        end

        class TempfilePart < MimePart
          def file?; true; end
          def close; body.close; end
        end

        include Enumerable

        def initialize(tempfile)
          @tempfile = tempfile
          @mime_parts = []
          @open_files = 0
        end

        def each
          @mime_parts.each { |part| yield part }
        end

        def on_mime_head(mime_index, head, filename, content_type, name)
          if filename
            body = @tempfile.call(filename, content_type)
            body.binmode if body.respond_to?(:binmode)
            klass = TempfilePart
            @open_files += 1
          else
            body = String.new
            klass = BufferPart
          end

          @mime_parts[mime_index] = klass.new(body, head, filename, content_type, name)

          check_part_limits
        end

        def on_mime_body(mime_index, content)
          @mime_parts[mime_index].body << content
        end

        def on_mime_finish(mime_index)
        end

        private

        def check_part_limits
          file_limit = Utils.multipart_file_limit
          part_limit = Utils.multipart_total_part_limit

          if file_limit && file_limit > 0
            if @open_files >= file_limit
              @mime_parts.each(&:close)
              raise MultipartPartLimitError, 'Maximum file multiparts in content reached'
            end
          end

          if part_limit && part_limit > 0
            if @mime_parts.size >= part_limit
              @mime_parts.each(&:close)
              raise MultipartTotalPartLimitError, 'Maximum total multiparts in content reached'
            end
          end
        end
      end

      attr_reader :state

      def initialize(boundary, tempfile, bufsize, query_parser)
        @query_parser   = query_parser
        @params         = query_parser.make_params
        @bufsize        = bufsize

        @state = :FAST_FORWARD
        @mime_index = 0
        @collector = Collector.new tempfile

        @sbuf = StringScanner.new("".dup)
        @body_regex = /(?:#{EOL}|\A)--#{Regexp.quote(boundary)}(?:#{EOL}|--)/m
        @rx_max_size = boundary.bytesize + 6 # (\r\n-- at start, either \r\n or -- at finish)
        @head_regex = /(.*?#{EOL})#{EOL}/m
      end

      def parse(io)
        outbuf = String.new
        read_data(io, outbuf)

        loop do
          status =
            case @state
            when :FAST_FORWARD
              handle_fast_forward
            when :CONSUME_TOKEN
              handle_consume_token
            when :MIME_HEAD
              handle_mime_head
            when :MIME_BODY
              handle_mime_body
            else # when :DONE
              return
            end

          read_data(io, outbuf) if status == :want_read
        end
      end

      def result
        @collector.each do |part|
          part.get_data do |data|
            tag_multipart_encoding(part.filename, part.content_type, part.name, data)
            @query_parser.normalize_params(@params, part.name, data)
          end
        end
        MultipartInfo.new @params.to_params_hash, @collector.find_all(&:file?).map(&:body)
      end

      private

      def dequote(str) # From WEBrick::HTTPUtils
        ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
        ret.gsub!(/\\(.)/, "\\1")
        ret
      end

      def read_data(io, outbuf)
        content = io.read(@bufsize, outbuf)
        handle_empty_content!(content)
        @sbuf.concat(content)
      end

      # This handles the initial parser state.  We read until we find the starting
      # boundary, then we can transition to the next state. If we find the ending
      # boundary, this is an invalid multipart upload, but keep scanning for opening
      # boundary in that case. If no boundary found, we need to keep reading data
      # and retry. It's highly unlikely the initial read will not consume the
      # boundary.  The client would have to deliberately craft a response
      # with the opening boundary beyond the buffer size for that to happen.
      def handle_fast_forward
        while true
          case consume_boundary
          when :BOUNDARY
            # found opening boundary, transition to next state
            @state = :MIME_HEAD
            return
          when :END_BOUNDARY
            # invalid multipart upload, but retry for opening boundary
          else
            # no boundary found, keep reading data
            return :want_read
          end
        end
      end

      def handle_consume_token
        tok = consume_boundary
        # break if we're at the end of a buffer, but not if it is the end of a field
        @state = if tok == :END_BOUNDARY || (@sbuf.eos? && tok != :BOUNDARY)
          :DONE
        else
          :MIME_HEAD
        end
      end

      def handle_mime_head
        if @sbuf.scan_until(@head_regex)
          head = @sbuf[1]
          content_type = head[MULTIPART_CONTENT_TYPE, 1]
          if name = head[MULTIPART_CONTENT_DISPOSITION, 1]
            name = dequote(name)
          else
            name = head[MULTIPART_CONTENT_ID, 1]
          end

          filename = get_filename(head)

          if name.nil? || name.empty?
            name = filename || "#{content_type || TEXT_PLAIN}[]".dup
          end

          @collector.on_mime_head @mime_index, head, filename, content_type, name
          @state = :MIME_BODY
        else
          :want_read
        end
      end

      def handle_mime_body
        if (body_with_boundary = @sbuf.check_until(@body_regex)) # check but do not advance the pointer yet
          body = body_with_boundary.sub(/#{@body_regex}\z/m, '') # remove the boundary from the string
          @collector.on_mime_body @mime_index, body
          @sbuf.pos += body.length + 2 # skip \r\n after the content
          @state = :CONSUME_TOKEN
          @mime_index += 1
        else
          # Save what we have so far
          if @rx_max_size < @sbuf.rest_size
            delta = @sbuf.rest_size - @rx_max_size
            @collector.on_mime_body @mime_index, @sbuf.peek(delta)
            @sbuf.pos += delta
            @sbuf.string = @sbuf.rest
          end
          :want_read
        end
      end

      # Scan until the we find the start or end of the boundary.
      # If we find it, return the appropriate symbol for the start or
      # end of the boundary.  If we don't find the start or end of the
      # boundary, clear the buffer and return nil.
      def consume_boundary
        if read_buffer = @sbuf.scan_until(@body_regex)
          read_buffer.end_with?(EOL) ? :BOUNDARY : :END_BOUNDARY
        else
          @sbuf.terminate
          nil
        end
      end

      def get_filename(head)
        filename = nil
        case head
        when RFC2183
          params = Hash[*head.scan(DISPPARM).flat_map(&:compact)]

          if filename = params['filename*']
            encoding, _, filename = filename.split("'", 3)
          elsif filename = params['filename']
            filename = $1 if filename =~ /^"(.*)"$/
          end
        when BROKEN
          filename = $1
          filename = $1 if filename =~ /^"(.*)"$/
        end

        return unless filename

        if filename.scan(/%.?.?/).all? { |s| /%[0-9a-fA-F]{2}/.match?(s) }
          filename = Utils.unescape_path(filename)
        end

        filename.scrub!

        if filename !~ /\\[^\\"]/
          filename = filename.gsub(/\\(.)/, '\1')
        end

        if encoding
          filename.force_encoding ::Encoding.find(encoding)
        end

        filename
      end

      CHARSET = "charset"
      deprecate_constant :CHARSET

      def tag_multipart_encoding(filename, content_type, name, body)
        name = name.to_s
        encoding = Encoding::UTF_8

        name.force_encoding(encoding)

        return if filename

        if content_type
          list         = content_type.split(';')
          type_subtype = list.first
          type_subtype.strip!
          if TEXT_PLAIN == type_subtype
            rest = list.drop 1
            rest.each do |param|
              k, v = param.split('=', 2)
              k.strip!
              v.strip!
              v = v[1..-2] if v.start_with?('"') && v.end_with?('"')
              if k == "charset"
                encoding = begin
                  Encoding.find v
                rescue ArgumentError
                  Encoding::BINARY
                end
              end
            end
          end
        end

        name.force_encoding(encoding)
        body.force_encoding(encoding)
      end

      def handle_empty_content!(content)
        if content.nil? || content.empty?
          raise EmptyContentError
        end
      end
    end
  end
end
PK!"#[�R�

)gems/rack-3.0.8/lib/rack/mock_response.rbnu�[���# frozen_string_literal: true

require 'cgi/cookie'
require 'time'

require_relative 'response'

module Rack
  # Rack::MockResponse provides useful helpers for testing your apps.
  # Usually, you don't create the MockResponse on your own, but use
  # MockRequest.

  class MockResponse < Rack::Response
    class << self
      alias [] new
    end

    # Headers
    attr_reader :original_headers, :cookies

    # Errors
    attr_accessor :errors

    def initialize(status, headers, body, errors = nil)
      @original_headers = headers

      if errors
        @errors = errors.string if errors.respond_to?(:string)
      else
        @errors = ""
      end

      super(body, status, headers)

      @cookies = parse_cookies_from_header
      buffered_body!
    end

    def =~(other)
      body =~ other
    end

    def match(other)
      body.match other
    end

    def body
      return @buffered_body if defined?(@buffered_body)

      # FIXME: apparently users of MockResponse expect the return value of
      # MockResponse#body to be a string.  However, the real response object
      # returns the body as a list.
      #
      # See spec_showstatus.rb:
      #
      #   should "not replace existing messages" do
      #     ...
      #     res.body.should == "foo!"
      #   end
      buffer = @buffered_body = String.new

      @body.each do |chunk|
        buffer << chunk
      end

      return buffer
    end

    def empty?
      [201, 204, 304].include? status
    end

    def cookie(name)
      cookies.fetch(name, nil)
    end

    private

    def parse_cookies_from_header
      cookies = Hash.new
      if headers.has_key? 'set-cookie'
        set_cookie_header = headers.fetch('set-cookie')
        Array(set_cookie_header).each do |header_value|
          header_value.split("\n").each do |cookie|
            cookie_name, cookie_filling = cookie.split('=', 2)
            cookie_attributes = identify_cookie_attributes cookie_filling
            parsed_cookie = CGI::Cookie.new(
              'name' => cookie_name.strip,
              'value' => cookie_attributes.fetch('value'),
              'path' => cookie_attributes.fetch('path', nil),
              'domain' => cookie_attributes.fetch('domain', nil),
              'expires' => cookie_attributes.fetch('expires', nil),
              'secure' => cookie_attributes.fetch('secure', false)
            )
            cookies.store(cookie_name, parsed_cookie)
          end
        end
      end
      cookies
    end

    def identify_cookie_attributes(cookie_filling)
      cookie_bits = cookie_filling.split(';')
      cookie_attributes = Hash.new
      cookie_attributes.store('value', cookie_bits[0].strip)
      cookie_bits.drop(1).each do |bit|
        if bit.include? '='
          cookie_attribute, attribute_value = bit.split('=', 2)
          cookie_attributes.store(cookie_attribute.strip.downcase, attribute_value.strip)
        end
        if bit.include? 'secure'
          cookie_attributes.store('secure', true)
        end
      end

      if cookie_attributes.key? 'max-age'
        cookie_attributes.store('expires', Time.now + cookie_attributes['max-age'].to_i)
      elsif cookie_attributes.key? 'expires'
        cookie_attributes.store('expires', Time.httpdate(cookie_attributes['expires']))
      end

      cookie_attributes
    end

  end
end
PK!"#[��||��+gems/rack-3.0.8/lib/rack/conditional_get.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'

module Rack

  # Middleware that enables conditional GET using if-none-match and
  # if-modified-since. The application should set either or both of the
  # last-modified or etag response headers according to RFC 2616. When
  # either of the conditions is met, the response body is set to be zero
  # length and the response status is set to 304 Not Modified.
  #
  # Applications that defer response body generation until the body's each
  # message is received will avoid response body generation completely when
  # a conditional GET matches.
  #
  # Adapted from Michael Klishin's Merb implementation:
  # https://github.com/wycats/merb/blob/master/merb-core/lib/merb-core/rack/middleware/conditional_get.rb
  class ConditionalGet
    def initialize(app)
      @app = app
    end

    # Return empty 304 response if the response has not been
    # modified since the last request.
    def call(env)
      case env[REQUEST_METHOD]
      when "GET", "HEAD"
        status, headers, body = response = @app.call(env)

        if status == 200 && fresh?(env, headers)
          response[0] = 304
          headers.delete(CONTENT_TYPE)
          headers.delete(CONTENT_LENGTH)
          response[2] = Rack::BodyProxy.new([]) do
            body.close if body.respond_to?(:close)
          end
        end
        response
      else
        @app.call(env)
      end
    end

  private

    # Return whether the response has not been modified since the
    # last request.
    def fresh?(env, headers)
      # if-none-match has priority over if-modified-since per RFC 7232
      if none_match = env['HTTP_IF_NONE_MATCH']
        etag_matches?(none_match, headers)
      elsif (modified_since = env['HTTP_IF_MODIFIED_SINCE']) && (modified_since = to_rfc2822(modified_since))
        modified_since?(modified_since, headers)
      end
    end

    # Whether the etag response header matches the if-none-match request header.
    # If so, the request has not been modified.
    def etag_matches?(none_match, headers)
      headers[ETAG] == none_match
    end

    # Whether the last-modified response header matches the if-modified-since
    # request header.  If so, the request has not been modified.
    def modified_since?(modified_since, headers)
      last_modified = to_rfc2822(headers['last-modified']) and
        modified_since >= last_modified
    end

    # Return a Time object for the given string (which should be in RFC2822
    # format), or nil if the string cannot be parsed.
    def to_rfc2822(since)
      # shortest possible valid date is the obsolete: 1 Nov 97 09:55 A
      # anything shorter is invalid, this avoids exceptions for common cases
      # most common being the empty string
      if since && since.length >= 16
        # NOTE: there is no trivial way to write this in a non exception way
        #   _rfc2822 returns a hash but is not that usable
        Time.rfc2822(since) rescue nil
      end
    end
  end
end
PK!"#[@�j�	�	%gems/rack-3.0.8/lib/rack/constants.rbnu�[���# frozen_string_literal: true

module Rack
  # Request env keys
  HTTP_HOST         = 'HTTP_HOST'
  HTTP_PORT         = 'HTTP_PORT'
  HTTPS             = 'HTTPS'
  PATH_INFO         = 'PATH_INFO'
  REQUEST_METHOD    = 'REQUEST_METHOD'
  REQUEST_PATH      = 'REQUEST_PATH'
  SCRIPT_NAME       = 'SCRIPT_NAME'
  QUERY_STRING      = 'QUERY_STRING'
  SERVER_PROTOCOL   = 'SERVER_PROTOCOL'
  SERVER_NAME       = 'SERVER_NAME'
  SERVER_PORT       = 'SERVER_PORT'
  HTTP_COOKIE       = 'HTTP_COOKIE'

  # Response Header Keys
  CACHE_CONTROL     = 'cache-control'
  CONTENT_LENGTH    = 'content-length'
  CONTENT_TYPE      = 'content-type'
  ETAG              = 'etag'
  EXPIRES           = 'expires'
  SET_COOKIE        = 'set-cookie'
  TRANSFER_ENCODING = 'transfer-encoding'

  # HTTP method verbs
  GET     = 'GET'
  POST    = 'POST'
  PUT     = 'PUT'
  PATCH   = 'PATCH'
  DELETE  = 'DELETE'
  HEAD    = 'HEAD'
  OPTIONS = 'OPTIONS'
  LINK    = 'LINK'
  UNLINK  = 'UNLINK'
  TRACE   = 'TRACE'

  # Rack environment variables
  RACK_VERSION                        = 'rack.version'
  RACK_TEMPFILES                      = 'rack.tempfiles'
  RACK_ERRORS                         = 'rack.errors'
  RACK_LOGGER                         = 'rack.logger'
  RACK_INPUT                          = 'rack.input'
  RACK_SESSION                        = 'rack.session'
  RACK_SESSION_OPTIONS                = 'rack.session.options'
  RACK_SHOWSTATUS_DETAIL              = 'rack.showstatus.detail'
  RACK_URL_SCHEME                     = 'rack.url_scheme'
  RACK_HIJACK                         = 'rack.hijack'
  RACK_IS_HIJACK                      = 'rack.hijack?'
  RACK_RECURSIVE_INCLUDE              = 'rack.recursive.include'
  RACK_MULTIPART_BUFFER_SIZE          = 'rack.multipart.buffer_size'
  RACK_MULTIPART_TEMPFILE_FACTORY     = 'rack.multipart.tempfile_factory'
  RACK_RESPONSE_FINISHED              = 'rack.response_finished'
  RACK_REQUEST_FORM_INPUT             = 'rack.request.form_input'
  RACK_REQUEST_FORM_HASH              = 'rack.request.form_hash'
  RACK_REQUEST_FORM_VARS              = 'rack.request.form_vars'
  RACK_REQUEST_FORM_ERROR             = 'rack.request.form_error'
  RACK_REQUEST_COOKIE_HASH            = 'rack.request.cookie_hash'
  RACK_REQUEST_COOKIE_STRING          = 'rack.request.cookie_string'
  RACK_REQUEST_QUERY_HASH             = 'rack.request.query_hash'
  RACK_REQUEST_QUERY_STRING           = 'rack.request.query_string'
  RACK_METHODOVERRIDE_ORIGINAL_METHOD = 'rack.methodoverride.original_method'
end
PK!"#[��Y		#gems/rack-3.0.8/lib/rack/cascade.rbnu�[���# frozen_string_literal: true

require_relative 'constants'

module Rack
  # Rack::Cascade tries a request on several apps, and returns the
  # first response that is not 404 or 405 (or in a list of configured
  # status codes).  If all applications tried return one of the configured
  # status codes, return the last response.

  class Cascade
    # deprecated, no longer used
    NotFound = [404, { CONTENT_TYPE => "text/plain" }, []]

    # An array of applications to try in order.
    attr_reader :apps

    # Set the apps to send requests to, and what statuses result in
    # cascading.  Arguments:
    #
    # apps: An enumerable of rack applications.
    # cascade_for: The statuses to use cascading for.  If a response is received
    #              from an app, the next app is tried.
    def initialize(apps, cascade_for = [404, 405])
      @apps = []
      apps.each { |app| add app }

      @cascade_for = {}
      [*cascade_for].each { |status| @cascade_for[status] = true }
    end

    # Call each app in order.  If the responses uses a status that requires
    # cascading, try the next app.  If all responses require cascading,
    # return the response from the last app.
    def call(env)
      return [404, { CONTENT_TYPE => "text/plain" }, []] if @apps.empty?
      result = nil
      last_body = nil

      @apps.each do |app|
        # The SPEC says that the body must be closed after it has been iterated
        # by the server, or if it is replaced by a middleware action. Cascade
        # replaces the body each time a cascade happens. It is assumed that nil
        # does not respond to close, otherwise the previous application body
        # will be closed. The final application body will not be closed, as it
        # will be passed to the server as a result.
        last_body.close if last_body.respond_to? :close

        result = app.call(env)
        return result unless @cascade_for.include?(result[0].to_i)
        last_body = result[2]
      end

      result
    end

    # Append an app to the list of apps to cascade.  This app will
    # be tried last.
    def add(app)
      @apps << app
    end

    # Whether the given app is one of the apps to cascade to.
    def include?(app)
      @apps.include?(app)
    end

    alias_method :<<, :add
  end
end
PK!"#[�ʆ��6�6+gems/rack-3.0.8/lib/rack/show_exceptions.rbnu�[���# frozen_string_literal: true

require 'ostruct'
require 'erb'

require_relative 'constants'
require_relative 'utils'
require_relative 'request'

module Rack
  # Rack::ShowExceptions catches all exceptions raised from the app it
  # wraps.  It shows a useful backtrace with the sourcefile and
  # clickable context, the whole Rack environment and the request
  # data.
  #
  # Be careful when you use this on public-facing sites as it could
  # reveal information helpful to attackers.

  class ShowExceptions
    CONTEXT = 7

    def initialize(app)
      @app = app
    end

    def call(env)
      @app.call(env)
    rescue StandardError, LoadError, SyntaxError => e
      exception_string = dump_exception(e)

      env[RACK_ERRORS].puts(exception_string)
      env[RACK_ERRORS].flush

      if accepts_html?(env)
        content_type = "text/html"
        body = pretty(env, e)
      else
        content_type = "text/plain"
        body = exception_string
      end

      [
        500,
        {
          CONTENT_TYPE => content_type,
          CONTENT_LENGTH => body.bytesize.to_s,
        },
        [body],
      ]
    end

    def prefers_plaintext?(env)
      !accepts_html?(env)
    end

    def accepts_html?(env)
      Rack::Utils.best_q_match(env["HTTP_ACCEPT"], %w[text/html])
    end
    private :accepts_html?

    def dump_exception(exception)
      if exception.respond_to?(:detailed_message)
        message = exception.detailed_message(highlight: false)
      else
        message = exception.message
      end
      string = "#{exception.class}: #{message}\n".dup
      string << exception.backtrace.map { |l| "\t#{l}" }.join("\n")
      string
    end

    def pretty(env, exception)
      req = Rack::Request.new(env)

      # This double assignment is to prevent an "unused variable" warning.
      # Yes, it is dumb, but I don't like Ruby yelling at me.
      path = path = (req.script_name + req.path_info).squeeze("/")

      # This double assignment is to prevent an "unused variable" warning.
      # Yes, it is dumb, but I don't like Ruby yelling at me.
      frames = frames = exception.backtrace.map { |line|
        frame = OpenStruct.new
        if line =~ /(.*?):(\d+)(:in `(.*)')?/
          frame.filename = $1
          frame.lineno = $2.to_i
          frame.function = $4

          begin
            lineno = frame.lineno - 1
            lines = ::File.readlines(frame.filename)
            frame.pre_context_lineno = [lineno - CONTEXT, 0].max
            frame.pre_context = lines[frame.pre_context_lineno...lineno]
            frame.context_line = lines[lineno].chomp
            frame.post_context_lineno = [lineno + CONTEXT, lines.size].min
            frame.post_context = lines[lineno + 1..frame.post_context_lineno]
          rescue
          end

          frame
        else
          nil
        end
      }.compact

      template.result(binding)
    end

    def template
      TEMPLATE
    end

    def h(obj)                  # :nodoc:
      case obj
      when String
        Utils.escape_html(obj)
      else
        Utils.escape_html(obj.inspect)
      end
    end

    # :stopdoc:

    # adapted from Django <www.djangoproject.com>
    # Copyright (c) Django Software Foundation and individual contributors.
    # Used under the modified BSD license:
    # http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5
    TEMPLATE = ERB.new(<<-'HTML'.gsub(/^      /, ''))
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html lang="en">
      <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="robots" content="NONE,NOARCHIVE" />
        <title><%=h exception.class %> at <%=h path %></title>
        <style type="text/css">
          html * { padding:0; margin:0; }
          body * { padding:10px 20px; }
          body * * { padding:0; }
          body { font:small sans-serif; }
          body>div { border-bottom:1px solid #ddd; }
          h1 { font-weight:normal; }
          h2 { margin-bottom:.8em; }
          h2 span { font-size:80%; color:#666; font-weight:normal; }
          h3 { margin:1em 0 .5em 0; }
          h4 { margin:0 0 .5em 0; font-weight: normal; }
          table {
              border:1px solid #ccc; border-collapse: collapse; background:white; }
          tbody td, tbody th { vertical-align:top; padding:2px 3px; }
          thead th {
              padding:1px 6px 1px 3px; background:#fefefe; text-align:left;
              font-weight:normal; font-size:11px; border:1px solid #ddd; }
          tbody th { text-align:right; color:#666; padding-right:.5em; }
          table.vars { margin:5px 0 2px 40px; }
          table.vars td, table.req td { font-family:monospace; }
          table td.code { width:100%;}
          table td.code div { overflow:hidden; }
          table.source th { color:#666; }
          table.source td {
              font-family:monospace; white-space:pre; border-bottom:1px solid #eee; }
          ul.traceback { list-style-type:none; }
          ul.traceback li.frame { margin-bottom:1em; }
          div.context { margin: 10px 0; }
          div.context ol {
              padding-left:30px; margin:0 10px; list-style-position: inside; }
          div.context ol li {
              font-family:monospace; white-space:pre; color:#666; cursor:pointer; }
          div.context ol.context-line li { color:black; background-color:#ccc; }
          div.context ol.context-line li span { float: right; }
          div.commands { margin-left: 40px; }
          div.commands a { color:black; text-decoration:none; }
          #summary { background: #ffc; }
          #summary h2 { font-family: monospace; font-weight: normal; color: #666; white-space: pre-wrap; }
          #summary ul#quicklinks { list-style-type: none; margin-bottom: 2em; }
          #summary ul#quicklinks li { float: left; padding: 0 1em; }
          #summary ul#quicklinks>li+li { border-left: 1px #666 solid; }
          #explanation { background:#eee; }
          #template, #template-not-exist { background:#f6f6f6; }
          #template-not-exist ul { margin: 0 0 0 20px; }
          #traceback { background:#eee; }
          #requestinfo { background:#f6f6f6; padding-left:120px; }
          #summary table { border:none; background:transparent; }
          #requestinfo h2, #requestinfo h3 { position:relative; margin-left:-100px; }
          #requestinfo h3 { margin-bottom:-1em; }
          .error { background: #ffc; }
          .specific { color:#cc3300; font-weight:bold; }
        </style>
        <script type="text/javascript">
        //<!--
          function getElementsByClassName(oElm, strTagName, strClassName){
              // Written by Jonathan Snook, http://www.snook.ca/jon;
              // Add-ons by Robert Nyman, http://www.robertnyman.com
              var arrElements = (strTagName == "*" && document.all)? document.all :
              oElm.getElementsByTagName(strTagName);
              var arrReturnElements = new Array();
              strClassName = strClassName.replace(/\-/g, "\\-");
              var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$$)");
              var oElement;
              for(var i=0; i<arrElements.length; i++){
                  oElement = arrElements[i];
                  if(oRegExp.test(oElement.className)){
                      arrReturnElements.push(oElement);
                  }
              }
              return (arrReturnElements)
          }
          function hideAll(elems) {
            for (var e = 0; e < elems.length; e++) {
              elems[e].style.display = 'none';
            }
          }
          window.onload = function() {
            hideAll(getElementsByClassName(document, 'table', 'vars'));
            hideAll(getElementsByClassName(document, 'ol', 'pre-context'));
            hideAll(getElementsByClassName(document, 'ol', 'post-context'));
          }
          function toggle() {
            for (var i = 0; i < arguments.length; i++) {
              var e = document.getElementById(arguments[i]);
              if (e) {
                e.style.display = e.style.display == 'none' ? 'block' : 'none';
              }
            }
            return false;
          }
          function varToggle(link, id) {
            toggle('v' + id);
            var s = link.getElementsByTagName('span')[0];
            var uarr = String.fromCharCode(0x25b6);
            var darr = String.fromCharCode(0x25bc);
            s.innerHTML = s.innerHTML == uarr ? darr : uarr;
            return false;
          }
          //-->
        </script>
      </head>
      <body>

      <div id="summary">
        <h1><%=h exception.class %> at <%=h path %></h1>
      <% if exception.respond_to?(:detailed_message) %>
        <h2><%=h exception.detailed_message(highlight: false) %></h2>
      <% else %>
        <h2><%=h exception.message %></h2>
      <% end %>
        <table><tr>
          <th>Ruby</th>
          <td>
      <% if first = frames.first %>
            <code><%=h first.filename %></code>: in <code><%=h first.function %></code>, line <%=h frames.first.lineno %>
      <% else %>
            unknown location
      <% end %>
          </td>
        </tr><tr>
          <th>Web</th>
          <td><code><%=h req.request_method %> <%=h(req.host + path)%></code></td>
        </tr></table>

        <h3>Jump to:</h3>
        <ul id="quicklinks">
          <li><a href="#get-info">GET</a></li>
          <li><a href="#post-info">POST</a></li>
          <li><a href="#cookie-info">Cookies</a></li>
          <li><a href="#env-info">ENV</a></li>
        </ul>
      </div>

      <div id="traceback">
        <h2>Traceback <span>(innermost first)</span></h2>
        <ul class="traceback">
      <% frames.each { |frame| %>
            <li class="frame">
              <code><%=h frame.filename %></code>: in <code><%=h frame.function %></code>

                <% if frame.context_line %>
                <div class="context" id="c<%=h frame.object_id %>">
                    <% if frame.pre_context %>
                    <ol start="<%=h frame.pre_context_lineno+1 %>" class="pre-context" id="pre<%=h frame.object_id %>">
                      <% frame.pre_context.each { |line| %>
                      <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h line %></li>
                      <% } %>
                    </ol>
                    <% end %>

                  <ol start="<%=h frame.lineno %>" class="context-line">
                    <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h frame.context_line %><span>...</span></li></ol>

                    <% if frame.post_context %>
                    <ol start='<%=h frame.lineno+1 %>' class="post-context" id="post<%=h frame.object_id %>">
                      <% frame.post_context.each { |line| %>
                      <li onclick="toggle('pre<%=h frame.object_id %>', 'post<%=h frame.object_id %>')"><%=h line %></li>
                      <% } %>
                    </ol>
                    <% end %>
                </div>
                <% end %>
            </li>
      <% } %>
        </ul>
      </div>

      <div id="requestinfo">
        <h2>Request information</h2>

        <h3 id="get-info">GET</h3>
        <% if req.GET and not req.GET.empty? %>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
                <% req.GET.sort_by { |k, v| k.to_s }.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
                <% } %>
            </tbody>
          </table>
        <% else %>
          <p>No GET data.</p>
        <% end %>

        <h3 id="post-info">POST</h3>
        <% if ((req.POST and not req.POST.empty?) rescue (no_post_data = "Invalid POST data"; nil)) %>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
                <% req.POST.sort_by { |k, v| k.to_s }.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
                <% } %>
            </tbody>
          </table>
        <% else %>
          <p><%= no_post_data || "No POST data" %>.</p>
        <% end %>


        <h3 id="cookie-info">COOKIES</h3>
        <% unless req.cookies.empty? %>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
              <% req.cookies.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
              <% } %>
            </tbody>
          </table>
        <% else %>
          <p>No cookie data.</p>
        <% end %>

        <h3 id="env-info">Rack ENV</h3>
          <table class="req">
            <thead>
              <tr>
                <th>Variable</th>
                <th>Value</th>
              </tr>
            </thead>
            <tbody>
                <% env.sort_by { |k, v| k.to_s }.each { |key, val| %>
                <tr>
                  <td><%=h key %></td>
                  <td class="code"><div><%=h val.inspect %></div></td>
                </tr>
                <% } %>
            </tbody>
          </table>

      </div>

      <div id="explanation">
        <p>
          You're seeing this error because you use <code>Rack::ShowExceptions</code>.
        </p>
      </div>

      </body>
      </html>
    HTML

    # :startdoc:
  end
end
PK!"#[O�~�%gems/rack-3.0.8/lib/rack/recursive.rbnu�[���# frozen_string_literal: true

require 'uri'

require_relative 'constants'

module Rack
  # Rack::ForwardRequest gets caught by Rack::Recursive and redirects
  # the current request to the app at +url+.
  #
  #   raise ForwardRequest.new("/not-found")
  #

  class ForwardRequest < Exception
    attr_reader :url, :env

    def initialize(url, env = {})
      @url = URI(url)
      @env = env

      @env[PATH_INFO]       = @url.path
      @env[QUERY_STRING]    = @url.query  if @url.query
      @env[HTTP_HOST]       = @url.host   if @url.host
      @env[HTTP_PORT]       = @url.port   if @url.port
      @env[RACK_URL_SCHEME] = @url.scheme if @url.scheme

      super "forwarding to #{url}"
    end
  end

  # Rack::Recursive allows applications called down the chain to
  # include data from other applications (by using
  # <tt>rack['rack.recursive.include'][...]</tt> or raise a
  # ForwardRequest to redirect internally.

  class Recursive
    def initialize(app)
      @app = app
    end

    def call(env)
      dup._call(env)
    end

    def _call(env)
      @script_name = env[SCRIPT_NAME]
      @app.call(env.merge(RACK_RECURSIVE_INCLUDE => method(:include)))
    rescue ForwardRequest => req
      call(env.merge(req.env))
    end

    def include(env, path)
      unless path.index(@script_name) == 0 && (path[@script_name.size] == ?/ ||
                                               path[@script_name.size].nil?)
        raise ArgumentError, "can only include below #{@script_name}, not #{path}"
      end

      env = env.merge(PATH_INFO => path,
                      SCRIPT_NAME => @script_name,
                      REQUEST_METHOD => GET,
                      "CONTENT_LENGTH" => "0", "CONTENT_TYPE" => "",
                      RACK_INPUT => StringIO.new(""))
      @app.call(env)
    end
  end
end
PK!"#[YY�d

+gems/rack-3.0.8/lib/rack/tempfile_reaper.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'body_proxy'

module Rack

  # Middleware tracks and cleans Tempfiles created throughout a request (i.e. Rack::Multipart)
  # Ideas/strategy based on posts by Eric Wong and Charles Oliver Nutter
  # https://groups.google.com/forum/#!searchin/rack-devel/temp/rack-devel/brK8eh-MByw/sw61oJJCGRMJ
  class TempfileReaper
    def initialize(app)
      @app = app
    end

    def call(env)
      env[RACK_TEMPFILES] ||= []

      begin
        _, _, body = response = @app.call(env)
      rescue Exception
        env[RACK_TEMPFILES]&.each(&:close!)
        raise
      end

      response[2] = BodyProxy.new(body) do
        env[RACK_TEMPFILES]&.each(&:close!)
      end

      response
    end
  end
end
PK!"#[��;�~~,gems/rack-3.0.8/lib/rack/rewindable_input.rbnu�[���# -*- encoding: binary -*-
# frozen_string_literal: true

require 'tempfile'

require_relative 'constants'

module Rack
  # Class which can make any IO object rewindable, including non-rewindable ones. It does
  # this by buffering the data into a tempfile, which is rewindable.
  #
  # Don't forget to call #close when you're done. This frees up temporary resources that
  # RewindableInput uses, though it does *not* close the original IO object.
  class RewindableInput
    # Makes rack.input rewindable, for compatibility with applications and middleware
    # designed for earlier versions of Rack (where rack.input was required to be
    # rewindable).
    class Middleware
      def initialize(app)
        @app = app
      end

      def call(env)
        env[RACK_INPUT] = RewindableInput.new(env[RACK_INPUT])
        @app.call(env)
      end
    end

    def initialize(io)
      @io = io
      @rewindable_io = nil
      @unlinked = false
    end

    def gets
      make_rewindable unless @rewindable_io
      @rewindable_io.gets
    end

    def read(*args)
      make_rewindable unless @rewindable_io
      @rewindable_io.read(*args)
    end

    def each(&block)
      make_rewindable unless @rewindable_io
      @rewindable_io.each(&block)
    end

    def rewind
      make_rewindable unless @rewindable_io
      @rewindable_io.rewind
    end

    def size
      make_rewindable unless @rewindable_io
      @rewindable_io.size
    end

    # Closes this RewindableInput object without closing the originally
    # wrapped IO object. Cleans up any temporary resources that this RewindableInput
    # has created.
    #
    # This method may be called multiple times. It does nothing on subsequent calls.
    def close
      if @rewindable_io
        if @unlinked
          @rewindable_io.close
        else
          @rewindable_io.close!
        end
        @rewindable_io = nil
      end
    end

    private

    def make_rewindable
      # Buffer all data into a tempfile. Since this tempfile is private to this
      # RewindableInput object, we chmod it so that nobody else can read or write
      # it. On POSIX filesystems we also unlink the file so that it doesn't
      # even have a file entry on the filesystem anymore, though we can still
      # access it because we have the file handle open.
      @rewindable_io = Tempfile.new('RackRewindableInput')
      @rewindable_io.chmod(0000)
      @rewindable_io.set_encoding(Encoding::BINARY)
      @rewindable_io.binmode
      # :nocov:
      if filesystem_has_posix_semantics?
        raise 'Unlink failed. IO closed.' if @rewindable_io.closed?
        @unlinked = true
      end
      # :nocov:

      buffer = "".dup
      while @io.read(1024 * 4, buffer)
        entire_buffer_written_out = false
        while !entire_buffer_written_out
          written = @rewindable_io.write(buffer)
          entire_buffer_written_out = written == buffer.bytesize
          if !entire_buffer_written_out
            buffer.slice!(0 .. written - 1)
          end
        end
      end
      @rewindable_io.rewind
    end

    def filesystem_has_posix_semantics?
      RUBY_PLATFORM !~ /(mswin|mingw|cygwin|java)/
    end
  end
end
PK!"#[Y4��88$gems/rack-3.0.8/lib/rack/sendfile.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'

module Rack

  # = Sendfile
  #
  # The Sendfile middleware intercepts responses whose body is being
  # served from a file and replaces it with a server specific x-sendfile
  # header. The web server is then responsible for writing the file contents
  # to the client. This can dramatically reduce the amount of work required
  # by the Ruby backend and takes advantage of the web server's optimized file
  # delivery code.
  #
  # In order to take advantage of this middleware, the response body must
  # respond to +to_path+ and the request must include an x-sendfile-type
  # header. Rack::Files and other components implement +to_path+ so there's
  # rarely anything you need to do in your application. The x-sendfile-type
  # header is typically set in your web servers configuration. The following
  # sections attempt to document
  #
  # === Nginx
  #
  # Nginx supports the x-accel-redirect header. This is similar to x-sendfile
  # but requires parts of the filesystem to be mapped into a private URL
  # hierarchy.
  #
  # The following example shows the Nginx configuration required to create
  # a private "/files/" area, enable x-accel-redirect, and pass the special
  # x-sendfile-type and x-accel-mapping headers to the backend:
  #
  #   location ~ /files/(.*) {
  #     internal;
  #     alias /var/www/$1;
  #   }
  #
  #   location / {
  #     proxy_redirect     off;
  #
  #     proxy_set_header   Host                $host;
  #     proxy_set_header   X-Real-IP           $remote_addr;
  #     proxy_set_header   X-Forwarded-For     $proxy_add_x_forwarded_for;
  #
  #     proxy_set_header   x-sendfile-type     x-accel-redirect;
  #     proxy_set_header   x-accel-mapping     /var/www/=/files/;
  #
  #     proxy_pass         http://127.0.0.1:8080/;
  #   }
  #
  # Note that the x-sendfile-type header must be set exactly as shown above.
  # The x-accel-mapping header should specify the location on the file system,
  # followed by an equals sign (=), followed name of the private URL pattern
  # that it maps to. The middleware performs a simple substitution on the
  # resulting path.
  #
  # See Also: https://www.nginx.com/resources/wiki/start/topics/examples/xsendfile
  #
  # === lighttpd
  #
  # Lighttpd has supported some variation of the x-sendfile header for some
  # time, although only recent version support x-sendfile in a reverse proxy
  # configuration.
  #
  #   $HTTP["host"] == "example.com" {
  #      proxy-core.protocol = "http"
  #      proxy-core.balancer = "round-robin"
  #      proxy-core.backends = (
  #        "127.0.0.1:8000",
  #        "127.0.0.1:8001",
  #        ...
  #      )
  #
  #      proxy-core.allow-x-sendfile = "enable"
  #      proxy-core.rewrite-request = (
  #        "x-sendfile-type" => (".*" => "x-sendfile")
  #      )
  #    }
  #
  # See Also: http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore
  #
  # === Apache
  #
  # x-sendfile is supported under Apache 2.x using a separate module:
  #
  # https://tn123.org/mod_xsendfile/
  #
  # Once the module is compiled and installed, you can enable it using
  # XSendFile config directive:
  #
  #   RequestHeader Set x-sendfile-type x-sendfile
  #   ProxyPassReverse / http://localhost:8001/
  #   XSendFile on
  #
  # === Mapping parameter
  #
  # The third parameter allows for an overriding extension of the
  # x-accel-mapping header. Mappings should be provided in tuples of internal to
  # external. The internal values may contain regular expression syntax, they
  # will be matched with case indifference.

  class Sendfile
    def initialize(app, variation = nil, mappings = [])
      @app = app
      @variation = variation
      @mappings = mappings.map do |internal, external|
        [/^#{internal}/i, external]
      end
    end

    def call(env)
      _, headers, body = response = @app.call(env)

      if body.respond_to?(:to_path)
        case type = variation(env)
        when /x-accel-redirect/i
          path = ::File.expand_path(body.to_path)
          if url = map_accel_path(env, path)
            headers[CONTENT_LENGTH] = '0'
            # '?' must be percent-encoded because it is not query string but a part of path
            headers[type.downcase] = ::Rack::Utils.escape_path(url).gsub('?', '%3F')
            obody = body
            response[2] = Rack::BodyProxy.new([]) do
              obody.close if obody.respond_to?(:close)
            end
          else
            env[RACK_ERRORS].puts "x-accel-mapping header missing"
          end
        when /x-sendfile|x-lighttpd-send-file/i
          path = ::File.expand_path(body.to_path)
          headers[CONTENT_LENGTH] = '0'
          headers[type.downcase] = path
          obody = body
          response[2] = Rack::BodyProxy.new([]) do
            obody.close if obody.respond_to?(:close)
          end
        when '', nil
        else
          env[RACK_ERRORS].puts "Unknown x-sendfile variation: '#{type}'.\n"
        end
      end
      response
    end

    private
    def variation(env)
      @variation ||
        env['sendfile.type'] ||
        env['HTTP_X_SENDFILE_TYPE']
    end

    def map_accel_path(env, path)
      if mapping = @mappings.find { |internal, _| internal =~ path }
        path.sub(*mapping)
      elsif mapping = env['HTTP_X_ACCEL_MAPPING']
        mapping.split(',').map(&:strip).each do |m|
          internal, external = m.split('=', 2).map(&:strip)
          new_path = path.sub(/^#{internal}/i, external)
          return new_path unless path == new_path
        end
        path
      end
    end
  end
end
PK!"#[M�}Y?? gems/rack-3.0.8/lib/rack/mock.rbnu�[���# frozen_string_literal: true

require_relative 'mock_request'
PK!"#[�d�P��"gems/rack-3.0.8/lib/rack/logger.rbnu�[���# frozen_string_literal: true

require 'logger'

require_relative 'constants'

module Rack
  # Sets up rack.logger to write to rack.errors stream
  class Logger
    def initialize(app, level = ::Logger::INFO)
      @app, @level = app, level
    end

    def call(env)
      logger = ::Logger.new(env[RACK_ERRORS])
      logger.level = @level

      env[RACK_LOGGER] = logger
      @app.call(env)
    end
  end
end
PK!"#[U``"��%gems/rack-3.0.8/lib/rack/multipart.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

require_relative 'multipart/parser'
require_relative 'multipart/generator'

module Rack
  # A multipart form data parser, adapted from IOWA.
  #
  # Usually, Rack::Request#POST takes care of calling this.
  module Multipart
    MULTIPART_BOUNDARY = "AaB03x"

    class << self
      def parse_multipart(env, params = Rack::Utils.default_query_parser)
        io = env[RACK_INPUT]

        if content_length = env['CONTENT_LENGTH']
          content_length = content_length.to_i
        end

        content_type = env['CONTENT_TYPE']

        tempfile = env[RACK_MULTIPART_TEMPFILE_FACTORY] || Parser::TEMPFILE_FACTORY
        bufsize = env[RACK_MULTIPART_BUFFER_SIZE] || Parser::BUFSIZE

        info = Parser.parse(io, content_length, content_type, tempfile, bufsize, params)
        env[RACK_TEMPFILES] = info.tmp_files

        return info.params
      end

      def extract_multipart(request, params = Rack::Utils.default_query_parser)
        parse_multipart(request.env)
      end

      def build_multipart(params, first = true)
        Generator.new(params, first).dump
      end
    end
  end
end
PK!"#[�
C�xx)gems/rack-3.0.8/lib/rack/common_logger.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'
require_relative 'body_proxy'
require_relative 'request'

module Rack
  # Rack::CommonLogger forwards every request to the given +app+, and
  # logs a line in the
  # {Apache common log format}[http://httpd.apache.org/docs/1.3/logs.html#common]
  # to the configured logger.
  class CommonLogger
    # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
    #
    #   lilith.local - - [07/Aug/2006 23:58:02 -0400] "GET / HTTP/1.1" 500 -
    #
    #   %{%s - %s [%s] "%s %s%s %s" %d %s\n} %
    #
    # The actual format is slightly different than the above due to the
    # separation of SCRIPT_NAME and PATH_INFO, and because the elapsed
    # time in seconds is included at the end.
    FORMAT = %{%s - %s [%s] "%s %s%s%s %s" %d %s %0.4f\n}

    # +logger+ can be any object that supports the +write+ or +<<+ methods,
    # which includes the standard library Logger.  These methods are called
    # with a single string argument, the log message.
    # If +logger+ is nil, CommonLogger will fall back <tt>env['rack.errors']</tt>.
    def initialize(app, logger = nil)
      @app = app
      @logger = logger
    end

    # Log all requests in common_log format after a response has been
    # returned.  Note that if the app raises an exception, the request
    # will not be logged, so if exception handling middleware are used,
    # they should be loaded after this middleware.  Additionally, because
    # the logging happens after the request body has been fully sent, any
    # exceptions raised during the sending of the response body will
    # cause the request not to be logged.
    def call(env)
      began_at = Utils.clock_time
      status, headers, body = response = @app.call(env)

      response[2] = BodyProxy.new(body) { log(env, status, headers, began_at) }
      response
    end

    private

    # Log the request to the configured logger.
    def log(env, status, response_headers, began_at)
      request = Rack::Request.new(env)
      length = extract_content_length(response_headers)

      msg = sprintf(FORMAT,
        request.ip || "-",
        request.get_header("REMOTE_USER") || "-",
        Time.now.strftime("%d/%b/%Y:%H:%M:%S %z"),
        request.request_method,
        request.script_name,
        request.path_info,
        request.query_string.empty? ? "" : "?#{request.query_string}",
        request.get_header(SERVER_PROTOCOL),
        status.to_s[0..3],
        length,
        Utils.clock_time - began_at)

      msg.gsub!(/[^[:print:]\n]/) { |c| sprintf("\\x%x", c.ord) }

      logger = @logger || request.get_header(RACK_ERRORS)
      # Standard library logger doesn't support write but it supports << which actually
      # calls to write on the log device without formatting
      if logger.respond_to?(:write)
        logger.write(msg)
      else
        logger << msg
      end
    end

    # Attempt to determine the content length for the response to
    # include it in the logged data.
    def extract_content_length(headers)
      value = headers[CONTENT_LENGTH]
      !value || value.to_s == '0' ? '-' : value
    end
  end
end
PK!"#[>Sf?"?"#gems/rack-3.0.8/lib/rack/builder.rbnu�[���# frozen_string_literal: true

require_relative 'urlmap'

module Rack
  # Rack::Builder provides a domain-specific language (DSL) to construct Rack
  # applications. It is primarily used to parse +config.ru+ files which
  # instantiate several middleware and a final application which are hosted
  # by a Rack-compatible web server.
  #
  # Example:
  #
  #   app = Rack::Builder.new do
  #     use Rack::CommonLogger
  #     map "/ok" do
  #       run lambda { |env| [200, {'content-type' => 'text/plain'}, ['OK']] }
  #     end
  #   end
  #
  #   run app
  #
  # Or
  #
  #   app = Rack::Builder.app do
  #     use Rack::CommonLogger
  #     run lambda { |env| [200, {'content-type' => 'text/plain'}, ['OK']] }
  #   end
  #
  #   run app
  #
  # +use+ adds middleware to the stack, +run+ dispatches to an application.
  # You can use +map+ to construct a Rack::URLMap in a convenient way.
  class Builder

    # https://stackoverflow.com/questions/2223882/whats-the-difference-between-utf-8-and-utf-8-without-bom
    UTF_8_BOM = '\xef\xbb\xbf'

    # Parse the given config file to get a Rack application.
    #
    # If the config file ends in +.ru+, it is treated as a
    # rackup file and the contents will be treated as if
    # specified inside a Rack::Builder block.
    #
    # If the config file does not end in +.ru+, it is
    # required and Rack will use the basename of the file
    # to guess which constant will be the Rack application to run.
    #
    # Examples:
    #
    #   Rack::Builder.parse_file('config.ru')
    #   # Rack application built using Rack::Builder.new
    #
    #   Rack::Builder.parse_file('app.rb')
    #   # requires app.rb, which can be anywhere in Ruby's
    #   # load path. After requiring, assumes App constant
    #   # contains Rack application
    #
    #   Rack::Builder.parse_file('./my_app.rb')
    #   # requires ./my_app.rb, which should be in the
    #   # process's current directory.  After requiring,
    #   # assumes MyApp constant contains Rack application
    def self.parse_file(path)
      if path.end_with?('.ru')
        return self.load_file(path)
      else
        require path
        return Object.const_get(::File.basename(path, '.rb').split('_').map(&:capitalize).join(''))
      end
    end

    # Load the given file as a rackup file, treating the
    # contents as if specified inside a Rack::Builder block.
    #
    # Ignores content in the file after +__END__+, so that
    # use of +__END__+ will not result in a syntax error.
    #
    # Example config.ru file:
    #
    #   $ cat config.ru
    #
    #   use Rack::ContentLength
    #   require './app.rb'
    #   run App
    def self.load_file(path)
      config = ::File.read(path)
      config.slice!(/\A#{UTF_8_BOM}/) if config.encoding == Encoding::UTF_8

      if config[/^#\\(.*)/]
        fail "Parsing options from the first comment line is no longer supported: #{path}"
      end

      config.sub!(/^__END__\n.*\Z/m, '')

      return new_from_string(config, path)
    end

    # Evaluate the given +builder_script+ string in the context of
    # a Rack::Builder block, returning a Rack application.
    def self.new_from_string(builder_script, file = "(rackup)")
      # We want to build a variant of TOPLEVEL_BINDING with self as a Rack::Builder instance.
      # We cannot use instance_eval(String) as that would resolve constants differently.
      binding, builder = TOPLEVEL_BINDING.eval('Rack::Builder.new.instance_eval { [binding, self] }')
      eval builder_script, binding, file

      return builder.to_app
    end

    # Initialize a new Rack::Builder instance.  +default_app+ specifies the
    # default application if +run+ is not called later.  If a block
    # is given, it is evaluated in the context of the instance.
    def initialize(default_app = nil, &block)
      @use = []
      @map = nil
      @run = default_app
      @warmup = nil
      @freeze_app = false

      instance_eval(&block) if block_given?
    end

    # Create a new Rack::Builder instance and return the Rack application
    # generated from it.
    def self.app(default_app = nil, &block)
      self.new(default_app, &block).to_app
    end

    # Specifies middleware to use in a stack.
    #
    #   class Middleware
    #     def initialize(app)
    #       @app = app
    #     end
    #
    #     def call(env)
    #       env["rack.some_header"] = "setting an example"
    #       @app.call(env)
    #     end
    #   end
    #
    #   use Middleware
    #   run lambda { |env| [200, { "content-type" => "text/plain" }, ["OK"]] }
    #
    # All requests through to this application will first be processed by the middleware class.
    # The +call+ method in this example sets an additional environment key which then can be
    # referenced in the application if required.
    def use(middleware, *args, &block)
      if @map
        mapping, @map = @map, nil
        @use << proc { |app| generate_map(app, mapping) }
      end
      @use << proc { |app| middleware.new(app, *args, &block) }
    end
    # :nocov:
    ruby2_keywords(:use) if respond_to?(:ruby2_keywords, true)
    # :nocov:

    # Takes a block or argument that is an object that responds to #call and
    # returns a Rack response.
    #
    # You can use a block:
    #
    #   run do |env|
    #     [200, { "content-type" => "text/plain" }, ["Hello World!"]]
    #   end
    #
    # You can also provide a lambda:
    #
    #   run lambda { |env| [200, { "content-type" => "text/plain" }, ["OK"]] }
    #
    # You can also provide a class instance:
    #
    #   class Heartbeat
    #     def call(env)
    #      [200, { "content-type" => "text/plain" }, ["OK"]]
    #     end
    #   end
    #
    #   run Heartbeat.new
    #
    def run(app = nil, &block)
      raise ArgumentError, "Both app and block given!" if app && block_given?

      @run = app || block
    end

    # Takes a lambda or block that is used to warm-up the application. This block is called
    # before the Rack application is returned by to_app.
    #
    #   warmup do |app|
    #     client = Rack::MockRequest.new(app)
    #     client.get('/')
    #   end
    #
    #   use SomeMiddleware
    #   run MyApp
    def warmup(prc = nil, &block)
      @warmup = prc || block
    end

    # Creates a route within the application.  Routes under the mapped path will be sent to
    # the Rack application specified by run inside the block.  Other requests will be sent to the
    # default application specified by run outside the block.
    #
    #   class App
    #     def call(env)
    #       [200, {'content-type' => 'text/plain'}, ["Hello World"]]
    #     end
    #   end
    #
    #   class Heartbeat
    #     def call(env)
    #       [200, { "content-type" => "text/plain" }, ["OK"]]
    #     end
    #   end
    #
    #   app = Rack::Builder.app do
    #     map '/heartbeat' do
    #       run Heartbeat.new
    #     end
    #     run App.new
    #   end
    #
    #   run app
    #
    # The +use+ method can also be used inside the block to specify middleware to run under a specific path:
    #
    #   app = Rack::Builder.app do
    #     map '/heartbeat' do
    #       use Middleware
    #       run Heartbeat.new
    #     end
    #     run App.new
    #   end
    #
    # This example includes a piece of middleware which will run before +/heartbeat+ requests hit +Heartbeat+.
    #
    # Note that providing a +path+ of +/+ will ignore any default application given in a +run+ statement
    # outside the block.
    def map(path, &block)
      @map ||= {}
      @map[path] = block
    end

    # Freeze the app (set using run) and all middleware instances when building the application
    # in to_app.
    def freeze_app
      @freeze_app = true
    end

    # Return the Rack application generated by this instance.
    def to_app
      app = @map ? generate_map(@run, @map) : @run
      fail "missing run or map statement" unless app
      app.freeze if @freeze_app
      app = @use.reverse.inject(app) { |a, e| e[a].tap { |x| x.freeze if @freeze_app } }
      @warmup.call(app) if @warmup
      app
    end

    # Call the Rack application generated by this builder instance. Note that
    # this rebuilds the Rack application and runs the warmup code (if any)
    # every time it is called, so it should not be used if performance is important.
    def call(env)
      to_app.call(env)
    end

    private

    # Generate a URLMap instance by generating new Rack applications for each
    # map block in this instance.
    def generate_map(default_app, mapping)
      mapped = default_app ? { '/' => default_app } : {}
      mapping.each { |r, b| mapped[r] = self.class.new(default_app, &b).to_app }
      URLMap.new(mapped)
    end
  end
end
PK""#[����+gems/rack-3.0.8/lib/rack/auth/digest/md5.rbnu�[���require_relative '../digest'
PK""#[����/gems/rack-3.0.8/lib/rack/auth/digest/request.rbnu�[���require_relative '../digest'
PK""#[����-gems/rack-3.0.8/lib/rack/auth/digest/nonce.rbnu�[���require_relative '../digest'
PK""#[����.gems/rack-3.0.8/lib/rack/auth/digest/params.rbnu�[���require_relative '../digest'
PK""#[���

'gems/rack-3.0.8/lib/rack/auth/digest.rbnu�[���# frozen_string_literal: true

require_relative 'abstract/handler'
require_relative 'abstract/request'
require 'digest/md5'
require 'base64'

module Rack
  warn "Rack::Auth::Digest is deprecated and will be removed in Rack 3.1", uplevel: 1

  module Auth
    module Digest
      # Rack::Auth::Digest::Nonce is the default nonce generator for the
      # Rack::Auth::Digest::MD5 authentication handler.
      #
      # +private_key+ needs to set to a constant string.
      #
      # +time_limit+ can be optionally set to an integer (number of seconds),
      # to limit the validity of the generated nonces.

      class Nonce

        class << self
          attr_accessor :private_key, :time_limit
        end

        def self.parse(string)
          new(*Base64.decode64(string).split(' ', 2))
        end

        def initialize(timestamp = Time.now, given_digest = nil)
          @timestamp, @given_digest = timestamp.to_i, given_digest
        end

        def to_s
          Base64.encode64("#{@timestamp} #{digest}").strip
        end

        def digest
          ::Digest::MD5.hexdigest("#{@timestamp}:#{self.class.private_key}")
        end

        def valid?
          digest == @given_digest
        end

        def stale?
          !self.class.time_limit.nil? && (Time.now.to_i - @timestamp) > self.class.time_limit
        end

        def fresh?
          !stale?
        end

      end

      class Params < Hash

        def self.parse(str)
          Params[*split_header_value(str).map do |param|
            k, v = param.split('=', 2)
            [k, dequote(v)]
          end.flatten]
        end

        def self.dequote(str) # From WEBrick::HTTPUtils
          ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
          ret.gsub!(/\\(.)/, "\\1")
          ret
        end

        def self.split_header_value(str)
          str.scan(/\w+\=(?:"[^\"]+"|[^,]+)/n)
        end

        def initialize
          super()

          yield self if block_given?
        end

        def [](k)
          super k.to_s
        end

        def []=(k, v)
          super k.to_s, v.to_s
        end

        UNQUOTED = ['nc', 'stale']

        def to_s
          map do |k, v|
            "#{k}=#{(UNQUOTED.include?(k) ? v.to_s : quote(v))}"
          end.join(', ')
        end

        def quote(str) # From WEBrick::HTTPUtils
          '"' + str.gsub(/[\\\"]/o, "\\\1") + '"'
        end

      end

      class Request < Auth::AbstractRequest
        def method
          @env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] || @env[REQUEST_METHOD]
        end

        def digest?
          "digest" == scheme
        end

        def correct_uri?
          request.fullpath == uri
        end

        def nonce
          @nonce ||= Nonce.parse(params['nonce'])
        end

        def params
          @params ||= Params.parse(parts.last)
        end

        def respond_to?(sym, *)
          super or params.has_key? sym.to_s
        end

        def method_missing(sym, *args)
          return super unless params.has_key?(key = sym.to_s)
          return params[key] if args.size == 0
          raise ArgumentError, "wrong number of arguments (#{args.size} for 0)"
        end
      end

      # Rack::Auth::Digest::MD5 implements the MD5 algorithm version of
      # HTTP Digest Authentication, as per RFC 2617.
      #
      # Initialize with the [Rack] application that you want protecting,
      # and a block that looks up a plaintext password for a given username.
      #
      # +opaque+ needs to be set to a constant base64/hexadecimal string.
      #
      class MD5 < AbstractHandler

        attr_accessor :opaque

        attr_writer :passwords_hashed

        def initialize(app, realm = nil, opaque = nil, &authenticator)
          @passwords_hashed = nil
          if opaque.nil? and realm.respond_to? :values_at
            realm, opaque, @passwords_hashed = realm.values_at :realm, :opaque, :passwords_hashed
          end
          super(app, realm, &authenticator)
          @opaque = opaque
        end

        def passwords_hashed?
          !!@passwords_hashed
        end

        def call(env)
          auth = Request.new(env)

          unless auth.provided?
            return unauthorized
          end

          if !auth.digest? || !auth.correct_uri? || !valid_qop?(auth)
            return bad_request
          end

          if valid?(auth)
            if auth.nonce.stale?
              return unauthorized(challenge(stale: true))
            else
              env['REMOTE_USER'] = auth.username

              return @app.call(env)
            end
          end

          unauthorized
        end


        private

        QOP = 'auth'

        def params(hash = {})
          Params.new do |params|
            params['realm'] = realm
            params['nonce'] = Nonce.new.to_s
            params['opaque'] = H(opaque)
            params['qop'] = QOP

            hash.each { |k, v| params[k] = v }
          end
        end

        def challenge(hash = {})
          "Digest #{params(hash)}"
        end

        def valid?(auth)
          valid_opaque?(auth) && valid_nonce?(auth) && valid_digest?(auth)
        end

        def valid_qop?(auth)
          QOP == auth.qop
        end

        def valid_opaque?(auth)
          H(opaque) == auth.opaque
        end

        def valid_nonce?(auth)
          auth.nonce.valid?
        end

        def valid_digest?(auth)
          pw = @authenticator.call(auth.username)
          pw && Rack::Utils.secure_compare(digest(auth, pw), auth.response)
        end

        def md5(data)
          ::Digest::MD5.hexdigest(data)
        end

        alias :H :md5

        def KD(secret, data)
          H "#{secret}:#{data}"
        end

        def A1(auth, password)
          "#{auth.username}:#{auth.realm}:#{password}"
        end

        def A2(auth)
          "#{auth.method}:#{auth.uri}"
        end

        def digest(auth, password)
          password_hash = passwords_hashed? ? password : H(A1(auth, password))

          KD password_hash, "#{auth.nonce}:#{auth.nc}:#{auth.cnonce}:#{QOP}:#{H A2(auth)}"
        end

      end
    end
  end
end

PK""#[�����&gems/rack-3.0.8/lib/rack/auth/basic.rbnu�[���# frozen_string_literal: true

require_relative 'abstract/handler'
require_relative 'abstract/request'
require 'base64'

module Rack
  module Auth
    # Rack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617.
    #
    # Initialize with the Rack application that you want protecting,
    # and a block that checks if a username and password pair are valid.

    class Basic < AbstractHandler

      def call(env)
        auth = Basic::Request.new(env)

        return unauthorized unless auth.provided?

        return bad_request unless auth.basic?

        if valid?(auth)
          env['REMOTE_USER'] = auth.username

          return @app.call(env)
        end

        unauthorized
      end


      private

      def challenge
        'Basic realm="%s"' % realm
      end

      def valid?(auth)
        @authenticator.call(*auth.credentials)
      end

      class Request < Auth::AbstractRequest
        def basic?
          "basic" == scheme && credentials.length == 2
        end

        def credentials
          @credentials ||= Base64.decode64(params).split(':', 2)
        end

        def username
          credentials.first
        end
      end

    end
  end
end
PK""#[,��UU1gems/rack-3.0.8/lib/rack/auth/abstract/request.rbnu�[���# frozen_string_literal: true

require_relative '../../request'

module Rack
  module Auth
    class AbstractRequest

      def initialize(env)
        @env = env
      end

      def request
        @request ||= Request.new(@env)
      end

      def provided?
        !authorization_key.nil? && valid?
      end

      def valid?
        !@env[authorization_key].nil?
      end

      def parts
        @parts ||= @env[authorization_key].split(' ', 2)
      end

      def scheme
        @scheme ||= parts.first&.downcase
      end

      def params
        @params ||= parts.last
      end


      private

      AUTHORIZATION_KEYS = ['HTTP_AUTHORIZATION', 'X-HTTP_AUTHORIZATION', 'X_HTTP_AUTHORIZATION']

      def authorization_key
        @authorization_key ||= AUTHORIZATION_KEYS.detect { |key| @env.has_key?(key) }
      end

    end

  end
end
PK""#[l��GRR1gems/rack-3.0.8/lib/rack/auth/abstract/handler.rbnu�[���# frozen_string_literal: true

require_relative '../../constants'

module Rack
  module Auth
    # Rack::Auth::AbstractHandler implements common authentication functionality.
    #
    # +realm+ should be set for all handlers.

    class AbstractHandler

      attr_accessor :realm

      def initialize(app, realm = nil, &authenticator)
        @app, @realm, @authenticator = app, realm, authenticator
      end


      private

      def unauthorized(www_authenticate = challenge)
        return [ 401,
          { CONTENT_TYPE => 'text/plain',
            CONTENT_LENGTH => '0',
            'www-authenticate' => www_authenticate.to_s },
          []
        ]
      end

      def bad_request
        return [ 400,
          { CONTENT_TYPE => 'text/plain',
            CONTENT_LENGTH => '0' },
          []
        ]
      end

    end
  end
end
PK""#[��՝[�[� gems/rack-3.0.8/lib/rack/lint.rbnuȯ��# frozen_string_literal: true

require 'forwardable'

require_relative 'constants'
require_relative 'utils'

module Rack
  # Rack::Lint validates your application and the requests and
  # responses according to the Rack spec.

  class Lint
    def initialize(app)
      @app = app
    end

    # :stopdoc:

    class LintError < RuntimeError; end
    # AUTHORS: n.b. The trailing whitespace between paragraphs is important and
    # should not be removed. The whitespace creates paragraphs in the RDoc
    # output.
    #
    ## This specification aims to formalize the Rack protocol. You
    ## can (and should) use Rack::Lint to enforce it.
    ##
    ## When you develop middleware, be sure to add a Lint before and
    ## after to catch all mistakes.
    ##
    ## = Rack applications
    ##
    ## A Rack application is a Ruby object (not a class) that
    ## responds to +call+.
    def call(env = nil)
      Wrapper.new(@app, env).response
    end

    class Wrapper
      def initialize(app, env)
        @app = app
        @env = env
        @response = nil
        @head_request = false

        @status = nil
        @headers = nil
        @body = nil
        @invoked = nil
        @content_length = nil
        @closed = false
        @size = 0
      end

      def response
        ## It takes exactly one argument, the *environment*
        raise LintError, "No env given" unless @env
        check_environment(@env)

        @env[RACK_INPUT] = InputWrapper.new(@env[RACK_INPUT])
        @env[RACK_ERRORS] = ErrorWrapper.new(@env[RACK_ERRORS])

        ## and returns a non-frozen Array of exactly three values:
        @response = @app.call(@env)
        raise LintError, "response is not an Array, but #{@response.class}" unless @response.kind_of? Array
        raise LintError, "response is frozen" if @response.frozen?
        raise LintError, "response array has #{@response.size} elements instead of 3" unless @response.size == 3

        @status, @headers, @body = @response
        ## The *status*,
        check_status(@status)

        ## the *headers*,
        check_headers(@headers)

        hijack_proc = check_hijack_response(@headers, @env)
        if hijack_proc
          @headers[RACK_HIJACK] = hijack_proc
        end

        ## and the *body*.
        check_content_type(@status, @headers)
        check_content_length(@status, @headers)
        @head_request = @env[REQUEST_METHOD] == HEAD

        @lint = (@env['rack.lint'] ||= []) << self

        if (@env['rack.lint.body_iteration'] ||= 0) > 0
          raise LintError, "Middleware must not call #each directly"
        end

        return [@status, @headers, self]
      end

      ##
      ## == The Environment
      ##
      def check_environment(env)
        ## The environment must be an unfrozen instance of Hash that includes
        ## CGI-like headers. The Rack application is free to modify the
        ## environment.
        raise LintError, "env #{env.inspect} is not a Hash, but #{env.class}" unless env.kind_of? Hash
        raise LintError, "env should not be frozen, but is" if env.frozen?

        ##
        ## The environment is required to include these variables
        ## (adopted from {PEP 333}[https://peps.python.org/pep-0333/]), except when they'd be empty, but see
        ## below.

        ## <tt>REQUEST_METHOD</tt>:: The HTTP request method, such as
        ##                           "GET" or "POST". This cannot ever
        ##                           be an empty string, and so is
        ##                           always required.

        ## <tt>SCRIPT_NAME</tt>:: The initial portion of the request
        ##                        URL's "path" that corresponds to the
        ##                        application object, so that the
        ##                        application knows its virtual
        ##                        "location". This may be an empty
        ##                        string, if the application corresponds
        ##                        to the "root" of the server.

        ## <tt>PATH_INFO</tt>:: The remainder of the request URL's
        ##                      "path", designating the virtual
        ##                      "location" of the request's target
        ##                      within the application. This may be an
        ##                      empty string, if the request URL targets
        ##                      the application root and does not have a
        ##                      trailing slash. This value may be
        ##                      percent-encoded when originating from
        ##                      a URL.

        ## <tt>QUERY_STRING</tt>:: The portion of the request URL that
        ##                         follows the <tt>?</tt>, if any. May be
        ##                         empty, but is always required!

        ## <tt>SERVER_NAME</tt>:: When combined with <tt>SCRIPT_NAME</tt> and
        ##                        <tt>PATH_INFO</tt>, these variables can be
        ##                        used to complete the URL. Note, however,
        ##                        that <tt>HTTP_HOST</tt>, if present,
        ##                        should be used in preference to
        ##                        <tt>SERVER_NAME</tt> for reconstructing
        ##                        the request URL.
        ##                        <tt>SERVER_NAME</tt> can never be an empty
        ##                        string, and so is always required.

        ## <tt>SERVER_PORT</tt>:: An optional +Integer+ which is the port the
        ##                        server is running on. Should be specified if
        ##                        the server is running on a non-standard port.

        ## <tt>SERVER_PROTOCOL</tt>:: A string representing the HTTP version used
        ##                            for the request.

        ## <tt>HTTP_</tt> Variables:: Variables corresponding to the
        ##                            client-supplied HTTP request
        ##                            headers (i.e., variables whose
        ##                            names begin with <tt>HTTP_</tt>). The
        ##                            presence or absence of these
        ##                            variables should correspond with
        ##                            the presence or absence of the
        ##                            appropriate HTTP header in the
        ##                            request. See
        ##                            {RFC3875 section 4.1.18}[https://tools.ietf.org/html/rfc3875#section-4.1.18]
        ##                            for specific behavior.

        ## In addition to this, the Rack environment must include these
        ## Rack-specific variables:

        ## <tt>rack.url_scheme</tt>:: +http+ or +https+, depending on the
        ##                            request URL.

        ## <tt>rack.input</tt>:: See below, the input stream.

        ## <tt>rack.errors</tt>:: See below, the error stream.

        ## <tt>rack.hijack?</tt>:: See below, if present and true, indicates
        ##                         that the server supports partial hijacking.

        ## <tt>rack.hijack</tt>:: See below, if present, an object responding
        ##                        to +call+ that is used to perform a full
        ##                        hijack.

        ## Additional environment specifications have approved to
        ## standardized middleware APIs. None of these are required to
        ## be implemented by the server.

        ## <tt>rack.session</tt>:: A hash-like interface for storing
        ##                         request session data.
        ##                         The store must implement:
        if session = env[RACK_SESSION]
          ##                         store(key, value)         (aliased as []=);
          unless session.respond_to?(:store) && session.respond_to?(:[]=)
            raise LintError, "session #{session.inspect} must respond to store and []="
          end

          ##                         fetch(key, default = nil) (aliased as []);
          unless session.respond_to?(:fetch) && session.respond_to?(:[])
            raise LintError, "session #{session.inspect} must respond to fetch and []"
          end

          ##                         delete(key);
          unless session.respond_to?(:delete)
            raise LintError, "session #{session.inspect} must respond to delete"
          end

          ##                         clear;
          unless session.respond_to?(:clear)
            raise LintError, "session #{session.inspect} must respond to clear"
          end

          ##                         to_hash (returning unfrozen Hash instance);
          unless session.respond_to?(:to_hash) && session.to_hash.kind_of?(Hash) && !session.to_hash.frozen?
            raise LintError, "session #{session.inspect} must respond to to_hash and return unfrozen Hash instance"
          end
        end

        ## <tt>rack.logger</tt>:: A common object interface for logging messages.
        ##                        The object must implement:
        if logger = env[RACK_LOGGER]
          ##                         info(message, &block)
          unless logger.respond_to?(:info)
            raise LintError, "logger #{logger.inspect} must respond to info"
          end

          ##                         debug(message, &block)
          unless logger.respond_to?(:debug)
            raise LintError, "logger #{logger.inspect} must respond to debug"
          end

          ##                         warn(message, &block)
          unless logger.respond_to?(:warn)
            raise LintError, "logger #{logger.inspect} must respond to warn"
          end

          ##                         error(message, &block)
          unless logger.respond_to?(:error)
            raise LintError, "logger #{logger.inspect} must respond to error"
          end

          ##                         fatal(message, &block)
          unless logger.respond_to?(:fatal)
            raise LintError, "logger #{logger.inspect} must respond to fatal"
          end
        end

        ## <tt>rack.multipart.buffer_size</tt>:: An Integer hint to the multipart parser as to what chunk size to use for reads and writes.
        if bufsize = env[RACK_MULTIPART_BUFFER_SIZE]
          unless bufsize.is_a?(Integer) && bufsize > 0
            raise LintError, "rack.multipart.buffer_size must be an Integer > 0 if specified"
          end
        end

        ## <tt>rack.multipart.tempfile_factory</tt>:: An object responding to #call with two arguments, the filename and content_type given for the multipart form field, and returning an IO-like object that responds to #<< and optionally #rewind. This factory will be used to instantiate the tempfile for each multipart form file upload field, rather than the default class of Tempfile.
        if tempfile_factory = env[RACK_MULTIPART_TEMPFILE_FACTORY]
          raise LintError, "rack.multipart.tempfile_factory must respond to #call" unless tempfile_factory.respond_to?(:call)
          env[RACK_MULTIPART_TEMPFILE_FACTORY] = lambda do |filename, content_type|
            io = tempfile_factory.call(filename, content_type)
            raise LintError, "rack.multipart.tempfile_factory return value must respond to #<<" unless io.respond_to?(:<<)
            io
          end
        end

        ## The server or the application can store their own data in the
        ## environment, too.  The keys must contain at least one dot,
        ## and should be prefixed uniquely.  The prefix <tt>rack.</tt>
        ## is reserved for use with the Rack core distribution and other
        ## accepted specifications and must not be used otherwise.
        ##

        %w[REQUEST_METHOD SERVER_NAME QUERY_STRING SERVER_PROTOCOL
           rack.input rack.errors].each { |header|
          raise LintError, "env missing required key #{header}" unless env.include? header
        }

        ## The <tt>SERVER_PORT</tt> must be an Integer if set.
        server_port = env["SERVER_PORT"]
        unless server_port.nil? || (Integer(server_port) rescue false)
          raise LintError, "env[SERVER_PORT] is not an Integer"
        end

        ## The <tt>SERVER_NAME</tt> must be a valid authority as defined by RFC7540.
        unless (URI.parse("http://#{env[SERVER_NAME]}/") rescue false)
          raise LintError, "#{env[SERVER_NAME]} must be a valid authority"
        end

        ## The <tt>HTTP_HOST</tt> must be a valid authority as defined by RFC7540.
        unless (URI.parse("http://#{env[HTTP_HOST]}/") rescue false)
          raise LintError, "#{env[HTTP_HOST]} must be a valid authority"
        end

        ## The <tt>SERVER_PROTOCOL</tt> must match the regexp <tt>HTTP/\d(\.\d)?</tt>.
        server_protocol = env['SERVER_PROTOCOL']
        unless %r{HTTP/\d(\.\d)?}.match?(server_protocol)
          raise LintError, "env[SERVER_PROTOCOL] does not match HTTP/\\d(\\.\\d)?"
        end

        ## If the <tt>HTTP_VERSION</tt> is present, it must equal the <tt>SERVER_PROTOCOL</tt>.
        if env['HTTP_VERSION'] && env['HTTP_VERSION'] != server_protocol
          raise LintError, "env[HTTP_VERSION] does not equal env[SERVER_PROTOCOL]"
        end

        ## The environment must not contain the keys
        ## <tt>HTTP_CONTENT_TYPE</tt> or <tt>HTTP_CONTENT_LENGTH</tt>
        ## (use the versions without <tt>HTTP_</tt>).
        %w[HTTP_CONTENT_TYPE HTTP_CONTENT_LENGTH].each { |header|
          if env.include? header
            raise LintError, "env contains #{header}, must use #{header[5..-1]}"
          end
        }

        ## The CGI keys (named without a period) must have String values.
        ## If the string values for CGI keys contain non-ASCII characters,
        ## they should use ASCII-8BIT encoding.
        env.each { |key, value|
          next  if key.include? "."   # Skip extensions
          unless value.kind_of? String
            raise LintError, "env variable #{key} has non-string value #{value.inspect}"
          end
          next if value.encoding == Encoding::ASCII_8BIT
          unless value.b !~ /[\x80-\xff]/n
            raise LintError, "env variable #{key} has value containing non-ASCII characters and has non-ASCII-8BIT encoding #{value.inspect} encoding: #{value.encoding}"
          end
        }

        ## There are the following restrictions:

        ## * <tt>rack.url_scheme</tt> must either be +http+ or +https+.
        unless %w[http https].include?(env[RACK_URL_SCHEME])
          raise LintError, "rack.url_scheme unknown: #{env[RACK_URL_SCHEME].inspect}"
        end

        ## * There must be a valid input stream in <tt>rack.input</tt>.
        check_input env[RACK_INPUT]
        ## * There must be a valid error stream in <tt>rack.errors</tt>.
        check_error env[RACK_ERRORS]
        ## * There may be a valid hijack callback in <tt>rack.hijack</tt>
        check_hijack env

        ## * The <tt>REQUEST_METHOD</tt> must be a valid token.
        unless env[REQUEST_METHOD] =~ /\A[0-9A-Za-z!\#$%&'*+.^_`|~-]+\z/
          raise LintError, "REQUEST_METHOD unknown: #{env[REQUEST_METHOD].dump}"
        end

        ## * The <tt>SCRIPT_NAME</tt>, if non-empty, must start with <tt>/</tt>
        if env.include?(SCRIPT_NAME) && env[SCRIPT_NAME] != "" && env[SCRIPT_NAME] !~ /\A\//
          raise LintError, "SCRIPT_NAME must start with /"
        end
        ## * The <tt>PATH_INFO</tt>, if non-empty, must start with <tt>/</tt>
        if env.include?(PATH_INFO) && env[PATH_INFO] != "" && env[PATH_INFO] !~ /\A\//
          raise LintError, "PATH_INFO must start with /"
        end
        ## * The <tt>CONTENT_LENGTH</tt>, if given, must consist of digits only.
        if env.include?("CONTENT_LENGTH") && env["CONTENT_LENGTH"] !~ /\A\d+\z/
          raise LintError, "Invalid CONTENT_LENGTH: #{env["CONTENT_LENGTH"]}"
        end

        ## * One of <tt>SCRIPT_NAME</tt> or <tt>PATH_INFO</tt> must be
        ##   set. <tt>PATH_INFO</tt> should be <tt>/</tt> if
        ##   <tt>SCRIPT_NAME</tt> is empty.
        unless env[SCRIPT_NAME] || env[PATH_INFO]
          raise LintError, "One of SCRIPT_NAME or PATH_INFO must be set (make PATH_INFO '/' if SCRIPT_NAME is empty)"
        end
        ##   <tt>SCRIPT_NAME</tt> never should be <tt>/</tt>, but instead be empty.
        unless env[SCRIPT_NAME] != "/"
          raise LintError, "SCRIPT_NAME cannot be '/', make it '' and PATH_INFO '/'"
        end

        ## <tt>rack.response_finished</tt>:: An array of callables run by the server after the response has been
        ## processed. This would typically be invoked after sending the response to the client, but it could also be
        ## invoked if an error occurs while generating the response or sending the response; in that case, the error
        ## argument will be a subclass of +Exception+.
        ## The callables are invoked with +env, status, headers, error+ arguments and should not raise any
        ## exceptions. They should be invoked in reverse order of registration.
        if callables = env[RACK_RESPONSE_FINISHED]
          raise LintError, "rack.response_finished must be an array of callable objects" unless callables.is_a?(Array)

          callables.each do |callable|
            raise LintError, "rack.response_finished values must respond to call(env, status, headers, error)" unless callable.respond_to?(:call)
          end
        end
      end

      ##
      ## === The Input Stream
      ##
      ## The input stream is an IO-like object which contains the raw HTTP
      ## POST data.
      def check_input(input)
        ## When applicable, its external encoding must be "ASCII-8BIT" and it
        ## must be opened in binary mode, for Ruby 1.9 compatibility.
        if input.respond_to?(:external_encoding) && input.external_encoding != Encoding::ASCII_8BIT
          raise LintError, "rack.input #{input} does not have ASCII-8BIT as its external encoding"
        end
        if input.respond_to?(:binmode?) && !input.binmode?
          raise LintError, "rack.input #{input} is not opened in binary mode"
        end

        ## The input stream must respond to +gets+, +each+, and +read+.
        [:gets, :each, :read].each { |method|
          unless input.respond_to? method
            raise LintError, "rack.input #{input} does not respond to ##{method}"
          end
        }
      end

      class InputWrapper
        def initialize(input)
          @input = input
        end

        ## * +gets+ must be called without arguments and return a string,
        ##   or +nil+ on EOF.
        def gets(*args)
          raise LintError, "rack.input#gets called with arguments" unless args.size == 0
          v = @input.gets
          unless v.nil? or v.kind_of? String
            raise LintError, "rack.input#gets didn't return a String"
          end
          v
        end

        ## * +read+ behaves like IO#read.
        ##   Its signature is <tt>read([length, [buffer]])</tt>.
        ##
        ##   If given, +length+ must be a non-negative Integer (>= 0) or +nil+,
        ##   and +buffer+ must be a String and may not be nil.
        ##
        ##   If +length+ is given and not nil, then this method reads at most
        ##   +length+ bytes from the input stream.
        ##
        ##   If +length+ is not given or nil, then this method reads
        ##   all data until EOF.
        ##
        ##   When EOF is reached, this method returns nil if +length+ is given
        ##   and not nil, or "" if +length+ is not given or is nil.
        ##
        ##   If +buffer+ is given, then the read data will be placed
        ##   into +buffer+ instead of a newly created String object.
        def read(*args)
          unless args.size <= 2
            raise LintError, "rack.input#read called with too many arguments"
          end
          if args.size >= 1
            unless args.first.kind_of?(Integer) || args.first.nil?
              raise LintError, "rack.input#read called with non-integer and non-nil length"
            end
            unless args.first.nil? || args.first >= 0
              raise LintError, "rack.input#read called with a negative length"
            end
          end
          if args.size >= 2
            unless args[1].kind_of?(String)
              raise LintError, "rack.input#read called with non-String buffer"
            end
          end

          v = @input.read(*args)

          unless v.nil? or v.kind_of? String
            raise LintError, "rack.input#read didn't return nil or a String"
          end
          if args[0].nil?
            unless !v.nil?
              raise LintError, "rack.input#read(nil) returned nil on EOF"
            end
          end

          v
        end

        ## * +each+ must be called without arguments and only yield Strings.
        def each(*args)
          raise LintError, "rack.input#each called with arguments" unless args.size == 0
          @input.each { |line|
            unless line.kind_of? String
              raise LintError, "rack.input#each didn't yield a String"
            end
            yield line
          }
        end

        ## * +close+ can be called on the input stream to indicate that the
        ## any remaining input is not needed.
        def close(*args)
          @input.close(*args)
        end
      end

      ##
      ## === The Error Stream
      ##
      def check_error(error)
        ## The error stream must respond to +puts+, +write+ and +flush+.
        [:puts, :write, :flush].each { |method|
          unless error.respond_to? method
            raise LintError, "rack.error #{error} does not respond to ##{method}"
          end
        }
      end

      class ErrorWrapper
        def initialize(error)
          @error = error
        end

        ## * +puts+ must be called with a single argument that responds to +to_s+.
        def puts(str)
          @error.puts str
        end

        ## * +write+ must be called with a single argument that is a String.
        def write(str)
          raise LintError, "rack.errors#write not called with a String" unless str.kind_of? String
          @error.write str
        end

        ## * +flush+ must be called without arguments and must be called
        ##   in order to make the error appear for sure.
        def flush
          @error.flush
        end

        ## * +close+ must never be called on the error stream.
        def close(*args)
          raise LintError, "rack.errors#close must not be called"
        end
      end

      ##
      ## === Hijacking
      ##
      ## The hijacking interfaces provides a means for an application to take
      ## control of the HTTP connection. There are two distinct hijack
      ## interfaces: full hijacking where the application takes over the raw
      ## connection, and partial hijacking where the application takes over
      ## just the response body stream. In both cases, the application is
      ## responsible for closing the hijacked stream.
      ##
      ## Full hijacking only works with HTTP/1. Partial hijacking is functionally
      ## equivalent to streaming bodies, and is still optionally supported for
      ## backwards compatibility with older Rack versions.
      ##
      ## ==== Full Hijack
      ##
      ## Full hijack is used to completely take over an HTTP/1 connection. It
      ## occurs before any headers are written and causes the request to
      ## ignores any response generated by the application.
      ##
      ## It is intended to be used when applications need access to raw HTTP/1
      ## connection.
      ##
      def check_hijack(env)
        ## If +rack.hijack+ is present in +env+, it must respond to +call+
        if original_hijack = env[RACK_HIJACK]
          raise LintError, "rack.hijack must respond to call" unless original_hijack.respond_to?(:call)

          env[RACK_HIJACK] = proc do
            io = original_hijack.call

            ## and return an +IO+ instance which can be used to read and write
            ## to the underlying connection using HTTP/1 semantics and
            ## formatting.
            raise LintError, "rack.hijack must return an IO instance" unless io.is_a?(IO)

            io
          end
        end
      end

      ##
      ## ==== Partial Hijack
      ##
      ## Partial hijack is used for bi-directional streaming of the request and
      ## response body. It occurs after the status and headers are written by
      ## the server and causes the server to ignore the Body of the response.
      ##
      ## It is intended to be used when applications need bi-directional
      ## streaming.
      ##
      def check_hijack_response(headers, env)
        ## If +rack.hijack?+ is present in +env+ and truthy,
        if env[RACK_IS_HIJACK]
          ## an application may set the special response header +rack.hijack+
          if original_hijack = headers[RACK_HIJACK]
            ## to an object that responds to +call+,
            unless original_hijack.respond_to?(:call)
              raise LintError, 'rack.hijack header must respond to #call'
            end
            ## accepting a +stream+ argument.
            return proc do |io|
              original_hijack.call StreamWrapper.new(io)
            end
          end
          ##
          ## After the response status and headers have been sent, this hijack
          ## callback will be invoked with a +stream+ argument which follows the
          ## same interface as outlined in "Streaming Body". Servers must
          ## ignore the +body+ part of the response tuple when the
          ## +rack.hijack+ response header is present. Using an empty +Array+
          ## instance is recommended.
        else
          ##
          ## The special response header +rack.hijack+ must only be set
          ## if the request +env+ has a truthy +rack.hijack?+.
          if headers.key?(RACK_HIJACK)
            raise LintError, 'rack.hijack header must not be present if server does not support hijacking'
          end
        end

        nil
      end

      ## == The Response
      ##
      ## === The Status
      ##
      def check_status(status)
        ## This is an HTTP status. It must be an Integer greater than or equal to
        ## 100.
        unless status.is_a?(Integer) && status >= 100
          raise LintError, "Status must be an Integer >=100"
        end
      end

      ##
      ## === The Headers
      ##
      def check_headers(headers)
        ## The headers must be a unfrozen Hash.
        unless headers.kind_of?(Hash)
          raise LintError, "headers object should be a hash, but isn't (got #{headers.class} as headers)"
        end

        if headers.frozen?
          raise LintError, "headers object should not be frozen, but is"
        end

        headers.each do |key, value|
          ## The header keys must be Strings.
          unless key.kind_of? String
            raise LintError, "header key must be a string, was #{key.class}"
          end

          ## Special headers starting "rack." are for communicating with the
          ## server, and must not be sent back to the client.
          next if key.start_with?("rack.")

          ## The header must not contain a +Status+ key.
          raise LintError, "header must not contain status" if key == "status"
          ## Header keys must conform to RFC7230 token specification, i.e. cannot
          ## contain non-printable ASCII, DQUOTE or "(),/:;<=>?@[\]{}".
          raise LintError, "invalid header name: #{key}" if key =~ /[\(\),\/:;<=>\?@\[\\\]{}[:cntrl:]]/
          ## Header keys must not contain uppercase ASCII characters (A-Z).
          raise LintError, "uppercase character in header name: #{key}" if key =~ /[A-Z]/

          ## Header values must be either a String instance,
          if value.kind_of?(String)
            check_header_value(key, value)
          elsif value.kind_of?(Array)
            ## or an Array of String instances,
            value.each{|value| check_header_value(key, value)}
          else
            raise LintError, "a header value must be a String or Array of Strings, but the value of '#{key}' is a #{value.class}"
          end
        end
      end

      def check_header_value(key, value)
        ## such that each String instance must not contain characters below 037.
        if value =~ /[\000-\037]/
          raise LintError, "invalid header value #{key}: #{value.inspect}"
        end
      end

      ##
      ## === The content-type
      ##
      def check_content_type(status, headers)
        headers.each { |key, value|
          ## There must not be a <tt>content-type</tt> header key when the +Status+ is 1xx,
          ## 204, or 304.
          if key == "content-type"
            if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.key? status.to_i
              raise LintError, "content-type header found in #{status} response, not allowed"
            end
            return
          end
        }
      end

      ##
      ## === The content-length
      ##
      def check_content_length(status, headers)
        headers.each { |key, value|
          if key == 'content-length'
            ## There must not be a <tt>content-length</tt> header key when the
            ## +Status+ is 1xx, 204, or 304.
            if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.key? status.to_i
              raise LintError, "content-length header found in #{status} response, not allowed"
            end
            @content_length = value
          end
        }
      end

      def verify_content_length(size)
        if @head_request
          unless size == 0
            raise LintError, "Response body was given for HEAD request, but should be empty"
          end
        elsif @content_length
          unless @content_length == size.to_s
            raise LintError, "content-length header was #{@content_length}, but should be #{size}"
          end
        end
      end

      ##
      ## === The Body
      ##
      ## The Body is typically an +Array+ of +String+ instances, an enumerable
      ## that yields +String+ instances, a +Proc+ instance, or a File-like
      ## object.
      ##
      ## The Body must respond to +each+ or +call+. It may optionally respond
      ## to +to_path+ or +to_ary+. A Body that responds to +each+ is considered
      ## to be an Enumerable Body. A Body that responds to +call+ is considered
      ## to be a Streaming Body.
      ##
      ## A Body that responds to both +each+ and +call+ must be treated as an
      ## Enumerable Body, not a Streaming Body. If it responds to +each+, you
      ## must call +each+ and not +call+. If the Body doesn't respond to
      ## +each+, then you can assume it responds to +call+.
      ##
      ## The Body must either be consumed or returned. The Body is consumed by
      ## optionally calling either +each+ or +call+.
      ## Then, if the Body responds to +close+, it must be called to release
      ## any resources associated with the generation of the body.
      ## In other words, +close+ must always be called at least once; typically
      ## after the web server has sent the response to the client, but also in
      ## cases where the Rack application makes internal/virtual requests and
      ## discards the response.
      ##
      def close
        ##
        ## After calling +close+, the Body is considered closed and should not
        ## be consumed again.
        @closed = true

        ## If the original Body is replaced by a new Body, the new Body must
        ## also consume the original Body by calling +close+ if possible.
        @body.close if @body.respond_to?(:close)

        index = @lint.index(self)
        unless @env['rack.lint'][0..index].all? {|lint| lint.instance_variable_get(:@closed)}
          raise LintError, "Body has not been closed"
        end
      end

      def verify_to_path
        ##
        ## If the Body responds to +to_path+, it must return a +String+
        ## path for the local file system whose contents are identical
        ## to that produced by calling +each+; this may be used by the
        ## server as an alternative, possibly more efficient way to
        ## transport the response. The +to_path+ method does not consume
        ## the body.
        if @body.respond_to?(:to_path)
          unless ::File.exist? @body.to_path
            raise LintError, "The file identified by body.to_path does not exist"
          end
        end
      end

      ##
      ## ==== Enumerable Body
      ##
      def each
        ## The Enumerable Body must respond to +each+.
        raise LintError, "Enumerable Body must respond to each" unless @body.respond_to?(:each)

        ## It must only be called once.
        raise LintError, "Response body must only be invoked once (#{@invoked})" unless @invoked.nil?

        ## It must not be called after being closed.
        raise LintError, "Response body is already closed" if @closed

        @invoked = :each

        @body.each do |chunk|
          ## and must only yield String values.
          unless chunk.kind_of? String
            raise LintError, "Body yielded non-string value #{chunk.inspect}"
          end

          ##
          ## The Body itself should not be an instance of String, as this will
          ## break in Ruby 1.9.
          ##
          ## Middleware must not call +each+ directly on the Body.
          ## Instead, middleware can return a new Body that calls +each+ on the
          ## original Body, yielding at least once per iteration.
          if @lint[0] == self
            @env['rack.lint.body_iteration'] += 1
          else
            if (@env['rack.lint.body_iteration'] -= 1) > 0
              raise LintError, "New body must yield at least once per iteration of old body"
            end
          end

          @size += chunk.bytesize
          yield chunk
        end

        verify_content_length(@size)

        verify_to_path
      end

      BODY_METHODS = {to_ary: true, each: true, call: true, to_path: true}

      def to_path
        @body.to_path
      end

      def respond_to?(name, *)
        if BODY_METHODS.key?(name)
          @body.respond_to?(name)
        else
          super
        end
      end

      ##
      ## If the Body responds to +to_ary+, it must return an +Array+ whose
      ## contents are identical to that produced by calling +each+.
      ## Middleware may call +to_ary+ directly on the Body and return a new
      ## Body in its place. In other words, middleware can only process the
      ## Body directly if it responds to +to_ary+. If the Body responds to both
      ## +to_ary+ and +close+, its implementation of +to_ary+ must call
      ## +close+.
      def to_ary
        @body.to_ary.tap do |content|
          unless content == @body.enum_for.to_a
            raise LintError, "#to_ary not identical to contents produced by calling #each"
          end
        end
      ensure
        close
      end

      ##
      ## ==== Streaming Body
      ##
      def call(stream)
        ## The Streaming Body must respond to +call+.
        raise LintError, "Streaming Body must respond to call" unless @body.respond_to?(:call)

        ## It must only be called once.
        raise LintError, "Response body must only be invoked once (#{@invoked})" unless @invoked.nil?

        ## It must not be called after being closed.
        raise LintError, "Response body is already closed" if @closed

        @invoked = :call

        ## It takes a +stream+ argument.
        ##
        ## The +stream+ argument must implement:
        ## <tt>read, write, <<, flush, close, close_read, close_write, closed?</tt>
        ##
        @body.call(StreamWrapper.new(stream))
      end

      class StreamWrapper
        extend Forwardable

        ## The semantics of these IO methods must be a best effort match to
        ## those of a normal Ruby IO or Socket object, using standard arguments
        ## and raising standard exceptions. Servers are encouraged to simply
        ## pass on real IO objects, although it is recognized that this approach
        ## is not directly compatible with HTTP/2.
        REQUIRED_METHODS = [
          :read, :write, :<<, :flush, :close,
          :close_read, :close_write, :closed?
        ]

        def_delegators :@stream, *REQUIRED_METHODS

        def initialize(stream)
          @stream = stream

          REQUIRED_METHODS.each do |method_name|
            raise LintError, "Stream must respond to #{method_name}" unless stream.respond_to?(method_name)
          end
        end
      end

      # :startdoc:
    end
  end
end

##
## == Thanks
## Some parts of this specification are adopted from {PEP 333 – Python Web Server Gateway Interface v1.0}[https://peps.python.org/pep-0333/]
## I'd like to thank everyone involved in that effort.
PK""#[�&�{!{!(gems/rack-3.0.8/lib/rack/query_parser.rbnu�[���# frozen_string_literal: true

require 'uri'

module Rack
  class QueryParser
    DEFAULT_SEP = /[&] */n
    COMMON_SEP = { ";" => /[;] */n, ";," => /[;,] */n, "&" => /[&] */n }

    # ParameterTypeError is the error that is raised when incoming structural
    # parameters (parsed by parse_nested_query) contain conflicting types.
    class ParameterTypeError < TypeError; end

    # InvalidParameterError is the error that is raised when incoming structural
    # parameters (parsed by parse_nested_query) contain invalid format or byte
    # sequence.
    class InvalidParameterError < ArgumentError; end

    # ParamsTooDeepError is the error that is raised when params are recursively
    # nested over the specified limit.
    class ParamsTooDeepError < RangeError; end

    def self.make_default(_key_space_limit=(not_deprecated = true; nil), param_depth_limit)
      unless not_deprecated
        warn("`first argument `key_space limit` is deprecated and no longer has an effect. Please call with only one argument, which will be required in a future version of Rack", uplevel: 1)
      end

      new Params, param_depth_limit
    end

    attr_reader :param_depth_limit

    def initialize(params_class, _key_space_limit=(not_deprecated = true; nil), param_depth_limit)
      unless not_deprecated
        warn("`second argument `key_space limit` is deprecated and no longer has an effect. Please call with only two arguments, which will be required in a future version of Rack", uplevel: 1)
      end

      @params_class = params_class
      @param_depth_limit = param_depth_limit
    end

    # Stolen from Mongrel, with some small modifications:
    # Parses a query string by breaking it up at the '&'.  You can also use this
    # to parse cookies by changing the characters used in the second parameter
    # (which defaults to '&').
    def parse_query(qs, separator = nil, &unescaper)
      unescaper ||= method(:unescape)

      params = make_params

      (qs || '').split(separator ? (COMMON_SEP[separator] || /[#{separator}] */n) : DEFAULT_SEP).each do |p|
        next if p.empty?
        k, v = p.split('=', 2).map!(&unescaper)

        if cur = params[k]
          if cur.class == Array
            params[k] << v
          else
            params[k] = [cur, v]
          end
        else
          params[k] = v
        end
      end

      return params.to_h
    end

    # parse_nested_query expands a query string into structural types. Supported
    # types are Arrays, Hashes and basic value types. It is possible to supply
    # query strings with parameters of conflicting types, in this case a
    # ParameterTypeError is raised. Users are encouraged to return a 400 in this
    # case.
    def parse_nested_query(qs, separator = nil)
      params = make_params

      unless qs.nil? || qs.empty?
        (qs || '').split(separator ? (COMMON_SEP[separator] || /[#{separator}] */n) : DEFAULT_SEP).each do |p|
          k, v = p.split('=', 2).map! { |s| unescape(s) }

          _normalize_params(params, k, v, 0)
        end
      end

      return params.to_h
    rescue ArgumentError => e
      raise InvalidParameterError, e.message, e.backtrace
    end

    # normalize_params recursively expands parameters into structural types. If
    # the structural types represented by two different parameter names are in
    # conflict, a ParameterTypeError is raised.  The depth argument is deprecated
    # and should no longer be used, it is kept for backwards compatibility with
    # earlier versions of rack.
    def normalize_params(params, name, v, _depth=nil)
      _normalize_params(params, name, v, 0)
    end

    private def _normalize_params(params, name, v, depth)
      raise ParamsTooDeepError if depth >= param_depth_limit

      if !name
        # nil name, treat same as empty string (required by tests)
        k = after = ''
      elsif depth == 0
        # Start of parsing, don't treat [] or [ at start of string specially
        if start = name.index('[', 1)
          # Start of parameter nesting, use part before brackets as key
          k = name[0, start]
          after = name[start, name.length]
        else
          # Plain parameter with no nesting
          k = name
          after = ''
        end
      elsif name.start_with?('[]')
        # Array nesting
        k = '[]'
        after = name[2, name.length]
      elsif name.start_with?('[') && (start = name.index(']', 1))
        # Hash nesting, use the part inside brackets as the key
        k = name[1, start-1]
        after = name[start+1, name.length]
      else
        # Probably malformed input, nested but not starting with [
        # treat full name as key for backwards compatibility.
        k = name
        after = ''
      end

      return if k.empty?

      if after == ''
        if k == '[]' && depth != 0
          return [v]
        else
          params[k] = v
        end
      elsif after == "["
        params[name] = v
      elsif after == "[]"
        params[k] ||= []
        raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
        params[k] << v
      elsif after.start_with?('[]')
        # Recognize x[][y] (hash inside array) parameters
        unless after[2] == '[' && after.end_with?(']') && (child_key = after[3, after.length-4]) && !child_key.empty? && !child_key.index('[') && !child_key.index(']')
          # Handle other nested array parameters
          child_key = after[2, after.length]
        end
        params[k] ||= []
        raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array)
        if params_hash_type?(params[k].last) && !params_hash_has_key?(params[k].last, child_key)
          _normalize_params(params[k].last, child_key, v, depth + 1)
        else
          params[k] << _normalize_params(make_params, child_key, v, depth + 1)
        end
      else
        params[k] ||= make_params
        raise ParameterTypeError, "expected Hash (got #{params[k].class.name}) for param `#{k}'" unless params_hash_type?(params[k])
        params[k] = _normalize_params(params[k], after, v, depth + 1)
      end

      params
    end

    def make_params
      @params_class.new
    end

    def new_depth_limit(param_depth_limit)
      self.class.new @params_class, param_depth_limit
    end

    private

    def params_hash_type?(obj)
      obj.kind_of?(@params_class)
    end

    def params_hash_has_key?(hash, key)
      return false if /\[\]/.match?(key)

      key.split(/[\[\]]+/).inject(hash) do |h, part|
        next h if part == ''
        return false unless params_hash_type?(h) && h.key?(part)
        h[part]
      end

      true
    end

    def unescape(string, encoding = Encoding::UTF_8)
      URI.decode_www_form_component(string, encoding)
    end

    class Params
      def initialize
        @size   = 0
        @params = {}
      end

      def [](key)
        @params[key]
      end

      def []=(key, value)
        @params[key] = value
      end

      def key?(key)
        @params.key?(key)
      end

      # Recursively unwraps nested `Params` objects and constructs an object
      # of the same shape, but using the objects' internal representations
      # (Ruby hashes) in place of the objects. The result is a hash consisting
      # purely of Ruby primitives.
      #
      #   Mutation warning!
      #
      #   1. This method mutates the internal representation of the `Params`
      #      objects in order to save object allocations.
      #
      #   2. The value you get back is a reference to the internal hash
      #      representation, not a copy.
      #
      #   3. Because the `Params` object's internal representation is mutable
      #      through the `#[]=` method, it is not thread safe. The result of
      #      getting the hash representation while another thread is adding a
      #      key to it is non-deterministic.
      #
      def to_h
        @params.each do |key, value|
          case value
          when self
            # Handle circular references gracefully.
            @params[key] = @params
          when Params
            @params[key] = value.to_h
          when Array
            value.map! { |v| v.kind_of?(Params) ? v.to_h : v }
          else
            # Ignore anything that is not a `Params` object or
            # a collection that can contain one.
          end
        end
        @params
      end
      alias_method :to_params_hash, :to_h
    end
  end
end
PK""#[:�}=="gems/rack-3.0.8/lib/rack/urlmap.rbnu�[���# frozen_string_literal: true

require 'set'

require_relative 'constants'

module Rack
  # Rack::URLMap takes a hash mapping urls or paths to apps, and
  # dispatches accordingly.  Support for HTTP/1.1 host names exists if
  # the URLs start with <tt>http://</tt> or <tt>https://</tt>.
  #
  # URLMap modifies the SCRIPT_NAME and PATH_INFO such that the part
  # relevant for dispatch is in the SCRIPT_NAME, and the rest in the
  # PATH_INFO.  This should be taken care of when you need to
  # reconstruct the URL in order to create links.
  #
  # URLMap dispatches in such a way that the longest paths are tried
  # first, since they are most specific.

  class URLMap
    def initialize(map = {})
      remap(map)
    end

    def remap(map)
      @known_hosts = Set[]
      @mapping = map.map { |location, app|
        if location =~ %r{\Ahttps?://(.*?)(/.*)}
          host, location = $1, $2
          @known_hosts << host
        else
          host = nil
        end

        unless location[0] == ?/
          raise ArgumentError, "paths need to start with /"
        end

        location = location.chomp('/')
        match = Regexp.new("^#{Regexp.quote(location).gsub('/', '/+')}(.*)", Regexp::NOENCODING)

        [host, location, match, app]
      }.sort_by do |(host, location, _, _)|
        [host ? -host.size : Float::INFINITY, -location.size]
      end
    end

    def call(env)
      path        = env[PATH_INFO]
      script_name = env[SCRIPT_NAME]
      http_host   = env[HTTP_HOST]
      server_name = env[SERVER_NAME]
      server_port = env[SERVER_PORT]

      is_same_server = casecmp?(http_host, server_name) ||
                       casecmp?(http_host, "#{server_name}:#{server_port}")

      is_host_known = @known_hosts.include? http_host

      @mapping.each do |host, location, match, app|
        unless casecmp?(http_host, host) \
            || casecmp?(server_name, host) \
            || (!host && is_same_server) \
            || (!host && !is_host_known) # If we don't have a matching host, default to the first without a specified host
          next
        end

        next unless m = match.match(path.to_s)

        rest = m[1]
        next unless !rest || rest.empty? || rest[0] == ?/

        env[SCRIPT_NAME] = (script_name + location)
        env[PATH_INFO] = rest

        return app.call(env)
      end

      [404, { CONTENT_TYPE => "text/plain", "x-cascade" => "pass" }, ["Not Found: #{path}"]]

    ensure
      env[PATH_INFO]   = path
      env[SCRIPT_NAME] = script_name
    end

    private
    def casecmp?(v1, v2)
      # if both nil, or they're the same string
      return true if v1 == v2

      # if either are nil... (but they're not the same)
      return false if v1.nil?
      return false if v2.nil?

      # otherwise check they're not case-insensitive the same
      v1.casecmp(v2).zero?
    end
  end
end
PK""#[O�i���#gems/rack-3.0.8/lib/rack/headers.rbnu�[���module Rack
  # Rack::Headers is a Hash subclass that downcases all keys.  It's designed
  # to be used by rack applications that don't implement the Rack 3 SPEC
  # (by using non-lowercase response header keys), automatically handling
  # the downcasing of keys.
  class Headers < Hash
    def self.[](*items)
      if items.length % 2 != 0
        if items.length == 1 && items.first.is_a?(Hash)
          new.merge!(items.first)
        else
          raise ArgumentError, "odd number of arguments for Rack::Headers"
        end
      else
        hash = new
        loop do
          break if items.length == 0
          key = items.shift
          value = items.shift
          hash[key] = value
        end
        hash
      end
    end

    def [](key)
      super(downcase_key(key))
    end

    def []=(key, value)
      super(key.downcase.freeze, value)
    end
    alias store []=

    def assoc(key)
      super(downcase_key(key))
    end

    def compare_by_identity
      raise TypeError, "Rack::Headers cannot compare by identity, use regular Hash"
    end

    def delete(key)
      super(downcase_key(key))
    end

    def dig(key, *a)
      super(downcase_key(key), *a)
    end

    def fetch(key, *default, &block)
      key = downcase_key(key)
      super
    end

    def fetch_values(*a)
      super(*a.map!{|key| downcase_key(key)})
    end

    def has_key?(key)
      super(downcase_key(key))
    end
    alias include? has_key?
    alias key? has_key?
    alias member? has_key?

    def invert
      hash = self.class.new
      each{|key, value| hash[value] = key}
      hash
    end

    def merge(hash, &block)
      dup.merge!(hash, &block)
    end

    def reject(&block)
      hash = dup
      hash.reject!(&block)
      hash
    end

    def replace(hash)
      clear
      update(hash)
    end

    def select(&block)
      hash = dup
      hash.select!(&block)
      hash
    end

    def to_proc
      lambda{|x| self[x]}
    end

    def transform_values(&block)
      dup.transform_values!(&block)
    end

    def update(hash, &block)
      hash.each do |key, value|
        self[key] = if block_given? && include?(key)
          block.call(key, self[key], value)
        else
          value
        end
      end
      self
    end
    alias merge! update

    def values_at(*keys)
      keys.map{|key| self[key]}
    end

    # :nocov:
    if RUBY_VERSION >= '2.5'
    # :nocov:
      def slice(*a)
        h = self.class.new
        a.each{|k| h[k] = self[k] if has_key?(k)}
        h
      end

      def transform_keys(&block)
        dup.transform_keys!(&block)
      end

      def transform_keys!
        hash = self.class.new
        each do |k, v|
          hash[yield k] = v
        end
        replace(hash)
      end
    end

    # :nocov:
    if RUBY_VERSION >= '3.0'
    # :nocov:
      def except(*a)
        super(*a.map!{|key| downcase_key(key)})
      end
    end

    private

    def downcase_key(key)
      key.is_a?(String) ? key.downcase : key
    end
  end
end
PK""#[М}��� gems/rack-3.0.8/lib/rack/file.rbnu�[���# frozen_string_literal: true

require_relative 'files'

module Rack
  warn "Rack::File is deprecated and will be removed in Rack 3.1", uplevel: 1

  File = Files
end
PK""#[N4q���(gems/rack-3.0.8/lib/rack/content_type.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

module Rack

  # Sets the content-type header on responses which don't have one.
  #
  # Builder Usage:
  #   use Rack::ContentType, "text/plain"
  #
  # When no content type argument is provided, "text/html" is the
  # default.
  class ContentType
    include Rack::Utils

    def initialize(app, content_type = "text/html")
      @app = app
      @content_type = content_type
    end

    def call(env)
      status, headers, _ = response = @app.call(env)

      unless STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i)
        headers[CONTENT_TYPE] ||= @content_type
      end

      response
    end
  end
end
PK""#[K?��33&gems/rack-3.0.8/lib/rack/body_proxy.rbnu�[���# frozen_string_literal: true

module Rack
  # Proxy for response bodies allowing calling a block when
  # the response body is closed (after the response has been fully
  # sent to the client).
  class BodyProxy
    # Set the response body to wrap, and the block to call when the
    # response has been fully sent.
    def initialize(body, &block)
      @body = body
      @block = block
      @closed = false
    end

    # Return whether the wrapped body responds to the method.
    def respond_to_missing?(method_name, include_all = false)
      super or @body.respond_to?(method_name, include_all)
    end

    # If not already closed, close the wrapped body and
    # then call the block the proxy was initialized with.
    def close
      return if @closed
      @closed = true
      begin
        @body.close if @body.respond_to?(:close)
      ensure
        @block.call
      end
    end

    # Whether the proxy is closed.  The proxy starts as not closed,
    # and becomes closed on the first call to close.
    def closed?
      @closed
    end

    # Delegate missing methods to the wrapped body.
    def method_missing(method_name, *args, &block)
      @body.__send__(method_name, *args, &block)
    end
    # :nocov:
    ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
    # :nocov:
  end
end
PK""#[�i\��"gems/rack-3.0.8/lib/rack/config.rbnu�[���# frozen_string_literal: true

module Rack
  # Rack::Config modifies the environment using the block given during
  # initialization.
  #
  # Example:
  #     use Rack::Config do |env|
  #       env['my-key'] = 'some-value'
  #     end
  class Config
    def initialize(app, &block)
      @app = app
      @block = block
    end

    def call(env)
      @block.call(env)
      @app.call(env)
    end
  end
end
PK""#[�gG��&gems/rack-3.0.8/lib/rack/media_type.rbnu�[���# frozen_string_literal: true

module Rack
  # Rack::MediaType parse media type and parameters out of content_type string

  class MediaType
    SPLIT_PATTERN = %r{\s*[;,]\s*}

    class << self
      # The media type (type/subtype) portion of the CONTENT_TYPE header
      # without any media type parameters. e.g., when CONTENT_TYPE is
      # "text/plain;charset=utf-8", the media-type is "text/plain".
      #
      # For more information on the use of media types in HTTP, see:
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
      def type(content_type)
        return nil unless content_type
        content_type.split(SPLIT_PATTERN, 2).first.tap(&:downcase!)
      end

      # The media type parameters provided in CONTENT_TYPE as a Hash, or
      # an empty Hash if no CONTENT_TYPE or media-type parameters were
      # provided.  e.g., when the CONTENT_TYPE is "text/plain;charset=utf-8",
      # this method responds with the following Hash:
      #   { 'charset' => 'utf-8' }
      def params(content_type)
        return {} if content_type.nil?

        content_type.split(SPLIT_PATTERN)[1..-1].each_with_object({}) do |s, hsh|
          k, v = s.split('=', 2)

          hsh[k.tap(&:downcase!)] = strip_doublequotes(v)
        end
      end

      private

        def strip_doublequotes(str)
          (str.start_with?('"') && str.end_with?('"')) ? str[1..-2] : str
        end
    end
  end
end
PK""#[>�== gems/rack-3.0.8/lib/rack/lock.rbnu�[���# frozen_string_literal: true

require_relative 'body_proxy'

module Rack
  # Rack::Lock locks every request inside a mutex, so that every request
  # will effectively be executed synchronously.
  class Lock
    def initialize(app, mutex = Mutex.new)
      @app, @mutex = app, mutex
    end

    def call(env)
      @mutex.lock
      begin
        response = @app.call(env)
        returned = response << BodyProxy.new(response.pop) { unlock }
      ensure
        unlock unless returned
      end
    end

    private

    def unlock
      @mutex.unlock
    end
  end
end
PK""#[iZ�&&*gems/rack-3.0.8/lib/rack/content_length.rbnu�[���# frozen_string_literal: true

require_relative 'constants'
require_relative 'utils'

module Rack

  # Sets the content-length header on responses that do not specify
  # a content-length or transfer-encoding header.  Note that this
  # does not fix responses that have an invalid content-length
  # header specified.
  class ContentLength
    include Rack::Utils

    def initialize(app)
      @app = app
    end

    def call(env)
      status, headers, body = response = @app.call(env)

      if !STATUS_WITH_NO_ENTITY_BODY.key?(status.to_i) &&
         !headers[CONTENT_LENGTH] &&
         !headers[TRANSFER_ENCODING] &&
         body.respond_to?(:to_ary)

        response[2] = body = body.to_ary
        headers[CONTENT_LENGTH] = body.sum(&:bytesize).to_s
      end

      response
    end
  end
end
PK""#[$����*�*$gems/rack-3.0.8/lib/rack/response.rbnu�[���# frozen_string_literal: true

require 'time'

require_relative 'constants'
require_relative 'utils'
require_relative 'media_type'
require_relative 'headers'

module Rack
  # Rack::Response provides a convenient interface to create a Rack
  # response.
  #
  # It allows setting of headers and cookies, and provides useful
  # defaults (an OK response with empty headers and body).
  #
  # You can use Response#write to iteratively generate your response,
  # but note that this is buffered by Rack::Response until you call
  # +finish+.  +finish+ however can take a block inside which calls to
  # +write+ are synchronous with the Rack response.
  #
  # Your application's +call+ should end returning Response#finish.
  class Response
    def self.[](status, headers, body)
      self.new(body, status, headers)
    end

    CHUNKED = 'chunked'
    STATUS_WITH_NO_ENTITY_BODY = Utils::STATUS_WITH_NO_ENTITY_BODY

    attr_accessor :length, :status, :body
    attr_reader :headers

    # Deprecated, use headers instead.
    def header
      warn 'Rack::Response#header is deprecated and will be removed in Rack 3.1', uplevel: 1

      headers
    end

    # Initialize the response object with the specified +body+, +status+
    # and +headers+.
    #
    # If the +body+ is +nil+, construct an empty response object with internal
    # buffering.
    #
    # If the +body+ responds to +to_str+, assume it's a string-like object and
    # construct a buffered response object containing using that string as the
    # initial contents of the buffer.
    #
    # Otherwise it is expected +body+ conforms to the normal requirements of a
    # Rack response body, typically implementing one of +each+ (enumerable
    # body) or +call+ (streaming body).
    #
    # The +status+ defaults to +200+ which is the "OK" HTTP status code. You
    # can provide any other valid status code.
    #
    # The +headers+ must be a +Hash+ of key-value header pairs which conform to
    # the Rack specification for response headers. The key must be a +String+
    # instance and the value can be either a +String+ or +Array+ instance.
    def initialize(body = nil, status = 200, headers = {})
      @status = status.to_i

      unless headers.is_a?(Hash)
        warn "Providing non-hash headers to Rack::Response is deprecated and will be removed in Rack 3.1", uplevel: 1
      end

      @headers = Headers.new
      # Convert headers input to a plain hash with lowercase keys.
      headers.each do |k, v|
        @headers[k] = v
      end

      @writer = self.method(:append)

      @block = nil

      # Keep track of whether we have expanded the user supplied body.
      if body.nil?
        @body = []
        @buffered = true
        @length = 0
      elsif body.respond_to?(:to_str)
        @body = [body]
        @buffered = true
        @length = body.to_str.bytesize
      else
        @body = body
        @buffered = nil # undetermined as of yet.
        @length = 0
      end

      yield self if block_given?
    end

    def redirect(target, status = 302)
      self.status = status
      self.location = target
    end

    def chunked?
      CHUNKED == get_header(TRANSFER_ENCODING)
    end

    def no_entity_body?
      # The response body is an enumerable body and it is not allowed to have an entity body.
      @body.respond_to?(:each) && STATUS_WITH_NO_ENTITY_BODY[@status]
    end
    
    # Generate a response array consistent with the requirements of the SPEC.
    # @return [Array] a 3-tuple suitable of `[status, headers, body]`
    # which is suitable to be returned from the middleware `#call(env)` method.
    def finish(&block)
      if no_entity_body?
        delete_header CONTENT_TYPE
        delete_header CONTENT_LENGTH
        close
        return [@status, @headers, []]
      else
        if block_given?
          @block = block
          return [@status, @headers, self]
        else
          return [@status, @headers, @body]
        end
      end
    end

    alias to_a finish           # For *response

    def each(&callback)
      @body.each(&callback)
      @buffered = true

      if @block
        @writer = callback
        @block.call(self)
      end
    end

    # Append to body and update content-length.
    #
    # NOTE: Do not mix #write and direct #body access!
    #
    def write(chunk)
      buffered_body!

      @writer.call(chunk.to_s)
    end

    def close
      @body.close if @body.respond_to?(:close)
    end

    def empty?
      @block == nil && @body.empty?
    end

    def has_header?(key)
      raise ArgumentError unless key.is_a?(String)
      @headers.key?(key)
    end
    def get_header(key)
      raise ArgumentError unless key.is_a?(String)
      @headers[key]
    end
    def set_header(key, value)
      raise ArgumentError unless key.is_a?(String)
      @headers[key] = value
    end
    def delete_header(key)
      raise ArgumentError unless key.is_a?(String)
      @headers.delete key
    end

    alias :[] :get_header
    alias :[]= :set_header

    module Helpers
      def invalid?;             status < 100 || status >= 600;        end

      def informational?;       status >= 100 && status < 200;        end
      def successful?;          status >= 200 && status < 300;        end
      def redirection?;         status >= 300 && status < 400;        end
      def client_error?;        status >= 400 && status < 500;        end
      def server_error?;        status >= 500 && status < 600;        end

      def ok?;                  status == 200;                        end
      def created?;             status == 201;                        end
      def accepted?;            status == 202;                        end
      def no_content?;          status == 204;                        end
      def moved_permanently?;   status == 301;                        end
      def bad_request?;         status == 400;                        end
      def unauthorized?;        status == 401;                        end
      def forbidden?;           status == 403;                        end
      def not_found?;           status == 404;                        end
      def method_not_allowed?;  status == 405;                        end
      def not_acceptable?;      status == 406;                        end
      def request_timeout?;     status == 408;                        end
      def precondition_failed?; status == 412;                        end
      def unprocessable?;       status == 422;                        end

      def redirect?;            [301, 302, 303, 307, 308].include? status; end

      def include?(header)
        has_header?(header)
      end

      # Add a header that may have multiple values.
      #
      # Example:
      #   response.add_header 'vary', 'accept-encoding'
      #   response.add_header 'vary', 'cookie'
      #
      #   assert_equal 'accept-encoding,cookie', response.get_header('vary')
      #
      # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
      def add_header(key, value)
        raise ArgumentError unless key.is_a?(String)

        if value.nil?
          return get_header(key)
        end

        value = value.to_s

        if header = get_header(key)
          if header.is_a?(Array)
            header << value
          else
            set_header(key, [header, value])
          end
        else
          set_header(key, value)
        end
      end

      # Get the content type of the response.
      def content_type
        get_header CONTENT_TYPE
      end

      # Set the content type of the response.
      def content_type=(content_type)
        set_header CONTENT_TYPE, content_type
      end

      def media_type
        MediaType.type(content_type)
      end

      def media_type_params
        MediaType.params(content_type)
      end

      def content_length
        cl = get_header CONTENT_LENGTH
        cl ? cl.to_i : cl
      end

      def location
        get_header "location"
      end

      def location=(location)
        set_header "location", location
      end

      def set_cookie(key, value)
        add_header SET_COOKIE, Utils.set_cookie_header(key, value)
      end

      def delete_cookie(key, value = {})
        set_header(SET_COOKIE,
          Utils.delete_set_cookie_header!(
            get_header(SET_COOKIE), key, value
          )
        )
      end

      def set_cookie_header
        get_header SET_COOKIE
      end

      def set_cookie_header=(value)
        set_header SET_COOKIE, value
      end

      def cache_control
        get_header CACHE_CONTROL
      end

      def cache_control=(value)
        set_header CACHE_CONTROL, value
      end

      # Specifies that the content shouldn't be cached. Overrides `cache!` if already called.
      def do_not_cache!
        set_header CACHE_CONTROL, "no-cache, must-revalidate"
        set_header EXPIRES, Time.now.httpdate
      end

      # Specify that the content should be cached.
      # @param duration [Integer] The number of seconds until the cache expires.
      # @option directive [String] The cache control directive, one of "public", "private", "no-cache" or "no-store".
      def cache!(duration = 3600, directive: "public")
        unless headers[CACHE_CONTROL] =~ /no-cache/
          set_header CACHE_CONTROL, "#{directive}, max-age=#{duration}"
          set_header EXPIRES, (Time.now + duration).httpdate
        end
      end

      def etag
        get_header ETAG
      end

      def etag=(value)
        set_header ETAG, value
      end

    protected

      def buffered_body!
        if @buffered.nil?
          if @body.is_a?(Array)
            # The user supplied body was an array:
            @body = @body.compact
            @body.each do |part|
              @length += part.to_s.bytesize
            end
          elsif @body.respond_to?(:each)
            # Turn the user supplied body into a buffered array:
            body = @body
            @body = Array.new

            body.each do |part|
              @writer.call(part.to_s)
            end

            body.close if body.respond_to?(:close)

            @buffered = true
          else
            @buffered = false
          end
        end

        return @buffered
      end

      def append(chunk)
        @body << chunk

        unless chunked?
          @length += chunk.bytesize
          set_header(CONTENT_LENGTH, @length.to_s)
        end

        return chunk
      end
    end

    include Helpers

    class Raw
      include Helpers

      attr_reader :headers
      attr_accessor :status

      def initialize(status, headers)
        @status = status
        @headers = headers
      end

      def has_header?(key)
        headers.key?(key)
      end

      def get_header(key)
        headers[key]
      end

      def set_header(key, value)
        headers[key] = value
      end

      def delete_header(key)
        headers.delete(key)
      end
    end
  end
end
PK""#[?�6/���� gems/rack-3.0.8/lib/rack/mime.rbnu�[���# frozen_string_literal: true

module Rack
  module Mime
    # Returns String with mime type if found, otherwise use +fallback+.
    # +ext+ should be filename extension in the '.ext' format that
    #       File.extname(file) returns.
    # +fallback+ may be any object
    #
    # Also see the documentation for MIME_TYPES
    #
    # Usage:
    #     Rack::Mime.mime_type('.foo')
    #
    # This is a shortcut for:
    #     Rack::Mime::MIME_TYPES.fetch('.foo', 'application/octet-stream')

    def mime_type(ext, fallback = 'application/octet-stream')
      MIME_TYPES.fetch(ext.to_s.downcase, fallback)
    end
    module_function :mime_type

    # Returns true if the given value is a mime match for the given mime match
    # specification, false otherwise.
    #
    #    Rack::Mime.match?('text/html', 'text/*') => true
    #    Rack::Mime.match?('text/plain', '*') => true
    #    Rack::Mime.match?('text/html', 'application/json') => false

    def match?(value, matcher)
      v1, v2 = value.split('/', 2)
      m1, m2 = matcher.split('/', 2)

      (m1 == '*' || v1 == m1) && (m2.nil? || m2 == '*' || m2 == v2)
    end
    module_function :match?

    # List of most common mime-types, selected various sources
    # according to their usefulness in a webserving scope for Ruby
    # users.
    #
    # To amend this list with your local mime.types list you can use:
    #
    #     require 'webrick/httputils'
    #     list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types')
    #     Rack::Mime::MIME_TYPES.merge!(list)
    #
    # N.B. On Ubuntu the mime.types file does not include the leading period, so
    # users may need to modify the data before merging into the hash.

    MIME_TYPES = {
      ".123"       => "application/vnd.lotus-1-2-3",
      ".3dml"      => "text/vnd.in3d.3dml",
      ".3g2"       => "video/3gpp2",
      ".3gp"       => "video/3gpp",
      ".a"         => "application/octet-stream",
      ".acc"       => "application/vnd.americandynamics.acc",
      ".ace"       => "application/x-ace-compressed",
      ".acu"       => "application/vnd.acucobol",
      ".aep"       => "application/vnd.audiograph",
      ".afp"       => "application/vnd.ibm.modcap",
      ".ai"        => "application/postscript",
      ".aif"       => "audio/x-aiff",
      ".aiff"      => "audio/x-aiff",
      ".ami"       => "application/vnd.amiga.ami",
      ".apng"      => "image/apng",
      ".appcache"  => "text/cache-manifest",
      ".apr"       => "application/vnd.lotus-approach",
      ".asc"       => "application/pgp-signature",
      ".asf"       => "video/x-ms-asf",
      ".asm"       => "text/x-asm",
      ".aso"       => "application/vnd.accpac.simply.aso",
      ".asx"       => "video/x-ms-asf",
      ".atc"       => "application/vnd.acucorp",
      ".atom"      => "application/atom+xml",
      ".atomcat"   => "application/atomcat+xml",
      ".atomsvc"   => "application/atomsvc+xml",
      ".atx"       => "application/vnd.antix.game-component",
      ".au"        => "audio/basic",
      ".avi"       => "video/x-msvideo",
      ".avif"      => "image/avif",
      ".bat"       => "application/x-msdownload",
      ".bcpio"     => "application/x-bcpio",
      ".bdm"       => "application/vnd.syncml.dm+wbxml",
      ".bh2"       => "application/vnd.fujitsu.oasysprs",
      ".bin"       => "application/octet-stream",
      ".bmi"       => "application/vnd.bmi",
      ".bmp"       => "image/bmp",
      ".box"       => "application/vnd.previewsystems.box",
      ".btif"      => "image/prs.btif",
      ".bz"        => "application/x-bzip",
      ".bz2"       => "application/x-bzip2",
      ".c"         => "text/x-c",
      ".c4g"       => "application/vnd.clonk.c4group",
      ".cab"       => "application/vnd.ms-cab-compressed",
      ".cc"        => "text/x-c",
      ".ccxml"     => "application/ccxml+xml",
      ".cdbcmsg"   => "application/vnd.contact.cmsg",
      ".cdkey"     => "application/vnd.mediastation.cdkey",
      ".cdx"       => "chemical/x-cdx",
      ".cdxml"     => "application/vnd.chemdraw+xml",
      ".cdy"       => "application/vnd.cinderella",
      ".cer"       => "application/pkix-cert",
      ".cgm"       => "image/cgm",
      ".chat"      => "application/x-chat",
      ".chm"       => "application/vnd.ms-htmlhelp",
      ".chrt"      => "application/vnd.kde.kchart",
      ".cif"       => "chemical/x-cif",
      ".cii"       => "application/vnd.anser-web-certificate-issue-initiation",
      ".cil"       => "application/vnd.ms-artgalry",
      ".cla"       => "application/vnd.claymore",
      ".class"     => "application/octet-stream",
      ".clkk"      => "application/vnd.crick.clicker.keyboard",
      ".clkp"      => "application/vnd.crick.clicker.palette",
      ".clkt"      => "application/vnd.crick.clicker.template",
      ".clkw"      => "application/vnd.crick.clicker.wordbank",
      ".clkx"      => "application/vnd.crick.clicker",
      ".clp"       => "application/x-msclip",
      ".cmc"       => "application/vnd.cosmocaller",
      ".cmdf"      => "chemical/x-cmdf",
      ".cml"       => "chemical/x-cml",
      ".cmp"       => "application/vnd.yellowriver-custom-menu",
      ".cmx"       => "image/x-cmx",
      ".com"       => "application/x-msdownload",
      ".conf"      => "text/plain",
      ".cpio"      => "application/x-cpio",
      ".cpp"       => "text/x-c",
      ".cpt"       => "application/mac-compactpro",
      ".crd"       => "application/x-mscardfile",
      ".crl"       => "application/pkix-crl",
      ".crt"       => "application/x-x509-ca-cert",
      ".csh"       => "application/x-csh",
      ".csml"      => "chemical/x-csml",
      ".csp"       => "application/vnd.commonspace",
      ".css"       => "text/css",
      ".csv"       => "text/csv",
      ".curl"      => "application/vnd.curl",
      ".cww"       => "application/prs.cww",
      ".cxx"       => "text/x-c",
      ".daf"       => "application/vnd.mobius.daf",
      ".davmount"  => "application/davmount+xml",
      ".dcr"       => "application/x-director",
      ".dd2"       => "application/vnd.oma.dd2+xml",
      ".ddd"       => "application/vnd.fujixerox.ddd",
      ".deb"       => "application/x-debian-package",
      ".der"       => "application/x-x509-ca-cert",
      ".dfac"      => "application/vnd.dreamfactory",
      ".diff"      => "text/x-diff",
      ".dis"       => "application/vnd.mobius.dis",
      ".djv"       => "image/vnd.djvu",
      ".djvu"      => "image/vnd.djvu",
      ".dll"       => "application/x-msdownload",
      ".dmg"       => "application/octet-stream",
      ".dna"       => "application/vnd.dna",
      ".doc"       => "application/msword",
      ".docm"      => "application/vnd.ms-word.document.macroEnabled.12",
      ".docx"      => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      ".dot"       => "application/msword",
      ".dotm"      => "application/vnd.ms-word.template.macroEnabled.12",
      ".dotx"      => "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
      ".dp"        => "application/vnd.osgi.dp",
      ".dpg"       => "application/vnd.dpgraph",
      ".dsc"       => "text/prs.lines.tag",
      ".dtd"       => "application/xml-dtd",
      ".dts"       => "audio/vnd.dts",
      ".dtshd"     => "audio/vnd.dts.hd",
      ".dv"        => "video/x-dv",
      ".dvi"       => "application/x-dvi",
      ".dwf"       => "model/vnd.dwf",
      ".dwg"       => "image/vnd.dwg",
      ".dxf"       => "image/vnd.dxf",
      ".dxp"       => "application/vnd.spotfire.dxp",
      ".ear"       => "application/java-archive",
      ".ecelp4800" => "audio/vnd.nuera.ecelp4800",
      ".ecelp7470" => "audio/vnd.nuera.ecelp7470",
      ".ecelp9600" => "audio/vnd.nuera.ecelp9600",
      ".ecma"      => "application/ecmascript",
      ".edm"       => "application/vnd.novadigm.edm",
      ".edx"       => "application/vnd.novadigm.edx",
      ".efif"      => "application/vnd.picsel",
      ".ei6"       => "application/vnd.pg.osasli",
      ".eml"       => "message/rfc822",
      ".eol"       => "audio/vnd.digital-winds",
      ".eot"       => "application/vnd.ms-fontobject",
      ".eps"       => "application/postscript",
      ".es3"       => "application/vnd.eszigno3+xml",
      ".esf"       => "application/vnd.epson.esf",
      ".etx"       => "text/x-setext",
      ".exe"       => "application/x-msdownload",
      ".ext"       => "application/vnd.novadigm.ext",
      ".ez"        => "application/andrew-inset",
      ".ez2"       => "application/vnd.ezpix-album",
      ".ez3"       => "application/vnd.ezpix-package",
      ".f"         => "text/x-fortran",
      ".f77"       => "text/x-fortran",
      ".f90"       => "text/x-fortran",
      ".fbs"       => "image/vnd.fastbidsheet",
      ".fdf"       => "application/vnd.fdf",
      ".fe_launch" => "application/vnd.denovo.fcselayout-link",
      ".fg5"       => "application/vnd.fujitsu.oasysgp",
      ".fli"       => "video/x-fli",
      ".flif"      => "image/flif",
      ".flo"       => "application/vnd.micrografx.flo",
      ".flv"       => "video/x-flv",
      ".flw"       => "application/vnd.kde.kivio",
      ".flx"       => "text/vnd.fmi.flexstor",
      ".fly"       => "text/vnd.fly",
      ".fm"        => "application/vnd.framemaker",
      ".fnc"       => "application/vnd.frogans.fnc",
      ".for"       => "text/x-fortran",
      ".fpx"       => "image/vnd.fpx",
      ".fsc"       => "application/vnd.fsc.weblaunch",
      ".fst"       => "image/vnd.fst",
      ".ftc"       => "application/vnd.fluxtime.clip",
      ".fti"       => "application/vnd.anser-web-funds-transfer-initiation",
      ".fvt"       => "video/vnd.fvt",
      ".fzs"       => "application/vnd.fuzzysheet",
      ".g3"        => "image/g3fax",
      ".gac"       => "application/vnd.groove-account",
      ".gdl"       => "model/vnd.gdl",
      ".gem"       => "application/octet-stream",
      ".gemspec"   => "text/x-script.ruby",
      ".ghf"       => "application/vnd.groove-help",
      ".gif"       => "image/gif",
      ".gim"       => "application/vnd.groove-identity-message",
      ".gmx"       => "application/vnd.gmx",
      ".gph"       => "application/vnd.flographit",
      ".gqf"       => "application/vnd.grafeq",
      ".gram"      => "application/srgs",
      ".grv"       => "application/vnd.groove-injector",
      ".grxml"     => "application/srgs+xml",
      ".gtar"      => "application/x-gtar",
      ".gtm"       => "application/vnd.groove-tool-message",
      ".gtw"       => "model/vnd.gtw",
      ".gv"        => "text/vnd.graphviz",
      ".gz"        => "application/x-gzip",
      ".h"         => "text/x-c",
      ".h261"      => "video/h261",
      ".h263"      => "video/h263",
      ".h264"      => "video/h264",
      ".hbci"      => "application/vnd.hbci",
      ".hdf"       => "application/x-hdf",
      ".heic"      => "image/heic",
      ".heics"     => "image/heic-sequence",
      ".heif"      => "image/heif",
      ".heifs"     => "image/heif-sequence",
      ".hh"        => "text/x-c",
      ".hlp"       => "application/winhlp",
      ".hpgl"      => "application/vnd.hp-hpgl",
      ".hpid"      => "application/vnd.hp-hpid",
      ".hps"       => "application/vnd.hp-hps",
      ".hqx"       => "application/mac-binhex40",
      ".htc"       => "text/x-component",
      ".htke"      => "application/vnd.kenameaapp",
      ".htm"       => "text/html",
      ".html"      => "text/html",
      ".hvd"       => "application/vnd.yamaha.hv-dic",
      ".hvp"       => "application/vnd.yamaha.hv-voice",
      ".hvs"       => "application/vnd.yamaha.hv-script",
      ".icc"       => "application/vnd.iccprofile",
      ".ice"       => "x-conference/x-cooltalk",
      ".ico"       => "image/vnd.microsoft.icon",
      ".ics"       => "text/calendar",
      ".ief"       => "image/ief",
      ".ifb"       => "text/calendar",
      ".ifm"       => "application/vnd.shana.informed.formdata",
      ".igl"       => "application/vnd.igloader",
      ".igs"       => "model/iges",
      ".igx"       => "application/vnd.micrografx.igx",
      ".iif"       => "application/vnd.shana.informed.interchange",
      ".imp"       => "application/vnd.accpac.simply.imp",
      ".ims"       => "application/vnd.ms-ims",
      ".ipk"       => "application/vnd.shana.informed.package",
      ".irm"       => "application/vnd.ibm.rights-management",
      ".irp"       => "application/vnd.irepository.package+xml",
      ".iso"       => "application/octet-stream",
      ".itp"       => "application/vnd.shana.informed.formtemplate",
      ".ivp"       => "application/vnd.immervision-ivp",
      ".ivu"       => "application/vnd.immervision-ivu",
      ".jad"       => "text/vnd.sun.j2me.app-descriptor",
      ".jam"       => "application/vnd.jam",
      ".jar"       => "application/java-archive",
      ".java"      => "text/x-java-source",
      ".jisp"      => "application/vnd.jisp",
      ".jlt"       => "application/vnd.hp-jlyt",
      ".jnlp"      => "application/x-java-jnlp-file",
      ".joda"      => "application/vnd.joost.joda-archive",
      ".jp2"       => "image/jp2",
      ".jpeg"      => "image/jpeg",
      ".jpg"       => "image/jpeg",
      ".jpgv"      => "video/jpeg",
      ".jpm"       => "video/jpm",
      ".js"        => "application/javascript",
      ".json"      => "application/json",
      ".karbon"    => "application/vnd.kde.karbon",
      ".kfo"       => "application/vnd.kde.kformula",
      ".kia"       => "application/vnd.kidspiration",
      ".kml"       => "application/vnd.google-earth.kml+xml",
      ".kmz"       => "application/vnd.google-earth.kmz",
      ".kne"       => "application/vnd.kinar",
      ".kon"       => "application/vnd.kde.kontour",
      ".kpr"       => "application/vnd.kde.kpresenter",
      ".ksp"       => "application/vnd.kde.kspread",
      ".ktz"       => "application/vnd.kahootz",
      ".kwd"       => "application/vnd.kde.kword",
      ".latex"     => "application/x-latex",
      ".lbd"       => "application/vnd.llamagraphics.life-balance.desktop",
      ".lbe"       => "application/vnd.llamagraphics.life-balance.exchange+xml",
      ".les"       => "application/vnd.hhe.lesson-player",
      ".link66"    => "application/vnd.route66.link66+xml",
      ".log"       => "text/plain",
      ".lostxml"   => "application/lost+xml",
      ".lrm"       => "application/vnd.ms-lrm",
      ".ltf"       => "application/vnd.frogans.ltf",
      ".lvp"       => "audio/vnd.lucent.voice",
      ".lwp"       => "application/vnd.lotus-wordpro",
      ".m3u"       => "audio/x-mpegurl",
      ".m3u8"      => "application/x-mpegurl",
      ".m4a"       => "audio/mp4a-latm",
      ".m4v"       => "video/mp4",
      ".ma"        => "application/mathematica",
      ".mag"       => "application/vnd.ecowin.chart",
      ".man"       => "text/troff",
      ".manifest"  => "text/cache-manifest",
      ".mathml"    => "application/mathml+xml",
      ".mbk"       => "application/vnd.mobius.mbk",
      ".mbox"      => "application/mbox",
      ".mc1"       => "application/vnd.medcalcdata",
      ".mcd"       => "application/vnd.mcd",
      ".mdb"       => "application/x-msaccess",
      ".mdi"       => "image/vnd.ms-modi",
      ".mdoc"      => "text/troff",
      ".me"        => "text/troff",
      ".mfm"       => "application/vnd.mfmp",
      ".mgz"       => "application/vnd.proteus.magazine",
      ".mid"       => "audio/midi",
      ".midi"      => "audio/midi",
      ".mif"       => "application/vnd.mif",
      ".mime"      => "message/rfc822",
      ".mj2"       => "video/mj2",
      ".mlp"       => "application/vnd.dolby.mlp",
      ".mmd"       => "application/vnd.chipnuts.karaoke-mmd",
      ".mmf"       => "application/vnd.smaf",
      ".mml"       => "application/mathml+xml",
      ".mmr"       => "image/vnd.fujixerox.edmics-mmr",
      ".mng"       => "video/x-mng",
      ".mny"       => "application/x-msmoney",
      ".mov"       => "video/quicktime",
      ".movie"     => "video/x-sgi-movie",
      ".mp3"       => "audio/mpeg",
      ".mp4"       => "video/mp4",
      ".mp4a"      => "audio/mp4",
      ".mp4s"      => "application/mp4",
      ".mp4v"      => "video/mp4",
      ".mpc"       => "application/vnd.mophun.certificate",
      ".mpd"       => "application/dash+xml",
      ".mpeg"      => "video/mpeg",
      ".mpg"       => "video/mpeg",
      ".mpga"      => "audio/mpeg",
      ".mpkg"      => "application/vnd.apple.installer+xml",
      ".mpm"       => "application/vnd.blueice.multipass",
      ".mpn"       => "application/vnd.mophun.application",
      ".mpp"       => "application/vnd.ms-project",
      ".mpy"       => "application/vnd.ibm.minipay",
      ".mqy"       => "application/vnd.mobius.mqy",
      ".mrc"       => "application/marc",
      ".ms"        => "text/troff",
      ".mscml"     => "application/mediaservercontrol+xml",
      ".mseq"      => "application/vnd.mseq",
      ".msf"       => "application/vnd.epson.msf",
      ".msh"       => "model/mesh",
      ".msi"       => "application/x-msdownload",
      ".msl"       => "application/vnd.mobius.msl",
      ".msty"      => "application/vnd.muvee.style",
      ".mts"       => "model/vnd.mts",
      ".mus"       => "application/vnd.musician",
      ".mvb"       => "application/x-msmediaview",
      ".mwf"       => "application/vnd.mfer",
      ".mxf"       => "application/mxf",
      ".mxl"       => "application/vnd.recordare.musicxml",
      ".mxml"      => "application/xv+xml",
      ".mxs"       => "application/vnd.triscape.mxs",
      ".mxu"       => "video/vnd.mpegurl",
      ".n"         => "application/vnd.nokia.n-gage.symbian.install",
      ".nc"        => "application/x-netcdf",
      ".ngdat"     => "application/vnd.nokia.n-gage.data",
      ".nlu"       => "application/vnd.neurolanguage.nlu",
      ".nml"       => "application/vnd.enliven",
      ".nnd"       => "application/vnd.noblenet-directory",
      ".nns"       => "application/vnd.noblenet-sealer",
      ".nnw"       => "application/vnd.noblenet-web",
      ".npx"       => "image/vnd.net-fpx",
      ".nsf"       => "application/vnd.lotus-notes",
      ".oa2"       => "application/vnd.fujitsu.oasys2",
      ".oa3"       => "application/vnd.fujitsu.oasys3",
      ".oas"       => "application/vnd.fujitsu.oasys",
      ".obd"       => "application/x-msbinder",
      ".oda"       => "application/oda",
      ".odc"       => "application/vnd.oasis.opendocument.chart",
      ".odf"       => "application/vnd.oasis.opendocument.formula",
      ".odg"       => "application/vnd.oasis.opendocument.graphics",
      ".odi"       => "application/vnd.oasis.opendocument.image",
      ".odp"       => "application/vnd.oasis.opendocument.presentation",
      ".ods"       => "application/vnd.oasis.opendocument.spreadsheet",
      ".odt"       => "application/vnd.oasis.opendocument.text",
      ".oga"       => "audio/ogg",
      ".ogg"       => "application/ogg",
      ".ogv"       => "video/ogg",
      ".ogx"       => "application/ogg",
      ".org"       => "application/vnd.lotus-organizer",
      ".otc"       => "application/vnd.oasis.opendocument.chart-template",
      ".otf"       => "application/vnd.oasis.opendocument.formula-template",
      ".otg"       => "application/vnd.oasis.opendocument.graphics-template",
      ".oth"       => "application/vnd.oasis.opendocument.text-web",
      ".oti"       => "application/vnd.oasis.opendocument.image-template",
      ".otm"       => "application/vnd.oasis.opendocument.text-master",
      ".ots"       => "application/vnd.oasis.opendocument.spreadsheet-template",
      ".ott"       => "application/vnd.oasis.opendocument.text-template",
      ".oxt"       => "application/vnd.openofficeorg.extension",
      ".p"         => "text/x-pascal",
      ".p10"       => "application/pkcs10",
      ".p12"       => "application/x-pkcs12",
      ".p7b"       => "application/x-pkcs7-certificates",
      ".p7m"       => "application/pkcs7-mime",
      ".p7r"       => "application/x-pkcs7-certreqresp",
      ".p7s"       => "application/pkcs7-signature",
      ".pas"       => "text/x-pascal",
      ".pbd"       => "application/vnd.powerbuilder6",
      ".pbm"       => "image/x-portable-bitmap",
      ".pcl"       => "application/vnd.hp-pcl",
      ".pclxl"     => "application/vnd.hp-pclxl",
      ".pcx"       => "image/x-pcx",
      ".pdb"       => "chemical/x-pdb",
      ".pdf"       => "application/pdf",
      ".pem"       => "application/x-x509-ca-cert",
      ".pfr"       => "application/font-tdpfr",
      ".pgm"       => "image/x-portable-graymap",
      ".pgn"       => "application/x-chess-pgn",
      ".pgp"       => "application/pgp-encrypted",
      ".pic"       => "image/x-pict",
      ".pict"      => "image/pict",
      ".pkg"       => "application/octet-stream",
      ".pki"       => "application/pkixcmp",
      ".pkipath"   => "application/pkix-pkipath",
      ".pl"        => "text/x-script.perl",
      ".plb"       => "application/vnd.3gpp.pic-bw-large",
      ".plc"       => "application/vnd.mobius.plc",
      ".plf"       => "application/vnd.pocketlearn",
      ".pls"       => "application/pls+xml",
      ".pm"        => "text/x-script.perl-module",
      ".pml"       => "application/vnd.ctc-posml",
      ".png"       => "image/png",
      ".pnm"       => "image/x-portable-anymap",
      ".pntg"      => "image/x-macpaint",
      ".portpkg"   => "application/vnd.macports.portpkg",
      ".pot"       => "application/vnd.ms-powerpoint",
      ".potm"      => "application/vnd.ms-powerpoint.template.macroEnabled.12",
      ".potx"      => "application/vnd.openxmlformats-officedocument.presentationml.template",
      ".ppa"       => "application/vnd.ms-powerpoint",
      ".ppam"      => "application/vnd.ms-powerpoint.addin.macroEnabled.12",
      ".ppd"       => "application/vnd.cups-ppd",
      ".ppm"       => "image/x-portable-pixmap",
      ".pps"       => "application/vnd.ms-powerpoint",
      ".ppsm"      => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
      ".ppsx"      => "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
      ".ppt"       => "application/vnd.ms-powerpoint",
      ".pptm"      => "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
      ".pptx"      => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
      ".prc"       => "application/vnd.palm",
      ".pre"       => "application/vnd.lotus-freelance",
      ".prf"       => "application/pics-rules",
      ".ps"        => "application/postscript",
      ".psb"       => "application/vnd.3gpp.pic-bw-small",
      ".psd"       => "image/vnd.adobe.photoshop",
      ".ptid"      => "application/vnd.pvi.ptid1",
      ".pub"       => "application/x-mspublisher",
      ".pvb"       => "application/vnd.3gpp.pic-bw-var",
      ".pwn"       => "application/vnd.3m.post-it-notes",
      ".py"        => "text/x-script.python",
      ".pya"       => "audio/vnd.ms-playready.media.pya",
      ".pyv"       => "video/vnd.ms-playready.media.pyv",
      ".qam"       => "application/vnd.epson.quickanime",
      ".qbo"       => "application/vnd.intu.qbo",
      ".qfx"       => "application/vnd.intu.qfx",
      ".qps"       => "application/vnd.publishare-delta-tree",
      ".qt"        => "video/quicktime",
      ".qtif"      => "image/x-quicktime",
      ".qxd"       => "application/vnd.quark.quarkxpress",
      ".ra"        => "audio/x-pn-realaudio",
      ".rake"      => "text/x-script.ruby",
      ".ram"       => "audio/x-pn-realaudio",
      ".rar"       => "application/x-rar-compressed",
      ".ras"       => "image/x-cmu-raster",
      ".rb"        => "text/x-script.ruby",
      ".rcprofile" => "application/vnd.ipunplugged.rcprofile",
      ".rdf"       => "application/rdf+xml",
      ".rdz"       => "application/vnd.data-vision.rdz",
      ".rep"       => "application/vnd.businessobjects",
      ".rgb"       => "image/x-rgb",
      ".rif"       => "application/reginfo+xml",
      ".rl"        => "application/resource-lists+xml",
      ".rlc"       => "image/vnd.fujixerox.edmics-rlc",
      ".rld"       => "application/resource-lists-diff+xml",
      ".rm"        => "application/vnd.rn-realmedia",
      ".rmp"       => "audio/x-pn-realaudio-plugin",
      ".rms"       => "application/vnd.jcp.javame.midlet-rms",
      ".rnc"       => "application/relax-ng-compact-syntax",
      ".roff"      => "text/troff",
      ".rpm"       => "application/x-redhat-package-manager",
      ".rpss"      => "application/vnd.nokia.radio-presets",
      ".rpst"      => "application/vnd.nokia.radio-preset",
      ".rq"        => "application/sparql-query",
      ".rs"        => "application/rls-services+xml",
      ".rsd"       => "application/rsd+xml",
      ".rss"       => "application/rss+xml",
      ".rtf"       => "application/rtf",
      ".rtx"       => "text/richtext",
      ".ru"        => "text/x-script.ruby",
      ".s"         => "text/x-asm",
      ".saf"       => "application/vnd.yamaha.smaf-audio",
      ".sbml"      => "application/sbml+xml",
      ".sc"        => "application/vnd.ibm.secure-container",
      ".scd"       => "application/x-msschedule",
      ".scm"       => "application/vnd.lotus-screencam",
      ".scq"       => "application/scvp-cv-request",
      ".scs"       => "application/scvp-cv-response",
      ".sdkm"      => "application/vnd.solent.sdkm+xml",
      ".sdp"       => "application/sdp",
      ".see"       => "application/vnd.seemail",
      ".sema"      => "application/vnd.sema",
      ".semd"      => "application/vnd.semd",
      ".semf"      => "application/vnd.semf",
      ".setpay"    => "application/set-payment-initiation",
      ".setreg"    => "application/set-registration-initiation",
      ".sfd"       => "application/vnd.hydrostatix.sof-data",
      ".sfs"       => "application/vnd.spotfire.sfs",
      ".sgm"       => "text/sgml",
      ".sgml"      => "text/sgml",
      ".sh"        => "application/x-sh",
      ".shar"      => "application/x-shar",
      ".shf"       => "application/shf+xml",
      ".sig"       => "application/pgp-signature",
      ".sit"       => "application/x-stuffit",
      ".sitx"      => "application/x-stuffitx",
      ".skp"       => "application/vnd.koan",
      ".slt"       => "application/vnd.epson.salt",
      ".smi"       => "application/smil+xml",
      ".snd"       => "audio/basic",
      ".so"        => "application/octet-stream",
      ".spf"       => "application/vnd.yamaha.smaf-phrase",
      ".spl"       => "application/x-futuresplash",
      ".spot"      => "text/vnd.in3d.spot",
      ".spp"       => "application/scvp-vp-response",
      ".spq"       => "application/scvp-vp-request",
      ".src"       => "application/x-wais-source",
      ".srt"       => "text/srt",
      ".srx"       => "application/sparql-results+xml",
      ".sse"       => "application/vnd.kodak-descriptor",
      ".ssf"       => "application/vnd.epson.ssf",
      ".ssml"      => "application/ssml+xml",
      ".stf"       => "application/vnd.wt.stf",
      ".stk"       => "application/hyperstudio",
      ".str"       => "application/vnd.pg.format",
      ".sus"       => "application/vnd.sus-calendar",
      ".sv4cpio"   => "application/x-sv4cpio",
      ".sv4crc"    => "application/x-sv4crc",
      ".svd"       => "application/vnd.svd",
      ".svg"       => "image/svg+xml",
      ".svgz"      => "image/svg+xml",
      ".swf"       => "application/x-shockwave-flash",
      ".swi"       => "application/vnd.arastra.swi",
      ".t"         => "text/troff",
      ".tao"       => "application/vnd.tao.intent-module-archive",
      ".tar"       => "application/x-tar",
      ".tbz"       => "application/x-bzip-compressed-tar",
      ".tcap"      => "application/vnd.3gpp2.tcap",
      ".tcl"       => "application/x-tcl",
      ".tex"       => "application/x-tex",
      ".texi"      => "application/x-texinfo",
      ".texinfo"   => "application/x-texinfo",
      ".text"      => "text/plain",
      ".tif"       => "image/tiff",
      ".tiff"      => "image/tiff",
      ".tmo"       => "application/vnd.tmobile-livetv",
      ".torrent"   => "application/x-bittorrent",
      ".tpl"       => "application/vnd.groove-tool-template",
      ".tpt"       => "application/vnd.trid.tpt",
      ".tr"        => "text/troff",
      ".tra"       => "application/vnd.trueapp",
      ".trm"       => "application/x-msterminal",
      ".ts"        => "video/mp2t",
      ".tsv"       => "text/tab-separated-values",
      ".ttf"       => "application/octet-stream",
      ".twd"       => "application/vnd.simtech-mindmapper",
      ".txd"       => "application/vnd.genomatix.tuxedo",
      ".txf"       => "application/vnd.mobius.txf",
      ".txt"       => "text/plain",
      ".ufd"       => "application/vnd.ufdl",
      ".umj"       => "application/vnd.umajin",
      ".unityweb"  => "application/vnd.unity",
      ".uoml"      => "application/vnd.uoml+xml",
      ".uri"       => "text/uri-list",
      ".ustar"     => "application/x-ustar",
      ".utz"       => "application/vnd.uiq.theme",
      ".uu"        => "text/x-uuencode",
      ".vcd"       => "application/x-cdlink",
      ".vcf"       => "text/x-vcard",
      ".vcg"       => "application/vnd.groove-vcard",
      ".vcs"       => "text/x-vcalendar",
      ".vcx"       => "application/vnd.vcx",
      ".vis"       => "application/vnd.visionary",
      ".viv"       => "video/vnd.vivo",
      ".vrml"      => "model/vrml",
      ".vsd"       => "application/vnd.visio",
      ".vsf"       => "application/vnd.vsf",
      ".vtt"       => "text/vtt",
      ".vtu"       => "model/vnd.vtu",
      ".vxml"      => "application/voicexml+xml",
      ".war"       => "application/java-archive",
      ".wasm"      => "application/wasm",
      ".wav"       => "audio/x-wav",
      ".wax"       => "audio/x-ms-wax",
      ".wbmp"      => "image/vnd.wap.wbmp",
      ".wbs"       => "application/vnd.criticaltools.wbs+xml",
      ".wbxml"     => "application/vnd.wap.wbxml",
      ".webm"      => "video/webm",
      ".webp"      => "image/webp",
      ".wm"        => "video/x-ms-wm",
      ".wma"       => "audio/x-ms-wma",
      ".wmd"       => "application/x-ms-wmd",
      ".wmf"       => "application/x-msmetafile",
      ".wml"       => "text/vnd.wap.wml",
      ".wmlc"      => "application/vnd.wap.wmlc",
      ".wmls"      => "text/vnd.wap.wmlscript",
      ".wmlsc"     => "application/vnd.wap.wmlscriptc",
      ".wmv"       => "video/x-ms-wmv",
      ".wmx"       => "video/x-ms-wmx",
      ".wmz"       => "application/x-ms-wmz",
      ".woff"      => "application/font-woff",
      ".woff2"     => "application/font-woff2",
      ".wpd"       => "application/vnd.wordperfect",
      ".wpl"       => "application/vnd.ms-wpl",
      ".wps"       => "application/vnd.ms-works",
      ".wqd"       => "application/vnd.wqd",
      ".wri"       => "application/x-mswrite",
      ".wrl"       => "model/vrml",
      ".wsdl"      => "application/wsdl+xml",
      ".wspolicy"  => "application/wspolicy+xml",
      ".wtb"       => "application/vnd.webturbo",
      ".wvx"       => "video/x-ms-wvx",
      ".x3d"       => "application/vnd.hzn-3d-crossword",
      ".xar"       => "application/vnd.xara",
      ".xbd"       => "application/vnd.fujixerox.docuworks.binder",
      ".xbm"       => "image/x-xbitmap",
      ".xdm"       => "application/vnd.syncml.dm+xml",
      ".xdp"       => "application/vnd.adobe.xdp+xml",
      ".xdw"       => "application/vnd.fujixerox.docuworks",
      ".xenc"      => "application/xenc+xml",
      ".xer"       => "application/patch-ops-error+xml",
      ".xfdf"      => "application/vnd.adobe.xfdf",
      ".xfdl"      => "application/vnd.xfdl",
      ".xhtml"     => "application/xhtml+xml",
      ".xif"       => "image/vnd.xiff",
      ".xla"       => "application/vnd.ms-excel",
      ".xlam"      => "application/vnd.ms-excel.addin.macroEnabled.12",
      ".xls"       => "application/vnd.ms-excel",
      ".xlsb"      => "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
      ".xlsx"      => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
      ".xlsm"      => "application/vnd.ms-excel.sheet.macroEnabled.12",
      ".xlt"       => "application/vnd.ms-excel",
      ".xltx"      => "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
      ".xml"       => "application/xml",
      ".xo"        => "application/vnd.olpc-sugar",
      ".xop"       => "application/xop+xml",
      ".xpm"       => "image/x-xpixmap",
      ".xpr"       => "application/vnd.is-xpr",
      ".xps"       => "application/vnd.ms-xpsdocument",
      ".xpw"       => "application/vnd.intercon.formnet",
      ".xsl"       => "application/xml",
      ".xslt"      => "application/xslt+xml",
      ".xsm"       => "application/vnd.syncml+xml",
      ".xspf"      => "application/xspf+xml",
      ".xul"       => "application/vnd.mozilla.xul+xml",
      ".xwd"       => "image/x-xwindowdump",
      ".xyz"       => "chemical/x-xyz",
      ".yaml"      => "text/yaml",
      ".yml"       => "text/yaml",
      ".zaz"       => "application/vnd.zzazz.deck+xml",
      ".zip"       => "application/zip",
      ".zmm"       => "application/vnd.handheld-entertainment+xml",
    }
  end
end
PK""#[���==gems/rack-3.0.8/SPEC.rdocnu�[���This specification aims to formalize the Rack protocol. You
can (and should) use Rack::Lint to enforce it.

When you develop middleware, be sure to add a Lint before and
after to catch all mistakes.

= Rack applications

A Rack application is a Ruby object (not a class) that
responds to +call+.
It takes exactly one argument, the *environment*
and returns a non-frozen Array of exactly three values:
The *status*,
the *headers*,
and the *body*.

== The Environment

The environment must be an unfrozen instance of Hash that includes
CGI-like headers. The Rack application is free to modify the
environment.

The environment is required to include these variables
(adopted from {PEP 333}[https://peps.python.org/pep-0333/]), except when they'd be empty, but see
below.
<tt>REQUEST_METHOD</tt>:: The HTTP request method, such as
                          "GET" or "POST". This cannot ever
                          be an empty string, and so is
                          always required.
<tt>SCRIPT_NAME</tt>:: The initial portion of the request
                       URL's "path" that corresponds to the
                       application object, so that the
                       application knows its virtual
                       "location". This may be an empty
                       string, if the application corresponds
                       to the "root" of the server.
<tt>PATH_INFO</tt>:: The remainder of the request URL's
                     "path", designating the virtual
                     "location" of the request's target
                     within the application. This may be an
                     empty string, if the request URL targets
                     the application root and does not have a
                     trailing slash. This value may be
                     percent-encoded when originating from
                     a URL.
<tt>QUERY_STRING</tt>:: The portion of the request URL that
                        follows the <tt>?</tt>, if any. May be
                        empty, but is always required!
<tt>SERVER_NAME</tt>:: When combined with <tt>SCRIPT_NAME</tt> and
                       <tt>PATH_INFO</tt>, these variables can be
                       used to complete the URL. Note, however,
                       that <tt>HTTP_HOST</tt>, if present,
                       should be used in preference to
                       <tt>SERVER_NAME</tt> for reconstructing
                       the request URL.
                       <tt>SERVER_NAME</tt> can never be an empty
                       string, and so is always required.
<tt>SERVER_PORT</tt>:: An optional +Integer+ which is the port the
                       server is running on. Should be specified if
                       the server is running on a non-standard port.
<tt>SERVER_PROTOCOL</tt>:: A string representing the HTTP version used
                           for the request.
<tt>HTTP_</tt> Variables:: Variables corresponding to the
                           client-supplied HTTP request
                           headers (i.e., variables whose
                           names begin with <tt>HTTP_</tt>). The
                           presence or absence of these
                           variables should correspond with
                           the presence or absence of the
                           appropriate HTTP header in the
                           request. See
                           {RFC3875 section 4.1.18}[https://tools.ietf.org/html/rfc3875#section-4.1.18]
                           for specific behavior.
In addition to this, the Rack environment must include these
Rack-specific variables:
<tt>rack.url_scheme</tt>:: +http+ or +https+, depending on the
                           request URL.
<tt>rack.input</tt>:: See below, the input stream.
<tt>rack.errors</tt>:: See below, the error stream.
<tt>rack.hijack?</tt>:: See below, if present and true, indicates
                        that the server supports partial hijacking.
<tt>rack.hijack</tt>:: See below, if present, an object responding
                       to +call+ that is used to perform a full
                       hijack.
Additional environment specifications have approved to
standardized middleware APIs. None of these are required to
be implemented by the server.
<tt>rack.session</tt>:: A hash-like interface for storing
                        request session data.
                        The store must implement:
                        store(key, value)         (aliased as []=);
                        fetch(key, default = nil) (aliased as []);
                        delete(key);
                        clear;
                        to_hash (returning unfrozen Hash instance);
<tt>rack.logger</tt>:: A common object interface for logging messages.
                       The object must implement:
                        info(message, &block)
                        debug(message, &block)
                        warn(message, &block)
                        error(message, &block)
                        fatal(message, &block)
<tt>rack.multipart.buffer_size</tt>:: An Integer hint to the multipart parser as to what chunk size to use for reads and writes.
<tt>rack.multipart.tempfile_factory</tt>:: An object responding to #call with two arguments, the filename and content_type given for the multipart form field, and returning an IO-like object that responds to #<< and optionally #rewind. This factory will be used to instantiate the tempfile for each multipart form file upload field, rather than the default class of Tempfile.
The server or the application can store their own data in the
environment, too.  The keys must contain at least one dot,
and should be prefixed uniquely.  The prefix <tt>rack.</tt>
is reserved for use with the Rack core distribution and other
accepted specifications and must not be used otherwise.

The <tt>SERVER_PORT</tt> must be an Integer if set.
The <tt>SERVER_NAME</tt> must be a valid authority as defined by RFC7540.
The <tt>HTTP_HOST</tt> must be a valid authority as defined by RFC7540.
The <tt>SERVER_PROTOCOL</tt> must match the regexp <tt>HTTP/\d(\.\d)?</tt>.
If the <tt>HTTP_VERSION</tt> is present, it must equal the <tt>SERVER_PROTOCOL</tt>.
The environment must not contain the keys
<tt>HTTP_CONTENT_TYPE</tt> or <tt>HTTP_CONTENT_LENGTH</tt>
(use the versions without <tt>HTTP_</tt>).
The CGI keys (named without a period) must have String values.
If the string values for CGI keys contain non-ASCII characters,
they should use ASCII-8BIT encoding.
There are the following restrictions:
* <tt>rack.url_scheme</tt> must either be +http+ or +https+.
* There must be a valid input stream in <tt>rack.input</tt>.
* There must be a valid error stream in <tt>rack.errors</tt>.
* There may be a valid hijack callback in <tt>rack.hijack</tt>
* The <tt>REQUEST_METHOD</tt> must be a valid token.
* The <tt>SCRIPT_NAME</tt>, if non-empty, must start with <tt>/</tt>
* The <tt>PATH_INFO</tt>, if non-empty, must start with <tt>/</tt>
* The <tt>CONTENT_LENGTH</tt>, if given, must consist of digits only.
* One of <tt>SCRIPT_NAME</tt> or <tt>PATH_INFO</tt> must be
  set. <tt>PATH_INFO</tt> should be <tt>/</tt> if
  <tt>SCRIPT_NAME</tt> is empty.
  <tt>SCRIPT_NAME</tt> never should be <tt>/</tt>, but instead be empty.
<tt>rack.response_finished</tt>:: An array of callables run by the server after the response has been
processed. This would typically be invoked after sending the response to the client, but it could also be
invoked if an error occurs while generating the response or sending the response; in that case, the error
argument will be a subclass of +Exception+.
The callables are invoked with +env, status, headers, error+ arguments and should not raise any
exceptions. They should be invoked in reverse order of registration.

=== The Input Stream

The input stream is an IO-like object which contains the raw HTTP
POST data.
When applicable, its external encoding must be "ASCII-8BIT" and it
must be opened in binary mode, for Ruby 1.9 compatibility.
The input stream must respond to +gets+, +each+, and +read+.
* +gets+ must be called without arguments and return a string,
  or +nil+ on EOF.
* +read+ behaves like IO#read.
  Its signature is <tt>read([length, [buffer]])</tt>.

  If given, +length+ must be a non-negative Integer (>= 0) or +nil+,
  and +buffer+ must be a String and may not be nil.

  If +length+ is given and not nil, then this method reads at most
  +length+ bytes from the input stream.

  If +length+ is not given or nil, then this method reads
  all data until EOF.

  When EOF is reached, this method returns nil if +length+ is given
  and not nil, or "" if +length+ is not given or is nil.

  If +buffer+ is given, then the read data will be placed
  into +buffer+ instead of a newly created String object.
* +each+ must be called without arguments and only yield Strings.
* +close+ can be called on the input stream to indicate that the
any remaining input is not needed.

=== The Error Stream

The error stream must respond to +puts+, +write+ and +flush+.
* +puts+ must be called with a single argument that responds to +to_s+.
* +write+ must be called with a single argument that is a String.
* +flush+ must be called without arguments and must be called
  in order to make the error appear for sure.
* +close+ must never be called on the error stream.

=== Hijacking

The hijacking interfaces provides a means for an application to take
control of the HTTP connection. There are two distinct hijack
interfaces: full hijacking where the application takes over the raw
connection, and partial hijacking where the application takes over
just the response body stream. In both cases, the application is
responsible for closing the hijacked stream.

Full hijacking only works with HTTP/1. Partial hijacking is functionally
equivalent to streaming bodies, and is still optionally supported for
backwards compatibility with older Rack versions.

==== Full Hijack

Full hijack is used to completely take over an HTTP/1 connection. It
occurs before any headers are written and causes the request to
ignores any response generated by the application.

It is intended to be used when applications need access to raw HTTP/1
connection.

If +rack.hijack+ is present in +env+, it must respond to +call+
and return an +IO+ instance which can be used to read and write
to the underlying connection using HTTP/1 semantics and
formatting.

==== Partial Hijack

Partial hijack is used for bi-directional streaming of the request and
response body. It occurs after the status and headers are written by
the server and causes the server to ignore the Body of the response.

It is intended to be used when applications need bi-directional
streaming.

If +rack.hijack?+ is present in +env+ and truthy,
an application may set the special response header +rack.hijack+
to an object that responds to +call+,
accepting a +stream+ argument.

After the response status and headers have been sent, this hijack
callback will be invoked with a +stream+ argument which follows the
same interface as outlined in "Streaming Body". Servers must
ignore the +body+ part of the response tuple when the
+rack.hijack+ response header is present. Using an empty +Array+
instance is recommended.

The special response header +rack.hijack+ must only be set
if the request +env+ has a truthy +rack.hijack?+.
== The Response

=== The Status

This is an HTTP status. It must be an Integer greater than or equal to
100.

=== The Headers

The headers must be a unfrozen Hash.
The header keys must be Strings.
Special headers starting "rack." are for communicating with the
server, and must not be sent back to the client.
The header must not contain a +Status+ key.
Header keys must conform to RFC7230 token specification, i.e. cannot
contain non-printable ASCII, DQUOTE or "(),/:;<=>?@[\]{}".
Header keys must not contain uppercase ASCII characters (A-Z).
Header values must be either a String instance,
or an Array of String instances,
such that each String instance must not contain characters below 037.

=== The content-type

There must not be a <tt>content-type</tt> header key when the +Status+ is 1xx,
204, or 304.

=== The content-length

There must not be a <tt>content-length</tt> header key when the
+Status+ is 1xx, 204, or 304.

=== The Body

The Body is typically an +Array+ of +String+ instances, an enumerable
that yields +String+ instances, a +Proc+ instance, or a File-like
object.

The Body must respond to +each+ or +call+. It may optionally respond
to +to_path+ or +to_ary+. A Body that responds to +each+ is considered
to be an Enumerable Body. A Body that responds to +call+ is considered
to be a Streaming Body.

A Body that responds to both +each+ and +call+ must be treated as an
Enumerable Body, not a Streaming Body. If it responds to +each+, you
must call +each+ and not +call+. If the Body doesn't respond to
+each+, then you can assume it responds to +call+.

The Body must either be consumed or returned. The Body is consumed by
optionally calling either +each+ or +call+.
Then, if the Body responds to +close+, it must be called to release
any resources associated with the generation of the body.
In other words, +close+ must always be called at least once; typically
after the web server has sent the response to the client, but also in
cases where the Rack application makes internal/virtual requests and
discards the response.


After calling +close+, the Body is considered closed and should not
be consumed again.
If the original Body is replaced by a new Body, the new Body must
also consume the original Body by calling +close+ if possible.

If the Body responds to +to_path+, it must return a +String+
path for the local file system whose contents are identical
to that produced by calling +each+; this may be used by the
server as an alternative, possibly more efficient way to
transport the response. The +to_path+ method does not consume
the body.

==== Enumerable Body

The Enumerable Body must respond to +each+.
It must only be called once.
It must not be called after being closed.
and must only yield String values.

The Body itself should not be an instance of String, as this will
break in Ruby 1.9.

Middleware must not call +each+ directly on the Body.
Instead, middleware can return a new Body that calls +each+ on the
original Body, yielding at least once per iteration.

If the Body responds to +to_ary+, it must return an +Array+ whose
contents are identical to that produced by calling +each+.
Middleware may call +to_ary+ directly on the Body and return a new
Body in its place. In other words, middleware can only process the
Body directly if it responds to +to_ary+. If the Body responds to both
+to_ary+ and +close+, its implementation of +to_ary+ must call
+close+.

==== Streaming Body

The Streaming Body must respond to +call+.
It must only be called once.
It must not be called after being closed.
It takes a +stream+ argument.

The +stream+ argument must implement:
<tt>read, write, <<, flush, close, close_read, close_write, closed?</tt>

The semantics of these IO methods must be a best effort match to
those of a normal Ruby IO or Socket object, using standard arguments
and raising standard exceptions. Servers are encouraged to simply
pass on real IO objects, although it is recognized that this approach
is not directly compatible with HTTP/2.

== Thanks
Some parts of this specification are adopted from {PEP 333 – Python Web Server Gateway Interface v1.0}[https://peps.python.org/pep-0333/]
I'd like to thank everyone involved in that effort.
PK""#[��_**gems/rack-3.0.8/CONTRIBUTING.mdnu�[���# Contributing to Rack

Rack is work of [hundreds of
contributors](https://github.com/rack/rack/graphs/contributors). You're
encouraged to submit [pull requests](https://github.com/rack/rack/pulls) and
[propose features and discuss issues](https://github.com/rack/rack/issues).

## Fork the Project

Fork the [project on GitHub](https://github.com/rack/rack) and check out your
copy.

```
git clone https://github.com/(your-github-username)/rack.git
cd rack
git remote add upstream https://github.com/rack/rack.git
```

## Create a Topic Branch

Make sure your fork is up-to-date and create a topic branch for your feature or
bug fix.

```
git checkout main
git pull upstream main
git checkout -b my-feature-branch
```

## Bundle Install and Quick Test

Ensure that you can build the project and run quick tests.

```
bundle install --without extra
bundle exec rake test
```

## Running All Tests

Install all dependencies.

```
bundle install
```

Run all tests.

```
rake test
```

## Write Tests

Try to write a test that reproduces the problem you're trying to fix or
describes a feature that you want to build.

We definitely appreciate pull requests that highlight or reproduce a problem,
even without a fix.

## Write Code

Implement your feature or bug fix.

Make sure that all tests pass:

```
bundle exec rake test
```

## Write Documentation

Document any external behavior in the [README](README.md).

## Update Changelog

Add a line to [CHANGELOG](CHANGELOG.md).

## Commit Changes

Make sure git knows your name and email address:

```
git config --global user.name "Your Name"
git config --global user.email "contributor@example.com"
```

Writing good commit logs is important. A commit log should describe what changed
and why.

```
git add ...
git commit
```

## Push

```
git push origin my-feature-branch
```

## Make a Pull Request

Go to your fork of rack on GitHub and select your feature branch. Click the
'Pull Request' button and fill out the form. Pull requests are usually
reviewed within a few days.

## Rebase

If you've been working on a change for a while, rebase with upstream/main.

```
git fetch upstream
git rebase upstream/main
git push origin my-feature-branch -f
```

## Make Required Changes

Amend your previous commit and force push the changes.

```
git commit --amend
git push origin my-feature-branch -f
```

## Check on Your Pull Request

Go back to your pull request after a few minutes and see whether it passed
tests with GitHub Actions. Everything should look green, otherwise fix issues and
amend your commit as described above.

## Be Patient

It's likely that your change will not be merged and that the nitpicky
maintainers will ask you to do more, or fix seemingly benign problems. Hang in
there!

## Thank You

Please do know that we really appreciate and value your time and work. We love
you, really.
PK""#[�,���,gems/bigdecimal-3.1.1/lib/bigdecimal/math.rbnu�[���# frozen_string_literal: false
require 'bigdecimal'

#
#--
# Contents:
#   sqrt(x, prec)
#   sin (x, prec)
#   cos (x, prec)
#   atan(x, prec)  Note: |x|<1, x=0.9999 may not converge.
#   PI  (prec)
#   E   (prec) == exp(1.0,prec)
#
# where:
#   x    ... BigDecimal number to be computed.
#            |x| must be small enough to get convergence.
#   prec ... Number of digits to be obtained.
#++
#
# Provides mathematical functions.
#
# Example:
#
#   require "bigdecimal/math"
#
#   include BigMath
#
#   a = BigDecimal((PI(100)/2).to_s)
#   puts sin(a,100) # => 0.99999999999999999999......e0
#
module BigMath
  module_function

  # call-seq:
  #   sqrt(decimal, numeric) -> BigDecimal
  #
  # Computes the square root of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  #   BigMath.sqrt(BigDecimal('2'), 16).to_s
  #   #=> "0.1414213562373095048801688724e1"
  #
  def sqrt(x, prec)
    x.sqrt(prec)
  end

  # call-seq:
  #   sin(decimal, numeric) -> BigDecimal
  #
  # Computes the sine of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  # If +decimal+ is Infinity or NaN, returns NaN.
  #
  #   BigMath.sin(BigMath.PI(5)/4, 5).to_s
  #   #=> "0.70710678118654752440082036563292800375e0"
  #
  def sin(x, prec)
    raise ArgumentError, "Zero or negative precision for sin" if prec <= 0
    return BigDecimal("NaN") if x.infinite? || x.nan?
    n    = prec + BigDecimal.double_fig
    one  = BigDecimal("1")
    two  = BigDecimal("2")
    x = -x if neg = x < 0
    if x > (twopi = two * BigMath.PI(prec))
      if x > 30
        x %= twopi
      else
        x -= twopi while x > twopi
      end
    end
    x1   = x
    x2   = x.mult(x,n)
    sign = 1
    y    = x
    d    = y
    i    = one
    z    = one
    while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      sign = -sign
      x1  = x2.mult(x1,n)
      i  += two
      z  *= (i-one) * i
      d   = sign * x1.div(z,m)
      y  += d
    end
    neg ? -y : y
  end

  # call-seq:
  #   cos(decimal, numeric) -> BigDecimal
  #
  # Computes the cosine of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  # If +decimal+ is Infinity or NaN, returns NaN.
  #
  #   BigMath.cos(BigMath.PI(4), 16).to_s
  #   #=> "-0.999999999999999999999999999999856613163740061349e0"
  #
  def cos(x, prec)
    raise ArgumentError, "Zero or negative precision for cos" if prec <= 0
    return BigDecimal("NaN") if x.infinite? || x.nan?
    n    = prec + BigDecimal.double_fig
    one  = BigDecimal("1")
    two  = BigDecimal("2")
    x = -x if x < 0
    if x > (twopi = two * BigMath.PI(prec))
      if x > 30
        x %= twopi
      else
        x -= twopi while x > twopi
      end
    end
    x1 = one
    x2 = x.mult(x,n)
    sign = 1
    y = one
    d = y
    i = BigDecimal("0")
    z = one
    while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      sign = -sign
      x1  = x2.mult(x1,n)
      i  += two
      z  *= (i-one) * i
      d   = sign * x1.div(z,m)
      y  += d
    end
    y
  end

  # call-seq:
  #   atan(decimal, numeric) -> BigDecimal
  #
  # Computes the arctangent of +decimal+ to the specified number of digits of
  # precision, +numeric+.
  #
  # If +decimal+ is NaN, returns NaN.
  #
  #   BigMath.atan(BigDecimal('-1'), 16).to_s
  #   #=> "-0.785398163397448309615660845819878471907514682065e0"
  #
  def atan(x, prec)
    raise ArgumentError, "Zero or negative precision for atan" if prec <= 0
    return BigDecimal("NaN") if x.nan?
    pi = PI(prec)
    x = -x if neg = x < 0
    return pi.div(neg ? -2 : 2, prec) if x.infinite?
    return pi / (neg ? -4 : 4) if x.round(prec) == 1
    x = BigDecimal("1").div(x, prec) if inv = x > 1
    x = (-1 + sqrt(1 + x**2, prec))/x if dbl = x > 0.5
    n    = prec + BigDecimal.double_fig
    y = x
    d = y
    t = x
    r = BigDecimal("3")
    x2 = x.mult(x,n)
    while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      t = -t.mult(x2,n)
      d = t.div(r,m)
      y += d
      r += 2
    end
    y *= 2 if dbl
    y = pi / 2 - y if inv
    y = -y if neg
    y
  end

  # call-seq:
  #   PI(numeric) -> BigDecimal
  #
  # Computes the value of pi to the specified number of digits of precision,
  # +numeric+.
  #
  #   BigMath.PI(10).to_s
  #   #=> "0.3141592653589793238462643388813853786957412e1"
  #
  def PI(prec)
    raise ArgumentError, "Zero or negative precision for PI" if prec <= 0
    n      = prec + BigDecimal.double_fig
    zero   = BigDecimal("0")
    one    = BigDecimal("1")
    two    = BigDecimal("2")

    m25    = BigDecimal("-0.04")
    m57121 = BigDecimal("-57121")

    pi     = zero

    d = one
    k = one
    t = BigDecimal("-80")
    while d.nonzero? && ((m = n - (pi.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      t   = t*m25
      d   = t.div(k,m)
      k   = k+two
      pi  = pi + d
    end

    d = one
    k = one
    t = BigDecimal("956")
    while d.nonzero? && ((m = n - (pi.exponent - d.exponent).abs) > 0)
      m = BigDecimal.double_fig if m < BigDecimal.double_fig
      t   = t.div(m57121,n)
      d   = t.div(k,m)
      pi  = pi + d
      k   = k+two
    end
    pi
  end

  # call-seq:
  #   E(numeric) -> BigDecimal
  #
  # Computes e (the base of natural logarithms) to the specified number of
  # digits of precision, +numeric+.
  #
  #   BigMath.E(10).to_s
  #   #=> "0.271828182845904523536028752390026306410273e1"
  #
  def E(prec)
    raise ArgumentError, "Zero or negative precision for E" if prec <= 0
    BigMath.exp(1, prec)
  end
end
PK""#[;<]]0gems/bigdecimal-3.1.1/lib/bigdecimal/jacobian.rbnu�[���# frozen_string_literal: false

require 'bigdecimal'

# require 'bigdecimal/jacobian'
#
# Provides methods to compute the Jacobian matrix of a set of equations at a
# point x. In the methods below:
#
# f is an Object which is used to compute the Jacobian matrix of the equations.
# It must provide the following methods:
#
# f.values(x):: returns the values of all functions at x
#
# f.zero:: returns 0.0
# f.one:: returns 1.0
# f.two:: returns 2.0
# f.ten:: returns 10.0
#
# f.eps:: returns the convergence criterion (epsilon value) used to determine whether two values are considered equal. If |a-b| < epsilon, the two values are considered equal.
#
# x is the point at which to compute the Jacobian.
#
# fx is f.values(x).
#
module Jacobian
  module_function

  # Determines the equality of two numbers by comparing to zero, or using the epsilon value
  def isEqual(a,b,zero=0.0,e=1.0e-8)
    aa = a.abs
    bb = b.abs
    if aa == zero &&  bb == zero then
      true
    else
      if ((a-b)/(aa+bb)).abs < e then
        true
      else
        false
      end
    end
  end


  # Computes the derivative of f[i] at x[i].
  # fx is the value of f at x.
  def dfdxi(f,fx,x,i)
    nRetry = 0
    n = x.size
    xSave = x[i]
    ok = 0
    ratio = f.ten*f.ten*f.ten
    dx = x[i].abs/ratio
    dx = fx[i].abs/ratio if isEqual(dx,f.zero,f.zero,f.eps)
    dx = f.one/f.ten     if isEqual(dx,f.zero,f.zero,f.eps)
    until ok>0 do
      deriv = []
      nRetry += 1
      if nRetry > 100
        raise "Singular Jacobian matrix. No change at x[" + i.to_s + "]"
      end
      dx = dx*f.two
      x[i] += dx
      fxNew = f.values(x)
      for j in 0...n do
        if !isEqual(fxNew[j],fx[j],f.zero,f.eps) then
          ok += 1
          deriv <<= (fxNew[j]-fx[j])/dx
        else
          deriv <<= f.zero
        end
      end
      x[i] = xSave
    end
    deriv
  end

  # Computes the Jacobian of f at x. fx is the value of f at x.
  def jacobian(f,fx,x)
    n = x.size
    dfdx = Array.new(n*n)
    for i in 0...n do
      df = dfdxi(f,fx,x,i)
      for j in 0...n do
        dfdx[j*n+i] = df[j]
      end
    end
    dfdx
  end
end
PK""#[��_���,gems/bigdecimal-3.1.1/lib/bigdecimal/util.rbnu�[���# frozen_string_literal: false
#
#--
# bigdecimal/util extends various native classes to provide the #to_d method,
# and provides BigDecimal#to_d and BigDecimal#to_digits.
#++

require 'bigdecimal'

class Integer < Numeric
  # call-seq:
  #     int.to_d  -> bigdecimal
  #
  # Returns the value of +int+ as a BigDecimal.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     42.to_d   # => 0.42e2
  #
  # See also BigDecimal::new.
  #
  def to_d
    BigDecimal(self)
  end
end


class Float < Numeric
  # call-seq:
  #     float.to_d             -> bigdecimal
  #     float.to_d(precision)  -> bigdecimal
  #
  # Returns the value of +float+ as a BigDecimal.
  # The +precision+ parameter is used to determine the number of
  # significant digits for the result (the default is Float::DIG).
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     0.5.to_d         # => 0.5e0
  #     1.234.to_d(2)    # => 0.12e1
  #
  # See also BigDecimal::new.
  #
  def to_d(precision=0)
    BigDecimal(self, precision)
  end
end


class String
  # call-seq:
  #     str.to_d  -> bigdecimal
  #
  # Returns the result of interpreting leading characters in +str+
  # as a BigDecimal.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     "0.5".to_d             # => 0.5e0
  #     "123.45e1".to_d        # => 0.12345e4
  #     "45.67 degrees".to_d   # => 0.4567e2
  #
  # See also BigDecimal::new.
  #
  def to_d
    BigDecimal.interpret_loosely(self)
  end
end


class BigDecimal < Numeric
  # call-seq:
  #     a.to_digits -> string
  #
  # Converts a BigDecimal to a String of the form "nnnnnn.mmm".
  # This method is deprecated; use BigDecimal#to_s("F") instead.
  #
  #     require 'bigdecimal/util'
  #
  #     d = BigDecimal("3.14")
  #     d.to_digits                  # => "3.14"
  #
  def to_digits
    if self.nan? || self.infinite? || self.zero?
      self.to_s
    else
      i       = self.to_i.to_s
      _,f,_,z = self.frac.split
      i + "." + ("0"*(-z)) + f
    end
  end

  # call-seq:
  #     a.to_d -> bigdecimal
  #
  # Returns self.
  #
  #     require 'bigdecimal/util'
  #
  #     d = BigDecimal("3.14")
  #     d.to_d                       # => 0.314e1
  #
  def to_d
    self
  end
end


class Rational < Numeric
  # call-seq:
  #     rat.to_d(precision)  -> bigdecimal
  #
  # Returns the value as a BigDecimal.
  #
  # The required +precision+ parameter is used to determine the number of
  # significant digits for the result.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     Rational(22, 7).to_d(3)   # => 0.314e1
  #
  # See also BigDecimal::new.
  #
  def to_d(precision)
    BigDecimal(self, precision)
  end
end


class Complex < Numeric
  # call-seq:
  #     cmp.to_d             -> bigdecimal
  #     cmp.to_d(precision)  -> bigdecimal
  #
  # Returns the value as a BigDecimal.
  #
  # The +precision+ parameter is required for a rational complex number.
  # This parameter is used to determine the number of significant digits
  # for the result.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     Complex(0.1234567, 0).to_d(4)   # => 0.1235e0
  #     Complex(Rational(22, 7), 0).to_d(3)   # => 0.314e1
  #
  # See also BigDecimal::new.
  #
  def to_d(*args)
    BigDecimal(self) unless self.imag.zero? # to raise eerror

    if args.length == 0
      case self.real
      when Rational
        BigDecimal(self.real) # to raise error
      end
    end
    self.real.to_d(*args)
  end
end


class NilClass
  # call-seq:
  #     nil.to_d -> bigdecimal
  #
  # Returns nil represented as a BigDecimal.
  #
  #     require 'bigdecimal'
  #     require 'bigdecimal/util'
  #
  #     nil.to_d   # => 0.0
  #
  def to_d
    BigDecimal(0)
  end
end
PK""#[ь��.gems/bigdecimal-3.1.1/lib/bigdecimal/ludcmp.rbnu�[���# frozen_string_literal: false
require 'bigdecimal'

#
# Solves a*x = b for x, using LU decomposition.
#
module LUSolve
  module_function

  # Performs LU decomposition of the n by n matrix a.
  def ludecomp(a,n,zero=0,one=1)
    prec = BigDecimal.limit(nil)
    ps     = []
    scales = []
    for i in 0...n do  # pick up largest(abs. val.) element in each row.
      ps <<= i
      nrmrow  = zero
      ixn = i*n
      for j in 0...n do
        biggst = a[ixn+j].abs
        nrmrow = biggst if biggst>nrmrow
      end
      if nrmrow>zero then
        scales <<= one.div(nrmrow,prec)
      else
        raise "Singular matrix"
      end
    end
    n1          = n - 1
    for k in 0...n1 do # Gaussian elimination with partial pivoting.
      biggst  = zero;
      for i in k...n do
        size = a[ps[i]*n+k].abs*scales[ps[i]]
        if size>biggst then
          biggst = size
          pividx  = i
        end
      end
      raise "Singular matrix" if biggst<=zero
      if pividx!=k then
        j = ps[k]
        ps[k] = ps[pividx]
        ps[pividx] = j
      end
      pivot   = a[ps[k]*n+k]
      for i in (k+1)...n do
        psin = ps[i]*n
        a[psin+k] = mult = a[psin+k].div(pivot,prec)
        if mult!=zero then
          pskn = ps[k]*n
          for j in (k+1)...n do
            a[psin+j] -= mult.mult(a[pskn+j],prec)
          end
        end
      end
    end
    raise "Singular matrix" if a[ps[n1]*n+n1] == zero
    ps
  end

  # Solves a*x = b for x, using LU decomposition.
  #
  # a is a matrix, b is a constant vector, x is the solution vector.
  #
  # ps is the pivot, a vector which indicates the permutation of rows performed
  # during LU decomposition.
  def lusolve(a,b,ps,zero=0.0)
    prec = BigDecimal.limit(nil)
    n = ps.size
    x = []
    for i in 0...n do
      dot = zero
      psin = ps[i]*n
      for j in 0...i do
        dot = a[psin+j].mult(x[j],prec) + dot
      end
      x <<= b[ps[i]] - dot
    end
    (n-1).downto(0) do |i|
      dot = zero
      psin = ps[i]*n
      for j in (i+1)...n do
        dot = a[psin+j].mult(x[j],prec) + dot
      end
      x[i]  = (x[i]-dot).div(a[psin+i],prec)
    end
    x
  end
end
PK""#[h"A�ZZ.gems/bigdecimal-3.1.1/lib/bigdecimal/newton.rbnu�[���# frozen_string_literal: false
require "bigdecimal/ludcmp"
require "bigdecimal/jacobian"

#
# newton.rb
#
# Solves the nonlinear algebraic equation system f = 0 by Newton's method.
# This program is not dependent on BigDecimal.
#
# To call:
#    n = nlsolve(f,x)
#  where n is the number of iterations required,
#        x is the initial value vector
#        f is an Object which is used to compute the values of the equations to be solved.
# It must provide the following methods:
#
# f.values(x):: returns the values of all functions at x
#
# f.zero:: returns 0.0
# f.one:: returns 1.0
# f.two:: returns 2.0
# f.ten:: returns 10.0
#
# f.eps:: returns the convergence criterion (epsilon value) used to determine whether two values are considered equal. If |a-b| < epsilon, the two values are considered equal.
#
# On exit, x is the solution vector.
#
module Newton
  include LUSolve
  include Jacobian
  module_function

  def norm(fv,zero=0.0) # :nodoc:
    s = zero
    n = fv.size
    for i in 0...n do
      s += fv[i]*fv[i]
    end
    s
  end

  # See also Newton
  def nlsolve(f,x)
    nRetry = 0
    n = x.size

    f0 = f.values(x)
    zero = f.zero
    one  = f.one
    two  = f.two
    p5 = one/two
    d  = norm(f0,zero)
    minfact = f.ten*f.ten*f.ten
    minfact = one/minfact
    e = f.eps
    while d >= e do
      nRetry += 1
      # Not yet converged. => Compute Jacobian matrix
      dfdx = jacobian(f,f0,x)
      # Solve dfdx*dx = -f0 to estimate dx
      dx = lusolve(dfdx,f0,ludecomp(dfdx,n,zero,one),zero)
      fact = two
      xs = x.dup
      begin
        fact *= p5
        if fact < minfact then
          raise "Failed to reduce function values."
        end
        for i in 0...n do
          x[i] = xs[i] - dx[i]*fact
        end
        f0 = f.values(x)
        dn = norm(f0,zero)
      end while(dn>=d)
      d = dn
    end
    nRetry
  end
end
PK""#[�H�k��gems/rake-13.0.6/exe/rakenuȯ��#!/opt/alt/ruby31/bin/ruby

#--
# Copyright (c) 2003, 2004, 2005, 2006, 2007  Jim Weirich
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#++

require "rake"

Rake.application.run
PK""#[�
i��gems/rake-13.0.6/History.rdocnu�[���=== 13.0.6

* Additional fix for #389
  Pull request #390 by hsbt

=== 13.0.5

* Fixed the regression of #388
  Pull request #389 by hsbt

=== 13.0.4

* Fix rake test loader swallowing useful error information.
  Pull request #367 by deivid-rodriguez
* Add -C/--directory option the same as GNU make.
  Pull request #376 by nobu

=== 13.0.3

* Fix breaking change of execution order on TestTask.
  Pull request #368 by ysakasin

=== 13.0.2

==== Enhancements

* Fix tests to work with current FileUtils
  Pull Request #358 by jeremyevans
* Simplify default rake test loader
  Pull Request #357 by deivid-rodriguez
* Update rdoc
  Pull Request #366 by bahasalien
* Update broken links to rake articles from Avdi in README
  Pull Request #360 by svl7

=== 13.0.1

==== Bug fixes

* Fixed bug: Reenabled task raises previous exception on second invokation 
  Pull Request #271 by thorsteneckel
* Fix an incorrectly resolved arg pattern
  Pull Request #327 by mjbellantoni

=== 13.0.0

==== Enhancements

* Follows recent changes on keyword arguments in ruby 2.7.
  Pull Request #326 by nobu
* Make `PackageTask` be able to omit parent directory while packing files 
  Pull Request #310 by tonytonyjan
* Add order only dependency
  Pull Request #269 by take-cheeze

==== Compatibility changes

* Drop old ruby versions(< 2.2)

=== 12.3.3

==== Bug fixes

* Use the application's name in error message if a task is not found.
  Pull Request #303 by tmatilai

==== Enhancements:

* Use File.open explicitly.

=== 12.3.2

==== Bug fixes

* Fixed test fails caused by 2.6 warnings.
  Pull Request #297 by hsbt

==== Enhancements:

* Rdoc improvements.
  Pull Request #293 by colby-swandale
* Improve multitask performance.
  Pull Request #273 by jsm
* Add alias `prereqs`.
  Pull Request #268 by take-cheeze

=== 12.3.1

==== Bug fixes

* Support did_you_mean >= v1.2.0 which has a breaking change on formatters.
  Pull request #262 by FUJI Goro.

==== Enhancements:

* Don't run task if it depends on already invoked but failed task.
  Pull request #252 by Gonzalo Rodriguez.
* Make space trimming consistent for all task arguments.
  Pull request #259 by Gonzalo Rodriguez.
* Removes duplicated inclusion of Rake::DSL in tests.
  Pull request #254 by Gonzalo Rodriguez.
* Re-raise a LoadError that didn't come from require in the test loader.
  Pull request #250 by Dylan Thacker-Smith.

=== 12.3.0

==== Compatibility Changes

* Bump `required_ruby_version` to Ruby 2.0.0. Rake has already
  removed support for Ruby 1.9.x.

==== Enhancements:

* Support `test-bundled-gems` task on ruby core.

=== 12.2.1

==== Bug fixes

* Fixed to break Capistrano::Application on capistrano3.

=== 12.2.0

==== Enhancements:

* Make rake easier to use as a library
  Pull request #211 by @drbrain
* Fix quadratic performance in FileTask#out_of_date?
  Pull request #224 by @doudou
* Clarify output when printing nested exception traces
  Pull request #232 by @urbanautomaton

==== Bug fixes

* Account for a file that match 2 or more patterns.
  Pull request #231 by @styd

=== 12.1.0

==== Enhancements:

* Added did_you_mean feature for invalid rake task.
  Pull request #221 by @xtina-starr
* Enabled to dependency chained by extensions. Pull request #39 by Petr Skocik.
* Make all of string literals to frozen objects on Ruby 2.4 or later.

==== Bug fixes

* Typo fixes in rakefile.rdoc. Pull request #180 by Yuta Kurotaki.
* Fix unexpected behavior of file task with dryrun option.
  Pull request #183 by @aycabta.
* Make LoadError from running tests more obvious. Pull request #195
  by Eric Hodel.
* Fix unexpected TypeError with hash style option. Pull request #202
  by Kuniaki IGARASHI.

=== 12.0.0

==== Compatibility Changes

* Removed arguments on clear #157 by Jesse Bowes
* Removed `rake/contrib` packages. These are extracted to `rake-contrib` gem.
* Removed deprecated method named `last\_comment`.

==== Enhancements:

* Re-use trace option on `cleanup` task. #164 by Brian Henderson
* Actions adore keyword arguments #174 by Josh Cheek
* Rake::TaskArguments#key? alias of #has_key? #175 by Paul Annesley

=== 11.3.0 / 2016-09-20

==== Enhancements:

* Remove to reference `Fixnum` constant. Pull request #160 by nobu

=== 11.2.2 / 2016-06-12

==== Bug fixes

* Fix unexpected behavior with multiple dependencies on Rake::TestTask

=== 11.2.1 / 2016-06-12

==== Bug fixes

* Fix regression of dependencies handling on Rake::TestTask. Report #139

=== 11.2.0 / 2016-06-11

==== Bug fixes

* Fix unexpected cut-out behavior on task description using triple dots
  and exclamation. Report #106 from Stephan Kämper and Pull request #134 by Lee
* Fix empty argument assignment with `with_defaults` option. Pull request #135
  by bakunyo
* Ignore to use `hwprefs` on Darwin platform. Use sysctl now. Report #128

==== Enhancements

* Spawn options for sh Pull equest #138 by Eric Hodel.
* Allow to specify dependencies(prerequisites) for Rake::TestTask
  Pull request #117 by Tim Maslyuchenko
* Use Bundler task instead of hoe for gem release.
* Remove explicitly load to rubygems for Ruby 1.8.
* Unify to declare `Rake::VERSION`.
* Support xz format for PackageTask.

=== 11.1.2 / 2016-03-28

==== Bug fixes

* Remove `-W` option when Rake::TestTask#verbose enabled. It's misunderstanding
  specification change with Rake 11. Partly revert #67

=== 11.1.1 / 2016-03-14

==== Bug fixes

* Use `-W` instead of `--verbose` when Rake::TestTask#verbose enabled.
  JRuby doesn't have `--verbose` option.

=== 11.1.0 / 2016-03-11

==== Compatibility Changes

* Revert to remove `last\_comment`. It will remove Rake 12.

=== 11.0.1 / 2016-03-09

==== Bug fixes

* Fixed packaging manifest.

=== 11.0.0 / 2016-03-09

==== Bug fixes

* Correctly handle bad encoding in exception messages. Pull request #113
  by Tomer Brisker
* Fix verbose option at TestTask. Pull request #67 by Mike Blumtritt

==== Enhancements

* Make FileList#exclude more analogous to FileList#include.
* Use IO.open instead of Open3.popen3 for CPU counter.
* Make Rake::Task#already_invoked publicly accessible.
  Pull request #93 by Joe Rafaniello
* Lookup prerequisites with same name outside of scope instead of
  matching self. Pull request #96 by Sandy Vanderbleek
* Make FileList#pathmap behave like String#pathmap.
  Pull request #61 by Daniel Tamai
* Add fetch method to task arguments.
  Pull request #12 by Chris Keathley
* Use ruby warnings by default. Pull request #97 by Harold Giménez

==== Compatibility Changes

* Removed to support Ruby 1.8.x
* Removed constant named `RAKEVERSION`
* Removed Rake::AltSystem
* Removed Rake::RubyForgePublisher
* Removed Rake::TaskManager#last\_comment. Use last\_description.
* Removed Rake::TaskLib#paste
* Removed Top-level SshDirPublisher, SshFreshDirPublisher, SshFilePublisher
  and CompositePublisher from lib/rake/contrib/publisher.rb
* Removed "rake/runtest.rb"

=== 10.5.0 / 2016-01-13

==== Enhancements

* Removed monkey patching for Ruby 1.8. Pull request #46 by Pablo Herrero.
* Inheritance class of Rake::FileList returns always self class.
  Pull request #74 by Thomas Scholz

=== 10.4.2 / 2014-12-02

==== Bug fixes

* Rake no longer edits ARGV.  This allows you to re-exec rake from a rake
  task.  Pull requset #9 by Matt Palmer.
* Documented how Rake::DSL#desc handles sentences in task descriptions.
  Issue #7 by Raza Sayed.
* Fixed test error on 1.9.3 with legacy RubyGems.  Issue #8 by Matt Palmer.
* Deleted duplicated History entry.  Pull request #10 by Yuji Yamamoto.

=== 10.4.1 / 2014-12-01

==== Bug fixes

* Reverted fix for #277 as it caused numerous issues for rake users.
  rails/spring issue #366 by Gustavo Dutra.

=== 10.4.0 / 2014-11-22

==== Enhancements

* Upgraded to minitest 5.  Pull request #292 by Teo Ljungberg.
* Added support for Pathname in rake tasks.  Pull request #271 by Randy
  Coulman.
* Rake now ignores falsy dependencies which allows for easier programmatic
  creation of tasks.  Pull request #273 by Manav.
* Rake no longer edits ARGV.  This allows you to re-exec rake from a rake
  task.  Issue #277 by Matt Palmer.
* Etc.nprocessors is used for counting the number of CPUs.

==== Bug fixes

* Updated rake manpage.  Issue #283 by Nathan Long, pull request #291 by
  skittleys.
* Add Rake::LATE to allow rebuilding of files that depend on deleted files.
  Bug #286, pull request #287 by David Grayson.
* Fix relinking of files when repackaging.  Bug #276 by Muenze.
* Fixed some typos.  Pull request #280 by Jed Northridge.
* Try counting CPUs via cpuinfo if host_os was not matched.  Pull request
  #282 by Edouard B.

=== 10.3.2 / 2014-05-15

==== Bug fixes

* Rake no longer infinitely loops when showing exception causes that refer to
  each other.  Bug #272 by Chris Bandy.
* Fixed documentation typos.  Bug #275 by Jake Worth.

=== 10.3.1 / 2014-04-17

==== Bug fixes

* Really stop reporting an error when cleaning already-deleted files.  Pull
  request #269 by Randy Coulman
* Fixed infinite loop when cleaning already-deleted files on windows.

=== 10.3 / 2014-04-15

==== Enhancements

* Added --build-all option to rake which treats all file prerequisites as
  out-of-date.  Pull request #254 by Andrew Gilbert.
* Added Rake::NameSpace#scope.  Issue #263 by Jon San Miguel.

==== Bug fixes

* Suppress org.jruby package files in rake error messages for JRuby users.
  Issue #213 by Charles Nutter.
* Fixed typo, removed extra "h".  Pull request #267 by Hsing-Hui Hsu.
* Rake no longer reports an error when cleaning already-deleted files.  Pull
  request #266 by Randy Coulman.
* Consume stderr while determining CPU count to avoid hang.  Issue #268 by
  Albert Sun.

=== 10.2.2 / 2014-03-27

==== Bug fixes

* Restored Ruby 1.8.7 compatibility

=== 10.2.1 / 2014-03-25

==== Bug fixes

* File tasks including a ':' are now top-level tasks again.  Issue #262 by
  Josh Holtrop.
* Use sysctl for CPU count for all BSDs.  Pull request #261 by Joshua Stein.
* Fixed CPU detection for unknown platforms.

=== 10.2.0 / 2014-03-24

==== Enhancements

* Rake now requires Ruby 1.9 or newer.  For me, this is a breaking change, but
  it seems that Jim planned to release it with Rake 10.2.  See also pull
  request #247 by Philip Arndt.
* Rake now allows you to declare tasks under a namespace like:

    task 'a:b' do ... end

  Pull request #232 by Judson Lester.
* Task#source defaults to the first prerequisite in non-rule tasks.  Pull
  request #215 by Avdi Grimm.
* Rake now automatically rebuilds and reloads imported files.  Pull request
  #209 by Randy Coulman.
* The rake task arguments can contain escaped commas.  Pull request #214 by
  Filip Hrbek.
* Rake now prints the exception class on errors.  Patch #251 by David Cornu.

==== Bug fixes

* Fixed typos.  Pull request #256 by Valera Rozuvan, #250 via Jake Worth, #260
  by Zachary Scott.
* Fixed documentation for calling tasks with arguments.  Pull request #235 by
  John Varghese.
* Clarified `rake -f` usage message.  Pull request #252 by Marco Pfatschbacher.
* Fixed a test failure on windows.  Pull request #231 by Hiroshi Shirosaki.
* Fixed corrupted rake.1.gz.  Pull request #225 by Michel Boaventura.
* Fixed bug in can\_detect\_signals? in test.  Patch from #243 by Alexey
  Borzenkov.

=== 10.1.1

* Use http://github.com/jimweirich/rake instead of http://rake.rubyforge.org for
  canonical project url.

=== 10.1.0

==== Changes

===== New Features

* Add support for variable length task argument lists. If more actual
  arguments are supplied than named arguments, then the extra
  arguments values will be in args.extras.

* Application name is not displayed in the help banner. (Previously
  "rake" was hardcoded, now rake-based applications can display their
  own names).

===== Bug Fixes

Bug fixes include:

* Fix backtrace suppression issues.

* Rules now explicit get task arguments passed to them.

* Rename FileList#exclude? to FileList#exclude\_from\_list? to avoid
  conflict with new Rails method.

* Clean / Clobber tasks now report failure to remove files.

* Plus heaps of internal code cleanup.

==== Thanks

As usual, it was input from users that drove a lot of these changes.
The following people contributed patches, made suggestions or made
otherwise helpful comments. Thanks to ...

* Michael Nikitochkin (general code cleanup)
* Vipul A M (general code cleanup)
* Dennis Bell (variable length task argument lists)
* Jacob Swanner (rules arguments)
* Rafael Rosa Fu (documentation typo)
* Stuart Nelson (install.rb fixes)
* Lee Hambley (application name in help banner)

-- Jim Weirich

=== 10.0.3

  "Jim, when will Rake reach version 1.0?"

Over the past several years I've been asked that question at
conferences, panels and over twitter. Due to historical reasons (or
maybe just plain laziness) Rake has (incorrectly) been treating the
second digit of the version as the major release number. So in my head
Rake was already at version 9.

Well, it's time to fix things. This next version of Rake drops old,
crufty, backwards compatibility hacks such as top level constants, DSL
methods defined in Object and numerous other features that are just no
longer desired. It's also time to drop the leading zero from the
version number as well and call this new version of rake what it
really is: Version 10.

So, welcome to Rake 10.0!

Rake 10 is actually feature identical to the latest version of Rake 9
(that would be the version spelled 0.9.3), *except* that Rake 10 drops
all the sundry deprecated features that have accumulated over the years.

If your Rakefile is up to date and current with all the new features
of Rake 10, you are ready to go. If your Rakefile still uses a few
deprecated feeatures, feel free to use Rake 9 (0.9.3) with the same
feature set. Just be aware that future features will be in Rake 10
family line.

==== Changes

As mentioned above, there are no new features in Rake 10. However,
there are a number of features missing:

* Classic namespaces are now gone. Rake is no longer able to reflect
  the options settings in the global variables ($rakefile, $show\_tasks,
  $show\_prereqs, $trace, $dryrun and $silent). The
  <tt>--classic-namespace</tt> option is no longer supported.

* Global constants are no longer supported. This includes
  <tt>Task</tt>, <tt>FileTask</tt>, <tt>FileCreationTask</tt> and
  <tt>RakeApp</tt>). The constant missing hook to warn about using
  global rake constants has been removed.

* The Rake DSL methods (task, file, directory, etc) are in their own
  module (Rake::DSL). The stub versions of these methods (that printed
  warnings) in Object have been removed. However, the DSL methods are
  added to the top-level <tt>main</tt> object. Since <tt>main</tt> is
  not in the inheritance tree, the presence of the DSL methods in main
  should be low impact on other libraries.

  If you want to use the Rake DSL commands from your own code, just
  include <tt>Rake::DSL</tt> into your own classes and modules.

* The deprecated syntax for task arguments (the one using
  <tt>:needs</tt>) has been removed.

* The <tt>--reduce-compat</tt> flag has been removed (it's not needed
  anymore).

* The deprecated <tt>rake/sys.rb</tt> library has been removed.

* The deprecated <tt>rake/rdoctask.rb</tt> library has been removed.
  RDoc supplies its own rake task now.

* The deprecated <tt>rake/gempackagetask.rb</tt> library has been
  removed. Gem supplies its own package task now.

There is one small behavioral change:

* Non-file tasks now always report the current time as their time
  stamp. This is different from the previous behavior where non-file
  tasks reported current time only if there were no prerequisites, and
  the max prerequisite timestamp otherwise. This lead to inconsistent
  and surprising behavior when adding prerequisites to tasks that in
  turn were prequisites to file tasks. The new behavior is more
  consistent and predictable.

==== Changes (from 0.9.3, 0.9.4, 0.9.5)

Since Rake 10 includes the changes from the last version of Rake 9,
we'll repeat the changes for versions 0.9.3 through 0.9.5 here.

===== New Features (in 0.9.3)

* Multitask tasks now use a thread pool. Use -j to limit the number of
  available threads.

* Use -m to turn regular tasks into multitasks (use at your own risk).

* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to
  programatically add rake task libraries.

* You can specific backtrace suppression patterns (see
  --suppress-backtrace)

* Directory tasks can now take prerequisites and actions

* Use --backtrace to request a full backtrace without the task trace.

* You can say "--backtrace=stdout" and "--trace=stdout" to route trace
  output to standard output rather than standard error.

* Optional 'phony' target (enable with 'require 'rake/phony'") for
  special purpose builds.

* Task#clear now clears task comments as well as actions and
  prerequisites. Task#clear_comment will specifically target comments.

* The --all option will force -T and -D to consider all the tasks,
  with and without descriptions.

===== Bug Fixes (in 0.9.3)

* Semi-colons in windows rakefile paths now work.

* Improved Control-C support when invoking multiple test suites.

* egrep method now reads files in text mode (better support for
  Windows)

* Better deprecation line number reporting.

* The -W option now works with all tasks, whether they have a
  description or not.

* File globs in rake should not be sorted alphabetically, independent
  of file system and platform.

* Numerous internal improvements.

* Documentation typos and fixes.

===== Bug Fixes (in 0.9.4)

* Exit status with failing tests is not correctly set to non-zero.

* Simplified syntax for phony task (for older versions of RDoc).

* Stand alone FileList usage gets glob function (without loading in
  extra dependencies)

===== Bug Fixes (in 0.9.5)

* --trace and --backtrace no longer swallow following task names.

==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 10.0.2

==== Changes

===== Bug Fixes

* --trace and --backtrace no longer swallow following task names.

==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 10.0.1

==== Changes

===== Bug Fixes

* Exit status with failing tests is not correctly set to non-zero.

* Simplified syntax for phony task (for older versions of RDoc).

* Stand alone FileList usage gets glob function (without loading in
  extra dependencies)

==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 10.0.0

  "Jim, when will Rake reach version 1.0?"

Over the past several years I've been asked that question at
conferences, panels and over twitter. Due to historical reasons (or
maybe just plain laziness) Rake has (incorrectly) been treating the
second digit of the version as the major release number. So in my head
Rake was already at version 9.

Well, it's time to fix things. This next version of Rake drops old,
crufty, backwards compatibility hacks such as top level constants, DSL
methods defined in Object and numerous other features that are just no
longer desired. It's also time to drop the leading zero from the
version number as well and call this new version of rake what it
really is: Version 10.

So, welcome to Rake 10.0!

Rake 10 is actually feature identical to the latest version of Rake 9
(that would be the version spelled 0.9.3), *except* that Rake 10 drops
all the sundry deprecated features that have accumulated over the years.

If your Rakefile is up to date and current with all the new features
of Rake 10, you are ready to go. If your Rakefile still uses a few
deprecated feeatures, feel free to use Rake 9 (0.9.3) with the same
feature set. Just be aware that future features will be in Rake 10
family line.

==== Changes in 10.0

As mentioned above, there are no new features in Rake 10. However,
there are a number of features missing:

* Classic namespaces are now gone. Rake is no longer able to reflect
  the options settings in the global variables ($rakefile, $show\_tasks,
  $show\_prereqs, $trace, $dryrun and $silent). The
  <tt>--classic-namespace</tt> option is no longer supported.

* Global constants are no longer supported. This includes
  <tt>Task</tt>, <tt>FileTask</tt>, <tt>FileCreationTask</tt> and
  <tt>RakeApp</tt>). The constant missing hook to warn about using
  global rake constants has been removed.

* The Rake DSL methods (task, file, directory, etc) are in their own
  module (Rake::DSL). The stub versions of these methods (that printed
  warnings) in Object have been removed. However, the DSL methods are
  added to the top-level <tt>main</tt> object. Since <tt>main</tt> is
  not in the inheritance tree, the presence of the DSL methods in main
  should be low impact on other libraries.

  If you want to use the Rake DSL commands from your own code, just
  include <tt>Rake::DSL</tt> into your own classes and modules.

* The deprecated syntax for task arguments (the one using
  <tt>:needs</tt>) has been removed.

* The <tt>--reduce-compat</tt> flag has been removed (it's not needed
  anymore).

* The deprecated <tt>rake/sys.rb</tt> library has been removed.

* The deprecated <tt>rake/rdoctask.rb</tt> library has been removed.
  RDoc supplies its own rake task now.

* The deprecated <tt>rake/gempackagetask.rb</tt> library has been
  removed. Gem supplies its own package task now.

There is one small behavioral change:

* Non-file tasks now always report the current time as their time
  stamp. This is different from the previous behavior where non-file
  tasks reported current time only if there were no prerequisites, and
  the max prerequisite timestamp otherwise. This lead to inconsistent
  and surprising behavior when adding prerequisites to tasks that in
  turn were prequisites to file tasks. The new behavior is more
  consistent and predictable.

==== Changes (from 0.9.3)

Since Rake 10 includes the changes from the last version of Rake 9,
we'll repeat the changes for version 0.9.3 here.

===== New Features

* Multitask tasks now use a thread pool. Use -j to limit the number of
  available threads.

* Use -m to turn regular tasks into multitasks (use at your own risk).

* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to
  programatically add rake task libraries.

* You can specific backtrace suppression patterns (see
  --suppress-backtrace)

* Directory tasks can now take prerequisites and actions

* Use --backtrace to request a full backtrace without the task trace.

* You can say "--backtrace=stdout" and "--trace=stdout" to route trace
  output to standard output rather than standard error.

* Optional 'phony' target (enable with 'require 'rake/phony'") for
  special purpose builds.

* Task#clear now clears task comments as well as actions and
  prerequisites. Task#clear_comment will specifically target comments.

* The --all option will force -T and -D to consider all the tasks,
  with and without descriptions.

===== Bug Fixes

* Semi-colons in windows rakefile paths now work.

* Improved Control-C support when invoking multiple test suites.

* egrep method now reads files in text mode (better support for
  Windows)

* Better deprecation line number reporting.

* The -W option now works with all tasks, whether they have a
  description or not.

* File globs in rake should not be sorted alphabetically, independent
  of file system and platform.

* Numerous internal improvements.

* Documentation typos and fixes.


==== Thanks

As usual, it was input from users that drove a lot of these changes. The
following people contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.6

Rake version 0.9.6 contains a number of fixes mainly for merging
Rake into the Ruby source tree and fixing tests.

==== Changes

===== Bug Fixes (0.9.6)

* Better trace output when using a multi-threaded Rakefile.
* Arg parsing is now consistent for tasks and multitasks.
* Skip exit code test in versions of Ruby that don't support it well.

Changes for better integration with the Ruby source tree:

* Fix version literal for Ruby source tree build.
* Better loading of libraries for testing in Ruby build.
* Use the ruby version provided by Ruby's tests.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.5

Rake version 0.9.5 contains a number of bug fixes.

==== Changes

===== Bug Fixes (0.9.5)

* --trace and --backtrace no longer swallow following task names.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.4

Rake version 0.9.4 contains a number of bug fixes.

==== Changes

===== Bug Fixes (0.9.4)

* Exit status with failing tests is not correctly set to non-zero.

* Simplified syntax for phony task (for older versions of RDoc).

* Stand alone FileList usage gets glob function (without loading in
  extra dependencies)

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== 0.9.3

Rake version 0.9.3 contains some new, backwards compatible features and
a number of bug fixes.

==== Changes

===== New Features

* Multitask tasks now use a thread pool. Use -j to limit the number of
  available threads.

* Use -m to turn regular tasks into multitasks (use at your own risk).

* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to
  programatically add rake task libraries.

* You can specific backtrace suppression patterns (see
  --suppress-backtrace)

* Directory tasks can now take prerequisites and actions

* Use --backtrace to request a full backtrace without the task trace.

* You can say "--backtrace=stdout" and "--trace=stdout" to route trace
  output to standard output rather than standard error.

* Optional 'phony' target (enable with 'require 'rake/phony'") for
  special purpose builds.

* Task#clear now clears task comments as well as actions and
  prerequisites. Task#clear_comment will specifically target comments.

* The --all option will force -T and -D to consider all the tasks,
  with and without descriptions.

===== Bug Fixes

* Semi-colons in windows rakefile paths now work.

* Improved Control-C support when invoking multiple test suites.

* egrep method now reads files in text mode (better support for
  Windows)

* Better deprecation line number reporting.

* The -W option now works with all tasks, whether they have a
  description or not.

* File globs in rake should not be sorted alphabetically, independent
  of file system and platform.

* Numerous internal improvements.

* Documentation typos and fixes.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Aaron Patterson
* Dylan Smith
* Jo Liss
* Jonas Pfenniger
* Kazuki Tsujimoto
* Michael Bishop
* Michael Elufimov
* NAKAMURA Usaku
* Ryan Davis
* Sam Grönblom
* Sam Phippen
* Sergio Wong
* Tay Ray Chuan
* grosser
* quix

Also, many thanks to Eric Hodel for assisting with getting this release
out the door.

-- Jim Weirich

=== Rake 0.9.2.2

Rake version 0.9.2.2 is mainly bug fixes.

==== Changes

* The rake test loader now removes arguments it has processed.  Issue #51
* Rake::TaskArguments now responds to #values\_at
* RakeFileUtils.verbose_flag = nil silences output the same as 0.8.7
* Rake tests are now directory-independent
* Rake tests are no longer require flexmock
* Commands constant is no longer polluting top level namespace.
* Show only the interesting portion of the backtrace by default (James M. Lawrence).
* Added --reduce-compat option to remove backward compatible DSL hacks (James M. Lawrence).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich

=== 0.9.2

Rake version 0.9.2 has a few small fixes.  See below for details.

==== Changes

* Support for Ruby 1.8.6 was fixed.
* Global DSL warnings now honor --no-deprecate

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich

=== 0.9.1

Rake version 0.9.1 has a number of bug fixes and enhancments (see
below for more details).  Additionally, the internals have be slightly
restructured and improved.

==== Changes

Rake 0.9.1 adds back the global DSL methods, but with deprecation
messages.  This allows Rake 0.9.1 to be used with older rakefiles with
warning messages.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich

=== 0.9.0

Rake version 0.9.0 has a number of bug fixes and enhancments (see
below for more details).  Additionally, the internals have be slightly
restructured and improved.

==== Changes

===== New Features / Enhancements / Bug Fixes in Version 0.9.0

* Rake now warns when the deprecated :needs syntax used (and suggests
  the proper syntax in the warning).

* Moved Rake DSL commands to top level ruby object 'main'.  Rake DSL
  commands are no longer private methods in Object. (Suggested by
  James M. Lawrence/quix)

* Rake now uses case-insensitive comparisons to find the Rakefile on Windows.
  Based on patch by Roger Pack.

* Rake now requires (instead of loads) files in the test task.  Patch by Cezary
  Baginski.

* Fixed typos.  Patches by Sean Scot August Moon and R.T. Lechow.

* Rake now prints the Rakefile directory only when it's different from the
  current directory.  Patch by Alex Chaffee.

* Improved rakefile_location discovery on Windows.  Patch by James Tucker.

* Rake now recognizes "Windows Server" as a windows system.  Patch by Matthias
  Lüdtke

* Rake::RDocTask is deprecated.  Use RDoc::Task from RDoc 2.4.2+ (require
  'rdoc/task')

* Rake::GemPackageTask is deprecated.  Use Gem::PackageTask (require
  'rubygems/package\_task')

* Rake now outputs various messages to $stderr instead of $stdout.

* Rake no longer emits warnings for Config.  Patch by Santiago Pastorino.

* Removed Rake's DSL methods from the top level scope.  If you need to
  call 'task :xzy' in your code, include Rake::DSL into your class, or
  put the code in a Rake::DSL.environment do ... end block.

* Split rake.rb into individual files.

* Support for the --where (-W) flag for showing where a task is defined.

* Fixed quoting in test task.
  (http://onestepback.org/redmine/issues/show/44,
  http://www.pivotaltracker.com/story/show/1223138)

* Fixed the silent option parsing problem.
  (http://onestepback.org/redmine/issues/show/47)

* Fixed :verbose=>false flag on sh and ruby commands.

* Rake command line options may be given by default in a RAKEOPT
  environment variable.

* Errors in Rake will now display the task invocation chain in effect
  at the time of the error.

* Accepted change by warnickr to not expand test patterns in shell
  (allowing more files in the test suite).

* Fixed that file tasks did not perform prereq lookups in scope
  (Redmine #57).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence (quix)
* Roger Pack
* Cezary Baginski
* Sean Scot August Moon
* R.T. Lechow
* Alex Chaffee
* James Tucker
* Matthias Lüdtke
* Santiago Pastorino

Also, bit thanks to Eric Hodel for assisting with getting this release
out the door (where "assisting" includes, but is not by any means
limited to, "pushing" me to get it done).

-- Jim Weirich


=== 0.8.7

Rake version 0.8.5 introduced greatly improved support for executing
commands on Windows.  The "sh" command now has the same semantics on
Windows that it has on Unix based platforms.

Rake version 0.8.6 includes minor fixes the the RDoc generation.
Rake version 0.8.7 includes a minor fix for JRuby running on windows.

==== Changes

===== New Features / Enhancements in Version 0.8.5

* Improved implementation of the Rake system command for Windows.
  (patch from James M. Lawrence/quix)

* Support for Ruby 1.9's improved system command.  (patch from James
  M. Lawrence/quix)

* Rake now includes the configured extension when invoking an
  executable (Config::CONFIG['EXEEXT])

===== Bug Fixes in Version 0.8.5

* Environment variable keys are now correctly cased (it matters in
  some implementations).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Charles Nutter

-- Jim Weirich

=== 0.8.6

Rake version 0.8.5 introduced greatly improved support for executing
commands on Windows.  The "sh" command now has the same semantics on
Windows that it has on Unix based platforms.

Rake version 0.8.5 includes minor fixes the the RDoc generation.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence/quix
* Luis Lavena

-- Jim Weirich

=== 0.8.5

Rake version 0.8.5 is a new release of Rake with greatly improved
support for executing commands on Windows.  The "sh" command now has
the same semantics on Windows that it has on Unix based platforms.

==== Changes

===== New Features / Enhancements in Version 0.8.5

* Improved implementation of the Rake system command for Windows.
  (patch from James M. Lawrence/quix)

* Support for Ruby 1.9's improved system command.  (patch from James
  M. Lawrence/quix)

* Rake now includes the configured extension when invoking an
  executable (Config::CONFIG['EXEEXT])

===== Bug Fixes in Version 0.8.5

* Environment variable keys are now correctly cased (it matters in
  some implementations).

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence/quix
* Luis Lavena

-- Jim Weirich

=== 0.8.4

Rake version 0.8.4 is a bug-fix release of rake.

NOTE: The version of Rake that comes with Ruby 1.9 has diverged
      slightly from the core Rake code base.  Rake 0.8.4 will work
      with Ruby 1.9, but is not a strict upgrade for the Rake that
      comes with Ruby 1.9.  A (near) future release of Rake will unify
      those two codebases.

==== Letter Writing Campaign

Thanks to Aaron Patterson (@tenderlove) and Eric Hodel (@drbrain) for
their encouraging support in organizing a letter writing campaign to
lobby for the "Warning Free" release of rake 0.8.4.  A special callout
goes to Jonathan D. Lord, Sr (Dr. Wingnut) whose postcard was the
first to actually reach me. (see
http://tenderlovemaking.com/2009/02/26/we-need-a-new-version-of-rake/
for details)

==== Changes

===== New Features / Enhancements in Version 0.8.4

* Case is preserved on rakefile names. (patch from James
  M. Lawrence/quix)

* Improved Rakefile case insensitivity testing (patch from Luis
  Lavena).

* Windows system dir search order is now: HOME, HOMEDRIVE + HOMEPATH,
  APPDATA, USERPROFILE (patch from Luis Lavena)

* MingGW is now recognized as a windows platform.  (patch from Luis
  Lavena)

===== Bug Fixes in Version 0.8.4

* Removed reference to manage_gem to fix the warning produced by the
  gem package task.

* Fixed stray ARGV option problem that was interfering with
  Test::Unit::Runner. (patch from Pivotal Labs)

===== Infrastructure Improvements in Version 0.8.4

* Numerous fixes to the windows test suite (patch from Luis Lavena).

* Improved Rakefile case insensitivity testing (patch from Luis
  Lavena).

* Better support for windows paths in the test task (patch from Simon
  Chiang/bahuvrihi)

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* James M. Lawrence/quix
* Luis Lavena
* Pivotal Labs
* Simon Chiang/bahuvrihi

-- Jim Weirich

=== 0.8.3

Rake version 0.8.3 is a bug-fix release of rake.

==== Changes

===== Bug Fixes in Version 0.8.3

* Enhanced the system directory detection in windows. We now check
  HOMEDRIVE/HOMEPATH and USERPROFILE if APPDATA isn't found. (Patch
  supplied by James Tucker). Rake no long aborts if it can't find the
  directory.

* Added fix to handle ruby installations in directories with spaces in
  their name.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Edwin Pratomo
* Gavin Stark
* Adam Q. Salter
* Adam Majer
* Emanuel Indermühle
* Ittay Dror
* Bheeshmar Redheendran (for spending an afternoon with me debugging
  windows issues)

-- Jim Weirich


=== 0.8.2

Rake version 0.8.2 is a new release of rake that includes a number of
new features and numerous bug fixes.

==== Changes

===== New Features in Version 0.8.2

* Switched from getoptlong to optparse (patches supplied by Edwin
  Pratomo).

* The -T option will now attempt to dynamically sense the size of the
  terminal. The -T output will only self-truncate if the output is a
  tty. However, if RAKE_COLUMNS is explicitly set, it will be honored
  in any case. (Patch provided by Gavin Stark).

* The following public methods have been added to rake task objects:

  * task.clear -- Clear both the prerequisites and actions of the
    target rake task.
  * task.clear_prerequisites -- Clear all the existing prerequisites
    from the target rake task.
  * task.clear_actions -- Clear all the existing actions from the
    target rake task.
  * task.reenable -- Re-enable a task, allowing its actions to be
    executed again if the task is invoked.

* Changed RDoc test task to have no default template. This makes it
  easier for the tempate to pick up the template from the environment.

* Default values for task arguments can easily be specified with the
  :with_defaults method. (Idea for default argument merging supplied
  by (Adam Q. Salter)

===== Bug Fixes in Version 0.8.2

* Fixed bug in package task so that it will include the subdir
  directory in the package for testing. (Bug found by Adam Majer)

* Fixed filename dependency order bug in test\_inspect\_pending and
  test\_to\_s\_pending. (Bug found by Adam Majer)

* Fixed check for file utils options to make them immune to the
  symbol/string differences. (Patch supplied by Edwin Pratomo)

* Fixed bug with rules involving multiple source, where only the first
  dependency of a rule has any effect (Patch supplied by Emanuel
  Indermühle)

* FileList#clone and FileList#dup have better sematics w.r.t. taint
  and freeze.

* Changed from using Mutex to Monitor. Evidently Mutex causes thread
  join errors when Ruby is compiled with -disable-pthreads. (Patch
  supplied by Ittay Dror)

* Fixed bug in makefile parser that had problems with extra spaces in
  file task names. (Patch supplied by Ittay Dror)

==== Other changes in Version 0.8.2

* Added ENV var to rake's own Rakefile to prevent OS X from including
  extended attribute junk in the rake package tar file. (Bug found by
  Adam Majer)

* Added a performance patch for reading large makefile dependency
  files. (Patch supplied by Ittay Dror)

==== Task Argument Examples

Prior to version 0.8.0, rake was only able to handle command line
arguments of the form NAME=VALUE that were passed into Rake via the
ENV hash.  Many folks had asked for some kind of simple command line
arguments, perhaps using "--" to separate regular task names from
argument values on the command line.  The problem is that there was no
easy way to associate positional arguments on the command line with
different tasks.  Suppose both tasks :a and :b expect a command line
argument: does the first value go with :a?  What if :b is run first?
Should it then get the first command line argument.

Rake 0.8.0 solves this problem by explicitly passing values directly
to the tasks that need them.  For example, if I had a release task
that required a version number, I could say:

   rake release[0.8.2]

And the string "0.8.2" will be passed to the :release task.  Multiple
arguments can be passed by separating them with a comma, for example:

   rake name[john,doe]

Just a few words of caution.  The rake task name and its arguments
need to be a single command line argument to rake.  This generally
means no spaces.  If spaces are needed, then the entire rake +
argument string should be quoted.  Something like this:

   rake "name[billy bob, smith]"

(Quoting rules vary between operating systems and shells, so make sure
you consult the proper docs for your OS/shell).

===== Tasks that Expect Parameters

Parameters are only given to tasks that are setup to expect them.  In
order to handle named parameters, the task declaration syntax for
tasks has been extended slightly.

For example, a task that needs a first name and last name might be
declared as:

   task :name, :first_name, :last_name

The first argument is still the name of the task (:name in this case).
The next to argumements are the names of the parameters expected by
:name (:first_name and :last_name in the example).

To access the values of the parameters, the block defining the task
behaviour can now accept a second parameter:

   task :name, :first_name, :last_name do |t, args|
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

The first argument of the block "t" is always bound to the current
task object.  The second argument "args" is an open-struct like object
that allows access to the task arguments.  Extra command line
arguments to a task are ignored.  Missing command line arguments are
given the nil value.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Edwin Pratomo
* Gavin Stark
* Adam Q. Salter
* Adam Majer
* Emanuel Indermühle
* Ittay Dror
* Bheeshmar Redheendran (for spending an afternoon with me debugging
  windows issues)

-- Jim Weirich

=== 0.8.0/0.8.1

Rake version 0.8.0 is a new release of rake that includes serveral new
features.

==== Changes

===== New Features in Version 0.8.0

* Tasks can now receive command line parameters.  See the examples
  below for more details.

* Comments are limited to 80 columns on output, but full comments can
  be seen by using the -D parameter. (feature suggested by Jamis
  Buck).

* Explicit exit(n) calls will now set the exit status to n. (patch
  provided by Stephen Touset).

* Rake is now compatible with Ruby 1.9.

Version 0.8.1 is a minor update that includes additional Ruby 1.9
compatibility fixes.

==== Task Argument Examples

Prior to version 0.8.0, rake was only able to handle command line
arguments of the form NAME=VALUE that were passed into Rake via the
ENV hash.  Many folks had asked for some kind of simple command line
arguments, perhaps using "--" to separate regular task names from
argument values on the command line.  The problem is that there was no
easy way to associate positional arguments on the command line with
different tasks.  Suppose both tasks :a and :b expect a command line
argument: does the first value go with :a?  What if :b is run first?
Should it then get the first command line argument.

Rake 0.8.0 solves this problem by explicitly passing values directly
to the tasks that need them.  For example, if I had a release task
that required a version number, I could say:

   rake release[0.8.0]

And the string "0.8.0" will be passed to the :release task.  Multiple
arguments can be passed by separating them with a comma, for example:

   rake name[john,doe]

Just a few words of caution.  The rake task name and its arguments
need to be a single command line argument to rake.  This generally
means no spaces.  If spaces are needed, then the entire rake +
argument string should be quoted.  Something like this:

   rake "name[billy bob, smith]"

(Quoting rules vary between operating systems and shells, so make sure
you consult the proper docs for your OS/shell).

===== Tasks that Expect Parameters

Parameters are only given to tasks that are setup to expect them.  In
order to handle named parameters, the task declaration syntax for
tasks has been extended slightly.

For example, a task that needs a first name and last name might be
declared as:

   task :name, :first_name, :last_name

The first argument is still the name of the task (:name in this case).
The next to argumements are the names of the parameters expected by
:name (:first_name and :last_name in the example).

To access the values of the parameters, the block defining the task
behaviour can now accept a second parameter:

   task :name, :first_name, :last_name do |t, args|
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

The first argument of the block "t" is always bound to the current
task object.  The second argument "args" is an open-struct like object
that allows access to the task arguments.  Extra command line
arguments to a task are ignored.  Missing command line arguments are
given the nil value.

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments.  Thanks to ...

* Jamis Buck (for comment formatting suggestions)
* Stephen Touset (for exit status patch).

-- Jim Weirich


=== 0.7.3

Rake version 0.7.3 is a minor release that includes some refactoring to better
support custom Rake applications.

==== Changes

===== New Features in Version 0.7.3

* Added the +init+ and +top_level+ methods to make the creation of custom Rake applications a bit easier.  E.g.

    gem 'rake', ">= 0.7.3"
    require 'rake'

    Rake.application.init('myrake')

    task :default do
      something_interesting
    end

    Rake.application.top_level

==== Thanks

As usual, it was input from users that drove a alot of these changes. The
following people either contributed patches, made suggestions or made
otherwise helpful comments. Thanks to ...

-- Jim Weirich


=== 0.7.2


Version 0.7.2 supplies a bug fix and a few minor enhancements. In
particular, the new version fixes an incompatibility with the soon to
be released Ruby 1.8.6.  We strongly recommend upgrading to Rake 0.7.2
in order to be compatible with the new version of Ruby.

==== Changes

===== Bug Fixes in 0.7.2

There are quite a number of bug fixes in the new 0.7.2 version of
Rake:

* Removed dependency on internal fu_xxx functions from FileUtils.

* Error messages are now send to stderr rather than stdout (from
  Payton Quackenbush).

* Better error handling on invalid command line arguments (from Payton
  Quackenbush).

* Fixed some bugs where the application object was going to the global
  appliation instead of using its own data.

* Fixed the method name leak from FileUtils (bug found by Glenn
  Vanderburg).

* Added test for noop, bad_option and verbose flags to sh command.

* Added a description to the gem task in GemPackageTask.

* Fixed a bug when rules have multiple prerequisites (patch by Joel
  VanderWerf)

* Added the handful of RakeFileUtils to the private method as well.

===== New Features in 0.7.2

The following new features are available in Rake version 0.7.2:

* Added square and curly bracket patterns to FileList#include (Tilman
  Sauerbeck).

* FileLists can now pass a block to FileList#exclude to exclude files
  based on calculated values.

* Added plain filename support to rule dependents (suggested by Nobu
  Nakada).

* Added pathmap support to rule dependents.  In other words, if a
  pathmap format (beginning with a '%') is given as a Rake rule
  dependent, then the name of the depend will be the name of the
  target with the pathmap format applied.

* Added a 'tasks' method to a namespace to get a list of tasks
  associated with the namespace.

* Added tar_command and zip_command options to the Package task.

* The clean task will no longer delete 'core' if it is a directory.

===== Internal Rake Improvements

The following changes will are mainly internal improvements and
refactorings and have little effect on the end user.  But they may be
of interest to the general public.

* Added rcov task and updated unit testing for better code coverage.

* Added a 'shame' task to the Rakefile.

* Added rake_extension to handle detection of extension collisions.

* Added a protected 'require "rubygems"' to test/test_application to
  unbreak cruisecontrol.rb.

* Removed rake\_dup.  Now we just simply rescue a bad dup.

* Refactored the FileList reject logic to remove duplication.

* Removed if \_\_FILE\_\_ at the end of the rake.rb file.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* Payton Quackenbush -- For several error handling improvements.

* Glenn Vanderburg -- For finding and fixing the method name leak from
  FileUtils.

* Joel VanderWerf -- for finding and fixing a bug in the handling of
  multiple prerequisites.

* Tilman Sauerbeck -- For some enhancing FileList to support more
  advanced file globbing.

* Nobu Nakada -- For suggesting plain file name support to rule dependents.

-- Jim Weirich

=== 0.7.1

Version 0.7.1 supplies a bug fix and a few minor enhancements.

==== Changes

===== Bug Fixes in 0.7.1

* Changes in the exception reported for the FileUtils.ln caused
  safe_ln to fail with a NotImplementedError.  Rake 0.7.1 will now
  catch that error or any StandardError and properly fall back to
  using +cp+.

===== New Features in 0.7.1

* You can filter the results of the --task option by supplying an
  optional regular expression.  This allows the user to easily find a
  particular task name in a long list of possible names.

* Transforming procs in a rule may now return a list of prerequisites.
  This allows more flexible rule formation.

* FileList and String now support a +pathmap+ melthod that makes the
  transforming paths a bit easier.  See the API docs for +pathmap+ for
  details.

* The -f option without a value will disable the search for a
  Rakefile.  This allows the Rakefile to be defined entirely in a
  library (and loaded with the -r option).  The current working
  directory is not changed when this is done.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* James Britt and Assaph Mehr for reporting and helping to debug the
  safe_ln issue.

-- Jim Weirich


=== 0.7.0

These changes for Rake have been brewing for a long time.  Here they
are, I hope you enjoy them.

==== Changes

===== New Features

* Name space support for task names (see below).
* Prerequisites can be executed in parallel (see below).
* Added safe_ln support for openAFS (via Ludvig Omholt).
* RDoc defaults to internal (in-process) invocation.  The old behavior
  is still available by setting the +external+ flag to true.
* Rakefiles are now loaded with the expanded path to prevent
  accidental pollution from the Ruby load path.
* Task objects my now be used in prerequisite lists directly.
* Task objects (in addition to task names) may now be included in the
  prerequisite list of a task.
* Internals cleanup and refactoring.

===== Bug Fixes

* Compatibility fixes for Ruby 1.8.4 FileUtils changes.

===== Namespaces

Tasks can now be nested inside their own namespaces.  Tasks within one
namespace will not accidentally interfer with tasks named in a different
namespace.

For example:

  namespace "main" do
    task :build do
      # Build the main program
    end
  end

  namespace "samples" do
    task :build do
      # Build the sample programs
    end
  end

  task :build_all => ["main:build", "samples:build"]

Even though both tasks are named :build, they are separate tasks in
their own namespaces.  The :build_all task (defined in the toplevel
namespace) references both build tasks in its prerequisites.

You may invoke each of the individual build tasks with the following
commands:

  rake main:build
  rake samples:build

Or invoke both via the :build_all command:

  rake build_all

Namespaces may be nested arbitrarily.  Since the name of file tasks
correspond to the name of a file in the external file system,
FileTasks are not affected by the namespaces.

See the Rakefile format documentation (in the Rake API documents) for
more information.

===== Parallel Tasks

Sometimes you have several tasks that can be executed in parallel.  By
specifying these tasks as prerequisites to a +multitask+ task.

In the following example the tasks copy\_src, copy\_doc and copy\_bin
will all execute in parallel in their own thread.

  multitask :copy_files => [:copy_src, :copy_doc, :copy_bin] do
    puts "All Copies Complete"
  end

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* Doug Young (inspiration for the parallel task)
* David Heinemeier Hansson (for --trace message enhancement and for
  pushing for namespace support).
* Ludvig Omholt (for the openAFS fix)

-- Jim Weirich

=== 0.6.1

* Rebuilt 0.6.0 gem without signing.

=== 0.6.0

Its time for some long requested enhancements and lots of bug fixes
... And a whole new web page.

==== New Web Page

The primary documentation for rake has moved from the RubyForge based
wiki to its own Hieraki based web site.  Constant spam on the wiki
made it a difficult to keep clean.  The new site will be easier to
update and organize.

Check out the new documentation at: http://docs.rubyrake.org

We will be adding new documentation to the site as time goes on.

In addition to the new docs page, make sure you check out Martin
Fowlers article on rake at http://martinfowler.com/articles/rake.html

==== Changes

===== New Features

* Multiple prerequisites on Rake rules now allowed.  However, keep the
  following in mind:

  1. All the prerequisites of a rule must be available before a rule
     is triggered, where "enabled" means (a) an existing file, (b) a
     defined rule, or (c) another rule which also must be
     trigger-able.
  2. Rules are checked in order of definition, so it is important to
     order your rules properly.  If a file can be created by two
     different rules, put the more specific rule first (otherwise the
     more general rule will trigger first and the specific one will
     never be triggered).
  3. The <tt>source</tt> method now returns the name of the first
     prerequisite listed in the rule.  <tt>sources</tt> returns the
     names of all the rule prerequisites, ordered as they are defined
     in the rule.  If the task has other prerequisites not defined in
     the rule (but defined in an explicit task definition), then they
     will _not_ be included in the sources list.

* FileLists may now use the egrep command.  This popular enhancement
  is now a core part of the FileList object.  If you want to get a
  list of all your to-dos, fixmes and TBD comments, add the following
  to your Rakefile.

    desc "Look for TODO and FIXME tags in the code"
    task :todo do
      FileList['**/*.rb'].egrep /#.*(FIXME|TODO|TBD)/
    end

* The <tt>investigation</tt> method was added to task object to dump
  out some important values.  This makes it a bit easier to debug Rake
  tasks.

  For example, if you are having problems with a particular task, just
  print it out:

    task :huh do
      puts Rake::Task['huh'].investigation
    end

* The Rake::TestTask class now supports a "ruby\_opts" option to pass
  arbitrary ruby options to a test subprocess.

===== Some Incompatibilities

* When using the <tt>ruby</tt> command to start a Ruby subprocess, the
  Ruby interpreter that is currently running rake is used by default.
  This makes it easier to use rake in an environment with multiple
  ruby installation.  (Previously, the first ruby command found in the
  PATH was used).

  If you wish to chose a different Ruby interpreter, you can
  explicitly choose the interpreter via the <tt>sh</tt> command.

* The major rake classes (Task, FileTask, FileCreationTask, RakeApp)
  have been moved out of the toplevel scope and are now accessible as
  Rake::Task, Rake::FileTask, Rake::FileCreationTask and
  Rake::Application.  If your Rakefile
  directly references any one of these tasks, you may:

  1. Update your Rakefile to use the new classnames
  2. Use the --classic-namespace option on the rake command to get the
     old behavior,
  3. Add <code>require 'rake/classic_namespace'</code> to the
     Rakefile to get the old behavior.

  <tt>rake</tt> will print a rather annoying warning whenever a
  deprecated class name is referenced without enabling classic
  namespace.

===== Bug Fixes

* Several unit tests and functional tests were fixed to run better
  under windows.

* Directory tasks are now a specialized version of a File task.  A
  directory task will only be triggered if it doesn't exist.  It will
  not be triggered if it is out of date w.r.t. any of its
  prerequisites.

* Fixed a bug in the Rake::GemPackageTask class so that the gem now
  properly contains the platform name.

* Fixed a bug where a prerequisite on a <tt>file</tt> task would cause
  an exception if the prerequisite did not exist.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
The following people either contributed patches, made suggestions or
made otherwise helpful comments.  Thanks to ...

* Greg Fast (better ruby_opt test options)
* Kelly Felkins (requested by better namespace support)
* Martin Fowler (suggested Task.investigation)
* Stuart Jansen (send initial patch for multiple prerequisites).
* Masao Mutch (better support for non-ruby Gem platforms)
* Philipp Neubeck (patch for file task exception fix)

-- Jim Weirich

=== 0.5.4

Time for some minor bug fixes and small enhancements

==== Changes

Here are the changes for version 0.5.4 ...

* Added double quotes to the test runner.  This allows the location of
  the tests (and runner) to be in a directory path that contains
  spaces (e.g. "C:/Program Files/ruby/bin").
* Added .svn to default ignore list.  Now subversion project metadata
  is automatically ignored by Rake's FileList.
* Updated FileList#include to support nested arrays and filelists.
  FileLists are flat lists of file names.  Using a FileList in an
  include will flatten out the nested file names.

== Thanks

As usual, it was input from users that drove a alot of these changes.
Thanks to ...

* Tilman Sauerbeck for the nested FileList suggestion.
* Josh Knowles for pointing out the spaces in directory name problem.

-- Jim Weirich

=== 0.5.3

Although it has only been two weeks since the last release, we have
enough updates to the Rake program to make it time for another
release.

==== Changes

Here are the changes for version 0.5.3 ...

* FileLists have been extensively changed so that they mimic the
  behavior of real arrays even more closely.  In particular,
  operations on FileLists that return a new collection (e.g. collect,
  reject) will now return a FileList rather than an array.  In
  addition, several places where FileLists were not properly expanded
  before use have been fixed.
* A method (+ext+) to simplify the handling of file extensions was
  added to String and to Array.
* The 'testrb' script in test/unit tends to silently swallow syntax
  errors in test suites.  Because of that, the default test loader is
  now a rake-provided script.  You can still use 'testrb' by setting
  the loader flag in the test task to :testrb.  (See the API documents
  for TestTask for all the loader flag values).
* FileUtil methods (e.g. cp, mv, install) are now declared to be
  private.  This will cut down on the interference with user defined
  methods of the same name.
* Fixed the verbose flag in the TestTask so that the test code is
  controlled by the flag.  Also shortened up some failure messages.
  (Thanks to Tobias Luetke for the suggestion).
* Rules will now properly detect a task that can generate a source
  file.  Previously rules would only consider source files that were
  already present.
* Added an +import+ command that allows Rake to dynamically import
  dependendencies into a running Rake session.  The +import+ command
  can run tasks to update the dependency file before loading them.
  Dependency files can be in rake or make format, allowing rake to
  work with tools designed to generate dependencies for make.

==== Thanks

As usual, it was input from users that drove a alot of these changes.
Thanks to ...

* Brian Gernhardt for the rules fix (especially for the patience to
  explain the problem to me until I got what he was talking about).
* Stefan Lang for pointing out problems in the dark corners of the
  FileList implementation.
* Alexey Verkhovsky pointing out the silently swallows syntax errors
  in tests.
* Tobias Luetke for beautifying the test task output.
* Sam Roberts for some of the ideas behind dependency loading.

-- Jim Weirich


=== 0.5.0

It has been a long time in coming, but we finally have a new version
of Rake available.

==== Changes

* Fixed documentation that was lacking the Rake module name (Tilman
  Sauerbeck).
* Added tar.gz and tar.bz2 support to package task (Tilman Sauerbeck).
* Recursive rules are now supported (Tilman Sauerbeck).
* Added warning option for the Test Task (requested by Eric Hodel).
* The jamis rdoc template is only used if it exists.
* Added fix for Ruby 1.8.2 test/unit and rails problem.
* Added contributed rake man file (Jani Monoses).
* Added Brian Candler's fix for problems in --trace and --dry-run
  mode.

==== Thanks

Lots of people provided input to this release.  Thanks to Tilman
Sauerbeck for numerous patches, documentation fixes and suggestions.
And for also pushing me to get this release out.  Also, thanks to
Brian Candler for the finding and fixing --trace/dry-run fix.  That
was an obscure bug.  Also to Eric Hodel for some good suggestions.

-- Jim Weirich

=== 0.4.15

==== Changes

Version 0.4.15 is a bug fix update for the Ruby 1.8.2 compatibility
changes.  This release includes:

* Fixed a bug that prevented the TESTOPTS flag from working with the
  revised for 1.8.2 test task.
* Updated the docs on --trace to indicate that it also enables a full
  backtrace on errors.
* Several fixes for new warnings generated.

==== Mini-Roadmap

I will continue to issue Rake updates in the 0.4.xx series as new
Ruby-1.8.2 issues become manifest.  Once the codebase stabilizes, I
will release a 0.5.0 version incorporating all the changes.  If you
are not using Ruby-1.8.2 and wish to avoid version churn, I recommend
staying with a release prior to Rake-0.4.14.

=== 0.4.14

Version 0.4.14 is a compatibility fix to allow Rake's test task to
work under Ruby 1.8.2.  A change in the Test::Unit autorun feature
prevented Rake from running any tests.  This release fixes the
problem.

Rake 0.4.14 is the recommended release for anyone using Ruby 1.8.2.

=== 0.4.13

* Fixed the dry-run flag so it is operating again.
* Multiple arguments to sh and ruby commands will not be interpreted
  by the shell (patch provided by Jonathan Paisley).

=== 0.4.12

* Added --silent (-s) to suppress the (in directory) rake message.

=== 0.4.11

* Changed the "don't know how to rake" message (finally)
* Changes references to a literal "Rakefile" to reference the global
  variable $rakefile (which contains the actual name of the rakefile).

=== 0.4.10

* Added block support to the "sh" command, allowing users to take
  special actions on the result of the system call.  E.g.

    sh "shell_command" do |ok, res|
      puts "Program returned #{res.exitstatus}" if ! ok
    end

=== 0.4.9

* Switched to Jamis Buck's RDoc template.
* Removed autorequire from Rake's gem spec.  This prevents the Rake
  libraries from loading while using rails.

=== 0.4.8

* Added support for .rb versions of Rakefile.
* Removed \\\n's from test task.
* Fixed Ruby 1.9 compatibility issue with FileList.

=== 0.4.7

* Fixed problem in FileList that caused Ruby 1.9 to go into infinite
  recursion.  Since to_a was removed from Object, it does not need to
  added back into the list of methods to rewrite in FileList.  (Thanks
  to Kent Sibilev for pointing this out).

=== 0.4.6
* Removed test version of ln in FileUtils that prevented safe_ln from
  using ln.

=== 0.4.5
* Upgraded comments in TestTask.
* FileList to_s and inspect now automatically resolve pending changes.
* FileList#exclude properly returns the FileList.

=== 0.4.4
* Fixed initialization problem with @comment.
* Now using multi -r technique in TestTask.  Switch Rakefile back to
  using the built-in test task macros because the rake runtime is no
  longer needed.
* Added 'TEST=filename' and 'TESTOPTS=options' to the Test Task
  macros.
* Allow a +test_files+ attribute in test tasks.  This allows more
  flexibility in specifying test files.

=== 0.4.3
* Fixed Comment leakage.

=== 0.4.2
* Added safe_ln that falls back to a copy if a file link is not supported.
* Package builder now uses safe\_ln.

=== 0.4.1
* Task comments are now additive, combined with "/".
* Works with (soon to be released) rubygems 0.6.2 (or 0.7.0)

=== 0.4.0
* FileList now uses deferred loading.  The file system is not searched
  until the first call that needs the file names.
* VAR=VALUE options are now accepted on the command line and are
  treated like environment variables.  The values may be tested in a
  Rakefile by referencing ENV['VAR'].
* File.mtime is now used (instead of File.new().mtime).

=== 0.3.2.x

* Removed some hidden dependencies on rubygems.  Tests now will test
  gems only if they are installed.
* Removed Sys from some example files.  I believe that is that last
  reference to Sys outside of the contrib area.
* Updated all copyright notices to include 2004.

=== 0.3.2

* GEM Installation now works with the application stub.

=== 0.3.1

* FileLists now automatically ignore CVS, .bak, !
* GEM Installation now works.

=== 0.3.0

Promoted 0.2.10.

=== 0.2.10
General

* Added title to Rake's rdocs
* Contrib packages are no longer included in the documentation.

RDoc Issues

* Removed default for the '--main' option
* Fixed rendering of the rdoc options
* Fixed clean/clobber confusion with rerdoc
* 'title' attribute added

Package Task Library Issues

* Version (or explicit :noversion) is required.
* +package_file+ attribute is now writable

FileList Issues

* Dropped bang version of exclude.  Now using ant-like include/exclude semantics.
* Enabled the "yield self" idiom in FileList#initialize.

=== 0.2.9

This version contains numerous changes as the RubyConf.new(2003)
presentation was being prepared.  The changes include:

* The monolithic rubyapp task library is in the process of being
  dropped in favor of lighter weight task libraries.

=== 0.2.7

* Added "desc" for task descriptions.
* -T will now display tasks with descriptions.
* -P will display tasks and prerequisites.
* Dropped the Sys module in favor of the 1.8.x FileUtils module.  Sys
  is still supported in the contrib area.

=== 0.2.6

* Moved to RubyForge

=== 0.2.5

* Switched to standard ruby app builder.
* Added no_match option to file matcher.

=== 0.2.4

* Fixed indir, which neglected to actually change directories.

=== 0.2.3

* Added rake module for a help target
* Added 'for\_files' to Sys
* Added a $rakefile constant
* Added test for selecting proper rule with multiple targets.
PK""#[�?qFF,gems/rake-13.0.6/doc/command_line_usage.rdocnu�[���= Rake Command Line Usage

Rake is invoked from the command line using:

    % rake [options ...]  [VAR=VALUE ...]  [targets ...]

Options are:

[<tt><em>name</em>=<em>value</em></tt>]
    Set the environment variable <em>name</em> to <em>value</em>
    during the execution of the <b>rake</b> command.  You can access
    the value by using ENV['<em>name</em>'].

[<tt>--all</tt> (-A)]
    Used in combination with the -T and -D options, will force
    those options to show all the tasks, even the ones without comments.

[<tt>--backtrace</tt>{=_output_} (-n)]
    Enable a full backtrace (i.e. like --trace, but without the task
    tracing details). The _output_ parameter is optional, but if
    specified it controls where the backtrace output is sent. If
    _output_ is <tt>stdout</tt>, then backtrace output is directed to
    standard output. If _output_ is <tt>stderr</tt>, or if it is
    missing, then the backtrace output is sent to standard error.

[<tt>--comments</tt>]
    Used in combination with the -W options to force the output to
    contain commented options only. This is the reverse of
    <tt>--all</tt>.

[<tt>--describe</tt> _pattern_ (-D)]
    Describe the tasks (matching optional PATTERN), then exit.

[<tt>--dry-run</tt> (-n)]
    Do a dry run.  Print the tasks invoked and executed, but do not
    actually execute any of the actions.

[<tt>--execute</tt> _code_ (-e)]
    Execute some Ruby code and exit.

[<tt>--execute-print</tt> _code_ (-p)]
    Execute some Ruby code, print the result, and exit.

[<tt>--execute-continue</tt> _code_ (-E)]
    Execute some Ruby code, then continue with normal task processing.

[<tt>--help</tt>  (-H)]
    Display some help text and exit.

[<tt>--jobs</tt> _number_  (-j)]

    Specifies the maximum number of concurrent threads allowed. Rake
    will allocate threads as needed up to this maximum number.

    If omitted, Rake will attempt to estimate the number of CPUs on
    the system and add 4 to that number.

    The concurrent threads are used to execute the <tt>multitask</tt>
    prerequisites. Also see the <tt>-m</tt> option which turns all
    tasks into multitasks.

    Sample values:
       (no -j)   : Allow up to (# of CPUs + 4) number of threads
       --jobs    : Allow unlimited number of threads
       --jobs=1  : Allow only one thread (the main thread)
       --jobs=16 : Allow up to 16 concurrent threads

[<tt>--job-stats</tt> _level_]

    Display job statistics at the completion of the run. By default,
    this will display the requested number of active threads (from the
    -j options) and the maximum number of threads in play at any given
    time.

    If the optional _level_ is <tt>history</tt>, then a complete trace
    of task history will be displayed on standard output.

[<tt>--libdir</tt> _directory_  (-I)]
    Add _directory_ to the list of directories searched for require.

[<tt>--multitask</tt> (-m)]
    Treat all tasks as multitasks. ('make/drake' semantics)

[<tt>--nosearch</tt>  (-N)]
    Do not search for a Rakefile in parent directories.

[<tt>--prereqs</tt>  (-P)]
    Display a list of all tasks and their immediate prerequisites.

[<tt>--quiet</tt> (-q)]
    Do not echo commands from FileUtils.

[<tt>--rakefile</tt> _filename_ (-f)]
    Use _filename_ as the name of the rakefile. The default rakefile
    names are +rakefile+ and +Rakefile+ (with +rakefile+ taking
    precedence). If the rakefile is not found in the current
    directory, +rake+ will search parent directories for a match. The
    directory where the Rakefile is found will become the current
    directory for the actions executed in the Rakefile.

[<tt>--rakelibdir</tt> _rakelibdir_ (-R)]
    Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib')

[<tt>--require</tt> _name_ (-r)]
    Require _name_ before executing the Rakefile.

[<tt>--rules</tt>]
    Trace the rules resolution.

[<tt>--silent (-s)</tt>]
    Like --quiet, but also suppresses the 'in directory' announcement.

[<tt>--suppress-backtrace _pattern_ </tt>]
    Line matching the regular expression _pattern_ will be removed
    from the backtrace output. Note that the --backtrace option is the
    full backtrace without these lines suppressed.

[<tt>--system</tt> (-g)]
    Use the system wide (global) rakefiles. The project Rakefile is
    ignored. By default, the system wide rakefiles are used only if no
    project Rakefile is found. On Unix-like system, the system wide
    rake files are located in $HOME/.rake. On a windows system they
    are stored in $APPDATA/Rake.

[<tt>--no-system</tt> (-G)]
    Use the project level Rakefile, ignoring the system-wide (global)
    rakefiles.

[<tt>--tasks</tt> <em>pattern</em> (-T)]
    Display a list of the major tasks and their comments.  Comments
    are defined using the "desc" command.  If a pattern is given, then
    only tasks matching the pattern are displayed.

[<tt>--trace</tt>{=_output_} (-t)]
    Turn on invoke/execute tracing. Also enable full backtrace on
    errors. The _output_ parameter is optional, but if specified it
    controls where the trace output is sent. If _output_ is
    <tt>stdout</tt>, then trace output is directed to standard output.
    If _output_ is <tt>stderr</tt>, or if it is missing, then trace
    output is sent to standard error.

[<tt>--verbose</tt> (-v)]
    Echo the Sys commands to standard output.

[<tt>--version</tt> (-V)]
    Display the program version and exit.

[<tt>--where</tt> <em>pattern</em> (-W)]
    Display tasks that match <em>pattern</em> and the file and line
    number where the task is defined. By default this option will
    display all tasks, not just the tasks that have descriptions.

[<tt>--no-deprecation-warnings</tt> (-X)]
    Do not display the deprecation warnings.

In addition, any command line option of the form
<em>VAR</em>=<em>VALUE</em> will be added to the environment hash
<tt>ENV</tt> and may be tested in the Rakefile.
PK""#[�'S{��"gems/rake-13.0.6/doc/glossary.rdocnu�[���= Glossary

action ::
  Code to be executed in order to perform a task.  Actions in a Rakefile are
  specified in a code block. (Usually delimited by +do+/+end+ pairs.)

execute ::
  When a task is executed, all of its actions are performed in the order they
  were defined.  Note that, unlike <tt>invoke</tt>, <tt>execute</tt> always
  executes the actions (without invoking or executing the prerequisites).

file task (Rake::FileTask) ::
  A file task is a task whose purpose is to create a file (which has the same
  name as the task).  When invoked, a file task will only execute if one or
  more of the following conditions are true.

  1. The associated file does not exist.
  2. A prerequisite has a later time stamp than the existing file.

  Because normal Tasks always have the current time as timestamp, a FileTask
  that has a normal Task prerequisite will always execute.

invoke ::
  When a task is invoked, first we check to see if it has been invoked before.
  If it has been, then nothing else is done.  If this is the first time it has
  been invoked, then we invoke each of its prerequisites.  Finally, we check
  to see if we need to execute the actions of this task by calling
  Rake::Task#needed?.  If the task is needed, we execute its actions.

  NOTE: Prerequisites are still invoked even if the task is not needed.

prerequisites ::
  Every task has a (possibly empty) set of prerequisites.  A prerequisite P to
  Task T is itself a task that must be invoked before Task T.

rule ::
  A rule is a recipe for synthesizing a task when no task is explicitly
  defined.  Rules generally synthesize file tasks.

task (Rake::Task) ::
  The basic unit of work in a Rakefile.  A task has a name, a set of 
  prerequisites, and a list of actions to be performed.
PK""#[��@u,u,gems/rake-13.0.6/doc/jamis.rbnu�[���# frozen_string_literal: true
module RDoc
module Page

FONTS = "\"Bitstream Vera Sans\", Verdana, Arial, Helvetica, sans-serif"

STYLE = <<CSS
a {
  color: #00F;
  text-decoration: none;
}

a:hover {
  color: #77F;
  text-decoration: underline;
}

body, td, p {
  font-family: %fonts%;
  background: #FFF;
  color: #000;
  margin: 0px;
  font-size: small;
}

#content {
  margin: 2em;
}

#description p {
  margin-bottom: 0.5em;
}

.sectiontitle {
  margin-top: 1em;
  margin-bottom: 1em;
  padding: 0.5em;
  padding-left: 2em;
  background: #005;
  color: #FFF;
  font-weight: bold;
  border: 1px dotted black;
}

.attr-rw {
  padding-left: 1em;
  padding-right: 1em;
  text-align: center;
  color: #055;
}

.attr-name {
  font-weight: bold;
}

.attr-desc {
}

.attr-value {
  font-family: monospace;
}

.file-title-prefix {
  font-size: large;
}

.file-title {
  font-size: large;
  font-weight: bold;
  background: #005;
  color: #FFF;
}

.banner {
  background: #005;
  color: #FFF;
  border: 1px solid black;
  padding: 1em;
}

.banner td {
  background: transparent;
  color: #FFF;
}

h1 a, h2 a, .sectiontitle a, .banner a {
  color: #FF0;
}

h1 a:hover, h2 a:hover, .sectiontitle a:hover, .banner a:hover {
  color: #FF7;
}

.dyn-source {
  display: none;
  background: #FFE;
  color: #000;
  border: 1px dotted black;
  margin: 0.5em 2em 0.5em 2em;
  padding: 0.5em;
}

.dyn-source .cmt {
  color: #00F;
  font-style: italic;
}

.dyn-source .kw {
  color: #070;
  font-weight: bold;
}

.method {
  margin-left: 1em;
  margin-right: 1em;
  margin-bottom: 1em;
}

.description pre {
  padding: 0.5em;
  border: 1px dotted black;
  background: #FFE;
}

.method .title {
  font-family: monospace;
  font-size: large;
  border-bottom: 1px dashed black;
  margin-bottom: 0.3em;
  padding-bottom: 0.1em;
}

.method .description, .method .sourcecode {
  margin-left: 1em;
}

.description p, .sourcecode p {
  margin-bottom: 0.5em;
}

.method .sourcecode p.source-link {
  text-indent: 0em;
  margin-top: 0.5em;
}

.method .aka {
  margin-top: 0.3em;
  margin-left: 1em;
  font-style: italic;
  text-indent: 2em;
}

h1 {
  padding: 1em;
  border: 1px solid black;
  font-size: x-large;
  font-weight: bold;
  color: #FFF;
  background: #007;
}

h2 {
  padding: 0.5em 1em 0.5em 1em;
  border: 1px solid black;
  font-size: large;
  font-weight: bold;
  color: #FFF;
  background: #009;
}

h3, h4, h5, h6 {
  padding: 0.2em 1em 0.2em 1em;
  border: 1px dashed black;
  color: #000;
  background: #AAF;
}

.sourcecode > pre {
  padding: 0.5em;
  border: 1px dotted black;
  background: #FFE;
}

CSS

XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
}

HEADER = XHTML_PREAMBLE + <<ENDHEADER
<html>
  <head>
    <title>%title%</title>
    <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
    <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />

    <script language="JavaScript" type="text/javascript">
    // <![CDATA[

        function toggleSource( id )
        {
          var elem
          var link

          if( document.getElementById )
          {
            elem = document.getElementById( id )
            link = document.getElementById( "l_" + id )
          }
          else if ( document.all )
          {
            elem = eval( "document.all." + id )
            link = eval( "document.all.l_" + id )
          }
          else
            return false;

          if( elem.style.display == "block" )
          {
            elem.style.display = "none"
            link.innerHTML = "show source"
          }
          else
          {
            elem.style.display = "block"
            link.innerHTML = "hide source"
          }
        }

        function openCode( url )
        {
          window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
        }
      // ]]>
    </script>
  </head>

  <body>
ENDHEADER

FILE_PAGE = <<HTML
<table border='0' cellpadding='0' cellspacing='0' width="100%" class='banner'>
  <tr><td>
    <table width="100%" border='0' cellpadding='0' cellspacing='0'><tr>
      <td class="file-title" colspan="2"><span class="file-title-prefix">File</span><br />%short_name%</td>
      <td align="right">
        <table border='0' cellspacing="0" cellpadding="2">
          <tr>
            <td>Path:</td>
            <td>%full_path%
IF:cvsurl
              &nbsp;(<a href="%cvsurl%">CVS</a>)
ENDIF:cvsurl
            </td>
          </tr>
          <tr>
            <td>Modified:</td>
            <td>%dtm_modified%</td>
          </tr>
        </table>
      </td></tr>
    </table>
  </td></tr>
</table><br>
HTML

###################################################################

CLASS_PAGE = <<HTML
<table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
  <td class="file-title"><span class="file-title-prefix">%classmod%</span><br />%full_name%</td>
  <td align="right">
    <table cellspacing=0 cellpadding=2>
      <tr valign="top">
        <td>In:</td>
        <td>
START:infiles
HREF:full_path_url:full_path:
IF:cvsurl
&nbsp;(<a href="%cvsurl%">CVS</a>)
ENDIF:cvsurl
END:infiles
        </td>
      </tr>
IF:parent
    <tr>
      <td>Parent:</td>
      <td>
IF:par_url
        <a href="%par_url%">
ENDIF:par_url
%parent%
IF:par_url
         </a>
ENDIF:par_url
     </td>
   </tr>
ENDIF:parent
         </table>
        </td>
        </tr>
      </table>
HTML

###################################################################

METHOD_LIST = <<HTML
  <div id="content">
IF:diagram
  <table cellpadding='0' cellspacing='0' border='0' width="100%"><tr><td align="center">
    %diagram%
  </td></tr></table>
ENDIF:diagram

IF:description
  <div class="description">%description%</div>
ENDIF:description

IF:requires
  <div class="sectiontitle">Required Files</div>
  <ul>
START:requires
  <li>HREF:aref:name:</li>
END:requires
  </ul>
ENDIF:requires

IF:toc
  <div class="sectiontitle">Contents</div>
  <ul>
START:toc
  <li><a href="#%href%">%secname%</a></li>
END:toc
  </ul>
ENDIF:toc

IF:methods
  <div class="sectiontitle">Methods</div>
  <ul>
START:methods
  <li>HREF:aref:name:</li>
END:methods
  </ul>
ENDIF:methods

IF:includes
<div class="sectiontitle">Included Modules</div>
<ul>
START:includes
  <li>HREF:aref:name:</li>
END:includes
</ul>
ENDIF:includes

START:sections
IF:sectitle
<div class="sectiontitle"><a nem="%secsequence%">%sectitle%</a></div>
IF:seccomment
<div class="description">
%seccomment%
</div>
ENDIF:seccomment
ENDIF:sectitle

IF:classlist
  <div class="sectiontitle">Classes and Modules</div>
  %classlist%
ENDIF:classlist

IF:constants
  <div class="sectiontitle">Constants</div>
  <table border='0' cellpadding='5'>
START:constants
  <tr valign='top'>
    <td class="attr-name">%name%</td>
    <td>=</td>
    <td class="attr-value">%value%</td>
  </tr>
IF:desc
  <tr valign='top'>
    <td>&nbsp;</td>
    <td colspan="2" class="attr-desc">%desc%</td>
  </tr>
ENDIF:desc
END:constants
  </table>
ENDIF:constants

IF:attributes
  <div class="sectiontitle">Attributes</div>
  <table border='0' cellpadding='5'>
START:attributes
  <tr valign='top'>
    <td class='attr-rw'>
IF:rw
[%rw%]
ENDIF:rw
    </td>
    <td class='attr-name'>%name%</td>
    <td class='attr-desc'>%a_desc%</td>
  </tr>
END:attributes
  </table>
ENDIF:attributes

IF:method_list
START:method_list
IF:methods
<div class="sectiontitle">%type% %category% methods</div>
START:methods
<div class="method">
  <div class="title">
IF:callseq
    <a name="%aref%"></a><b>%callseq%</b>
ENDIF:callseq
IFNOT:callseq
    <a name="%aref%"></a><b>%name%</b>%params%
ENDIF:callseq
IF:codeurl
[ <a href="javascript:openCode('%codeurl%')">source</a> ]
ENDIF:codeurl
  </div>
IF:m_desc
  <div class="description">
  %m_desc%
  </div>
ENDIF:m_desc
IF:aka
<div class="aka">
  This method is also aliased as
START:aka
  <a href="%aref%">%name%</a>
END:aka
</div>
ENDIF:aka
IF:sourcecode
<div class="sourcecode">
  <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
  <div id="%aref%_source" class="dyn-source">
<pre>
%sourcecode%
</pre>
  </div>
</div>
ENDIF:sourcecode
</div>
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
END:sections
</div>
HTML

FOOTER = <<ENDFOOTER
  </body>
</html>
ENDFOOTER

BODY = HEADER + <<ENDBODY
  !INCLUDE! <!-- banner header -->

  <div id="bodyContent">
    #{METHOD_LIST}
  </div>

  #{FOOTER}
ENDBODY

########################## Source code ##########################

SRC_PAGE = XHTML_PREAMBLE + <<HTML
<html>
<head><title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<style>
.ruby-comment    { color: green; font-style: italic }
.ruby-constant   { color: #4433aa; font-weight: bold; }
.ruby-identifier { color: #222222;  }
.ruby-ivar       { color: #2233dd; }
.ruby-keyword    { color: #3333FF; font-weight: bold }
.ruby-node       { color: #777777; }
.ruby-operator   { color: #111111;  }
.ruby-regexp     { color: #662222; }
.ruby-value      { color: #662222; font-style: italic }
  .kw { color: #3333FF; font-weight: bold }
  .cmt { color: green; font-style: italic }
  .str { color: #662222; font-style: italic }
  .re  { color: #662222; }
</style>
</head>
<body bgcolor="white">
<pre>%code%</pre>
</body>
</html>
HTML

########################## Index ################################

FR_INDEX_BODY = <<HTML
!INCLUDE!
HTML

FILE_INDEX = XHTML_PREAMBLE + <<HTML
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<style>
<!--
  body {
    background-color: #EEE;
    font-family: #{FONTS};
    color: #000;
    margin: 0px;
  }
  .banner {
    background: #005;
    color: #FFF;
    padding: 0.2em;
    font-size: small;
    font-weight: bold;
    text-align: center;
  }
  .entries {
    margin: 0.25em 1em 0 1em;
    font-size: x-small;
  }
  a {
    color: #00F;
    text-decoration: none;
    white-space: nowrap;
  }
  a:hover {
    color: #77F;
    text-decoration: underline;
  }
-->
</style>
<base target="docwin">
</head>
<body>
<div class="banner">%list_title%</div>
<div class="entries">
START:entries
<a href="%href%">%name%</a><br>
END:entries
</div>
</body></html>
HTML

CLASS_INDEX = FILE_INDEX
METHOD_INDEX = FILE_INDEX

INDEX = XHTML_PREAMBLE + <<HTML
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>%title%</title>
  <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
</head>

<frameset cols="20%,*">
    <frameset rows="15%,35%,50%">
        <frame src="fr_file_index.html"   title="Files" name="Files" />
        <frame src="fr_class_index.html"  name="Classes" />
        <frame src="fr_method_index.html" name="Methods" />
    </frameset>
IF:inline_source
      <frame  src="%initial_page%" name="docwin">
ENDIF:inline_source
IFNOT:inline_source
    <frameset rows="80%,20%">
      <frame  src="%initial_page%" name="docwin">
      <frame  src="blank.html" name="source">
    </frameset>
ENDIF:inline_source
    <noframes>
          <body bgcolor="white">
            Click <a href="html/index.html">here</a> for a non-frames
            version of this page.
          </body>
    </noframes>
</frameset>

</html>
HTML

end
end


PK""#[��AA gems/rake-13.0.6/doc/example/b.cnu�[���#include <stdio.h>

void b()
{
    printf ("In function b\n");
}
PK""#[۸	���&gems/rake-13.0.6/doc/example/Rakefile1nu�[���# Example Rakefile -*- ruby -*-

task :default => [:main]

file "a.o" => ["a.c"] do |t|
  src = t.name.sub(/\.o$/, '.c')
  sh "gcc #{src} -c -o #{t.name}"
end

file "b.o" => ["b.c"] do |t|
  src = t.name.sub(/\.o$/, '.c')
  sh "gcc #{src} -c -o #{t.name}"
end

file "main.o" => ["main.c"] do |t|
  src = t.name.sub(/\.o$/, '.c')
  sh "gcc #{src} -c -o #{t.name}"
end

OBJFILES = ["a.o", "b.o", "main.o"]
task :obj => OBJFILES

file "main" => OBJFILES do |t|
  sh "gcc -o #{t.name} main.o a.o b.o"
end

task :clean do
  rm_f FileList['*.o']
  Dir['*~'].each { |fn| rm_f fn }
end

task :clobber => [:clean] do
  rm_f "main"
end

task :run => ["main"] do
  sh "./main"
end
PK""#[�_�bgg#gems/rake-13.0.6/doc/example/main.cnu�[���#include <stdio.h>

extern void a();
extern void b();

int main ()
{
    a();
    b();
    return 0;
}
PK""#["�;WW&gems/rake-13.0.6/doc/example/Rakefile2nu�[���# Example Rakefile -*- ruby -*-
# Using the power of Ruby

task :default => [:main]

def ext(fn, newext)
  fn.sub(/\.[^.]+$/, newext)
end

SRCFILES = Dir['*.c']
OBJFILES = SRCFILES.collect { |fn| ext(fn,".o") }

OBJFILES.each do |objfile|
  srcfile = ext(objfile, ".c")
  file objfile => [srcfile] do |t|
    sh "gcc #{srcfile} -c -o #{t.name}"
  end
end

file "main" => OBJFILES do |t|
  sh "gcc -o #{t.name} main.o a.o b.o"
end

task :clean do
  rm_f FileList['*.o']
  Dir['*~'].each { |fn| rm_f fn }
end

task :clobber => [:clean] do
  rm_f "main"
end

task :run => ["main"] do
  sh "./main"
end
PK""#[Oq�AA gems/rake-13.0.6/doc/example/a.cnu�[���#include <stdio.h>

void a()
{
    printf ("In function a\n");
}
PK""#[�u���	�	$gems/rake-13.0.6/doc/proto_rake.rdocnu�[���= Original Prototype Rake

This is the original 100 line prototype rake program.

---
 #!/opt/alt/ruby31/bin/ruby

 require 'ftools'

 class Task
   TASKS = Hash.new

   attr_reader :prerequisites

   def initialize(task_name)
     @name = task_name
     @prerequisites = []
     @actions = []
   end

   def enhance(deps=nil, &block)
     @prerequisites |= deps if deps
     @actions << block if block_given?
     self
   end

   def name
     @name.to_s
   end

   def invoke
     @prerequisites.each { |n| Task[n].invoke }
     execute if needed?
   end

   def execute
     return if @triggered
     @triggered = true
     @actions.collect { |act| result = act.call(self) }.last
   end

   def needed?
     true
   end

   def timestamp
     Time.now
   end

   class << self
     def [](task_name)
       TASKS[intern(task_name)] or fail "Don't know how to rake #{task_name}"
     end

     def define_task(args, &block)
       case args
       when Hash
 	fail "Too Many Target Names: #{args.keys.join(' ')}" if args.size > 1
 	fail "No Task Name Given" if args.size < 1
 	task_name = args.keys[0]
 	deps = args[task_name]
       else
 	task_name = args
 	deps = []
       end
       deps = deps.collect {|d| intern(d) }
       get(task_name).enhance(deps, &block)
     end

     def get(task_name)
       name = intern(task_name)
       TASKS[name] ||= self.new(name)
     end

     def intern(task_name)
       (Symbol === task_name) ? task_name : task_name.intern
     end
   end
 end

 class FileTask < Task
   def needed?
     return true unless File.exist?(name)
     latest_prereq = @prerequisites.collect{|n| Task[n].timestamp}.max
     return false if latest_prereq.nil?
     timestamp < latest_prereq
   end

   def timestamp
     File.new(name.to_s).mtime
   end
 end

 def task(args, &block)
   Task.define_task(args, &block)
 end

 def file(args, &block)
   FileTask.define_task(args, &block)
 end

 def sys(cmd)
   puts cmd
   system(cmd) or fail "Command Failed: [#{cmd}]"
 end

 def rake
   begin
     here = Dir.pwd
     while ! File.exist?("Rakefile")
       Dir.chdir("..")
       fail "No Rakefile found" if Dir.pwd == here
       here = Dir.pwd
     end
     puts "(in #{Dir.pwd})"
     load "./Rakefile"
     ARGV.push("default") if ARGV.size == 0
     ARGV.each { |task_name| Task[task_name].invoke }
   rescue Exception => ex
     puts "rake aborted ... #{ex.message}"
     puts ex.backtrace.find {|str| str =~ /Rakefile/ } || ""
   end
 end

 if __FILE__ == $0 then
   rake
 end
PK""#[v3�HH"gems/rake-13.0.6/doc/rational.rdocnu�[���= Why rake?

Ok, let me state from the beginning that I never intended to write this
code.  I'm not convinced it is useful, and I'm not convinced anyone
would even be interested in it.  All I can say is that Why's onion truck
must by been passing through the Ohio valley.

What am I talking about? ... A Ruby version of Make.

See, I can sense you cringing already, and I agree.  The world certainly
doesn't need yet another reworking of the "make" program.  I mean, we
already have "ant".  Isn't that enough?

It started yesterday.  I was helping a coworker fix a problem in one of
the Makefiles we use in our project.  Not a particularly tough problem,
but during the course of the conversation I began lamenting some of the
shortcomings of make.  In particular, in one of my makefiles I wanted to
determine the name of a file dynamically and had to resort to some
simple scripting (in Ruby) to make it work.  "Wouldn't it be nice if you
could just use Ruby inside a Makefile" I said.

My coworker (a recent convert to Ruby) agreed, but wondered what it
would look like.  So I sketched the following on the whiteboard...

    "What if you could specify the make tasks in Ruby, like this ..."

      task "build" do
        java_compile(...args, etc ...)
      end

    "The task function would register "build" as a target to be made,
    and the block would be the action executed whenever the build
    system determined that it was time to do the build target."

We agreed that would be cool, but writing make from scratch would be WAY
too much work.  And that was the end of that!

... Except I couldn't get the thought out of my head.  What exactly
would be needed to make the about syntax work as a make file?  Hmmm, you
would need to register the tasks, you need some way of specifying
dependencies between tasks, and some way of kicking off the process.
Hey!  What if we did ... and fifteen minutes later I had a working
prototype of Ruby make, complete with dependencies and actions.

I showed the code to my coworker and we had a good laugh.  It was just
about a page worth of code that reproduced an amazing amount of the
functionality of make.  We were both truly stunned with the power of
Ruby.

But it didn't do everything make did.  In particular, it didn't have
timestamp based file dependencies (where a file is rebuilt if any of its
prerequisite files have a later timestamp).  Obviously THAT would be a
pain to add and so Ruby Make would remain an interesting experiment.

... Except as I walked back to my desk, I started thinking about what
file based dependencies would really need.  Rats!  I was hooked again,
and by adding a new class and two new methods, file/timestamp
dependencies were implemented.

Ok, now I was really hooked.  Last night (during CSI!) I massaged the
code and cleaned it up a bit.  The result is a bare-bones replacement
for make in exactly 100 lines of code.

For the curious, you can see it at ...
* doc/proto_rake.rdoc

Oh, about the name.  When I wrote the example Ruby Make task on my
whiteboard, my coworker exclaimed "Oh! I have the perfect name: Rake ...
Get it?  Ruby-Make. Rake!"  He said he envisioned the tasks as leaves
and Rake would clean them up  ... or something like that.  Anyways, the
name stuck.

Some quick examples ...

A simple task to delete backup files ...

   task :clean do
     Dir['*~'].each {|fn| rm fn rescue nil}
   end

Note that task names are symbols (they are slightly easier to type
than quoted strings ... but you may use quoted string if you would
rather). Rake makes the methods of the FileUtils module directly
available, so we take advantage of the <tt>rm</tt> command.  Also note
the use of "rescue nil" to trap and ignore errors in the <tt>rm</tt>
command.

To run it, just type "rake clean".  Rake will automatically find a
Rakefile in the current directory (or above!) and will invoke the
targets named on the command line.  If there are no targets explicitly
named, rake will invoke the task "default".

Here's another task with dependencies ...

   task :clobber => [:clean] do
     rm_r "tempdir"
   end

Task :clobber depends upon task :clean, so :clean will be run before
:clobber is executed.

Files are specified by using the "file" command.  It is similar to the
task command, except that the task name represents a file, and the task
will be run only if the file doesn't exist, or if its modification time
is earlier than any of its prerequisites.

Here is a file based dependency that will compile "hello.cc" to
"hello.o".

   file "hello.cc"
   file "hello.o" => ["hello.cc"] do |t|
     srcfile = t.name.sub(/\.o$/, ".cc")
     sh %{g++ #{srcfile} -c -o #{t.name}}
   end

I normally specify file tasks with string (rather than symbols).  Some
file names can't be represented by symbols.  Plus it makes the
distinction between them more clear to the casual reader.

Currently writing a task for each and every file in the project would be
tedious at best.  I envision a set of libraries to make this job
easier.  For instance, perhaps something like this ...

   require 'rake/ctools'
   Dir['*.c'].each do |fn|
     c_source_file(fn)
   end

where "c_source_file" will create all the tasks need to compile all the
C source files in a directory.  Any number of useful libraries could be
created for rake.

That's it.  There's no documentation (other than whats in this
message).  Does this sound interesting to anyone?  If so, I'll continue
to clean it up and write it up and publish it on RAA.  Otherwise, I'll
leave it as an interesting exercise and a tribute to the power of Ruby.

Why /might/ rake be interesting to Ruby programmers.  I don't know,
perhaps ...

* No weird make syntax (only weird Ruby syntax :-)
* No need to edit or read XML (a la ant)
* Platform independent build scripts.
* Will run anywhere Ruby exists, so no need to have "make" installed.
  If you stay away from the "sys" command and use things like
  'ftools', you can have a perfectly platform independent
  build script.  Also rake is only 100 lines of code, so it can
  easily be packaged along with the rest of your code.

So ... Sorry for the long rambling message.  Like I said, I never
intended to write this code at all.
PK""#[����P�P"gems/rake-13.0.6/doc/rakefile.rdocnu�[���= Rakefile Format

First of all, there is no special format for a Rakefile.  A Rakefile
contains executable Ruby code.  Anything legal in a ruby script is
allowed in a Rakefile.

Now that we understand there is no special syntax in a Rakefile, there
are some conventions that are used in a Rakefile that are a little
unusual in a typical Ruby program.  Since a Rakefile is tailored to
specifying tasks and actions, the idioms used in a Rakefile are
designed to support that.

So, what goes into a Rakefile?

== Tasks

Tasks are the main unit of work in a Rakefile.  Tasks have a name
(usually given as a symbol or a string), a list of prerequisites (more
symbols or strings) and a list of actions (given as a block).

=== Simple Tasks

A task is declared by using the +task+ method.  +task+ takes a single
parameter that is the name of the task.

  task :name

=== Tasks with Prerequisites

Any prerequisites are given as a list (enclosed in square brackets)
following the name and an arrow (=>).

  task name: [:prereq1, :prereq2]

*NOTE:* Although this syntax looks a little funky, it is legal
Ruby.  We are constructing a hash where the key is :name and the value
for that key is the list of prerequisites.  It is equivalent to the
following ...

  hash = Hash.new
  hash[:name] = [:prereq1, :prereq2]
  task(hash)

You can also use strings for task names and prerequisites, rake doesn't care.
This is the same task definition:

  task 'name' => %w[prereq1 prereq2]

As is this:

  task name: %w[prereq1 prereq2]

We'll prefer this style for regular tasks with prerequisites throughout the
rest of the document.  Using an array of strings for the prerequisites means
you will need to make fewer changes if you need to move tasks into namespaces
or perform other refactorings.

=== Tasks with Actions

Actions are defined by passing a block to the +task+ method.  Any Ruby
code can be placed in the block.  The block may reference the task
object via the block parameter.

  task name: [:prereq1, :prereq2] do |t|
    # actions (may reference t)
  end

=== Multiple Definitions

A task may be specified more than once.  Each specification adds its
prerequisites and actions to the existing definition.  This allows one
part of a rakefile to specify the actions and a different rakefile
(perhaps separately generated) to specify the dependencies.

For example, the following is equivalent to the single task
specification given above.

  task :name
  task name: :prereq1
  task name: %w[prereq2]
  task :name do |t|
    # actions
  end

== File Tasks

Some tasks are designed to create a file from one or more other files.
Tasks that generate these files may be skipped if the file already
exists.  File tasks are used to specify file creation tasks.

File tasks are declared using the +file+ method (instead of the +task+
method).  In addition, file tasks are usually named with a string
rather than a symbol.

The following file task creates a executable program (named +prog+)
given two object files named +a.o+ and +b.o+.  The tasks
for creating +a.o+ and +b.o+ are not shown.

  file "prog" => ["a.o", "b.o"] do |t|
    sh "cc -o #{t.name} #{t.prerequisites.join(' ')}"
  end

== Directory Tasks

It is common to need to create directories upon demand.  The
+directory+ convenience method is a short-hand for creating a FileTask
that creates the directory.  For example, the following declaration
...

  directory "testdata/examples/doc"

is equivalent to ...

  file "testdata" do |t| mkdir t.name end
  file "testdata/examples" => ["testdata"] do |t| mkdir t.name end
  file "testdata/examples/doc" => ["testdata/examples"] do |t| mkdir t.name end

The +directory+ method does not accept prerequisites or actions, but
both prerequisites and actions can be added later.  For example ...

  directory "testdata"
  file "testdata" => ["otherdata"]
  file "testdata" do
    cp Dir["standard_data/*.data"], "testdata"
  end

== Tasks with Parallel Prerequisites

Rake allows parallel execution of prerequisites using the following syntax:

  multitask copy_files: %w[copy_src copy_doc copy_bin] do
    puts "All Copies Complete"
  end

In this example, +copy_files+ is a normal rake task.  Its actions are
executed whenever all of its prerequisites are done.  The big
difference is that the prerequisites (+copy_src+, +copy_bin+ and
+copy_doc+) are executed in parallel.  Each of the prerequisites are
run in their own Ruby thread, possibly allowing faster overall runtime.

=== Secondary Prerequisites

If any of the primary prerequisites of a multitask have common secondary
prerequisites, all of the primary/parallel prerequisites will wait
until the common prerequisites have been run.

For example, if the <tt>copy_<em>xxx</em></tt> tasks have the
following prerequisites:

  task copy_src: :prep_for_copy
  task copy_bin: :prep_for_copy
  task copy_doc: :prep_for_copy

Then the +prep_for_copy+ task is run before starting all the copies in
parallel.  Once +prep_for_copy+ is complete, +copy_src+, +copy_bin+,
and +copy_doc+ are all run in parallel.  Note that +prep_for_copy+ is
run only once, even though it is referenced in multiple threads.

=== Thread Safety

The Rake internal data structures are thread-safe with respect
to the multitask parallel execution, so there is no need for the user
to do extra synchronization for Rake's benefit.  However, if there are
user data structures shared between the parallel prerequisites, the
user must do whatever is necessary to prevent race conditions.

== Tasks with Arguments

Prior to version 0.8.0, rake was only able to handle command line
arguments of the form NAME=VALUE that were passed into Rake via the
ENV hash.  Many folks had asked for some kind of simple command line
arguments, perhaps using "--" to separate regular task names from
argument values on the command line.  The problem is that there was no
easy way to associate positional arguments on the command line with
different tasks.  Suppose both tasks :a and :b expect a command line
argument: does the first value go with :a?  What if :b is run first?
Should it then get the first command line argument.

Rake 0.8.0 solves this problem by explicitly passing values directly
to the tasks that need them.  For example, if I had a release task
that required a version number, I could say:

   rake release[0.8.2]

And the string "0.8.2" will be passed to the :release task.  Multiple
arguments can be passed by separating them with a comma, for example:

   rake name[john,doe]

Just a few words of caution.  The rake task name and its arguments
need to be a single command line argument to rake.  This generally
means no spaces.  If spaces are needed, then the entire name +
argument string should be quoted.  Something like this:

   rake "name[billy bob, smith]"

(Quoting rules vary between operating systems and shells, so make sure
you consult the proper docs for your OS/shell).

=== Tasks that Expect Parameters

Parameters are only given to tasks that are setup to expect them.  In
order to handle named parameters, the task declaration syntax for
tasks has been extended slightly.

For example, a task that needs a first name and last name might be
declared as:

   task :name, [:first_name, :last_name]

The first argument is still the name of the task (:name in this case).
The next two arguments are the names of the parameters expected by
:name in an array (:first_name and :last_name in the example).

To access the values of the parameters, the block defining the task
behaviour can now accept a second parameter:

   task :name, [:first_name, :last_name] do |t, args|
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

The first argument of the block "t" is always bound to the current
task object.  The second argument "args" is an open-struct like object
that allows access to the task arguments.  Extra command line
arguments to a task are ignored.

If you wish to specify default values for the arguments, you can use
the with_defaults method in the task body.  Here is the above example
where we specify default values for the first and last names:

   task :name, [:first_name, :last_name] do |t, args|
     args.with_defaults(:first_name => "John", :last_name => "Dough")
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

=== Tasks that Expect Parameters and Have Prerequisites

Tasks that use parameters have a slightly different format for
prerequisites.  Use the arrow notation to indicate the prerequisites
for tasks with arguments.  For example:

   task :name, [:first_name, :last_name] => [:pre_name] do |t, args|
     args.with_defaults(:first_name => "John", :last_name => "Dough")
     puts "First name is #{args.first_name}"
     puts "Last  name is #{args.last_name}"
   end

=== Tasks that take Variable-length Parameters

Tasks that need to handle a list of values as a parameter can use the
extras method of the args variable.  This allows for tasks that can
loop over a variable number of values, and its compatible with named
parameters as well:

   task :email, [:message] do |t, args|
     mail = Mail.new(args.message)
     recipients = args.extras
     recipients.each do |target|
       mail.send_to(target)
     end
   end

There is also the convenience method to_a that returns all parameters
in the sequential order they were given, including those associated
with named parameters.

=== Deprecated Task Parameters Format

There is an older format for declaring task parameters that omitted
the task argument array and used the :needs keyword to introduce the
dependencies.  That format is still supported for compatibility, but
is not recommended for use.  The older format may be dropped in future
versions of rake.

== Accessing Task Programmatically

Sometimes it is useful to manipulate tasks programmatically in a
Rakefile. To find a task object use Rake::Task.[].

=== Programmatic Task Example

For example, the following Rakefile defines two tasks.  The :doit task
simply prints a simple "DONE" message.  The :dont class will lookup
the doit class and remove (clear) all of its prerequisites and
actions.

   task :doit do
     puts "DONE"
   end

   task :dont do
     Rake::Task[:doit].clear
   end

Running this example:

  $ rake doit
  (in /Users/jim/working/git/rake/x)
  DONE
  $ rake dont doit
  (in /Users/jim/working/git/rake/x)
  $

The ability to programmatically manipulate tasks gives rake very
powerful meta-programming capabilities w.r.t. task execution, but
should be used with caution.

== Rules

When a file is named as a prerequisite, but does not have a file task
defined for it, Rake will attempt to synthesize a task by looking at a
list of rules supplied in the Rakefile.

Suppose we were trying to invoke task "mycode.o", but no task is
defined for it.  But the rakefile has a rule that look like this ...

  rule '.o' => ['.c'] do |t|
    sh "cc #{t.source} -c -o #{t.name}"
  end

This rule will synthesize any task that ends in ".o".  It has a
prerequisite a source file with an extension of ".c" must exist.  If
Rake is able to find a file named "mycode.c", it will automatically
create a task that builds "mycode.o" from "mycode.c".

If the file "mycode.c" does not exist, rake will attempt
to recursively synthesize a rule for it.

When a task is synthesized from a rule, the +source+ attribute of the
task is set to the matching source file.  This allows us to write
rules with actions that reference the source file.

=== Advanced Rules

Any regular expression may be used as the rule pattern.  Additionally,
a proc may be used to calculate the name of the source file.  This
allows for complex patterns and sources.

The following rule is equivalent to the example above.

  rule( /\.o$/ => [
    proc {|task_name| task_name.sub(/\.[^.]+$/, '.c') }
  ]) do |t|
    sh "cc #{t.source} -c -o #{t.name}"
  end

*NOTE:* Because of a _quirk_ in Ruby syntax, parenthesis are
required on *rule* when the first argument is a regular expression.

The following rule might be used for Java files ...

  rule '.class' => [
    proc { |tn| tn.sub(/\.class$/, '.java').sub(/^classes\//, 'src/') }
  ] do |t|
    java_compile(t.source, t.name)
  end

*NOTE:* +java_compile+ is a hypothetical method that invokes the
java compiler.

== Importing Dependencies

Any ruby file (including other rakefiles) can be included with a
standard Ruby +require+ command.  The rules and declarations in the
required file are just added to the definitions already accumulated.

Because the files are loaded _before_ the rake targets are evaluated,
the loaded files must be "ready to go" when the rake command is
invoked. This makes generated dependency files difficult to use. By
the time rake gets around to updating the dependencies file, it is too
late to load it.

The +import+ command addresses this by specifying a file to be loaded
_after_ the main rakefile is loaded, but _before_ any targets on the
command line are invoked. In addition, if the file name matches an
explicit task, that task is invoked before loading the file. This
allows dependency files to be generated and used in a single rake
command invocation.

Example:

  require 'rake/loaders/makefile'

  file ".depends.mf" => [SRC_LIST] do |t|
    sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}"
  end

  import ".depends.mf"

If ".depends" does not exist, or is out of date w.r.t. the source
files, a new ".depends" file is generated using +makedepend+ before
loading.

== Comments

Standard Ruby comments (beginning with "#") can be used anywhere it is
legal in Ruby source code, including comments for tasks and rules.
However, if you wish a task to be described using the "-T" switch,
then you need to use the +desc+ command to describe the task.

Example:

  desc "Create a distribution package"
  task package: %w[ ... ] do ... end

The "-T" switch (or "--tasks" if you like to spell things out) will
display a list of tasks that have a description.  If you use +desc+ to
describe your major tasks, you have a semi-automatic way of generating
a summary of your Rake file.

  $ rake -T
  (in /home/.../rake)
  rake clean            # Remove any temporary products.
  rake clobber          # Remove any generated file.
  rake clobber_rdoc     # Remove rdoc products
  rake contrib_test     # Run tests for contrib_test
  rake default          # Default Task
  rake install          # Install the application
  rake lines            # Count lines in the main rake file
  rake rdoc             # Build the rdoc HTML Files
  rake rerdoc           # Force a rebuild of the RDOC files
  rake test             # Run tests
  rake testall          # Run all test targets

Only tasks with descriptions will be displayed with the "-T" switch.
Use "-P" (or "--prereqs") to get a list of all tasks and their
prerequisites.

== Namespaces

As projects grow (and along with it, the number of tasks), it is
common for task names to begin to clash.  For example, if you might
have a main program and a set of sample programs built by a single
Rakefile.  By placing the tasks related to the main program in one
namespace, and the tasks for building the sample programs in a
different namespace, the task names will not interfere with each other.

For example:

  namespace "main" do
    task :build do
      # Build the main program
    end
  end

  namespace "samples" do
    task :build do
      # Build the sample programs
    end
  end

  task build: %w[main:build samples:build]

Referencing a task in a separate namespace can be achieved by
prefixing the task name with the namespace and a colon
(e.g. "main:build" refers to the :build task in the +main+ namespace).
Nested namespaces are supported.

Note that the name given in the +task+ command is always the unadorned
task name without any namespace prefixes.  The +task+ command always
defines a task in the current namespace.

=== FileTasks

File task names are not scoped by the namespace command.  Since the
name of a file task is the name of an actual file in the file system,
it makes little sense to include file task names in name space.
Directory tasks (created by the +directory+ command) are a type of
file task and are also not affected by namespaces.

=== Name Resolution

When looking up a task name, rake will start with the current
namespace and attempt to find the name there.  If it fails to find a
name in the current namespace, it will search the parent namespaces
until a match is found (or an error occurs if there is no match).

The "rake" namespace is a special implicit namespace that refers to
the toplevel names.

If a task name begins with a "^" character, the name resolution will
start in the parent namespace.  Multiple "^" characters are allowed.

Here is an example file with multiple :run tasks and how various names
resolve in different locations.

  task :run

  namespace "one" do
    task :run

    namespace "two" do
      task :run

      # :run            => "one:two:run"
      # "two:run"       => "one:two:run"
      # "one:two:run"   => "one:two:run"
      # "one:run"       => "one:run"
      # "^run"          => "one:run"
      # "^^run"         => "rake:run" (the top level task)
      # "rake:run"      => "rake:run" (the top level task)
    end

    # :run       => "one:run"
    # "two:run"  => "one:two:run"
    # "^run"     => "rake:run"
  end

  # :run           => "rake:run"
  # "one:run"      => "one:run"
  # "one:two:run"  => "one:two:run"

== FileLists

FileLists are the way Rake manages lists of files.  You can treat a
FileList as an array of strings for the most part, but FileLists
support some additional operations.

=== Creating a FileList

Creating a file list is easy.  Just give it the list of file names:

   fl = FileList['file1.rb', file2.rb']

Or give it a glob pattern:

   fl = FileList['*.rb']

== Odds and Ends

=== do/end versus { }

Blocks may be specified with either a +do+/+end+ pair, or with curly
braces in Ruby.  We _strongly_ recommend using +do+/+end+ to specify the
actions for tasks and rules.  Because the rakefile idiom tends to
leave off parentheses on the task/file/rule methods, unusual
ambiguities can arise when using curly braces.

For example, suppose that the method +object_files+ returns a list of
object files in a project.  Now we use +object_files+ as the
prerequisites in a rule specified with actions in curly braces.

  # DON'T DO THIS!
  file "prog" => object_files {
    # Actions are expected here (but it doesn't work)!
  }

Because curly braces have a higher precedence than +do+/+end+, the
block is associated with the +object_files+ method rather than the
+file+ method.

This is the proper way to specify the task ...

  # THIS IS FINE
  file "prog" => object_files do
    # Actions go here
  end

== Rakefile Path

When issuing the +rake+ command in a terminal, Rake will look
for a Rakefile in the current directory. If a Rakefile  is not found,
it will search parent directories until one is found.

For example, if a Rakefile resides in the +project/+ directory,
moving deeper into the project's directory tree will not have an adverse
effect on rake tasks:

  $ pwd
  /home/user/project

  $ cd lib/foo/bar
  $ pwd
  /home/user/project/lib/foo/bar

  $ rake run_pwd
  /home/user/project

As far as rake is concerned, all tasks are run from the directory in
which the Rakefile resides.

=== Multiple Rake Files

Not all tasks need to be included in a single Rakefile. Additional
rake files (with the file extension "+.rake+") may be placed in
+rakelib+ directory located at the top level of a project (i.e.
the same directory that contains the main +Rakefile+).

Also, rails projects may include additional rake files in the
+lib/tasks+ directory.

=== Clean and Clobber Tasks

Through <tt>require 'rake/clean'</tt> Rake provides +clean+ and +clobber+
tasks:

+clean+ ::
  Clean up the project by deleting scratch files and backup files.  Add files
  to the +CLEAN+ FileList to have the +clean+ target handle them.

+clobber+ ::
  Clobber all generated and non-source files in a project.  The task depends
  on +clean+, so all the +CLEAN+ files will be deleted as well as files in the
  +CLOBBER+ FileList.  The intent of this task is to return a project to its
  pristine, just unpacked state.

You can add file names or glob patterns to both the +CLEAN+ and +CLOBBER+
lists.

=== Phony Task

The phony task can be used as a dependency to allow file-based tasks to use
non-file-based-tasks as prerequisites without forcing them to rebuild.  You
can <tt>require 'rake/phony'</tt> to add the +phony+ task.

----

== See

* README.rdoc -- Main documentation for Rake.
PK""#[t�S	]]gems/rake-13.0.6/README.rdocnu�[���= RAKE -- Ruby Make

home :: https://github.com/ruby/rake
bugs :: https://github.com/ruby/rake/issues
docs :: https://ruby.github.io/rake

== Description

Rake is a Make-like program implemented in Ruby. Tasks and dependencies are
specified in standard Ruby syntax.

Rake has the following features:

* Rakefiles (rake's version of Makefiles) are completely defined in
  standard Ruby syntax.  No XML files to edit.  No quirky Makefile
  syntax to worry about (is that a tab or a space?)

* Users can specify tasks with prerequisites.

* Rake supports rule patterns to synthesize implicit tasks.

* Flexible FileLists that act like arrays but know about manipulating
  file names and paths.

* A library of prepackaged tasks to make building rakefiles easier. For example,
  tasks for building tarballs. (Formerly
  tasks for building RDoc, Gems, and publishing to FTP were included in rake but they're now
  available in RDoc, RubyGems, and rake-contrib respectively.)

* Supports parallel execution of tasks.

== Installation

=== Gem Installation

Download and install rake with the following.

  gem install rake

== Usage

=== Simple Example

First, you must write a "Rakefile" file which contains the build rules. Here's
a simple example:

  task default: %w[test]

  task :test do
    ruby "test/unittest.rb"
  end

This Rakefile has two tasks:

* A task named "test", which -- upon invocation -- will run a unit test file
  in Ruby.
* A task named "default". This task does nothing by itself, but it has exactly
  one dependency, namely the "test" task. Invoking the "default" task will
  cause Rake to invoke the "test" task as well.

Running the "rake" command without any options will cause it to run the
"default" task in the Rakefile:

  % ls
  Rakefile     test/
  % rake
  (in /home/some_user/Projects/rake)
  ruby test/unittest.rb
  ....unit test output here...

Type "rake --help" for all available options.

== Resources

=== Rake Information

* {Rake command-line}[link:doc/command_line_usage.rdoc]
* {Writing Rakefiles}[link:doc/rakefile.rdoc]
* The original {Rake announcement}[link:doc/rational.rdoc]
* Rake {glossary}[link:doc/glossary.rdoc]

=== Presentations and Articles about Rake

* Avdi Grimm's rake series:
  1. {Rake Basics}[https://avdi.codes/rake-part-1-basics/]
  2. {Rake File Lists}[https://avdi.codes/rake-part-2-file-lists-2/]
  3. {Rake Rules}[https://avdi.codes/rake-part-3-rules/]
  4. {Rake Pathmap}[https://avdi.codes/rake-part-4-pathmap/]
  5. {File Operations}[https://avdi.codes/rake-part-5-file-operations/]
  6. {Clean and Clobber}[https://avdi.codes/rake-part-6-clean-and-clobber/]
  7. {MultiTask}[https://avdi.codes/rake-part-7-multitask/]
* {Jim Weirich's 2003 RubyConf presentation}[https://web.archive.org/web/20140221123354/http://onestepback.org/articles/buildingwithrake/]
* Martin Fowler's article on Rake: https://martinfowler.com/articles/rake.html

== Other Make Re-envisionings ...

Rake is a late entry in the make replacement field.  Here are links to
other projects with similar (and not so similar) goals.

* https://directory.fsf.org/wiki/Bras -- Bras, one of earliest
  implementations of "make in a scripting language".
* http://www.a-a-p.org -- Make in Python
* https://ant.apache.org -- The Ant project
* https://search.cpan.org/search?query=PerlBuildSystem -- The Perl Build System
* https://www.rubydoc.info/gems/rant/0.5.7/frames -- Rant, another Ruby make tool.

== Credits

[<b>Jim Weirich</b>] Who originally created Rake.

[<b>Ryan Dlugosz</b>] For the initial conversation that sparked Rake.

[<b>Nobuyoshi Nakada <nobu@ruby-lang.org></b>] For the initial patch for rule support.

[<b>Tilman Sauerbeck <tilman@code-monkey.de></b>] For the recursive rule patch.

[<b>Eric Hodel</b>] For aid in maintaining rake.

[<b>Hiroshi SHIBATA</b>] Maintainer of Rake 10.X and Rake 11.X

== License

Rake is available under an MIT-style license.

:include: MIT-LICENSE

---

= Other stuff

Author::   Jim Weirich <jim.weirich@gmail.com>
Requires:: Ruby 2.0.0 or later
License::  Copyright Jim Weirich.
           Released under an MIT-style license.  See the MIT-LICENSE
           file included in the distribution.

== Warranty

This software is provided "as is" and without any express or implied
warranties, including, without limitation, the implied warranties of
merchantability and fitness for a particular purpose.

== Historical

Rake was originally created by Jim Weirich, who unfortunately passed away in
February 2014. This repository was originally hosted at
{github.com/jimweirich/rake}[https://github.com/jimweirich/rake/], however
with his passing, has been moved to {ruby/rake}[https://github.com/ruby/rake].

You can view Jim's last commit here:
https://github.com/jimweirich/rake/tree/336559f28f55bce418e2ebcc0a57548dcbac4025

You can {read more about Jim}[https://en.wikipedia.org/wiki/Jim_Weirich] at Wikipedia.

Thank you for this great tool, Jim. We'll remember you.
PK""#[W��gems/rake-13.0.6/MIT-LICENSEnu�[���Copyright (c) Jim Weirich

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

PK""#[Q��=rrgems/rake-13.0.6/lib/rake.rbnu�[���# frozen_string_literal: true
#--
# Copyright 2003-2010 by Jim Weirich (jim.weirich@gmail.com)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#++

module Rake; end

require "rake/version"

require "rbconfig"
require "fileutils"
require "singleton"
require "monitor"
require "optparse"
require "ostruct"

require "rake/ext/string"

require "rake/win32"

require "rake/linked_list"
require "rake/cpu_counter"
require "rake/scope"
require "rake/task_argument_error"
require "rake/rule_recursion_overflow_error"
require "rake/rake_module"
require "rake/trace_output"
require "rake/pseudo_status"
require "rake/task_arguments"
require "rake/invocation_chain"
require "rake/task"
require "rake/file_task"
require "rake/file_creation_task"
require "rake/multi_task"
require "rake/dsl_definition"
require "rake/file_utils_ext"
require "rake/file_list"
require "rake/default_loader"
require "rake/early_time"
require "rake/late_time"
require "rake/name_space"
require "rake/task_manager"
require "rake/application"
require "rake/backtrace"

$trace = false

# :stopdoc:
#
# Some top level Constants.

FileList = Rake::FileList
RakeFileUtils = Rake::FileUtilsExt
PK""#[���^		$gems/rake-13.0.6/lib/rake/promise.rbnu�[���# frozen_string_literal: true
module Rake

  # A Promise object represents a promise to do work (a chore) in the
  # future. The promise is created with a block and a list of
  # arguments for the block. Calling value will return the value of
  # the promised chore.
  #
  # Used by ThreadPool.
  #
  class Promise               # :nodoc: all
    NOT_SET = Object.new.freeze # :nodoc:

    attr_accessor :recorder

    # Create a promise to do the chore specified by the block.
    def initialize(args, &block)
      @mutex = Mutex.new
      @result = NOT_SET
      @error = NOT_SET
      @args = args
      @block = block
    end

    # Return the value of this promise.
    #
    # If the promised chore is not yet complete, then do the work
    # synchronously. We will wait.
    def value
      unless complete?
        stat :sleeping_on, item_id: object_id
        @mutex.synchronize do
          stat :has_lock_on, item_id: object_id
          chore
          stat :releasing_lock_on, item_id: object_id
        end
      end
      error? ? raise(@error) : @result
    end

    # If no one else is working this promise, go ahead and do the chore.
    def work
      stat :attempting_lock_on, item_id: object_id
      if @mutex.try_lock
        stat :has_lock_on, item_id: object_id
        chore
        stat :releasing_lock_on, item_id: object_id
        @mutex.unlock
      else
        stat :bailed_on, item_id: object_id
      end
    end

    private

    # Perform the chore promised
    def chore
      if complete?
        stat :found_completed, item_id: object_id
        return
      end
      stat :will_execute, item_id: object_id
      begin
        @result = @block.call(*@args)
      rescue Exception => e
        @error = e
      end
      stat :did_execute, item_id: object_id
      discard
    end

    # Do we have a result for the promise
    def result?
      !@result.equal?(NOT_SET)
    end

    # Did the promise throw an error
    def error?
      !@error.equal?(NOT_SET)
    end

    # Are we done with the promise
    def complete?
      result? || error?
    end

    # free up these items for the GC
    def discard
      @args = nil
      @block = nil
    end

    # Record execution statistics if there is a recorder
    def stat(*args)
      @recorder.call(*args) if @recorder
    end

  end

end
PK""#[zWBd��$gems/rake-13.0.6/lib/rake/version.rbnu�[���# frozen_string_literal: true
module Rake
  VERSION = "13.0.6"

  module Version # :nodoc: all
    MAJOR, MINOR, BUILD, *OTHER = Rake::VERSION.split "."

    NUMBERS = [MAJOR, MINOR, BUILD, *OTHER]
  end
end
PK#"#[0Z�R��+gems/rake-13.0.6/lib/rake/private_reader.rbnu�[���# frozen_string_literal: true
module Rake

  # Include PrivateReader to use +private_reader+.
  module PrivateReader           # :nodoc: all

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods

      # Declare a list of private accessors
      def private_reader(*names)
        attr_reader(*names)
        private(*names)
      end
    end

  end
end
PK#"#[����7gems/rake-13.0.6/lib/rake/invocation_exception_mixin.rbnu�[���# frozen_string_literal: true
module Rake
  module InvocationExceptionMixin
    # Return the invocation chain (list of Rake tasks) that were in
    # effect when this exception was detected by rake.  May be null if
    # no tasks were active.
    def chain
      @rake_invocation_chain ||= nil
    end

    # Set the invocation chain in effect when this exception was
    # detected.
    def chain=(value)
      @rake_invocation_chain = value
    end
  end
end
PK#"#[F-�
��+gems/rake-13.0.6/lib/rake/dsl_definition.rbnu�[���# frozen_string_literal: true
# Rake DSL functions.
require "rake/file_utils_ext"

module Rake

  ##
  # DSL is a module that provides #task, #desc, #namespace, etc.  Use this
  # when you'd like to use rake outside the top level scope.
  #
  # For a Rakefile you run from the command line this module is automatically
  # included.

  module DSL

    #--
    # Include the FileUtils file manipulation functions in the top
    # level module, but mark them private so that they don't
    # unintentionally define methods on other objects.
    #++

    include FileUtilsExt
    private(*FileUtils.instance_methods(false))
    private(*FileUtilsExt.instance_methods(false))

    private

    # :call-seq:
    #   task(task_name)
    #   task(task_name: dependencies)
    #   task(task_name, arguments => dependencies)
    #
    # Declare a basic task.  The +task_name+ is always the first argument.  If
    # the task name contains a ":" it is defined in that namespace.
    #
    # The +dependencies+ may be a single task name or an Array of task names.
    # The +argument+ (a single name) or +arguments+ (an Array of names) define
    # the arguments provided to the task.
    #
    # The task, argument and dependency names may be either symbols or
    # strings.
    #
    # A task with a single dependency:
    #
    #   task clobber: %w[clean] do
    #     rm_rf "html"
    #   end
    #
    # A task with an argument and a dependency:
    #
    #   task :package, [:version] => :test do |t, args|
    #     # ...
    #   end
    #
    # To invoke this task from the command line:
    #
    #   $ rake package[1.2.3]
    #
    def task(*args, &block) # :doc:
      Rake::Task.define_task(*args, &block)
    end

    # Declare a file task.
    #
    # Example:
    #   file "config.cfg" => ["config.template"] do
    #     open("config.cfg", "w") do |outfile|
    #       open("config.template") do |infile|
    #         while line = infile.gets
    #           outfile.puts line
    #         end
    #       end
    #     end
    #  end
    #
    def file(*args, &block) # :doc:
      Rake::FileTask.define_task(*args, &block)
    end

    # Declare a file creation task.
    # (Mainly used for the directory command).
    def file_create(*args, &block)
      Rake::FileCreationTask.define_task(*args, &block)
    end

    # Declare a set of files tasks to create the given directories on
    # demand.
    #
    # Example:
    #   directory "testdata/doc"
    #
    def directory(*args, &block) # :doc:
      result = file_create(*args, &block)
      dir, _ = *Rake.application.resolve_args(args)
      dir = Rake.from_pathname(dir)
      Rake.each_dir_parent(dir) do |d|
        file_create d do |t|
          mkdir_p t.name unless File.exist?(t.name)
        end
      end
      result
    end

    # Declare a task that performs its prerequisites in
    # parallel. Multitasks does *not* guarantee that its prerequisites
    # will execute in any given order (which is obvious when you think
    # about it)
    #
    # Example:
    #   multitask deploy: %w[deploy_gem deploy_rdoc]
    #
    def multitask(*args, &block) # :doc:
      Rake::MultiTask.define_task(*args, &block)
    end

    # Create a new rake namespace and use it for evaluating the given
    # block.  Returns a NameSpace object that can be used to lookup
    # tasks defined in the namespace.
    #
    # Example:
    #
    #   ns = namespace "nested" do
    #     # the "nested:run" task
    #     task :run
    #   end
    #   task_run = ns[:run] # find :run in the given namespace.
    #
    # Tasks can also be defined in a namespace by using a ":" in the task
    # name:
    #
    #   task "nested:test" do
    #     # ...
    #   end
    #
    def namespace(name=nil, &block) # :doc:
      name = name.to_s if name.kind_of?(Symbol)
      name = name.to_str if name.respond_to?(:to_str)
      unless name.kind_of?(String) || name.nil?
        raise ArgumentError, "Expected a String or Symbol for a namespace name"
      end
      Rake.application.in_namespace(name, &block)
    end

    # Declare a rule for auto-tasks.
    #
    # Example:
    #  rule '.o' => '.c' do |t|
    #    sh 'cc', '-o', t.name, t.source
    #  end
    #
    def rule(*args, &block) # :doc:
      Rake::Task.create_rule(*args, &block)
    end

    # Describes the next rake task.  Duplicate descriptions are discarded.
    # Descriptions are shown with <code>rake -T</code> (up to the first
    # sentence) and <code>rake -D</code> (the entire description).
    #
    # Example:
    #   desc "Run the Unit Tests"
    #   task test: [:build]
    #     # ... run tests
    #   end
    #
    def desc(description) # :doc:
      Rake.application.last_description = description
    end

    # Import the partial Rakefiles +fn+.  Imported files are loaded
    # _after_ the current file is completely loaded.  This allows the
    # import statement to appear anywhere in the importing file, and yet
    # allowing the imported files to depend on objects defined in the
    # importing file.
    #
    # A common use of the import statement is to include files
    # containing dependency declarations.
    #
    # See also the --rakelibdir command line option.
    #
    # Example:
    #   import ".depend", "my_rules"
    #
    def import(*fns) # :doc:
      fns.each do |fn|
        Rake.application.add_import(fn)
      end
    end
  end
  extend FileUtilsExt
end

# Extend the main object with the DSL commands. This allows top-level
# calls to task, etc. to work from a Rakefile without polluting the
# object inheritance tree.
self.extend Rake::DSL
PK#"#[���Q��(gems/rake-13.0.6/lib/rake/rake_module.rbnu�[���# frozen_string_literal: true
require "rake/application"

module Rake

  class << self
    # Current Rake Application
    def application
      @application ||= Rake::Application.new
    end

    # Set the current Rake application object.
    def application=(app)
      @application = app
    end

    def suggested_thread_count # :nodoc:
      @cpu_count ||= Rake::CpuCounter.count
      @cpu_count + 4
    end

    # Return the original directory where the Rake application was started.
    def original_dir
      application.original_dir
    end

    # Load a rakefile.
    def load_rakefile(path)
      load(path)
    end

    # Add files to the rakelib list
    def add_rakelib(*files)
      application.options.rakelib ||= []
      application.options.rakelib.concat(files)
    end

    # Make +block_application+ the default rake application inside a block so
    # you can load rakefiles into a different application.
    #
    # This is useful when you want to run rake tasks inside a library without
    # running rake in a sub-shell.
    #
    # Example:
    #
    #   Dir.chdir 'other/directory'
    #
    #   other_rake = Rake.with_application do |rake|
    #     rake.load_rakefile
    #   end
    #
    #   puts other_rake.tasks

    def with_application(block_application = Rake::Application.new)
      orig_application = Rake.application

      Rake.application = block_application

      yield block_application

      block_application
    ensure
      Rake.application = orig_application
    end
  end

end
PK#"#[E��.��$gems/rake-13.0.6/lib/rake/tasklib.rbnu�[���# frozen_string_literal: true
require "rake"

module Rake

  # Base class for Task Libraries.
  class TaskLib
    include Cloneable
    include Rake::DSL
  end

end
PK#"#[)lq((gems/rake-13.0.6/lib/rake/packagetask.rbnu�[���# frozen_string_literal: true
# Define a package task library to aid in the definition of
# redistributable package files.

require "rake"
require "rake/tasklib"

module Rake

  # Create a packaging task that will package the project into
  # distributable files (e.g zip archive or tar files).
  #
  # The PackageTask will create the following targets:
  #
  # +:package+ ::
  #   Create all the requested package files.
  #
  # +:clobber_package+ ::
  #   Delete all the package files.  This target is automatically
  #   added to the main clobber target.
  #
  # +:repackage+ ::
  #   Rebuild the package files from scratch, even if they are not out
  #   of date.
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tgz"</tt> ::
  #   Create a gzipped tar package (if <em>need_tar</em> is true).
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.gz"</tt> ::
  #   Create a gzipped tar package (if <em>need_tar_gz</em> is true).
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.tar.bz2"</tt> ::
  #   Create a bzip2'd tar package (if <em>need_tar_bz2</em> is true).
  #
  # <tt>"<em>package_dir</em>/<em>name</em>-<em>version</em>.zip"</tt> ::
  #   Create a zip package archive (if <em>need_zip</em> is true).
  #
  # Example:
  #
  #   Rake::PackageTask.new("rake", "1.2.3") do |p|
  #     p.need_tar = true
  #     p.package_files.include("lib/**/*.rb")
  #   end
  #
  class PackageTask < TaskLib
    # Name of the package (from the GEM Spec).
    attr_accessor :name

    # Version of the package (e.g. '1.3.2').
    attr_accessor :version

    # Directory used to store the package files (default is 'pkg').
    attr_accessor :package_dir

    # True if a gzipped tar file (tgz) should be produced (default is
    # false).
    attr_accessor :need_tar

    # True if a gzipped tar file (tar.gz) should be produced (default
    # is false).
    attr_accessor :need_tar_gz

    # True if a bzip2'd tar file (tar.bz2) should be produced (default
    # is false).
    attr_accessor :need_tar_bz2

    # True if a xz'd tar file (tar.xz) should be produced (default is false)
    attr_accessor :need_tar_xz

    # True if a zip file should be produced (default is false)
    attr_accessor :need_zip

    # List of files to be included in the package.
    attr_accessor :package_files

    # Tar command for gzipped or bzip2ed archives.  The default is 'tar'.
    attr_accessor :tar_command

    # Zip command for zipped archives.  The default is 'zip'.
    attr_accessor :zip_command

    # True if parent directory should be omited (default is false)
    attr_accessor :without_parent_dir

    # Create a Package Task with the given name and version.  Use +:noversion+
    # as the version to build a package without a version or to provide a
    # fully-versioned package name.

    def initialize(name=nil, version=nil)
      init(name, version)
      yield self if block_given?
      define unless name.nil?
    end

    # Initialization that bypasses the "yield self" and "define" step.
    def init(name, version)
      @name = name
      @version = version
      @package_files = Rake::FileList.new
      @package_dir = "pkg"
      @need_tar = false
      @need_tar_gz = false
      @need_tar_bz2 = false
      @need_tar_xz = false
      @need_zip = false
      @tar_command = "tar"
      @zip_command = "zip"
      @without_parent_dir = false
    end

    # Create the tasks defined by this task library.
    def define
      fail "Version required (or :noversion)" if @version.nil?
      @version = nil if :noversion == @version

      desc "Build all the packages"
      task :package

      desc "Force a rebuild of the package files"
      task repackage: [:clobber_package, :package]

      desc "Remove package products"
      task :clobber_package do
        rm_r package_dir rescue nil
      end

      task clobber: [:clobber_package]

      [
        [need_tar, tgz_file, "z"],
        [need_tar_gz, tar_gz_file, "z"],
        [need_tar_bz2, tar_bz2_file, "j"],
        [need_tar_xz, tar_xz_file, "J"]
      ].each do |need, file, flag|
        if need
          task package: ["#{package_dir}/#{file}"]
          file "#{package_dir}/#{file}" =>
            [package_dir_path] + package_files do
            chdir(working_dir) { sh @tar_command, "#{flag}cvf", file, target_dir }
            mv "#{package_dir_path}/#{target_dir}", package_dir if without_parent_dir
          end
        end
      end

      if need_zip
        task package: ["#{package_dir}/#{zip_file}"]
        file "#{package_dir}/#{zip_file}" =>
          [package_dir_path] + package_files do
          chdir(working_dir) { sh @zip_command, "-r", zip_file, target_dir }
          mv "#{package_dir_path}/#{zip_file}", package_dir if without_parent_dir
        end
      end

      directory package_dir_path => @package_files do
        @package_files.each do |fn|
          f = File.join(package_dir_path, fn)
          fdir = File.dirname(f)
          mkdir_p(fdir) unless File.exist?(fdir)
          if File.directory?(fn)
            mkdir_p(f)
          else
            rm_f f
            safe_ln(fn, f)
          end
        end
      end
      self
    end

    # The name of this package

    def package_name
      @version ? "#{@name}-#{@version}" : @name
    end

    # The directory this package will be built in

    def package_dir_path
      "#{package_dir}/#{package_name}"
    end

    # The package name with .tgz added

    def tgz_file
      "#{package_name}.tgz"
    end

    # The package name with .tar.gz added

    def tar_gz_file
      "#{package_name}.tar.gz"
    end

    # The package name with .tar.bz2 added

    def tar_bz2_file
      "#{package_name}.tar.bz2"
    end

    # The package name with .tar.xz added

    def tar_xz_file
      "#{package_name}.tar.xz"
    end

    # The package name with .zip added

    def zip_file
      "#{package_name}.zip"
    end

    def working_dir
      without_parent_dir ? package_dir_path : package_dir
    end

    # target directory relative to working_dir
    def target_dir
      without_parent_dir ? "." : package_name
    end
  end

end
PK#"#[��l��/gems/rake-13.0.6/lib/rake/file_creation_task.rbnu�[���# frozen_string_literal: true
require "rake/file_task"
require "rake/early_time"

module Rake

  # A FileCreationTask is a file task that when used as a dependency will be
  # needed if and only if the file has not been created.  Once created, it is
  # not re-triggered if any of its dependencies are newer, nor does trigger
  # any rebuilds of tasks that depend on it whenever it is updated.
  #
  class FileCreationTask < FileTask
    # Is this file task needed?  Yes if it doesn't exist.
    def needed?
      !File.exist?(name)
    end

    # Time stamp for file creation task.  This time stamp is earlier
    # than any other time stamp.
    def timestamp
      Rake::EARLY
    end
  end

end
PK#"#[��K\��-gems/rake-13.0.6/lib/rake/invocation_chain.rbnu�[���# frozen_string_literal: true
module Rake

  # InvocationChain tracks the chain of task invocations to detect
  # circular dependencies.
  class InvocationChain < LinkedList

    # Is the invocation already in the chain?
    def member?(invocation)
      head == invocation || tail.member?(invocation)
    end

    # Append an invocation to the chain of invocations. It is an error
    # if the invocation already listed.
    def append(invocation)
      if member?(invocation)
        fail RuntimeError, "Circular dependency detected: #{to_s} => #{invocation}"
      end
      conj(invocation)
    end

    # Convert to string, ie: TOP => invocation => invocation
    def to_s
      "#{prefix}#{head}"
    end

    # Class level append.
    def self.append(invocation, chain)
      chain.append(invocation)
    end

    private

    def prefix
      "#{tail} => "
    end

    # Null object for an empty chain.
    class EmptyInvocationChain < LinkedList::EmptyLinkedList
      @parent = InvocationChain

      def member?(obj)
        false
      end

      def append(invocation)
        conj(invocation)
      end

      def to_s
        "TOP"
      end
    end

    EMPTY = EmptyInvocationChain.new
  end
end
PK#"#[ƋK�b�b(gems/rake-13.0.6/lib/rake/application.rbnu�[���# frozen_string_literal: true
require "optparse"

require "rake/task_manager"
require "rake/file_list"
require "rake/thread_pool"
require "rake/thread_history_display"
require "rake/trace_output"
require "rake/win32"

module Rake

  CommandLineOptionError = Class.new(StandardError)

  ##
  # Rake main application object.  When invoking +rake+ from the
  # command line, a Rake::Application object is created and run.

  class Application
    include TaskManager
    include TraceOutput

    # The name of the application (typically 'rake')
    attr_reader :name

    # The original directory where rake was invoked.
    attr_reader :original_dir

    # Name of the actual rakefile used.
    attr_reader :rakefile

    # Number of columns on the terminal
    attr_accessor :terminal_columns

    # List of the top level task names (task names from the command line).
    attr_reader :top_level_tasks

    # Override the detected TTY output state (mostly for testing)
    attr_writer :tty_output

    DEFAULT_RAKEFILES = [
      "rakefile",
      "Rakefile",
      "rakefile.rb",
      "Rakefile.rb"
    ].freeze

    # Initialize a Rake::Application object.
    def initialize
      super
      @name = "rake"
      @rakefiles = DEFAULT_RAKEFILES.dup
      @rakefile = nil
      @pending_imports = []
      @imported = []
      @loaders = {}
      @default_loader = Rake::DefaultLoader.new
      @original_dir = Dir.pwd
      @top_level_tasks = []
      add_loader("rb", DefaultLoader.new)
      add_loader("rf", DefaultLoader.new)
      add_loader("rake", DefaultLoader.new)
      @tty_output = STDOUT.tty?
      @terminal_columns = ENV["RAKE_COLUMNS"].to_i

      set_default_options
    end

    # Run the Rake application.  The run method performs the following
    # three steps:
    #
    # * Initialize the command line options (+init+).
    # * Define the tasks (+load_rakefile+).
    # * Run the top level tasks (+top_level+).
    #
    # If you wish to build a custom rake command, you should call
    # +init+ on your application.  Then define any tasks.  Finally,
    # call +top_level+ to run your top level tasks.
    def run(argv = ARGV)
      standard_exception_handling do
        init "rake", argv
        load_rakefile
        top_level
      end
    end

    # Initialize the command line parameters and app name.
    def init(app_name="rake", argv = ARGV)
      standard_exception_handling do
        @name = app_name
        begin
          args = handle_options argv
        rescue ArgumentError
          # Backward compatibility for capistrano
          args = handle_options
        end
        collect_command_line_tasks(args)
      end
    end

    # Find the rakefile and then load it and any pending imports.
    def load_rakefile
      standard_exception_handling do
        raw_load_rakefile
      end
    end

    # Run the top level tasks of a Rake application.
    def top_level
      run_with_threads do
        if options.show_tasks
          display_tasks_and_comments
        elsif options.show_prereqs
          display_prerequisites
        else
          top_level_tasks.each { |task_name| invoke_task(task_name) }
        end
      end
    end

    # Run the given block with the thread startup and shutdown.
    def run_with_threads
      thread_pool.gather_history if options.job_stats == :history

      yield

      thread_pool.join
      if options.job_stats
        stats = thread_pool.statistics
        puts "Maximum active threads: #{stats[:max_active_threads]} + main"
        puts "Total threads in play:  #{stats[:total_threads_in_play]} + main"
      end
      ThreadHistoryDisplay.new(thread_pool.history).show if
        options.job_stats == :history
    end

    # Add a loader to handle imported files ending in the extension
    # +ext+.
    def add_loader(ext, loader)
      ext = ".#{ext}" unless ext =~ /^\./
      @loaders[ext] = loader
    end

    # Application options from the command line
    def options
      @options ||= OpenStruct.new
    end

    # Return the thread pool used for multithreaded processing.
    def thread_pool             # :nodoc:
      @thread_pool ||= ThreadPool.new(options.thread_pool_size || Rake.suggested_thread_count-1)
    end

    # internal ----------------------------------------------------------------

    # Invokes a task with arguments that are extracted from +task_string+
    def invoke_task(task_string) # :nodoc:
      name, args = parse_task_string(task_string)
      t = self[name]
      t.invoke(*args)
    end

    def parse_task_string(string) # :nodoc:
      /^([^\[]+)(?:\[(.*)\])$/ =~ string.to_s

      name           = $1
      remaining_args = $2

      return string, [] unless name
      return name,   [] if     remaining_args.empty?

      args = []

      begin
        /\s*((?:[^\\,]|\\.)*?)\s*(?:,\s*(.*))?$/ =~ remaining_args

        remaining_args = $2
        args << $1.gsub(/\\(.)/, '\1')
      end while remaining_args

      return name, args
    end

    # Provide standard exception handling for the given block.
    def standard_exception_handling # :nodoc:
      yield
    rescue SystemExit
      # Exit silently with current status
      raise
    rescue OptionParser::InvalidOption => ex
      $stderr.puts ex.message
      exit(false)
    rescue Exception => ex
      # Exit with error message
      display_error_message(ex)
      exit_because_of_exception(ex)
    end

    # Exit the program because of an unhandled exception.
    # (may be overridden by subclasses)
    def exit_because_of_exception(ex) # :nodoc:
      exit(false)
    end

    # Display the error message that caused the exception.
    def display_error_message(ex) # :nodoc:
      trace "#{name} aborted!"
      display_exception_details(ex)
      trace "Tasks: #{ex.chain}" if has_chain?(ex)
      trace "(See full trace by running task with --trace)" unless
         options.backtrace
    end

    def display_exception_details(ex) # :nodoc:
      display_exception_details_seen << ex

      display_exception_message_details(ex)
      display_exception_backtrace(ex)
      display_cause_details(ex.cause) if has_cause?(ex)
    end

    def display_cause_details(ex) # :nodoc:
      return if display_exception_details_seen.include? ex

      trace "\nCaused by:"
      display_exception_details(ex)
    end

    def display_exception_details_seen # :nodoc:
      Thread.current[:rake_display_exception_details_seen] ||= []
    end

    def has_cause?(ex) # :nodoc:
      ex.respond_to?(:cause) && ex.cause
    end

    def display_exception_message_details(ex) # :nodoc:
      if ex.instance_of?(RuntimeError)
        trace ex.message
      else
        trace "#{ex.class.name}: #{ex.message}"
      end
    end

    def display_exception_backtrace(ex) # :nodoc:
      if options.backtrace
        trace ex.backtrace.join("\n")
      else
        trace Backtrace.collapse(ex.backtrace).join("\n")
      end
    end

    # Warn about deprecated usage.
    #
    # Example:
    #    Rake.application.deprecate("import", "Rake.import", caller.first)
    #
    def deprecate(old_usage, new_usage, call_site) # :nodoc:
      unless options.ignore_deprecate
        $stderr.puts "WARNING: '#{old_usage}' is deprecated.  " +
          "Please use '#{new_usage}' instead.\n" +
          "    at #{call_site}"
      end
    end

    # Does the exception have a task invocation chain?
    def has_chain?(exception) # :nodoc:
      exception.respond_to?(:chain) && exception.chain
    end
    private :has_chain?

    # True if one of the files in RAKEFILES is in the current directory.
    # If a match is found, it is copied into @rakefile.
    def have_rakefile # :nodoc:
      @rakefiles.each do |fn|
        if File.exist?(fn)
          others = FileList.glob(fn, File::FNM_CASEFOLD)
          return others.size == 1 ? others.first : fn
        elsif fn == ""
          return fn
        end
      end
      return nil
    end

    # True if we are outputting to TTY, false otherwise
    def tty_output? # :nodoc:
      @tty_output
    end

    # We will truncate output if we are outputting to a TTY or if we've been
    # given an explicit column width to honor
    def truncate_output? # :nodoc:
      tty_output? || @terminal_columns.nonzero?
    end

    # Display the tasks and comments.
    def display_tasks_and_comments # :nodoc:
      displayable_tasks = tasks.select { |t|
        (options.show_all_tasks || t.comment) &&
          t.name =~ options.show_task_pattern
      }
      case options.show_tasks
      when :tasks
        width = displayable_tasks.map { |t| t.name_with_args.length }.max || 10
        if truncate_output?
          max_column = terminal_width - name.size - width - 7
        else
          max_column = nil
        end

        displayable_tasks.each do |t|
          printf("#{name} %-#{width}s  # %s\n",
            t.name_with_args,
            max_column ? truncate(t.comment, max_column) : t.comment)
        end
      when :describe
        displayable_tasks.each do |t|
          puts "#{name} #{t.name_with_args}"
          comment = t.full_comment || ""
          comment.split("\n").each do |line|
            puts "    #{line}"
          end
          puts
        end
      when :lines
        displayable_tasks.each do |t|
          t.locations.each do |loc|
            printf "#{name} %-30s %s\n", t.name_with_args, loc
          end
        end
      else
        fail "Unknown show task mode: '#{options.show_tasks}'"
      end
    end

    def terminal_width # :nodoc:
      if @terminal_columns.nonzero?
        result = @terminal_columns
      else
        result = unix? ? dynamic_width : 80
      end
      (result < 10) ? 80 : result
    rescue
      80
    end

    # Calculate the dynamic width of the
    def dynamic_width # :nodoc:
      @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
    end

    def dynamic_width_stty # :nodoc:
      %x{stty size 2>/dev/null}.split[1].to_i
    end

    def dynamic_width_tput # :nodoc:
      %x{tput cols 2>/dev/null}.to_i
    end

    def unix? # :nodoc:
      RbConfig::CONFIG["host_os"] =~
        /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
    end

    def windows? # :nodoc:
      Win32.windows?
    end

    def truncate(string, width) # :nodoc:
      if string.nil?
        ""
      elsif string.length <= width
        string
      else
        (string[0, width - 3] || "") + "..."
      end
    end

    # Display the tasks and prerequisites
    def display_prerequisites # :nodoc:
      tasks.each do |t|
        puts "#{name} #{t.name}"
        t.prerequisites.each { |pre| puts "    #{pre}" }
      end
    end

    def trace(*strings) # :nodoc:
      options.trace_output ||= $stderr
      trace_on(options.trace_output, *strings)
    end

    def sort_options(options) # :nodoc:
      options.sort_by { |opt|
        opt.select { |o| o.is_a?(String) && o =~ /^-/ }.map(&:downcase).sort.reverse
      }
    end
    private :sort_options

    # A list of all the standard options used in rake, suitable for
    # passing to OptionParser.
    def standard_rake_options # :nodoc:
      sort_options(
        [
          ["--all", "-A",
            "Show all tasks, even uncommented ones (in combination with -T or -D)",
            lambda { |value|
              options.show_all_tasks = value
            }
          ],
          ["--backtrace=[OUT]",
            "Enable full backtrace.  OUT can be stderr (default) or stdout.",
            lambda { |value|
              options.backtrace = true
              select_trace_output(options, "backtrace", value)
            }
          ],
          ["--build-all", "-B",
           "Build all prerequisites, including those which are up-to-date.",
           lambda { |value|
             options.build_all = true
           }
          ],
          ["--comments",
            "Show commented tasks only",
            lambda { |value|
              options.show_all_tasks = !value
            }
          ],
          ["--describe", "-D [PATTERN]",
            "Describe the tasks (matching optional PATTERN), then exit.",
            lambda { |value|
              select_tasks_to_show(options, :describe, value)
            }
          ],
          ["--directory", "-C [DIRECTORY]",
            "Change to DIRECTORY before doing anything.",
            lambda { |value|
              Dir.chdir value
              @original_dir = Dir.pwd
            }
          ],
          ["--dry-run", "-n",
            "Do a dry run without executing actions.",
            lambda { |value|
              Rake.verbose(true)
              Rake.nowrite(true)
              options.dryrun = true
              options.trace = true
            }
          ],
          ["--execute", "-e CODE",
            "Execute some Ruby code and exit.",
            lambda { |value|
              eval(value)
              exit
            }
          ],
          ["--execute-print", "-p CODE",
            "Execute some Ruby code, print the result, then exit.",
            lambda { |value|
              puts eval(value)
              exit
            }
          ],
          ["--execute-continue",  "-E CODE",
            "Execute some Ruby code, " +
            "then continue with normal task processing.",
            lambda { |value| eval(value) }
          ],
          ["--jobs",  "-j [NUMBER]",
            "Specifies the maximum number of tasks to execute in parallel. " +
            "(default is number of CPU cores + 4)",
            lambda { |value|
              if value.nil? || value == ""
                value = Float::INFINITY
              elsif value =~ /^\d+$/
                value = value.to_i
              else
                value = Rake.suggested_thread_count
              end
              value = 1 if value < 1
              options.thread_pool_size = value - 1
            }
          ],
          ["--job-stats [LEVEL]",
            "Display job statistics. " +
            "LEVEL=history displays a complete job list",
            lambda { |value|
              if value =~ /^history/i
                options.job_stats = :history
              else
                options.job_stats = true
              end
            }
          ],
          ["--libdir", "-I LIBDIR",
            "Include LIBDIR in the search path for required modules.",
            lambda { |value| $:.push(value) }
          ],
          ["--multitask", "-m",
            "Treat all tasks as multitasks.",
            lambda { |value| options.always_multitask = true }
          ],
          ["--no-search", "--nosearch",
            "-N", "Do not search parent directories for the Rakefile.",
            lambda { |value| options.nosearch = true }
          ],
          ["--prereqs", "-P",
            "Display the tasks and dependencies, then exit.",
            lambda { |value| options.show_prereqs = true }
          ],
          ["--quiet", "-q",
            "Do not log messages to standard output.",
            lambda { |value| Rake.verbose(false) }
          ],
          ["--rakefile", "-f [FILENAME]",
            "Use FILENAME as the rakefile to search for.",
            lambda { |value|
              value ||= ""
              @rakefiles.clear
              @rakefiles << value
            }
          ],
          ["--rakelibdir", "--rakelib", "-R RAKELIBDIR",
            "Auto-import any .rake files in RAKELIBDIR. " +
            "(default is 'rakelib')",
            lambda { |value|
              options.rakelib = value.split(File::PATH_SEPARATOR)
            }
          ],
          ["--require", "-r MODULE",
            "Require MODULE before executing rakefile.",
            lambda { |value|
              begin
                require value
              rescue LoadError => ex
                begin
                  rake_require value
                rescue LoadError
                  raise ex
                end
              end
            }
          ],
          ["--rules",
            "Trace the rules resolution.",
            lambda { |value| options.trace_rules = true }
          ],
          ["--silent", "-s",
            "Like --quiet, but also suppresses the " +
            "'in directory' announcement.",
            lambda { |value|
              Rake.verbose(false)
              options.silent = true
            }
          ],
          ["--suppress-backtrace PATTERN",
            "Suppress backtrace lines matching regexp PATTERN. " +
            "Ignored if --trace is on.",
            lambda { |value|
              options.suppress_backtrace_pattern = Regexp.new(value)
            }
          ],
          ["--system",  "-g",
            "Using system wide (global) rakefiles " +
            "(usually '~/.rake/*.rake').",
            lambda { |value| options.load_system = true }
          ],
          ["--no-system", "--nosystem", "-G",
            "Use standard project Rakefile search paths, " +
            "ignore system wide rakefiles.",
            lambda { |value| options.ignore_system = true }
          ],
          ["--tasks", "-T [PATTERN]",
            "Display the tasks (matching optional PATTERN) " +
            "with descriptions, then exit. " +
            "-AT combination displays all of tasks contained no description.",
            lambda { |value|
              select_tasks_to_show(options, :tasks, value)
            }
          ],
          ["--trace=[OUT]", "-t",
            "Turn on invoke/execute tracing, enable full backtrace. " +
            "OUT can be stderr (default) or stdout.",
            lambda { |value|
              options.trace = true
              options.backtrace = true
              select_trace_output(options, "trace", value)
              Rake.verbose(true)
            }
          ],
          ["--verbose", "-v",
            "Log message to standard output.",
            lambda { |value| Rake.verbose(true) }
          ],
          ["--version", "-V",
            "Display the program version.",
            lambda { |value|
              puts "rake, version #{Rake::VERSION}"
              exit
            }
          ],
          ["--where", "-W [PATTERN]",
            "Describe the tasks (matching optional PATTERN), then exit.",
            lambda { |value|
              select_tasks_to_show(options, :lines, value)
              options.show_all_tasks = true
            }
          ],
          ["--no-deprecation-warnings", "-X",
            "Disable the deprecation warnings.",
            lambda { |value|
              options.ignore_deprecate = true
            }
          ],
        ])
    end

    def select_tasks_to_show(options, show_tasks, value) # :nodoc:
      options.show_tasks = show_tasks
      options.show_task_pattern = Regexp.new(value || "")
      Rake::TaskManager.record_task_metadata = true
    end
    private :select_tasks_to_show

    def select_trace_output(options, trace_option, value) # :nodoc:
      value = value.strip unless value.nil?
      case value
      when "stdout"
        options.trace_output = $stdout
      when "stderr", nil
        options.trace_output = $stderr
      else
        fail CommandLineOptionError,
          "Unrecognized --#{trace_option} option '#{value}'"
      end
    end
    private :select_trace_output

    # Read and handle the command line options.  Returns the command line
    # arguments that we didn't understand, which should (in theory) be just
    # task names and env vars.
    def handle_options(argv) # :nodoc:
      set_default_options

      OptionParser.new do |opts|
        opts.banner = "#{Rake.application.name} [-f rakefile] {options} targets..."
        opts.separator ""
        opts.separator "Options are ..."

        opts.on_tail("-h", "--help", "-H", "Display this help message.") do
          puts opts
          exit
        end

        standard_rake_options.each { |args| opts.on(*args) }
        opts.environment("RAKEOPT")
      end.parse(argv)
    end

    # Similar to the regular Ruby +require+ command, but will check
    # for *.rake files in addition to *.rb files.
    def rake_require(file_name, paths=$LOAD_PATH, loaded=$") # :nodoc:
      fn = file_name + ".rake"
      return false if loaded.include?(fn)
      paths.each do |path|
        full_path = File.join(path, fn)
        if File.exist?(full_path)
          Rake.load_rakefile(full_path)
          loaded << fn
          return true
        end
      end
      fail LoadError, "Can't find #{file_name}"
    end

    def find_rakefile_location # :nodoc:
      here = Dir.pwd
      until (fn = have_rakefile)
        Dir.chdir("..")
        return nil if Dir.pwd == here || options.nosearch
        here = Dir.pwd
      end
      [fn, here]
    ensure
      Dir.chdir(Rake.original_dir)
    end

    def print_rakefile_directory(location) # :nodoc:
      $stderr.puts "(in #{Dir.pwd})" unless
        options.silent or original_dir == location
    end

    def raw_load_rakefile # :nodoc:
      rakefile, location = find_rakefile_location
      if (!options.ignore_system) &&
          (options.load_system || rakefile.nil?) &&
          system_dir && File.directory?(system_dir)
        print_rakefile_directory(location)
        glob("#{system_dir}/*.rake") do |name|
          add_import name
        end
      else
        fail "No Rakefile found (looking for: #{@rakefiles.join(', ')})" if
          rakefile.nil?
        @rakefile = rakefile
        Dir.chdir(location)
        print_rakefile_directory(location)
        Rake.load_rakefile(File.expand_path(@rakefile)) if
          @rakefile && @rakefile != ""
        options.rakelib.each do |rlib|
          glob("#{rlib}/*.rake") do |name|
            add_import name
          end
        end
      end
      load_imports
    end

    def glob(path, &block) # :nodoc:
      FileList.glob(path.tr("\\", "/")).each(&block)
    end
    private :glob

    # The directory path containing the system wide rakefiles.
    def system_dir # :nodoc:
      @system_dir ||=
        begin
          if ENV["RAKE_SYSTEM"]
            ENV["RAKE_SYSTEM"]
          else
            standard_system_dir
          end
        end
    end

    # The standard directory containing system wide rake files.
    if Win32.windows?
      def standard_system_dir #:nodoc:
        Win32.win32_system_dir
      end
    else
      def standard_system_dir #:nodoc:
        File.join(File.expand_path("~"), ".rake")
      end
    end
    private :standard_system_dir

    # Collect the list of tasks on the command line.  If no tasks are
    # given, return a list containing only the default task.
    # Environmental assignments are processed at this time as well.
    #
    # `args` is the list of arguments to peruse to get the list of tasks.
    # It should be the command line that was given to rake, less any
    # recognised command-line options, which OptionParser.parse will
    # have taken care of already.
    def collect_command_line_tasks(args) # :nodoc:
      @top_level_tasks = []
      args.each do |arg|
        if arg =~ /^(\w+)=(.*)$/m
          ENV[$1] = $2
        else
          @top_level_tasks << arg unless arg =~ /^-/
        end
      end
      @top_level_tasks.push(default_task_name) if @top_level_tasks.empty?
    end

    # Default task name ("default").
    # (May be overridden by subclasses)
    def default_task_name # :nodoc:
      "default"
    end

    # Add a file to the list of files to be imported.
    def add_import(fn) # :nodoc:
      @pending_imports << fn
    end

    # Load the pending list of imported files.
    def load_imports # :nodoc:
      while fn = @pending_imports.shift
        next if @imported.member?(fn)
        fn_task = lookup(fn) and fn_task.invoke
        ext = File.extname(fn)
        loader = @loaders[ext] || @default_loader
        loader.load(fn)
        if fn_task = lookup(fn) and fn_task.needed?
          fn_task.reenable
          fn_task.invoke
          loader.load(fn)
        end
        @imported << fn
      end
    end

    def rakefile_location(backtrace=caller) # :nodoc:
      backtrace.map { |t| t[/([^:]+):/, 1] }

      re = /^#{@rakefile}$/
      re = /#{re.source}/i if windows?

      backtrace.find { |str| str =~ re } || ""
    end

    def set_default_options # :nodoc:
      options.always_multitask           = false
      options.backtrace                  = false
      options.build_all                  = false
      options.dryrun                     = false
      options.ignore_deprecate           = false
      options.ignore_system              = false
      options.job_stats                  = false
      options.load_system                = false
      options.nosearch                   = false
      options.rakelib                    = %w[rakelib]
      options.show_all_tasks             = false
      options.show_prereqs               = false
      options.show_task_pattern          = nil
      options.show_tasks                 = nil
      options.silent                     = false
      options.suppress_backtrace_pattern = nil
      options.thread_pool_size           = Rake.suggested_thread_count
      options.trace                      = false
      options.trace_output               = $stderr
      options.trace_rules                = false
    end

  end
end
PK#"#[���YY'gems/rake-13.0.6/lib/rake/multi_task.rbnu�[���# frozen_string_literal: true
module Rake

  # Same as a regular task, but the immediate prerequisites are done in
  # parallel using Ruby threads.
  #
  class MultiTask < Task
    private

    def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
      invoke_prerequisites_concurrently(task_args, invocation_chain)
    end
  end
end
PK#"#[yOu�rr'gems/rake-13.0.6/lib/rake/ext/string.rbnu�[���# frozen_string_literal: true
require "rake/ext/core"

class String

  rake_extension("ext") do
    # Replace the file extension with +newext+.  If there is no extension on
    # the string, append the new extension to the end.  If the new extension
    # is not given, or is the empty string, remove any existing extension.
    #
    # +ext+ is a user added method for the String class.
    #
    # This String extension comes from Rake
    def ext(newext="")
      return self.dup if [".", ".."].include? self
      if newext != ""
        newext = "." + newext unless newext =~ /^\./
      end
      self.chomp(File.extname(self)) << newext
    end
  end

  rake_extension("pathmap") do
    # Explode a path into individual components.  Used by +pathmap+.
    #
    # This String extension comes from Rake
    def pathmap_explode
      head, tail = File.split(self)
      return [self] if head == self
      return [tail] if head == "." || tail == "/"
      return [head, tail] if head == "/"
      return head.pathmap_explode + [tail]
    end
    protected :pathmap_explode

    # Extract a partial path from the path.  Include +n+ directories from the
    # front end (left hand side) if +n+ is positive.  Include |+n+|
    # directories from the back end (right hand side) if +n+ is negative.
    #
    # This String extension comes from Rake
    def pathmap_partial(n)
      dirs = File.dirname(self).pathmap_explode
      partial_dirs =
        if n > 0
          dirs[0...n]
        elsif n < 0
          dirs.reverse[0...-n].reverse
        else
          "."
        end
      File.join(partial_dirs)
    end
    protected :pathmap_partial

    # Perform the pathmap replacement operations on the given path. The
    # patterns take the form 'pat1,rep1;pat2,rep2...'.
    #
    # This String extension comes from Rake
    def pathmap_replace(patterns, &block)
      result = self
      patterns.split(";").each do |pair|
        pattern, replacement = pair.split(",")
        pattern = Regexp.new(pattern)
        if replacement == "*" && block_given?
          result = result.sub(pattern, &block)
        elsif replacement
          result = result.sub(pattern, replacement)
        else
          result = result.sub(pattern, "")
        end
      end
      result
    end
    protected :pathmap_replace

    # Map the path according to the given specification.  The specification
    # controls the details of the mapping.  The following special patterns are
    # recognized:
    #
    # <tt>%p</tt> :: The complete path.
    # <tt>%f</tt> :: The base file name of the path, with its file extension,
    #                but without any directories.
    # <tt>%n</tt> :: The file name of the path without its file extension.
    # <tt>%d</tt> :: The directory list of the path.
    # <tt>%x</tt> :: The file extension of the path.  An empty string if there
    #                is no extension.
    # <tt>%X</tt> :: Everything *but* the file extension.
    # <tt>%s</tt> :: The alternate file separator if defined, otherwise use #
    #                the standard file separator.
    # <tt>%%</tt> :: A percent sign.
    #
    # The <tt>%d</tt> specifier can also have a numeric prefix (e.g. '%2d').
    # If the number is positive, only return (up to) +n+ directories in the
    # path, starting from the left hand side.  If +n+ is negative, return (up
    # to) +n+ directories from the right hand side of the path.
    #
    # Examples:
    #
    #   'a/b/c/d/file.txt'.pathmap("%2d")   => 'a/b'
    #   'a/b/c/d/file.txt'.pathmap("%-2d")  => 'c/d'
    #
    # Also the <tt>%d</tt>, <tt>%p</tt>, <tt>%f</tt>, <tt>%n</tt>,
    # <tt>%x</tt>, and <tt>%X</tt> operators can take a pattern/replacement
    # argument to perform simple string substitutions on a particular part of
    # the path.  The pattern and replacement are separated by a comma and are
    # enclosed by curly braces.  The replacement spec comes after the %
    # character but before the operator letter.  (e.g. "%{old,new}d").
    # Multiple replacement specs should be separated by semi-colons (e.g.
    # "%{old,new;src,bin}d").
    #
    # Regular expressions may be used for the pattern, and back refs may be
    # used in the replacement text.  Curly braces, commas and semi-colons are
    # excluded from both the pattern and replacement text (let's keep parsing
    # reasonable).
    #
    # For example:
    #
    #    "src/org/onestepback/proj/A.java".pathmap("%{^src,class}X.class")
    #
    # returns:
    #
    #    "class/org/onestepback/proj/A.class"
    #
    # If the replacement text is '*', then a block may be provided to perform
    # some arbitrary calculation for the replacement.
    #
    # For example:
    #
    #   "/path/to/file.TXT".pathmap("%X%{.*,*}x") { |ext|
    #      ext.downcase
    #   }
    #
    # Returns:
    #
    #  "/path/to/file.txt"
    #
    # This String extension comes from Rake
    def pathmap(spec=nil, &block)
      return self if spec.nil?
      result = "".dup
      spec.scan(/%\{[^}]*\}-?\d*[sdpfnxX%]|%-?\d+d|%.|[^%]+/) do |frag|
        case frag
        when "%f"
          result << File.basename(self)
        when "%n"
          result << File.basename(self).ext
        when "%d"
          result << File.dirname(self)
        when "%x"
          result << File.extname(self)
        when "%X"
          result << self.ext
        when "%p"
          result << self
        when "%s"
          result << (File::ALT_SEPARATOR || File::SEPARATOR)
        when "%-"
          # do nothing
        when "%%"
          result << "%"
        when /%(-?\d+)d/
          result << pathmap_partial($1.to_i)
        when /^%\{([^}]*)\}(\d*[dpfnxX])/
          patterns, operator = $1, $2
          result << pathmap("%" + operator).pathmap_replace(patterns, &block)
        when /^%/
          fail ArgumentError, "Unknown pathmap specifier #{frag} in '#{spec}'"
        else
          result << frag
        end
      end
      result
    end
  end

end
PK#"#[u����%gems/rake-13.0.6/lib/rake/ext/core.rbnu�[���# frozen_string_literal: true
class Module
  # Check for an existing method in the current class before extending.  If
  # the method already exists, then a warning is printed and the extension is
  # not added.  Otherwise the block is yielded and any definitions in the
  # block will take effect.
  #
  # Usage:
  #
  #   class String
  #     rake_extension("xyz") do
  #       def xyz
  #         ...
  #       end
  #     end
  #   end
  #
  def rake_extension(method) # :nodoc:
    if method_defined?(method)
      $stderr.puts "WARNING: Possible conflict with Rake extension: " +
        "#{self}##{method} already exists"
    else
      yield
    end
  end
end
PK#"#[������(gems/rake-13.0.6/lib/rake/thread_pool.rbnu�[���# frozen_string_literal: true

require "rake/promise"

module Rake

  class ThreadPool # :nodoc: all

    # Creates a ThreadPool object.  The +thread_count+ parameter is the size
    # of the pool.
    def initialize(thread_count)
      require "set"
      @max_active_threads = [thread_count, 0].max
      @threads = Set.new
      @threads_mon = Monitor.new
      @queue = Queue.new
      @join_cond = @threads_mon.new_cond

      @history_start_time = nil
      @history = []
      @history_mon = Monitor.new
      @total_threads_in_play = 0
    end

    # Creates a future executed by the +ThreadPool+.
    #
    # The args are passed to the block when executing (similarly to
    # Thread#new) The return value is an object representing
    # a future which has been created and added to the queue in the
    # pool. Sending #value to the object will sleep the
    # current thread until the future is finished and will return the
    # result (or raise an exception thrown from the future)
    def future(*args, &block)
      promise = Promise.new(args, &block)
      promise.recorder = lambda { |*stats| stat(*stats) }

      @queue.enq promise
      stat :queued, item_id: promise.object_id
      start_thread
      promise
    end

    # Waits until the queue of futures is empty and all threads have exited.
    def join
      @threads_mon.synchronize do
        begin
          stat :joining
          @join_cond.wait unless @threads.empty?
          stat :joined
        rescue Exception => e
          stat :joined
          $stderr.puts e
          $stderr.print "Queue contains #{@queue.size} items. " +
            "Thread pool contains #{@threads.count} threads\n"
          $stderr.print "Current Thread #{Thread.current} status = " +
            "#{Thread.current.status}\n"
          $stderr.puts e.backtrace.join("\n")
          @threads.each do |t|
            $stderr.print "Thread #{t} status = #{t.status}\n"
            $stderr.puts t.backtrace.join("\n")
          end
          raise e
        end
      end
    end

    # Enable the gathering of history events.
    def gather_history          #:nodoc:
      @history_start_time = Time.now if @history_start_time.nil?
    end

    # Return a array of history events for the thread pool.
    #
    # History gathering must be enabled to be able to see the events
    # (see #gather_history). Best to call this when the job is
    # complete (i.e. after ThreadPool#join is called).
    def history                 # :nodoc:
      @history_mon.synchronize { @history.dup }.
        sort_by { |i| i[:time] }.
        each { |i| i[:time] -= @history_start_time }
    end

    # Return a hash of always collected statistics for the thread pool.
    def statistics              #  :nodoc:
      {
        total_threads_in_play: @total_threads_in_play,
        max_active_threads: @max_active_threads,
      }
    end

    private

    # processes one item on the queue. Returns true if there was an
    # item to process, false if there was no item
    def process_queue_item      #:nodoc:
      return false if @queue.empty?

      # Even though we just asked if the queue was empty, it
      # still could have had an item which by this statement
      # is now gone. For this reason we pass true to Queue#deq
      # because we will sleep indefinitely if it is empty.
      promise = @queue.deq(true)
      stat :dequeued, item_id: promise.object_id
      promise.work
      return true

    rescue ThreadError # this means the queue is empty
      false
    end

    def safe_thread_count
      @threads_mon.synchronize do
        @threads.count
      end
    end

    def start_thread # :nodoc:
      @threads_mon.synchronize do
        next unless @threads.count < @max_active_threads

        t = Thread.new do
          begin
            while safe_thread_count <= @max_active_threads
              break unless process_queue_item
            end
          ensure
            @threads_mon.synchronize do
              @threads.delete Thread.current
              stat :ended, thread_count: @threads.count
              @join_cond.broadcast if @threads.empty?
            end
          end
        end

        @threads << t
        stat(
          :spawned,
          new_thread: t.object_id,
          thread_count: @threads.count)
        @total_threads_in_play = @threads.count if
          @threads.count > @total_threads_in_play
      end
    end

    def stat(event, data=nil) # :nodoc:
      return if @history_start_time.nil?
      info = {
        event: event,
        data: data,
        time: Time.now,
        thread: Thread.current.object_id,
      }
      @history_mon.synchronize { @history << info }
    end

    # for testing only

    def __queue__ # :nodoc:
      @queue
    end
  end

end
PK#"#[|��^��%gems/rake-13.0.6/lib/rake/testtask.rbnu�[���# frozen_string_literal: true
require "rake"
require "rake/tasklib"

module Rake

  # Create a task that runs a set of tests.
  #
  # Example:
  #   require "rake/testtask"
  #
  #   Rake::TestTask.new do |t|
  #     t.libs << "test"
  #     t.test_files = FileList['test/test*.rb']
  #     t.verbose = true
  #   end
  #
  # If rake is invoked with a "TEST=filename" command line option,
  # then the list of test files will be overridden to include only the
  # filename specified on the command line.  This provides an easy way
  # to run just one test.
  #
  # If rake is invoked with a "TESTOPTS=options" command line option,
  # then the given options are passed to the test process after a
  # '--'.  This allows Test::Unit options to be passed to the test
  # suite.
  #
  # Examples:
  #
  #   rake test                           # run tests normally
  #   rake test TEST=just_one_file.rb     # run just one test file.
  #   rake test TESTOPTS="-v"             # run in verbose mode
  #   rake test TESTOPTS="--runner=fox"   # use the fox test runner
  #
  class TestTask < TaskLib

    # Name of test task. (default is :test)
    attr_accessor :name

    # List of directories added to $LOAD_PATH before running the
    # tests. (default is 'lib')
    attr_accessor :libs

    # True if verbose test output desired. (default is false)
    attr_accessor :verbose

    # Test options passed to the test suite.  An explicit
    # TESTOPTS=opts on the command line will override this. (default
    # is NONE)
    attr_accessor :options

    # Request that the tests be run with the warning flag set.
    # E.g. warning=true implies "ruby -w" used to run the tests.
    # (default is true)
    attr_accessor :warning

    # Glob pattern to match test files. (default is 'test/test*.rb')
    attr_accessor :pattern

    # Style of test loader to use.  Options are:
    #
    # * :rake -- Rake provided test loading script (default).
    # * :testrb -- Ruby provided test loading script.
    # * :direct -- Load tests using command line loader.
    #
    attr_accessor :loader

    # Array of command line options to pass to ruby when running test loader.
    attr_accessor :ruby_opts

    # Description of the test task. (default is 'Run tests')
    attr_accessor :description

    # Task prerequisites.
    attr_accessor :deps

    # Explicitly define the list of test files to be included in a
    # test.  +list+ is expected to be an array of file names (a
    # FileList is acceptable).  If both +pattern+ and +test_files+ are
    # used, then the list of test files is the union of the two.
    def test_files=(list)
      @test_files = list
    end

    # Create a testing task.
    def initialize(name=:test)
      @name = name
      @libs = ["lib"]
      @pattern = nil
      @options = nil
      @test_files = nil
      @verbose = false
      @warning = true
      @loader = :rake
      @ruby_opts = []
      @description = "Run tests" + (@name == :test ? "" : " for #{@name}")
      @deps = []
      if @name.is_a?(Hash)
        @deps = @name.values.first
        @name = @name.keys.first
      end
      yield self if block_given?
      @pattern = "test/test*.rb" if @pattern.nil? && @test_files.nil?
      define
    end

    # Create the tasks defined by this task lib.
    def define
      desc @description
      task @name => Array(deps) do
        FileUtilsExt.verbose(@verbose) do
          puts "Use TESTOPTS=\"--verbose\" to pass --verbose" \
            ", etc. to runners." if ARGV.include? "--verbose"
          args =
            "#{ruby_opts_string} #{run_code} " +
            "#{file_list_string} #{option_list}"
          ruby args do |ok, status|
            if !ok && status.respond_to?(:signaled?) && status.signaled?
              raise SignalException.new(status.termsig)
            elsif !ok
              status  = "Command failed with status (#{status.exitstatus})"
              details = ": [ruby #{args}]"
              message =
                if Rake.application.options.trace or @verbose
                  status + details
                else
                  status
                end

              fail message
            end
          end
        end
      end
      self
    end

    def option_list # :nodoc:
      (ENV["TESTOPTS"] ||
        ENV["TESTOPT"] ||
        ENV["TEST_OPTS"] ||
        ENV["TEST_OPT"] ||
        @options ||
        "")
    end

    def ruby_opts_string # :nodoc:
      opts = @ruby_opts.dup
      opts.unshift("-I\"#{lib_path}\"") unless @libs.empty?
      opts.unshift("-w") if @warning
      opts.join(" ")
    end

    def lib_path # :nodoc:
      @libs.join(File::PATH_SEPARATOR)
    end

    def file_list_string # :nodoc:
      file_list.map { |fn| "\"#{fn}\"" }.join(" ")
    end

    def file_list # :nodoc:
      if ENV["TEST"]
        FileList[ENV["TEST"]]
      else
        result = []
        result += @test_files.to_a if @test_files
        result += FileList[@pattern].to_a if @pattern
        result
      end
    end

    def ruby_version # :nodoc:
      RUBY_VERSION
    end

    def run_code # :nodoc:
      case @loader
      when :direct
        "-e \"ARGV.each{|f| require f}\""
      when :testrb
        "-S testrb"
      when :rake
        "#{__dir__}/rake_test_loader.rb"
      end
    end

  end
end
PK#"#[�l�??)gems/rake-13.0.6/lib/rake/trace_output.rbnu�[���# frozen_string_literal: true
module Rake
  module TraceOutput # :nodoc: all

    # Write trace output to output stream +out+.
    #
    # The write is done as a single IO call (to print) to lessen the
    # chance that the trace output is interrupted by other tasks also
    # producing output.
    def trace_on(out, *strings)
      sep = $\ || "\n"
      if strings.empty?
        output = sep
      else
        output = strings.map { |s|
          next if s.nil?
          s.end_with?(sep) ? s : s + sep
        }.join
      end
      out.print(output)
    end
  end
end
PK#"#[�R��2�2!gems/rake-13.0.6/lib/rake/task.rbnu�[���# frozen_string_literal: true
require "rake/invocation_exception_mixin"

module Rake

  ##
  # A Task is the basic unit of work in a Rakefile.  Tasks have associated
  # actions (possibly more than one) and a list of prerequisites.  When
  # invoked, a task will first ensure that all of its prerequisites have an
  # opportunity to run and then it will execute its own actions.
  #
  # Tasks are not usually created directly using the new method, but rather
  # use the +file+ and +task+ convenience methods.
  #
  class Task
    # List of prerequisites for a task.
    attr_reader :prerequisites
    alias prereqs prerequisites

    # List of order only prerequisites for a task.
    attr_reader :order_only_prerequisites

    # List of actions attached to a task.
    attr_reader :actions

    # Application owning this task.
    attr_accessor :application

    # Array of nested namespaces names used for task lookup by this task.
    attr_reader :scope

    # File/Line locations of each of the task definitions for this
    # task (only valid if the task was defined with the detect
    # location option set).
    attr_reader :locations

    # Has this task already been invoked?  Already invoked tasks
    # will be skipped unless you reenable them.
    attr_reader :already_invoked

    # Return task name
    def to_s
      name
    end

    def inspect # :nodoc:
      "<#{self.class} #{name} => [#{prerequisites.join(', ')}]>"
    end

    # List of sources for task.
    attr_writer :sources
    def sources
      if defined?(@sources)
        @sources
      else
        prerequisites
      end
    end

    # List of prerequisite tasks
    def prerequisite_tasks
      (prerequisites + order_only_prerequisites).map { |pre| lookup_prerequisite(pre) }
    end

    def lookup_prerequisite(prerequisite_name) # :nodoc:
      scoped_prerequisite_task = application[prerequisite_name, @scope]
      if scoped_prerequisite_task == self
        unscoped_prerequisite_task = application[prerequisite_name]
      end
      unscoped_prerequisite_task || scoped_prerequisite_task
    end
    private :lookup_prerequisite

    # List of all unique prerequisite tasks including prerequisite tasks'
    # prerequisites.
    # Includes self when cyclic dependencies are found.
    def all_prerequisite_tasks
      seen = {}
      collect_prerequisites(seen)
      seen.values
    end

    def collect_prerequisites(seen) # :nodoc:
      prerequisite_tasks.each do |pre|
        next if seen[pre.name]
        seen[pre.name] = pre
        pre.collect_prerequisites(seen)
      end
    end
    protected :collect_prerequisites

    # First source from a rule (nil if no sources)
    def source
      sources.first
    end

    # Create a task named +task_name+ with no actions or prerequisites. Use
    # +enhance+ to add actions and prerequisites.
    def initialize(task_name, app)
      @name            = task_name.to_s
      @prerequisites   = []
      @actions         = []
      @already_invoked = false
      @comments        = []
      @lock            = Monitor.new
      @application     = app
      @scope           = app.current_scope
      @arg_names       = nil
      @locations       = []
      @invocation_exception = nil
      @order_only_prerequisites = []
    end

    # Enhance a task with prerequisites or actions.  Returns self.
    def enhance(deps=nil, &block)
      @prerequisites |= deps if deps
      @actions << block if block_given?
      self
    end

    # Name of the task, including any namespace qualifiers.
    def name
      @name.to_s
    end

    # Name of task with argument list description.
    def name_with_args # :nodoc:
      if arg_description
        "#{name}#{arg_description}"
      else
        name
      end
    end

    # Argument description (nil if none).
    def arg_description # :nodoc:
      @arg_names ? "[#{arg_names.join(',')}]" : nil
    end

    # Name of arguments for this task.
    def arg_names
      @arg_names || []
    end

    # Reenable the task, allowing its tasks to be executed if the task
    # is invoked again.
    def reenable
      @already_invoked = false
      @invocation_exception = nil
    end

    # Clear the existing prerequisites, actions, comments, and arguments of a rake task.
    def clear
      clear_prerequisites
      clear_actions
      clear_comments
      clear_args
      self
    end

    # Clear the existing prerequisites of a rake task.
    def clear_prerequisites
      prerequisites.clear
      self
    end

    # Clear the existing actions on a rake task.
    def clear_actions
      actions.clear
      self
    end

    # Clear the existing comments on a rake task.
    def clear_comments
      @comments = []
      self
    end

    # Clear the existing arguments on a rake task.
    def clear_args
      @arg_names = nil
      self
    end

    # Invoke the task if it is needed.  Prerequisites are invoked first.
    def invoke(*args)
      task_args = TaskArguments.new(arg_names, args)
      invoke_with_call_chain(task_args, InvocationChain::EMPTY)
    end

    # Same as invoke, but explicitly pass a call chain to detect
    # circular dependencies.
    #
    # If multiple tasks depend on this
    # one in parallel, they will all fail if the first execution of
    # this task fails.
    def invoke_with_call_chain(task_args, invocation_chain)
      new_chain = Rake::InvocationChain.append(self, invocation_chain)
      @lock.synchronize do
        begin
          if application.options.trace
            application.trace "** Invoke #{name} #{format_trace_flags}"
          end

          if @already_invoked
            if @invocation_exception
              if application.options.trace
                application.trace "** Previous invocation of #{name} failed #{format_trace_flags}"
              end
              raise @invocation_exception
            else
              return
            end
          end

          @already_invoked = true

          invoke_prerequisites(task_args, new_chain)
          execute(task_args) if needed?
        rescue Exception => ex
          add_chain_to(ex, new_chain)
          @invocation_exception = ex
          raise ex
        end
      end
    end
    protected :invoke_with_call_chain

    def add_chain_to(exception, new_chain) # :nodoc:
      exception.extend(InvocationExceptionMixin) unless
        exception.respond_to?(:chain)
      exception.chain = new_chain if exception.chain.nil?
    end
    private :add_chain_to

    # Invoke all the prerequisites of a task.
    def invoke_prerequisites(task_args, invocation_chain) # :nodoc:
      if application.options.always_multitask
        invoke_prerequisites_concurrently(task_args, invocation_chain)
      else
        prerequisite_tasks.each { |p|
          prereq_args = task_args.new_scope(p.arg_names)
          p.invoke_with_call_chain(prereq_args, invocation_chain)
        }
      end
    end

    # Invoke all the prerequisites of a task in parallel.
    def invoke_prerequisites_concurrently(task_args, invocation_chain)# :nodoc:
      futures = prerequisite_tasks.map do |p|
        prereq_args = task_args.new_scope(p.arg_names)
        application.thread_pool.future(p) do |r|
          r.invoke_with_call_chain(prereq_args, invocation_chain)
        end
      end
      # Iterate in reverse to improve performance related to thread waiting and switching
      futures.reverse_each(&:value)
    end

    # Format the trace flags for display.
    def format_trace_flags
      flags = []
      flags << "first_time" unless @already_invoked
      flags << "not_needed" unless needed?
      flags.empty? ? "" : "(" + flags.join(", ") + ")"
    end
    private :format_trace_flags

    # Execute the actions associated with this task.
    def execute(args=nil)
      args ||= EMPTY_TASK_ARGS
      if application.options.dryrun
        application.trace "** Execute (dry run) #{name}"
        return
      end
      application.trace "** Execute #{name}" if application.options.trace
      application.enhance_with_matching_rule(name) if @actions.empty?
      if opts = Hash.try_convert(args) and !opts.empty?
        @actions.each { |act| act.call(self, args, **opts)}
      else
        @actions.each { |act| act.call(self, args)}
      end
    end

    # Is this task needed?
    def needed?
      true
    end

    # Timestamp for this task.  Basic tasks return the current time for their
    # time stamp.  Other tasks can be more sophisticated.
    def timestamp
      Time.now
    end

    # Add a description to the task.  The description can consist of an option
    # argument list (enclosed brackets) and an optional comment.
    def add_description(description)
      return unless description
      comment = description.strip
      add_comment(comment) if comment && !comment.empty?
    end

    def comment=(comment) # :nodoc:
      add_comment(comment)
    end

    def add_comment(comment) # :nodoc:
      return if comment.nil?
      @comments << comment unless @comments.include?(comment)
    end
    private :add_comment

    # Full collection of comments. Multiple comments are separated by
    # newlines.
    def full_comment
      transform_comments("\n")
    end

    # First line (or sentence) of all comments. Multiple comments are
    # separated by a "/".
    def comment
      transform_comments(" / ") { |c| first_sentence(c) }
    end

    # Transform the list of comments as specified by the block and
    # join with the separator.
    def transform_comments(separator, &block)
      if @comments.empty?
        nil
      else
        block ||= lambda { |c| c }
        @comments.map(&block).join(separator)
      end
    end
    private :transform_comments

    # Get the first sentence in a string. The sentence is terminated
    # by the first period, exclamation mark, or the end of the line.
    # Decimal points do not count as periods.
    def first_sentence(string)
      string.split(/(?<=\w)(\.|!)[ \t]|(\.$|!)|\n/).first
    end
    private :first_sentence

    # Set the names of the arguments for this task. +args+ should be
    # an array of symbols, one for each argument name.
    def set_arg_names(args)
      @arg_names = args.map(&:to_sym)
    end

    # Return a string describing the internal state of a task.  Useful for
    # debugging.
    def investigation
      result = "------------------------------\n".dup
      result << "Investigating #{name}\n"
      result << "class: #{self.class}\n"
      result <<  "task needed: #{needed?}\n"
      result <<  "timestamp: #{timestamp}\n"
      result << "pre-requisites: \n"
      prereqs = prerequisite_tasks
      prereqs.sort! { |a, b| a.timestamp <=> b.timestamp }
      prereqs.each do |p|
        result << "--#{p.name} (#{p.timestamp})\n"
      end
      latest_prereq = prerequisite_tasks.map(&:timestamp).max
      result <<  "latest-prerequisite time: #{latest_prereq}\n"
      result << "................................\n\n"
      return result
    end

    # Format dependencies parameter to pass to task.
    def self.format_deps(deps)
      deps = [deps] unless deps.respond_to?(:to_ary)
      deps.map { |d| Rake.from_pathname(d).to_s }
    end

    # Add order only dependencies.
    def |(deps)
      @order_only_prerequisites |= Task.format_deps(deps) - @prerequisites
      self
    end

    # ----------------------------------------------------------------
    # Rake Module Methods
    #
    class << self

      # Clear the task list.  This cause rake to immediately forget all the
      # tasks that have been assigned.  (Normally used in the unit tests.)
      def clear
        Rake.application.clear
      end

      # List of all defined tasks.
      def tasks
        Rake.application.tasks
      end

      # Return a task with the given name.  If the task is not currently
      # known, try to synthesize one from the defined rules.  If no rules are
      # found, but an existing file matches the task name, assume it is a file
      # task with no dependencies or actions.
      def [](task_name)
        Rake.application[task_name]
      end

      # TRUE if the task name is already defined.
      def task_defined?(task_name)
        Rake.application.lookup(task_name) != nil
      end

      # Define a task given +args+ and an option block.  If a rule with the
      # given name already exists, the prerequisites and actions are added to
      # the existing task.  Returns the defined task.
      def define_task(*args, &block)
        Rake.application.define_task(self, *args, &block)
      end

      # Define a rule for synthesizing tasks.
      def create_rule(*args, &block)
        Rake.application.create_rule(*args, &block)
      end

      # Apply the scope to the task name according to the rules for
      # this kind of task.  Generic tasks will accept the scope as
      # part of the name.
      def scope_name(scope, task_name)
        scope.path_with_task_name(task_name)
      end

    end # class << Rake::Task
  end # class Rake::Task
end
PK#"#[~�y�	�	+gems/rake-13.0.6/lib/rake/task_arguments.rbnu�[���# frozen_string_literal: true
module Rake

  ##
  # TaskArguments manage the arguments passed to a task.
  #
  class TaskArguments
    include Enumerable

    # Argument names
    attr_reader :names

    # Create a TaskArgument object with a list of argument +names+ and a set
    # of associated +values+.  +parent+ is the parent argument object.
    def initialize(names, values, parent=nil)
      @names = names
      @parent = parent
      @hash = {}
      @values = values
      names.each_with_index { |name, i|
        next if values[i].nil? || values[i] == ""
        @hash[name.to_sym] = values[i]
      }
    end

    # Retrieve the complete array of sequential values
    def to_a
      @values.dup
    end

    # Retrieve the list of values not associated with named arguments
    def extras
      @values[@names.length..-1] || []
    end

    # Create a new argument scope using the prerequisite argument
    # names.
    def new_scope(names)
      values = names.map { |n| self[n] }
      self.class.new(names, values + extras, self)
    end

    # Find an argument value by name or index.
    def [](index)
      lookup(index.to_sym)
    end

    # Specify a hash of default values for task arguments. Use the
    # defaults only if there is no specific value for the given
    # argument.
    def with_defaults(defaults)
      @hash = defaults.merge(@hash)
    end

    # Enumerates the arguments and their values
    def each(&block)
      @hash.each(&block)
    end

    # Extracts the argument values at +keys+
    def values_at(*keys)
      keys.map { |k| lookup(k) }
    end

    # Returns the value of the given argument via method_missing
    def method_missing(sym, *args)
      lookup(sym.to_sym)
    end

    # Returns a Hash of arguments and their values
    def to_hash
      @hash.dup
    end

    def to_s # :nodoc:
      inspect
    end

    def inspect # :nodoc:
      inspection = @hash.map do |k,v|
        "#{k.to_s}: #{v.to_s}"
      end.join(", ")

      "#<#{self.class} #{inspection}>"
    end

    # Returns true if +key+ is one of the arguments
    def has_key?(key)
      @hash.has_key?(key)
    end
    alias key? has_key?

    def fetch(*args, &block)
      @hash.fetch(*args, &block)
    end

    protected

    def lookup(name) # :nodoc:
      if @hash.has_key?(name)
        @hash[name]
      elsif @parent
        @parent.lookup(name)
      end
    end
  end

  EMPTY_TASK_ARGS = TaskArguments.new([], []) # :nodoc:
end
PK#"#[��i		+gems/rake-13.0.6/lib/rake/default_loader.rbnu�[���# frozen_string_literal: true
module Rake

  # Default Rakefile loader used by +import+.
  class DefaultLoader

    ##
    # Loads a rakefile into the current application from +fn+

    def load(fn)
      Rake.load_rakefile(File.expand_path(fn))
    end
  end

end
PK#"#[QG�"gems/rake-13.0.6/lib/rake/clean.rbnu�[���# frozen_string_literal: true
# The 'rake/clean' file defines two file lists (CLEAN and CLOBBER) and
# two rake tasks (:clean and :clobber).
#
# [:clean] Clean up the project by deleting scratch files and backup
#          files.  Add files to the CLEAN file list to have the :clean
#          target handle them.
#
# [:clobber] Clobber all generated and non-source files in a project.
#            The task depends on :clean, so all the clean files will
#            be deleted as well as files in the CLOBBER file list.
#            The intent of this task is to return a project to its
#            pristine, just unpacked state.

require "rake"

# :stopdoc:

module Rake
  module Cleaner
    extend FileUtils

    module_function

    def cleanup_files(file_names)
      file_names.each do |file_name|
        cleanup(file_name)
      end
    end

    def cleanup(file_name, **opts)
      begin
        opts = { verbose: Rake.application.options.trace }.merge(opts)
        rm_r file_name, **opts
      rescue StandardError => ex
        puts "Failed to remove #{file_name}: #{ex}" unless file_already_gone?(file_name)
      end
    end

    def file_already_gone?(file_name)
      return false if File.exist?(file_name)

      path = file_name
      prev = nil

      while path = File.dirname(path)
        return false if cant_be_deleted?(path)
        break if [prev, "."].include?(path)
        prev = path
      end
      true
    end
    private_class_method :file_already_gone?

    def cant_be_deleted?(path_name)
      File.exist?(path_name) &&
        (!File.readable?(path_name) || !File.executable?(path_name))
    end
    private_class_method :cant_be_deleted?
  end
end

CLEAN = ::Rake::FileList["**/*~", "**/*.bak", "**/core"]
CLEAN.clear_exclude.exclude { |fn|
  fn.pathmap("%f").downcase == "core" && File.directory?(fn)
}

desc "Remove any temporary products."
task :clean do
  Rake::Cleaner.cleanup_files(CLEAN)
end

CLOBBER = ::Rake::FileList.new

desc "Remove any generated files."
task clobber: [:clean] do
  Rake::Cleaner.cleanup_files(CLOBBER)
end
PK#"#[�d���1�1&gems/rake-13.0.6/lib/rake/file_list.rbnu�[���# frozen_string_literal: true
require "rake/cloneable"
require "rake/file_utils_ext"
require "rake/ext/string"

module Rake

  ##
  # A FileList is essentially an array with a few helper methods defined to
  # make file manipulation a bit easier.
  #
  # FileLists are lazy.  When given a list of glob patterns for possible files
  # to be included in the file list, instead of searching the file structures
  # to find the files, a FileList holds the pattern for latter use.
  #
  # This allows us to define a number of FileList to match any number of
  # files, but only search out the actual files when then FileList itself is
  # actually used.  The key is that the first time an element of the
  # FileList/Array is requested, the pending patterns are resolved into a real
  # list of file names.
  #
  class FileList

    include Cloneable

    # == Method Delegation
    #
    # The lazy evaluation magic of FileLists happens by implementing all the
    # array specific methods to call +resolve+ before delegating the heavy
    # lifting to an embedded array object (@items).
    #
    # In addition, there are two kinds of delegation calls.  The regular kind
    # delegates to the @items array and returns the result directly.  Well,
    # almost directly.  It checks if the returned value is the @items object
    # itself, and if so will return the FileList object instead.
    #
    # The second kind of delegation call is used in methods that normally
    # return a new Array object.  We want to capture the return value of these
    # methods and wrap them in a new FileList object.  We enumerate these
    # methods in the +SPECIAL_RETURN+ list below.

    # List of array methods (that are not in +Object+) that need to be
    # delegated.
    ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map(&:to_s)

    # List of additional methods that must be delegated.
    MUST_DEFINE = %w[inspect <=>]

    # List of methods that should not be delegated here (we define special
    # versions of them explicitly below).
    MUST_NOT_DEFINE = %w[to_a to_ary partition * <<]

    # List of delegated methods that return new array values which need
    # wrapping.
    SPECIAL_RETURN = %w[
      map collect sort sort_by select find_all reject grep
      compact flatten uniq values_at
      + - & |
    ]

    DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).map(&:to_s).sort.uniq

    # Now do the delegation.
    DELEGATING_METHODS.each do |sym|
      if SPECIAL_RETURN.include?(sym)
        ln = __LINE__ + 1
        class_eval %{
          def #{sym}(*args, &block)
            resolve
            result = @items.send(:#{sym}, *args, &block)
            self.class.new.import(result)
          end
        }, __FILE__, ln
      else
        ln = __LINE__ + 1
        class_eval %{
          def #{sym}(*args, &block)
            resolve
            result = @items.send(:#{sym}, *args, &block)
            result.object_id == @items.object_id ? self : result
          end
        }, __FILE__, ln
      end
    end

    GLOB_PATTERN = %r{[*?\[\{]}

    # Create a file list from the globbable patterns given.  If you wish to
    # perform multiple includes or excludes at object build time, use the
    # "yield self" pattern.
    #
    # Example:
    #   file_list = FileList.new('lib/**/*.rb', 'test/test*.rb')
    #
    #   pkg_files = FileList.new('lib/**/*') do |fl|
    #     fl.exclude(/\bCVS\b/)
    #   end
    #
    def initialize(*patterns)
      @pending_add = []
      @pending = false
      @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup
      @exclude_procs = DEFAULT_IGNORE_PROCS.dup
      @items = []
      patterns.each { |pattern| include(pattern) }
      yield self if block_given?
    end

    # Add file names defined by glob patterns to the file list.  If an array
    # is given, add each element of the array.
    #
    # Example:
    #   file_list.include("*.java", "*.cfg")
    #   file_list.include %w( math.c lib.h *.o )
    #
    def include(*filenames)
      # TODO: check for pending
      filenames.each do |fn|
        if fn.respond_to? :to_ary
          include(*fn.to_ary)
        else
          @pending_add << Rake.from_pathname(fn)
        end
      end
      @pending = true
      self
    end
    alias :add :include

    # Register a list of file name patterns that should be excluded from the
    # list.  Patterns may be regular expressions, glob patterns or regular
    # strings.  In addition, a block given to exclude will remove entries that
    # return true when given to the block.
    #
    # Note that glob patterns are expanded against the file system. If a file
    # is explicitly added to a file list, but does not exist in the file
    # system, then an glob pattern in the exclude list will not exclude the
    # file.
    #
    # Examples:
    #   FileList['a.c', 'b.c'].exclude("a.c") => ['b.c']
    #   FileList['a.c', 'b.c'].exclude(/^a/)  => ['b.c']
    #
    # If "a.c" is a file, then ...
    #   FileList['a.c', 'b.c'].exclude("a.*") => ['b.c']
    #
    # If "a.c" is not a file, then ...
    #   FileList['a.c', 'b.c'].exclude("a.*") => ['a.c', 'b.c']
    #
    def exclude(*patterns, &block)
      patterns.each do |pat|
        if pat.respond_to? :to_ary
          exclude(*pat.to_ary)
        else
          @exclude_patterns << Rake.from_pathname(pat)
        end
      end
      @exclude_procs << block if block_given?
      resolve_exclude unless @pending
      self
    end

    # Clear all the exclude patterns so that we exclude nothing.
    def clear_exclude
      @exclude_patterns = []
      @exclude_procs = []
      self
    end

    # A FileList is equal through array equality.
    def ==(array)
      to_ary == array
    end

    # Return the internal array object.
    def to_a
      resolve
      @items
    end

    # Return the internal array object.
    def to_ary
      to_a
    end

    # Lie about our class.
    def is_a?(klass)
      klass == Array || super(klass)
    end
    alias kind_of? is_a?

    # Redefine * to return either a string or a new file list.
    def *(other)
      result = @items * other
      case result
      when Array
        self.class.new.import(result)
      else
        result
      end
    end

    def <<(obj)
      resolve
      @items << Rake.from_pathname(obj)
      self
    end

    # Resolve all the pending adds now.
    def resolve
      if @pending
        @pending = false
        @pending_add.each do |fn| resolve_add(fn) end
        @pending_add = []
        resolve_exclude
      end
      self
    end

    def resolve_add(fn) # :nodoc:
      case fn
      when GLOB_PATTERN
        add_matching(fn)
      else
        self << fn
      end
    end
    private :resolve_add

    def resolve_exclude # :nodoc:
      reject! { |fn| excluded_from_list?(fn) }
      self
    end
    private :resolve_exclude

    # Return a new FileList with the results of running +sub+ against each
    # element of the original list.
    #
    # Example:
    #   FileList['a.c', 'b.c'].sub(/\.c$/, '.o')  => ['a.o', 'b.o']
    #
    def sub(pat, rep)
      inject(self.class.new) { |res, fn| res << fn.sub(pat, rep) }
    end

    # Return a new FileList with the results of running +gsub+ against each
    # element of the original list.
    #
    # Example:
    #   FileList['lib/test/file', 'x/y'].gsub(/\//, "\\")
    #      => ['lib\\test\\file', 'x\\y']
    #
    def gsub(pat, rep)
      inject(self.class.new) { |res, fn| res << fn.gsub(pat, rep) }
    end

    # Same as +sub+ except that the original file list is modified.
    def sub!(pat, rep)
      each_with_index { |fn, i| self[i] = fn.sub(pat, rep) }
      self
    end

    # Same as +gsub+ except that the original file list is modified.
    def gsub!(pat, rep)
      each_with_index { |fn, i| self[i] = fn.gsub(pat, rep) }
      self
    end

    # Apply the pathmap spec to each of the included file names, returning a
    # new file list with the modified paths.  (See String#pathmap for
    # details.)
    def pathmap(spec=nil, &block)
      collect { |fn| fn.pathmap(spec, &block) }
    end

    # Return a new FileList with <tt>String#ext</tt> method applied to
    # each member of the array.
    #
    # This method is a shortcut for:
    #
    #    array.collect { |item| item.ext(newext) }
    #
    # +ext+ is a user added method for the Array class.
    def ext(newext="")
      collect { |fn| fn.ext(newext) }
    end

    # Grep each of the files in the filelist using the given pattern. If a
    # block is given, call the block on each matching line, passing the file
    # name, line number, and the matching line of text.  If no block is given,
    # a standard emacs style file:linenumber:line message will be printed to
    # standard out.  Returns the number of matched items.
    def egrep(pattern, *options)
      matched = 0
      each do |fn|
        begin
          File.open(fn, "r", *options) do |inf|
            count = 0
            inf.each do |line|
              count += 1
              if pattern.match(line)
                matched += 1
                if block_given?
                  yield fn, count, line
                else
                  puts "#{fn}:#{count}:#{line}"
                end
              end
            end
          end
        rescue StandardError => ex
          $stderr.puts "Error while processing '#{fn}': #{ex}"
        end
      end
      matched
    end

    # Return a new file list that only contains file names from the current
    # file list that exist on the file system.
    def existing
      select { |fn| File.exist?(fn) }.uniq
    end

    # Modify the current file list so that it contains only file name that
    # exist on the file system.
    def existing!
      resolve
      @items = @items.select { |fn| File.exist?(fn) }.uniq
      self
    end

    # FileList version of partition.  Needed because the nested arrays should
    # be FileLists in this version.
    def partition(&block)       # :nodoc:
      resolve
      result = @items.partition(&block)
      [
        self.class.new.import(result[0]),
        self.class.new.import(result[1]),
      ]
    end

    # Convert a FileList to a string by joining all elements with a space.
    def to_s
      resolve
      self.join(" ")
    end

    # Add matching glob patterns.
    def add_matching(pattern)
      self.class.glob(pattern).each do |fn|
        self << fn unless excluded_from_list?(fn)
      end
    end
    private :add_matching

    # Should the given file name be excluded from the list?
    #
    # NOTE: This method was formerly named "exclude?", but Rails
    # introduced an exclude? method as an array method and setup a
    # conflict with file list. We renamed the method to avoid
    # confusion. If you were using "FileList#exclude?" in your user
    # code, you will need to update.
    def excluded_from_list?(fn)
      return true if @exclude_patterns.any? do |pat|
        case pat
        when Regexp
          fn =~ pat
        when GLOB_PATTERN
          flags = File::FNM_PATHNAME
          # Ruby <= 1.9.3 does not support File::FNM_EXTGLOB
          flags |= File::FNM_EXTGLOB if defined? File::FNM_EXTGLOB
          File.fnmatch?(pat, fn, flags)
        else
          fn == pat
        end
      end
      @exclude_procs.any? { |p| p.call(fn) }
    end

    DEFAULT_IGNORE_PATTERNS = [
      /(^|[\/\\])CVS([\/\\]|$)/,
      /(^|[\/\\])\.svn([\/\\]|$)/,
      /\.bak$/,
      /~$/
    ]
    DEFAULT_IGNORE_PROCS = [
      proc { |fn| fn =~ /(^|[\/\\])core$/ && !File.directory?(fn) }
    ]

    def import(array) # :nodoc:
      @items = array
      self
    end

    class << self
      # Create a new file list including the files listed. Similar to:
      #
      #   FileList.new(*args)
      def [](*args)
        new(*args)
      end

      # Get a sorted list of files matching the pattern. This method
      # should be preferred to Dir[pattern] and Dir.glob(pattern) because
      # the files returned are guaranteed to be sorted.
      def glob(pattern, *args)
        Dir.glob(pattern, *args).sort
      end
    end
  end
end

module Rake
  class << self

    # Yield each file or directory component.
    def each_dir_parent(dir)    # :nodoc:
      old_length = nil
      while dir != "." && dir.length != old_length
        yield(dir)
        old_length = dir.length
        dir = File.dirname(dir)
      end
    end

    # Convert Pathname and Pathname-like objects to strings;
    # leave everything else alone
    def from_pathname(path)    # :nodoc:
      path = path.to_path if path.respond_to?(:to_path)
      path = path.to_str if path.respond_to?(:to_str)
      path
    end
  end
end # module Rake
PK#"#[��M	M	(gems/rake-13.0.6/lib/rake/cpu_counter.rbnu�[���# frozen_string_literal: true
module Rake

  # Based on a script at:
  #   http://stackoverflow.com/questions/891537/ruby-detect-number-of-cpus-installed
  class CpuCounter # :nodoc: all
    def self.count
      new.count_with_default
    end

    def count_with_default(default=4)
      count || default
    rescue StandardError
      default
    end

    begin
      require "etc"
    rescue LoadError
    else
      if Etc.respond_to?(:nprocessors)
        def count
          return Etc.nprocessors
        end
      end
    end
  end
end

unless Rake::CpuCounter.method_defined?(:count)
  Rake::CpuCounter.class_eval <<-'end;', __FILE__, __LINE__+1
    require 'rbconfig'

    def count
      if RUBY_PLATFORM == 'java'
        count_via_java_runtime
      else
        case RbConfig::CONFIG['host_os']
        when /linux/
          count_via_cpuinfo
        when /darwin|bsd/
          count_via_sysctl
        when /mswin|mingw/
          count_via_win32
        else
          # Try everything
          count_via_win32 ||
          count_via_sysctl ||
          count_via_cpuinfo
        end
      end
    end

    def count_via_java_runtime
      Java::Java.lang.Runtime.getRuntime.availableProcessors
    rescue StandardError
      nil
    end

    def count_via_win32
      require 'win32ole'
      wmi = WIN32OLE.connect("winmgmts://")
      cpu = wmi.ExecQuery("select NumberOfCores from Win32_Processor") # TODO count hyper-threaded in this
      cpu.to_enum.first.NumberOfCores
    rescue StandardError, LoadError
      nil
    end

    def count_via_cpuinfo
      open('/proc/cpuinfo') { |f| f.readlines }.grep(/processor/).size
    rescue StandardError
      nil
    end

    def count_via_sysctl
      run 'sysctl', '-n', 'hw.ncpu'
    end

    def run(command, *args)
      cmd = resolve_command(command)
      if cmd
        IO.popen [cmd, *args] do |io|
          io.read.to_i
        end
      else
        nil
      end
    end

    def resolve_command(command)
      look_for_command("/usr/sbin", command) ||
        look_for_command("/sbin", command) ||
        in_path_command(command)
    end

    def look_for_command(dir, command)
      path = File.join(dir, command)
      File.exist?(path) ? path : nil
    end

    def in_path_command(command)
      IO.popen ['which', command] do |io|
        io.eof? ? nil : command
      end
    end
  end;
end
PK#"#[<9��-gems/rake-13.0.6/lib/rake/rake_test_loader.rbnu�[���# frozen_string_literal: true

require "rake/file_list"

# Load the test files from the command line.
argv = ARGV.select do |argument|
  case argument
  when /^-/ then
    argument
  when /\*/ then
    Rake::FileList[argument].to_a.each do |file|
      require File.expand_path file
    end

    false
  else
    path = File.expand_path argument

    abort "\nFile does not exist: #{path}\n\n" unless File.exist?(path)

    require path

    false
  end
end

ARGV.replace argv
PK#"#[��s�ZZ+gems/rake-13.0.6/lib/rake/file_utils_ext.rbnu�[���# frozen_string_literal: true
require "rake/file_utils"

module Rake
  #
  # FileUtilsExt provides a custom version of the FileUtils methods
  # that respond to the <tt>verbose</tt> and <tt>nowrite</tt>
  # commands.
  #
  module FileUtilsExt
    include FileUtils

    class << self
      attr_accessor :verbose_flag, :nowrite_flag
    end

    DEFAULT = Object.new

    FileUtilsExt.verbose_flag = DEFAULT
    FileUtilsExt.nowrite_flag = false

    FileUtils.commands.each do |name|
      opts = FileUtils.options_of name
      default_options = []
      if opts.include?("verbose")
        default_options << "verbose: FileUtilsExt.verbose_flag"
      end
      if opts.include?("noop")
        default_options << "noop: FileUtilsExt.nowrite_flag"
      end

      next if default_options.empty?
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
      def #{name}(*args, **options, &block)
        super(*args,
            #{default_options.join(', ')},
            **options, &block)
      end
      EOS
    end

    # Get/set the verbose flag controlling output from the FileUtils
    # utilities.  If verbose is true, then the utility method is
    # echoed to standard output.
    #
    # Examples:
    #    verbose              # return the current value of the
    #                         # verbose flag
    #    verbose(v)           # set the verbose flag to _v_.
    #    verbose(v) { code }  # Execute code with the verbose flag set
    #                         # temporarily to _v_.  Return to the
    #                         # original value when code is done.
    def verbose(value=nil)
      oldvalue = FileUtilsExt.verbose_flag
      FileUtilsExt.verbose_flag = value unless value.nil?
      if block_given?
        begin
          yield
        ensure
          FileUtilsExt.verbose_flag = oldvalue
        end
      end
      FileUtilsExt.verbose_flag
    end

    # Get/set the nowrite flag controlling output from the FileUtils
    # utilities.  If verbose is true, then the utility method is
    # echoed to standard output.
    #
    # Examples:
    #    nowrite              # return the current value of the
    #                         # nowrite flag
    #    nowrite(v)           # set the nowrite flag to _v_.
    #    nowrite(v) { code }  # Execute code with the nowrite flag set
    #                         # temporarily to _v_. Return to the
    #                         # original value when code is done.
    def nowrite(value=nil)
      oldvalue = FileUtilsExt.nowrite_flag
      FileUtilsExt.nowrite_flag = value unless value.nil?
      if block_given?
        begin
          yield
        ensure
          FileUtilsExt.nowrite_flag = oldvalue
        end
      end
      oldvalue
    end

    # Use this function to prevent potentially destructive ruby code
    # from running when the :nowrite flag is set.
    #
    # Example:
    #
    #   when_writing("Building Project") do
    #     project.build
    #   end
    #
    # The following code will build the project under normal
    # conditions. If the nowrite(true) flag is set, then the example
    # will print:
    #
    #      DRYRUN: Building Project
    #
    # instead of actually building the project.
    #
    def when_writing(msg=nil)
      if FileUtilsExt.nowrite_flag
        $stderr.puts "DRYRUN: #{msg}" if msg
      else
        yield
      end
    end

    # Send the message to the default rake output (which is $stderr).
    def rake_output_message(message)
      $stderr.puts(message)
    end

    # Check that the options do not contain options not listed in
    # +optdecl+.  An ArgumentError exception is thrown if non-declared
    # options are found.
    def rake_check_options(options, *optdecl)
      h = options.dup
      optdecl.each do |name|
        h.delete name
      end
      raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless
        h.empty?
    end

    extend self
  end
end
PK#"#[n�#��0gems/rake-13.0.6/lib/rake/task_argument_error.rbnu�[���# frozen_string_literal: true
module Rake

  # Error indicating an ill-formed task declaration.
  class TaskArgumentError < ArgumentError
  end

end
PK#"#[�I����&gems/rake-13.0.6/lib/rake/file_task.rbnu�[���# frozen_string_literal: true
require "rake/task"
require "rake/early_time"

module Rake

  # A FileTask is a task that includes time based dependencies.  If any of a
  # FileTask's prerequisites have a timestamp that is later than the file
  # represented by this task, then the file must be rebuilt (using the
  # supplied actions).
  #
  class FileTask < Task

    # Is this file task needed?  Yes if it doesn't exist, or if its time stamp
    # is out of date.
    def needed?
      !File.exist?(name) || out_of_date?(timestamp) || @application.options.build_all
    end

    # Time stamp for file task.
    def timestamp
      if File.exist?(name)
        File.mtime(name.to_s)
      else
        Rake::LATE
      end
    end

    private

    # Are there any prerequisites with a later time than the given time stamp?
    def out_of_date?(stamp)
      all_prerequisite_tasks.any? { |prereq|
        prereq_task = application[prereq, @scope]
        if prereq_task.instance_of?(Rake::FileTask)
          prereq_task.timestamp > stamp || @application.options.build_all
        else
          prereq_task.timestamp > stamp
        end
      }
    end

    # ----------------------------------------------------------------
    # Task class methods.
    #
    class << self
      # Apply the scope to the task name according to the rules for this kind
      # of task.  File based tasks ignore the scope when creating the name.
      def scope_name(scope, task_name)
        Rake.from_pathname(task_name)
      end
    end
  end
end
PK#"#[Jሀ�&gems/rake-13.0.6/lib/rake/backtrace.rbnu�[���# frozen_string_literal: true
module Rake
  module Backtrace # :nodoc: all
    SYS_KEYS  = RbConfig::CONFIG.keys.grep(/(?:[a-z]prefix|libdir)\z/)
    SYS_PATHS = RbConfig::CONFIG.values_at(*SYS_KEYS).uniq +
      [ File.join(File.dirname(__FILE__), "..") ]

    SUPPRESSED_PATHS = SYS_PATHS.
      map { |s| s.tr("\\", "/") }.
      map { |f| File.expand_path(f) }.
      reject { |s| s.nil? || s =~ /^ *$/ }
    SUPPRESSED_PATHS_RE = SUPPRESSED_PATHS.map { |f| Regexp.quote(f) }.join("|")
    SUPPRESSED_PATHS_RE << "|^org\\/jruby\\/\\w+\\.java" if
      Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == "jruby"

    SUPPRESS_PATTERN = %r!(\A(#{SUPPRESSED_PATHS_RE})|bin/rake:\d+)!i

    def self.collapse(backtrace)
      pattern = Rake.application.options.suppress_backtrace_pattern ||
                SUPPRESS_PATTERN
      backtrace.reject { |elem| elem =~ pattern }
    end
  end
end
PK#"#[���''&gems/rake-13.0.6/lib/rake/late_time.rbnu�[���# frozen_string_literal: true
module Rake
  # LateTime is a fake timestamp that occurs _after_ any other time value.
  class LateTime
    include Comparable
    include Singleton

    def <=>(other)
      1
    end

    def to_s
      "<LATE TIME>"
    end
  end

  LATE = LateTime.instance
end
PK#"#[�2��bb-gems/rake-13.0.6/lib/rake/loaders/makefile.rbnu�[���# frozen_string_literal: true
module Rake

  # Makefile loader to be used with the import file loader.  Use this to
  # import dependencies from make dependency tools:
  #
  #   require 'rake/loaders/makefile'
  #
  #   file ".depends.mf" => [SRC_LIST] do |t|
  #     sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}"
  #   end
  #
  #   import ".depends.mf"
  #
  # See {Importing Dependencies}[link:doc/rakefile_rdoc.html#label-Importing+Dependencies]
  # for further details.

  class MakefileLoader
    include Rake::DSL

    SPACE_MARK = "\0" # :nodoc:

    # Load the makefile dependencies in +fn+.
    def load(fn) # :nodoc:
      lines = File.read fn
      lines.gsub!(/\\ /, SPACE_MARK)
      lines.gsub!(/#[^\n]*\n/m, "")
      lines.gsub!(/\\\n/, " ")
      lines.each_line do |line|
        process_line(line)
      end
    end

    private

    # Process one logical line of makefile data.
    def process_line(line) # :nodoc:
      file_tasks, args = line.split(":", 2)
      return if args.nil?
      dependents = args.split.map { |d| respace(d) }
      file_tasks.scan(/\S+/) do |file_task|
        file_task = respace(file_task)
        file file_task => dependents
      end
    end

    def respace(str) # :nodoc:
      str.tr SPACE_MARK, " "
    end
  end

  # Install the handler
  Rake.application.add_loader("mf", MakefileLoader.new)
end
PK#"#[�����&gems/rake-13.0.6/lib/rake/cloneable.rbnu�[���# frozen_string_literal: true
module Rake
  ##
  # Mixin for creating easily cloned objects.

  module Cloneable # :nodoc:
    # The hook that is invoked by 'clone' and 'dup' methods.
    def initialize_copy(source)
      super
      source.instance_variables.each do |var|
        src_value  = source.instance_variable_get(var)
        value = src_value.clone rescue src_value
        instance_variable_set(var, value)
      end
    end
  end
end
PK#"#[?�{Hrr'gems/rake-13.0.6/lib/rake/early_time.rbnu�[���# frozen_string_literal: true
module Rake

  # EarlyTime is a fake timestamp that occurs _before_ any other time value.
  class EarlyTime
    include Comparable
    include Singleton

    ##
    # The EarlyTime always comes before +other+!

    def <=>(other)
      -1
    end

    def to_s # :nodoc:
      "<EARLY TIME>"
    end
  end

  EARLY = EarlyTime.instance
end
PK#"#[�.*C}}"gems/rake-13.0.6/lib/rake/phony.rbnu�[���# frozen_string_literal: true
# Defines a :phony task that you can use as a dependency. This allows
# file-based tasks to use non-file-based tasks as prerequisites
# without forcing them to rebuild.
#
# See FileTask#out_of_date? and Task#timestamp for more info.

require "rake"

task :phony

Rake::Task[:phony].tap do |task|
  def task.timestamp # :nodoc:
    Time.at 0
  end
end
PK#"#[�j��"gems/rake-13.0.6/lib/rake/win32.rbnu�[���# frozen_string_literal: true
require "rbconfig"

module Rake
  # Win 32 interface methods for Rake. Windows specific functionality
  # will be placed here to collect that knowledge in one spot.
  module Win32 # :nodoc: all

    # Error indicating a problem in locating the home directory on a
    # Win32 system.
    class Win32HomeError < RuntimeError
    end

    class << self
      # True if running on a windows system.
      def windows?
        RbConfig::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw|[Ww]indows)!
      end

      # The standard directory containing system wide rake files on
      # Win 32 systems. Try the following environment variables (in
      # order):
      #
      # * HOME
      # * HOMEDRIVE + HOMEPATH
      # * APPDATA
      # * USERPROFILE
      #
      # If the above are not defined, the return nil.
      def win32_system_dir #:nodoc:
        win32_shared_path = ENV["HOME"]
        if win32_shared_path.nil? && ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
          win32_shared_path = ENV["HOMEDRIVE"] + ENV["HOMEPATH"]
        end

        win32_shared_path ||= ENV["APPDATA"]
        win32_shared_path ||= ENV["USERPROFILE"]
        raise Win32HomeError,
          "Unable to determine home path environment variable." if
            win32_shared_path.nil? or win32_shared_path.empty?
        normalize(File.join(win32_shared_path, "Rake"))
      end

      # Normalize a win32 path so that the slashes are all forward slashes.
      def normalize(path)
        path.gsub(/\\/, "/")
      end

    end
  end
end
PK#"#[�R��(gems/rake-13.0.6/lib/rake/linked_list.rbnu�[���# frozen_string_literal: true
module Rake

  # Polylithic linked list structure used to implement several data
  # structures in Rake.
  class LinkedList
    include Enumerable
    attr_reader :head, :tail

    # Polymorphically add a new element to the head of a list. The
    # type of head node will be the same list type as the tail.
    def conj(item)
      self.class.cons(item, self)
    end

    # Is the list empty?
    # .make guards against a list being empty making any instantiated LinkedList
    # object not empty by default
    # You should consider overriding this method if you implement your own .make method
    def empty?
      false
    end

    # Lists are structurally equivalent.
    def ==(other)
      current = self
      while !current.empty? && !other.empty?
        return false if current.head != other.head
        current = current.tail
        other = other.tail
      end
      current.empty? && other.empty?
    end

    # Convert to string: LL(item, item...)
    def to_s
      items = map(&:to_s).join(", ")
      "LL(#{items})"
    end

    # Same as +to_s+, but with inspected items.
    def inspect
      items = map(&:inspect).join(", ")
      "LL(#{items})"
    end

    # For each item in the list.
    def each
      current = self
      while !current.empty?
        yield(current.head)
        current = current.tail
      end
      self
    end

    # Make a list out of the given arguments. This method is
    # polymorphic
    def self.make(*args)
      # return an EmptyLinkedList if there are no arguments
      return empty if !args || args.empty?

      # build a LinkedList by starting at the tail and iterating
      # through each argument
      # inject takes an EmptyLinkedList to start
      args.reverse.inject(empty) do |list, item|
        list = cons(item, list)
        list # return the newly created list for each item in the block
      end
    end

    # Cons a new head onto the tail list.
    def self.cons(head, tail)
      new(head, tail)
    end

    # The standard empty list class for the given LinkedList class.
    def self.empty
      self::EMPTY
    end

    protected

    def initialize(head, tail=EMPTY)
      @head = head
      @tail = tail
    end

    # Represent an empty list, using the Null Object Pattern.
    #
    # When inheriting from the LinkedList class, you should implement
    # a type specific Empty class as well. Make sure you set the class
    # instance variable @parent to the associated list class (this
    # allows conj, cons and make to work polymorphically).
    class EmptyLinkedList < LinkedList
      @parent = LinkedList

      def initialize
      end

      def empty?
        true
      end

      def self.cons(head, tail)
        @parent.cons(head, tail)
      end
    end

    EMPTY = EmptyLinkedList.new
  end
end
PK#"#[��m��3gems/rake-13.0.6/lib/rake/thread_history_display.rbnu�[���# frozen_string_literal: true
require "rake/private_reader"

module Rake

  class ThreadHistoryDisplay    # :nodoc: all
    include Rake::PrivateReader

    private_reader :stats, :items, :threads

    def initialize(stats)
      @stats   = stats
      @items   = { _seq_: 1  }
      @threads = { _seq_: "A" }
    end

    def show
      puts "Job History:"
      stats.each do |stat|
        stat[:data] ||= {}
        rename(stat, :thread, threads)
        rename(stat[:data], :item_id, items)
        rename(stat[:data], :new_thread, threads)
        rename(stat[:data], :deleted_thread, threads)
        printf("%8d %2s %-20s %s\n",
          (stat[:time] * 1_000_000).round,
          stat[:thread],
          stat[:event],
          stat[:data].map do |k, v| "#{k}:#{v}" end.join(" "))
      end
    end

    private

    def rename(hash, key, renames)
      if hash && hash[key]
        original = hash[key]
        value = renames[original]
        unless value
          value = renames[:_seq_]
          renames[:_seq_] = renames[:_seq_].succ
          renames[original] = value
        end
        hash[key] = value
      end
    end
  end

end
PK#"#[Ӭ�s~~:gems/rake-13.0.6/lib/rake/rule_recursion_overflow_error.rbnu�[���# frozen_string_literal: true
module Rake

  # Error indicating a recursion overflow error in task selection.
  class RuleRecursionOverflowError < StandardError
    def initialize(*args)
      super
      @targets = []
    end

    def add_target(target)
      @targets << target
    end

    def message
      super + ": [" + @targets.reverse.join(" => ") + "]"
    end
  end

end
PK#"#[�����"gems/rake-13.0.6/lib/rake/scope.rbnu�[���# frozen_string_literal: true
module Rake
  class Scope < LinkedList # :nodoc: all

    # Path for the scope.
    def path
      map(&:to_s).reverse.join(":")
    end

    # Path for the scope + the named path.
    def path_with_task_name(task_name)
      "#{path}:#{task_name}"
    end

    # Trim +n+ innermost scope levels from the scope. In no case will
    # this trim beyond the toplevel scope.
    def trim(n)
      result = self
      while n > 0 && !result.empty?
        result = result.tail
        n -= 1
      end
      result
    end

    # Scope lists always end with an EmptyScope object. See Null
    # Object Pattern)
    class EmptyScope < EmptyLinkedList
      @parent = Scope

      def path
        ""
      end

      def path_with_task_name(task_name)
        task_name
      end
    end

    # Singleton null object for an empty scope.
    EMPTY = EmptyScope.new
  end
end
PK#"#[�(()gems/rake-13.0.6/lib/rake/task_manager.rbnu�[���# frozen_string_literal: true
module Rake

  # The TaskManager module is a mixin for managing tasks.
  module TaskManager
    # Track the last comment made in the Rakefile.
    attr_accessor :last_description

    def initialize # :nodoc:
      super
      @tasks = Hash.new
      @rules = Array.new
      @scope = Scope.make
      @last_description = nil
    end

    def create_rule(*args, &block) # :nodoc:
      pattern, args, deps, order_only = resolve_args(args)
      pattern = Regexp.new(Regexp.quote(pattern) + "$") if String === pattern
      @rules << [pattern, args, deps, order_only, block]
    end

    def define_task(task_class, *args, &block) # :nodoc:
      task_name, arg_names, deps, order_only = resolve_args(args)

      original_scope = @scope
      if String === task_name and
         not task_class.ancestors.include? Rake::FileTask
        task_name, *definition_scope = *(task_name.split(":").reverse)
        @scope = Scope.make(*(definition_scope + @scope.to_a))
      end

      task_name = task_class.scope_name(@scope, task_name)
      task = intern(task_class, task_name)
      task.set_arg_names(arg_names) unless arg_names.empty?
      if Rake::TaskManager.record_task_metadata
        add_location(task)
        task.add_description(get_description(task))
      end
      task.enhance(Task.format_deps(deps), &block)
      task | order_only unless order_only.nil?
      task
    ensure
      @scope = original_scope
    end

    # Lookup a task.  Return an existing task if found, otherwise
    # create a task of the current type.
    def intern(task_class, task_name)
      @tasks[task_name.to_s] ||= task_class.new(task_name, self)
    end

    # Find a matching task for +task_name+.
    def [](task_name, scopes=nil)
      task_name = task_name.to_s
      self.lookup(task_name, scopes) or
        enhance_with_matching_rule(task_name) or
        synthesize_file_task(task_name) or
        fail generate_message_for_undefined_task(task_name)
    end

    def generate_message_for_undefined_task(task_name)
      message = "Don't know how to build task '#{task_name}' "\
                "(See the list of available tasks with `#{Rake.application.name} --tasks`)"
      message + generate_did_you_mean_suggestions(task_name)
    end

    def generate_did_you_mean_suggestions(task_name)
      return "" unless defined?(::DidYouMean::SpellChecker)

      suggestions = ::DidYouMean::SpellChecker.new(dictionary: @tasks.keys).correct(task_name.to_s)
      if ::DidYouMean.respond_to?(:formatter)# did_you_mean v1.2.0 or later
        ::DidYouMean.formatter.message_for(suggestions)
      elsif defined?(::DidYouMean::Formatter) # before did_you_mean v1.2.0
        ::DidYouMean::Formatter.new(suggestions).to_s
      else
        ""
      end
    end

    def synthesize_file_task(task_name) # :nodoc:
      return nil unless File.exist?(task_name)
      define_task(Rake::FileTask, task_name)
    end

    # Resolve the arguments for a task/rule.  Returns a tuple of
    # [task_name, arg_name_list, prerequisites, order_only_prerequisites].
    def resolve_args(args)
      if args.last.is_a?(Hash)
        deps = args.pop
        resolve_args_with_dependencies(args, deps)
      else
        resolve_args_without_dependencies(args)
      end
    end

    # Resolve task arguments for a task or rule when there are no
    # dependencies declared.
    #
    # The patterns recognized by this argument resolving function are:
    #
    #   task :t
    #   task :t, [:a]
    #
    def resolve_args_without_dependencies(args)
      task_name = args.shift
      if args.size == 1 && args.first.respond_to?(:to_ary)
        arg_names = args.first.to_ary
      else
        arg_names = args
      end
      [task_name, arg_names, [], nil]
    end
    private :resolve_args_without_dependencies

    # Resolve task arguments for a task or rule when there are
    # dependencies declared.
    #
    # The patterns recognized by this argument resolving function are:
    #
    #   task :t, order_only: [:e]
    #   task :t => [:d]
    #   task :t => [:d], order_only: [:e]
    #   task :t, [a] => [:d]
    #   task :t, [a] => [:d], order_only: [:e]
    #
    def resolve_args_with_dependencies(args, hash) # :nodoc:
      fail "Task Argument Error" if
        hash.size != 1 &&
        (hash.size != 2 || !hash.key?(:order_only))
      order_only = hash.delete(:order_only)
      key, value = hash.map { |k, v| [k, v] }.first
      if args.empty?
        task_name = key
        arg_names = []
        deps = value || []
      else
        task_name = args.shift
        arg_names = key || args.shift|| []
        deps = value || []
      end
      deps = [deps] unless deps.respond_to?(:to_ary)
      [task_name, arg_names, deps, order_only]
    end
    private :resolve_args_with_dependencies

    # If a rule can be found that matches the task name, enhance the
    # task with the prerequisites and actions from the rule.  Set the
    # source attribute of the task appropriately for the rule.  Return
    # the enhanced task or nil of no rule was found.
    def enhance_with_matching_rule(task_name, level=0)
      fail Rake::RuleRecursionOverflowError,
        "Rule Recursion Too Deep" if level >= 16
      @rules.each do |pattern, args, extensions, order_only, block|
        if pattern && pattern.match(task_name)
          task = attempt_rule(task_name, pattern, args, extensions, block, level)
          task | order_only unless order_only.nil?
          return task if task
        end
      end
      nil
    rescue Rake::RuleRecursionOverflowError => ex
      ex.add_target(task_name)
      fail ex
    end

    # List of all defined tasks in this application.
    def tasks
      @tasks.values.sort_by { |t| t.name }
    end

    # List of all the tasks defined in the given scope (and its
    # sub-scopes).
    def tasks_in_scope(scope)
      prefix = scope.path
      tasks.select { |t|
        /^#{prefix}:/ =~ t.name
      }
    end

    # Clear all tasks in this application.
    def clear
      @tasks.clear
      @rules.clear
    end

    # Lookup a task, using scope and the scope hints in the task name.
    # This method performs straight lookups without trying to
    # synthesize file tasks or rules.  Special scope names (e.g. '^')
    # are recognized.  If no scope argument is supplied, use the
    # current scope.  Return nil if the task cannot be found.
    def lookup(task_name, initial_scope=nil)
      initial_scope ||= @scope
      task_name = task_name.to_s
      if task_name =~ /^rake:/
        scopes = Scope.make
        task_name = task_name.sub(/^rake:/, "")
      elsif task_name =~ /^(\^+)/
        scopes = initial_scope.trim($1.size)
        task_name = task_name.sub(/^(\^+)/, "")
      else
        scopes = initial_scope
      end
      lookup_in_scope(task_name, scopes)
    end

    # Lookup the task name
    def lookup_in_scope(name, scope)
      loop do
        tn = scope.path_with_task_name(name)
        task = @tasks[tn]
        return task if task
        break if scope.empty?
        scope = scope.tail
      end
      nil
    end
    private :lookup_in_scope

    # Return the list of scope names currently active in the task
    # manager.
    def current_scope
      @scope
    end

    # Evaluate the block in a nested namespace named +name+.  Create
    # an anonymous namespace if +name+ is nil.
    def in_namespace(name)
      name ||= generate_name
      @scope = Scope.new(name, @scope)
      ns = NameSpace.new(self, @scope)
      yield(ns)
      ns
    ensure
      @scope = @scope.tail
    end

    private

    # Add a location to the locations field of the given task.
    def add_location(task)
      loc = find_location
      task.locations << loc if loc
      task
    end

    # Find the location that called into the dsl layer.
    def find_location
      locations = caller
      i = 0
      while locations[i]
        return locations[i + 1] if locations[i] =~ /rake\/dsl_definition.rb/
        i += 1
      end
      nil
    end

    # Generate an anonymous namespace name.
    def generate_name
      @seed ||= 0
      @seed += 1
      "_anon_#{@seed}"
    end

    def trace_rule(level, message) # :nodoc:
      options.trace_output.puts "#{"    " * level}#{message}" if
        Rake.application.options.trace_rules
    end

    # Attempt to create a rule given the list of prerequisites.
    def attempt_rule(task_name, task_pattern, args, extensions, block, level)
      sources = make_sources(task_name, task_pattern, extensions)
      prereqs = sources.map { |source|
        trace_rule level, "Attempting Rule #{task_name} => #{source}"
        if File.exist?(source) || Rake::Task.task_defined?(source)
          trace_rule level, "(#{task_name} => #{source} ... EXIST)"
          source
        elsif parent = enhance_with_matching_rule(source, level + 1)
          trace_rule level, "(#{task_name} => #{source} ... ENHANCE)"
          parent.name
        else
          trace_rule level, "(#{task_name} => #{source} ... FAIL)"
          return nil
        end
      }
      task = FileTask.define_task(task_name, { args => prereqs }, &block)
      task.sources = prereqs
      task
    end

    # Make a list of sources from the list of file name extensions /
    # translation procs.
    def make_sources(task_name, task_pattern, extensions)
      result = extensions.map { |ext|
        case ext
        when /%/
          task_name.pathmap(ext)
        when %r{/}
          ext
        when /^\./
          source = task_name.sub(task_pattern, ext)
          source == ext ? task_name.ext(ext) : source
        when String, Symbol
          ext.to_s
        when Proc, Method
          if ext.arity == 1
            ext.call(task_name)
          else
            ext.call
          end
        else
          fail "Don't know how to handle rule dependent: #{ext.inspect}"
        end
      }
      result.flatten
    end

    # Return the current description, clearing it in the process.
    def get_description(task)
      desc = @last_description
      @last_description = nil
      desc
    end

    class << self
      attr_accessor :record_task_metadata # :nodoc:
      TaskManager.record_task_metadata = false
    end
  end

end
PK#"#[�lD��'gems/rake-13.0.6/lib/rake/name_space.rbnu�[���# frozen_string_literal: true
##
# The NameSpace class will lookup task names in the scope defined by a
# +namespace+ command.

class Rake::NameSpace

  ##
  # Create a namespace lookup object using the given task manager
  # and the list of scopes.

  def initialize(task_manager, scope_list)
    @task_manager = task_manager
    @scope = scope_list.dup
  end

  ##
  # Lookup a task named +name+ in the namespace.

  def [](name)
    @task_manager.lookup(name, @scope)
  end

  ##
  # The scope of the namespace (a LinkedList)

  def scope
    @scope.dup
  end

  ##
  # Return the list of tasks defined in this and nested namespaces.

  def tasks
    @task_manager.tasks_in_scope(@scope)
  end

end
PK#"#[��K��*gems/rake-13.0.6/lib/rake/pseudo_status.rbnu�[���# frozen_string_literal: true
module Rake

  ##
  # Exit status class for times the system just gives us a nil.
  class PseudoStatus # :nodoc: all
    attr_reader :exitstatus

    def initialize(code=0)
      @exitstatus = code
    end

    def to_i
      @exitstatus << 8
    end

    def >>(n)
      to_i >> n
    end

    def stopped?
      false
    end

    def exited?
      true
    end
  end

end
PK#"#[;Y�II'gems/rake-13.0.6/lib/rake/file_utils.rbnu�[���# frozen_string_literal: true
require "rbconfig"
require "fileutils"

#--
# This a FileUtils extension that defines several additional commands to be
# added to the FileUtils utility functions.
module FileUtils
  # Path to the currently running Ruby program
  RUBY = ENV["RUBY"] || File.join(
    RbConfig::CONFIG["bindir"],
    RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]).
    sub(/.*\s.*/m, '"\&"')

  # Run the system command +cmd+.  If multiple arguments are given the command
  # is run directly (without the shell, same semantics as Kernel::exec and
  # Kernel::system).
  #
  # It is recommended you use the multiple argument form over interpolating
  # user input for both usability and security reasons.  With the multiple
  # argument form you can easily process files with spaces or other shell
  # reserved characters in them.  With the multiple argument form your rake
  # tasks are not vulnerable to users providing an argument like
  # <code>; rm # -rf /</code>.
  #
  # If a block is given, upon command completion the block is called with an
  # OK flag (true on a zero exit status) and a Process::Status object.
  # Without a block a RuntimeError is raised when the command exits non-zero.
  #
  # Examples:
  #
  #   sh 'ls -ltr'
  #
  #   sh 'ls', 'file with spaces'
  #
  #   # check exit status after command runs
  #   sh %{grep pattern file} do |ok, res|
  #     if !ok
  #       puts "pattern not found (status = #{res.exitstatus})"
  #     end
  #   end
  #
  def sh(*cmd, &block)
    options = (Hash === cmd.last) ? cmd.pop : {}
    shell_runner = block_given? ? block : create_shell_runner(cmd)

    set_verbose_option(options)
    verbose = options.delete :verbose
    noop    = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag

    Rake.rake_output_message sh_show_command cmd if verbose

    unless noop
      res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options)
      status = $?
      status = Rake::PseudoStatus.new(1) if !res && status.nil?
      shell_runner.call(res, status)
    end
  end

  def create_shell_runner(cmd) # :nodoc:
    show_command = sh_show_command cmd
    show_command = show_command[0, 42] + "..." unless $trace

    lambda do |ok, status|
      ok or
        fail "Command failed with status (#{status.exitstatus}): " +
        "[#{show_command}]"
    end
  end
  private :create_shell_runner

  def sh_show_command(cmd) # :nodoc:
    cmd = cmd.dup

    if Hash === cmd.first
      env = cmd.first
      env = env.map { |name, value| "#{name}=#{value}" }.join " "
      cmd[0] = env
    end

    cmd.join " "
  end
  private :sh_show_command

  def set_verbose_option(options) # :nodoc:
    unless options.key? :verbose
      options[:verbose] =
        (Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT) ||
        Rake::FileUtilsExt.verbose_flag
    end
  end
  private :set_verbose_option

  # Run a Ruby interpreter with the given arguments.
  #
  # Example:
  #   ruby %{-pe '$_.upcase!' <README}
  #
  def ruby(*args, **options, &block)
    if args.length > 1
      sh(RUBY, *args, **options, &block)
    else
      sh("#{RUBY} #{args.first}", **options, &block)
    end
  end

  LN_SUPPORTED = [true]

  #  Attempt to do a normal file link, but fall back to a copy if the link
  #  fails.
  def safe_ln(*args, **options)
    if LN_SUPPORTED[0]
      begin
        return options.empty? ? ln(*args) : ln(*args, **options)
      rescue StandardError, NotImplementedError
        LN_SUPPORTED[0] = false
      end
    end
    options.empty? ? cp(*args) : cp(*args, **options)
  end

  # Split a file path into individual directory names.
  #
  # Example:
  #   split_all("a/b/c") =>  ['a', 'b', 'c']
  #
  def split_all(path)
    head, tail = File.split(path)
    return [tail] if head == "." || tail == "/"
    return [head, tail] if head == "/"
    return split_all(head) + [tail]
  end
end
PK#"#[�##B�B�gems/ruby-lsapi-5.6/setup.rbnu�[���#
# setup.rb
#
# Copyright (c) 2000-2005 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the terms of
# the GNU LGPL, Lesser General Public License version 2.1.
#

unless Enumerable.method_defined?(:map)   # Ruby 1.4.6
  module Enumerable
    alias map collect
  end
end

unless File.respond_to?(:read)   # Ruby 1.6
  def File.read(fname)
    open(fname) {|f|
      return f.read
    }
  end
end

unless Errno.const_defined?(:ENOTEMPTY)   # Windows?
  module Errno
    class ENOTEMPTY
      # We do not raise this exception, implementation is not needed.
    end
  end
end

def File.binread(fname)
  open(fname, 'rb') {|f|
    return f.read
  }
end

# for corrupted Windows' stat(2)
def File.dir?(path)
  File.directory?((path[-1,1] == '/') ? path : path + '/')
end


class ConfigTable

  include Enumerable

  def initialize(rbconfig)
    @rbconfig = rbconfig
    @items = []
    @table = {}
    # options
    @install_prefix = nil
    @config_opt = nil
    @verbose = true
    @no_harm = false
  end

  attr_accessor :install_prefix
  attr_accessor :config_opt

  attr_writer :verbose

  def verbose?
    @verbose
  end

  attr_writer :no_harm

  def no_harm?
    @no_harm
  end

  def [](key)
    lookup(key).resolve(self)
  end

  def []=(key, val)
    lookup(key).set val
  end

  def names
    @items.map {|i| i.name }
  end

  def each(&block)
    @items.each(&block)
  end

  def key?(name)
    @table.key?(name)
  end

  def lookup(name)
    @table[name] or setup_rb_error "no such config item: #{name}"
  end

  def add(item)
    @items.push item
    @table[item.name] = item
  end

  def remove(name)
    item = lookup(name)
    @items.delete_if {|i| i.name == name }
    @table.delete_if {|name, i| i.name == name }
    item
  end

  def load_script(path, inst = nil)
    if File.file?(path)
      MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path
    end
  end

  def savefile
    '.config'
  end

  def load_savefile
    begin
      File.foreach(savefile()) do |line|
        k, v = *line.split(/=/, 2)
        self[k] = v.strip
      end
    rescue Errno::ENOENT
      setup_rb_error $!.message + "\n#{File.basename($0)} config first"
    end
  end

  def save
    @items.each {|i| i.value }
    File.open(savefile(), 'w') {|f|
      @items.each do |i|
        f.printf "%s=%s\n", i.name, i.value if i.value? and i.value
      end
    }
  end

  def load_standard_entries
    standard_entries(@rbconfig).each do |ent|
      add ent
    end
  end

  def standard_entries(rbconfig)
    c = rbconfig

    rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT'])

    major = c['MAJOR'].to_i
    minor = c['MINOR'].to_i
    teeny = c['TEENY'].to_i
    version = "#{major}.#{minor}"

    # ruby ver. >= 1.4.4?
    newpath_p = ((major >= 2) or
                 ((major == 1) and
                  ((minor >= 5) or
                   ((minor == 4) and (teeny >= 4)))))

    if c['rubylibdir']
      # V > 1.6.3
      libruby         = "#{c['prefix']}/lib/ruby"
      librubyver      = c['rubylibdir']
      librubyverarch  = c['archdir']
      siteruby        = c['sitedir']
      siterubyver     = c['sitelibdir']
      siterubyverarch = c['sitearchdir']
    elsif newpath_p
      # 1.4.4 <= V <= 1.6.3
      libruby         = "#{c['prefix']}/lib/ruby"
      librubyver      = "#{c['prefix']}/lib/ruby/#{version}"
      librubyverarch  = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
      siteruby        = c['sitedir']
      siterubyver     = "$siteruby/#{version}"
      siterubyverarch = "$siterubyver/#{c['arch']}"
    else
      # V < 1.4.4
      libruby         = "#{c['prefix']}/lib/ruby"
      librubyver      = "#{c['prefix']}/lib/ruby/#{version}"
      librubyverarch  = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}"
      siteruby        = "#{c['prefix']}/lib/ruby/#{version}/site_ruby"
      siterubyver     = siteruby
      siterubyverarch = "$siterubyver/#{c['arch']}"
    end
    parameterize = lambda {|path|
      path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix')
    }

    if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg }
      makeprog = arg.sub(/'/, '').split(/=/, 2)[1]
    else
      makeprog = 'make'
    end

    [
      ExecItem.new('installdirs', 'std/site/home',
                   'std: install under libruby; site: install under site_ruby; home: install under $HOME')\
          {|val, table|
            case val
            when 'std'
              table['rbdir'] = '$librubyver'
              table['sodir'] = '$librubyverarch'
            when 'site'
              table['rbdir'] = '$siterubyver'
              table['sodir'] = '$siterubyverarch'
            when 'home'
              setup_rb_error '$HOME was not set' unless ENV['HOME']
              table['prefix'] = ENV['HOME']
              table['rbdir'] = '$libdir/ruby'
              table['sodir'] = '$libdir/ruby'
            end
          },
      PathItem.new('prefix', 'path', c['prefix'],
                   'path prefix of target environment'),
      PathItem.new('bindir', 'path', parameterize.call(c['bindir']),
                   'the directory for commands'),
      PathItem.new('libdir', 'path', parameterize.call(c['libdir']),
                   'the directory for libraries'),
      PathItem.new('datadir', 'path', parameterize.call(c['datadir']),
                   'the directory for shared data'),
      PathItem.new('mandir', 'path', parameterize.call(c['mandir']),
                   'the directory for man pages'),
      PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']),
                   'the directory for system configuration files'),
      PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']),
                   'the directory for local state data'),
      PathItem.new('libruby', 'path', libruby,
                   'the directory for ruby libraries'),
      PathItem.new('librubyver', 'path', librubyver,
                   'the directory for standard ruby libraries'),
      PathItem.new('librubyverarch', 'path', librubyverarch,
                   'the directory for standard ruby extensions'),
      PathItem.new('siteruby', 'path', siteruby,
          'the directory for version-independent aux ruby libraries'),
      PathItem.new('siterubyver', 'path', siterubyver,
                   'the directory for aux ruby libraries'),
      PathItem.new('siterubyverarch', 'path', siterubyverarch,
                   'the directory for aux ruby binaries'),
      PathItem.new('rbdir', 'path', '$siterubyver',
                   'the directory for ruby scripts'),
      PathItem.new('sodir', 'path', '$siterubyverarch',
                   'the directory for ruby extentions'),
      PathItem.new('rubypath', 'path', rubypath,
                   'the path to set to #! line'),
      ProgramItem.new('rubyprog', 'name', rubypath,
                      'the ruby program using for installation'),
      ProgramItem.new('makeprog', 'name', makeprog,
                      'the make program to compile ruby extentions'),
      SelectItem.new('shebang', 'all/ruby/never', 'ruby',
                     'shebang line (#!) editing mode'),
      BoolItem.new('without-ext', 'yes/no', 'no',
                   'does not compile/install ruby extentions')
    ]
  end
  private :standard_entries

  def load_multipackage_entries
    multipackage_entries().each do |ent|
      add ent
    end
  end

  def multipackage_entries
    [
      PackageSelectionItem.new('with', 'name,name...', '', 'ALL',
                               'package names that you want to install'),
      PackageSelectionItem.new('without', 'name,name...', '', 'NONE',
                               'package names that you do not want to install')
    ]
  end
  private :multipackage_entries

  ALIASES = {
    'std-ruby'         => 'librubyver',
    'stdruby'          => 'librubyver',
    'rubylibdir'       => 'librubyver',
    'archdir'          => 'librubyverarch',
    'site-ruby-common' => 'siteruby',     # For backward compatibility
    'site-ruby'        => 'siterubyver',  # For backward compatibility
    'bin-dir'          => 'bindir',
    'bin-dir'          => 'bindir',
    'rb-dir'           => 'rbdir',
    'so-dir'           => 'sodir',
    'data-dir'         => 'datadir',
    'ruby-path'        => 'rubypath',
    'ruby-prog'        => 'rubyprog',
    'ruby'             => 'rubyprog',
    'make-prog'        => 'makeprog',
    'make'             => 'makeprog'
  }

  def fixup
    ALIASES.each do |ali, name|
      @table[ali] = @table[name]
    end
    @items.freeze
    @table.freeze
    @options_re = /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/
  end

  def parse_opt(opt)
    m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}"
    m.to_a[1,2]
  end

  def dllext
    @rbconfig['DLEXT']
  end

  def value_config?(name)
    lookup(name).value?
  end

  class Item
    def initialize(name, template, default, desc)
      @name = name.freeze
      @template = template
      @value = default
      @default = default
      @description = desc
    end

    attr_reader :name
    attr_reader :description

    attr_accessor :default
    alias help_default default

    def help_opt
      "--#{@name}=#{@template}"
    end

    def value?
      true
    end

    def value
      @value
    end

    def resolve(table)
      @value.gsub(%r<\$([^/]+)>) { table[$1] }
    end

    def set(val)
      @value = check(val)
    end

    private

    def check(val)
      setup_rb_error "config: --#{name} requires argument" unless val
      val
    end
  end

  class BoolItem < Item
    def config_type
      'bool'
    end

    def help_opt
      "--#{@name}"
    end

    private

    def check(val)
      return 'yes' unless val
      case val
      when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes'
      when /\An(o)?\z/i, /\Af(alse)\z/i  then 'no'
      else
        setup_rb_error "config: --#{@name} accepts only yes/no for argument"
      end
    end
  end

  class PathItem < Item
    def config_type
      'path'
    end

    private

    def check(path)
      setup_rb_error "config: --#{@name} requires argument"  unless path
      path[0,1] == '$' ? path : File.expand_path(path)
    end
  end

  class ProgramItem < Item
    def config_type
      'program'
    end
  end

  class SelectItem < Item
    def initialize(name, selection, default, desc)
      super
      @ok = selection.split('/')
    end

    def config_type
      'select'
    end

    private

    def check(val)
      unless @ok.include?(val.strip)
        setup_rb_error "config: use --#{@name}=#{@template} (#{val})"
      end
      val.strip
    end
  end

  class ExecItem < Item
    def initialize(name, selection, desc, &block)
      super name, selection, nil, desc
      @ok = selection.split('/')
      @action = block
    end

    def config_type
      'exec'
    end

    def value?
      false
    end

    def resolve(table)
      setup_rb_error "$#{name()} wrongly used as option value"
    end

    undef set

    def evaluate(val, table)
      v = val.strip.downcase
      unless @ok.include?(v)
        setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})"
      end
      @action.call v, table
    end
  end

  class PackageSelectionItem < Item
    def initialize(name, template, default, help_default, desc)
      super name, template, default, desc
      @help_default = help_default
    end

    attr_reader :help_default

    def config_type
      'package'
    end

    private

    def check(val)
      unless File.dir?("packages/#{val}")
        setup_rb_error "config: no such package: #{val}"
      end
      val
    end
  end

  class MetaConfigEnvironment
    def initialize(config, installer)
      @config = config
      @installer = installer
    end

    def config_names
      @config.names
    end

    def config?(name)
      @config.key?(name)
    end

    def bool_config?(name)
      @config.lookup(name).config_type == 'bool'
    end

    def path_config?(name)
      @config.lookup(name).config_type == 'path'
    end

    def value_config?(name)
      @config.lookup(name).config_type != 'exec'
    end

    def add_config(item)
      @config.add item
    end

    def add_bool_config(name, default, desc)
      @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc)
    end

    def add_path_config(name, default, desc)
      @config.add PathItem.new(name, 'path', default, desc)
    end

    def set_config_default(name, default)
      @config.lookup(name).default = default
    end

    def remove_config(name)
      @config.remove(name)
    end

    # For only multipackage
    def packages
      raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer
      @installer.packages
    end

    # For only multipackage
    def declare_packages(list)
      raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer
      @installer.packages = list
    end
  end

end   # class ConfigTable


# This module requires: #verbose?, #no_harm?
module FileOperations

  def mkdir_p(dirname, prefix = nil)
    dirname = prefix + File.expand_path(dirname) if prefix
    $stderr.puts "mkdir -p #{dirname}" if verbose?
    return if no_harm?

    # Does not check '/', it's too abnormal.
    dirs = File.expand_path(dirname).split(%r<(?=/)>)
    if /\A[a-z]:\z/i =~ dirs[0]
      disk = dirs.shift
      dirs[0] = disk + dirs[0]
    end
    dirs.each_index do |idx|
      path = dirs[0..idx].join('')
      Dir.mkdir path unless File.dir?(path)
    end
  end

  def rm_f(path)
    $stderr.puts "rm -f #{path}" if verbose?
    return if no_harm?
    force_remove_file path
  end

  def rm_rf(path)
    $stderr.puts "rm -rf #{path}" if verbose?
    return if no_harm?
    remove_tree path
  end

  def remove_tree(path)
    if File.symlink?(path)
      remove_file path
    elsif File.dir?(path)
      remove_tree0 path
    else
      force_remove_file path
    end
  end

  def remove_tree0(path)
    Dir.foreach(path) do |ent|
      next if ent == '.'
      next if ent == '..'
      entpath = "#{path}/#{ent}"
      if File.symlink?(entpath)
        remove_file entpath
      elsif File.dir?(entpath)
        remove_tree0 entpath
      else
        force_remove_file entpath
      end
    end
    begin
      Dir.rmdir path
    rescue Errno::ENOTEMPTY
      # directory may not be empty
    end
  end

  def move_file(src, dest)
    force_remove_file dest
    begin
      File.rename src, dest
    rescue
      File.open(dest, 'wb') {|f|
        f.write File.binread(src)
      }
      File.chmod File.stat(src).mode, dest
      File.unlink src
    end
  end

  def force_remove_file(path)
    begin
      remove_file path
    rescue
    end
  end

  def remove_file(path)
    File.chmod 0777, path
    File.unlink path
  end

  def install(from, dest, mode, prefix = nil)
    $stderr.puts "install #{from} #{dest}" if verbose?
    return if no_harm?

    realdest = prefix ? prefix + File.expand_path(dest) : dest
    realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
    str = File.binread(from)
    if diff?(str, realdest)
      verbose_off {
        rm_f realdest if File.exist?(realdest)
      }
      File.open(realdest, 'wb') {|f|
        f.write str
      }
      File.chmod mode, realdest

      File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
        if prefix
          f.puts realdest.sub(prefix, '')
        else
          f.puts realdest
        end
      }
    end
  end

  def diff?(new_content, path)
    return true unless File.exist?(path)
    new_content != File.binread(path)
  end

  def command(*args)
    $stderr.puts args.join(' ') if verbose?
    system(*args) or raise RuntimeError,
        "system(#{args.map{|a| a.inspect }.join(' ')}) failed"
  end

  def ruby(*args)
    command config('rubyprog'), *args
  end
  
  def make(task = nil)
    command(*[config('makeprog'), task].compact)
  end

  def extdir?(dir)
    File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb")
  end

  def files_of(dir)
    Dir.open(dir) {|d|
      return d.select {|ent| File.file?("#{dir}/#{ent}") }
    }
  end

  DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn )

  def directories_of(dir)
    Dir.open(dir) {|d|
      return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT
    }
  end

end


# This module requires: #srcdir_root, #objdir_root, #relpath
module HookScriptAPI

  def get_config(key)
    @config[key]
  end

  alias config get_config

  # obsolete: use metaconfig to change configuration
  def set_config(key, val)
    @config[key] = val
  end

  #
  # srcdir/objdir (works only in the package directory)
  #

  def curr_srcdir
    "#{srcdir_root()}/#{relpath()}"
  end

  def curr_objdir
    "#{objdir_root()}/#{relpath()}"
  end

  def srcfile(path)
    "#{curr_srcdir()}/#{path}"
  end

  def srcexist?(path)
    File.exist?(srcfile(path))
  end

  def srcdirectory?(path)
    File.dir?(srcfile(path))
  end
  
  def srcfile?(path)
    File.file?(srcfile(path))
  end

  def srcentries(path = '.')
    Dir.open("#{curr_srcdir()}/#{path}") {|d|
      return d.to_a - %w(. ..)
    }
  end

  def srcfiles(path = '.')
    srcentries(path).select {|fname|
      File.file?(File.join(curr_srcdir(), path, fname))
    }
  end

  def srcdirectories(path = '.')
    srcentries(path).select {|fname|
      File.dir?(File.join(curr_srcdir(), path, fname))
    }
  end

end


class ToplevelInstaller

  Version   = '3.4.1'
  Copyright = 'Copyright (c) 2000-2005 Minero Aoki'

  TASKS = [
    [ 'all',      'do config, setup, then install' ],
    [ 'config',   'saves your configurations' ],
    [ 'show',     'shows current configuration' ],
    [ 'setup',    'compiles ruby extentions and others' ],
    [ 'install',  'installs files' ],
    [ 'test',     'run all tests in test/' ],
    [ 'clean',    "does `make clean' for each extention" ],
    [ 'distclean',"does `make distclean' for each extention" ]
  ]

  def ToplevelInstaller.invoke
    config = ConfigTable.new(load_rbconfig())
    config.load_standard_entries
    config.load_multipackage_entries if multipackage?
    config.fixup
    klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller)
    klass.new(File.dirname($0), config).invoke
  end

  def ToplevelInstaller.multipackage?
    File.dir?(File.dirname($0) + '/packages')
  end

  def ToplevelInstaller.load_rbconfig
    if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg }
      ARGV.delete(arg)
      load File.expand_path(arg.split(/=/, 2)[1])
      $".push 'rbconfig.rb'
    else
      require 'rbconfig'
    end
    ::Config::CONFIG
  end

  def initialize(ardir_root, config)
    @ardir = File.expand_path(ardir_root)
    @config = config
    # cache
    @valid_task_re = nil
  end

  def config(key)
    @config[key]
  end

  def inspect
    "#<#{self.class} #{__id__()}>"
  end

  def invoke
    run_metaconfigs
    case task = parsearg_global()
    when nil, 'all'
      parsearg_config
      init_installers
      exec_config
      exec_setup
      exec_install
    else
      case task
      when 'config', 'test'
        ;
      when 'clean', 'distclean'
        @config.load_savefile if File.exist?(@config.savefile)
      else
        @config.load_savefile
      end
      __send__ "parsearg_#{task}"
      init_installers
      __send__ "exec_#{task}"
    end
  end
  
  def run_metaconfigs
    @config.load_script "#{@ardir}/metaconfig"
  end

  def init_installers
    @installer = Installer.new(@config, @ardir, File.expand_path('.'))
  end

  #
  # Hook Script API bases
  #

  def srcdir_root
    @ardir
  end

  def objdir_root
    '.'
  end

  def relpath
    '.'
  end

  #
  # Option Parsing
  #

  def parsearg_global
    while arg = ARGV.shift
      case arg
      when /\A\w+\z/
        setup_rb_error "invalid task: #{arg}" unless valid_task?(arg)
        return arg
      when '-q', '--quiet'
        @config.verbose = false
      when '--verbose'
        @config.verbose = true
      when '--help'
        print_usage $stdout
        exit 0
      when '--version'
        puts "#{File.basename($0)} version #{Version}"
        exit 0
      when '--copyright'
        puts Copyright
        exit 0
      else
        setup_rb_error "unknown global option '#{arg}'"
      end
    end
    nil
  end

  def valid_task?(t)
    valid_task_re() =~ t
  end

  def valid_task_re
    @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/
  end

  def parsearg_no_options
    unless ARGV.empty?
      task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1)
      setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}"
    end
  end

  alias parsearg_show       parsearg_no_options
  alias parsearg_setup      parsearg_no_options
  alias parsearg_test       parsearg_no_options
  alias parsearg_clean      parsearg_no_options
  alias parsearg_distclean  parsearg_no_options

  def parsearg_config
    evalopt = []
    set = []
    @config.config_opt = []
    while i = ARGV.shift
      if /\A--?\z/ =~ i
        @config.config_opt = ARGV.dup
        break
      end
      name, value = *@config.parse_opt(i)
      if @config.value_config?(name)
        @config[name] = value
      else
        evalopt.push [name, value]
      end
      set.push name
    end
    evalopt.each do |name, value|
      @config.lookup(name).evaluate value, @config
    end
    # Check if configuration is valid
    set.each do |n|
      @config[n] if @config.value_config?(n)
    end
  end

  def parsearg_install
    @config.no_harm = false
    @config.install_prefix = ''
    while a = ARGV.shift
      case a
      when '--no-harm'
        @config.no_harm = true
      when /\A--prefix=/
        path = a.split(/=/, 2)[1]
        path = File.expand_path(path) unless path[0,1] == '/'
        @config.install_prefix = path
      else
        setup_rb_error "install: unknown option #{a}"
      end
    end
  end

  def print_usage(out)
    out.puts 'Typical Installation Procedure:'
    out.puts "  $ ruby #{File.basename $0} config"
    out.puts "  $ ruby #{File.basename $0} setup"
    out.puts "  # ruby #{File.basename $0} install (may require root privilege)"
    out.puts
    out.puts 'Detailed Usage:'
    out.puts "  ruby #{File.basename $0} <global option>"
    out.puts "  ruby #{File.basename $0} [<global options>] <task> [<task options>]"

    fmt = "  %-24s %s\n"
    out.puts
    out.puts 'Global options:'
    out.printf fmt, '-q,--quiet',   'suppress message outputs'
    out.printf fmt, '   --verbose', 'output messages verbosely'
    out.printf fmt, '   --help',    'print this message'
    out.printf fmt, '   --version', 'print version and quit'
    out.printf fmt, '   --copyright',  'print copyright and quit'
    out.puts
    out.puts 'Tasks:'
    TASKS.each do |name, desc|
      out.printf fmt, name, desc
    end

    fmt = "  %-24s %s [%s]\n"
    out.puts
    out.puts 'Options for CONFIG or ALL:'
    @config.each do |item|
      out.printf fmt, item.help_opt, item.description, item.help_default
    end
    out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's"
    out.puts
    out.puts 'Options for INSTALL:'
    out.printf fmt, '--no-harm', 'only display what to do if given', 'off'
    out.printf fmt, '--prefix=path',  'install path prefix', ''
    out.puts
  end

  #
  # Task Handlers
  #

  def exec_config
    @installer.exec_config
    @config.save   # must be final
  end

  def exec_setup
    @installer.exec_setup
  end

  def exec_install
    @installer.exec_install
  end

  def exec_test
    @installer.exec_test
  end

  def exec_show
    @config.each do |i|
      printf "%-20s %s\n", i.name, i.value if i.value?
    end
  end

  def exec_clean
    @installer.exec_clean
  end

  def exec_distclean
    @installer.exec_distclean
  end

end   # class ToplevelInstaller


class ToplevelInstallerMulti < ToplevelInstaller

  include FileOperations

  def initialize(ardir_root, config)
    super
    @packages = directories_of("#{@ardir}/packages")
    raise 'no package exists' if @packages.empty?
    @root_installer = Installer.new(@config, @ardir, File.expand_path('.'))
  end

  def run_metaconfigs
    @config.load_script "#{@ardir}/metaconfig", self
    @packages.each do |name|
      @config.load_script "#{@ardir}/packages/#{name}/metaconfig"
    end
  end

  attr_reader :packages

  def packages=(list)
    raise 'package list is empty' if list.empty?
    list.each do |name|
      raise "directory packages/#{name} does not exist"\
              unless File.dir?("#{@ardir}/packages/#{name}")
    end
    @packages = list
  end

  def init_installers
    @installers = {}
    @packages.each do |pack|
      @installers[pack] = Installer.new(@config,
                                       "#{@ardir}/packages/#{pack}",
                                       "packages/#{pack}")
    end
    with    = extract_selection(config('with'))
    without = extract_selection(config('without'))
    @selected = @installers.keys.select {|name|
                  (with.empty? or with.include?(name)) \
                      and not without.include?(name)
                }
  end

  def extract_selection(list)
    a = list.split(/,/)
    a.each do |name|
      setup_rb_error "no such package: #{name}"  unless @installers.key?(name)
    end
    a
  end

  def print_usage(f)
    super
    f.puts 'Inluded packages:'
    f.puts '  ' + @packages.sort.join(' ')
    f.puts
  end

  #
  # Task Handlers
  #

  def exec_config
    run_hook 'pre-config'
    each_selected_installers {|inst| inst.exec_config }
    run_hook 'post-config'
    @config.save   # must be final
  end

  def exec_setup
    run_hook 'pre-setup'
    each_selected_installers {|inst| inst.exec_setup }
    run_hook 'post-setup'
  end

  def exec_install
    run_hook 'pre-install'
    each_selected_installers {|inst| inst.exec_install }
    run_hook 'post-install'
  end

  def exec_test
    run_hook 'pre-test'
    each_selected_installers {|inst| inst.exec_test }
    run_hook 'post-test'
  end

  def exec_clean
    rm_f @config.savefile
    run_hook 'pre-clean'
    each_selected_installers {|inst| inst.exec_clean }
    run_hook 'post-clean'
  end

  def exec_distclean
    rm_f @config.savefile
    run_hook 'pre-distclean'
    each_selected_installers {|inst| inst.exec_distclean }
    run_hook 'post-distclean'
  end

  #
  # lib
  #

  def each_selected_installers
    Dir.mkdir 'packages' unless File.dir?('packages')
    @selected.each do |pack|
      $stderr.puts "Processing the package `#{pack}' ..." if verbose?
      Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}")
      Dir.chdir "packages/#{pack}"
      yield @installers[pack]
      Dir.chdir '../..'
    end
  end

  def run_hook(id)
    @root_installer.run_hook id
  end

  # module FileOperations requires this
  def verbose?
    @config.verbose?
  end

  # module FileOperations requires this
  def no_harm?
    @config.no_harm?
  end

end   # class ToplevelInstallerMulti


class Installer

  FILETYPES = %w( bin lib ext data conf man )

  include FileOperations
  include HookScriptAPI

  def initialize(config, srcroot, objroot)
    @config = config
    @srcdir = File.expand_path(srcroot)
    @objdir = File.expand_path(objroot)
    @currdir = '.'
  end

  def inspect
    "#<#{self.class} #{File.basename(@srcdir)}>"
  end

  def noop(rel)
  end

  #
  # Hook Script API base methods
  #

  def srcdir_root
    @srcdir
  end

  def objdir_root
    @objdir
  end

  def relpath
    @currdir
  end

  #
  # Config Access
  #

  # module FileOperations requires this
  def verbose?
    @config.verbose?
  end

  # module FileOperations requires this
  def no_harm?
    @config.no_harm?
  end

  def verbose_off
    begin
      save, @config.verbose = @config.verbose?, false
      yield
    ensure
      @config.verbose = save
    end
  end

  #
  # TASK config
  #

  def exec_config
    exec_task_traverse 'config'
  end

  alias config_dir_bin noop
  alias config_dir_lib noop

  def config_dir_ext(rel)
    extconf if extdir?(curr_srcdir())
  end

  alias config_dir_data noop
  alias config_dir_conf noop
  alias config_dir_man noop

  def extconf
    ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt
  end

  #
  # TASK setup
  #

  def exec_setup
    exec_task_traverse 'setup'
  end

  def setup_dir_bin(rel)
    files_of(curr_srcdir()).each do |fname|
      update_shebang_line "#{curr_srcdir()}/#{fname}"
    end
  end

  alias setup_dir_lib noop

  def setup_dir_ext(rel)
    make if extdir?(curr_srcdir())
  end

  alias setup_dir_data noop
  alias setup_dir_conf noop
  alias setup_dir_man noop

  def update_shebang_line(path)
    return if no_harm?
    return if config('shebang') == 'never'
    old = Shebang.load(path)
    if old
      $stderr.puts "warning: #{path}: Shebang line includes too many args.  It is not portable and your program may not work." if old.args.size > 1
      new = new_shebang(old)
      return if new.to_s == old.to_s
    else
      return unless config('shebang') == 'all'
      new = Shebang.new(config('rubypath'))
    end
    $stderr.puts "updating shebang: #{File.basename(path)}" if verbose?
    open_atomic_writer(path) {|output|
      File.open(path, 'rb') {|f|
        f.gets if old   # discard
        output.puts new.to_s
        output.print f.read
      }
    }
  end

  def new_shebang(old)
    if /\Aruby/ =~ File.basename(old.cmd)
      Shebang.new(config('rubypath'), old.args)
    elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby'
      Shebang.new(config('rubypath'), old.args[1..-1])
    else
      return old unless config('shebang') == 'all'
      Shebang.new(config('rubypath'))
    end
  end

  def open_atomic_writer(path, &block)
    tmpfile = File.basename(path) + '.tmp'
    begin
      File.open(tmpfile, 'wb', &block)
      File.rename tmpfile, File.basename(path)
    ensure
      File.unlink tmpfile if File.exist?(tmpfile)
    end
  end

  class Shebang
    def Shebang.load(path)
      line = nil
      File.open(path) {|f|
        line = f.gets
      }
      return nil unless /\A#!/ =~ line
      parse(line)
    end

    def Shebang.parse(line)
      cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ')
      new(cmd, args)
    end

    def initialize(cmd, args = [])
      @cmd = cmd
      @args = args
    end

    attr_reader :cmd
    attr_reader :args

    def to_s
      "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}")
    end
  end

  #
  # TASK install
  #

  def exec_install
    rm_f 'InstalledFiles'
    exec_task_traverse 'install'
  end

  def install_dir_bin(rel)
    install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755
  end

  def install_dir_lib(rel)
    install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644
  end

  def install_dir_ext(rel)
    return unless extdir?(curr_srcdir())
    install_files rubyextentions('.'),
                  "#{config('sodir')}/#{File.dirname(rel)}",
                  0555
  end

  def install_dir_data(rel)
    install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644
  end

  def install_dir_conf(rel)
    # FIXME: should not remove current config files
    # (rename previous file to .old/.org)
    install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644
  end

  def install_dir_man(rel)
    install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644
  end

  def install_files(list, dest, mode)
    mkdir_p dest, @config.install_prefix
    list.each do |fname|
      install fname, dest, mode, @config.install_prefix
    end
  end

  def libfiles
    glob_reject(%w(*.y *.output), targetfiles())
  end

  def rubyextentions(dir)
    ents = glob_select("*.#{@config.dllext}", targetfiles())
    if ents.empty?
      setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first"
    end
    ents
  end

  def targetfiles
    mapdir(existfiles() - hookfiles())
  end

  def mapdir(ents)
    ents.map {|ent|
      if File.exist?(ent)
      then ent                         # objdir
      else "#{curr_srcdir()}/#{ent}"   # srcdir
      end
    }
  end

  # picked up many entries from cvs-1.11.1/src/ignore.c
  JUNK_FILES = %w( 
    core RCSLOG tags TAGS .make.state
    .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb
    *~ *.old *.bak *.BAK *.orig *.rej _$* *$

    *.org *.in .*
  )

  def existfiles
    glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.')))
  end

  def hookfiles
    %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt|
      %w( config setup install clean ).map {|t| sprintf(fmt, t) }
    }.flatten
  end

  def glob_select(pat, ents)
    re = globs2re([pat])
    ents.select {|ent| re =~ ent }
  end

  def glob_reject(pats, ents)
    re = globs2re(pats)
    ents.reject {|ent| re =~ ent }
  end

  GLOB2REGEX = {
    '.' => '\.',
    '$' => '\$',
    '#' => '\#',
    '*' => '.*'
  }

  def globs2re(pats)
    /\A(?:#{
      pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|')
    })\z/
  end

  #
  # TASK test
  #

  TESTDIR = 'test'

  def exec_test
    unless File.directory?('test')
      $stderr.puts 'no test in this package' if verbose?
      return
    end
    $stderr.puts 'Running tests...' if verbose?
    begin
      require 'test/unit'
    rescue LoadError
      setup_rb_error 'test/unit cannot loaded.  You need Ruby 1.8 or later to invoke this task.'
    end
    runner = Test::Unit::AutoRunner.new(true)
    runner.to_run << TESTDIR
    runner.run
  end

  #
  # TASK clean
  #

  def exec_clean
    exec_task_traverse 'clean'
    rm_f @config.savefile
    rm_f 'InstalledFiles'
  end

  alias clean_dir_bin noop
  alias clean_dir_lib noop
  alias clean_dir_data noop
  alias clean_dir_conf noop
  alias clean_dir_man noop

  def clean_dir_ext(rel)
    return unless extdir?(curr_srcdir())
    make 'clean' if File.file?('Makefile')
  end

  #
  # TASK distclean
  #

  def exec_distclean
    exec_task_traverse 'distclean'
    rm_f @config.savefile
    rm_f 'InstalledFiles'
  end

  alias distclean_dir_bin noop
  alias distclean_dir_lib noop

  def distclean_dir_ext(rel)
    return unless extdir?(curr_srcdir())
    make 'distclean' if File.file?('Makefile')
  end

  alias distclean_dir_data noop
  alias distclean_dir_conf noop
  alias distclean_dir_man noop

  #
  # Traversing
  #

  def exec_task_traverse(task)
    run_hook "pre-#{task}"
    FILETYPES.each do |type|
      if type == 'ext' and config('without-ext') == 'yes'
        $stderr.puts 'skipping ext/* by user option' if verbose?
        next
      end
      traverse task, type, "#{task}_dir_#{type}"
    end
    run_hook "post-#{task}"
  end

  def traverse(task, rel, mid)
    dive_into(rel) {
      run_hook "pre-#{task}"
      __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '')
      directories_of(curr_srcdir()).each do |d|
        traverse task, "#{rel}/#{d}", mid
      end
      run_hook "post-#{task}"
    }
  end

  def dive_into(rel)
    return unless File.dir?("#{@srcdir}/#{rel}")

    dir = File.basename(rel)
    Dir.mkdir dir unless File.dir?(dir)
    prevdir = Dir.pwd
    Dir.chdir dir
    $stderr.puts '---> ' + rel if verbose?
    @currdir = rel
    yield
    Dir.chdir prevdir
    $stderr.puts '<--- ' + rel if verbose?
    @currdir = File.dirname(rel)
  end

  def run_hook(id)
    path = [ "#{curr_srcdir()}/#{id}",
             "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) }
    return unless path
    begin
      instance_eval File.read(path), path, 1
    rescue
      raise if $DEBUG
      setup_rb_error "hook #{path} failed:\n" + $!.message
    end
  end

end   # class Installer


class SetupError < StandardError; end

def setup_rb_error(msg)
  raise SetupError, msg
end

if $0 == __FILE__
  begin
    ToplevelInstaller.invoke
  rescue SetupError
    raise if $DEBUG
    $stderr.puts $!.message
    $stderr.puts "Try 'ruby #{$0} --help' for detailed usage."
    exit 1
  end
end
PK#"#[�'�MM,gems/ruby-lsapi-5.6/scripts/lsruby_runner.rbnuȯ��#!/opt/alt/ruby31/bin/ruby

require 'lsapi'

class CodeCache
    def [](filename)
		mtime = File.mtime( filename )		
		
		entry = @cache[filename];
		if entry != nil 
			return entry
						
		end
		code = compile(filename)
		#entry = CodeEntry.new( filename, mtime, code )
		@cache[filename] = code
		return code
    end

    private

    def initialize
      @cache = {}
    end

    def compile(filename)
		open(filename) do |f|
			s = f.read
			s.untaint
			binding = eval_string_wrap("binding")
			return eval(format("Proc.new {\n%s\n}", s), binding, filename, 0)
		end
    end
end


$count = 0;

$cache = CodeCache.new


while true
	$req = LSAPI.accept 
	break if $req == nil 
	
	filename = ENV['SCRIPT_FILENAME']
	filename.untaint

	filename =~ %r{^(\/.*?)\/*([^\/]+)$}
	path   = $1
	Dir.chdir( path )
	#load( filename, true )	
    code = $cache[filename]
    code.call
	
end

class CodeEntry
	public :path, :name, :mtime, :opcode 
	
	def initizlize( filename, mtime, opcode )
		filename =~ %r{^(\/.*?)\/*([^\/]+)$}
		@path   = $1
		@name   = $2
		@mtime  = mtime
		@opcode = opcode
	end

end


PK#"#[��ԍ#�#&gems/ruby-lsapi-5.6/ext/lsapi/Makefilenu�[���
SHELL = /bin/sh

# V=0 quiet, V=1 verbose.  other values don't work.
V = 1
V0 = $(V:0=)
Q1 = $(V:1=)
Q = $(Q1:0=@)
ECHO1 = $(V:1=@ :)
ECHO = $(ECHO1:0=@ echo)
NULLCMD = :

#### Start of system configuration section. ####

srcdir = .
topdir = /opt/alt/ruby31/include
hdrdir = $(topdir)
arch_hdrdir = /opt/alt/ruby31/include
PATH_SEPARATOR = :
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
prefix = $(DESTDIR)/opt/alt/ruby31
rubysitearchprefix = $(sitearchlibdir)/$(RUBY_BASE_NAME)
rubyarchprefix = $(DESTDIR)/opt/alt/ruby31/lib64/ruby
rubylibprefix = $(exec_prefix)/share/ruby
exec_prefix = $(DESTDIR)/opt/alt/ruby31
vendorarchhdrdir = $(vendorhdrdir)/$(arch)
sitearchhdrdir = $(sitehdrdir)/$(arch)
rubyarchhdrdir = $(DESTDIR)/opt/alt/ruby31/include
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
sitehdrdir = $(rubyhdrdir)/site_ruby
rubyhdrdir = $(DESTDIR)/opt/alt/ruby31/include
rubygemsdir = $(DESTDIR)/opt/alt/ruby31/share/rubygems
vendorarchdir = $(DESTDIR)/opt/alt/ruby31/lib64/ruby/vendor_ruby
vendorlibdir = $(vendordir)
vendordir = $(DESTDIR)/opt/alt/ruby31/share/ruby/vendor_ruby
sitearchdir = $(DESTDIR)/opt/alt/ruby31/lib64/ruby/site_ruby
sitelibdir = $(sitedir)
sitedir = $(DESTDIR)/opt/alt/ruby31/share/ruby/site_ruby
rubyarchdir = $(rubyarchprefix)
rubylibdir = $(rubylibprefix)
sitearchincludedir = $(includedir)/$(sitearch)
archincludedir = $(includedir)/$(arch)
sitearchlibdir = $(libdir)/$(sitearch)
archlibdir = $(DESTDIR)/opt/alt/ruby31/lib64
ridir = $(datarootdir)/$(RI_BASE_NAME)
mandir = $(DESTDIR)/opt/alt/ruby31/share/man
localedir = $(datarootdir)/locale
libdir = $(exec_prefix)/lib64
psdir = $(docdir)
pdfdir = $(docdir)
dvidir = $(docdir)
htmldir = $(docdir)
infodir = $(DESTDIR)/opt/alt/ruby31/share/info
docdir = $(datarootdir)/doc/$(PACKAGE)
oldincludedir = $(DESTDIR)/usr/include
includedir = $(exec_prefix)/include
localstatedir = $(DESTDIR)/var
sharedstatedir = $(DESTDIR)/var/lib
sysconfdir = $(DESTDIR)/etc
datadir = $(DESTDIR)/opt/alt/ruby31/share
datarootdir = $(prefix)/share
libexecdir = $(DESTDIR)/opt/alt/ruby31/libexec
sbindir = $(DESTDIR)/opt/alt/ruby31/sbin
bindir = $(exec_prefix)/bin
archdir = $(rubyarchdir)


CC_WRAPPER = 
CC = gcc
CXX = g++
LIBRUBY = $(LIBRUBY_SO)
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
LIBRUBYARG_SHARED = -Wl,-rpath,$(archlibdir) -L$(archlibdir) -l$(RUBY_SO_NAME)
LIBRUBYARG_STATIC = -Wl,-rpath,$(archlibdir) -L$(archlibdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS)
empty =
OUTFLAG = -o $(empty)
COUTFLAG = -o $(empty)
CSRCFLAG = $(empty)

RUBY_EXTCONF_H = 
cflags   = $(optflags) $(debugflags) $(warnflags)
cxxflags = 
optflags = -O3 -fno-fast-math
debugflags = -ggdb3
warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef
cppflags = 
CCDLFLAGS = -fPIC
CFLAGS   = $(CCDLFLAGS) -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection $(ARCH_FLAG)
INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
DEFS     = 
CPPFLAGS =   $(DEFS) $(cppflags)
CXXFLAGS = $(CCDLFLAGS) -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection $(ARCH_FLAG)
ldflags  = -L. -Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed
dldflags = -Wl,-z,relro  -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld 
ARCH_FLAG = -m64
DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
LDSHARED = $(CC) -shared
LDSHAREDXX = $(CXX) -shared
AR = gcc-ar
EXEEXT = 

RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)
RUBY_SO_NAME = ruby
RUBYW_INSTALL_NAME = 
RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version_dir_name)
RUBYW_BASE_NAME = rubyw
RUBY_BASE_NAME = ruby

arch = x86_64-linux
sitearch = $(arch)
ruby_version = 3.1.0
ruby = $(bindir)/$(RUBY_BASE_NAME)
RUBY = $(ruby)
BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME)
ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h

RM = rm -f
RM_RF = rm -fr
RMDIRS = rmdir --ignore-fail-on-non-empty -p
MAKEDIRS = /usr/bin/mkdir -p
INSTALL = /usr/bin/install -c
INSTALL_PROG = $(INSTALL) -m 0755
INSTALL_DATA = $(INSTALL) -m 644
COPY = cp
TOUCH = exit >

#### End of system configuration section. ####

preload = 
libpath = . $(archlibdir)
LIBPATH =  -L. -L$(archlibdir) -Wl,-rpath,$(archlibdir)
DEFFILE = 

CLEANFILES = mkmf.log
DISTCLEANFILES = 
DISTCLEANDIRS = 

extout = 
extout_prefix = 
target_prefix = 
LOCAL_LIBS = 
LIBS = $(LIBRUBYARG_SHARED)  -lm  -lc
ORIG_SRCS = lsapilib.c lsruby.c
SRCS = $(ORIG_SRCS) 
OBJS = lsapilib.o lsruby.o
HDRS = $(srcdir)/lsapidef.h $(srcdir)/lsapilib.h
LOCAL_HDRS = 
TARGET = lsapi
TARGET_NAME = lsapi
TARGET_ENTRY = Init_$(TARGET_NAME)
DLLIB = $(TARGET).so
EXTSTATIC = 
STATIC_LIB = 

TIMESTAMP_DIR = .
BINDIR        = $(bindir)
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
RUBYLIBDIR    = $(sitelibdir)$(target_prefix)
RUBYARCHDIR   = $(sitearchdir)$(target_prefix)
HDRDIR        = $(sitehdrdir)$(target_prefix)
ARCHHDRDIR    = $(sitearchhdrdir)$(target_prefix)
TARGET_SO_DIR =
TARGET_SO     = $(TARGET_SO_DIR)$(DLLIB)
CLEANLIBS     = $(TARGET_SO) false
CLEANOBJS     = *.o  *.bak

all:    $(DLLIB)
static: $(STATIC_LIB)
.PHONY: all install static install-so install-rb
.PHONY: clean clean-so clean-static clean-rb

clean-static::
clean-rb-default::
clean-rb::
clean-so::
clean: clean-so clean-static clean-rb-default clean-rb
		-$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time

distclean-rb-default::
distclean-rb::
distclean-so::
distclean-static::
distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb
		-$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
		-$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
		-$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true

realclean: distclean
install: install-so install-rb

install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.time
	$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
clean-static::
	-$(Q)$(RM) $(STATIC_LIB)
install-rb: pre-install-rb do-install-rb install-rb-default
install-rb-default: pre-install-rb-default do-install-rb-default
pre-install-rb: Makefile
pre-install-rb-default: Makefile
do-install-rb:
do-install-rb-default:
pre-install-rb-default:
	@$(NULLCMD)
$(TIMESTAMP_DIR)/.sitearchdir.time:
	$(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
	$(Q) $(TOUCH) $@

site-install: site-install-so site-install-rb
site-install-so: install-so
site-install-rb: install-rb

.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S

.cc.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.cc.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.mm.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.mm.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.cxx.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.cxx.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.cpp.o:
	$(ECHO) compiling $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.cpp.S:
	$(ECHO) translating $(<)
	$(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.c.o:
	$(ECHO) compiling $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.c.S:
	$(ECHO) translating $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

.m.o:
	$(ECHO) compiling $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$<

.m.S:
	$(ECHO) translating $(<)
	$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$<

$(TARGET_SO): $(OBJS) Makefile
	$(ECHO) linking shared-object $(DLLIB)
	-$(Q)$(RM) $(@)
	$(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)



$(OBJS): $(HDRS) $(ruby_headers)
PK#"#[�W	q,,(gems/ruby-lsapi-5.6/ext/lsapi/lsapidef.hnu�[���/*
Copyright (c) 2002-2018, Lite Speed Technologies Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of the Lite Speed Technologies Inc nor the
      names of its contributors may be used to endorse or promote
      products derived from this software without specific prior
      written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


#ifndef  _LSAPIDEF_H_
#define  _LSAPIDEF_H_

#include <inttypes.h>

#if defined (c_plusplus) || defined (__cplusplus)
extern "C" {
#endif

enum
{
    H_ACCEPT = 0,
    H_ACC_CHARSET,
    H_ACC_ENCODING,
    H_ACC_LANG,
    H_AUTHORIZATION,
    H_CONNECTION,
    H_CONTENT_TYPE,
    H_CONTENT_LENGTH,
    H_COOKIE,
    H_COOKIE2,
    H_HOST,
    H_PRAGMA,
    H_REFERER,
    H_USERAGENT,
    H_CACHE_CTRL,
    H_IF_MODIFIED_SINCE,
    H_IF_MATCH,
    H_IF_NO_MATCH,
    H_IF_RANGE,
    H_IF_UNMOD_SINCE,
    H_KEEP_ALIVE,
    H_RANGE,
    H_X_FORWARDED_FOR,
    H_VIA,
    H_TRANSFER_ENCODING

};
#define LSAPI_SOCK_FILENO           0

#define LSAPI_VERSION_B0            'L'
#define LSAPI_VERSION_B1            'S'

/* Values for m_flag in lsapi_packet_header */
#define LSAPI_ENDIAN_LITTLE         0
#define LSAPI_ENDIAN_BIG            1
#define LSAPI_ENDIAN_BIT            1

#if defined(__i386__)||defined( __x86_64 )||defined( __x86_64__ )
#define LSAPI_ENDIAN                LSAPI_ENDIAN_LITTLE
#else
#define LSAPI_ENDIAN                LSAPI_ENDIAN_BIG
#endif

/* Values for m_type in lsapi_packet_header */
#define LSAPI_BEGIN_REQUEST         1
#define LSAPI_ABORT_REQUEST         2
#define LSAPI_RESP_HEADER           3
#define LSAPI_RESP_STREAM           4
#define LSAPI_RESP_END              5
#define LSAPI_STDERR_STREAM         6
#define LSAPI_REQ_RECEIVED          7
#define LSAPI_CONN_CLOSE            8
#define LSAPI_INTERNAL_ERROR        9


#define LSAPI_MAX_HEADER_LEN        65535
#define LSAPI_MAX_DATA_PACKET_LEN   16384

#define LSAPI_RESP_HTTP_HEADER_MAX  32768
#define LSAPI_PACKET_HEADER_LEN     8


struct lsapi_packet_header
{
    char    m_versionB0;      /* LSAPI protocol version */
    char    m_versionB1;
    char    m_type;
    char    m_flag;
    union
    {
        int32_t m_iLen;       /* include this header */
        char    m_bytes[4];
    }m_packetLen;
};

/*
    LSAPI request header packet

    1. struct lsapi_req_header
    2. struct lsapi_http_header_index
    3. lsapi_header_offset * unknownHeaders
    4. org http request header
    5. request body if available
*/

struct lsapi_req_header
{
    struct lsapi_packet_header m_pktHeader;

    int32_t m_httpHeaderLen;
    int32_t m_reqBodyLen;
    int32_t m_scriptFileOff;   /* path to the script file. */
    int32_t m_scriptNameOff;   /* decrypted URI, without pathinfo, */
    int32_t m_queryStringOff;  /* Query string inside env */
    int32_t m_requestMethodOff;
    int32_t m_cntUnknownHeaders;
    int32_t m_cntEnv;
    int32_t m_cntSpecialEnv;
} ;


struct lsapi_http_header_index
{
    uint16_t m_headerLen[H_TRANSFER_ENCODING+1];
    int32_t m_headerOff[H_TRANSFER_ENCODING+1];
} ;

struct lsapi_header_offset
{
    int32_t nameOff;
    int32_t nameLen;
    int32_t valueOff;
    int32_t valueLen;
} ;

struct lsapi_resp_info
{
    int32_t m_cntHeaders;
    int32_t m_status;
};

struct lsapi_resp_header
{
    struct  lsapi_packet_header  m_pktHeader;
    struct  lsapi_resp_info      m_respInfo;
};

#if defined (c_plusplus) || defined (__cplusplus)
}
#endif


#endif

PK$"#[/gems/ruby-lsapi-5.6/ext/lsapi/.sitearchdir.timenu�[���PK$"#[d�C�R[R[&gems/ruby-lsapi-5.6/ext/lsapi/lsruby.cnu�[���
#include "ruby.h"

#if defined( RUBY_VERSION_CODE ) && RUBY_VERSION_CODE < 180
#include "util.h"
#else
#include <ruby/util.h>
#include <ruby/version.h>
#endif

#include "lsapilib.h"
#include <errno.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <signal.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>


#ifndef RUBY_API_VERSION_CODE
#define RUBY_API_VERSION_CODE (RUBY_API_VERSION_MAJOR*10000+RUBY_API_VERSION_MINOR*100+RUBY_API_VERSION_TEENY)
#endif

/* RUBY_EXTERN VALUE ruby_errinfo; */
RUBY_EXTERN VALUE rb_stdin;
RUBY_EXTERN VALUE rb_stdout;
#if defined( RUBY_VERSION_CODE ) && RUBY_VERSION_CODE < 180
RUBY_EXTERN VALUE rb_defout;
#endif

static VALUE orig_stdin;
static VALUE orig_stdout;
static VALUE orig_stderr;
#if defined( RUBY_VERSION_CODE ) && RUBY_VERSION_CODE < 180
static VALUE orig_defout;
#endif
static VALUE orig_env;

static VALUE env_copy;

static VALUE lsapi_env;

static int MAX_BODYBUF_LENGTH = (10 * 1024 * 1024);

#if RUBY_API_VERSION_CODE >= 20700
# if defined rb_tainted_str_new
#  undef rb_tainted_str_new
# endif
# define rb_tainted_str_new(p,l)  rb_str_new((p),(l))
#endif

/* static VALUE lsapi_objrefs; */

typedef struct lsapi_data
{
    LSAPI_Request * req;
    VALUE           env;
    ssize_t      (* fn_write)( LSAPI_Request *, const char * , size_t );
}lsapi_data;

static VALUE cLSAPI;

static VALUE s_req = Qnil;
static lsapi_data * s_req_data;

static VALUE s_req_stderr = Qnil;
static lsapi_data * s_stderr_data;
static pid_t s_pid = 0;

typedef struct lsapi_body
{
    char        *bodyBuf;  //we put small one into memory, otherwise, into a memory mapping file, and we still use the bodyBuf to access this mapping
    int	        bodyLen;	//expected length got form content-length
    int	        bodyCurrentLen;	//current length by read() readBodyToReqBuf
    int	        curPos;
}lsapi_body;

static lsapi_body	s_body;
static char sTempFile[1024] = {0};

/*
 * static void lsapi_ruby_setenv(const char *name, const char *value)
 * {
 *    if (!name) return;
 * 
 *    if (value && *value)
 *	    ruby_setenv(name, value);
 *    else
 *        ruby_unsetenv(name);
 } *        *
 */


static void lsapi_mark( lsapi_data * data )
{
    rb_gc_mark( data->env );
}
/*
 * static void lsapi_free_data( lsapi_data * data )
 * {
 *   free( data );
 } *        *
 */
static int add_env_rails( const char * pKey, int keyLen, const char * pValue, int valLen,
                          void * arg )
{
    char * p;
    int len;
    /* Fixup some environment variables for rails */
    switch( *pKey )
    {
        case 'Q':
            if ( strcmp( pKey, "QUERY_STRING" ) == 0 )
            {
                if ( !*pValue )
                    return 1;
            }
            break;
        case 'R':
            if (( *(pKey+8) == 'U' )&&( strcmp( pKey, "REQUEST_URI" ) == 0 ))
            {
                p = strchr( pValue, '?' );
                if ( p )
                {
                    len = valLen - ( p - pValue ) - 1;
                    /* 
                     *                valLen = p - pValue;
                     *p++ = 0;
                     */
                }
                else
                {
                    p = (char *)pValue + valLen;
                    len = 0;
                }
                rb_hash_aset( lsapi_env,rb_tainted_str_new("PATH_INFO", 9),
                              rb_tainted_str_new(pValue, p - pValue));
                rb_hash_aset( lsapi_env,rb_tainted_str_new("REQUEST_PATH", 12),
                              rb_tainted_str_new(pValue, p - pValue));
                if ( *p == '?' )
                    ++p;
                rb_hash_aset( lsapi_env,rb_tainted_str_new("QUERY_STRING", 12),
                rb_tainted_str_new(p, len));
            }
            break;
        case 'S':
            if ( strcmp( pKey, "SCRIPT_NAME" ) == 0 )
            {
                pValue = "/";
                valLen = 1;
            }
            break;
        case 'P':
            if ( strcmp( pKey, "PATH_INFO" ) == 0 )
                return 1;
        default:
            break;
    }
    
    /* lsapi_ruby_setenv(pKey, pValue ); */
    
    rb_hash_aset( lsapi_env,rb_tainted_str_new(pKey, keyLen),
                  rb_tainted_str_new(pValue, valLen));
    return 1;
}

static int add_env_no_fix( const char * pKey, int keyLen, const char * pValue, int valLen,
                           void * arg )
{
    rb_hash_aset( lsapi_env,rb_tainted_str_new(pKey, keyLen),
                  rb_tainted_str_new(pValue, valLen));
    return 1;
}

typedef int (*fn_add_env)( const char * pKey, int keyLen, const char * pValue, int valLen,
                           void * arg );

fn_add_env s_fn_add_env = add_env_no_fix;

static void clear_env()
{
    /* rb_funcall( lsapi_env, rb_intern( "clear" ), 0 ); */
    rb_funcall( lsapi_env, rb_intern( "replace" ), 1, env_copy );
}

static void setup_cgi_env( lsapi_data * data )
{
    clear_env();
    
    LSAPI_ForeachHeader_r( data->req, s_fn_add_env, data );
    LSAPI_ForeachEnv_r( data->req, s_fn_add_env, data );
}

static VALUE lsapi_s_accept( VALUE self )
{
    int pid;
    if ( LSAPI_Prefork_Accept_r( &g_req ) == -1 )
        return Qnil;
    else
    {
        if (s_body.bodyBuf != NULL)
            free (s_body.bodyBuf);
        
        s_body.bodyBuf = NULL;
        s_body.bodyLen = -1;
        s_body.bodyCurrentLen = 0;
        s_body.curPos = 0;    
        
        pid = getpid();
        if ( pid != s_pid )
        {
            s_pid = pid;
            rb_funcall( Qnil, rb_intern( "srand" ), 0 );
        }
        
        setup_cgi_env( s_req_data );
        return s_req;
    }
}


static VALUE lsapi_s_accept_new_conn(VALUE self)
{
    if (LSAPI_Accept_Before_Fork(&g_req) == -1 )
        return Qnil;
    else
        return s_req;
}


static VALUE lsapi_s_postfork_child(VALUE self)
{
    LSAPI_Postfork_Child(&g_req);
    return s_req;
}


static VALUE lsapi_s_postfork_parent(VALUE self)
{
    LSAPI_Postfork_Parent(&g_req);
    return s_req;
}


/*
 * static int chdir_file( const char * pFile )
 * {
 *    char * p = strrchr( pFile, '/' );
 *    int ret;
 *    if ( !p )
 *        return -1;
 *p = 0;
 ret = chdir( pFile );
 *p = '/';
 return ret;
 }
 */

static VALUE lsapi_eval_string_wrap(VALUE self, VALUE str)
{
#if RUBY_API_VERSION_CODE < 20700
    if (rb_safe_level() >= 4)
    {
        Check_Type(str, T_STRING);
    }
    else
#endif
    {
        SafeStringValue(str);
    }
    return rb_eval_string_wrap(StringValuePtr(str), NULL);
}

static VALUE lsapi_process( VALUE self )
{
/*    lsapi_data *data;
    const char * pScriptPath;
    Data_Get_Struct(self,lsapi_data, data);
    pScriptPath = LSAPI_GetScriptFileName_r( data->req );
*/
    /*
     *   if ( chdir_file( pScriptPath ) == -1 )
     *   {
     *       lsapi_send_error( 404 );
     *   }
     *   rb_load_file( pScriptPath );
     */
    return Qnil;
}


static VALUE lsapi_putc(VALUE self, VALUE c)
{
    char ch = NUM2CHR(c);
    lsapi_data *data;
    Data_Get_Struct(self,lsapi_data, data);
    if ( (*data->fn_write)( data->req, &ch, 1 ) == 1 )
        return c;
    else
        return INT2NUM( EOF );
}


static VALUE lsapi_write( VALUE self, VALUE str )
{
    lsapi_data *data;
    int len;
    Data_Get_Struct(self,lsapi_data, data);
    /*    len = LSAPI_Write_r( data->req, RSTRING_PTR(str), RSTRING_LEN(str) ); */
    if (TYPE(str) != T_STRING)
        str = rb_obj_as_string(str);
    len = (*data->fn_write)( data->req, RSTRING_PTR(str), RSTRING_LEN(str) );
    return INT2NUM( len );
}

static VALUE lsapi_print( int argc, VALUE *argv, VALUE out )
{
    int i;
    VALUE line;
    
    /* if no argument given, print `$_' */
    if (argc == 0)
    {
        argc = 1;
        line = rb_lastline_get();
        argv = &line;
    }
    for (i = 0; i<argc; i++)
    {
        if (!NIL_P(rb_output_fs) && i>0)
        {
            lsapi_write(out, rb_output_fs);
        }
        switch (TYPE(argv[i]))
        {
            case T_NIL:
                lsapi_write(out, rb_str_new2("nil"));
                break;
            default:
                lsapi_write(out, argv[i]);
                break;
        }
    }
    if (!NIL_P(rb_output_rs))
    {
        lsapi_write(out, rb_output_rs);
    }
    
    return Qnil;
}

static VALUE lsapi_printf(int argc, VALUE *argv, VALUE out)
{
    lsapi_write(out, rb_f_sprintf(argc, argv));
    return Qnil;
}

static VALUE lsapi_puts _((int, VALUE*, VALUE));

#if RUBY_API_VERSION_CODE >= 10900
static VALUE lsapi_puts_ary(VALUE ary, VALUE out, int recur )
{
    VALUE tmp;
    long i;
    
    if (recur)
    {
        tmp = rb_str_new2("[...]");
        rb_io_puts(1, &tmp, out);
        return Qnil;
    }
    for (i=0; i<RARRAY_LEN(ary); i++) 
    {
        tmp = RARRAY_PTR(ary)[i];
        rb_io_puts(1, &tmp, out);
    }
    return Qnil;
    
}
#else
static VALUE lsapi_puts_ary(VALUE ary, VALUE out)
{
    VALUE tmp;
    int i;
    
    for (i=0; i<RARRAY_LEN(ary); i++)
    {
        tmp = RARRAY_PTR(ary)[i];
        if (rb_inspecting_p(tmp))
        {
            tmp = rb_str_new2("[...]");
        }
        lsapi_puts(1, &tmp, out);
    }
    return Qnil;
}
#endif

static VALUE lsapi_puts(int argc, VALUE *argv, VALUE out)
{
    int i;
    VALUE line;
    
    /* if no argument given, print newline. */
    if (argc == 0)
    {
        lsapi_write(out, rb_default_rs);
        return Qnil;
    }
    for (i=0; i<argc; i++)
    {
        switch (TYPE(argv[i]))
        {
            case T_NIL:
                line = rb_str_new2("nil");
                break;
            case T_ARRAY:
#if RUBY_API_VERSION_CODE >= 10900
                rb_exec_recursive(lsapi_puts_ary, argv[i], out);
#else
                rb_protect_inspect(lsapi_puts_ary, argv[i], out);
#endif
                continue;
            default:
                line = argv[i];
                break;
        }
        line = rb_obj_as_string(line);
        lsapi_write(out, line);
        if (*( RSTRING_PTR(line) + RSTRING_LEN(line) - 1 ) != '\n')
        {
            lsapi_write(out, rb_default_rs);
        }
    }
    
    return Qnil;
}


static VALUE lsapi_addstr(VALUE out, VALUE str)
{
    lsapi_write(out, str);
    return out;
}

static VALUE lsapi_flush( VALUE self )
{
    /*
     *    lsapi_data *data;
     *    Data_Get_Struct(self,lsapi_data, data);
     */
    LSAPI_Flush_r( &g_req ); 
    return Qnil;
}

static VALUE lsapi_getc( VALUE self )
{
    int ch;
    /*
     *    lsapi_data *data;
     *    Data_Get_Struct(self,lsapi_data, data);
     */
#if RUBY_API_VERSION_CODE < 20700
    if (rb_safe_level() >= 4 && !OBJ_TAINTED(self))
    {
        rb_raise(rb_eSecurityError, "Insecure: operation on untainted IO");
    }
#endif
    ch = LSAPI_ReqBodyGetChar_r( &g_req );
    if ( ch == EOF )
        return Qnil;
    return INT2NUM( ch );
}

static inline int isBodyWriteToFile()
{
    return ((s_body.bodyLen >= MAX_BODYBUF_LENGTH)? (1): (0));
}

//create a temp file and open it, if failed, fd = -1
static inline int createTempFile()
{
    int fd = -1;
    char *sfn = strdup(sTempFile);
    
    if ((fd = mkstemp(sfn)) == -1)
    {
        fprintf(stderr, "%s: %s\n", sfn, strerror(errno));
    }
    else
        unlink(sfn);
    
    free(sfn);
    return fd;
}

//return 1 if error occured!
//if already created, always OK (0)
static int createBodyBuf()
{
    int fd = -1;
    if (s_body.bodyLen == -1)
    {
        s_body.bodyLen = LSAPI_GetReqBodyLen_r(&g_req);
        //Error if get a zeor length, should not happen 
        if (s_body.bodyLen < 0)
        {
            //Wrong bode length will be treated as 0
            s_body.bodyLen = 0;
        }
        
        if (s_body.bodyLen > 0) 
        {
            if (isBodyWriteToFile())
            {
                //create file mapping
                fd = createTempFile();
                if (fd == -1)
                {
                    return 1;
                }
                if (ftruncate(fd, s_body.bodyLen) == 0)
                {
                    perror("ftruncate() failed. \n");
                    close(fd);
                    return 1;
                }
                s_body.bodyBuf = mmap(NULL, s_body.bodyLen, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
                if (s_body.bodyBuf == MAP_FAILED)
                {
                    perror("File mapping failed. \n");
                    close(fd);
                    return 1;
                }
                close(fd);  //close since needn't it anymore
            }
            else
            {
                s_body.bodyBuf = (char *)calloc(s_body.bodyLen, sizeof(char));
                if (s_body.bodyBuf == NULL)
                {
                    perror("Memory calloc error");
                    return 1;
                }
            }
        }
    }

    return 0;   
}

static inline int isAllBodyRead()
{
    return (s_body.bodyCurrentLen < s_body.bodyLen)? 0 : 1;
}

static inline int isEofBodyBuf()
{
    return (s_body.curPos < s_body.bodyLen) ? 0 : 1;
}
//try to read length as times pagesize (such as 8KB * N)
static int readBodyBuf(const int needRead)
{
    const int blockSize = 8192;
    char *buff = s_body.bodyBuf + s_body.bodyCurrentLen;
    int nRead;
    int readMore = (needRead + blockSize -1) / blockSize * blockSize;
    int remain = LSAPI_GetReqBodyRemain_r( &g_req );
    //Only when not enough left, needReadChange will be changed!!!
    if (remain < readMore) 
        readMore = remain;

    if ( readMore <= 0 )
        return 0;
    
    nRead = LSAPI_ReadReqBody_r(&g_req, buff, readMore);
    if ( nRead > 0 )
        s_body.bodyCurrentLen += nRead;

    return nRead;
}

static VALUE lsapi_gets( VALUE self )
{
    VALUE str;
    const int blkSize = 4096;
    int n;
    char *p = NULL;
    
#if RUBY_API_VERSION_CODE < 20700
    if (rb_safe_level() >= 4 && !OBJ_TAINTED(self))
    {
        rb_raise(rb_eSecurityError, "Insecure: operation on untainted IO");
    }
#endif
    if (createBodyBuf() == 1)
    {
        return Qnil;
    }   
    
    //comment:
    while((p = memmem(s_body.bodyBuf + s_body.curPos, s_body.bodyCurrentLen - s_body.curPos, "\n", 1)) == NULL) 
    {
        if (isAllBodyRead() == 1)
            break;
        //read one page and check, then reply
        readBodyBuf(blkSize);
    }
    
    p = memmem(s_body.bodyBuf + s_body.curPos, s_body.bodyCurrentLen - s_body.curPos, "\n", 1);
    if (p != NULL)
        n = p - s_body.bodyBuf - s_body.curPos + 1;
    else
        n = s_body.bodyCurrentLen - s_body.curPos;
    
    str = rb_str_buf_new( n );
#if RUBY_API_VERSION_CODE < 20700
    OBJ_TAINT(str);
#endif
    
    if (n > 0)
    {
        rb_str_buf_cat( str, s_body.bodyBuf + s_body.curPos, n );
        s_body.curPos += n;
    }
    
    return str;
}

static VALUE lsapi_read(int argc, VALUE *argv, VALUE self)
{
    VALUE str;
    int n;
    int needRead;
    int nRead;
    
#if RUBY_API_VERSION_CODE < 20700
    if (rb_safe_level() >= 4 && !OBJ_TAINTED(self))
    {
        rb_raise(rb_eSecurityError, "Insecure: operation on untainted IO");
    }
#endif
    if (createBodyBuf() == 1)
    {
        return Qnil;
    }
    
    //we need to consider these 4 cases:
    //1, need all data since argc == 0, we may have all data 2, or not
    //3, need a length of data (argv >= 1), we may have enough data already read, 4, or not
    if (argc == 0)
        n = s_body.bodyLen - s_body.curPos;
    else
    {
        n = NUM2INT(argv[0]); //request that length from currentpos
        if (n < 0)
            return Qnil;
        if (n > s_body.bodyLen - s_body.curPos)
            n = s_body.bodyLen - s_body.curPos;            
    }
    needRead = s_body.curPos + n - s_body.bodyCurrentLen;
    if (needRead < 0)
        needRead = 0;
    
    str = rb_str_buf_new( n );
#if RUBY_API_VERSION_CODE < 20700
    OBJ_TAINT(str);
#endif
    if (n == 0)
        return str;
    
    //copy already have part first
    if (n - needRead != 0)
    {
        rb_str_buf_cat( str, s_body.bodyBuf + s_body.curPos, n - needRead);
        s_body.curPos += (n - needRead);
    }
    
    if (needRead > 0)
    {
        //try to read needRead, but may be less (changed) when read the end of the data
        nRead = readBodyBuf(needRead);
        if (nRead > 0)
        {
            n = ((nRead < needRead) ? nRead : needRead);
            rb_str_buf_cat( str, s_body.bodyBuf + s_body.curPos, n );
            s_body.curPos += n;
        }
    }
    
    return str;
}

static VALUE lsapi_rewind(VALUE self)
{  
    s_body.curPos = 0;
    return self;
}

static VALUE lsapi_each(VALUE self)
{
    VALUE str;
    lsapi_rewind(self);
   
    while(isEofBodyBuf() != 1)
    {
        str = lsapi_gets(self);
        rb_yield(str);
    }
    return self;

}

static VALUE lsapi_eof(VALUE self)
{
    return (LSAPI_GetReqBodyRemain_r( &g_req ) <= 0) ? Qtrue : Qfalse;
}

static VALUE lsapi_binmode(VALUE self)
{
    return self;
}

static VALUE lsapi_isatty(VALUE self)
{
    return Qfalse;
}

static VALUE lsapi_sync(VALUE self)
{
    return Qfalse;
}

static VALUE lsapi_setsync(VALUE self,VALUE sync)
{
    return Qfalse;
}

static VALUE lsapi_close(VALUE self)
{
    LSAPI_Flush_r( &g_req );
    if (isBodyWriteToFile())
    {
        //msync(s_body.bodyBuf, s_body.bodyLen, MS_SYNC);
        //sleep(5);
        munmap(s_body.bodyBuf, s_body.bodyLen);
    }
    else
        free(s_body.bodyBuf);
    
    s_body.bodyBuf = NULL;
    s_body.bodyLen = -1;
    s_body.bodyCurrentLen = 0;
    s_body.curPos = 0;    
    //Should the temp be deleted here?!
        
    return Qnil;
}


static VALUE lsapi_reopen( int argc, VALUE *argv, VALUE self)
{
    VALUE orig_verbose;
    if ( self == s_req_stderr )
    {
        /* constant silence hack */
        orig_verbose = (VALUE)ruby_verbose;
        ruby_verbose = Qnil;
        
        rb_define_global_const("STDERR", orig_stderr);
        
        ruby_verbose = (VALUE)orig_verbose;
        
        return rb_funcall2( orig_stderr, rb_intern( "reopen" ), argc, argv );
        
    }
    return self;
}

static void readMaxBodyBufLength()
{
    int n;
    const char *p = getenv( "LSAPI_MAX_BODYBUF_LENGTH" );
    if ( p )
    {
        n = atoi( p );
        if (n > 0)
        {
            if (strstr(p, "M") || strstr(p, "m"))
                MAX_BODYBUF_LENGTH = n * 1024 * 1024;
            else if (strstr(p, "K") || strstr(p, "k"))
                MAX_BODYBUF_LENGTH = n * 1024;
            else
                MAX_BODYBUF_LENGTH = n;
        }
    }
}

static void readTempFileTemplate()
{
    const char *p = getenv( "LSAPI_TEMPFILE" );
    if (p == NULL || strlen(p) > 1024 - 7)
         p = "/tmp/lsapi.XXXXXX";
    
    strcpy(sTempFile, p);
    if (strlen(p) <= 6 || strcmp(p + (strlen(p) - 6), "XXXXXX") != 0)
        strcat(sTempFile, ".XXXXXX");
}

static void initBodyBuf()
{
    s_body.bodyBuf = NULL;
    s_body.bodyLen = -1;
    s_body.bodyCurrentLen = 0;
    s_body.curPos = 0;    
}
void Init_lsapi()
{
    VALUE orig_verbose; 
    char * p;
    int prefork = 0;
    LSAPI_Init();
    initBodyBuf();
    
    readMaxBodyBufLength();
    readTempFileTemplate();
    
    p = getenv("LSAPI_CHILDREN");
    if (p && atoi(p) > 1)
        prefork = 1;

#ifdef rb_thread_select
    LSAPI_Init_Env_Parameters( rb_thread_select );
#else
    LSAPI_Init_Env_Parameters( select );
#endif
    
    s_pid = getpid();
    
    p = getenv( "RACK_ROOT" );
    if ( p )
    {
        if ( chdir( p ) == -1 )
            perror( "chdir()" );
    }
    if ( p || getenv( "RACK_ENV" ) )
        s_fn_add_env = add_env_rails;
    
    orig_stdin = rb_stdin;
    orig_stdout = rb_stdout;
    orig_stderr = rb_stderr;
#if defined( RUBY_VERSION_CODE ) && RUBY_VERSION_CODE < 180
    orig_defout = rb_defout;
#endif
    orig_env = rb_const_get( rb_cObject, rb_intern("ENV") );
    env_copy = rb_funcall( orig_env, rb_intern( "to_hash" ), 0 );
    
    /* tell the garbage collector it is a global variable, do not recycle it. */
    rb_global_variable(&env_copy);
    
    rb_hash_aset( env_copy,rb_tainted_str_new("GATEWAY_Irewindable_input.rbNTERFACE", 17),
                                              rb_tainted_str_new("CGI/1.2", 7));
        
    rb_define_global_function("eval_string_wrap", lsapi_eval_string_wrap, 1);
    
    cLSAPI = rb_define_class("LSAPI", rb_cObject);
    rb_define_singleton_method(cLSAPI, "accept", lsapi_s_accept, 0);
    if (prefork)
    {
        rb_define_singleton_method(cLSAPI, "accept_new_connection", lsapi_s_accept_new_conn, 0);
        rb_define_singleton_method(cLSAPI, "postfork_child", lsapi_s_postfork_child, 0);
        rb_define_singleton_method(cLSAPI, "postfork_parent", lsapi_s_postfork_parent, 0);
    }

    rb_define_method(cLSAPI, "process", lsapi_process, 0 );
    /* rb_define_method(cLSAPI, "initialize", lsapi_initialize, 0); */
    rb_define_method(cLSAPI, "putc", lsapi_putc, 1);
    rb_define_method(cLSAPI, "write", lsapi_write, 1);
    rb_define_method(cLSAPI, "print", lsapi_print, -1);
    rb_define_method(cLSAPI, "printf", lsapi_printf, -1);
    rb_define_method(cLSAPI, "puts", lsapi_puts, -1);
    rb_define_method(cLSAPI, "<<", lsapi_addstr, 1);
    rb_define_method(cLSAPI, "flush", lsapi_flush, 0);
    rb_define_method(cLSAPI, "getc", lsapi_getc, 0);
    /* rb_define_method(cLSAPI, "ungetc", lsapi_ungetc, 1); */
    rb_define_method(cLSAPI, "gets", lsapi_gets, 0);
    
    //TEST: adding readline function to make irb happy?
    /*rb_define_method(cLSAPI, "readline", lsapi_gets, 0); */
    
    rb_define_method(cLSAPI, "read", lsapi_read, -1);
    rb_define_method(cLSAPI, "rewind", lsapi_rewind, 0);
    rb_define_method(cLSAPI, "each", lsapi_each, 0);
    
    rb_define_method(cLSAPI, "eof", lsapi_eof, 0);
    rb_define_method(cLSAPI, "eof?", lsapi_eof, 0);
    rb_define_method(cLSAPI, "close", lsapi_close, 0);
    /* rb_define_method(cLSAPI, "closed?", lsapi_closed, 0); */
    rb_define_method(cLSAPI, "binmode", lsapi_binmode, 0);
    rb_define_method(cLSAPI, "isatty", lsapi_isatty, 0);
    rb_define_method(cLSAPI, "tty?", lsapi_isatty, 0);
    rb_define_method(cLSAPI, "sync", lsapi_sync, 0);
    rb_define_method(cLSAPI, "sync=", lsapi_setsync, 1);
    rb_define_method(cLSAPI, "reopen", lsapi_reopen, -1 );
    
    
    s_req = Data_Make_Struct( cLSAPI, lsapi_data, lsapi_mark, free, s_req_data );
    s_req_data->req = &g_req;
    s_req_data->fn_write = LSAPI_Write_r;
    rb_stdin = rb_stdout = s_req;
    
#if defined( RUBY_VERSION_CODE ) && RUBY_VERSION_CODE < 180
    rb_defout = s_req;
#endif

    rb_global_variable(&s_req );
    
    s_req_stderr = Data_Make_Struct( cLSAPI, lsapi_data, lsapi_mark, free, s_stderr_data );
    s_stderr_data->req = &g_req;
    s_stderr_data->fn_write = LSAPI_Write_Stderr_r;
    rb_stderr = s_req_stderr;
    rb_global_variable(&s_req_stderr );
    
    /* constant silence hack */
    orig_verbose = (VALUE)ruby_verbose;
    ruby_verbose = Qnil;
    
    lsapi_env = rb_hash_new();
    clear_env();
    /* redefine ENV using a hash table, should be faster than char **environment */
    rb_define_global_const("ENV", lsapi_env);
    
    rb_define_global_const("STDERR", rb_stderr);
    
    ruby_verbose = (VALUE)orig_verbose;
    
    return;
}

PK$"#[�7Zw��(gems/ruby-lsapi-5.6/ext/lsapi/extconf.rbnu�[���require 'mkmf'
dir_config( 'lsapi' )
if ( have_library( "socket" ))
    have_library( "nsl" )
end
if RUBY_VERSION =~ /1.9/ then
    $CPPFLAGS += " -DRUBY_19"
end 
if RUBY_VERSION =~ /2/ then
    $CPPFLAGS += " -DRUBY_2"
end 
create_makefile( "lsapi" )
PK$"#[���F����&gems/ruby-lsapi-5.6/ext/lsapi/lsruby.onu�[���ELF>�@@;:

.01-2,3����fD���H���ff.���H�H���H+���H���HO��D��H������1��f���1��f���ATI��H��US��Hc��Hc�L��H���H�=H��H���[�]A\�ff.���H����H��H�=��H���f���H��H�=�Hc5;5H�=|6�H������H���H���fD���f����?��I�H�=���H���H+��9�M�1���~+H��Hc�Hc5H5���~H���f��ff.�@��H��H�=����tH�H��H�D��H���ff.���H��H�=�H�H�����H��H�=�H�H�����H��H�=�����tH�H��H�����SH��H�\$H�t$H���H���1�H���H��[�ff.�f���AWAVAUA��ATI��U��SH��H���<Q��~v<R��<Su"�H�=H���������@Mc�L��L���Hc�H��I���H�=L��H���H���[]A\A]A^A_�fD<Pu��
H�=H�������u��ƀULc�u��H�=H��������t����?H���I��H���H��A��L)�A)�Mc�H��L��H�L$��	H�=H�$�H�$H�=H���H�L$L��H����H�=H�$�H�$H�=H���1�A�??L����I�L����H�=I���H�=L��H������fD�
H�=H��������r����:�i������@A�L�%�Q���fDO�<4L��E1�����=�t1��@H�H����=����t�USH��;=��H�=�H��H����Ń����H���H���Hc��H�������E1�A���H��1��H�H��������1�H��[]�f.�Hc���H�H��u�H�=����@�1��H�=������fD��8�H�پH�I��H�H�81��H�����N���H�=������1���f���AU1�ATUH��S��H���V������������-��+Hc�D�%�I�Ņ�t"D)�A�DI�D9�uD��������H��L��[]A\A]ÐD)�Hc5H��H5Hc�����H��L��[]A\A]�@H�}@��u&���xU�-�)�9�O���T�����ؐD9�Hc5L��DN�H5Ic��D%�U���@H��A�[L��]A\A]�ff.��AWAVL�5AUATUSH���f�D9-~N��}���D�-M�&�H�Hc=D��)�I��L�Hc�H���H��t�L)�D)��XHc�H���I�ą�~Hc5H��H5H���H��L��[]A\A]A^A_�f���H��1��a�����tH���#����H���fD���SH������2f����H����9}1������uٿ��f�H��[�ff.���AUATUH��SH��dH�%(H�D$1�����H��E1�I���G@H����I9�}HH���H��uj�� tUH�CJ��H��L��I��H�$�H��� u�H�CI9�|�H�L$dH3%(�uVH��[]A\A]�@H�C �f.�H���H���H�=�H��H��H�$���@��1��f���USH��@��t��fDH�����t�H���H��u�H�t�H��H�_ H��@��uH��uNH���H�H�k�� t*H�pH�PH��tEH�;��H��H�[]H�D�f.�H��H�p����H�H��H�у�H��t��@H�=H�T$H�4$�H�T$H�4$����SH������H��[�ff.���SH���H��H������[Ð��UH��SH��H��dH�%(H�D$1���uH�����tH�H�ƒ�H��tsH�������D$@��uyH�����tpH�E��H��ucH�}t\H�E H�t$�H�8�PH��H�����HD�H�L$dH3%(u_H��[]Ð�� u+H�S���y�����D$@��t��H���f�H�{�R���H�SH��u������@SH��dH�%(H�D$1�H�H�$H�H��u%H�D�H���H�H��t�H�=H��H���H�D$dH3%(uH��[��ff.�f���USH��H�=�����tyH�=H��t�H������H���9uI1�H�����H�-H�;H��H�u�H�uH�;H���H�H��H��[]�D�H�H��u'H���H���H�H��t�1�1�H�ƿ��h���f���H9tH����ATUH��S���L� �H�5H�=H���L� H�H��u%L�%D�L���H�H��t�H�=H���H��[]A\����AWAVAUATUH��SH�����C���G�H��L�-L�d��tf�H�������H��ubfD�H��I��H���5���I��� ��M�~M����I�FA�|�
tH�H��H�0���H��L9�t[H�;@��t�H��u�fDH�=��H���f.�H�����u5H��H��H��H�=�����L9�u�H���[]A\A]A^A_�fD��t��.���fDM�~H�����H���L���I��� �0�����f.�H�H��H�0�.����ff.����AVAUATUH��SH��dH�%(H�D$1�������I��H�6A���L�5�H�H�������H��u4H�����A9�~NH�H�0H��tH�����I�t�H��@��t�H��u�@�L���H��H���h���A9��H�H�0H��u;H�L$dH3%(�uPH��[]A\A]A^ÐH���H��t��a����H�������fD�I��A�H��H�$�����f���AUATUSH��������H�=H�H���H��t8�
1�H��H���H��~�MH���H�������-H�=�H��H��tH���H��H=��`�Xfof�)H�=1��H��t1��
H��1����@��H�=��H�=��H����H��������H�H�W�H�H�H�H�H�H��u L�%�L���H�H��t�L�%H��I�<$�H�5H�H��u4L�-f.��L���H��H�H��t�H�1�1�H���H�=H���H�=��H�=I���H�=L��H����H�5�H�=�I�4$H�=�1�H�F���H�5H��H������H�=1�H�(�H�5�H�=�H�Y���H�5�H�=�H����H�5�H�=�����H����H�5�H�=�����H����H�5�H�=�����H����H�5�H�=�H�~���H�5�H�=1�H�B�H�5�H�=1�H�&�H�5�H�=1�H���H�5�H�=�����H���H�5�H�=1�H���H�5�H�=1�H���H�5�H�=1�H���H�5�H�=1�H���H�5�H�=1�H��H�5�H�=1�H���H�5�H�=1�H���H�5�H�=1�H���H�5�H�=1�H��H�5�H�=�H�`�H�5�H�=�����H�����H�5�L�%H�=�H�{�L���H�-H�
H�=H�P H�H�JH�*H�H�H�H�H��H�=L��H���H�
H�=H�P H�H�JH�*H���H�(�H��H�1��B���H�5H�=�H�3H�=��H�(H��[]A\A]�DH�P�H��H�=�H��wH�H�.XXXXXXH�(���H�t+��H�=�����u��b����H�=1�H���H�5�H�=1�H�l�H�5�H�=1�H�0�H�5�����H�=��R����H�=�H���6����B���fD�mH���H���^����KH���H��t��
�-�G����kH���H��u�-�*����GA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realign
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realign/QUERY_STRINGREQUEST_URIPATH_INFOREQUEST_PATHSCRIPT_NAME%s: %s
ftruncate() failed. 
File mapping failed. 
Memory calloc error
[...]RSTRING_PTRreplacesrandSTDERRreopennilLSAPI_MAX_BODYBUF_LENGTHLSAPI_TEMPFILEXXXXXXLSAPI_CHILDRENRACK_ROOTchdir()ENVto_hashCGI/1.2eval_string_wrapLSAPIacceptaccept_new_connectionpostfork_childpostfork_parentprocessputcwriteprintprintfputs<<flushgetcgetsreadrewindeacheofeof?closebinmodeisattytty?syncsync=RACK_ENVH�=��%GATEWAY_Irewindable_input.rbNTERFACE/tmp/lsapi.XXXXX�_a)b�)X%J'Q(�cint�)5�������������
)�1�3�6	�7	�8	�9	� :	�(;	�0<	�8=	�@@	�HA	�PB	�XD�`F�hH�pI�tJ�xMQ�NX�O��Q��Y
��[��\��]��^	<�_
>�`��b��
d+"�
��)�"�"���)���?�M��&�&�&�&��`GU`�`a���edw�7��7!�$�2�7�;�7��\)�L�����L����7� 4� 6	� 7	���!g)�fID!h),5TO4@"@x"M�"X�,5p3	

,5	�L,�	�b  @`�######## #@#� @� @g����x#@#,5��# � ,5��h
�A�A�H�	2len��Bptr�Baux�i	Bary*�.);�RA�A,@(�|I�OBas-.,5e�# �,5��;�
�/��/��H�		2len��2aux��2ptr�	�;�B	/��jary�R	�R	)B	@(��	I�O2as� 	l�	�	k�	+<@(|�	IO��	��	�< ��,5#R
�
�$

H
�o

��
�o
*
�
0*
<8*
+�@H(
��

��	
��	
��

��	
��
 J>�
+��
<�
)
l(
T.m
WO*
^�
*
g�*
j< $8�$9�$:�$;�$<�$=�$>�$?�$@�$A�$C�$E�$F�$G�$H�$I�$J�$K�$L�$M�$N�$O�$P�$Q�$R�$S�$T�$U�$V�$W�$X�$Y�$Z�$[�$\�$]�$^�$_�$`�$a�$b�$c�$d�$e�$m�$n�$o�$p�$q�$r�$s�$t�$u�$v�$w�$x�$y�$z�${�$|�$}�$~�$�$��$��$��$��$��$��$��$��$��$��$��$��$��$��$��$��$��$��$��$��%3�%>�%K�%T�%]�&)�_lGa',l��G}'2���)�(i�(q�(t�(��(��(��(��(��n5),�	

;)q�/)s�/)t�)k$)m
�)n
�)o
�)p
�)u�,)��)� �)�
�)�
�)�
�)�
�)�
�)�
�)�
� )�
�$)�
�(�)��)��)�
�4��)��))�>)�
�)�
�)�
�)�
�)�f)�
�)�
�)��)�"�)�">/�1�2�3�4�o	:�<�=�?�@�B�C� E�(F�0G�8I�@J�HK�PL!�XO`PhQpRxT'$�V'*�W'0�X'0�Y'��Z'��\'6�]'<�_��`��a��b��c��d��e��f�g�h��i��Ck'BCm'f(Cn'R8Co<	"�**<*>��$����R)pcQ)�q�sc�J��+�+�+�+�+<+-�+.�,Q-��-��-�
���)
�""%%/"::D"OOY.��.��.�O.�4.��dd�p.*.�*.O*.�*.�*.���"%"00:"EEO"ZZd"ooy"������*�?�T���� �5�J�_t�.�.O.!(.{�;.��/.�
�/.��/.����)��)��).��.�	[�.��.��J)�)@7/7/<"�<#�$�	(�	*�	,�	.�	9�2req;�2env<�=
cJ
+�+�+>�>�@�	B�	C^	E�	<F^G�	I�K�L�M�N�O�Q�	�Q)�R
	�{q�'	r4S�,'%6�3p7�%8	�=,_DZ*�	[G,Z*zGmG�G%�G�G	,\U|T3EZ%[�8[<'%[�EAD[�	[G[zGmG�G%�G�G	,\U}T7	8\Q0R0E�%�
�	D\THQ	R|E�%��	D\THQ	R|RH':
l'<z'�'
M
y)M	P\UsT0Q:\\�U	i\�UsTMi\�UsTmi\�UsTK	i\UsTk
R'= `'
�L(�	M�L	�\U	TsQvR
(�L*	��L�L\\�U		�\Us
M@S )M	P\T0Q:�\\\ U	�\�\\\� U	�\�\�\� U	�\!U	T7�\9!U	TA]Q!Q}~!U	T	Q1]�!U	�!T	Q	R0�!T	Q	R0$"T	Q	R1Q"T	Q	R1"T	Q	R	��"T	Q	R	��"T	Q	R	�#T	Q	R15#T	Q	R0b#T	Q	R0�#T	Q	R0�#T	Q	R	��#T	Q	R0$T	Q	R0D$T	Q	R0q$T	Q	R0�$T	Q	R0�$T	Q	R0�$T	Q	R0%%T	Q	R0R%T	Q	R0%T	Q	R1�%T	Q	R	��\�%U	�\�%U	]],].B8]>&U	8]]&U	]�&T	Q	R0�&T	Q	R0�&T	Q	R0E]'U		\\U	�<'sA','t-
S"
l'p$�S
�'n	�p����'� ��-
�9�8��TD	*�	$��g�s(� �K�-�	R]^]j]$����(>�"�U>�-�Tu���(�����(�!�$���')>�"�U$��+��)>��U�F�
&�F$��U��*��3str��(�*
�*�*R�-�
�,��*�, �,�, �,�,wP�*U�,s�-w]���*�!�$y�4��,y�y*
y6�3str{�3n|	�%}	�%~	�
lK�
�+}K�KVhL��+yL�]�]�-�]',Us $ &�,?,U|�]c,U}Qs $ &	�]U}Q| $ &J��,J �strL�8M�nN	�pO�$5�a��-5"�v7� %8�%9	�%:	�8;	�
�F;�-&�F�]L0�L+�W���-fd�	�W���-fd�	�sfn��L��$��2��.� �3ch�	�
PK��.aKX�K��K�K�K�K�K�K�]$���</�!�R]$����/4out�!�4str�,�	53UsT�T���/���*
out�6�i�	�8��l�I0aryl#�outl.�l7�tmpn�io
�$c���0c�c,
4outc8��]�0U�UT�T	53Us$?�7�53?�?,
4out?8�3iA	�DB��@
GT�1 G-G	�\U~T3
KQ�2K5�K�k2�K(�L%:2�LLL?&K�7K-CK53�2Uv53�2Uv533Uv533Uv�]�]w3���n83!�4str3-�%5^3len6	�
�G7�5�G"J:<J1JYGJ
RJ�	V5qJdJ}J
z�J�J
�K\5�K(L�4L�L%�L&K_7K-CK(�G�"�5�G	�]T<
K9	m6K5�K�6�KLL?&K�7K-CK
NI;;I7&`InI�&�I
�I�		7�I&�I�I	.J&JM�I �I�I�&�I�I
!I;)�7&3I@I
nI��7&�IM�I �I	�]U	
PK<X8aKX�K��K�K�K�K�K�K		^U�Tx'���>'�4c'+�ych)
��W%*^
I)�<I5RJK	P:qJdJ}Jz�J�J(�K\�9�K(L�9L�L%�L&K	_7K-	CK5lKN�:}K�KVhL��:yL�]�:Us�]5NIK)	<`InI��I
�I�	�;�I�I�I	.JJN�I �I�I��I-�Iz!IL3I@IZnI�n<�IN�I �I	�]U	
�G+z>�G"J:<J1JYGJ
RJ�	*>qJdJ}J	z�J�J
�K\�=�K
L�=L�L%�L&K_7K-CK(�G�"^>�G	�]UvT<�>T�WQ1�]$�
��>>#�U$�3�e?+�4str7�^9?Us#^Q?Us	0^T09�� ��?'�,�<^9�� ��?'�+�I^9��-�1@'�,�V^9����B'�$�[pid�	�=I�AF�
�<�
<'F�
�=3nA�
�	?[G3�
zGmG�G%�G�G	,\UsT5	8\U8Q0R05B�	�A!B.Bc^�AQs	o^Qs{^j]�\{�
.B.�)^|�
��jC=S\CF���zC�`F��=1BC��	?[G1�zGmG�G%�G�G	,\UsT7	8\Q1Rw�]�zC)jC9��B�dD'�)�'�3�'�H�'�T�\arg�#<�^+DU�QT	�R $ &�^ODU|Ts $ &	]Qv9k���F'k(�'k2�'kG�'kS�\argl"<[pn�}leno	��^'EU|T~�^KEUsTv $ &]cEQ|�^�EU|T?�^�EU|T���\�EU	T9]�EQw�^�EU|T���\"FU	T<];FQw�^YFUT}�\}FU	T<	]Q}~a

��F'a&^�^:��F.�?�:�G.�<�
s�;Gstr
s!�len
u
�
d�[Gstr
d�"��Gptr"�Gstr"*����Gstr�len>!
�Gobj
�8<�Gobj8�'
(Hary'�tmp+��	FHa��o	dHao$�!Y�HaryY�*��Ha*�!��Hary�f�k�Ixl�n�p	�:I�!I)xI�!��NIstr��ptr��!��nIstr��!�R�Istr��T8�R!���Istr��f��!	,�Iobj	,�	, �!	��"Jobj	��	�!���RJv��t�*x��!w}Jobjw�tw+x!E�JobjE!�tE;x!2�Jobj2�!�Jobj�!Kobj�:�x&K)obj��0�xPK)obj��6ret��:��lK)v��:���K)x��6ret�
�0o��K)io�6ju06kv06lw�6mx�6ny�!Lobj�0� L)obj��0�>L)obj��0�hL)obj��<��0��L)obj��0��L)obj��0��L)obj��O���L.��.��O\�M.\�.\��i�7Mi�Od�cM.d,.d<��1�*��M]�*U1�(��M]�(U1�-��wP��-(�F��M&GK�-
�-�DP�-
�-pO�-�-
7M�	�NTMHM	�^T1Q	Rs�^�NU	�^OUs�^(OUsj]@OUs�^�^	j]Us�^�OUvTs_�OU0TsQ3R1XvY0_�OUvE]�OU	_PUvE].PU		_Uv_[PT1	E]U	1�,��lQ�, �,�,�,�,K�-_
�,QU
*_9QU|"TvQ	R1�]QQUv	�]U|Qv1�,*��Q�, �,��, �,��,�-^wPU�,�U1�/��V	00#0_00�@=0
�HwS�H(�H/�R�H-�H�I.	�I�I�I	.JJ
�GyU
HH(�H+�S�H�H�H	o_Us(H,:H
dH�	fTvH�I	^�I�I�I	.JJ
FH��TXH�Is	�I�I�I	.JJ	|_Us
�/l�U	0#00_00�@ =0
Gs�U G-G	�\U	T5	�_U1TwQv�_VU1TwQv�]1�'���W�'�'�' �'�'��'�'�'�'��'1QW[G1	*zGmG�G%�G�G	,\U|T6]]8]�WU	]^8\Q�UR�T1�/t�,\�/�/�/ �/ �/Z�/�\&�/&�/&�/�/�/
!I�9Y3I@I
nI�#Y�I
�I�	Y�I�I�I	.JJM�I �I	�]U}
K�:ZK5�K��Y�K(�L%�Y�LLL?&K�7K-CK
NI�$V[`InI��I
�I
�	�Z�I�I�I	.JJN�I �I�I��I-�I
G
��[ G-G	�\U	T3	^53�[UvT~53�[Uv	�_U	Qv	53Uve0v��
w`1P�/tmp/lsapi.XXXXXX`1P
�.XXXXXX
2�{
n
t
�
3�4'

�5�6C
7�5k
8


�9L
3
:�FU

$

j�	�;+<��
7�
�

G
F
Q0[
�

}��
^
?2�=�Z'�
�
9+%

2�
�99
a

2qP6�4/opt/alt/ruby31/include/ruby/internal/core/rarray.h
$

%y
>���B1�B
:;9I84:;9I?<(��1I41�B	��1
1R�BUXYW��1:;9I
.?<n:;9&I7I��.?<n:;9:;9IUI1R�BXYW1R�BUXYW(!I/4:;9I:;9.:;9'I $>4:;9I:;9I:;9I�B 41!.:;9'I 4"<#($.:;9'I@�B%4:;9I�B&1':;9I�B(1R�BXYW):;9I*
:;9I8+I,>I:;9-.:;9I/
:;9I0.:;9'I 41.1@�B2
:;9I834:;9I�B4:;9I�B51R�BUXYW64:;9I74:;9I?<84:;9I9.:;9'I@�B:.:;9'I ;:;9<4:;9I=>:;9I?1R�BXYW@�:;9A
:;9IB
:;9I8C
:;9I8D4:;9IEUF4:;9IG!H:;9I
:;9I�8J'IK1R�BXYWL.:;9I M1UN1O.?:;9'I 4P6Q!I/R1R�BUXYWS.:;9 TU��1�BV1R�BXYWW.:;9I X1R�BUXYWY
1Z1UXYW[4:;9I�B\:;9I�B]1^���B1_41`.?<n:;a%Ubc$>d:;9e&f:;9Ig(
h:;9i:;9j
:;9Ik'l�:;9m
:;9I�8n>I:;9o:;9p:;9q4:;9I?r.?:;9@�Bs!I/
t.:;9 u.:;9'Iv4:;9Iw.:;9'I@�Bx.:;9'IU@�By4:;9Iz1UXYW{.:;9' |.:;9@�B}4:;9I~.:;9'@�B���B1�.:;9' 4�
:;9�.?:;9'I ��41
�41�41�1�.?<nVpPPP0�V0�V0�
�
�
�3�0�0�0�0�
�
�
�7�PPPPSSPSPS�SS�S
�
��
�PU�U�USPUUSPSS
�
�0�0�US�U�S�U�S�U�S�U�TV�T�V�T�V�T�V�T�Q�Q�P]P]P]SSP\v|�v| $0 $+(�v $0 $+(�v $0 $+(�v $0 $+(�PPUUPPUUu�@��U�� $ &"�� $ &"�PQQU�U�PPP	p $ &�P	p $ &�PPPPPU�U�USPT�T�U�U�T�T�QS�Q�UU1�T]T�T�WQV�Q�VQV0�SS0�
�3�
s $ &3$}"
s $ &3$}"
s $ &3$}"
s $ &3$}"
s $ &3$}"
s $ &3$}"
s $ &3$}"
s $ &3$}"tO�U�U�U�U�U�U�T�T�T�T�TPSSPU�U�U<�U�U�U<�<�UU
<�<�
UUUUUUUuO�UPTTPTPTqO�

 �

 �Q
TTTw
P
	p $ &�
	p $ &�

p $ &1$#�	
p $ &1$#�P

p $ &1$#�P
p $ &1$#�PUV�U�UVUVUUVTS�T�SSPTSSSSS5�TS5�TSTSTSSpO�SSPPSSSSS

 �
S

 �
S	S	PpO>$�p>%O�SSSQQQSVV<�<�VV<�<�VV		<�<�		VVVVVVVVvO�VU�U�TU�U�U�U�U�U�U�U�PP	
�
�
�5�S
�
�
�7�U\�U�TS�T�Q�Q�R�R�X�X�USSSSTV�T�TVTVTVQ\Q\Q\R]R]R]^R]^X�X�X�X�X�X�P_P_U�U�VV	��V	��PVVPVPSS
�pUP\PSPP��,�U�U�US�U�SU�U�TV�T�VTVQ�Q�Q�Q�]}�]]SSSPpH<$�p?%3�s?%3�
 �S
 �SSSSS��
+�
+�SSSS	@E$�	S@E$�SSS	
 �	S	
 �	SU�U�Q�Q�TV
�5�USQ�U�TVR�T�Q�Q�Q�Q�VR�T�SQ�U�\
�
�
�6�U�U�U�U�T�T�T�T�QV�Q�VQV0�UP^P^^^^__^^
 �^
 �^UUUUUUUUuO�^^^^^^

 �
 �
^^	
 �
 �	^^^PpO>$�P
�3�<��l�
/opt/alt/ruby31/include/ruby/internal/arithmetic/usr/include/bits/opt/alt/ruby31/include/ruby/internal/opt/alt/ruby31/include/ruby/internal/core/opt/alt/ruby31/include/ruby/internal/intern/usr/include/usr/lib/gcc/x86_64-redhat-linux/8/include/usr/include/bits/types/usr/include/sys/opt/alt/ruby31/include/ruby/usr/include/netinetlsruby.clsapilib.hint.hlong.hstdio2.hspecial_consts.hrarray.hrgengc.hfl_type.hstring.hrdata.hvalue_type.hrtypeddata.hrstring.hchar.hsymbol.hstdlib.hstring_fortified.hstddef.htypes.hstruct_FILE.hFILE.hstdio.hsys_errlist.htypes.h	stdint-intn.hstdint-uintn.hunistd.hgetopt_core.hmath.htime.htime.h	value.hrbasic.hrobject.hglobals.hio.hruby.hutil.h
version.h
lsapidef.hstruct_iovec.herrno.hsockaddr.hsocket.hin.hsignal.heval.h<built-in>string.hvariable.hgc.hhash.hmodule.herror.hvariable.hmman.h	iterator.hsprintf.hparse.hgc.hthread.h	�
J��K�?�K�|	#t>��iK>�K�K�{�KY;./<X� ���KJ��O
OtY��KKtY�}�t	jp	2]��T�	w��~�.��}<t	�g�}	�#�}.�-Ms

J)u<t
tY	Kit��Kt
JtYZ�~	�~.��}JY�HZ�~.KKtYv�KKtYt�K	Kt�	[u �		Jw		XwX		X<Z ���~.K
�<
%XXt<.X�<h�I�
,JX�.X
^f)�X�.%X��=�(3<(J3<f88g;g
c9X�.X� "fp K;<�f/�/	RX�}	�t	�	�
0Yfq�\�:>X.	���t��" �u�t/u* �uZ�
^�	�%gf�u	Z�3	X
�|t	���|<
tXX����u��Kt	.t.	�X�	�f.	f*8u�t�		X	�	��	o.@5<	t-<	t�i
J�J	[X
�|J

o	j[	�	L( ff	�|X<
�9=
t;
K1
t��QJ/f J�	�L2	�
�=t<U�MtUX&<<
�`	0<f@�	L5	t-<	t�j�<T�Kt	Jt X��K
b y<�
�~
���	
U�~
�	��	tZ��J�}���	?��gJ<�	Z��~
���~K	�M<�x]	�M�~	YJ	K#�
L	K"U�	�M<�~	\"J�_Jf	y��	�]	
�qXtX	�w
�	KY.	��K�E	K
�n> Rff�X�}� ��
��~
�ff
�
��	y�<J�"nJ f� �X	4<X=�Jb	�MM	Y�~J�JT	�O	N)X�~Y�	�~��~J.� �~ X�	��V!J_J>	T	�O	RX	"X	�}R=<�ff	�f�X�.K =YJ��K =X�fA.���~�	K
�n <�. ��
��~=
�ff	�}�
p
;	�X
�K
�E	K
�n �f ��
��~
�tf
�
��	y�Jq��J �.b	�MM	]V	%�|J���|<
�K
�E	K
�n f��	%�|	��J)	�}[.�X	�X���tsX	�o�s\�g(K
ht�	\t
Y	Z��	�	Y	�d	.
btZY�	v
y�
g�tsX�	o�s\
���K�p��	X	=Z�	vZX	>*�|tsX�	o�s\��  *X	�}K
�	��f�} ��
_
�	�	Y;	=��T	�M<M	�J)�	WJe
�j J	Z�~<"n f
b
��
�q<�x	�~�Rf	�_\sX�	g�1�X		K"`b	�M	RVJ>	X-�`b	�M<MJ	O�<Y��.���	>�~�
�X�v ��
_
X�t�	Z�~�"�
h�	��"n f
b
��
�q��ww�X
�~��k�	��R	�f j�Y:g<	KX��K�Y
sbXt�v
�
SY�|X	���|X<	�
L��/�$
e�X�<
��z
<�
�zt�	yt5Y�|X���|.X�z�
	Zrh	Y	��	�*�{tsX	to�s\��{.�tu�{sX	o�s���qwZ7v�-uY�����������������������
"u{
wtJvI
;t��Z�vpJuI==[X=XvXuv0�X>f�~��z
t�	g�z
��t�	���
d(v�#G< ���Y(�%�[$		�t[�|
rb_mWaitWritable_sys_errlistm_pScriptFileRUBY_Qnilrb_eNoMemError_unused2wrap_struct_name_filenorb_cMethodrb_obj_wb_unprotectrb_eSyntaxErrorm_cntUnknownHeadersH_AUTHORIZATIONsockaddr_isoblockSizem_pIovecEndstrcpym_pRespBufPosRUBY_FL_EXIVAR__uint8_tdmark_BoolRUBY_DATA_FUNCm_pktHeaderrb_eIOErrorm_bytesRARRAY_EMBED_LENm_pHeaderRSTRING_LENrb_data_object_get_shortbufsockaddr_inrb_cFilerb_eSignalunlinklsapi_dataRUBY_T_ARRAYrb_eKeyErroradd_env_rails__environlsapi_addstrrbimpl_rtypeddata_pruby_robject_constssa_datauint16_tm_totalLensin_zeroRUBY_FL_UNTRUSTEDrb_eZeroDivErrorin_port_t_flagslsapi_getscallocm_respPktHeader__off_tcreateTempFiledfreeRUBY_T_IMEMOrb_global_variable_lockROBJECT_EMBED_LEN_MAXRUBY_T_UNDEFrb_cStringrb_eEOFErroratoim_pHttpHeaderLSAPI_GetReqBodyRemain_rm_pScriptNamerb_mKernelm_pEnvListrb_output_fsint32_t__fmtsa_familym_specialEnvListSizemaskrb_cModulesockaddr_ns__u6_addr8RUBY_T_FALSErb_cIntegerRUBY_T_FILE_IO_write_endm_iLensockaddrrb_cTrueClasss_addrRUBY_FL_USER0RUBY_FL_USER1RUBY_FL_USER2RUBY_FL_USER3RUBY_FL_USER4RUBY_FL_USER5RUBY_FL_USER6RUBY_FL_USER7RUBY_FL_USER8RUBY_FL_USER9nameLenLSAPI_Postfork_Childfreerb_fsm_requestMethodOffRUBY_T_COMPLEX__tznamedata_struct_objrb_eEncCompatErrorruby_special_constsrb_intern_constvalLenRSTRING_EMBED_LEN_SHIFT__stack_chk_failruby_rarray_flagsruby_descriptionsin_familyRStringm_fdListenMAX_BODYBUF_LENGTHrb_data_type_tm_statusm_reqBodyLenrb_eNameErroroptargneedReadrb_eRegexpErrorrb_cBasicObjectRUBY_T_STRUCTrb_cRationalrb_cFloattyperb_cStatsys_errlistRSTRING_EMBED_LENin_addr_tbasicRUBY_QtruedaylightLSAPI_ReqBodyGetChar_rpKey__uint16_tsin_portRUBY_T_STRINGrb_cFalseClassm_flagRARRAY_EMBED_LEN_SHIFTreadMaxBodyBufLengthCheck_Typeembedm_pQueryString_chainRUBY_T_MODULErb_eArgErrorrb_eInterruptrecurrb_funcallvrbimpl_intern_constRUBY_FL_SINGLETONsockaddr_ununsigned charcapanReadm_cntSpecialEnv_IO_lock_tRUBY_T_ZOMBIEfloatLSAPI_key_value_pairLSAPI_ForeachHeader_rrb_stderrlsapi_eachm_cntHeadersrb_str_catbodyBufRARRAY_EMBED_LEN_MAXRB_TESTRUBY_T_FIXNUMrb_eSecurityErrorisEofBodyBuflsapi_processlsapi_flushRARRAY_EMBED_FLAGoff_tchild_statusRUBY_SYMBOL_FLAGrb_mComparableH_X_FORWARDED_FOR__fprintf_chkm_queryStringOffH_TRANSFER_ENCODINGRUBY_FLONUM_FLAGrb_stdoutruby_rstring_flagsH_CONTENT_LENGTHrb_cTimeruby_engine_IO_write_ptrrb_output_rsrb_eNoMatchingPatternKeyErrorlsapi_packet_headerLSAPI_ReadReqBody_rrb_eFatallsapi_http_header_indexrb_funcall_argcsTempFilerb_funcall_argsstrcatclosesharedlsapi_printfRUBY_T_OBJECTFILEH_COOKIEs_fn_add_envmunmapRSTRING_EMBED_LEN_MAXbodyCurrentLenLSAPI_Accept_Before_Forkrb_cNumerics_req_stderrrb_cHashsize_trb_array_const_ptrH_CONNECTIONgetdate_errrb_rsuint8_tH_CONTENT_TYPERArraylsapi_markm_headerLenRUBY_ELTS_SHAREDrb_data_type_structperrorlsapi_envruby_release_daterb_cDirrb_unexpected_typesetup_cgi_env_IO_save_baseioveclsapi_eofrb_array_const_ptr_transientenvironlsapi_child_statusreadTempFileTemplaterb_str_newsockaddr_x25rb_eLoadErrorsin6_flowinfom_pIovecToWriteorig_stderrm_respHeaderLen_wide_dataH_IF_MATCHRUBY_FL_PROMOTED0RUBY_FL_PROMOTED1__in6_uH_ACC_CHARSETruby_versionorig_stdout__streamsigngamruby_copyrightm_reqBufSizerb_eExceptionrb_yieldadd_env_no_fixRUBY_T_FLOATRUBY_T_CLASSftruncateruby_fl_typelsapi_requeststrerrorrb_cComplexfprintfRUBY_T_HASHsyncRUBY_T_NODEchdirreserved__ssize_t__srcrb_mErrnolsapi_closeH_IF_RANGEnameOffruby_api_versionRB_TYPE_Psa_family_tm_packetLenreadMoreruby_hexdigitsRUBY_FL_WB_PROTECTEDin6_addrisBodyWriteToFileRB_FLOAT_TYPE_P__timezonelinesin6_addrRB_SYMBOL_Prb_mWaitReadablelsapi_setsyncm_respPktHeaderEndruby_fl_ushiftRUBY_FL_TAINTLSAPI_Postfork_Parentfn_add_envlsapi_bodyrb_int2num_inlinelsapi_printrb_eSystemCallErrorRB_STATIC_SYM_Pdcompactrb_intern2stderrm_pHeaderIndexRB_FL_TEST_RAWprogram_invocation_short_nameRARRAY_PTRrb_cUnboundMethodrb_f_sprintfRB_FL_ANY_RAW_IO_save_endrb_const_get__nptrLSAPI_InitLSAPI_Requestrb_eScriptErrorfn_writelsapi_syncm_bufProcessedstdoutreadBodyBufoptoptlsapi_reopenRB_DYNAMIC_SYM_Prb_mGCrb_eIndexErrorm_httpHeaderLencurPosH_IF_NO_MATCHlsapi_s_acceptpreforkRUBY_T_DATAbuffssizetypekeyLen__builtin_strchrunexpected_typeLSAPI_Flush_rshort unsigned intsigned char/builddir/build/BUILD/opt/alt/ruby31/share/gems/gems/ruby-lsapi-5.6/ext/lsapiGNU C17 8.5.0 20210514 (Red Hat 8.5.0-20) -mtune=generic -m64 -march=x86-64 -g -O2 -fPIC -fexceptions -fstack-protector-strong -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection=full -fplugin=annobinfilenamelsruby.clsapi_header_offsetRARRAY_TRANSIENT_P__off64_tsockaddr_eon_IO_read_base_offsetm_pIovecrb_string_value_ptrrb_eFloatDomainError_IO_buf_endm_respInfoopterrlsapi_puts_ary_modeblkSizerbimpl_RB_TYPE_P_fastpath_IO_write_basevalueLenfunctionInit_lsapirb_eStandardErrortz_dsttimerb_debug_rstring_null_ptrrb_argv0ruby_digit36_to_number_tableH_CACHE_CTRLH_COOKIE2__destrb_cMatchrb_cEncodinglsapi_isattyH_USERAGENTRARRAY_EMBED_LEN_MASKLSAPI_ForeachEnv_rlong intRUBY_T_NONErb_mProcessrb_mFileTestremain_IO_markerrb_cEnumeratorm_pRespBufEndRB_BUILTIN_TYPE__builtin___memcpy_chkrb_io_putslsapi_s_postfork_childrb_define_global_constrb_obj_as_stringm_bufReadin_addruint32_tsockaddr_in6__pid_t_IO_codecvtrb_funcall_nargsH_RANGERDatastrtolg_reqlong doublerb_cRangeRB_SPECIAL_CONST_Piov_lenlsapi_resp_inforb_cObjectlong unsigned intlsapi_req_headerrb_cSymbolrb_gc_markinitBodyBufruby_strdupm_headerOffrb_eNotImpErrorrbimpl_idRSTRING_PTR__errno_locationlsapi_s_postfork_parentrbimpl_strlencharRB_INT2FIXsockaddr_inarpm_pSpecialEnvListsin6_scope_idrb_cIOstdinsin_addrRUBY_FL_SHAREABLERUBY_T_BIGNUM_IO_buf_baseRSTRING_NOEMBEDRUBY_T_RATIONALRB_FLONUM_PRUBY_FL_PROMOTEDs_bodyrb_eTypeErrorRBasicrb_eNoMethodError_IO_read_endRUBY_T_ICLASSrb_num2intcLSAPIRUBY_SPECIAL_SHIFT_IO_FILEH_IF_UNMOD_SINCEm_fdRUBY_T_SYMBOLH_HOSTrb_num2char_inline_IO_wide_dataruby_rstring_constsstrlentzname__u6_addr16s_pidselfrb_eSystemExitisAllBodyReadm_respHeaderrb_cThreadRUBY_FL_SEEN_OBJ_IDm_envListSizem_pAppDataRB_NIL_Pruby_platformsockaddr_ax25RSTRING_FSTRrb_eThreadError__pad5rb_str_new_staticshared_root__u6_addr32rb_cNilClassm_type_markersrb_stdinrb_eStopIterationm_scriptFileOffRUBY_FL_USHIFTklassrb_define_classH_VIA_codecvtm_pRespHeaderBufEndH_PRAGMARTypedDataRUBY_FL_FINALIZErb_cRandomdoublemkstemplsapi_putcargcssize_tRB_IMMEDIATE_Plsapi_writelsapi_putsorig_stdinRUBY_FIXNUM_FLAGargvrb_eRuntimeErrorm_pRespHeaderBufrb_cClass__int32_trb_cProc__uint32_tRUBY_IMMEDIATE_MASKrb_hash_asetdata__daylightH_REFERERrb_cStructLSAPI_Prefork_Accept_rRB_FIXNUM_Pheap_sys_siglistRARRAY_TRANSIENT_FLAGm_pUnknownHeaderrb_typem_reqStateRUBY_T_NILRUBY_T_MOVEDrb_eSysStackErrorrbimpl_rstring_getmemm_pRespBufrb_num2int_inlineprogram_invocation_namerb_cArrayrb_eEncodingErrorrb_ruby_verbose_ptrrb_cBindingdsizeH_IF_MODIFIED_SINCErb_ary_detransientRUBY_FL_USER10RUBY_FL_USER11RUBY_FL_USER12RUBY_FL_USER13RUBY_FL_USER14RUBY_FL_USER15RUBY_FL_USER16RUBY_FL_USER17RUBY_FL_USER18RUBY_FL_USER19_freeres_bufRUBY_T_MATCHlong long unsigned intparentpid_t_cur_columnlsapi_rewinds_reqrb_eRangeErrorm_pRespHeaderBufPoss_stderr_datarb_eval_string_wrapgetpidtyped_flagm_cntEnvruby_rarray_constsRUBY_T_MASKrb_lastline_get_IO_backup_baseH_KEEP_ALIVE__memcpy_chk_IO_read_ptrrb_cRefinementrb_eMathDomainErrorrb_fix2intLSAPI_GetReqBodyLen_rrb_gc_writebarrier_unprotectrb_exec_recursivegetenv_freeres_listrb_eLocalJumpError_sys_nerrlsapi_readtimezonerb_array_lenpReqlsapi_getcrb_hash_newclear_envrb_cRegexplsapi_binmode_old_offsetstrchrm_pReqBufrb_cNameErrorMesgretvalvalueOffoptindH_ACC_LANGlong long intin6addr_loopback_flags2VALUErb_mMathRUBY_T_TRUEmemmemsin6_familysockaddr_atruby_value_typem_scriptNameOffH_ACCEPTm_lLastActiverb_eNoMatchingPatternErrorlsapi_resp_headersys_nerrin6addr_anym_pRequestMethods_req_dataiov_basem_lReqBegincreateBodyBufm_versionB0m_versionB1rb_str_buf_newRUBY_FLONUM_MASKruby_patchlevelRUBY_T_REGEXPm_pIovecCurLSAPI_Init_Env_Parametersorig_envm_reqBodyReadRUBY_Qundeflsapi_s_accept_new_connrb_eFrozenErrorsockaddr_dlRSTRING_EMBED_LEN_MASKRUBY_FL_FREEZEunsigned intbodyLensockaddr_ipxrb_default_rsshort intrb_string_value_vtable_offsetpValueenv_copymmaporig_verboserbimpl_str_new_cstrrb_data_object_zallocrb_mEnumerableRUBY_Qfalseflagstz_minuteswestsys_siglistH_ACC_ENCODINGsin6_portlsapi_eval_string_wrapGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-20)GNU�zRx�
0D+Xl�(�BF�G�A �kFB�
�HU�gHQ
Gayd 2HW
II@ HWX HWp-Hd�3E�D hAH�F�B�B �E(�D0�C8�GPm
8F0A(B BBBG4��o�A�D �
AAKp��P ��\,4F�D�A �D(�F0`
(D ABBBj
(D ABBEl(G DBBD��B�B�I �B(�A0�A8�D@�8D0A(B BBB�*HP
HI�UK�I8�F�B�A �D(�D@�
(A ABBEL(`�E�A�D0r
CAP�E�L�E�Y(�E�D�G0�
AABzRx�0��   �A�D w
AA(D�E�A�D �
DAF,p�Z�A�D �r�A�B�H�tF�B�B �B(�A0�D8�D@�
8F0A(B BBBG@�7F�B�B �A(�D0�D@�
0A(A BBBB80SF�B�A �A(�D0�
(A ABBF
�	
/)
?0Yt1��2��3�
5
C
_"y�	@�"�[�0+�[�h�`
h)wCpPwm���������B�	p����
&�AZ�f�w�g��w����a��"+�26"]P�0 ��P�p�P p(�Mp-e�����3�������)�D�R	@\�v���4�����������*(�B	Z�Ue	�
� 	��
�'
� 
�'
0
�+G"an"�O�0�O�\�P�	\	�0	`�:		xC		S	�q	�
�	���		X�		`�		�	�
�	��	�
�

	�
	)
�C
[
�tf
�
G�
7�
G�
��
	 �
	�
	�	h!"$&(*012345/62
%!&s+F0>5\:�@�F�L�R�X�^�d�j�p�v|���������0�6�r�z���������������������������$�*�0�6=<SBbHN�T`p��+,-.��������

.
D
Y
r
�
�
�
�
�
�
�
�
�
��
�
�
/#2=HSZc��������(/<Rey������PS����&,6ANaq������� �  .annobin_lsruby.c.annobin_lsruby.c_end.annobin_lsruby.c.hot.annobin_lsruby.c_end.hot.annobin_lsruby.c.unlikely.annobin_lsruby.c_end.unlikely.annobin_lsruby.c.startup.annobin_lsruby.c_end.startup.annobin_lsruby.c.exit.annobin_lsruby.c_end.exit.annobin_lsapi_process.start.annobin_lsapi_process.endlsapi_process.annobin_lsapi_rewind.start.annobin_lsapi_rewind.endlsapi_rewinds_body.annobin_lsapi_eof.start.annobin_lsapi_eof.endlsapi_eof.annobin_lsapi_binmode.start.annobin_lsapi_binmode.endlsapi_binmode.annobin_lsapi_isatty.start.annobin_lsapi_isatty.endlsapi_isatty.annobin_lsapi_setsync.start.annobin_lsapi_setsync.endlsapi_setsync.annobin_add_env_no_fix.start.annobin_add_env_no_fix.endadd_env_no_fixlsapi_env.annobin_lsapi_mark.start.annobin_lsapi_mark.endlsapi_mark.annobin_lsapi_flush.start.annobin_lsapi_flush.endlsapi_flush.annobin_lsapi_close.start.annobin_lsapi_close.endlsapi_closeMAX_BODYBUF_LENGTH.annobin_readBodyBuf.start.annobin_readBodyBuf.endreadBodyBuf.annobin_lsapi_getc.start.annobin_lsapi_getc.endlsapi_getc.annobin_lsapi_s_postfork_parent.start.annobin_lsapi_s_postfork_parent.endlsapi_s_postfork_parents_req.annobin_lsapi_s_postfork_child.start.annobin_lsapi_s_postfork_child.endlsapi_s_postfork_child.annobin_lsapi_s_accept_new_conn.start.annobin_lsapi_s_accept_new_conn.endlsapi_s_accept_new_conn.annobin_lsapi_eval_string_wrap.start.annobin_lsapi_eval_string_wrap.endlsapi_eval_string_wrap.annobin_add_env_rails.start.annobin_add_env_rails.endadd_env_rails.annobin_createBodyBuf.start.annobin_createBodyBuf.endcreateBodyBufsTempFile.annobin_lsapi_read.start.annobin_lsapi_read.endlsapi_read.annobin_lsapi_gets.part.1.start.annobin_lsapi_gets.part.1.endlsapi_gets.part.1.annobin_lsapi_gets.start.annobin_lsapi_gets.endlsapi_gets.annobin_lsapi_each.start.annobin_lsapi_each.endlsapi_each.annobin_lsapi_puts_ary.start.annobin_lsapi_puts_ary.endlsapi_puts_ary.annobin_lsapi_sync.start.annobin_lsapi_sync.endlsapi_sync.annobin_lsapi_write.start.annobin_lsapi_write.endlsapi_write.annobin_lsapi_addstr.start.annobin_lsapi_addstr.endlsapi_addstr.annobin_lsapi_printf.start.annobin_lsapi_printf.endlsapi_printf.annobin_lsapi_putc.start.annobin_lsapi_putc.endlsapi_putclsapi_putc.cold.8.annobin_clear_env.start.annobin_clear_env.endclear_envenv_copyrbimpl_id.16010.annobin_lsapi_s_accept.start.annobin_lsapi_s_accept.endlsapi_s_accepts_pids_req_datarbimpl_id.16023.annobin_lsapi_reopen.start.annobin_lsapi_reopen.endlsapi_reopens_req_stderrorig_stderrrbimpl_id.16187.annobin_lsapi_puts.start.annobin_lsapi_puts.endlsapi_puts.annobin_lsapi_print.start.annobin_lsapi_print.endlsapi_print.annobin_Init_lsapi.start.annobin_Init_lsapi.endrbimpl_id.16203rbimpl_id.16208orig_envcLSAPI.LC5.LC3.LC2.LC4.LC1.LC0.LC9.LC7.LC6.LC8.LC10.LC11.LC12.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC57.LC22.LC23.LC25.LC26.LC27.LC28.LC29.LC30.LC31.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC43.LC44.LC45.LC46.LC47.LC48.LC49.LC50.LC51.LC52.LC53.LC54.LC55.LC21.LC32.LC33.LC34.LC24.LC56.text.group.text.hot.group.text.unlikely.group.text.startup.group.text.exit.group_GLOBAL_OFFSET_TABLE_g_reqrb_str_newrb_hash_asetrb_gc_markLSAPI_Flush_rmunmapfreeLSAPI_ReadReqBody_rLSAPI_ReqBodyGetChar_rLSAPI_Postfork_ParentLSAPI_Postfork_ChildLSAPI_Accept_Before_Forkrb_string_valuerb_string_value_ptrrb_eval_string_wrapstrchrrb_str_new_staticruby_strdupmkstempunlinkftruncatemmapcallocperror__errno_locationstrerror__fprintf_chkrb_str_buf_newrb_str_catrb_num2intrb_fix2intmemmemrb_yieldrb_gc_writebarrier_unprotectrb_io_putsrb_ary_detransient__stack_chk_failrb_unexpected_typerb_obj_as_stringrb_debug_rstring_null_ptrrb_f_sprintfrb_intern2rb_funcallvLSAPI_Prefork_Accept_rgetpids_fn_add_envLSAPI_ForeachHeader_rLSAPI_ForeachEnv_rrb_ruby_verbose_ptrrb_define_global_constrb_default_rsrb_exec_recursiverb_output_fsrb_output_rsrb_lastline_getInit_lsapiLSAPI_InitgetenvstrtolstrlenselectLSAPI_Init_Env_Parameterschdirrb_stderrrb_cObjectrb_const_getrb_global_variablerb_define_classrb_data_object_zallocLSAPI_Write_rrb_stdoutrb_stdinLSAPI_Write_Stderr_rrb_hash_new__memcpy_chkrb_define_methodrb_define_global_functionrb_define_singleton_methodH7*������������������������������l�����������*������������������*��������� ���������'D-4<;���������B8RD]Hq����������*����������H�<�����������H�*������������������;*���������@���������G[*���������`���������g{*�����������������������������������������������������������B���������P���������Wlb�������������������������������������������������������������������l$���������4���������@���������I���������Tl\���������s�����������������������������l������������������������������C*��������� D6C<H���������S���������f���������n���������uD�������������������<�������������������<�������������������@�������������������������1��������8��������G���������Q*��������[��������c���������t���������y������������������D�L�H���������L <(	��������.LS
��������]LcDy���������L�<�	���������L�<�DH���������L2��������K��������YLc<k	��������qL�D�H�
���������D�Lh	���������	���������	���������	����������	���������
��������
��������F
���������
���������
����������
��������9�����������������*��������Q
��������X��������xt��������������������������������������l�������������������*���������
��������
<
���������$
84
D:
HC
��������I
TT
\`
*��������o
��������~
���������
�
T�
�
����������
���������
�
���������
������������������������!�(���������4��������9��������CO���������a��������ht��������������������#*��������S���������]���������� ������������������*��������R����������*!�������������������*"��������)#��������C��������_%��������k���������r8}D�H�&���������'������������������������������&���������(�����������������L<���������&��������3'��������A*)��������F*��������K��������R���������XT]&��������n+��������~*���������*,��������������������������������*-���������.����������|����������	��������|+��������2t9t>/��������J���������O���������[���������c���������jtu��������������������9�������������������0�������������������d�:���������d�����������8���������d�����������8��������d���������8��������%d8���������=8��������DdW���������\8��������cdv���������{8���������d�����������8���������d�����������8���������d�����������8���������d�����������8���������d���������
8��������d$���������)8��������0d@���������E8��������Ld\���������a8��������hdx���������}8���������d�����������8���������d�����������8���������d�����������8���������d�����������8���������d���������	8��������d#���������(8��������/dB���������G8��������N*���������Udi1��������p*���������w*2��������~��\�*3���������*4���������/���������d�1���������*5���������������������������/�������������������������6��������l!l(���������-��������7���������<��������A��������g<l7��������y<�����������d�����������:���������d�����������:���������d���������:����������������� ��������3���������8&��������Y���������o���������}���������������������E������������������ ���
 (
L
T"�
�"�"�[�"�[[h@[Hhlhtw�h�w�w��w�,�4�`�h������������ �(LTw��w�w���w���"@�H"l"tP�"�P�P�pPp,p4�`ph������������� �(�L�T�������������	�	�@	�H	�l	�t	��	��	��	��		
�
	,
	4

`
	h

�

�
'
�

�
'
�
'
�
 '
(LT"��"�"�O�"�OO\@OH\l\t��\������

�
�
,
�
4
�`
�
h
��
��
�
��
�
�
G (GLGT��G�� � � � �������������������
�
��
��
��
��%
�,
�&8
��!?
�M
��T
�o[
��e
�s
��!x
���
���
���
���
���
���
���
��
�
��
�

�u%
�'2
��?
�L
��Y
��	f
��s
�U�
�O�
���
���
�'�
���
�G�
�_�
���
�9�
�O
��!
��
��)
�6
��C
��P
��]
�j
�?w
�|�
�E�
��
�
���
���
���
�T
��
�O
�&2
��>
��J
�O f
�er
��~
��
�I�
�y�
�+�
���
���
�<�
�+�
���
���
�
�
�x
�f&
��4
��;
�0@
�
]
��i
�u
���
�}�
���
���
�*�
���
�b"�
���
��
�'
�P"
��
�,%
�6!+
��1
��7
�� =
�Q	C
��I
��P
��^
�\"k
��y
���
���
�s
�
�v
�
�N�
�i
�
���
�� �
���
��
�
�2�
�G�
���
��
��
���
�r�
���
���
���
�,
��	
��
��
��

��!
��'
��-
��4
�
F
��M
��
_
�ue
��k
��q
��w
�}
��
�5�
�H�
���
���
��!�
�%�
�3�
�A�
�O�
�]�
�k�
�y�
���
���
���
�{
��
��
��
��&
��/
��8
��A
��J
�T
�q[
��c
�l	u
�b|
�v!�
�"�
�b�
�R�
��
�
���
�_
8
�QE
�2S
��a
��}
�{�
���
�{�
�c�
���
���
�c�
���
�X*	
�QX	
�Sf	
���	
��	
���	
���	
��	
���	
�	�	
��	
�

��

��

��+

�N8

��E

�BS

�	a

�\"y

��

���

�N�

���

��
�

�	�

��
�W
�� 
�	/
�V;
��G
�A"S
�_
��k
��w
���
���
���
��
�"�
��
�B�
���
���
�U�
���
��
��
��

�M+
��
7
�C
��O
�K[
�gg
��s
�4
�V�
�p�
��
�
���
�%�
���
�@�
� �
�\�
��
�#

�I

��

��	'

�3

��?

�C
K

��W

��c

�io

��{

�
�

�\�

��

���

���

���

�n�

�2�

���

�Z!�

���

�t
�/
��#
�Z/
��;
�6G
��S
�:_
��k
��w
��
��
��
�" �
��	�
�a�
���
���
�e�
�C�
���
�b	
�.
�
��&
�l2
�6>
��!J
��	V
�r
��
�f�
�*�
���
���
��
�� �
���
�'

��	
� #
��)
�}"/
�5
��;
�A
�DG
�	M
��
S
�:Y
�:_
�e
�k
�oq
�-w
�T}
���
���
��
��
�
�
���
�	�
���
�=	�
��
�>�
��	�
�� �
�� �
�}

��
�Q%
�82
�&?
��L
��Y
��f
��s
�,	�
���
���
���
���
�
�
�e�
�w�
��

�"
��$
�o1
��?
�L
�CY
��g
�= t
�&�
�[�
��
���
��!�
�9�
�K�
��
�
���
�'�
� 
�� 
�L 
�6
-
��:
��G
��T
��a
��n
�}{
���
��
���
�� �
���
���
�W�
�a�
���
���
��

��
�y$
�1
�H>
�8K
�!X
�d e
�4r
��
���
�(!�
���
�r�
���
���
���
���
�%�
��
�� 
�d
�Sp
���
���
���
�E�
��
���
�#
��&
�;
�j!P
��e
��r
��
���
�,�
�?�
���
���
��"�
�s�
���
�
��1
��!F
��[
��p
���
�X)
��5
�|B
�P
�ke
��q
��}
�d�
���
���
�X �
��
�V$
�q"1
�}=
�

I
��V�_
�!l�u
��!�x�
���p�
����
���
�q
��
��*h3
�h@I
�u V`e
��
r{
���
���X�
�K�
�[�
��!�
��
�
���
�K�
���@
�8
@(
�@4
��
AJ
��RPi
�
"u
�y
��
�A�
�;�
��
���
�����
��� �����
��
�
�6	
�4�
�P(
�d,
�b1
�P:
��>
��C�`
��i
�(
u
��y
��~
�B
�
���
���
���
���
������
���
�0�
�.�
�^�
�\��
��

��
��
��
�� 
��%
B/[
�d
�p
��t
��ym���
�P�
��
��
������c�
���
�@
�@
�*"
�(+
�S/
�M8�A
��R
��V
��[�z��N����]�s���
��)
��2
��6
��?�H
��Y
�X]
�Tf
��j
��op�@�v�v�
���
���
��
�	���N��� &! 
� 2 
�96 
�7; 7T ca !v N�� J� O� a� N�� r� �� B� x� S!N!g+!�:!yR!�c!Np!�!��!N0�!��!N6�!��!��!Nr�!�!	"Nz"P%""6"NC"0
R"Ac"N�p"�"`�"N��"0�"�"N��"��"��"N��"	#�#N�'#�6#�G#N�T#�c#�t#N��#��#�#N��#��#-�#N��#�#I�#N�	$�$e)$N�6$0E$�V$N�c$0r$��$N��$�$��$N��$`�$��$N��$p�$�
%N�%p&%
7%N�D% 
S%,d%N�q%��%K�%N��%�
�%��%�%��%�%��%&& &15&N?&@T&N�^&Ek&�|&N=�&p�&��&NS�&P�&�&Nb�&0�&$'N'<"'N�D'
�/I'
�_S'
�8m'
��'
���'
�J�'
���'
���'
�
"�'
���'�'
��'(
��!(
�`%(
�\.($7($L($Y(?f(ut(
���(��(
���(
��
�(
�z�(
���(
�b�(
���(
�+)`)
��()
��4)0K)
��^)4g)4�)
�8�)��)
���)
���)
���)
���)
���)��)��)
��)
�
*�*
�@*�'*
�p8*
�`<*
�\A*
�pO*
��S*
��a*
��e*
��j*��*	�*��*
�[�*
���*
���*��*
�J�*
�$�*
��*
��+
��	+
��+
��+
��+
��/+
�
	3+
�	B+
��	F+
��	K+
�	W+
��	[+
��	`+
��l+
��
p+
��
y+L�+
��+
��
�+
��
�+
��+
�4�+
�0�+L�+L�+
�l�+
�j�+W�+}�+�
,�(,�@,,d,��,
�|�,
���,
���,
���,��,
�	-
��-
��
-
��-
�*(-
��,-
��1-
��=-
�XA-
�VF-
�]R-
�V-
�{[-
��l-�u-
��-��-
���-
���-
�� �-
���-
��.
��.�..
��:.
��>.
��N.
��R.
��[.	d.
�@u.
�.
y.
�,
�.	�.
�P�.
�U
�.
�Q
�.
�P�.
��
�.
��
�.
��
�.
��
�.
��
�.
��
�.
�!�.
��.
�F�.
�D�.�.
��/�/
��&/
�m*/
�i//=/
��I/l/
��p/
���/
���/
���/�/
�r�/
�J�/
���/
���/
�m$0
�wJ0
�f
V00m0
�Jy0
�6}0
�2�0
���0
�s�0
�o�0
���0
���0=�0H�0
�h�01
�J1
�1
��1
��%1
�X)1
�N:1
��>1
��M1
�cQ1
�[V1
��j1�s1
�`�1
���1
���1
�`�1
���1
���1��1��1
���1
��1
��1��1
���1
��2
��2`2`12
��52
��?2�H2�a2
�
e2
�p2y2�2
�>�2
�<�2�2
�o�2
�m�2z�2��2�3 3-(3G63
�fB30
Y3
��e3
��i3
��z3
�:~3
�.�3
�	�3
���3
���3
���3
���34
�3
���3
�'�3
�!�34
�3
� �3
�u�3
�s�3
���3
��4
� 
4@
44
#4
�`44
��84
��A4
�+E4
�'N44
W4
�pd4
�eh4
�aq4
��u4
��~44
�4
���4
���4
���44
�44
�4
��4
��4P
�4P
�4
�8�4
�6
5Y
5Y
,5
�]05
�[55Y
J5
��N5
��[5e
d5e
�5
���5
���5J
�5s
�5
���5
���5
���5s
�5
�0�5
�"�5
��5s
�5s
6
�Z6
�X#6�
,6�
D6
�H6
�}M6�
b6
��f6
��r6�
{6
�`�6�
�6
�p�6�
�6
���6
���6
���6�
�6�
�6
���6
��7
��7�
%7
� 37
�P<7
�@7
�N7�
W7
��i7
��r7
�Hv7
�@7�
�7
��7
���7�
�7N��7�
�7
���7
���7
���7�
�7
��8
��8
��8
��8
��8
��&8
�&*8
�$38
�Y78
�U@8
��D8
��M8
��Q8
��Y8�
o8
�?{8
� �8
���8
�;�8
�'�8
��8
��8
�	�8
���8
���8p�8
�P�8
���8
���8p9
��9
�=9
�;#9
�e'9
�a09p99pR9
��V9
��_9
��c9
��l9pu9p�9
���9
���9p�9p�9
�7�9
�5�9u�9u�9
�\�9
�Z:~
:~&:
��*:
�/:~D:
��H:
��U:�^:
�	n:
��r:
��w:
�	�:
��:
��:��:��:
�C�:
�A�:��:U�:�:
�0	;
�j;
�f
;;
�@	#;
��';
��0;9;
��	J;
��N;
��W;
� [;
� d;m;�;
�) �;
�' �;
�Q �;
�O �;�;�;�;
�v �;
�t �;�;
�� <
�� <
��	<
�� <
�� #<
��	,<
�I!0<
�C!9<
�
J<
��!N<
��!W<o<��<N��<��<
�0
�<
��!�<
��!�<��<
��
�<
��!�<
��!�<
�1"�<
�-"�<
��
�<!�<�=
��
=
�k"=
�g"!=
��"%=
��".=�7=
� D=
��"H=
��"Q=
�#U=
�#^=�g=
�Px=
�W#|=
�S#�=��=
���=
��#�=
��#�=��=��=
��#�=
��#�=��=�>
��#>
��#	>�>
�$">
�$/>�8>�U>
�=$Y>
�;$_>.{>��>\�>
���>�>
���>
��"�>��>
��?
�d$?
�`$?
��$?
��$"?�:?�R?�f?
��q?0�?
���?
��$�?
��$�?D�?
�3�?P�?
���?
�%�?
��$�?d�?
�B!�?p@
��@
�@%@
�<%$@�2@
�=@�T@
��_@
�}%c@
�y%s@
��%w@
��%|@�
�@
�(
�@
�B
�@
���@�
�@
���@�@�
�@�
A
�&A
�
&A
�=&A
�;&!A�
*A
�7A
�k&;A
�i&@A
�IA
��&MA
��&RA�
oA�
�AX
�A
���A
��&�A
��&�A]
�As
�A�
�A
�A!
BG
B
��"B
�	/B
�6B`MBubB
�(
oB
�B
~B
���B��B
���B�B��B��B
��&�B
��&�B
�'�B
�'�B��B
��C
�@'C
�>'C
��C
�n'!C
�l'&C�CC�]C��C
�Z
�C��C
���C
��'�C
��'�C
�9�C
��'�C
��'�C
��!�C
�:(�C
�6(�C
�K�C
�w(�C
�s(�C
��(D
��(D�,D�PD�eD
��pD��D
���D
��(�D
��(�D
�9�D
�x)�D
�f)�D
��!�D
�B*�D
�6*�D
�K�D
��*�D
��*�D
��+�D
��+�D
�E,�D
�=,
EF(ETLEfdE��E�E�EN�E(�E8�EMFN%#F`<FwZF�oFN~F��F
�Z�F��F
�	�F
��,�F
��,�F��F
�/�F
���F
�bG
��G
�"<G
��\G
���G
�;�G
���G
�m�G
��)H
�
GH
�eH
���H
���H
�F�H
�r�H
���H
��I
�A"I
��OI
�aoI
���I
�h�I
�q�I
��I
�\"�I
��J
�\"$J
�'IJ
�QSJ
�;~J
���J
���J
���J
��	K
��'K
�QK
�VmK
���K
���K
��L
�W!L
��?L
��\L
��iL
�E�L
���L
�x�L
�R
�L
�D�L
��
�L
���L
�D
M
��
M
�*M
�A8M
��
IM
�
UM
��hM�Mp�M�M�M�M.N.N@'N
��4N
��=N
��,AN
��,JN@SN
��`N
��iN
�P-mN
�D-vN
��-zN
��-�NN�N
���N
�%.�N
�#.�N
�U.�N
�Q.�N_�NN>�NL�N@�NWOj)OrAO5NO<[OgqO��O��O��O�ONF�O#P}%PN\/P�EP�\P�mPNs|P��P
��.�P
��.�P
��.�P
��.�P
�/�P
�/�P
�</�P
�:/�P��P��PQ6+QN�:QORQoqQ��Q
�h/�Q
�d/�Q��Q��Q 	�Q
��/�Q
��/�Q
�A0R
�50R
��0R
��0!R
�81%R
�01.R�	7R
��HR
��1LR
��1URX	^RX	{R
��1R
��1�RX	�R
��1�R
��1�R�	�R
���R
�n2�R
�l2�R
��2�R
��2�R�	�R�	�R
��2�R
��2S
��2S
��2Sd	 S
�1S
�
35S
�3:S
�CS
�D3GS
�@3PSd	YSd	vS
�~3zS
�z3�S
��3�S
��3�S
�4�S
��3�Sl	�Sl	�S
�p�S
�'4�S
�#4�Sl	�S
���S
�_4�S
�]4�Sl	T
��T
��4T
��4T
��4#T
��4,Tl	5Tl	NT
��4RT
��4[T
��4_T
��4kTv	tT
��T
� 5�T
�5�Tv	�T
�P�T
�X5�T
�V5�T
��5�T
�~5�Tv	�Tv	�T
��5�T
��5�T
��5�T
��5�T�	U�	!U
��2U
��56U
��5?U
�16CU
�-6LU
�n6PU
�j6UU
��kU�	tU
���U
��6�U
��6�U
���U
��6�U
��6�U
�UN��U
�U�	V
V�
3V
�77V
��6@V
�g7DV
�_7MV
��7QV
��7_VhV
�@uV
�8yV
�8�V
�F8�V
�@8�V
��8�V
��8�V
�@�V
��8�V
��8�V@�V@�V@�V
�9�V
�	9�V
�99�V
�79WX
W
�pW
�g9W
�e9#W
�p,W
��90W
��95WeRW_WlW8�WN��W=�W��W��W
��9�W
��9�W
�+:�W
�#:�W
��:�W
��:X
��#X
��,X
� ;0X
�;9X
�N;=X
�D;FX�OX
�@
`X
��;dX
��;iX
�@
rX
�<vX
�<X��X
��
�X
�J<�X
�F<�X��X
��X
��<�X
��<�X
��<�X
��<�X��X��X
��<Y
��<	Y
��<
Y
��<Y
�0$Y�>Y>GY
�`XY
� =\Y
�=eY>nY
��~Y
�m=�Y
�i=�Y��Y��Y
��=�Y
��=�Y>�Y>�Y
��=�Y
��=�Yp�YpZ
��=Z
��=Zp/Z
�>3Z
�>?Z�HZ
��YZ
�B>]Z
�<>fZ�oZ
�P|Z
��>�Z
��>�Z��Z
���Z
��>�Z
��>�Z
�?�Z
�?�Z��Z
��Z
�X?�Z
�T?�Z
��?�Z
��?�Z�	[�[�+[
��?/[
��?4[�I[
��?M[
��?[[Pd[
�0u[
�J@y[
�H@~[
�0�[
�x@�[
�v@�[a�[N��[��[��[2�[�\ 	\-\
��1\
��9\
�}=\
�}E\
�+"I\
�+"Q\
��U\
��]\
��a\
��j\
�En\
�@�\
��\
��\
�v�\
�v�\
�H�\
�H�\
�!�\
�!�\
���\
���\
��
�\
��
�\
�4�\
�4�\
���\
���\
�F�\
�F]
��]
��]
��]
�� ]
�.$]
�.-]
�
1]
�
9]
�J=]
�JF]
��J]
��S]
�aW]
�a_]
��
c]
��
k]
��o]
��x]
�Q
|]
�Q
�]
���]
���]
�W�]
�W�]
�� �]
�� �]
�P�]
�P�]
��	�]
��	�]
���]
���]
��]
��]
���]
���]
�j�]
�j�]
���]
���]
��^
��
^
�a^
�a^
��!^
��!$^
�&(^
�&1^
��5^
��=^
�*A^
�*J^
��N^
��W^
��
[^
��
d^
�h^
�p^
��t^
��|^
�.�^
�.�^
�M�^
�M�^
�E�^
�E�^
�T�^
�T�^
�	�^
�	�^
�k�^
�k�^
�7�^
�7�^
���^
���^
���^
���^
��
�^
��
�^
��
�^
��
_
�"	_
�"_
�Y
_
�Y
_
��"_
��+_
��/_
��p_
�xt_
�x}_
�h�_
�h�_
�(�_
�(�_
���_
���NNSA!I6Ta\qg)o;�T�>�>�t�S�����J�J����N6�>�I d�l�wN�������S������S
�0�8#CN^�f#q���N���m���
�*�2�S�[�f�n�yJ�������������������
�t\S&�1�9�X�`k
�t\pSxp����@�S�p�@�v���
��\v�@9&A6`hs{w�������	�	�	������&�.	9	A	`�h�s�{	�������	�������	$�,�7�?�J�RD`Dhgsg{u�u�����������������#�+D9DAaLaTubuju}�����������������
	�	� 	�(	3	;	+F	+N	CY	Ca	Dl	t	��	��	��	�	�	W�	u�	��	��	�
�
�
�=
�E
b
j
?�
�
��
��
�
�
��
LV
u|4W<WG}OlLtL�����������������L@��*L;@X�`���������������"��	

.
	6
U
	]
p
x
�
	�
�
�
�
�
�
!)FNm�u��������!�!�"�"60><I<QOs0{<�<�O�0�<�<�N�N�OJ""*"2BX`GkGsJ~"�,�,�=�=�B��J�J������"%"-,8,@Gc;kXwz������=�B�����N�����X#r:�B�Y�a��X�m�����X�X
��>�F�o�w��0
�I
�I
�J
�J
��
��
��
��
��
�
:0
BE
ME
UJ
cJ
k�
v�
~�
��
��
��
��
�s
��
��
���
�
'4
/I
:I
BJ
PJ
Xs
u4
}l
�4
�I
�I
�J
�J
�l
�4
�@
J
e
+4
3@
>J
Fe
e4
m@
yJ
�e
�4
�@
�J
�e
�4
�@
�J
�Y
4
4
8J
@J
]Y
eY
�Y
�Y
�e
�e
�s
�w
�w
��
��
�
"s
*w
5w
=�
Zs
bs
�
��
��
��
��
��
��
��
�
%�
H�
P�
[�
c�
n�
v�
��
���
��
��
��
��
�
&�
.�
Y�
a�
x�
��
��
��
��
��
��
��
�
�
;PC�N�V�a�i�w���.�.�I�I�\�\�\��������Ps)s1�<�D�R�Z\e�m������p�s�s������.�W\
\� �=pE�epmsxs���p���p�s�s���pss~7p?p\udu�~�����������I�U��U&UC�K�j�r}.�.����.�.���� � �) �1 �Q �Y �v ~ � � � � � � � ;!I
!\!\ !�(!�I!?Q!I\!\d!\o!�w!��!;�!?�!��!��!�!.�!��!�	"".1"�9"�D"L".k"�s"�"�"!�"��"��"�"!�"��"��"�"!#�%#�0#8#!W#�_#�j#r#!�#��#��#�#�#��#��#��#�$�$�=$�E$�d$�l$�w$�$��$��$��$0�$?�$?�$P%P%_%_%p@%pH%S%[%�}%��%
�%
�%�
�%G
�%O
�%�
�%�
�%�
�%�
�%X&�
&�
"&N�=&�
E&�
P&k&�
s&�
~&N��&�
�&�
�&X
�&�
�&��&��&N�'�'�%'@'�H'�S'N�n'�v'��'��'��'��'��'��'��'��'��'�(�(�(�:(�B(�M(�U(�w(�(��(��(��(��(��(��(��(��("
)")')z%)�0)�8)�C)�K)�x)��)%�)%�)q�)q�)z�)z�)��)��)��)��)��)��)�*�*�*�*�B*�J*;U*;]*Oh*zp*�{*��*��*��*��*��*��*��*�*�*;�*z+�+�+�$+�,+�7+�?+�J+�R+�]+�e+�p+�x+��+��+��+��+;�+;�+z�+z�+��+��+�,�,�,�,�E,�M,�X,�`,�k,�s,�~,��,��,��,��,��,��,r�,��,
-*-g-q!-q)-�P-@X-Ye-Ym-ix-i�-��-
�-*�-*�-4�-4�-��-R�-V�-V�-y.*.q%.N-.q8.N>U.U].Zi.Zq.^�.R�.n�.n�.��.��.��.D�.}/�//6/></�D/�h/�p/�{/��/��/ 	�/T	�/T	�/�	�/�	�/�	�/�	�/�	�/�	0�	0�	0
A0 	I0T	T0T	\0�	g0�	o0�	}0�	�0�	�0�	�0�	�0�	�0
�0 	�0T	�0T	�0�	�0�	�0

1
1
81T	@1�	K1�	S1�	`1�	h1�	s1�	{1�	�1T	�1_	�1�	�1�	�1T	�1_	�1T	2T	2T	2T	)2T	12\	B2\	J2_	n2�	v2�	�2�	�2�	�2�	�2�	�2�	�2�	
3d	3	3�	%3�	D3l	L3�	W3�	_3�	~3d	�3�	�3
�7_�3�	�3�	�3
�7_�3d	�3�	�3�	�3�	4d	4l	'4l	/4	:4�	B4�	_4l	g4o	�4l	�4o	�4l	�4o	�4l	�4o	�4l	5o	 5v	(5	35�	;5�	X5v	`5v	�5v	�5v	�5v	�5v	�5v	�5v	�5�	�5�	6�	6
16�	96
D6
L6
n6�	v6�	�6�	�6
�6�	�6
�6N��6�	�6
7�
777�&7�.7�97�A7�g7�
o7z7�7��7��7��7��7��7�
�7�7�7�888"8�F8N8�Y8�a8�l8�t8��8�8��8��8��8��8��8�8S9@9q9N�99@A9qL9g9So9ez9N��9S�9e�9��9��9��9��9��9��9�:+:�3:�>:�F:�T:�\:�g:�o:�:��:��:��:��:��:��:��:��:��:�:; ;�(;�N;�V;�a;�i;�t;�|;;�;d�;f�;��;��;��;�;��;��;��;�<<;#<�+<�J<�R<]<�e<��<��<��<��<��<��<��<��<� =�(=�3=>;=JF=fN=vm=�u=��=>�=D�=��=��=>�=>�=f�=v>f>vB>J>U>�]>�h>�p>��>�>�>��>��>��>��>��>��>��>�?�&?�1?�9?�X?�`?�n?�v?��?��?��?��?��?��?��?�@�@�@�%@�-@�J@JR@d]@N�x@J�@f
� ����� �(�@	H	P	X`h�@������@�r�0�g�<�K�N�_LW x(�@�H�P�X�p�x����	�X	�_	��	��	��	��	��	��	��	��	d	l	 l	(l	0l	8v	@v	H	P�	X�	pl	xl	�l	�l	�l	�v	�v	�	��	��	�l	�l	�l	�l	�l	�o	v	v	 v	(	0�	8�	Pv	Xv	`v	hv	��	��	��	�
��	��	��	�
�4
�4
�4
�4
:
s
 4
(4
04
84
@:
Hl
`4
h4
p4
x4
�:
�@
�P
�e
�4
�4
�:
�@
�P
�Y
�s
�}
}
�
�
�
0s
8}
@}
H�
`�
h�
p�
x�
��
��
��
��
��
��
��
��
��
��
��
��
�
�
 �
(�
0�
8�
P�
X�
`�
h�
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
��
�
 �
(�
0�
8�
@�
H�
P�
X�
`�
h�
p�
x�
��
��
��
��
��
��
��
��
��
��
��
��
�
�
 P(\0�8�PpXp`ph�px�����0�W�����p�p�p��	�	�	P	W0	8	@	H	P	X	`	0h	0�	�	�	�	�	�		�	�	�	;�	P�	��	�

	
;
?0
�8
�@
�H
�P
X
`
h
0�
��
��
��
��
�
�
�
0�
��
��
��
��
�
! �(�08!P�X�`h!���������������O
�Q
�X
��
�
�
 �
(�
@H�P�X�pLxX�X�e�������P�P��������������
�
�
�
� 
�(
�@
�H
�P
�X
�`
�h
p
�x
��
��
��
��
��
��
��
��
�
��
��
��
�����0�8�@�H�`�h�p>xP�p�v�����>�D�������������� �(�0�8�PX`�h�p�x�����������������������������0P8P@PHd`Oh`p�x������`�r�������`�m����ch o(�@hHoP�X�`Ph�������������X�������Xp &(00287P�X�`�h��������/�������#�����Km �(�0�8�P�X�`�h��������{�`���� 4H0\`pp����������$�D0\Ptp�����0������� 	P 
d0
��0�P�$`H�t�
���4P.symtab.strtab.shstrtab.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.rela.gnu.build.attributes.unlikely.text.startup.rela.gnu.build.attributes.startup.text.exit.rela.gnu.build.attributes.exit.rodata.str1.1.rela.text.unlikely.rodata.str1.8.rela.data.rel.local.rodata.cst16.rela.debug_info.debug_abbrev.rela.debug_loc.rela.debug_aranges.rela.debug_ranges.rela.debug_line.debug_str.comment.text.hot.zzz.text.unlikely.zzz.text.startup.zzz.text.exit.zzz.note.GNU-stack.note.gnu.property.rela.eh_frame.group9@8�9T8�9l8�9�8�9�8� ��@a�"8&h,�� 6��1@���8
L([(�V@��08
	�)z�)�u@�08��+��+��@�08��-��-��@@�08�2P/�	B1@p�082X1%,�1'@��8<�1O�1�_J@����8[D�An���@i@XEPj8"~!�@y@��H8$�a���@�@,8&����@0�`8(�0
�"�0�,.��,��,L�, �,��,��,��,��,�,�, /-h*@��H86h2�9�	�O��@PK$"#[z�YhH.H.&gems/ruby-lsapi-5.6/ext/lsapi/lsapi.sonuȯ��ELF>T@'@8	@H�H� ��!�!� ��!�!888$$(�(�(�  S�td(�(�(�  P�td��������Q�tdR�td��!�!0
0
GNU���,��2jj�d�8���/۰C�	H�‚3@(�L�`���q�CS�l����P*�f�R�������������������������������������������������n�}�'3qѮl>�&��Sɶ��
���ܮʼnSO��`��[is�|&߱R����D�/y7ř����k���Պ e�Y����&09=��By:%/�=��ejO�z�J�6�'��l#mNU�L�C�B�1�{�!�\�$�O#W��2�3S=ap��b�U�0��6�������aD7�jp#�7����ĴDI���Ί=\���4y�ݾCE���к�Q��u���o��	��r�SѮ����Io���|q%h6	󝵛���'
���=��qX�[�u�	� 	f�� #	�	��@
�y��sOT	�����
0
����[�����e	�^k�	�&����'!{

2�	RT�	s��
�? +(��>�n��	���-�
LH�	�
".���
"�
"$7x�
WK
�X
�6
�A	���A�.	9&��4�, �2���F"���	��E9
��
k
r��G����|F�PqD`��%
��S�@��
5Pui~����z@!	b��.p��	�!��]��Z\ f��n@�v �1�@q
Y��`pp�@@��`���rl�zj�U��|����-�pr]�0�	��n�`qY�n�0�5Ѓ�o�w$�p~l!@tUU
E�u�rS� n7�`nT��(����P�� ��0|F��qJ�`�p0�!�p}�I���@���p�!b��g���Џ@C�"!�l���6�n�������7�!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizecompareValueLocationset_skip_writesigactionsigemptyset__stack_chk_failreallocfcntlacceptsetsockoptmmapmemsetsetsidread__errno_locationclosewritevkillgetppid__ctype_b_locstrncpystrchrstrcasecmpstrtolgetaddrinfomemcpyfreeaddrinfoinet_addrLSAPI_Log__vfprintf_chk__snprintf_chkgetuid__fprintf_chkgettimeofdaylocaltime_rwaitpidforksystemexitlsapi_perrorstrerrorLSAPI_is_suEXEC_DaemonLSAPI_StopLSAPI_IsRunningLSAPI_Register_Pgrp_Timer_CallbackLSAPI_InitRequestmallocgetpeernamedup2LSAPI_Initgeteuidsignalg_reqdlopendlsymLSAPI_Is_Listen_rLSAPI_Is_ListenLSAPI_Reset_rLSAPI_Release_rfreeLSAPI_GetHeader_rLSAPI_ReqBodyGetChar_rLSAPI_ReqBodyGetLine_rmemchrmemmoveLSAPI_ReadReqBody_rFlush_RespBuf_rLSAPI_GetEnv_rstrcmp__ctype_toupper_locLSAPI_ForeachOrgHeader_rqsortLSAPI_ForeachHeader_rLSAPI_ForeachEnv_rLSAPI_ForeachSpecialEnv_rLSAPI_FinalizeRespHeaders_rLSAPI_Flush_rLSAPI_Write_Stderr_rgetpidgetcwdmemccpy__realpath_chkLSAPI_Finish_rLSAPI_End_Response_rLSAPI_Write_rLSAPI_sendfile_rsendfileLSAPI_AppendRespHeader2_rstrlenLSAPI_AppendRespHeader_rLSAPI_CreateListenSock2socketbindlistenunlinkLSAPI_ParseSockAddrLSAPI_CreateListenSockLSAPI_Init_Prefork_ServercallocsetpgidsysconfLSAPI_Set_Server_fdLSAPI_reset_server_stateis_enough_free_memLSAPI_Postfork_ChildLSAPI_Postfork_ParenttimeLSAPI_Accept_Before_Fork__fdelt_chkusleepsched_yieldLSAPI_Set_Max_ReqsLSAPI_Set_Max_IdleLSAPI_Set_Max_ChildrenLSAPI_Set_Extra_ChildrenLSAPI_Set_Max_Process_TimeLSAPI_Set_Max_Idle_ChildrenLSAPI_Set_Server_Max_Idle_SecsLSAPI_Set_Slow_Req_MsecsLSAPI_Get_Slow_Req_MsecsLSAPI_No_Check_ppidLSAPI_Get_ppidLSAPI_Init_Env_Parametersgetenvgetpwnamdlerrorsetrlimit__fxstatsetreuidLSAPI_ErrResponse_rlsapi_MD5Initlsapi_MD5Updatelsapi_MD5FinalgetpwuidsetgidsetgroupssetuidstrtollprctlinitgroupsLSAPI_Accept_rLSAPI_Prefork_Accept_rsigaddsetsigprocmaskLSAPI_Set_Restored_Parent_PidLSAPI_Inc_Req_Processedselectrb_str_newrb_hash_asetrb_gc_markmunmaprb_string_valuerb_string_value_ptrrb_eval_string_wraprb_str_new_staticruby_strdupmkstempftruncaterb_str_buf_newrb_str_catrb_num2intrb_fix2intmemmemrb_yieldrb_gc_writebarrier_unprotectrb_io_putsrb_ary_detransientrb_unexpected_typerb_obj_as_stringrb_debug_rstring_null_ptrrb_f_sprintfrb_intern2rb_funcallvs_fn_add_envrb_ruby_verbose_ptrrb_define_global_constrb_default_rsrb_exec_recursiverb_output_fsrb_output_rsrb_lastline_getInit_lsapichdirrb_stderrrb_cObjectrb_const_getrb_global_variablerb_define_classrb_data_object_zallocrb_stdoutrb_stdinrb_hash_new__memcpy_chkrb_define_methodrb_define_global_functionrb_define_singleton_methodlibruby.so.3.1libm.so.6libc.so.6__environ_edata__bss_start_endGLIBC_2.14GLIBC_2.15GLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5GLIBC_2.3/opt/alt/ruby31/lib64���H���Sii
^ti	hui	tii
��!�T�!�T�!�!!��!Q�!��!W� !^�(!c�0!i�8!n�@!t�H!{�P!��X!��`!��h!��p!��x!���!���!���!���!���!���!��!
��!��!-��!6��!D��!M��!a��!G��!l��!|�!�� !��(!��0!��8!��@!��H!��P!��X!�`!�h!'�p!4�x!>��!J��!W��!g��!z��!���!���!���!���!���!���!���!	��!��!��!��!)��!9��!X!�!�!�!�X!`!h!p!�x!��!��!!�!3�!��!=�!I�!K�!R�!V�!V�!W�!��!��!m�!|�!��!�
!
!� 
!(
!0
!�8
!@
!H
!P
!X
!�`
!h
!	p
!
x
!�
!�
!
�
!�
!��
!�
!�
!�
!��
!��
!�
!�
!�
!�
!�
!�
!!�!!!� !�(!�0!8!@!�H!P! X!"`!#h!�p!$x!%�!&�!��!'�!(�!��!)�!��!��!��!*�!+�!,�!-�!.�!��!�!�!�!/!0 !1(!�0!28!�@!�H!4P!5X!6`!7h!8p!9x!:�!<�!>�!?�!@�!A�!��!B�!C�!D�!E�!F�!G�!��!H�!��!J
!L
!M
!N
!O 
!�(
!P0
!Q8
!�@
!SH
!�P
!TX
!U`
!Xh
!Yp
!Zx
![�
!\�
!]�
!^�
!��
!_�
!`�
!��
!a�
!b�
!c�
!d�
!e�
!f�
!g�
!h�
!i!�!j!k!l !�(!�0!n8!o@!pH!qP!rX!s`!�h!tp!ux!v�!x�!y�!z�!{�!}�!��!~�!�!��!��!��!��!��!��!��!�!�!�!�!� !�(!�0!�8!�@!�H!�P!���H��H��� H��t��H����5*� �%+� ��h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h	��Q������h
��A������h��1������h��!������h
��������h��������h������h�������h��������h�������h�������h�������h�������h�������h��q������h��a������h��Q������h��A������h��1������h��!������h��������h��������h������h �������h!��������h"�������h#�������h$�������h%�������h&�������h'��q������h(��a������h)��Q������h*��A������h+��1������h,��!������h-��������h.��������h/������h0�������h1��������h2�������h3�������h4�������h5�������h6�������h7��q������h8��a������h9��Q������h:��A������h;��1������h<��!������h=��������h>��������h?������h@�������hA��������hB�������hC�������hD�������hE�������hF�������hG��q������hH��a������hI��Q������hJ��A������hK��1������hL��!������hM��������hN��������hO������hP�������hQ��������hR�������hS�������hT�������hU�������hV�������hW��q������hX��a������hY��Q������hZ��A������h[��1������h\��!������h]��������h^��������h_������h`�������ha��������hb�������hc�������hd�������he�������hf�������hg��q������hh��a������hi��Q������hj��A������hk��1������hl��!������hm��������hn��������ho������hp�������hq��������hr�������hs�������ht�������hu�������hv�������hw��q������hx��a������hy��Q������hz��A������h{��1������h|��!������h}��������h~��������h������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a������h���Q������h���A������h���1������h���!������h���������h���������h�������h��������h���������h��������h��������h��������h��������h��������h���q������h���a�������%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݿ D���%տ D���%Ϳ D���%ſ D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݾ D���%վ D���%; D���%ž D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݽ D���%ս D���%ͽ D���%Ž D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݼ D���%ռ D���%ͼ D���%ż D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� D���%M� D���%E� D���%=� D���%5� D���%-� D���%%� D���%� D���%� D���%
� D���%� D���%�� D���%�� D���%� D���%� D���%ݻ D���%ջ D���%ͻ D���%Ż D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%�� D���%}� D���%u� D���%m� D���%e� D���%]� D���%U� DH�= ������%f.�H�=�� H��� H9�tH�&� H��t	�����H�=�� H�5�� H)�H��H��H��?H�H�tH�m� H��t��fD�����=E� u+UH�=J� H��tH�=.� �y����d����� ]������w�������ff.����n� Ð��H�GH+F�Hc�AVI��H�@AUATL�$�USH��tQH��H��tIH��I��L9�r�0H��I9�v'�KH�SM��sH�;�Յ��[]A\A]A^��[D��]A\A]A^ø������ff.�f����=~� �D���� Ð��OAWD�D�_AVAUATUSD�6�^�nA��x�j׋G3GD!�3G��V���\$�ЋW�^$��D�D1��\$�!�3WA��ʋN��F���p $E��‰L$�A1�A1�D��D�^!�D1�G��;�ν�D�\$�D�E��D�V���D�T$�A!�A1�E�E���|���A��
1�A�D!�E��1�D�D��*ƇG���D1�D�!�A��1�A1�D�D�N���D�L$�E��	F0�D��!�D�nA1�D1�D�G���F�E��D�f ���D�d$�D�^(A!�A1�E�E��ؘ�i��A��
1�A�D!�1�D�D����D��ʋ^0��D1�D�!�A��1�D�E���[��D����1��!�D1�D�D�N,��A1��D�L$�G����\�E��A!�D�f8A1�E�D��"�k��A��
1�A�D!�1�D�D�N4��E���q����D�D1�!�1�D�E���Cy�D����1��!�D1�D�D�V<���1��G��!�I!�1�D�D�D$��
�E��b%���1�!�1�D�D�D$��E��@�@���1�!�1�D�D�D$���	�E��QZ^&��1�!�1�D�E��6�Ƕ����1�!�1�D�D��]/։���1�!�1�D�E��SD���1�!�1�D�E��
��؉���	�1�!�1�D�D�D$��E��0����1�!�1�D�D�D$���E�����!��1�!�1�D�E���7É��1�!�1�D�D�D$��	�E���
��1�!�1�D�D�D$��A��0�ZEA��A1�A!�A1�A�A���㩉�A��A�D1�!�1��t$�D������D��1�!�A��
�ogD1����	�1�D!�F���L*�1�D�D$�Ή���1�A��A!���B9��A1�DD$�A��A�D1���D$�����q���D�D1�1�‹D$�����0"a�mD���1�G��8�1�Ɖ��1��1�D�D�D$��	E��D꾤���1�1�D�D�D$�A�����KA���A1�A��5`K��A1�AЉ�A��p���A��1�A�D1����D1�D�1��A��	�~�(D����	1�G���'���1�����1��1�D�D�D$�A���0��A���A1�A1�AЋT$�A����2���A�1�D1�֋T$��	��
9��ى�D�D1����1��D�����1�1��C���|�A��A1��A1�A��D$�A����0eV�ĉ�A�1�D1��A��D")��D�t$��	��D�	�D1��A��
��*CD������G���#���	�1����
���	�1�D�D��9��������Ή��	��1�D�D���Y[e��\$���	�1�D�E�������D�t$�����	щ�1���D�E��3}���D�\$�
���	�1�D�D�D$���E���]����	�1�D�E��O~�oA���A���D��	�1�D�E��
��,���D�T$�����	�A��1�A��D�E��6C���D�t$���
��A���N�	�1�A���~S�A��D�E��A����A	�A1�A��5�:�A�D��A��A�D	�1�Љ�3���*�\$���D�	�D1��D��F���ӆ�[��
��]A\�A]A^	�1������։�	�1�DƉ�A�4A_���OW�G�O�W��ATI��1�U��SH��dH�%(H��$�1�H��H����H�<$t)H��$�dH3%(u<H�Ġ[]A\�f.�H�{��1�H�މ�DŽ$�L�$$�l���u�DH�
y� H�A(H�Q8H9�s;8u�fD98tH��0H9�w�1�Å�tH�P0H;Q0v�H�Q0�Df�H�@$@@�@,�������DUHc�SH��H��H��H�@���H��t#H�SPH�H+S@H�C@H�H�SPH�CH1�H��[]ø������f�U1҉�1�S���H������t��t/H��1�[]�fD��t��H���‰߾[1�]�r�f�����ff.�SH��dH�%(H��$�1�H�T$H�t$�D$�D$��&�Ã��tf�|$t'H��$�dH3%(��u0H�Ġ[�f�H�L$A���Ǿ������ff.�f��� ��Hc�H�vL��H�L9���H��H)�H����S�Nf.�E��������L�I؃�H��L�G�L�E�C�H�D�G��w�I9�thH��H)�H��~SH�pH�2H�pD�H�2H�pD�XH�2�pA��E�L�@��L�Ic�A���pD�Hc�L�M�L9��i��������[�f��0��u�H��[H�1�ø����Ë��u�H��H�1��f�AVAUE1�ATUH�-�� SH�}(t[D��]A\A]A^��EEA������!Lc�@���D��
 DI�E1�1�A���Mc�L���b�H��H���t]L��1�H���|�K�vH�](H��H�]0H�H�]8H�CH��� H��� H�CH��H�|� H�}� ���[D��]A\A]A^�H�=�pA�����1����H���H���H+��Hcp�G )�H����H��xsH9�AVHN�AUATUI��SHwH��D�wH���L��H��D���z�I��H���u!�|��8u
��� ��u�D��[]A\A]A^ÐH��~���[]A\A]A^ø�����fDUSH������tMH���������u���8u
�0� ��u�H�i� �E����H��t�(H��� H��t�@��H��[]�ff.�@AWAVAUATUSH�������ж ��t8A��A��I����A��f�I�7D����#��Å�-���tx��� ��u�D��D)�H����[]A\A]A^A_��A)�E��~ڋn� ��t�I��f�H��)�I���~�H�PHc�H9�v�HI�H)H�x���������t���s����E)�E��AO��r���1��k���S�e� ��t-�=W� ��t+1��D����u��[�8������1�[�@��9�[����ÐAVAUATUH��SH��H��PdH�%(H��$H1���H��
fDH��H��DB u�L�d$@��H��L���T��D$@Ƅ$?</tc<[����:L��f�E�5�H������|$@*H�X�zH�5�mL����A�ƅ��;�EM�����H�}�lf�uL�����1�H��$HdH3%(�QH��P[]A\A]A^�D�
M�l$�]f�ML����H�����|$A*H�XA���1��;:�
��1�H�H����H�Í@�=����E��uf��1�f�]�Y���D�Ef�1�H�T$)D$H�L$L��D$H�)D$ )D$0H�D$�*���upL�d$H��A�T$I�t$��L�����L��E1�M��������EA���<�����EE1�M���"����::A�D$M��fA�$�
����������������AUI��ATU��SH��(H��$�H��$�L��$�L��$���t@)�$�)�$�)�$�)�$�)�$�)�$�)�$)�$dH�%(H��$h1����t�=ݶ ���ML�d$`L��@��@��u��������L9���H��� H�;H�L$HL��H��$P�D$HH�D$PH��$p�D$L0H�D$X��H��$hdH3%(��H��([]A\A]�H��� H��L�kH�����L�¾d1���C�H�HÁ��K����-0� ��H��H�ߺUA��L��j�dH�����1���H�H�XZL9�����H��H�� M��1�L)�H��j�H�;�w����f�H��1�L�d$`H�����H�t$H������uI��������D$�L��L�j�P�D$PD�L$(1��^�Y^Hc�L��L����H�D$L��p�L���P�D$P�D$$P�D$0P�D$<P�D$H��P�D$TD��l1���H��0Hc�L�����/�ff.�@��AWAVAUATUSH��(dH�%(H�D$1�H�=� �.�D$�H�l$L�5UiL�-RiL�%p@�H������v�A�Dž����T$�Ѓ���<~$��M��L������D��ME�1����D;=(� t�D;=�� tUD�����H��H��t�H�H1����@�1@�Ɖ�@����H�ҳ H��t�(H�2� ��h�K����V� �����9����H�5	� H�N0H�V(H9�s*D�A�H�A�E��t�DH��0�8��u.H��H9�r�H�F0H�D$dH3%(uH��([]A\A]A^A_�H�N0�����D$�@�1�D$�X���H�� H���D����C���ff.��AWAVAUATUH��SH��H��(�=�� dH�%(H��$1���t1������thH�C(I��I��D�3L+cI)�H�C D�{H)��=��D$��H��E��E��AT��H�5on�AU1�U�L$,�,�H�� ���u� ��t)H��$dH3%(ulH��([]A\A]A^A_�@D�H�\$H���H�߹�AQL�yn�$��XH��Z�����t
1���fDH�=�f�����5�DAWAVAUATUSH��L�+� I�Z(M�j0L9��H�|$E1�E1�E1�@��B��ve�CA�l$����A�BD)�A;B�E9r�
��� ��~ H�SH�L$��H�H)�H9���fD�CA��f��A��H��0I9�w�A�R��D)���1�)ȃ��H��[]A\A]A^A_�fDH�C H�t$H)�IcBH9����C��i�gf��f����)���f9�u�ΰ �����Cf��~pH�5im�1��M��;�	�����tp�CA��L�ݯ A��f�C�5���fD�C��f�C�����A�������H�51m�1�����;��1����u�����8u��L�e� ����H��E��E��D��[H�5m]�A\1�A]A^A_��fDH�t$H����������@E1�E1�E1��z���f.���UH����S��H����H����H��I��[H�5Qd�1�]��f����� 1���u1��=� ������ު Ð���Ҫ �D��H�=ͮ �@��ATUSH��dH�%(H��$�1�H���}H�H��H�1�HLJ	H�ى�H��H)����	���H�H�{`���I��H���0H�CxH�S`L�c`� L�H)�H�CxH�CpL�H)�H�CpI��$H�Ch��H�C8H�C(H����H I���H��H�C0H��(L�cxL�cpH����l��������twH�T$H�t$���D$������t
�}���8kt0�����1��kH��$�dH3%(uiH�Ġ[]A\�fD�+����C�����C�1����1������H�=tb��1���1����#���_���fD���������ff.����S�e� ��t	1ۉ�[����H�5L��
�� �Ƭ �e�H�5>��
�T�����������H�=� 1��8����tI�� �T��H�=�a�ά ���H���c���H�5�aH����H��� ��[É��D�����1��?������H�=u� �0����H�W(H�w`HLJ�H��HLJ0H���H�W�H�VH�W�H�W�H�W�H�W�H��)���81����H�����SH��H�H��t�
��H���H��t���H���H��t����H�{@H��t����1�[�fD��H��tG��wBL���Hc�A�T�4��t/Hc�A�pH���H�H€:t
�H���H���1��ff.�f���H��tP��tJSHc��H��;��}H�S�HH������[������~	Hc���и����[Ã����AWAVAUATUSH�Z�H�H��H�D$H���:�G�����H���%H����I��H���I�����I��I��L��fDA���)�Hc�H����L9�Hc�IO�IvI���
H��L�����H��tML)�H��L��H�XH��H�����A��I��A�$��D)��EH��[]A\A]A^A_��L��H��H��H����A���L�|$I���I)�A���M���?����D���L���L�Hc�H��~�A����-���H��1��|���������v���@��AVAUATUSH������I����H��H����H��H����H���H+��E1�H����H9�Hc��HO؋��)�H�H��~)H9�H�wH��HN�H�H��I�����E��L�L)�H��t6�E�u@H��H��D���J��H���u4�O���8u
�`� ��u�M��t-M��[L��]A\A]A^��H��~�I�H�H)�u���I�������D��H�O(H�W8H��LJLS���H)ʍB����H�GpH�0H�pH�@H�wp��~Hc�H�HH�� H�P�H�O8H�Gp����AWAVAUATUSH��H���H�T$H����H��H�<$�I��H�=�\�������HcB$H���H�@H�,�H9�r�Zf.�H��H9�vGH�3L���L����u�H�CH��[]A\A]A^A_�H�D$L9��I��M9���f.�1�H��[]A\A]A^A_��H�$1�L�={� L���@A�l�4��tI�4�L����������H��H��u�H�D$HcP 1���~�H�$H��L���M�tM9�s�H���H�$I�D$H�D$@IcMIcmH,$L�|
L9��)���A�\$���)����K��H�8H�D$�'���-t	��_����H��H��I9�t�����H�U:�t������8����IcUIcEH$H€:����������H�$Hc�Hc�A�VH��H€:�������@��AVAUATUSL��$���H��H�$L9�u�H��dH�%(H��$@1�H����H��H����H���H����H��E1�L�
� L�kh�f�H���Hc�HcT�4��t7�qH��M���
H��Ic�A��H��L�E��H�TD�T�tH��H��u�H���HcP ����H���H��L�L9���Ic�I��H��L��f�H��H�� I9���HcHHc0A��H���LcPI��HcHH��B�D�BH�J�HH�2�JA��u��H�
�� � L������$DI��H�
f� Ic� L���n��E��taE1��@A��I�� E9�~CA�MI�UI��A�uI�}�Ӆ��H��$@dH3%(u6H��@[]A\A]A^��D����1���@Ic��U������������ff.����AWAVAUATUSH��XH�t$ H�T$dH�%(H��$H1�H����I��H����1�E1�L�-�fH��L�%�� H��H���Hc�HcT�4��t/�HH��A��A�t�I�<�H���L�D$A�ׅ��4H��H��u�H���D�t$<HcB ���L���H��L�H�D$0I9���H�\$(L�t$@fDH�D$(A�l$Ic$A�HTTPH������A�F_L�<H�D$��O�Hcʼnl$8I�H�D$I9���M�nI��I�o�I���_@��-t���H���A�E�L9�u�H�D$I�D�t$8L�D$�L��IcD$IcT$HT$���H�D$ A�L$�Ѕ�~"I��L9d$0�-���H�l$(H����B D$<H��$HdH3<%(u'H��X[]A\A]A^A_�DI�F�v��������������ff.���H��t7H��t2H���D�@$1�E����H���H��H��D�����������f.���H��t7H��t2H���D�@(1�E����H���H��H��D���S��������f.���H����H�O`H��tz����Ѓ�tr��L�G@������H�WPL9�vH�wpL)��L�H��H�V�H�wpHc�0H�T�H�Q�����,H��(LJ(LSH�1�H�Oxø�����f.���H����H�GpH+GxH�������G�����SH�������H�C(H9C8tH�����H�SpH+Sx1�H����~J�
� �����u$�{H�sx����9��~H�{�������ǃ�H�S`H�SxH�Sp[�f�H�G(H9G8�c���1�������l���LJ�H�W(H�W8H�W`H�WxH�Wpø�����f���AWAVAUATUSH��XH�t$dH�%(H�D$H1�H���.H�=�� ���GI�������;��H�G(H9G8t
H�$���H�$H�D$L�|$L�d$H�$H�l$ I��H��L)�H����H��@�@L�|$0HO�L�d$ �D$LS�BL�jH�T$8I׋z� �D$D��H�D$(H�l$��uA�~H�4$D����H�I9�~�I�~��H��L)�H���L��H+D$��H�t$����H�L$HdH3%(uH��X[]A\A]A^A_�H��������4��@AWAVAUATUSH��H�$H��dH�%(H��$1�H��I��I���5��H��8����H��I��H��aHD����A������AW�H��SA���1�AVL�{R�AU�c���H�� H��=O�Hc�M��t7L���?��1�H��$dH3%(u&H��[]A\A]A^A_����f�����?��ff.�@AT�~f�A��UH��SH��dH�%(H��$1�H�|$H��)$H���H�H��� ��xH��$dH3%(u?H��[]A\É�I��D��H�5�Y1��
��1�H�5�QH���i������������ff.�f�ATUSH��H�$H��H�$H��dH�%(H��$ 1���� �����?/H��H�����H������H���bH�ߋH����������!�%����t�¹�����D�H�WHD���@�H��H)��</��)�Hc�Hc�H�1�H���>��H���JL��$�H��L���}��H�����H�=�PL������������AH��1��2���Ń������uRH�=ۚ H9�t
H��t���H��1�����H��� H��$ dH34%(����H�� []A\�fD����T����������>���@�������4�����
�+����H��H�5X1�������r����r���DH�߹����������S���fD����������H��H�5�W1����������C����H��tv�����t]S��H��tC�uWH�C(H9C8tH������H�CpH�� H��H�H��H�@����H�Cp�P��H�����1�[�@���s��뢸�����ff.���H��������u��u1��f�S��H��tR�ubH�C(H9C8tH���0��H�CpH�e� H��H�H��H�@����H�Cp���H�{�:����������1�[��1�H�O@H9OPv����닸��������AWAVAUATUSH��H����H���|���I�֨�,���aH��H�t$H����>��L�{8I��H�C0L)�H9��>L�t$L+{(L��A�@L��L�f�I��M)�M����K�H��@���σ��LSL�Cp�N���I�H�D���I�0H��I�@H�KpM��~H�C(M�xI�H E1�I�@H�C8H���L�1H��M�L�I�H��H�KpH9��e���H���=�����thI��L��M)�M���U���I9�t
H��������tDL+t$H��L��[]A\A]A^A_�DM��@�@M)��(������������I�������H�t$H��L�����Hk8�f.���H�������������AVL��AUI��ATI��U��S���H���u\��H�߉���K��A�D$�{L��ǃLS�������H��u0�{L��[L���]A\A]A^�x����;������[H�����]A\A]A^�H���ff.���AWAVAUATUSH��H����H�������H����������D$����0��xI��H��I��H������Lc��\�CHc��T���
t��
u(��H�DLc���L�H����
t�
t�L�������~6Hc�A�T���
t��
u#��H�@��~A�L�H����
t�
t�E�<A�G=���I�|$PH�H�TI9T$Hs7H��I+t$@L������2%�)�)���������I�|$PL��H��Hc�A���o��Mt$PH��L��I�FI�D$PA�:I�|$P�M��M�D$PI�I�@I�D$PA�Ic�$0fE��T8H�Ѓ�A��$0�D$H��[]A\A]A^A_��D$������ff.����H���
H����B�=����������0���AUATUSHc�H��f��D�A��<
t<
uH���؅�u�H��[]A\A]�I��H�PH��H�DI9D$Hs3H��I+t$@L������2%�)�)��������tQI�|$PH��H��A��� ��I\$PH�CI�D$P�Ic�$0fE��T8H�Ѓ�A��$0H��1�[]A\A]ø�����S������D��AUATA��UH��SH���?dH�%(H�D$1��D$f����f��
t1�����f����H�L$dH3%(����H��[]A\A]ÐA�1Ҿ����Ã��tʼnǺ�1��Կ��H�L$A��ߺ�訿����u#D��H��������uD����������o���輾���߻����D� H���:��D�e�O����A��k���DH�}A�n葾���}�N����3�����H��t����������ff.����U��SH��dH�%(H��$�1�H��H�������u/��H���U��H��$�dH3%(uH�Ę[]���������褿��@��1�H�=�� t������AUATA�'USH����� ��'DN�uD�������� H���@�A�����H��H�>� H����H��tH�-�� �T���ڐ �9����ƉljÐ �*���U����D�k H�-� D�cE��u<�����D�����SuG�CH�,H�C���1�H��[]A\A]�@A�|$�C�{�˸�����ك�ÉS�ff.�@��H�u� H��t�8�ff.�f���H�U� �BH�B(H�R8H9�s��H��0H9�w�H��� H��t	���H��� H��t	����fD��H�}� H�H;� �wH��H�H;� �����ff.�@��ATUSH��H�� dH�%(H�D$1�H��� D�`豼��H�SX�;� ���H�kXH�-?� �b���H�g� ������ �� H�� H��� H��tH��� 1�1���H�-� �E��H��� H��t��{1��F���H� ��uH��� H��tA�D9 ~�&� �$� ��ut�;���u]H�LS�[H��H�$��O�D$�ʻ���H��߉D$觻����� 1�H�L$dH3%(u)H�� []A\�D�+��������������t���@�����H�E� SH���@H�Xt1����H�SXH�BH�B�{�۽���C����1�[���AWAVAUATUSH��HH�� H�|$H��$�L�edH�%(H��$81����H����L��DŽ$(H��$�艾��H��� H���u������cH����L��DŽ$(H��$��K���H�ċ H���7������H�h� H����������H��� H��
�������H�Њ H���������H�D$1�E1�L�d$ �ڋ L�|$ǀ��D$H�� H��t	H�=�� ��1�����I��L9�t71���������L���P���C��t�S�����D$fD�V�F���H�� �L��H�1���H�Hc;�ƺ���;M��L��H�D$H�D$�����������?)ѺH��1�H	T� 1��� �Ń�������������8��1�H�5�� �譸��1ҿH�5� 蚸��1ҿH�5l� 臸��1ҿH�5�� �t���1ҿ
H�5� �a���H��$8dH3%(���kH��H[]A\A]A^A_�fDH�ъ H��udD�C�S�K�
D9���H��� A�����H��tD��H�5�H1��V�������|����� M��� �������fDD�0D�CE��~�E��~����E���D軺��A��u���D$�t$9��/������������D�;�)��A��H�D$D�pA���uc袶���0���k������b���H�=Z?D�������j���f.�H�=*?�����������H�=�G�����������1�1����H�\$H�CX�������������=�{ �f����=�{ �D��H�ň H��t�x�ff.����H��� H��t��x�x����H��� H��t��~�x����H�e� H��t��~�x����H�E� H��t�x�ff.�����=ֈ �D���ƈ �D����� Ð����� �D��AUATUH��H�=�=SH��8dH�%(H��$(1��=���H��tH��� �H�=(� ��H�=�=����H���E1��
H��螹������H�=�=���H��t�
1�H���v������ H�=�=�ij��H��H��t�
1�H���M���I��A�ą��WE1�H�=�=萳��H��t�
1�H��������� H�=p=�j���H��tH�Ǻ
1�������_���H�=^=�C���H������ H�=U=�$���H��tH�Ǻ
1�谸�����)����Ķ������H�=0=��H����1��
H���x������OH�==�ò��H��tH�Ǻ
1��O������ش��H�==蜲��H��tH�Ǻ
1��(���������H�=�<�u���H��tH�Ǻ
1��������ʺ��H�=�<�N���H��tH�Ǻ
1��ڷ����蓲��H�=�<�'���H��t�=���H�=�<����H��t�
1�H��蝷����� ���_H�=�<���H��t�
1�H���o������ D��� ��� �r� E����H�=�<�ٶ��H�����=R� ��u	�P�E� �5;� ����H�=�<�c���H�����
1�H������� �…�t�� �����H�9w H�H����H�H����D�ք L��<L�
<L��<�C�
H��L���������t@H�ֹL����€���D	�t%H��tAH�H��t9�H��L���������u�H��fDH�JH��H�J�H��u�H�H��u�1ۉ�H��$(dH3%(��H��8[]A\A]�fD�� H��膲���D����<G�~A��<MED�A������s���D��H�H�� �_�����豲�����@H�= :�ܯ��H���������fDH�=|9輯��H����������fDA���f��@�[� �#���f�諳�����fD1�E��H������n���H��u �8������H�={:路��H��H�� H����H�5h:H���Ŷ��H��H� ����H�����-ǂ ������H�5D:H��萶��H�5G:H��I��H�|� �w���H�5::H���h���H�55:H��H�O� �R�����~H�5$:H���>���H�'� H�=H� H���~A�ԅ��L���H�=�A���H�=!� 褮��H�� �$���@H��H�$H�D$�b������DH��H��$���$��̯�����t
议��1҃8k�‰� ����H�=�8�ܭ��H��t1��
H���h�����~��� H�=�8貭��H��t1��
H���>�����~�X� H�=�8舭��H��H���iH�Ǻ�1�1�諵���Ã����H�T$�ƿ���������D$(?���H�5� ���ȱ��H�������W���H��� H��t�xc�@d�x��@�D�
�� E���9���D��� E���)����Z���f�H�=�7贬���n� H���K����]����
b� ��u
�T� '�J� �������8� '������� �)���f��Յ�tbH�� H���-�������DH��H�5V?�1�������S�����������A��Hc��~���L�%� H��H�� �a����s����Å�t��=� �������r ��u
�| �5� ������`���H��H�5�>�u���H��H�59>�1��U����������H��H�5A>�F���ff.����AVI��AUE��ATI��UH��SH��t��4H��u!�(fDH��H���t���H��L����G���H�]H��u�M��tE��L�����[1�]A\A]A^ÐIc�L��L���������H�#Eg����H�GH�H��ܺ�vT2H�G����AWAVA���AUI��ATUH�oSH��1�H���G�O�@�ƉWD���������W��?t;A�ĉ�D��H��H�|�@D)�A9�rhA��G�t4�L��L�����H��L���9���A��?vWE�f�A��I��I��I�H�޺@H��H��@�ܱ��H��L������L9�u�A��?D��L��H��H��[]A\A]A^A_鬱��I�������ATL�fUH��S�FH�����?��L�H�z���?)ƒ�w=��t1������9�r�L��H������f�CAD$AD$ I�D$0��71�)�����H�CH��L��H�CP�?����oH�{1�H��MH�H�CPH)��KX���H�[]A\�ff.�f�AWAVAUATUSH��dH�%(H��$�1�H��t^� �I���A�����f�Mcg I�oA�_@L��H����#���H���uM�(����8u
�=9x ��uٽ����H��$�dH3%(����
H�Ĩ[]A\A]A^A_�f���~�A��A������u���I���ALJ�f�8LS�|�x�r�@t�P�Hf�@�H�P�X���N������	M�g���A;G �ZA���9�~u���E�o)�H�Hc�I��H��L��D������H���u$�����8������5$w ��u�����������A��M�gA���9��I�D$,H�D$Hc�I�I���D�hA�����h(A9��}A�� �/Hc�I���H�4@H���5���H���A���I���I����h$A9��}A�� ��Hc�I���H�4@H�����H����A���I���I���H�l$�p(I���L��H�����������I���I���L��p$�������hM���Ic@���o9��gIcP���[9��SIcp���G9��?IcH���39��+I�H�H�H�H�I���H�T$I���Ic@ H)�I���H��H��I���H��H�H���I���H�I���IcHI���H�H��H�D$I9���E����1�D�L�4��t9�d�<B�9�ZH��H��u�IcP ���kI���H��H�H9�r*�RP9�!�P9�P9�H��H9��-�9�~�H�51�1�荮��H�5�0�1����w����>���f�H�� ��H��� ���I�GA�G  I�������P�Hf�@	f�@
�H�H�P�P�H�H�P�P�H�H�P�P�H�H�P�P�H�H�P�Pf�@f�@f�@�H�H#�P�P �H �H'�P#�P$�H$�H+�P'�P(f�@f�@!f�@%�H(�P+f�@)I������1��
fDI���HcȋL�4��t#f�BI���H�T�4�
�rf�B@�2�JH��H��u�M���IcP ����I���H��H�H9������pH��@�p��p�H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��H�H9�w�M���A�pI����b���Ic@I���H����0�Zv ALJ���t`�v 
�u A�������u 1������L��Hc�蟩��I��H������I�GA�o I����u���I���D�%�u D�-�u �B(A��A���1Ic�H�4II���L��I�
�9�H�qH�=�-����������I�J�D�B(�9�xH�qH�=�-���������XI�J���B(��$�A�D$I���KA�zH�L$�;M�bfo/u L�t$ L���AoL$AT$M�l$)�$�蘪��� L��L������H�L$�L��H����L��L�����H��$�I�D$H��$�I3L$H1�H	���D�$$D�l$E����D��D�l$�â��H�=dt I��H��������I��D���%t ���M���H�=t t"L��D��L������Ń����������P�|$�W��������E��t$A9u��H�t$��~��������D�������Ń�����5�s ���$A�?D�5�s ���t� ���A�����H�5e)L���
���H��tH�����H��s f�)�s �#���A��H�5f 1�����H��@�������H�5
+�1��9�������L�����H��������
1�H���o���I������H�5�2�1���H�53�1��ݨ��D�%�r ��r D��D$����H�=�r I��H��tZE���W����7����E1�1�1�1���ͤ����������H�=%3������H�5P*�1��`�������E��|$菦�������M���2����;�����|$�g��������E������1�H�5_*L���u������I�}臧���Ń������1�H�5!*L���K�����fD�=�q ������-�q ��q E���D$A�����I���F������H�5f)�1�膧��������H���H)���H�5(1�H��1��a�������1�H�5�)L�����������
����ܟ��1�H�5�1L�������A�#��L��H�
#3H�m �w������1�H�5^)L���a����ff.����AVAUATUSH��dH�%(H��$�1��D$H���H���ѡ������	�;1�L�l$L�d$L�t$H�k�l����rl �����{�ul�;�����L��L���D$�����C�����H��p H��t�@��H�dp H��t��{1�����f�|$���=�o u|H���4��tH��舴��H���0�����k ���d���1�H��$�dH3%(u}H�Ġ[]A\A]A^�D胜�����������������������{�H�5)b �,���H���f����ы{L���A�����;����۝��ff.���AWAVAUATUSH���D�=do dH�%(H��$�1�E���xH��� ���H�-�n H�����}����$o ;^a �DH�-5o H��t1��1���H�ED��j E���H��$L�|$PD�cA����:E1�A�f�D�
ej E����D��n E��tH��n H��t
�@f����L��H��1���H�Ic��W���D��H�D$PH�D$X����A���?)ѺH��H	��D9#��1�1�A�|$M��H��j D9#������H�5n H��t
�@D9#��5` A��D9���1�葳��������f������H��$�dH34%(���'	H���[]A\A]A^A_��K���L��$�H�����DŽ$hM�l$H��$�L��謞��H��$L��H��H�D$@菚�����AH����L��DŽ$hH��$��e���H��$�L��H��H�D$0�H������PH��$�L��H��H�D$8�#������+H��$`L��
H��H�D$(������H��$ L��H��H�D$H�ٙ��A�Dž���H�D$PE1�L�l$`H�D$H��$�H�D$H��$`H�D$f�D�%�k E����H�l H��t	H�=�g ��1��d���I��L9�t<1��ձ������L���5����E���D�uE���M��E1���V�&���H��g �L��H�1���H�Hc}襚���}L�D$L��H�D$PH�D$X�����������?)ѺH��1�H	T�`1�vg ���������������8�����H�t$(1ҿ
荘��������x������=�����������_����5k ��tH�6k H��t
�@f���,���D9#�
D������C�����H�k H��t�@��H��j H��t�D�c1�D���N����
Pf �����=j �����{�H�5�\ ���H����������H�Qj H��t�*H��j H�������B���(���@H�aj H��t�@��H�j H����������@蛖���8�B����-���DA��D9�����M�����=�e ������荟����������=fe �����H��i �
H��t��D��H��i H��t�
�A9����������H�ai H��tD��҉T$$D�E~:E��~5���7����T$$A��諙��A�����蜙��A��u������D�E�U�M�
D9�vH�i A�����H��tD�H�5'�1�覞������̞�������D$�g����0������������H�=� �G����T$���fD�}蠩���C�����1��m���H�|$I�����H�|$���H�T$H�t$1��`������6�����������1�EM��tA�M�gM�g�{E1��C����C����H�t$1ҿ�����������H�=$)�'������f��;�	���������>���fD�D$$�_����0���d������T$$�W���H�=�T$�7����T$����fDD�#A�����������fD�~g ���R���D�c E���B���H�Kg H���2����9�b �����{�H�5�Y 蠔��H�{�w������H�=�'�F������蜓��H�=�'�0莖��M������A����H������…��
H�{����H���Ƙ���lb ���������H�=��Ԛ��������������H�t$1ҿ脒������H��e �����f ���L�=�f �hf H�Ef �Gf H��e H��tH��W 1�1���L�=Gf A�G��H�f H��t��{1�蝦��D�-�a E��uH��e H��t!�E�9~�za �xe �����;���t�ؕ�������H�t$@1ҿL��$��ْ��H�t$01ҿ�Ȓ��H�t$H1ҿ跒��H�t$81ҿ覒��H�t$(1ҿ
蕒���kH�LSH��$���&��$�讒���L��$�舒���yd �e ���H�=�"�*���������%���諚���������,���H�=�%�����Q���H��d H��t*f�C1��C�D$�C���C�Ӗ���T$H�C(H�C ��d ����֒��fD���=�d ��d �ff.�@��H�E` ������f.�f�����fD����h H���ff.���H�V H���H+���H���HO��D��H������1��f���1��f���ATI��H��US��Hc��H���Hc�L��H���:���H�=3h H��H���ؔ��[�]A\�ff.���H�飕����H��H�=QU ����H���f���H��H�=1U �܏��Hc5�g ;5_ H�=�g |6�a���H�vg �����H�rg ��kg H���fD�����f����?��I�H�=�T ���H���H+��9�M�1���~+H��Hc�Hc5	g H5�f �ѐ����~�f H���f��ff.�@��H��H�=QT �̏�����tH�H��H�D��H���ff.���H��H�=T 茕��H��] H�����H��H�=�S 蜏��H��] H�����H��H�=�S ��������tH��] H��H�����SH��H�\$H�t$H���E���H���]���1�H���#���H��[�ff.�f���AWAVAUA��ATI��U��SH��H���<Q��~v<R��<Su"�H�=2%H���������@Mc�L��L��誕��Hc�H��I��蜕��H�=�e L��H���:���H���[]A\A]A^A_�fD<Pu��
H�=�$H�������u��ƀULc�u��H�=|$H��������t����?H���,���I��H���H��A��L)�A)�Mc�H��L��H�L$���	H�=1$H�$�K���H�$H�=�d H���x���H�L$L��H��踔���H�=$H�$����H�$H�=�d H���@���1�A�??L����I�L���y����H�=�#I���Ս��H�=^d L��H���������fD�
H�=p#H��������r����:�i������@A�L�%��Q���fDO�<4L��E1�����=�c �t1��@H�9Q H����=�c ����t�USH��;=[ ��H�=y_ �4���H��H��虑���Ń����H���v���H�����HcOc ��H���ݍ������E1�A���H��1�����H�c H�������裎��1�H��[]�f.�Hc������H��b H��u�H�=�"�{������@��b 1��H�=I"�T������=�����fD蛊���8�4���H�پH�!I��H�#P H�81�衒��H�������N���H�=�!�����܍����1���f���AU1�ATUH��S��H���V������������-b ��+b Hc�D�%�a �(���I�Ņ�t"D)�A�DI�D9�uD��������H��L��[]A\A]ÐD)�Hc5�a H��H5�a Hc��D����a ���H��L��[]A\A]�@H�}@��u&�����xU�-oa �aa )�9�O���T���賒���ؐD9�Hc5Fa L��DN�H5(a Ic��Ћ��D%)a �U���@H��A�[L��]A\A]�ff.��AWAVL�5�` AUATUSH���f�D9-�` ~N��}���D�-�` M�&�H�[ Hc=�` D��)�I��L�Hc�H��蚍��H��t�L)�D)��XHc�H��豍��I�ą�~Hc5s` H��H5Y` H������[` H��L��[]A\A]A^A_�f���H��1��a�����tH���#����H���fD����_ SH����_ ���2f����H������_ 9�_ }1������uٿ��f�H��[�ff.���AUATUH��SH��dH�%(H�D$1�����H��E1�I���G@H����I9�}HH������H��uj�� tUH�CJ��H��L��I��H�$�u���H��� u�H�CI9�|�H�L$dH3%(�uVH��[]A\A]�@H�C �f.�H���Ȏ��H���H�=��_���H��H��H�$�����t���@��1��f���USH��@��t����fDH�����t�H���H��u�H�t�H��H�_ H��@��uH��uNH���f���H�H�k�� t*H�pH�PH��tEH�;��H��H�[]H�D�f.�H��H�p����H�H��H�у�H��t��@H�=�H�T$H�4$裈��H�T$H�4$����SH������H��[�ff.���SH���s���H��H������[Ð��UH��SH��H��dH�%(H�D$1���uH�����tH�H�ƒ�H��tsH�����蒎���D$@��uyH�����tpH�E��H��ucH�}t\H�E H�t$�H�8�PH��H�����HD�H�L$dH3%(u_H��[]Ð�� u+H�S���y�����D$@��t��H������f�H�{�R���H�SH��u��7���������4���@SH��dH�%(H�D$1�H�|\ H�$H��W H��u%H� D�H���;���H��W H��t�H�=8\ H��H���(���H�D$dH3%(uH��[�譅��ff.�f���USH��H�=OI �*�������tyH�=�[ H��t�?���H��[ �����H��[ ��[ �y���9�[ uI1�H��[ ����H�-�H H�;H��H�u譋��H�uH�;H���~���H��R H��H��[]�D�:[ H��V H��u'H�
��H������H��V H��t�1�1�H�ƿ�����h���f���H9ER tH����ATUH��S���
���L� ����H�5�Z H�=�H�������L� H�IV H��u%L�%uD�L���{���H�$V H��t�H�=�Z H���H��[]A\�g������AWAVAUATUH��SH�����C���G�H��L�-�L�d��tf�H�������H��ubfD����H��I��H���5���I��� ��M�~M����I�FA�|�
tH��F H��H�0���H��L9�t[H�;@��t�H��u�fDH�=x����H���f.�H�����u5H��H��H��H�=��������L9�u�H���[]A\A]A^A_�fD��t��.���fDM�~H�����H���L���ȃ��I��� �0�����f.�H�F H��H�0�.����ff.����AVAUATUH��SH��dH�%(H�D$1�������I��H�6A���L�5y�H�H�������H��u4H�����A9�~NH��E H�0H��tH�����I�t�H��@��t�H��u�@�L��裁��H��H���h���A9��H�LE H�0H��u;H�L$dH3%(�uPH��[]A\A]A^ÐH���H��t��a����H�������fD�c���I��A�H��H�$�����I���f���AUATUSH��轂�������H�=dH�FW H�GW �EW �~��H��t8�
1�H��H������H�Ņ�~�MH���E���H�������-�N H�=�G~��H��H��tH��臀��H��H=��`�Xfof��R )�R H�=E1��}��H��t1��
H��1�艃����@��H�=�C 趄���q��H�=��|V �}��H����H�����������H�vC H�W�H�H��C H�H�kV H��Q H��u L�%C�L���#���H��Q H��t�L�%C H��I�<$�Ԅ��H�5�Q H�V H��u4L�-f.��L���ӆ��H��H��Q H��t�H��U 1�1�H�����H�=�U H��U 螄���H�=��
���H�=�I���~��H�=�U L��H���'����H�5�H�=��/���I�4$H�=��φ��1�H�F���H�5�H��H�-U 考������H�=U 1�H�(�H�5��<���H�=�T �H�Y���H�5�����H�=�T �H����H�5g���H�=�T �����H����H�5N�߂��H�=�T �����H����H�55���H�=�T �����H����H�5衂��H�=bT �H�~���H�5肂��H�=CT 1�H�B�H�5��f���H�='T 1�H�&�H�5��J���H�=T 1�H���H�5��.���H�=�S �����H���H�5�����H�=�S 1�H���H�5���H�=�S 1�H���H�5w�ׁ��H�=�S 1�H���H�5`軁��H�=|S 1�H���H�5H蟁��H�=`S 1�H��H�51胁��H�=DS 1�H���H�5�g���H�=(S 1�H���H�5�K���H�=S 1�H���H�5��/���H�=�R 1�H��H�5�����H�=�R �H�`�H�5���H�=�R �����H�����H�5��Հ��L�%�? H�=�R �H�{�L���c~��H�-�? H�
�? H�=�I H�P H��I H�JH�*H�ER H��? H�H�\? H��,���H�=-R L��H���~��H�
B? H�=cI H�P H�XI H�JH�*H�����$z��H�(�z��H��P���H��Q 1��B���H�5�Q H�=��}��H�3H�=���}����y��H�(H��[]A\A]�DH�P�H��H�=UM �~��H��wH�CM H�.XXXXXXH�(���H�t+��H�=Z�����u��b����H�=)Q 1�H���H�5s�l��H�=
Q 1�H�l�H�5m�P��H�=�P 1�H�0�H�5`�4������H�=��L����R����H�=���w��H���6����B���fD�mH���z��H���^����KH���z��H��t��
�-�G �G����kH���mz��H��u�-�G �*�����H��H���Anonymous mmap() failedlocalhost%02d:%02d:%02d [%s] [UID:%d][%d] %.*syesnosystem()%s, errno: %d (%s)
/dev/nulllibpthread.sopthread_atforkHTTP_[UID:%d][%d] %s:%s: %s
LSAPI: jail() failure./etc/Can't set signalsaccept() failedLSAPI_STDERR_LOGPHP_LSAPI_MAX_REQUESTSLSAPI_MAX_REQSLSAPI_KEEP_LISTENLSAPI_AVOID_FORKLSAPI_ACCEPT_NOTIFYLSAPI_SLOW_REQ_MSECSLSAPI_ALLOW_CORE_DUMPLSAPI_MAX_IDLEPHP_LSAPI_CHILDRENLSAPI_EXTRA_CHILDRENLSAPI_MAX_IDLE_CHILDRENLSAPI_PGRP_MAX_IDLELSAPI_MAX_PROCESS_TIMELSAPI_PPID_NO_CHECKLSAPI_MAX_BUSY_WORKERLSAPI_DUMP_DEBUG_INFOnobodyLSAPI_DEFAULT_UIDLSAPI_DEFAULT_GIDLSAPI_SECRETLSAPI_LVE_ENABLEliblve.so.0lve_is_availablelve_instance_initlve_destroylve_enterlve_leavejailPHP_LSAPI_PHPRC=packetLen < 0
packetLen > %d
Bad request header - ERROR#1
ParseRequest error
SUEXEC_AUTHSUEXEC_UGIDLSAPI: setgid()LSAPI: initgroups()LSAPI: setgroups()LSAPI: setuid()Bad request header - ERROR#2
lsapi_accept() errorPragma: no-cacheRetry-After: 60Content-Type: text/htmlDEBUGNOTICEWARNERRORCRITFATALAcceptAccept-CharsetAccept-EncodingAccept-LanguageAuthorizationConnectionContent-TypeContent-LengthCookieCookie2HostPragmaRefererUser-AgentCache-ControlIf-Modified-SinceIf-MatchIf-None-MatchIf-RangeIf-Unmodified-SinceKeep-AliveX-Forwarded-ForViaTransfer-EncodingHTTP_ACCEPTHTTP_ACCEPT_CHARSETHTTP_ACCEPT_ENCODINGHTTP_ACCEPT_LANGUAGEHTTP_AUTHORIZATIONHTTP_CONNECTIONCONTENT_TYPECONTENT_LENGTHHTTP_COOKIEHTTP_COOKIE2HTTP_HOSTHTTP_PRAGMAHTTP_REFERERHTTP_USER_AGENTHTTP_CACHE_CONTROLHTTP_IF_MODIFIED_SINCEHTTP_IF_MATCHHTTP_IF_NONE_MATCHHTTP_IF_RANGEHTTP_IF_UNMODIFIED_SINCEHTTP_KEEP_ALIVEHTTP_RANGEHTTP_X_FORWARDED_FORHTTP_VIAHTTP_TRANSFER_ENCODING%04d-%02d-%02d %02d:%02d:%02d.%06d Child process with pid: %d was killed by signal: %d, core dumped: %s
Possible runaway process, UID: %d, PPID: %d, PID: %d, reqCount: %d, process time: %ld, checkpoint time: %ld, start time: %ld
gdb --batch -ex "attach %d" -ex "set height 0" -ex "bt" >&2;PATH=$PATH:/usr/sbin lsof -p %d >&2Force killing runaway process PID: %d with SIGKILL
Killing runaway process PID: %d with SIGTERM
Children tracking is wrong: Cur Children: %d, count: %d, idle: %d, dying: %d
LSAPI: LVE jail(%d) result: %d, error: %s !
Invalid custom stderr log pathFailed to open custom stderr logCan't set signal handler for SIGCHILDReached max children process limit: %d, extra: %d, current: %d, busy: %d, please increase LSAPI_CHILDREN.
LSAPI: failed to open secret file: %s!
LSAPI: failed to check state of file: %s!
LSAPI: file permission check failure: %s
LSAPI: failed to read secret from secret file: %s
LSAPI: Unable to initialize LVERequest header does match total size, total: %d, real: %ld
LSAPI: missing SUEXEC_UGID env, use default user!
LSAPI: SUEXEC_AUTH authentication failed, use default user!
LSAPI: lve_enter() failure, reached resource limit.prctl: Failed to set dumpable, core dump may not be available!sigprocmask(SIG_BLOCK) to block SIGCHLDsigprocmask( SIG_SETMASK ) to restore SIGMASK in childfork() failed, please increase process limitsigprocmask( SIG_SETMASK ) to restore SIGMASKCache-Control: private, no-cache, no-store, must-revalidate, max-age=0PID<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>508 Resource Limit Is Reached</TITLE>
</HEAD><BODY>
<H1>Resource Limit Is Reached</H1>
The website is temporarily unable to service your request as it exceeded resource limit.
Please try again later.
<HR>
</BODY></HTML>






	


QUERY_STRINGREQUEST_URIPATH_INFOREQUEST_PATHSCRIPT_NAMEftruncate() failed. 
File mapping failed. 
Memory calloc error[...]RSTRING_PTRreplacesrandSTDERRreopennilLSAPI_MAX_BODYBUF_LENGTHLSAPI_TEMPFILEXXXXXXRACK_ROOTchdir()to_hashCGI/1.2eval_string_wrapLSAPIacceptaccept_new_connectionpostfork_childpostfork_parentprocessputcwriteprintprintfputs<<flushgetcgetsreadrewindeacheofeof?closebinmodeisattytty?syncsync=RACK_ENVGATEWAY_Irewindable_input.rbNTERFACE/tmp/lsapi.XXXXX;�| [���e��0Pp��0q��H@q��\Pq��p`q����q����q���r���`y��@�y��t`z����z���{����{���|��4�}���`~����~�����L���tp����@���4����0����p���X	�����	Њ���	���	��	����	����
����,
����@
����T
���h
`����
�����
 ����
��������H���\0����`�������`��t ��������������0���
0���x
���
 ����
����`���80����������(����0����P����������L���`p���t����� ����`��������(����<����P����d��x���� ����@����P����`����p������������D����@����0����������\�������������� ���4��H0��\@��pP���`���������������P�����$��D ��\@��tp�����������`��0����`�������������P�d����� ��0�$��H��t`����� �4zRx�$W���
FJw�?:*3$"D�a���
\�l��p�l����l��
L��l��sE�I�B �E(�A0�z
(A BBBIA
(D BBBA�m���m��@�l��YG�J�B �B(�A0�A8��0F(B DBb0Tt���B�F�C �G�
 AABK�tt��k(��t��GA�D�J n
AAA4��t��UA�G�K R
CAGL
JCG u���A�G�]
AJ $�u��t��
CKF�LH�v���B�B�E �A(�H0�H
(D BBBD�
(D BBBAP�$w���v�F�B �A(�D0�D
(A BBBBL(A BBBA�����$��w��aA�A�D XAAH�w���B�B�B �B(�A0�A8�D@N
8C0A(B BBBH$`lx��OA�f
QC
EH@��x��YB�B�B �A(�D0�J��
0A(A BBBFx��z���F�E�A �C(�G�
 
(A ABBDM�
I�
c�
A�
��
E�
M�
A�
k�
E�
E�
E�
E�
H�V�
HH}���F�B�B �B(�A0�A8�D``
8A0A(B BBBDl�x~��+B�B�B �B(�A0�D8�J�Y�H�P�C�	M�i
8A0A(B BBBEL�T�M�D�d8��6B�B�B �B(�A0�A8�DP�
8A0A(B BBBG
8J0H(G DBBK$l���7E�F�F IIO�(����4����0����,���4�(����F�A�A �G�>
 AABG �����E�O
D�
A@\���
TX���hT���Y|����JE�D�ԃ��S � ���]P�h
HXA�H�\���lF�B�B �B(�A0�A8�LP�
8A0A(B BBBH<����F�B�B �A(�A0��
(D BBBI\P���i`p����F�B�B �B(�A0�A8�DP~
8A0A(B BBBAk
8A0A(B BBBHL�h���$F�B�B �A(�A0�H��Q
D���
0A(A BBBHL$H���F�B�B �B(�A0�A8�G��
8A0A(B BBBFt���F�T���F������$�����n�C�X�J�L��lF�B�B �B(�A0�A8�D�A
8A0A(B BBBA`(	����B�B�B �B(�A0�A8�G� I� K� I� L� N� N� w
8A0A(B BBBI0�	�����B�M�D �G�L
 AABA<�	,���=B�A�A �G� L�@I�@U
 AABG$
,����T�WE�H�G� (
�����a�g
HS�HL
 ����F�B�B �B(�A0�A8�DPS
8D0A(B BBBFT�
�����b�I�E �D(�C0�P
�(F� B�B�B�MQ(H BBBA�����H�
����F�B�B �B(�A0�A8�DP�
8A0A(B BBBAT<����C�B�A �A(�G0`
(A ABBD�
(C ABBAJ����8�x���-F�B�D �D(�D@T
(A ABBB�l���(�x���lE�C�G�F
AAIL����!c�B�G �A(�D0�
(A ABBEX����D0����`����t����Z��10� ���pF�A�A �G@7
 AABF�\���@L�sL�����F�B�B �B(�A0�A8�G��
8A0A(B BBBG<
P���P
L���d
H���x
T����
`����
l����
x����
�����
�����
|���x���<t���	F�B�A �K(�G�
(A ABBG<XD����F�E�E �D(�D0�M
(C BBBB�����(H������F�B�H �E(�A0�E8�I@�
8A0A(B BBBE(�D����F�E�D ��ABH$���B�B�B �B(�A0�A8�G��
8A0A(B BBBJDp|����F�B�B �A(�A0�G�
0A(A BBBFL����
F�B�B �B(�A0�A8�G��
8A0A(B BBBA��������4����
H����\����+p�����������(�����BF�G�A �kFB���
���HU��gHQ
G <��ayd8���2HW
IIX��� HWp��� HW����-Hd����3E�D hAH����F�B�B �E(�D0�C8�GPm
8F0A(B BBBG4����o�A�D �
AAKp��P ��\D(��4F�D�A �D(�F0`
(D ABBBj
(D ABBEl(G DBBD����B�B�I �B(�A0�A8�D@�8D0A(B BBB����*HP
HI���UK�I8(����F�B�A �D(�D@�
(A ABBEd���(x����E�A�D0r
CAP�H��E�L�L��E�Y(�P��E�D�G0�
AABzRx�0�� 8X�� 8���A�D w
AA(\p���E�A�D �
DAF,�D���Z�A�D �r�A�B�H����tF�B�B �B(�A0�D8�D@�
8F0A(B BBBG@���7F�B�B �A(�D0�D@�
0A(A BBBB8H���SF�B�A �A(�D0�
(A ABBFGNU��T�T�!��Q���W�^�c�i�n�t�{������������������������
��-�6�D�M�a�G�l�|�������������������'�4�>�J�W�g�z���������������	����>
$��!�!���o`��
��	!��.h&p	���o���o�%���o�oP$���oD�!�>�>?? ?0?@?P?`?p?�?�?�?�?�?�?�?�?@@ @0@@@P@`@p@�@�@�@�@�@�@�@�@AA A0A@APA`ApA�A�A�A�A�A�A�A�ABB B0B@BPB`BpB�B�B�B�B�B�B�B�BCC C0C@CPC`CpC�C�C�C�C�C�C�C�CDD D0D@DPD`DpD�D�D�D�D�D�D�D�DEE E0E@EPE`EpE�E�E�E�E�E�E�E�EFF F0F@FPF`FpF�F�F�F�F�F�F�F�FGG G0G@GPG`GpG�G�G�G�G�G�G�G�GHH H0H@HPH`HpH�H�H�H�H�H�H�H�HII I0I@IPI`I,����LSLSLSLS������������������)�9�X!�!��GA$3a1�>1�GA$3p1113Tt�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA$3p1113��#�GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA$running gcc 8.5.0 20210514GA*GA*GA!
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GOW*�GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign
GA*FORTIFY�Tt�GA+GLIBCXX_ASSERTIONS
GA*FORTIFY����GA+GLIBCXX_ASSERTIONSlsapi.so-5.6-1.el8.x86_64.debugG)�E�7zXZ�ִF!t/��?3]?�E�h=��ڊ�2N�uI�=�'�n��_Cj�7��
E�kc�xUK�^I#A��!߱�Z�L}ހ��H�@�?�T���?�%��ٛ430�kUP|����m�$�1Mz�I�~F�/h��]s��'���Q�w���r͔p�ه��#�D�*��$Gu�%h5���a�ÿ�����w��(�7�]��_ ̎wz��%�#�p���t�tڨJ3�3�d-�XW=��}��O�^6� �AF�X
{��`�z�Et3E�7,=�ע��L���樵��*��{�K���҆��Ԛ�"��r;Z�|,���u9�� /��$48��;�Qv�^D^H��_�ȧ0G!�#���U�N+��%��(#�t�n.��6)[�+�����z�n�VYNg�/�"I8�2<}��㭌i���U��f�|�m�]����^	\�ט�r�^M@�b��ۙ\��@�iPؙѼ�^RG����l�O��&��ޤ�뚔,�K�fyv0���vW�sPv�5\���A?-j��J�O)�e%P/L�r�Y��D�_E�ڄ��/��<��,�G��L�^�9�¨Aп�����3�+��;���Ɖ��w}��l2�&W�"�Ԡ�Q��u�A��Ȅ�V��?�$H���8�f��u�iݖ���c*U�{{�N�,������Qe]��M-���ha��@���3p���#�ɠ^]�|+`�c��
���:k��n�kU���3S��	"�F�K*��(Qө�������{h[Fl���W�6�ϣ��L�.�A��������h�%��m�x�\fT@����5C�Ia�P]I0;%x��-K�J{��l\E��E���I'�񊻈��T��u��KX`��,��.���g逼b��\ɺ8*�� i̜P�ށL��ϕ^��R�*���Bco90��Is-��y�&j�ㅕ���۰�(���;������gn�����j������=et�C�߾f������.� �A)]�]E�RЌ�c,�'Ҵ�U6A`	�V��
l^�A��<�[e�aM<�j��g�Gئ�}�~M��	?C�������`�8B'����81��\���ds�A�ϰ][����sa�&_Q`�3�*�8q��q����o�m�,��I�`-E����yōta��|�3�LT��N^�2Na��܏_ �@i3I�w@;�mK<�R��~aU��x#������%e�����8M5���Jp�<a�\�?������i���UP��8:΁��������$<�m�:�+t��ok��E�YR{�<��cԁҷ�q�W�}���_�6/%iZ���rWa����9,N�ABE��R����U��9��m�m�,�'(�JY���&��hU�M��rI���=�C�
C��C2��In۴��b���~S[;���=+`���j`��͛�6/��j��$���H.�����3a��(�[����
'u�.���&T������H���v�/�f���e4�<�t��W�*�E`�QZ)ا��'��-���uGm6�r�o`x?Օ�ՓY���f0ǎ��ڽ��<�K����Dj���{L��p%�J��N��.�c�փpM�l*�XY��9�9��r��ж��§��L���H�Z�ֈ���թ�s���S4]@�U��ḧ�)LK0�]���Bǭ_p�%��I
��?	�a�
jZ���x��yc�j��S�y��Ӈ�O܈�ϽIl�:�^7	
�lǪ�x��Y�)�t�\����A
�ً�XsoNc	AO���Z_Չ������^���
u�Xz�D�OUïX����</4�DZ�g�YZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata88$���o``p(���0���8���oP$P$�E���o�%�%pTh&h&p^B�.�.�h�>�>c�>�>�
npIpI�
wTT#~}$�$�
�@�@�p �������������(�(� ��!���!���!� ��!���	!�	�!�	 ��!�� ��"a�d
D$ht�%(PK$"#[
3O8a�a�(gems/ruby-lsapi-5.6/ext/lsapi/lsapilib.cnu�[���//#define LSAPI_DEBUG
/*
Copyright (c) 2002-2018, Lite Speed Technologies Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of the Lite Speed Technologies Inc nor the
      names of its contributors may be used to endorse or promote
      products derived from this software without specific prior
      written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


#include <ctype.h>
#include <dlfcn.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <sys/stat.h>
#include <sched.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/resource.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <sys/wait.h>
#include <grp.h>
#include <pwd.h>
#include <time.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <sys/un.h>

#include "lsapilib.h"

#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
#include <sys/prctl.h>
#endif

#if defined(__FreeBSD__ ) || defined(__NetBSD__) || defined(__OpenBSD__) \
    || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
#include <sys/sysctl.h>
#endif

#include <inttypes.h>
#ifndef uint32
#define uint32 uint32_t
#endif

struct lsapi_MD5Context {
    uint32 buf[4];
    uint32 bits[2];
    unsigned char in[64];
};

void lsapi_MD5Init(struct lsapi_MD5Context *context);
void lsapi_MD5Update(struct lsapi_MD5Context *context, unsigned char const *buf,
           unsigned len);
void lsapi_MD5Final(unsigned char digest[16], struct lsapi_MD5Context *context);

/*
 * This is needed to make RSAREF happy on some MS-DOS compilers.
 */
typedef struct lsapi_MD5Context lsapi_MD5_CTX;


#define LSAPI_ST_REQ_HEADER     1
#define LSAPI_ST_REQ_BODY       2
#define LSAPI_ST_RESP_HEADER    4
#define LSAPI_ST_RESP_BODY      8
#define LSAPI_ST_BACKGROUND     16

#define LSAPI_RESP_BUF_SIZE     8192
#define LSAPI_INIT_RESP_HEADER_LEN 4096

enum
{
    LSAPI_STATE_IDLE,
    LSAPI_STATE_CONNECTED,
    LSAPI_STATE_ACCEPTING,
};

typedef struct lsapi_child_status
{
    int     m_pid;
    long    m_tmStart;

    volatile short   m_iKillSent;
    volatile char    m_inProcess;
    volatile char    m_state;
    volatile int     m_iReqCounter;

    volatile long    m_tmWaitBegin;
    volatile long    m_tmReqBegin;
    volatile long    m_tmLastCheckPoint;
}
lsapi_child_status;

static lsapi_child_status * s_worker_status = NULL;

static int g_inited = 0;
static int g_running = 1;
static int s_ppid;
static int s_restored_ppid = 0;
static int s_pid = 0;
static int s_slow_req_msecs = 0;
static int s_keep_listener = 1;
static int s_dump_debug_info = 0;
static int s_pid_dump_debug_info = 0;
static int s_req_processed = 0;
static int s_skip_write = 0;
static int (*pthread_atfork_func)(void (*prepare)(void), void (*parent)(void),
                                  void (*child)(void)) = NULL;

static int *s_busy_workers = NULL;
static int *s_accepting_workers = NULL;
static int *s_global_counter = &s_req_processed;
static int s_max_busy_workers = -1;
static char *s_stderr_log_path = NULL;
static int s_stderr_is_pipe = 0;
static int s_ignore_pid = -1;
static size_t s_total_pages = 1;
static size_t s_min_avail_pages = 256 * 1024;
static size_t *s_avail_pages = &s_total_pages;

LSAPI_Request g_req =
{ .m_fdListen = -1, .m_fd = -1 };

static char         s_secret[24];

static LSAPI_On_Timer_pf s_proc_group_timer_cb = NULL;

void Flush_RespBuf_r( LSAPI_Request * pReq );
static int lsapi_reopen_stderr(const char *p);

static const char *CGI_HEADERS[H_TRANSFER_ENCODING+1] =
{
    "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET",
    "HTTP_ACCEPT_ENCODING",
    "HTTP_ACCEPT_LANGUAGE", "HTTP_AUTHORIZATION",
    "HTTP_CONNECTION", "CONTENT_TYPE",
    "CONTENT_LENGTH", "HTTP_COOKIE", "HTTP_COOKIE2",
    "HTTP_HOST", "HTTP_PRAGMA",
    "HTTP_REFERER", "HTTP_USER_AGENT",
    "HTTP_CACHE_CONTROL",
    "HTTP_IF_MODIFIED_SINCE", "HTTP_IF_MATCH",
    "HTTP_IF_NONE_MATCH",
    "HTTP_IF_RANGE",
    "HTTP_IF_UNMODIFIED_SINCE",
    "HTTP_KEEP_ALIVE",
    "HTTP_RANGE",
    "HTTP_X_FORWARDED_FOR",
    "HTTP_VIA",
    "HTTP_TRANSFER_ENCODING"
};

static int CGI_HEADER_LEN[H_TRANSFER_ENCODING+1] =
{    11, 19, 20, 20, 18, 15, 12, 14, 11, 12, 9, 11, 12, 15, 18,
     22, 13, 18, 13, 24, 15, 10, 20, 8, 22 };


static const char *HTTP_HEADERS[H_TRANSFER_ENCODING+1] =
{
    "Accept", "Accept-Charset",
    "Accept-Encoding",
    "Accept-Language", "Authorization",
    "Connection", "Content-Type",
    "Content-Length", "Cookie", "Cookie2",
    "Host", "Pragma",
    "Referer", "User-Agent",
    "Cache-Control",
    "If-Modified-Since", "If-Match",
    "If-None-Match",
    "If-Range",
    "If-Unmodified-Since",
    "Keep-Alive",
    "Range",
    "X-Forwarded-For",
    "Via",
    "Transfer-Encoding"
};

static int HTTP_HEADER_LEN[H_TRANSFER_ENCODING+1] =
{   6, 14, 15, 15, 13, 10, 12, 14, 6, 7, 4, 6, 7, 10, //user-agent
    13,17, 8, 13, 8, 19, 10, 5, 15, 3, 17
};


static const char *s_log_level_names[8] =
{
    "", "DEBUG","INFO", "NOTICE", "WARN", "ERROR", "CRIT", "FATAL"
};


void LSAPI_Log(int flag, const char * fmt, ...)
{
    char buf[1024];
    char *p = buf;
    if ((flag & LSAPI_LOG_TIMESTAMP_BITS)
        && !(s_stderr_is_pipe))
    {
        struct timeval  tv;
        struct tm       tm;
        gettimeofday(&tv, NULL);
        localtime_r(&tv.tv_sec, &tm);
        if (flag & LSAPI_LOG_TIMESTAMP_FULL)
        {
            p += snprintf(p, 1024, "%04d-%02d-%02d %02d:%02d:%02d.%06d ",
                tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
                tm.tm_hour, tm.tm_min, tm.tm_sec, (int)tv.tv_usec);
        }
        else if (flag & LSAPI_LOG_TIMESTAMP_HMS)
        {
            p += snprintf(p, 1024, "%02d:%02d:%02d ",
                tm.tm_hour, tm.tm_min, tm.tm_sec);
        }
    }

    int level = flag & LSAPI_LOG_LEVEL_BITS;
    if (level && level <= LSAPI_LOG_FLAG_FATAL)
    {
        p += snprintf(p, 100, "[%s] ", s_log_level_names[level]);
    }

    if (flag & LSAPI_LOG_PID)
    {
        p += snprintf(p, 100, "[UID:%d][%d] ", getuid(), s_pid);
    }

    if (p > buf)
        fprintf(stderr, "%.*s", (int)(p - buf), buf);
    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
}

#ifdef LSAPI_DEBUG

#define DBGLOG_FLAG (LSAPI_LOG_TIMESTAMP_FULL|LSAPI_LOG_FLAG_DEBUG|LSAPI_LOG_PID)
#define lsapi_dbg(...)   LSAPI_Log(DBGLOG_FLAG, __VA_ARGS__)

#else

#define lsapi_dbg(...)

#endif

#define lsapi_log(...)  LSAPI_Log(LSAPI_LOG_TIMESTAMP_FULL|LSAPI_LOG_PID, __VA_ARGS__)


void lsapi_perror(const char * pMessage, int err_no)
{
    lsapi_log("%s, errno: %d (%s)\n", pMessage, err_no, strerror(err_no));
}


static int lsapi_parent_dead()
{
    // Return non-zero if the parent is dead.  0 if still alive.
    if (!s_ppid) {
        // not checking, so not dead
        return(0);
    }
    if (s_restored_ppid) {
        if (kill(s_restored_ppid,0) == -1) {
            if (errno == EPERM) {
                return(0); // no permission, but it's still there.
            }
            return(1); // Dead
        }
        return(0); // it worked, so it's not dead
    }
    return(s_ppid != getppid());
}


static void lsapi_sigpipe( int sig )
{
}


static void lsapi_siguser1( int sig )
{
    g_running = 0;
}

#ifndef sighandler_t
typedef void (*sighandler_t)(int);
#endif

static void lsapi_signal(int signo, sighandler_t handler)
{
    struct sigaction sa;

    sigaction(signo, NULL, &sa);

    if (sa.sa_handler == SIG_DFL)
    {
        sigemptyset(&sa.sa_mask);
        sa.sa_flags = 0;
        sa.sa_handler = handler;
        sigaction(signo, &sa, NULL);
    }
}


static int s_enable_core_dump = 0;
static void lsapi_enable_core_dump(void)
{
#if defined(__FreeBSD__ ) || defined(__NetBSD__) || defined(__OpenBSD__) \
    || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
    int  mib[2];
    size_t len;

#if !defined(__OpenBSD__)
    len = 2;
    if ( sysctlnametomib("kern.sugid_coredump", mib, &len) == 0 )
    {
        len = sizeof(s_enable_core_dump);
        if (sysctl(mib, 2, NULL, 0, &s_enable_core_dump, len) == -1)
            perror( "sysctl: Failed to set 'kern.sugid_coredump', "
                    "core dump may not be available!");
    }
#else
    int set = 3;
    len = sizeof(set);
    mib[0] = CTL_KERN;
    mib[1] = KERN_NOSUIDCOREDUMP;
    if (sysctl(mib, 2, NULL, 0, &set, len) == 0) {
        s_enable_core_dump = 1;
    }
#endif


#endif

#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
    if (prctl(PR_SET_DUMPABLE, s_enable_core_dump,0,0,0) == -1)
        perror( "prctl: Failed to set dumpable, "
                    "core dump may not be available!");
#endif
}


static inline void lsapi_buildPacketHeader( struct lsapi_packet_header * pHeader,
                                char type, int len )
{
    pHeader->m_versionB0 = LSAPI_VERSION_B0;  /* LSAPI protocol version */
    pHeader->m_versionB1 = LSAPI_VERSION_B1;
    pHeader->m_type      = type;
    pHeader->m_flag      = LSAPI_ENDIAN;
    pHeader->m_packetLen.m_iLen = len;
}


static  int lsapi_set_nblock( int fd, int nonblock )
{
    int val = fcntl( fd, F_GETFL, 0 );
    if ( nonblock )
    {
        if (!( val & O_NONBLOCK ))
        {
            return fcntl( fd, F_SETFL, val | O_NONBLOCK );
        }
    }
    else
    {
        if ( val & O_NONBLOCK )
        {
            return fcntl( fd, F_SETFL, val &(~O_NONBLOCK) );
        }
    }
    return 0;
}


static int lsapi_close( int fd )
{
    int ret;
    while( 1 )
    {
        ret = close( fd );
        if (( ret == -1 )&&( errno == EINTR )&&(g_running))
            continue;
        return ret;
    }
}


static void lsapi_close_connection(LSAPI_Request *pReq)
{
    if (pReq->m_fd == -1)
        return;
    lsapi_close(pReq->m_fd);
    pReq->m_fd = -1;
    if (s_busy_workers)
        __atomic_fetch_sub(s_busy_workers, 1, __ATOMIC_SEQ_CST);
    if (s_worker_status)
        __atomic_store_n(&s_worker_status->m_state, LSAPI_STATE_IDLE,
                         __ATOMIC_SEQ_CST);
}


static inline ssize_t lsapi_read( int fd, void * pBuf, size_t len )
{
    ssize_t ret;
    while( 1 )
    {
        ret = read( fd, (char *)pBuf, len );
        if (( ret == -1 )&&( errno == EINTR )&&(g_running))
            continue;
        return ret;
    }
}


/*
static int lsapi_write( int fd, const void * pBuf, int len )
{
   int ret;
   const char * pCur;
   const char * pEnd;
   if ( len == 0 )
       return 0;
   pCur = (const char *)pBuf;
   pEnd = pCur + len;
   while( g_running && (pCur < pEnd) )
   {
       ret = write( fd, pCur, pEnd - pCur );
       if ( ret >= 0)
           pCur += ret;
       else if (( ret == -1 )&&( errno != EINTR ))
           return ret;
   }
   return pCur - (const char *)pBuf;
}
*/


static int lsapi_writev( int fd, struct iovec ** pVec, int count, int totalLen )
{
    int ret;
    int left = totalLen;
    int n = count;

    if (s_skip_write)
        return totalLen;

    while(( left > 0 )&&g_running )
    {
        ret = writev( fd, *pVec, n );
        if ( ret > 0 )
        {
            left -= ret;
            if (( left <= 0)||( !g_running ))
                return totalLen - left;
            while( ret > 0 )
            {
                if ( (*pVec)->iov_len <= (unsigned int )ret )
                {
                    ret -= (*pVec)->iov_len;
                    ++(*pVec);
                }
                else
                {
                    (*pVec)->iov_base = (char *)(*pVec)->iov_base + ret;
                    (*pVec)->iov_len -= ret;
                    break;
                }
            }
        }
        else if ( ret == -1 )
        {
            if ( errno == EAGAIN )
            {
                if ( totalLen - left > 0 )
                    return totalLen - left;
                else
                    return -1;
            }
            else if ( errno != EINTR )
                return ret;
        }
    }
    return totalLen - left;
}


/*
static int getTotalLen( struct iovec * pVec, int count )
{
   struct iovec * pEnd = pVec + count;
   int total = 0;
   while( pVec < pEnd )
   {
       total += pVec->iov_len;
       ++pVec;
   }
   return total;
}
*/


static inline int allocateBuf( LSAPI_Request * pReq, int size )
{
    char * pBuf = (char *)realloc( pReq->m_pReqBuf, size );
    if ( pBuf )
    {
        pReq->m_pReqBuf = pBuf;
        pReq->m_reqBufSize = size;
        pReq->m_pHeader = (struct lsapi_req_header *)pReq->m_pReqBuf;
        return 0;
    }
    return -1;
}


static int allocateIovec( LSAPI_Request * pReq, int n )
{
    struct iovec * p = (struct iovec *)realloc(
                pReq->m_pIovec, sizeof(struct iovec) * n );
    if ( !p )
        return -1;
    pReq->m_pIovecToWrite = p + ( pReq->m_pIovecToWrite - pReq->m_pIovec );
    pReq->m_pIovecCur = p + ( pReq->m_pIovecCur - pReq->m_pIovec );
    pReq->m_pIovec = p;
    pReq->m_pIovecEnd = p + n;
    return 0;
}


static int allocateRespHeaderBuf( LSAPI_Request * pReq, int size )
{
    char * p = (char *)realloc( pReq->m_pRespHeaderBuf, size );
    if ( !p )
        return -1;
    pReq->m_pRespHeaderBufPos   = p + ( pReq->m_pRespHeaderBufPos - pReq->m_pRespHeaderBuf );
    pReq->m_pRespHeaderBuf      = p;
    pReq->m_pRespHeaderBufEnd   = p + size;
    return 0;
}


static inline int verifyHeader( struct lsapi_packet_header * pHeader, char pktType )
{
    if (( LSAPI_VERSION_B0 != pHeader->m_versionB0 )||
        ( LSAPI_VERSION_B1 != pHeader->m_versionB1 )||
        ( pktType != pHeader->m_type ))
        return -1;
    if ( LSAPI_ENDIAN != (pHeader->m_flag & LSAPI_ENDIAN_BIT ))
    {
        register char b;
        b = pHeader->m_packetLen.m_bytes[0];
        pHeader->m_packetLen.m_bytes[0] = pHeader->m_packetLen.m_bytes[3];
        pHeader->m_packetLen.m_bytes[3] = b;
        b = pHeader->m_packetLen.m_bytes[1];
        pHeader->m_packetLen.m_bytes[1] = pHeader->m_packetLen.m_bytes[2];
        pHeader->m_packetLen.m_bytes[2] = b;
    }
    return pHeader->m_packetLen.m_iLen;
}


static int allocateEnvList( struct LSAPI_key_value_pair ** pEnvList,
                        int *curSize, int newSize )
{
    struct LSAPI_key_value_pair * pBuf;
    if ( *curSize >= newSize )
        return 0;
    if ( newSize > 8192 )
        return -1;
    pBuf = (struct LSAPI_key_value_pair *)realloc( *pEnvList, newSize *
                    sizeof(struct LSAPI_key_value_pair) );
    if ( pBuf )
    {
        *pEnvList = pBuf;
        *curSize  = newSize;
        return 0;
    }
    else
        return -1;

}


static inline int isPipe( int fd )
{
    char        achPeer[128];
    socklen_t   len = 128;
    if (( getpeername( fd, (struct sockaddr *)achPeer, &len ) != 0 )&&
        ( errno == ENOTCONN ))
        return 0;
    else
        return 1;
}


static int parseEnv( struct LSAPI_key_value_pair * pEnvList, int count,
            char **pBegin, char * pEnd )
{
    struct LSAPI_key_value_pair * pEnvEnd;
        int keyLen = 0, valLen = 0;
    if ( count > 8192 )
        return -1;
    pEnvEnd = pEnvList + count;
    while( pEnvList != pEnvEnd )
    {
        if ( pEnd - *pBegin < 4 )
            return -1;
        keyLen = *((unsigned char *)((*pBegin)++));
        keyLen = (keyLen << 8) + *((unsigned char *)((*pBegin)++));
        valLen = *((unsigned char *)((*pBegin)++));
        valLen = (valLen << 8) + *((unsigned char *)((*pBegin)++));
        if ( *pBegin + keyLen + valLen > pEnd )
            return -1;
        if (( !keyLen )||( !valLen ))
            return -1;

        pEnvList->pKey = *pBegin;
        *pBegin += keyLen;
        pEnvList->pValue = *pBegin;
        *pBegin += valLen;

        pEnvList->keyLen = keyLen - 1;
        pEnvList->valLen = valLen - 1;
        ++pEnvList;
    }
    if ( memcmp( *pBegin, "\0\0\0\0", 4 ) != 0 )
        return -1;
    *pBegin += 4;
    return 0;
}


static inline void swapIntEndian( int * pInteger )
{
    char * p = (char *)pInteger;
    register char b;
    b = p[0];
    p[0] = p[3];
    p[3] = b;
    b = p[1];
    p[1] = p[2];
    p[2] = b;

}


static inline void fixEndian( LSAPI_Request * pReq )
{
    struct lsapi_req_header *p= pReq->m_pHeader;
    swapIntEndian( &p->m_httpHeaderLen );
    swapIntEndian( &p->m_reqBodyLen );
    swapIntEndian( &p->m_scriptFileOff );
    swapIntEndian( &p->m_scriptNameOff );
    swapIntEndian( &p->m_queryStringOff );
    swapIntEndian( &p->m_requestMethodOff );
    swapIntEndian( &p->m_cntUnknownHeaders );
    swapIntEndian( &p->m_cntEnv );
    swapIntEndian( &p->m_cntSpecialEnv );
}


static void fixHeaderIndexEndian( LSAPI_Request * pReq )
{
    int i;
    for( i = 0; i < H_TRANSFER_ENCODING; ++i )
    {
        if ( pReq->m_pHeaderIndex->m_headerOff[i] )
        {
            register char b;
            char * p = (char *)(&pReq->m_pHeaderIndex->m_headerLen[i]);
            b = p[0];
            p[0] = p[1];
            p[1] = b;
            swapIntEndian( &pReq->m_pHeaderIndex->m_headerOff[i] );
        }
    }
    if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 )
    {
        struct lsapi_header_offset * pCur, *pEnd;
        pCur = pReq->m_pUnknownHeader;
        pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders;
        while( pCur < pEnd )
        {
            swapIntEndian( &pCur->nameOff );
            swapIntEndian( &pCur->nameLen );
            swapIntEndian( &pCur->valueOff );
            swapIntEndian( &pCur->valueLen );
            ++pCur;
        }
    }
}


static int validateHeaders( LSAPI_Request * pReq )
{
    int totalLen = pReq->m_pHeader->m_httpHeaderLen;
    int i;
    for(i = 0; i < H_TRANSFER_ENCODING; ++i)
    {
        if ( pReq->m_pHeaderIndex->m_headerOff[i] )
        {
            if (pReq->m_pHeaderIndex->m_headerOff[i] > totalLen
                || pReq->m_pHeaderIndex->m_headerLen[i]
                    + pReq->m_pHeaderIndex->m_headerOff[i] > totalLen)
                return -1;
        }
    }
    if (pReq->m_pHeader->m_cntUnknownHeaders > 0)
    {
        struct lsapi_header_offset * pCur, *pEnd;
        pCur = pReq->m_pUnknownHeader;
        pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders;
        while( pCur < pEnd )
        {
            if (pCur->nameOff > totalLen
                || pCur->nameOff + pCur->nameLen > totalLen
                || pCur->valueOff > totalLen
                || pCur->valueOff + pCur->valueLen > totalLen)
                return -1;
            ++pCur;
        }
    }
    return 0;
}


static uid_t s_uid = 0;
static uid_t s_defaultUid;  //web server need set this
static gid_t s_defaultGid;

#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)

#define LSAPI_LVE_DISABLED  0
#define LSAPI_LVE_ENABLED   1
#define LSAPI_CAGEFS_ENABLED 2
#define LSAPI_CAGEFS_NO_SUEXEC 3
struct liblve;
static int s_enable_lve = LSAPI_LVE_DISABLED;
static struct liblve * s_lve = NULL;

static void *s_liblve;
static int (*fp_lve_is_available)(void) = NULL;
static int (*fp_lve_instance_init)(struct liblve *) = NULL;
static int (*fp_lve_destroy)(struct liblve *) = NULL;
static int (*fp_lve_enter)(struct liblve *, uint32_t, int32_t, int32_t, uint32_t *) = NULL;
static int (*fp_lve_leave)(struct liblve *, uint32_t *) = NULL;
static int (*fp_lve_jail)( struct passwd *, char *) = NULL;
static int lsapi_load_lve_lib(void)
{
    s_liblve = dlopen("liblve.so.0", RTLD_NOW | RTLD_GLOBAL);
    if (s_liblve)
    {
        fp_lve_is_available = dlsym(s_liblve, "lve_is_available");
        if (dlerror() == NULL)
        {
            if ( !(*fp_lve_is_available)() )
            {
                int uid = getuid();
                if ( uid )
                {
                    if (setreuid( s_uid, uid )) {};
                    if ( !(*fp_lve_is_available)() )
                        s_enable_lve = 0;
                    if (setreuid( uid, s_uid )) {};
                }
            }
        }
    }
    else
    {
        s_enable_lve = LSAPI_LVE_DISABLED;
    }
    return (s_liblve)? 0 : -1;
}


static int init_lve_ex(void)
{
    int rc;
    if ( !s_liblve )
        return -1;
    fp_lve_instance_init = dlsym(s_liblve, "lve_instance_init");
    fp_lve_destroy = dlsym(s_liblve, "lve_destroy");
    fp_lve_enter = dlsym(s_liblve, "lve_enter");
    fp_lve_leave = dlsym(s_liblve, "lve_leave");
    if ( s_enable_lve >= LSAPI_CAGEFS_ENABLED )
        fp_lve_jail = dlsym(s_liblve, "jail" );

    if ( s_lve == NULL )
    {
        rc = (*fp_lve_instance_init)(NULL);
        s_lve = malloc(rc);
    }
    rc = (*fp_lve_instance_init)(s_lve);
    if (rc != 0)
    {
        perror( "LSAPI: Unable to initialize LVE" );
        free( s_lve );
        s_lve = NULL;
        return -1;
    }
    return 0;

}

#endif



static int readSecret( const char * pSecretFile )
{
    struct stat st;
    int fd = open( pSecretFile, O_RDONLY , 0600 );
    if ( fd == -1 )
    {
        lsapi_log("LSAPI: failed to open secret file: %s!\n", pSecretFile );
        return -1;
    }
    if ( fstat( fd, &st ) == -1 )
    {
        lsapi_log("LSAPI: failed to check state of file: %s!\n", pSecretFile );
        close( fd );
        return -1;
    }
/*
    if ( st.st_uid != s_uid )
    {
        lsapi_log("LSAPI: file owner check failure: %s!\n", pSecretFile );
        close( fd );
        return -1;
    }
*/
    if ( st.st_mode & 0077 )
    {
        lsapi_log("LSAPI: file permission check failure: %s\n", pSecretFile );
        close( fd );
        return -1;
    }
    if ( read( fd, s_secret, 16 ) < 16 )
    {
        lsapi_log("LSAPI: failed to read secret from secret file: %s\n", pSecretFile );
        close( fd );
        return -1;
    }
    close( fd );
    return 0;
}


int LSAPI_is_suEXEC_Daemon(void)
{
    if (( !s_uid )&&( s_secret[0] ))
        return 1;
    else
        return 0;
}


static int LSAPI_perror_r( LSAPI_Request * pReq, const char * pErr1, const char *pErr2 )
{
    char achError[4096];
    int n = snprintf(achError, sizeof(achError), "[UID:%d][%d] %s:%s: %s\n",
                     getuid(), getpid(),
                     pErr1, (pErr2)?pErr2:"", strerror(errno));
    if (n > (int)sizeof(achError))
        n = sizeof(achError);
    if ( pReq )
        LSAPI_Write_Stderr_r( pReq, achError, n );
    else
        if (write( STDERR_FILENO, achError, n )) {};
    return 0;
}


#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
static int lsapi_lve_error( LSAPI_Request * pReq )
{
    static const char * headers[] =
    {
        "Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0",
        "Pragma: no-cache",
        "Retry-After: 60",
        "Content-Type: text/html",
        NULL
    };
    static const char achBody[] =
        "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n"
        "<HTML><HEAD>\n<TITLE>508 Resource Limit Is Reached</TITLE>\n"
        "</HEAD><BODY>\n" "<H1>Resource Limit Is Reached</H1>\n"
        "The website is temporarily unable to service your request as it exceeded resource limit.\n"
        "Please try again later.\n"
        "<HR>\n"
        "</BODY></HTML>\n";

    LSAPI_ErrResponse_r( pReq, 508, headers, achBody, sizeof( achBody ) - 1 );
    return 0;
}

static int lsapi_enterLVE( LSAPI_Request * pReq, uid_t uid )
{
    if ( s_lve && uid ) //root user should not do that
    {
        uint32_t cookie;
        int ret = -1;
        ret = (*fp_lve_enter)(s_lve, uid, -1, -1, &cookie);
        if ( ret < 0 )
        {
            //lsapi_log("enter LVE (%d) : result: %d !\n", uid, ret );
            LSAPI_perror_r(pReq, "LSAPI: lve_enter() failure, reached resource limit.", NULL );
            lsapi_lve_error( pReq );
            return -1;
        }
    }

    return 0;
}

static int lsapi_jailLVE( LSAPI_Request * pReq, uid_t uid, struct passwd * pw )
{
    int ret = 0;
    char  error_msg[1024] = "";
    ret = (*fp_lve_jail)( pw, error_msg );
    if ( ret < 0 )
    {
        lsapi_log("LSAPI: LVE jail(%d) result: %d, error: %s !\n",
                  uid, ret, error_msg );
        LSAPI_perror_r( pReq, "LSAPI: jail() failure.", NULL );
        return -1;
    }
    return ret;
}


static int lsapi_initLVE(void)
{
    const char * pEnv;
    if ( (pEnv = getenv( "LSAPI_LVE_ENABLE" ))!= NULL )
    {
        s_enable_lve = atol( pEnv );
        pEnv = NULL;
    }
    else if ( (pEnv = getenv( "LVE_ENABLE" ))!= NULL )
    {
        s_enable_lve = atol( pEnv );
        pEnv = NULL;
    }
    if ( s_enable_lve && !s_uid )
    {
        lsapi_load_lve_lib();
        if ( s_enable_lve )
        {
            return init_lve_ex();
        }

    }
    return 0;
}
#endif


static int setUID_LVE(LSAPI_Request * pReq, uid_t uid, gid_t gid, const char * pChroot)
{
    int rv;
    struct passwd * pw;
    pw = getpwuid( uid );
#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
    if ( s_lve )
    {
        if( lsapi_enterLVE( pReq, uid ) == -1 )
            return -1;
        if ( pw && fp_lve_jail)
        {
            rv = lsapi_jailLVE( pReq, uid, pw );
            if ( rv == -1 )
                return -1;
            if (( rv == 1 )&&(s_enable_lve == LSAPI_CAGEFS_NO_SUEXEC ))    //this mode only use cageFS, does not use suEXEC
            {
                uid = s_defaultUid;
                gid = s_defaultGid;
                pw = getpwuid( uid );
            }
        }
    }
#endif
    //if ( !uid || !gid )  //do not allow root
    //{
    //    return -1;
    //}

#if defined(__FreeBSD__ ) || defined(__NetBSD__) || defined(__OpenBSD__) \
    || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
    if ( s_enable_core_dump )
        lsapi_enable_core_dump();
#endif

    rv = setgid(gid);
    if (rv == -1)
    {
        LSAPI_perror_r(pReq, "LSAPI: setgid()", NULL);
        return -1;
    }
    if ( pw && (pw->pw_gid == gid ))
    {
        rv = initgroups( pw->pw_name, gid );
        if (rv == -1)
        {
            LSAPI_perror_r(pReq, "LSAPI: initgroups()", NULL);
            return -1;
        }
    }
    else
    {
        rv = setgroups(1, &gid);
        if (rv == -1)
        {
            LSAPI_perror_r(pReq, "LSAPI: setgroups()", NULL);
        }
    }
    if ( pChroot )
    {
        rv = chroot( pChroot );
        if ( rv == -1 )
        {
            LSAPI_perror_r(pReq, "LSAPI: chroot()", NULL);
            return -1;
        }
    }
    rv = setuid(uid);
    if (rv == -1)
    {
        LSAPI_perror_r(pReq, "LSAPI: setuid()", NULL);
        return -1;
    }
#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
    if ( s_enable_core_dump )
        lsapi_enable_core_dump();
#endif
    return 0;
}

static int lsapi_suexec_auth( LSAPI_Request *pReq,
            char * pAuth, int len, char * pUgid, int ugidLen )
{
    lsapi_MD5_CTX md5ctx;
    unsigned char achMD5[16];
    if ( len < 32 )
        return -1;
    memmove( achMD5, pAuth + 16, 16 );
    memmove( pAuth + 16, s_secret, 16 );
    lsapi_MD5Init( &md5ctx );
    lsapi_MD5Update( &md5ctx, (unsigned char *)pAuth, 32 );
    lsapi_MD5Update( &md5ctx, (unsigned char *)pUgid, 8 );
    lsapi_MD5Final( (unsigned char *)pAuth + 16, &md5ctx);
    if ( memcmp( achMD5, pAuth + 16, 16 ) == 0 )
        return 0;
    return 1;
}


static int lsapi_changeUGid( LSAPI_Request * pReq )
{
    int uid = s_defaultUid;
    int gid = s_defaultGid;
    const char *pStderrLog;
    const char *pChroot = NULL;
    struct LSAPI_key_value_pair * pEnv;
    struct LSAPI_key_value_pair * pAuth;
    int i;
    if ( s_uid )
        return 0;
    //with special ID  0x00
    //authenticate the suEXEC request;
    //first one should be MD5( nonce + lscgid secret )
    //remember to clear the secret after verification
    //it should be set at the end of special env
    i = pReq->m_pHeader->m_cntSpecialEnv - 1;
    if ( i >= 0 )
    {
        pEnv = pReq->m_pSpecialEnvList + i;
        if (( *pEnv->pKey == '\000' )&&
            ( strcmp( pEnv->pKey+1, "SUEXEC_AUTH" ) == 0 ))
        {
            --pReq->m_pHeader->m_cntSpecialEnv;
            pAuth = pEnv--;
            if (( *pEnv->pKey == '\000' )&&
                ( strcmp( pEnv->pKey+1, "SUEXEC_UGID" ) == 0 ))
            {
                --pReq->m_pHeader->m_cntSpecialEnv;
                uid = *(uint32_t *)pEnv->pValue;
                gid = *(((uint32_t *)pEnv->pValue) + 1 );
                //lsapi_log("LSAPI: SUEXEC_UGID set UID: %d, GID: %d\n", uid, gid );
            }
            else
            {
                lsapi_log("LSAPI: missing SUEXEC_UGID env, use default user!\n" );
                pEnv = NULL;
            }
            if ( pEnv&& lsapi_suexec_auth( pReq, pAuth->pValue, pAuth->valLen, pEnv->pValue, pEnv->valLen ) == 0 )
            {
                //read UID, GID from specialEnv

            }
            else
            {
                //authentication error
                lsapi_log("LSAPI: SUEXEC_AUTH authentication failed, use default user!\n" );
                uid = 0;
            }
        }
        else
        {
            //lsapi_log("LSAPI: no SUEXEC_AUTH env, use default user!\n" );
        }
    }


    if ( !uid )
    {
        uid = s_defaultUid;
        gid = s_defaultGid;
    }

    //change uid
    if ( setUID_LVE( pReq, uid, gid, pChroot ) == -1 )
    {
        return -1;
    }

    s_uid = uid;

    if ( pReq->m_fdListen != -1 )
    {
        close( pReq->m_fdListen );
        pReq->m_fdListen = -1;
    }

    pStderrLog = LSAPI_GetEnv_r( pReq, "LSAPI_STDERR_LOG");
    if (pStderrLog)
        lsapi_reopen_stderr(pStderrLog);

    return 0;

}


static int parseContentLenFromHeader(LSAPI_Request * pReq)
{
    const char * pContentLen = LSAPI_GetHeader_r( pReq, H_CONTENT_LENGTH );
    if ( pContentLen )
        pReq->m_reqBodyLen = strtoll( pContentLen, NULL, 10 );
    return 0;
}


static int parseRequest( LSAPI_Request * pReq, int totalLen )
{
    int shouldFixEndian;
    char * pBegin = pReq->m_pReqBuf + sizeof( struct lsapi_req_header );
    char * pEnd = pReq->m_pReqBuf + totalLen;
    shouldFixEndian = ( LSAPI_ENDIAN != (
                pReq->m_pHeader->m_pktHeader.m_flag & LSAPI_ENDIAN_BIT ) );
    if ( shouldFixEndian )
    {
        fixEndian( pReq );
    }
    if ( (pReq->m_specialEnvListSize < pReq->m_pHeader->m_cntSpecialEnv )&&
            allocateEnvList( &pReq->m_pSpecialEnvList,
                &pReq->m_specialEnvListSize,
                pReq->m_pHeader->m_cntSpecialEnv ) == -1 )
        return -1;
    if ( (pReq->m_envListSize < pReq->m_pHeader->m_cntEnv )&&
            allocateEnvList( &pReq->m_pEnvList, &pReq->m_envListSize,
                pReq->m_pHeader->m_cntEnv ) == -1 )
        return -1;

    if ( parseEnv( pReq->m_pSpecialEnvList,
                pReq->m_pHeader->m_cntSpecialEnv,
                &pBegin, pEnd ) == -1 )
        return -1;
    if ( parseEnv( pReq->m_pEnvList, pReq->m_pHeader->m_cntEnv,
                &pBegin, pEnd ) == -1 )
        return -1;
    if (pReq->m_pHeader->m_scriptFileOff < 0
        || pReq->m_pHeader->m_scriptFileOff >= totalLen
        || pReq->m_pHeader->m_scriptNameOff < 0
        || pReq->m_pHeader->m_scriptNameOff >= totalLen
        || pReq->m_pHeader->m_queryStringOff < 0
        || pReq->m_pHeader->m_queryStringOff >= totalLen
        || pReq->m_pHeader->m_requestMethodOff < 0
        || pReq->m_pHeader->m_requestMethodOff >= totalLen)
    {
        lsapi_log("Bad request header - ERROR#1\n");
        return -1;
    }
    pReq->m_pScriptFile     = pReq->m_pReqBuf + pReq->m_pHeader->m_scriptFileOff;
    pReq->m_pScriptName     = pReq->m_pReqBuf + pReq->m_pHeader->m_scriptNameOff;
    pReq->m_pQueryString    = pReq->m_pReqBuf + pReq->m_pHeader->m_queryStringOff;
    pReq->m_pRequestMethod  = pReq->m_pReqBuf + pReq->m_pHeader->m_requestMethodOff;

    pBegin = pReq->m_pReqBuf + (( pBegin - pReq->m_pReqBuf + 7 ) & (~0x7));
    pReq->m_pHeaderIndex = ( struct lsapi_http_header_index * )pBegin;
    pBegin += sizeof( struct lsapi_http_header_index );

    pReq->m_pUnknownHeader = (struct lsapi_header_offset *)pBegin;
    pBegin += sizeof( struct lsapi_header_offset) *
                    pReq->m_pHeader->m_cntUnknownHeaders;

    pReq->m_pHttpHeader = pBegin;
    pBegin += pReq->m_pHeader->m_httpHeaderLen;
    if ( pBegin != pEnd )
    {
        lsapi_log("Request header does match total size, total: %d, "
                 "real: %ld\n", totalLen, pBegin - pReq->m_pReqBuf );
        return -1;
    }
    if ( shouldFixEndian )
    {
        fixHeaderIndexEndian( pReq );
    }

    if (validateHeaders(pReq) == -1)
    {
        lsapi_log("Bad request header - ERROR#2\n");
        return -1;
    }

    pReq->m_reqBodyLen = pReq->m_pHeader->m_reqBodyLen;
    if ( pReq->m_reqBodyLen == -2 )
    {
        parseContentLenFromHeader(pReq);
    }

    return 0;
}


//OPTIMIZATION
static char s_accept_notify = 0;
static char s_schedule_notify = 0;
static char s_notify_scheduled = 0;
static char s_notified_pid = 0;

static struct lsapi_packet_header s_ack = {'L', 'S',
                LSAPI_REQ_RECEIVED, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} };
static struct lsapi_packet_header s_conn_close_pkt = {'L', 'S',
                LSAPI_CONN_CLOSE, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} };


static inline int send_notification_pkt( int fd, struct lsapi_packet_header *pkt )
{
    if ( write( fd, pkt, LSAPI_PACKET_HEADER_LEN ) < LSAPI_PACKET_HEADER_LEN )
        return -1;
    return 0;
}


static inline int send_req_received_notification( int fd )
{
    return send_notification_pkt(fd, &s_ack);
}


static inline int send_conn_close_notification( int fd )
{
    return send_notification_pkt(fd, &s_conn_close_pkt);
}


//static void lsapi_sigalarm( int sig )
//{
//    if ( s_notify_scheduled )
//    {
//        s_notify_scheduled = 0;
//        if ( g_req.m_fd != -1 )
//            write_req_received_notification( g_req.m_fd );
//    }
//}


static inline int lsapi_schedule_notify(void)
{
    if ( !s_notify_scheduled )
    {
        alarm( 2 );
        s_notify_scheduled = 1;
    }
    return 0;
}


static inline int notify_req_received( int fd )
{
    if ( s_schedule_notify )
        return lsapi_schedule_notify();
    return send_req_received_notification( fd );

}


static inline int lsapi_notify_pid( int fd )
{
    char achBuf[16];
    lsapi_buildPacketHeader( (struct lsapi_packet_header *)achBuf, LSAPI_STDERR_STREAM,
                        8 + LSAPI_PACKET_HEADER_LEN );
    memmove( &achBuf[8], "\0PID", 4 );
    *((int *)&achBuf[12]) = getpid();

    if ( write( fd, achBuf, 16 ) < 16 )
        return -1;
    return 0;
}

static int readReq( LSAPI_Request * pReq )
{
    int len;
    int packetLen;
    if ( !pReq )
        return -1;
    if ( pReq->m_reqBufSize < 8192 )
    {
        if ( allocateBuf( pReq, 8192 ) == -1 )
            return -1;
    }

    while ( pReq->m_bufRead < LSAPI_PACKET_HEADER_LEN )
    {
        len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf, pReq->m_reqBufSize );
        if ( len <= 0 )
            return -1;
        pReq->m_bufRead += len;
    }
    pReq->m_reqState = LSAPI_ST_REQ_HEADER;

    packetLen = verifyHeader( &pReq->m_pHeader->m_pktHeader, LSAPI_BEGIN_REQUEST );
    if ( packetLen < 0 )
    {
        lsapi_log("packetLen < 0\n");
        return -1;
    }
    if ( packetLen > LSAPI_MAX_HEADER_LEN )
    {
        lsapi_log("packetLen > %d\n", LSAPI_MAX_HEADER_LEN );
        return -1;
    }

    if ( packetLen + 1024 > pReq->m_reqBufSize )
    {
        if ( allocateBuf( pReq, packetLen + 1024 ) == -1 )
            return -1;
    }
    while( packetLen > pReq->m_bufRead )
    {
        len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf + pReq->m_bufRead, packetLen - pReq->m_bufRead );
        if ( len <= 0 )
            return -1;
        pReq->m_bufRead += len;
    }
    if ( parseRequest( pReq, packetLen ) < 0 )
    {
        lsapi_log("ParseRequest error\n");
        return -1;
    }

    pReq->m_reqState = LSAPI_ST_REQ_BODY | LSAPI_ST_RESP_HEADER;

    if ( !s_uid )
    {
        if ( lsapi_changeUGid( pReq ) )
            return -1;
        memset(s_secret, 0, sizeof(s_secret));
    }
    pReq->m_bufProcessed = packetLen;

    //OPTIMIZATION
    if ( !s_accept_notify && !s_notified_pid )
        return notify_req_received( pReq->m_fd );
    else
    {
        s_notified_pid = 0;
        return 0;
    }
}


int LSAPI_Init(void)
{
    if ( !g_inited )
    {
        s_uid = geteuid();
        s_secret[0] = 0;
        lsapi_signal(SIGPIPE, lsapi_sigpipe);
        lsapi_signal(SIGUSR1, lsapi_siguser1);

#if defined(SIGXFSZ) && defined(SIG_IGN)
        signal(SIGXFSZ, SIG_IGN);
#endif
        /* let STDOUT function as STDERR,
           just in case writing to STDOUT directly */
        dup2( 2, 1 );
        if ( LSAPI_InitRequest( &g_req, LSAPI_SOCK_FILENO ) == -1 )
            return -1;
        g_inited = 1;
        s_ppid = getppid();
        void *pthread_lib = dlopen("libpthread.so", RTLD_LAZY);
        if (pthread_lib)
            pthread_atfork_func = dlsym(pthread_lib, "pthread_atfork");

    }
    return 0;
}


void LSAPI_Stop(void)
{
    g_running = 0;
}


int LSAPI_IsRunning(void)
{
    return g_running;
}


void LSAPI_Register_Pgrp_Timer_Callback(LSAPI_On_Timer_pf cb)
{
    s_proc_group_timer_cb = cb;
}


int LSAPI_InitRequest( LSAPI_Request * pReq, int fd )
{
    int newfd;
    if ( !pReq )
        return -1;
    memset( pReq, 0, sizeof( LSAPI_Request ) );
    if ( allocateIovec( pReq, 16 ) == -1 )
        return -1;
    pReq->m_pRespBuf = pReq->m_pRespBufPos = (char *)malloc( LSAPI_RESP_BUF_SIZE );
    if ( !pReq->m_pRespBuf )
        return -1;
    pReq->m_pRespBufEnd = pReq->m_pRespBuf + LSAPI_RESP_BUF_SIZE;
    pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec + 1;
    pReq->m_respPktHeaderEnd = &pReq->m_respPktHeader[5];
    if ( allocateRespHeaderBuf( pReq, LSAPI_INIT_RESP_HEADER_LEN ) == -1 )
        return -1;

    if ( fd == STDIN_FILENO )
    {
        fd = dup( fd );
        newfd = open( "/dev/null", O_RDWR );
        dup2( newfd, STDIN_FILENO );
    }

    if ( isPipe( fd ) )
    {
        pReq->m_fdListen = -1;
        pReq->m_fd = fd;
    }
    else
    {
        pReq->m_fdListen = fd;
        pReq->m_fd = -1;
        lsapi_set_nblock( fd, 1 );
    }
    return 0;
}


int LSAPI_Is_Listen( void )
{
    return LSAPI_Is_Listen_r( &g_req );
}


int LSAPI_Is_Listen_r( LSAPI_Request * pReq)
{
    return pReq->m_fdListen != -1;
}


int LSAPI_Accept_r( LSAPI_Request * pReq )
{
    char        achPeer[128];
    socklen_t   len;
    int         nodelay = 1;

    if ( !pReq )
        return -1;
    if ( LSAPI_Finish_r( pReq ) == -1 )
        return -1;
    lsapi_set_nblock( pReq->m_fdListen , 0 );
    while( g_running )
    {
        if ( pReq->m_fd == -1 )
        {
            if ( pReq->m_fdListen != -1)
            {
                len = sizeof( achPeer );
                pReq->m_fd = accept( pReq->m_fdListen,
                            (struct sockaddr *)&achPeer, &len );
                if ( pReq->m_fd == -1 )
                {
                    if (( errno == EINTR )||( errno == EAGAIN))
                        continue;
                    else
                        return -1;
                }
                else
                {
                    if (s_worker_status)
                        __atomic_store_n(&s_worker_status->m_state,
                                       LSAPI_STATE_CONNECTED, __ATOMIC_SEQ_CST);
                    if (s_busy_workers)
                        __atomic_fetch_add(s_busy_workers, 1, __ATOMIC_SEQ_CST);
                    lsapi_set_nblock( pReq->m_fd , 0 );
                    if (((struct sockaddr *)&achPeer)->sa_family == AF_INET )
                    {
                        setsockopt(pReq->m_fd, IPPROTO_TCP, TCP_NODELAY,
                                   (char *)&nodelay, sizeof(nodelay));
                    }
                    //init_conn_key( pReq->m_fd );
                    //OPTIMIZATION
                    if ( s_accept_notify )
                        if ( notify_req_received( pReq->m_fd ) == -1 )
                                return -1;
                }
            }
            else
                return -1;
        }
        if ( !readReq( pReq ) )
            break;
        //abort();
        lsapi_close_connection(pReq);
        LSAPI_Reset_r( pReq );
    }
    return 0;
}


static struct lsapi_packet_header   finish_close[2] =
{
    {'L', 'S', LSAPI_RESP_END, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} },
    {'L', 'S', LSAPI_CONN_CLOSE, LSAPI_ENDIAN, {LSAPI_PACKET_HEADER_LEN} }
};


int LSAPI_Finish_r( LSAPI_Request * pReq )
{
    /* finish req body */
    if ( !pReq )
        return -1;
    if (pReq->m_reqState)
    {
        if ( pReq->m_fd != -1 )
        {
            if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER )
            {
                LSAPI_FinalizeRespHeaders_r( pReq );
            }
            if ( pReq->m_pRespBufPos != pReq->m_pRespBuf )
            {
                Flush_RespBuf_r( pReq );
            }

            pReq->m_pIovecCur->iov_base = (void *)finish_close;
            pReq->m_pIovecCur->iov_len  = LSAPI_PACKET_HEADER_LEN;
            pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN;
            ++pReq->m_pIovecCur;
            LSAPI_Flush_r( pReq );
        }
        LSAPI_Reset_r( pReq );
    }
    return 0;
}


int LSAPI_End_Response_r(LSAPI_Request * pReq)
{
    if (!pReq)
        return -1;
    if (pReq->m_reqState & LSAPI_ST_BACKGROUND)
        return 0;
    if (pReq->m_reqState)
    {
        if ( pReq->m_fd != -1 )
        {
            if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER )
            {
                if ( pReq->m_pRespHeaderBufPos <= pReq->m_pRespHeaderBuf )
                    return 0;

                LSAPI_FinalizeRespHeaders_r( pReq );
            }
            if ( pReq->m_pRespBufPos != pReq->m_pRespBuf )
            {
                Flush_RespBuf_r( pReq );
            }

            pReq->m_pIovecCur->iov_base = (void *)finish_close;
            pReq->m_pIovecCur->iov_len  = LSAPI_PACKET_HEADER_LEN << 1;
            pReq->m_totalLen += LSAPI_PACKET_HEADER_LEN << 1;
            ++pReq->m_pIovecCur;
            LSAPI_Flush_r( pReq );
            lsapi_close_connection(pReq);
        }
        pReq->m_reqState |= LSAPI_ST_BACKGROUND;
    }
    return 0;
}


void LSAPI_Reset_r( LSAPI_Request * pReq )
{
    pReq->m_pRespBufPos         = pReq->m_pRespBuf;
    pReq->m_pIovecCur           = pReq->m_pIovecToWrite = pReq->m_pIovec + 1;
    pReq->m_pRespHeaderBufPos   = pReq->m_pRespHeaderBuf;

    memset( &pReq->m_pHeaderIndex, 0,
            (char *)(pReq->m_respHeaderLen) - (char *)&pReq->m_pHeaderIndex );
}


int LSAPI_Release_r( LSAPI_Request * pReq )
{
    if ( pReq->m_pReqBuf )
        free( pReq->m_pReqBuf );
    if ( pReq->m_pSpecialEnvList )
        free( pReq->m_pSpecialEnvList );
    if ( pReq->m_pEnvList )
        free( pReq->m_pEnvList );
    if ( pReq->m_pRespHeaderBuf )
        free( pReq->m_pRespHeaderBuf );
    return 0;
}


char * LSAPI_GetHeader_r( LSAPI_Request * pReq, int headerIndex )
{
    int off;
    if ( !pReq || ((unsigned int)headerIndex > H_TRANSFER_ENCODING) )
        return NULL;
    off = pReq->m_pHeaderIndex->m_headerOff[ headerIndex ];
    if ( !off )
        return NULL;
    if ( *(pReq->m_pHttpHeader + off
        + pReq->m_pHeaderIndex->m_headerLen[ headerIndex ]) )
    {
        *( pReq->m_pHttpHeader + off
            + pReq->m_pHeaderIndex->m_headerLen[ headerIndex ]) = 0;
    }
    return pReq->m_pHttpHeader + off;
}


static int readBodyToReqBuf( LSAPI_Request * pReq )
{
    off_t bodyLeft;
    ssize_t len = pReq->m_bufRead - pReq->m_bufProcessed;
    if ( len > 0 )
        return len;
    pReq->m_bufRead = pReq->m_bufProcessed = pReq->m_pHeader->m_pktHeader.m_packetLen.m_iLen;

    bodyLeft = pReq->m_reqBodyLen - pReq->m_reqBodyRead;
    len = pReq->m_reqBufSize - pReq->m_bufRead;
    if ( len < 0 )
        return -1;
    if ( len > bodyLeft )
        len = bodyLeft;

    len = lsapi_read( pReq->m_fd, pReq->m_pReqBuf + pReq->m_bufRead, len );
    if ( len > 0 )
        pReq->m_bufRead += len;
    return len;
}


int LSAPI_ReqBodyGetChar_r( LSAPI_Request * pReq )
{
    if (!pReq || (pReq->m_fd ==-1) )
        return EOF;
    if ( pReq->m_bufProcessed >= pReq->m_bufRead )
    {
        if ( readBodyToReqBuf( pReq ) <= 0 )
            return EOF;
    }
    ++pReq->m_reqBodyRead;
    return (unsigned char)*(pReq->m_pReqBuf + pReq->m_bufProcessed++);
}


int LSAPI_ReqBodyGetLine_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen, int *getLF )
{
    ssize_t len;
    ssize_t left;
    char * pBufEnd = pBuf + bufLen - 1;
    char * pBufCur = pBuf;
    char * pCur;
    char * p;
    if (!pReq || pReq->m_fd == -1 || !pBuf || !getLF)
        return -1;
    *getLF = 0;
    while( (left = pBufEnd - pBufCur ) > 0 )
    {

        len = pReq->m_bufRead - pReq->m_bufProcessed;
        if ( len <= 0 )
        {
            if ( (len = readBodyToReqBuf( pReq )) <= 0 )
            {
                *getLF = 1;
                break;
            }
        }
        if ( len > left )
            len = left;
        pCur = pReq->m_pReqBuf + pReq->m_bufProcessed;
        p = memchr( pCur, '\n', len );
        if ( p )
            len = p - pCur + 1;
        memmove( pBufCur, pCur, len );
        pBufCur += len;
        pReq->m_bufProcessed += len;

        pReq->m_reqBodyRead += len;

        if ( p )
        {
            *getLF = 1;
            break;
        }
    }
    *pBufCur = 0;

    return pBufCur - pBuf;
}


ssize_t LSAPI_ReadReqBody_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen )
{
    ssize_t len;
    off_t total;
    /* char *pOldBuf = pBuf; */
    if (!pReq || pReq->m_fd == -1 || !pBuf || (ssize_t)bufLen < 0)
        return -1;

    total = pReq->m_reqBodyLen - pReq->m_reqBodyRead;

    if ( total <= 0 )
        return 0;
    if ( total < (ssize_t)bufLen )
        bufLen = total;

    total = 0;
    len = pReq->m_bufRead - pReq->m_bufProcessed;
    if ( len > 0 )
    {
        if ( len > (ssize_t)bufLen )
            len = bufLen;
        memmove( pBuf, pReq->m_pReqBuf + pReq->m_bufProcessed, len );
        pReq->m_bufProcessed += len;
        total += len;
        pBuf += len;
        bufLen -= len;
    }
    while( bufLen > 0 )
    {
        len = lsapi_read( pReq->m_fd, pBuf, bufLen );
        if ( len > 0 )
        {
            total += len;
            pBuf += len;
            bufLen -= len;
        }
        else if ( len <= 0 )
        {
            if ( !total)
                return -1;
            break;
        }
    }
    pReq->m_reqBodyRead += total;
    return total;

}


ssize_t LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, size_t len )
{
    struct lsapi_packet_header * pHeader;
    const char * pEnd;
    const char * p;
    ssize_t bufLen;
    ssize_t toWrite;
    ssize_t packetLen;
    int skip = 0;

    if (!pReq || !pBuf)
        return -1;
    if (pReq->m_reqState & LSAPI_ST_BACKGROUND)
        return len;
    if (pReq->m_fd == -1)
        return -1;
    if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER )
    {
        LSAPI_FinalizeRespHeaders_r( pReq );
/*
        if ( *pBuf == '\r' )
        {
            ++skip;
        }
        if ( *pBuf == '\n' )
        {
            ++skip;
        }
*/
    }
    pReq->m_reqState |= LSAPI_ST_RESP_BODY;

    if ( ((ssize_t)len - skip) < pReq->m_pRespBufEnd - pReq->m_pRespBufPos )
    {
        memmove( pReq->m_pRespBufPos, pBuf + skip, len - skip );
        pReq->m_pRespBufPos += len - skip;
        return len;
    }


    pHeader = pReq->m_respPktHeader;
    p       = pBuf + skip;
    pEnd    = pBuf + len;
    bufLen  = pReq->m_pRespBufPos - pReq->m_pRespBuf;

    while( ( toWrite = pEnd - p ) > 0 )
    {
        packetLen = toWrite + bufLen;
        if ( LSAPI_MAX_DATA_PACKET_LEN < packetLen)
        {
            packetLen = LSAPI_MAX_DATA_PACKET_LEN;
            toWrite = packetLen - bufLen;
        }

        lsapi_buildPacketHeader( pHeader, LSAPI_RESP_STREAM,
                            packetLen + LSAPI_PACKET_HEADER_LEN );
        pReq->m_totalLen += packetLen + LSAPI_PACKET_HEADER_LEN;

        pReq->m_pIovecCur->iov_base = (void *)pHeader;
        pReq->m_pIovecCur->iov_len  = LSAPI_PACKET_HEADER_LEN;
        ++pReq->m_pIovecCur;
        ++pHeader;
        if ( bufLen > 0 )
        {
            pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespBuf;
            pReq->m_pIovecCur->iov_len  = bufLen;
            pReq->m_pRespBufPos = pReq->m_pRespBuf;
            ++pReq->m_pIovecCur;
            bufLen = 0;
        }

        pReq->m_pIovecCur->iov_base = (void *)p;
        pReq->m_pIovecCur->iov_len  = toWrite;
        ++pReq->m_pIovecCur;
        p += toWrite;

        if ( pHeader >= pReq->m_respPktHeaderEnd - 1)
        {
            if ( LSAPI_Flush_r( pReq ) == -1 )
                return -1;
            pHeader = pReq->m_respPktHeader;
        }
    }
    if ( pHeader != pReq->m_respPktHeader )
        if ( LSAPI_Flush_r( pReq ) == -1 )
            return -1;
    return p - pBuf;
}


#if defined(__FreeBSD__ )
ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
{
    ssize_t ret;
    off_t written;
    ret = sendfile( fdIn, fdOut, *off, size, NULL, &written, 0 );
    if ( written > 0 )
    {
        ret = written;
        *off += ret;
    }
    return ret;
}
#endif

#if defined(__OpenBSD__) || defined(__NetBSD__)
ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
{
    ssize_t ret;
    off_t written = 0;
    const size_t bufsiz = 16384;
    unsigned char in[bufsiz] = {0};

    if (lseek(fdIn, *off, SEEK_SET) == -1) {
        return -1;
    }

    while (size > 0) {
        size_t tor = size > sizeof(in) ? sizeof(in) : size;
        ssize_t c = read(fdIn, in, tor);
        if (c <= 0) {
            goto end;
        }

        ssize_t w = write(fdOut, in, c);
        if (w > 0)
            written += w;

        if (w != c) {
            goto end;
        }
        size -= c;
    }

end:
    *off += written;
    return 0;
}
#endif


#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
ssize_t gsendfile( int fdOut, int fdIn, off_t* off, size_t size )
{
    ssize_t ret;
    off_t len = size;
    ret = sendfile( fdIn, fdOut, *off, &len, NULL, 0 );
    if (( ret == 0 )&&( len > 0 ))
    {
        ret = len;
        *off += len;
    }
    return ret;
}
#endif


#if defined(sun) || defined(__sun)
#include <sys/sendfile.h>
ssize_t gsendfile( int fdOut, int fdIn, off_t *off, size_t size )
{
    int n = 0 ;
    sendfilevec_t vec[1];

    vec[n].sfv_fd   = fdIn;
    vec[n].sfv_flag = 0;
    vec[n].sfv_off  = *off;
    vec[n].sfv_len  = size;
    ++n;

    size_t written;
    ssize_t ret = sendfilev( fdOut, vec, n, &written );
    if (( !ret )||( errno == EAGAIN ))
        ret = written;
    if ( ret > 0 )
        *off += ret;
    return ret;
}
#endif


#if defined(linux) || defined(__linux) || defined(__linux__) || \
    defined(__gnu_linux__)
#include <sys/sendfile.h>
#define gsendfile sendfile
#endif


#if defined(HPUX)
ssize_t gsendfile( int fdOut, int fdIn, off_t * off, size_t size )
{
    return sendfile( fdOut, fdIn, off, size, NULL, 0 );
}
#endif


ssize_t LSAPI_sendfile_r( LSAPI_Request * pReq, int fdIn, off_t* off, size_t size )
{
    struct lsapi_packet_header * pHeader = pReq->m_respPktHeader;
    if ( !pReq || (pReq->m_fd == -1) || fdIn == -1 )
        return -1;
    if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER )
    {
        LSAPI_FinalizeRespHeaders_r( pReq );
    }
    pReq->m_reqState |= LSAPI_ST_RESP_BODY;

    LSAPI_Flush_r(pReq);

    lsapi_buildPacketHeader( pHeader, LSAPI_RESP_STREAM,
                            size + LSAPI_PACKET_HEADER_LEN );


    if (write(pReq->m_fd,  (const char *) pHeader, LSAPI_PACKET_HEADER_LEN ) != LSAPI_PACKET_HEADER_LEN)
        return -1;

    return gsendfile( pReq->m_fd, fdIn, off, size );
}


void Flush_RespBuf_r( LSAPI_Request * pReq )
{
    struct lsapi_packet_header * pHeader = pReq->m_respPktHeader;
    int bufLen = pReq->m_pRespBufPos - pReq->m_pRespBuf;
    pReq->m_reqState |= LSAPI_ST_RESP_BODY;
    lsapi_buildPacketHeader( pHeader, LSAPI_RESP_STREAM,
                        bufLen + LSAPI_PACKET_HEADER_LEN );
    pReq->m_totalLen += bufLen + LSAPI_PACKET_HEADER_LEN;

    pReq->m_pIovecCur->iov_base = (void *)pHeader;
    pReq->m_pIovecCur->iov_len  = LSAPI_PACKET_HEADER_LEN;
    ++pReq->m_pIovecCur;
    ++pHeader;
    if ( bufLen > 0 )
    {
        pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespBuf;
        pReq->m_pIovecCur->iov_len  = bufLen;
        pReq->m_pRespBufPos = pReq->m_pRespBuf;
        ++pReq->m_pIovecCur;
        bufLen = 0;
    }
}


int LSAPI_Flush_r( LSAPI_Request * pReq )
{
    int ret = 0;
    int n;
    if ( !pReq )
        return -1;
    n = pReq->m_pIovecCur - pReq->m_pIovecToWrite;
    if (( 0 == n )&&( pReq->m_pRespBufPos == pReq->m_pRespBuf ))
        return 0;
    if ( pReq->m_fd == -1 )
    {
        pReq->m_pRespBufPos = pReq->m_pRespBuf;
        pReq->m_totalLen = 0;
        pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec;
        return -1;
    }
    if ( pReq->m_reqState & LSAPI_ST_RESP_HEADER )
    {
        LSAPI_FinalizeRespHeaders_r( pReq );
    }
    if ( pReq->m_pRespBufPos != pReq->m_pRespBuf )
    {
        Flush_RespBuf_r( pReq );
    }

    n = pReq->m_pIovecCur - pReq->m_pIovecToWrite;
    if ( n > 0 )
    {

        ret = lsapi_writev( pReq->m_fd, &pReq->m_pIovecToWrite,
                  n, pReq->m_totalLen );
        if ( ret < pReq->m_totalLen )
        {
            lsapi_close_connection(pReq);
            ret = -1;
        }
        pReq->m_totalLen = 0;
        pReq->m_pIovecCur = pReq->m_pIovecToWrite = pReq->m_pIovec;
    }
    return ret;
}


ssize_t LSAPI_Write_Stderr_r( LSAPI_Request * pReq, const char * pBuf, size_t len )
{
    struct lsapi_packet_header header;
    const char * pEnd;
    const char * p;
    ssize_t packetLen;
    ssize_t totalLen;
    int ret;
    struct iovec iov[2];
    struct iovec *pIov;

    if ( !pReq )
        return -1;
    if (s_stderr_log_path || pReq->m_fd == -1 || pReq->m_fd == pReq->m_fdListen)
        return write( 2, pBuf, len );
    if ( pReq->m_pRespBufPos != pReq->m_pRespBuf )
    {
        LSAPI_Flush_r( pReq );
    }

    p       = pBuf;
    pEnd    = pBuf + len;

    while( ( packetLen = pEnd - p ) > 0 )
    {
        if ( LSAPI_MAX_DATA_PACKET_LEN < packetLen)
        {
            packetLen = LSAPI_MAX_DATA_PACKET_LEN;
        }

        lsapi_buildPacketHeader( &header, LSAPI_STDERR_STREAM,
                            packetLen + LSAPI_PACKET_HEADER_LEN );
        totalLen = packetLen + LSAPI_PACKET_HEADER_LEN;

        iov[0].iov_base = (void *)&header;
        iov[0].iov_len  = LSAPI_PACKET_HEADER_LEN;

        iov[1].iov_base = (void *)p;
        iov[1].iov_len  = packetLen;
        p += packetLen;
        pIov = iov;
        ret = lsapi_writev( pReq->m_fd, &pIov,
                  2, totalLen );
        if ( ret < totalLen )
        {
            lsapi_close_connection(pReq);
            ret = -1;
        }
    }
    return p - pBuf;
}


static char * GetHeaderVar( LSAPI_Request * pReq, const char * name )
{
    int i;
    char * pValue;
    for( i = 0; i < H_TRANSFER_ENCODING; ++i )
    {
        if ( pReq->m_pHeaderIndex->m_headerOff[i] )
        {
            if ( strcmp( name, CGI_HEADERS[i] ) == 0 )
            {
                pValue = pReq->m_pHttpHeader
                         + pReq->m_pHeaderIndex->m_headerOff[i];
                if ( *(pValue + pReq->m_pHeaderIndex->m_headerLen[i]) != '\0')
                {
                    *(pValue + pReq->m_pHeaderIndex->m_headerLen[i]) = '\0';
                }
                return pValue;
            }
        }
    }
    if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 )
    {
        const char *p;
        char *pKey;
        char *pKeyEnd;
        int  keyLen;
        struct lsapi_header_offset * pCur, *pEnd;
        pCur = pReq->m_pUnknownHeader;
        pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders;
        while( pCur < pEnd )
        {
            pKey = pReq->m_pHttpHeader + pCur->nameOff;
            keyLen = pCur->nameLen;
            pKeyEnd = pKey + keyLen;
            p = &name[5];

            while(( pKey < pKeyEnd )&&( *p ))
            {
                char ch = toupper( *pKey );
                if ((ch != *p )||(( *p == '_' )&&( ch != '-')))
                    break;
                ++p; ++pKey;
            }
            if (( pKey == pKeyEnd )&& (!*p ))
            {
                pValue = pReq->m_pHttpHeader + pCur->valueOff;

                if ( *(pValue + pCur->valueLen) != '\0')
                {
                    *(pValue + pCur->valueLen) = '\0';
                }
                return pValue;
            }
            ++pCur;
        }
    }
    return NULL;
}


char * LSAPI_GetEnv_r( LSAPI_Request * pReq, const char * name )
{
    struct LSAPI_key_value_pair * pBegin = pReq->m_pEnvList;
    struct LSAPI_key_value_pair * pEnd = pBegin + pReq->m_pHeader->m_cntEnv;
    if ( !pReq || !name )
        return NULL;
    if ( strncmp( name, "HTTP_", 5 ) == 0 )
    {
        return GetHeaderVar( pReq, name );
    }
    while( pBegin < pEnd )
    {
        if ( strcmp( name, pBegin->pKey ) == 0 )
            return pBegin->pValue;
        ++pBegin;
    }
    return NULL;
}


struct _headerInfo
{
    const char * _name;
    int          _nameLen;
    const char * _value;
    int          _valueLen;
};


int compareValueLocation(const void * v1, const void *v2 )
{
    return ((const struct _headerInfo *)v1)->_value -
           ((const struct _headerInfo *)v2)->_value;
}


int LSAPI_ForeachOrgHeader_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg )
{
    int i;
    int len = 0;
    char * pValue;
    int ret;
    int count = 0;
    struct _headerInfo headers[512];

    if ( !pReq || !fn )
        return -1;

    if ( !pReq->m_pHeaderIndex )
        return 0;

    for( i = 0; i < H_TRANSFER_ENCODING; ++i )
    {
        if ( pReq->m_pHeaderIndex->m_headerOff[i] )
        {
            len = pReq->m_pHeaderIndex->m_headerLen[i];
            pValue = pReq->m_pHttpHeader + pReq->m_pHeaderIndex->m_headerOff[i];
            *(pValue + len ) = 0;
            headers[count]._name = HTTP_HEADERS[i];
            headers[count]._nameLen = HTTP_HEADER_LEN[i];
            headers[count]._value = pValue;
            headers[count]._valueLen = len;
            ++count;

            //ret = (*fn)( HTTP_HEADERS[i], HTTP_HEADER_LEN[i],
            //            pValue, len, arg );
            //if ( ret <= 0 )
            //    return ret;
        }
    }
    if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 )
    {
        char *pKey;
        int  keyLen;
        struct lsapi_header_offset * pCur, *pEnd;
        pCur = pReq->m_pUnknownHeader;
        pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders;
        while( pCur < pEnd )
        {
            pKey = pReq->m_pHttpHeader + pCur->nameOff;
            keyLen = pCur->nameLen;
            *(pKey + keyLen ) = 0;

            pValue = pReq->m_pHttpHeader + pCur->valueOff;
            *(pValue + pCur->valueLen ) = 0;
            headers[count]._name = pKey;
            headers[count]._nameLen = keyLen;
            headers[count]._value = pValue;
            headers[count]._valueLen = pCur->valueLen;
            ++count;
            if ( count == 512 )
                break;
            //ret = (*fn)( pKey, keyLen,
            //            pValue, pCur->valueLen, arg );
            //if ( ret <= 0 )
            //    return ret;
            ++pCur;
        }
    }
    qsort( headers, count, sizeof( struct _headerInfo ), compareValueLocation );
    for( i = 0; i < count; ++i )
    {
        ret = (*fn)( headers[i]._name, headers[i]._nameLen,
                    headers[i]._value, headers[i]._valueLen, arg );
        if ( ret <= 0 )
            return ret;
    }
    return count;
}


int LSAPI_ForeachHeader_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg )
{
    int i;
    int len = 0;
    char * pValue;
    int ret;
    int count = 0;
    if ( !pReq || !fn )
        return -1;
    for( i = 0; i < H_TRANSFER_ENCODING; ++i )
    {
        if ( pReq->m_pHeaderIndex->m_headerOff[i] )
        {
            len = pReq->m_pHeaderIndex->m_headerLen[i];
            pValue = pReq->m_pHttpHeader + pReq->m_pHeaderIndex->m_headerOff[i];
            *(pValue + len ) = 0;
            ret = (*fn)( CGI_HEADERS[i], CGI_HEADER_LEN[i],
                        pValue, len, arg );
            ++count;
            if ( ret <= 0 )
                return ret;
        }
    }
    if ( pReq->m_pHeader->m_cntUnknownHeaders > 0 )
    {
        char achHeaderName[256];
        char *p;
        char *pKey;
        char *pKeyEnd ;
        int  keyLen;
        struct lsapi_header_offset * pCur, *pEnd;
        pCur = pReq->m_pUnknownHeader;
        pEnd = pCur + pReq->m_pHeader->m_cntUnknownHeaders;
        while( pCur < pEnd )
        {
            pKey = pReq->m_pHttpHeader + pCur->nameOff;
            keyLen = pCur->nameLen;
            if ( keyLen > 250 )
                keyLen = 250;
            pKeyEnd = pKey + keyLen;
            memcpy( achHeaderName, "HTTP_", 5 );
            p = &achHeaderName[5];

            while( pKey < pKeyEnd )
            {
                char ch = *pKey++;
                if ( ch == '-' )
                    *p++ = '_';
                else
                    *p++ = toupper( ch );
            }
            *p = 0;
            keyLen += 5;

            pValue = pReq->m_pHttpHeader + pCur->valueOff;
            *(pValue + pCur->valueLen ) = 0;
            ret = (*fn)( achHeaderName, keyLen,
                        pValue, pCur->valueLen, arg );
            if ( ret <= 0 )
                return ret;
            ++pCur;
        }
    }
    return count + pReq->m_pHeader->m_cntUnknownHeaders;
}


static int EnvForeach( struct LSAPI_key_value_pair * pEnv,
            int n, LSAPI_CB_EnvHandler fn, void * arg )
{
    struct LSAPI_key_value_pair * pEnd = pEnv + n;
    int ret;
    if ( !pEnv || !fn )
        return -1;
    while( pEnv < pEnd )
    {
        ret = (*fn)( pEnv->pKey, pEnv->keyLen,
                    pEnv->pValue, pEnv->valLen, arg );
        if ( ret <= 0 )
            return ret;
        ++pEnv;
    }
    return n;
}


int LSAPI_ForeachEnv_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg )
{
    if ( !pReq || !fn )
        return -1;
    if ( pReq->m_pHeader->m_cntEnv > 0 )
    {
        return EnvForeach( pReq->m_pEnvList, pReq->m_pHeader->m_cntEnv,
                    fn, arg );
    }
    return 0;
}


int LSAPI_ForeachSpecialEnv_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg )
{
    if ( !pReq || !fn )
        return -1;
    if ( pReq->m_pHeader->m_cntSpecialEnv > 0 )
    {
        return EnvForeach( pReq->m_pSpecialEnvList,
                pReq->m_pHeader->m_cntSpecialEnv,
                    fn, arg );
    }
    return 0;

}


int LSAPI_FinalizeRespHeaders_r( LSAPI_Request * pReq )
{
    if ( !pReq || !pReq->m_pIovec )
        return -1;
    if ( !( pReq->m_reqState & LSAPI_ST_RESP_HEADER ) )
        return 0;
    pReq->m_reqState &= ~LSAPI_ST_RESP_HEADER;
    if ( pReq->m_pRespHeaderBufPos > pReq->m_pRespHeaderBuf )
    {
        pReq->m_pIovecCur->iov_base = (void *)pReq->m_pRespHeaderBuf;
        pReq->m_pIovecCur->iov_len  = pReq->m_pRespHeaderBufPos - pReq->m_pRespHeaderBuf;
        pReq->m_totalLen += pReq->m_pIovecCur->iov_len;
        ++pReq->m_pIovecCur;
    }

    pReq->m_pIovec->iov_len  = sizeof( struct lsapi_resp_header)
            + pReq->m_respHeader.m_respInfo.m_cntHeaders * sizeof( short );
    pReq->m_totalLen += pReq->m_pIovec->iov_len;

    lsapi_buildPacketHeader( &pReq->m_respHeader.m_pktHeader,
                    LSAPI_RESP_HEADER, pReq->m_totalLen  );
    pReq->m_pIovec->iov_base = (void *)&pReq->m_respHeader;
    pReq->m_pIovecToWrite = pReq->m_pIovec;
    return 0;
}


int LSAPI_AppendRespHeader2_r( LSAPI_Request * pReq, const char * pHeaderName,
                              const char * pHeaderValue )
{
    int nameLen, valLen, len;
    if ( !pReq || !pHeaderName || !pHeaderValue )
        return -1;
    if ( pReq->m_reqState & LSAPI_ST_RESP_BODY )
        return -1;
    if ( pReq->m_respHeader.m_respInfo.m_cntHeaders >= LSAPI_MAX_RESP_HEADERS )
        return -1;
    nameLen = strlen( pHeaderName );
    valLen = strlen( pHeaderValue );
    if ( nameLen == 0 )
        return -1;
    while( nameLen > 0 )
    {
        char ch = *(pHeaderName + nameLen - 1 );
        if (( ch == '\n' )||( ch == '\r' ))
            --nameLen;
        else
            break;
    }
    if ( nameLen <= 0 )
        return 0;
    while( valLen > 0 )
    {
        char ch = *(pHeaderValue + valLen - 1 );
        if (( ch == '\n' )||( ch == '\r' ))
            --valLen;
        else
            break;
    }
    len = nameLen + valLen + 1;
    if ( len > LSAPI_RESP_HTTP_HEADER_MAX )
        return -1;

    if ( pReq->m_pRespHeaderBufPos + len + 1 > pReq->m_pRespHeaderBufEnd )
    {
        int newlen = pReq->m_pRespHeaderBufPos + len + 4096 - pReq->m_pRespHeaderBuf;
        newlen -= newlen % 4096;
        if ( allocateRespHeaderBuf( pReq, newlen ) == -1 )
            return -1;
    }
    memmove( pReq->m_pRespHeaderBufPos, pHeaderName, nameLen );
    pReq->m_pRespHeaderBufPos += nameLen;
    *pReq->m_pRespHeaderBufPos++ = ':';
    memmove( pReq->m_pRespHeaderBufPos, pHeaderValue, valLen );
    pReq->m_pRespHeaderBufPos += valLen;
    *pReq->m_pRespHeaderBufPos++ = 0;
    ++len;  /* add one byte padding for \0 */
    pReq->m_respHeaderLen[pReq->m_respHeader.m_respInfo.m_cntHeaders] = len;
    ++pReq->m_respHeader.m_respInfo.m_cntHeaders;
    return 0;
}


int LSAPI_AppendRespHeader_r( LSAPI_Request * pReq, const char * pBuf, int len )
{
    if ( !pReq || !pBuf || len <= 0 || len > LSAPI_RESP_HTTP_HEADER_MAX )
        return -1;
    if ( pReq->m_reqState & LSAPI_ST_RESP_BODY )
        return -1;
    if ( pReq->m_respHeader.m_respInfo.m_cntHeaders >= LSAPI_MAX_RESP_HEADERS )
        return -1;
    while( len > 0 )
    {
        char ch = *(pBuf + len - 1 );
        if (( ch == '\n' )||( ch == '\r' ))
            --len;
        else
            break;
    }
    if ( len <= 0 )
        return 0;
    if ( pReq->m_pRespHeaderBufPos + len + 1 > pReq->m_pRespHeaderBufEnd )
    {
        int newlen = pReq->m_pRespHeaderBufPos + len + 4096 - pReq->m_pRespHeaderBuf;
        newlen -= newlen % 4096;
        if ( allocateRespHeaderBuf( pReq, newlen ) == -1 )
            return -1;
    }
    memmove( pReq->m_pRespHeaderBufPos, pBuf, len );
    pReq->m_pRespHeaderBufPos += len;
    *pReq->m_pRespHeaderBufPos++ = 0;
    ++len;  /* add one byte padding for \0 */
    pReq->m_respHeaderLen[pReq->m_respHeader.m_respInfo.m_cntHeaders] = len;
    ++pReq->m_respHeader.m_respInfo.m_cntHeaders;
    return 0;
}


int LSAPI_CreateListenSock2( const struct sockaddr * pServerAddr, int backlog )
{
    int ret;
    int fd;
    int flag = 1;
    int addr_len;

    switch( pServerAddr->sa_family )
    {
    case AF_INET:
        addr_len = 16;
        break;
    case AF_INET6:
        addr_len = sizeof( struct sockaddr_in6 );
        break;
    case AF_UNIX:
        addr_len = sizeof( struct sockaddr_un );
        unlink( ((struct sockaddr_un *)pServerAddr)->sun_path );
        break;
    default:
        return -1;
    }

    fd = socket( pServerAddr->sa_family, SOCK_STREAM, 0 );
    if ( fd == -1 )
        return -1;

    fcntl( fd, F_SETFD, FD_CLOEXEC );

    if(setsockopt( fd, SOL_SOCKET, SO_REUSEADDR,
                (char *)( &flag ), sizeof(flag)) == 0)
    {
        ret = bind( fd, pServerAddr, addr_len );
        if ( !ret )
        {
            ret = listen( fd, backlog );
            if ( !ret )
                return fd;
        }
    }

    ret = errno;
    close(fd);
    errno = ret;
    return -1;
}


int LSAPI_ParseSockAddr( const char * pBind, struct sockaddr * pAddr )
{
    char achAddr[256];
    char * p = achAddr;
    char * pEnd;
    struct addrinfo *res, hints;
    int  doAddrInfo = 0;
    int port;

    if ( !pBind )
        return -1;

    while( isspace( *pBind ) )
        ++pBind;

    strncpy(achAddr, pBind, 255);
    achAddr[255] = 0;

    switch( *p )
    {
    case '/':
        pAddr->sa_family = AF_UNIX;
        strncpy( ((struct sockaddr_un *)pAddr)->sun_path, p,
                sizeof(((struct sockaddr_un *)pAddr)->sun_path) );
        return 0;

    case '[':
        pAddr->sa_family = AF_INET6;
        ++p;
        pEnd = strchr( p, ']' );
        if ( !pEnd )
            return -1;
        *pEnd++ = 0;

        if ( *p == '*' )
        {
            strcpy( achAddr, "::" );
            p = achAddr;
        }
        doAddrInfo = 1;
        break;

    default:
        pAddr->sa_family = AF_INET;
        pEnd = strchr( p, ':' );
        if ( !pEnd )
            return -1;
        *pEnd++ = 0;

        doAddrInfo = 0;
        if ( *p == '*' )
        {
            ((struct sockaddr_in *)pAddr)->sin_addr.s_addr = htonl(INADDR_ANY);
        }
        else if (!strcasecmp( p, "localhost" ) )
            ((struct sockaddr_in *)pAddr)->sin_addr.s_addr = htonl( INADDR_LOOPBACK );
        else
        {
#ifdef HAVE_INET_PTON
            if (!inet_pton(AF_INET, p, &((struct sockaddr_in *)pAddr)->sin_addr))
#else
            ((struct sockaddr_in *)pAddr)->sin_addr.s_addr = inet_addr( p );
            if ( ((struct sockaddr_in *)pAddr)->sin_addr.s_addr == INADDR_BROADCAST)
#endif
            {
                doAddrInfo = 1;
            }
        }
        break;
    }
    if ( *pEnd == ':' )
        ++pEnd;

    port = atoi( pEnd );
    if (( port <= 0 )||( port > 65535 ))
        return -1;
    if ( doAddrInfo )
    {

        memset(&hints, 0, sizeof(hints));

        hints.ai_family   = pAddr->sa_family;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_protocol = IPPROTO_TCP;

        if ( getaddrinfo(p, NULL, &hints, &res) )
        {
            return -1;
        }

        memcpy(pAddr, res->ai_addr, res->ai_addrlen);
        freeaddrinfo(res);
    }

    if ( pAddr->sa_family == AF_INET )
        ((struct sockaddr_in *)pAddr)->sin_port = htons( port );
    else
        ((struct sockaddr_in6 *)pAddr)->sin6_port = htons( port );
    return 0;

}


int LSAPI_CreateListenSock( const char * pBind, int backlog )
{
    char serverAddr[128];
    int ret;
    int fd = -1;
    ret = LSAPI_ParseSockAddr( pBind, (struct sockaddr *)serverAddr );
    if ( !ret )
    {
        fd = LSAPI_CreateListenSock2( (struct sockaddr *)serverAddr, backlog );
    }
    return fd;
}


static fn_select_t g_fnSelect = select;
typedef struct _lsapi_prefork_server
{
    int m_fd;
    int m_iMaxChildren;
    int m_iExtraChildren;
    int m_iCurChildren;
    int m_iMaxIdleChildren;
    int m_iServerMaxIdle;
    int m_iChildrenMaxIdleTime;
    int m_iMaxReqProcessTime;
    int m_iAvoidFork;

    lsapi_child_status * m_pChildrenStatus;
    lsapi_child_status * m_pChildrenStatusCur;
    lsapi_child_status * m_pChildrenStatusEnd;

}lsapi_prefork_server;
static lsapi_prefork_server * g_prefork_server = NULL;


int LSAPI_Init_Prefork_Server( int max_children, fn_select_t fp, int avoidFork )
{
    if ( g_prefork_server )
        return 0;
    if ( max_children <= 1 )
        return -1;
    if ( max_children >= 10000)
        max_children = 10000;

    if (s_max_busy_workers == 0)
        s_max_busy_workers = max_children / 2 + 1;

    g_prefork_server = (lsapi_prefork_server *)malloc( sizeof( lsapi_prefork_server ) );
    if ( !g_prefork_server )
        return -1;
    memset( g_prefork_server, 0, sizeof( lsapi_prefork_server ) );

    if ( fp != NULL )
        g_fnSelect = fp;

    s_ppid = getppid();
    s_pid = getpid();
    setpgid( s_pid, s_pid );
#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
    s_total_pages = sysconf(_SC_PHYS_PAGES);
#endif
    g_prefork_server->m_iAvoidFork = avoidFork;
    g_prefork_server->m_iMaxChildren = max_children;

    g_prefork_server->m_iExtraChildren = ( avoidFork ) ? 0 : (max_children / 3) ;
    g_prefork_server->m_iMaxIdleChildren = ( avoidFork ) ? (max_children + 1) : (max_children / 3);
    if ( g_prefork_server->m_iMaxIdleChildren == 0 )
        g_prefork_server->m_iMaxIdleChildren = 1;
    g_prefork_server->m_iChildrenMaxIdleTime = 300;
    g_prefork_server->m_iMaxReqProcessTime = 3600;

    setsid();

    return 0;
}


void LSAPI_Set_Server_fd( int fd )
{
    if( g_prefork_server )
        g_prefork_server->m_fd = fd;
}


static int lsapi_accept( int fdListen )
{
    int         fd;
    int         nodelay = 1;
    socklen_t   len;
    char        achPeer[128];

    len = sizeof( achPeer );
    fd = accept( fdListen, (struct sockaddr *)&achPeer, &len );
    if ( fd != -1 )
    {
        if (((struct sockaddr *)&achPeer)->sa_family == AF_INET )
        {
            setsockopt( fd, IPPROTO_TCP, TCP_NODELAY,
                    (char *)&nodelay, sizeof(nodelay));
        }

        //OPTIMIZATION
        //if ( s_accept_notify )
        //    notify_req_received( fd );
    }
    return fd;

}


static unsigned int s_max_reqs = UINT_MAX;
static int s_max_idle_secs = 300;
static int s_stop;

static void lsapi_cleanup(int signal)
{
    s_stop = signal;
}


static lsapi_child_status * find_child_status( int pid )
{
    lsapi_child_status * pStatus = g_prefork_server->m_pChildrenStatus;
    lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatusEnd;
    while( pStatus < pEnd )
    {
        if ( pStatus->m_pid == pid )
        {
            if (pid == 0)
            {
                memset(pStatus, 0, sizeof( *pStatus ) );
                pStatus->m_pid = -1;
            }
            if ( pStatus + 1 > g_prefork_server->m_pChildrenStatusCur )
                g_prefork_server->m_pChildrenStatusCur = pStatus + 1;
            return pStatus;
        }
        ++pStatus;
    }
    return NULL;
}


void LSAPI_reset_server_state( void )
{
    /*
       Reset child status
    */
    g_prefork_server->m_iCurChildren = 0;
    lsapi_child_status * pStatus = g_prefork_server->m_pChildrenStatus;
    lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatusEnd;
    while( pStatus < pEnd )
    {
        pStatus->m_pid = 0;
        ++pStatus;
    }
    if (s_busy_workers)
        __atomic_store_n(s_busy_workers, 0, __ATOMIC_SEQ_CST);
    if (s_accepting_workers)
        __atomic_store_n(s_accepting_workers, 0, __ATOMIC_SEQ_CST);

}


static void lsapi_sigchild( int signal )
{
    int status, pid;
    char expect_connected = LSAPI_STATE_CONNECTED;
    char expect_accepting = LSAPI_STATE_ACCEPTING;
    lsapi_child_status * child_status;
    if (g_prefork_server == NULL)
        return;
    while( 1 )
    {
        pid = waitpid( -1, &status, WNOHANG|WUNTRACED );
        if ( pid <= 0 )
        {
            break;
        }
        if ( WIFSIGNALED( status ))
        {
            int sig_num = WTERMSIG( status );
#ifdef WCOREDUMP
            const char * dump = WCOREDUMP( status ) ? "yes" : "no";
#else
            const char * dump = "unknown";
#endif
            lsapi_log("Child process with pid: %d was killed by signal: "
                     "%d, core dumped: %s\n", pid, sig_num, dump );
        }
        if ( pid == s_pid_dump_debug_info )
        {
            pid = 0;
            continue;
        }
        if ( pid == s_ignore_pid )
        {
            pid = 0;
            s_ignore_pid = -1;
            continue;
        }
        child_status = find_child_status( pid );
        if ( child_status )
        {
            if (__atomic_compare_exchange_n(&child_status->m_state,
                                            &expect_connected,
                                            LSAPI_STATE_IDLE, 1,
                                            __ATOMIC_SEQ_CST,
                                            __ATOMIC_SEQ_CST))
            {
                if (s_busy_workers)
                    __atomic_fetch_sub(s_busy_workers, 1, __ATOMIC_SEQ_CST);
            }
            else if (__atomic_compare_exchange_n(&child_status->m_state,
                                                 &expect_accepting,
                                                 LSAPI_STATE_IDLE, 1,
                                                 __ATOMIC_SEQ_CST,
                                                 __ATOMIC_SEQ_CST))
            {
                if (s_accepting_workers)
                    __atomic_fetch_sub(s_accepting_workers, 1, __ATOMIC_SEQ_CST);
            }
            child_status->m_pid = 0;
            --g_prefork_server->m_iCurChildren;
        }
    }
    while(( g_prefork_server->m_pChildrenStatusCur > g_prefork_server->m_pChildrenStatus )
            &&( g_prefork_server->m_pChildrenStatusCur[-1].m_pid == 0 ))
        --g_prefork_server->m_pChildrenStatusCur;

}


static int lsapi_init_children_status(void)
{
    char * pBuf;
    int size = 4096;
    int max_children;
    if (g_prefork_server->m_pChildrenStatus)
        return 0;
    max_children = g_prefork_server->m_iMaxChildren
                        + g_prefork_server->m_iExtraChildren;

    size = max_children * sizeof( lsapi_child_status ) * 2 + 3 * sizeof(int);
    size = (size + 4095) / 4096 * 4096;
    pBuf =( char*) mmap( NULL, size, PROT_READ | PROT_WRITE,
        MAP_ANON | MAP_SHARED, -1, 0 );
    if ( pBuf == MAP_FAILED )
    {
        perror( "Anonymous mmap() failed" );
        return -1;
    }
    memset( pBuf, 0, size );
    g_prefork_server->m_pChildrenStatus = (lsapi_child_status *)pBuf;
    g_prefork_server->m_pChildrenStatusCur = (lsapi_child_status *)pBuf;
    g_prefork_server->m_pChildrenStatusEnd = (lsapi_child_status *)pBuf + max_children;
    s_busy_workers = (int *)g_prefork_server->m_pChildrenStatusEnd;
    s_accepting_workers = s_busy_workers + 1;
    s_global_counter = s_accepting_workers + 1;
    s_avail_pages = (size_t *)(s_global_counter + 1);

    setsid();
    return 0;
}


static void dump_debug_info( lsapi_child_status * pStatus, long tmCur )
{
    char achCmd[1024];
    if ( s_pid_dump_debug_info )
    {
        if ( kill( s_pid_dump_debug_info, 0 ) == 0 )
            return;
    }

    lsapi_log("Possible runaway process, UID: %d, PPID: %d, PID: %d, "
             "reqCount: %d, process time: %ld, checkpoint time: %ld, start "
             "time: %ld\n", getuid(), getppid(), pStatus->m_pid,
             pStatus->m_iReqCounter, tmCur - pStatus->m_tmReqBegin,
             tmCur - pStatus->m_tmLastCheckPoint, tmCur - pStatus->m_tmStart );

    s_pid_dump_debug_info = fork();
    if (s_pid_dump_debug_info == 0)
    {
        snprintf( achCmd, 1024, "gdb --batch -ex \"attach %d\" -ex \"set height 0\" "
                "-ex \"bt\" >&2;PATH=$PATH:/usr/sbin lsof -p %d >&2",
                pStatus->m_pid, pStatus->m_pid );
        if ( system( achCmd ) == -1 )
            perror( "system()" );
        exit( 0 );
    }
}


static void lsapi_check_child_status( long tmCur )
{
    int idle = 0;
    int tobekilled;
    int dying = 0;
    int count = 0;
    lsapi_child_status * pStatus = g_prefork_server->m_pChildrenStatus;
    lsapi_child_status * pEnd = g_prefork_server->m_pChildrenStatusCur;
    while( pStatus < pEnd )
    {
        tobekilled = 0;
        if ( pStatus->m_pid != 0 && pStatus->m_pid != -1)
        {
            ++count;
            if ( !pStatus->m_inProcess )
            {
                if (g_prefork_server->m_iCurChildren - dying
                        > g_prefork_server->m_iMaxChildren
                    || idle > g_prefork_server->m_iMaxIdleChildren)
                {
                    ++pStatus->m_iKillSent;
                    //tobekilled = SIGUSR1;
                }
                else
                {
                    if (s_max_idle_secs> 0
                        && tmCur - pStatus->m_tmWaitBegin > s_max_idle_secs + 5)
                    {
                        ++pStatus->m_iKillSent;
                        //tobekilled = SIGUSR1;
                    }
                }
                if (!pStatus->m_iKillSent)
                    ++idle;
            }
            else
            {
                if (tmCur - pStatus->m_tmReqBegin >
                        g_prefork_server->m_iMaxReqProcessTime)
                {
                    if ((pStatus->m_iKillSent % 5) == 0 && s_dump_debug_info)
                        dump_debug_info( pStatus, tmCur );
                    if ( pStatus->m_iKillSent > 5 )
                    {
                        tobekilled = SIGKILL;
                        lsapi_log("Force killing runaway process PID: %d"
                                 " with SIGKILL\n", pStatus->m_pid );
                    }
                    else
                    {
                        tobekilled = SIGTERM;
                        lsapi_log("Killing runaway process PID: %d with "
                                 "SIGTERM\n", pStatus->m_pid );
                    }
                }
            }
            if ( tobekilled )
            {
                if (( kill( pStatus->m_pid, tobekilled ) == -1 ) &&
                    ( errno == ESRCH ))
                {
                    pStatus->m_pid = 0;
                    --count;
                }
                else
                {
                    ++pStatus->m_iKillSent;
                    ++dying;
                }
            }
        }
        ++pStatus;
    }
    if ( abs( g_prefork_server->m_iCurChildren - count ) > 1 )
    {
        lsapi_log("Children tracking is wrong: Cur Children: %d,"
                  " count: %d, idle: %d, dying: %d\n",
                  g_prefork_server->m_iCurChildren, count, idle, dying );
    }
}


//static int lsapi_all_children_must_die(void)
//{
//    int maxWait;
//    int sec =0;
//    g_prefork_server->m_iMaxReqProcessTime = 10;
//    g_prefork_server->m_iMaxIdleChildren = -1;
//    maxWait = 15;
//
//    while( g_prefork_server->m_iCurChildren && (sec < maxWait) )
//    {
//        lsapi_check_child_status(time(NULL));
//        sleep( 1 );
//        sec++;
//    }
//    if ( g_prefork_server->m_iCurChildren != 0 )
//        kill( -getpgrp(), SIGKILL );
//    return 0;
//}


void set_skip_write(void)
{   s_skip_write = 1;   }


int is_enough_free_mem(void)
{
#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
    //minimum 1GB or 10% available free memory
    return (*s_avail_pages > s_min_avail_pages
            || (*s_avail_pages * 10) / s_total_pages > 0);
#endif
    return 1;
}


static int lsapi_prefork_server_accept( lsapi_prefork_server * pServer,
                                        LSAPI_Request * pReq )
{
    struct sigaction act, old_term, old_quit, old_int,
                    old_usr1, old_child;
    lsapi_child_status * child_status;
    int             wait_secs = 0;
    int             ret = 0;
    int             pid;
    time_t          lastTime = 0;
    time_t          curTime = 0;
    fd_set          readfds;
    struct timeval  timeout;

    sigset_t mask;
    sigset_t orig_mask;

    lsapi_init_children_status();

    act.sa_flags = 0;
    act.sa_handler = lsapi_sigchild;
    sigemptyset(&(act.sa_mask));
    if( sigaction( SIGCHLD, &act, &old_child ) )
    {
        perror( "Can't set signal handler for SIGCHILD" );
        return -1;
    }

    /* Set up handler to kill children upon exit */
    act.sa_flags = 0;
    act.sa_handler = lsapi_cleanup;
    sigemptyset(&(act.sa_mask));
    if( sigaction( SIGTERM, &act, &old_term ) ||
        sigaction( SIGINT,  &act, &old_int  ) ||
        sigaction( SIGUSR1, &act, &old_usr1 ) ||
        sigaction( SIGQUIT, &act, &old_quit ))
    {
        perror( "Can't set signals" );
        return -1;
    }

    while( !s_stop )
    {
        if (s_proc_group_timer_cb != NULL) {
            s_proc_group_timer_cb(&s_ignore_pid);
        }

        curTime = time( NULL );
        if (curTime != lastTime )
        {
            lastTime = curTime;
            if (lsapi_parent_dead())
                break;
            lsapi_check_child_status(curTime );
            if (pServer->m_iServerMaxIdle)
            {
                if ( pServer->m_iCurChildren <= 0 )
                {
                    ++wait_secs;
                    if ( wait_secs > pServer->m_iServerMaxIdle )
                        return -1;
                }
                else
                    wait_secs = 0;
            }
        }

#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
        *s_avail_pages = sysconf(_SC_AVPHYS_PAGES);
//        lsapi_log("Memory total: %zd, free: %zd, free %%%zd\n",
//                  s_total_pages, *s_avail_pages, *s_avail_pages * 100 / s_total_pages);

#endif
        FD_ZERO( &readfds );
        FD_SET( pServer->m_fd, &readfds );
        timeout.tv_sec = 1;
        timeout.tv_usec = 0;
        ret = (*g_fnSelect)(pServer->m_fd+1, &readfds, NULL, NULL, &timeout);
        if (ret == 1 )
        {
            int accepting = 0;
            if (s_accepting_workers)
                accepting = __atomic_load_n(s_accepting_workers, __ATOMIC_SEQ_CST);

            if (pServer->m_iCurChildren > 0
                && accepting > 0)
            {
                usleep(400);
                while(accepting-- > 0)
                    sched_yield();
                continue;
            }
        }
        else if ( ret == -1 )
        {
            if ( errno == EINTR )
                continue;
            /* perror( "select()" ); */
            break;
        }
        else
        {
            continue;
        }

        if (pServer->m_iCurChildren >=
            pServer->m_iMaxChildren + pServer->m_iExtraChildren)
        {
            lsapi_log("Reached max children process limit: %d, extra: %d,"
                     " current: %d, busy: %d, please increase LSAPI_CHILDREN.\n",
                     pServer->m_iMaxChildren, pServer->m_iExtraChildren,
                     pServer->m_iCurChildren,
                     s_busy_workers ? *s_busy_workers : -1 );
            usleep( 100000 );
            continue;
        }

        pReq->m_fd = lsapi_accept( pServer->m_fd );
        if ( pReq->m_fd != -1 )
        {
            wait_secs = 0;
            child_status = find_child_status( 0 );

            sigemptyset( &mask );
            sigaddset( &mask, SIGCHLD );

            if ( sigprocmask(SIG_BLOCK, &mask, &orig_mask) < 0 )
            {
                perror( "sigprocmask(SIG_BLOCK) to block SIGCHLD" );
            }

            pid = fork();

            if ( !pid )
            {
                setsid();
                if (sigprocmask(SIG_SETMASK, &orig_mask, NULL) < 0)
                    perror( "sigprocmask( SIG_SETMASK ) to restore SIGMASK in child" );
                g_prefork_server = NULL;
                s_ppid = getppid();
                s_pid = getpid();
                s_req_processed = 0;
                s_proc_group_timer_cb = NULL;
                s_worker_status = child_status;

                if (pthread_atfork_func)
                    (*pthread_atfork_func)(NULL, NULL, set_skip_write);

                __atomic_store_n(&s_worker_status->m_state,
                                 LSAPI_STATE_CONNECTED, __ATOMIC_SEQ_CST);
                if (s_busy_workers)
                    __atomic_add_fetch(s_busy_workers, 1, __ATOMIC_SEQ_CST);
                lsapi_set_nblock( pReq->m_fd, 0 );
                //keep it open if busy_count is used.
                if (!s_keep_listener && s_busy_workers
                    && *s_busy_workers > (pServer->m_iMaxChildren >> 1))
                    s_keep_listener = 1;
                if ((s_uid == 0 || !s_keep_listener || !is_enough_free_mem())
                    && pReq->m_fdListen != -1 )
                {
                    close( pReq->m_fdListen );
                    pReq->m_fdListen = -1;
                }
                /* don't catch our signals */
                sigaction( SIGCHLD, &old_child, 0 );
                sigaction( SIGTERM, &old_term, 0 );
                sigaction( SIGQUIT, &old_quit, 0 );
                sigaction( SIGINT,  &old_int,  0 );
                sigaction( SIGUSR1, &old_usr1, 0 );
                //init_conn_key( pReq->m_fd );
                lsapi_notify_pid( pReq->m_fd );
                s_notified_pid = 1;
                //if ( s_accept_notify )
                //    return notify_req_received( pReq->m_fd );
                return 0;
            }
            else if ( pid == -1 )
            {
                lsapi_perror("fork() failed, please increase process limit", errno);
                if (child_status)
                    child_status->m_pid = 0;
            }
            else
            {
                ++pServer->m_iCurChildren;
                if ( child_status )
                {
                    child_status->m_pid = pid;
                    child_status->m_tmWaitBegin = curTime;
                    child_status->m_tmStart = curTime;
                }
            }
            close( pReq->m_fd );
            pReq->m_fd = -1;

            if (sigprocmask(SIG_SETMASK, &orig_mask, NULL) < 0)
                perror( "sigprocmask( SIG_SETMASK ) to restore SIGMASK" );

        }
        else
        {
            if (( errno == EINTR )||( errno == EAGAIN))
                continue;
            lsapi_perror("accept() failed", errno);
            return -1;
        }
    }
    sigaction( SIGUSR1, &old_usr1, 0 );
    //kill( -getpgrp(), SIGUSR1 );
    //lsapi_all_children_must_die();  /* Sorry, children ;-) */
    return -1;

}


static struct sigaction old_term, old_quit, old_int,
                    old_usr1, old_child;


int LSAPI_Postfork_Child(LSAPI_Request * pReq)
{
    int max_children = g_prefork_server->m_iMaxChildren;
    s_pid = getpid();
    __atomic_store_n(&pReq->child_status->m_pid, s_pid, __ATOMIC_SEQ_CST);
    s_worker_status = pReq->child_status;

    setsid();
    g_prefork_server = NULL;
    s_ppid = getppid();
    s_req_processed = 0;
    s_proc_group_timer_cb = NULL;

    if (pthread_atfork_func)
        (*pthread_atfork_func)(NULL, NULL, set_skip_write);

    __atomic_store_n(&s_worker_status->m_state,
                     LSAPI_STATE_CONNECTED, __ATOMIC_SEQ_CST);
    if (s_busy_workers)
        __atomic_add_fetch(s_busy_workers, 1, __ATOMIC_SEQ_CST);
    lsapi_set_nblock( pReq->m_fd, 0 );
    //keep it open if busy_count is used.
    if (!s_keep_listener && s_busy_workers
        && *s_busy_workers > (max_children >> 1))
        s_keep_listener = 1;
    if ((s_uid == 0 || !s_keep_listener || !is_enough_free_mem())
        && pReq->m_fdListen != -1 )
    {
        close(pReq->m_fdListen);
        pReq->m_fdListen = -1;
    }

    //init_conn_key( pReq->m_fd );
    lsapi_notify_pid(pReq->m_fd);
    s_notified_pid = 1;
    //if ( s_accept_notify )
    //    return notify_req_received( pReq->m_fd );
    return 0;
}


int LSAPI_Postfork_Parent(LSAPI_Request * pReq)
{
    ++g_prefork_server->m_iCurChildren;
    if (pReq->child_status)
    {
        time_t curTime = time( NULL );
        pReq->child_status->m_tmWaitBegin = curTime;
        pReq->child_status->m_tmStart = curTime;
    }
    close(pReq->m_fd);
    pReq->m_fd = -1;
    return 0;
}


int LSAPI_Accept_Before_Fork(LSAPI_Request * pReq)
{
    time_t          lastTime = 0;
    time_t          curTime = 0;
    fd_set          readfds;
    struct timeval  timeout;
    int             wait_secs = 0;
    int             ret = 0;

    lsapi_prefork_server * pServer = g_prefork_server;

    struct sigaction act;

    lsapi_init_children_status();

    act.sa_flags = 0;
    act.sa_handler = lsapi_sigchild;
    sigemptyset(&(act.sa_mask));
    if (sigaction(SIGCHLD, &act, &old_child))
    {
        perror( "Can't set signal handler for SIGCHILD" );
        return -1;
    }

    /* Set up handler to kill children upon exit */
    act.sa_flags = 0;
    act.sa_handler = lsapi_cleanup;
    sigemptyset(&(act.sa_mask));
    if (sigaction(SIGTERM, &act, &old_term) ||
        sigaction(SIGINT,  &act, &old_int ) ||
        sigaction(SIGUSR1, &act, &old_usr1) ||
        sigaction(SIGQUIT, &act, &old_quit))
    {
        perror( "Can't set signals" );
        return -1;
    }
    s_stop = 0;
    pReq->m_reqState = 0;

    while(!s_stop)
    {
        if (s_proc_group_timer_cb != NULL) {
            s_proc_group_timer_cb(&s_ignore_pid);
        }

        curTime = time(NULL);
        if (curTime != lastTime)
        {
            lastTime = curTime;
            if (lsapi_parent_dead())
                break;
            lsapi_check_child_status(curTime);
            if (pServer->m_iServerMaxIdle)
            {
                if (pServer->m_iCurChildren <= 0)
                {
                    ++wait_secs;
                    if ( wait_secs > pServer->m_iServerMaxIdle )
                        return -1;
                }
                else
                    wait_secs = 0;
            }
        }

#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
        *s_avail_pages = sysconf(_SC_AVPHYS_PAGES);
//        lsapi_log("Memory total: %zd, free: %zd, free %%%zd\n",
//                  s_total_pages, *s_avail_pages, *s_avail_pages * 100 / s_total_pages);

#endif
        FD_ZERO(&readfds);
        FD_SET(pServer->m_fd, &readfds);
        timeout.tv_sec = 1;
        timeout.tv_usec = 0;
        ret = (*g_fnSelect)(pServer->m_fd+1, &readfds, NULL, NULL, &timeout);
        if (ret == 1 )
        {
            int accepting = 0;
            if (s_accepting_workers)
                accepting = __atomic_load_n(s_accepting_workers, __ATOMIC_SEQ_CST);

            if (pServer->m_iCurChildren > 0
                && accepting > 0)
            {
                usleep( 400);
                while(accepting-- > 0)
                    sched_yield();
                continue;
            }
        }
        else if (ret == -1)
        {
            if (errno == EINTR)
                continue;
            /* perror( "select()" ); */
            break;
        }
        else
        {
            continue;
        }

        if (pServer->m_iCurChildren >=
            pServer->m_iMaxChildren + pServer->m_iExtraChildren)
        {
            lsapi_log("Reached max children process limit: %d, extra: %d,"
                     " current: %d, busy: %d, please increase LSAPI_CHILDREN.\n",
                     pServer->m_iMaxChildren, pServer->m_iExtraChildren,
                     pServer->m_iCurChildren,
                     s_busy_workers ? *s_busy_workers : -1);
            usleep(100000);
            continue;
        }

        pReq->m_fd = lsapi_accept(pServer->m_fd);
        if (pReq->m_fd != -1)
        {
            wait_secs = 0;
            pReq->child_status = find_child_status(0);

            ret = 0;
            break;
        }
        else
        {
            if ((errno == EINTR) || (errno == EAGAIN))
                continue;
            lsapi_perror("accept() failed", errno);
            ret = -1;
            break;
        }
    }

    sigaction(SIGCHLD, &old_child, 0);
    sigaction(SIGTERM, &old_term, 0);
    sigaction(SIGQUIT, &old_quit, 0);
    sigaction(SIGINT,  &old_int,  0);
    sigaction(SIGUSR1, &old_usr1, 0);

    return ret;
}


int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq )
{
    int             fd;
    int             ret;
    int             wait_secs;
    fd_set          readfds;
    struct timeval  timeout;

    if (s_skip_write)
        return -1;

    LSAPI_Finish_r( pReq );

    if ( g_prefork_server )
    {
        if ( g_prefork_server->m_fd != -1 )
            if ( lsapi_prefork_server_accept( g_prefork_server, pReq ) == -1 )
                return -1;
    }
    else if (s_req_processed > 0 && s_max_busy_workers > 0 && s_busy_workers)
    {
        ret = __atomic_load_n(s_busy_workers, __ATOMIC_SEQ_CST);
        if (ret >= s_max_busy_workers)
        {
            send_conn_close_notification(pReq->m_fd);
            lsapi_close_connection(pReq);
        }
    }

    if ( (unsigned int)s_req_processed > s_max_reqs )
        return -1;

    if ( s_worker_status )
    {
        s_worker_status->m_tmWaitBegin = time( NULL );
    }


    while( g_running )
    {
        if ( pReq->m_fd != -1 )
        {
            fd = pReq->m_fd;
        }
        else if ( pReq->m_fdListen != -1 )
            fd = pReq->m_fdListen;
        else
        {
            break;
        }
        wait_secs = 0;
        while( 1 )
        {
            if ( !g_running )
                return -1;
            if (s_req_processed && s_worker_status
                && s_worker_status->m_iKillSent)
                return -1;
            FD_ZERO( &readfds );
            FD_SET( fd, &readfds );
            timeout.tv_sec = 1;
            timeout.tv_usec = 0;
            if (fd == pReq->m_fdListen)
            {
                if (s_worker_status)
                    __atomic_store_n(&s_worker_status->m_state,
                                     LSAPI_STATE_ACCEPTING, __ATOMIC_SEQ_CST);
                if (s_accepting_workers)
                    __atomic_fetch_add(s_accepting_workers, 1, __ATOMIC_SEQ_CST);
            }
            ret = (*g_fnSelect)(fd+1, &readfds, NULL, NULL, &timeout);
            if (fd == pReq->m_fdListen)
            {
                if (s_accepting_workers)
                    __atomic_fetch_sub(s_accepting_workers, 1, __ATOMIC_SEQ_CST);
                if (s_worker_status)
                    __atomic_store_n(&s_worker_status->m_state,
                                     LSAPI_STATE_IDLE, __ATOMIC_SEQ_CST);
            }

            if ( ret == 0 )
            {
                if ( s_worker_status )
                {
                    s_worker_status->m_inProcess = 0;
                    if (fd == pReq->m_fdListen)
                    {
                        if (s_keep_listener == 0 || !is_enough_free_mem())
                            return -1;
                        if (s_keep_listener == 1)
                        {
                            int wait_time = 10;
                            if (s_busy_workers)
                                wait_time += *s_busy_workers * 10;
                            if (s_accepting_workers)
                                wait_time >>= (*s_accepting_workers);
                            if (wait_secs >= wait_time)
                                return -1;
                        }
                    }
                }
                ++wait_secs;
                if (( s_max_idle_secs > 0 )&&(wait_secs >= s_max_idle_secs ))
                    return -1;
                if ( lsapi_parent_dead() )
                    return -1;
            }
            else if ( ret == -1 )
            {
                if ( errno == EINTR )
                    continue;
                else
                    return -1;
            }
            else if ( ret >= 1 )
            {
                if (s_req_processed && s_worker_status
                    && s_worker_status->m_iKillSent)
                    return -1;
                if ( fd == pReq->m_fdListen )
                {
                    pReq->m_fd = lsapi_accept( pReq->m_fdListen );
                    if ( pReq->m_fd != -1 )
                    {
                        if (s_worker_status)
                            __atomic_store_n(&s_worker_status->m_state,
                                             LSAPI_STATE_CONNECTED,
                                             __ATOMIC_SEQ_CST);
                        if (s_busy_workers)
                            __atomic_fetch_add(s_busy_workers, 1, __ATOMIC_SEQ_CST);

                        fd = pReq->m_fd;

                        lsapi_set_nblock( fd, 0 );
                        //init_conn_key( pReq->m_fd );
                        if (!s_keep_listener)
                        {
                            close( pReq->m_fdListen );
                            pReq->m_fdListen = -1;
                        }
                        if ( s_accept_notify )
                            if ( notify_req_received( pReq->m_fd ) == -1 )
                                return -1;
                    }
                    else
                    {
                        if (( errno == EINTR )||( errno == EAGAIN))
                            continue;
                        lsapi_perror( "lsapi_accept() error", errno );
                        return -1;
                    }
                }
                else
                    break;
            }
        }

        if ( !readReq( pReq ) )
        {
            if ( s_worker_status )
            {
                s_worker_status->m_iKillSent = 0;
                s_worker_status->m_inProcess = 1;
                ++s_worker_status->m_iReqCounter;
                s_worker_status->m_tmReqBegin =
                s_worker_status->m_tmLastCheckPoint = time(NULL);
            }
            ++s_req_processed;
            return 0;
        }
        lsapi_close_connection(pReq);
        LSAPI_Reset_r( pReq );
    }
    return -1;

}


void LSAPI_Set_Max_Reqs( int reqs )
{   s_max_reqs = reqs - 1;      }

void LSAPI_Set_Max_Idle( int secs )
{   s_max_idle_secs = secs;     }


void LSAPI_Set_Max_Children( int maxChildren )
{
    if ( g_prefork_server )
        g_prefork_server->m_iMaxChildren = maxChildren;
}


void LSAPI_Set_Extra_Children( int extraChildren )
{
    if (( g_prefork_server )&&( extraChildren >= 0 ))
        g_prefork_server->m_iExtraChildren = extraChildren;
}


void LSAPI_Set_Max_Process_Time( int secs )
{
    if (( g_prefork_server )&&( secs > 0 ))
        g_prefork_server->m_iMaxReqProcessTime = secs;
}


void LSAPI_Set_Max_Idle_Children( int maxIdleChld )
{
    if (( g_prefork_server )&&( maxIdleChld > 0 ))
        g_prefork_server->m_iMaxIdleChildren = maxIdleChld;
}


void LSAPI_Set_Server_Max_Idle_Secs( int serverMaxIdle )
{
    if ( g_prefork_server )
        g_prefork_server->m_iServerMaxIdle = serverMaxIdle;
}


void LSAPI_Set_Slow_Req_Msecs( int msecs )
{
    s_slow_req_msecs = msecs;
}


int  LSAPI_Get_Slow_Req_Msecs(void)
{
    return s_slow_req_msecs;
}


void LSAPI_No_Check_ppid(void)
{
    s_ppid = 0;
}


int LSAPI_Get_ppid(void)
{
    return(s_ppid);
}


#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
#include <crt_externs.h>
#else
extern char ** environ;
#endif
static void unset_lsapi_envs(void)
{
    char **env;
#if defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
    env = *_NSGetEnviron();
#else
    env = environ;
#endif
    while( env != NULL && *env != NULL )
    {
        if (!strncmp(*env, "LSAPI_", 6) || !strncmp( *env, "PHP_LSAPI_", 10 )
            || (!strncmp( *env, "PHPRC=", 6 )&&(!s_uid)))
        {
            char ** del = env;
            do
                *del = del[1];
            while( *del++ );
        }
        else
            ++env;
    }
}


static int lsapi_initSuEXEC(void)
{
    int i;
    struct passwd * pw;
    s_defaultUid = 0;
    s_defaultGid = 0;
    if ( s_uid == 0 )
    {
        const char * p = getenv( "LSAPI_DEFAULT_UID" );
        if ( p )
        {
            i = atoi( p );
            if ( i > 0 )
                s_defaultUid = i;
        }
        p = getenv( "LSAPI_DEFAULT_GID" );
        if ( p )
        {
            i = atoi( p );
            if ( i > 0 )
                s_defaultGid = i;
        }
        p = getenv( "LSAPI_SECRET" );
        if (( !p )||( readSecret(p) == -1 ))
                return -1;
        if ( g_prefork_server )
        {
            if ( g_prefork_server->m_iMaxChildren < 100 )
                g_prefork_server->m_iMaxChildren = 100;
            if ( g_prefork_server->m_iExtraChildren < 1000 )
                g_prefork_server->m_iExtraChildren = 1000;
        }
    }
    if ( !s_defaultUid || !s_defaultGid )
    {
        pw = getpwnam( "nobody" );
        if ( pw )
        {
            if ( !s_defaultUid )
                s_defaultUid = pw->pw_uid;
            if ( !s_defaultGid )
                s_defaultGid = pw->pw_gid;
        }
        else
        {
            if ( !s_defaultUid )
                s_defaultUid = 10000;
            if ( !s_defaultGid )
                s_defaultGid = 10000;
        }
    }
    return 0;
}


static int lsapi_check_path(const char *p, char *final, int max_len)
{
    char resolved_path[PATH_MAX+1];
    int len = 0;
    char *end;
    if (*p != '/')
    {
        if (getcwd(final, max_len) == NULL)
            return -1;
        len = strlen(final);
        *(final + len) = '/';
        ++len;
    }
    end = memccpy(&final[len], p, '\0', PATH_MAX - len);
    if (!end)
    {
        errno = EINVAL;
        return -1;
    }
    p = final;
    if (realpath(p, resolved_path) == NULL
        && errno != ENOENT && errno != EACCES)
        return -1;
    if (strncmp(resolved_path, "/etc/", 5) == 0)
    {
        errno = EPERM;
        return -1;
    }
    return 0;
}


static int lsapi_reopen_stderr2(const char *full_path)
{
    int newfd = open(full_path, O_WRONLY | O_CREAT | O_APPEND, 0644);
    if (newfd == -1)
    {
        LSAPI_perror_r(NULL, "Failed to open custom stderr log", full_path);
        return -1;
    }
    if (newfd != 2)
    {
        dup2(newfd, 2);
        close(newfd);
        dup2(2, 1);
    }
    if (s_stderr_log_path && full_path != s_stderr_log_path)
    {
        free(s_stderr_log_path);
        s_stderr_log_path = NULL;
    }
    s_stderr_log_path = strdup(full_path);
    return 0;
}


static int lsapi_reopen_stderr(const char *p)
{
    char full_path[PATH_MAX];
    if (s_uid == 0)
        return -1;
    if (lsapi_check_path(p, full_path, PATH_MAX) == -1)
    {
        LSAPI_perror_r(NULL, "Invalid custom stderr log path", p);
        return -1;
    }
    return lsapi_reopen_stderr2(full_path);
}


int LSAPI_Init_Env_Parameters( fn_select_t fp )
{
    const char *p;
    char ch;
    int n;
    int avoidFork = 0;

    p = getenv("LSAPI_STDERR_LOG");
    if (p)
    {
        lsapi_reopen_stderr(p);
    }
    if (!s_stderr_log_path)
        s_stderr_is_pipe = isPipe(STDERR_FILENO);

    p = getenv( "PHP_LSAPI_MAX_REQUESTS" );
    if ( !p )
        p = getenv( "LSAPI_MAX_REQS" );
    if ( p )
    {
        n = atoi( p );
        if ( n > 0 )
            LSAPI_Set_Max_Reqs( n );
    }

    p = getenv( "LSAPI_KEEP_LISTEN" );
    if ( p )
    {
        n = atoi( p );
        s_keep_listener = n;
    }

    p = getenv( "LSAPI_AVOID_FORK" );
    if ( p )
    {
        avoidFork = atoi( p );
        if (avoidFork)
        {
            s_keep_listener = 2;
            ch = *(p + strlen(p) - 1);
            if (  ch == 'G' || ch == 'g' )
                avoidFork *= 1024 * 1024 * 1024;
            else if (  ch == 'M' || ch == 'm' )
                avoidFork *= 1024 * 1024;
            if (avoidFork >= 1024 * 10240)
                s_min_avail_pages = avoidFork / 4096;
        }
    }

    p = getenv( "LSAPI_ACCEPT_NOTIFY" );
    if ( p )
    {
        s_accept_notify = atoi( p );
    }

    p = getenv( "LSAPI_SLOW_REQ_MSECS" );
    if ( p )
    {
        n = atoi( p );
        LSAPI_Set_Slow_Req_Msecs( n );
    }

#if defined( RLIMIT_CORE )
    p = getenv( "LSAPI_ALLOW_CORE_DUMP" );
    if ( !p )
    {
        struct rlimit limit = { 0, 0 };
        setrlimit( RLIMIT_CORE, &limit );
    }
    else
        s_enable_core_dump = 1;

#endif

    p = getenv( "LSAPI_MAX_IDLE" );
    if ( p )
    {
        n = atoi( p );
        LSAPI_Set_Max_Idle( n );
    }

    if ( LSAPI_Is_Listen() )
    {
        n = 0;
        p = getenv( "PHP_LSAPI_CHILDREN" );
        if ( !p )
            p = getenv( "LSAPI_CHILDREN" );
        if ( p )
            n = atoi( p );
        if ( n > 1 )
        {
            LSAPI_Init_Prefork_Server( n, fp, avoidFork != 0 );
            LSAPI_Set_Server_fd( g_req.m_fdListen );
        }

        p = getenv( "LSAPI_EXTRA_CHILDREN" );
        if ( p )
            LSAPI_Set_Extra_Children( atoi( p ) );

        p = getenv( "LSAPI_MAX_IDLE_CHILDREN" );
        if ( p )
            LSAPI_Set_Max_Idle_Children( atoi( p ) );

        p = getenv( "LSAPI_PGRP_MAX_IDLE" );
        if ( p )
        {
            LSAPI_Set_Server_Max_Idle_Secs( atoi( p ) );
        }

        p = getenv( "LSAPI_MAX_PROCESS_TIME" );
        if ( p )
            LSAPI_Set_Max_Process_Time( atoi( p ) );

        if ( getenv( "LSAPI_PPID_NO_CHECK" ) )
        {
            LSAPI_No_Check_ppid();
        }

        p = getenv("LSAPI_MAX_BUSY_WORKER");
        if (p)
        {
            n = atoi(p);
            s_max_busy_workers = n;
            if (n >= 0)
                LSAPI_No_Check_ppid();
        }


        p = getenv( "LSAPI_DUMP_DEBUG_INFO" );
        if ( p )
            s_dump_debug_info = atoi( p );

        if ( lsapi_initSuEXEC() == -1 )
            return -1;
#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
        lsapi_initLVE();
#endif
    }
    unset_lsapi_envs();
    return 0;
}


int LSAPI_ErrResponse_r( LSAPI_Request * pReq, int code, const char ** pRespHeaders,
                         const char * pBody, int bodyLen )
{
    LSAPI_SetRespStatus_r( pReq, code );
    if ( pRespHeaders )
    {
        while( *pRespHeaders )
        {
            LSAPI_AppendRespHeader_r( pReq, *pRespHeaders, strlen( *pRespHeaders ) );
            ++pRespHeaders;
        }
    }
    if ( pBody &&( bodyLen > 0 ))
    {
        LSAPI_Write_r( pReq, pBody, bodyLen );
    }
    LSAPI_Finish_r( pReq );
    return 0;
}


static void lsapi_MD5Transform(uint32 buf[4], uint32 const in[16]);

/*
 * Note: this code is harmless on little-endian machines.
 */
static void byteReverse(unsigned char *buf, unsigned longs)
{
    uint32 t;
    do {
        t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
            ((unsigned) buf[1] << 8 | buf[0]);
        *(uint32 *) buf = t;
        buf += 4;
    } while (--longs);
}


/*
 * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious
 * initialization constants.
 */
void lsapi_MD5Init(struct lsapi_MD5Context *ctx)
{
    ctx->buf[0] = 0x67452301;
    ctx->buf[1] = 0xefcdab89;
    ctx->buf[2] = 0x98badcfe;
    ctx->buf[3] = 0x10325476;

    ctx->bits[0] = 0;
    ctx->bits[1] = 0;
}

/*
 * Update context to reflect the concatenation of another buffer full
 * of bytes.
 */
void lsapi_MD5Update(struct lsapi_MD5Context *ctx, unsigned char const *buf, unsigned len)
{
    register uint32 t;

    /* Update bitcount */

    t = ctx->bits[0];
    if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
        ctx->bits[1]++;                /* Carry from low to high */
    ctx->bits[1] += len >> 29;

    t = (t >> 3) & 0x3f;        /* Bytes already in shsInfo->data */

    /* Handle any leading odd-sized chunks */

    if (t) {
        unsigned char *p = (unsigned char *) ctx->in + t;

        t = 64 - t;
        if (len < t) {
            memmove(p, buf, len);
            return;
        }
        memmove(p, buf, t);
        byteReverse(ctx->in, 16);
        lsapi_MD5Transform(ctx->buf, (uint32 *) ctx->in);
        buf += t;
        len -= t;
    }
    /* Process data in 64-byte chunks */

    while (len >= 64) {
        memmove(ctx->in, buf, 64);
        byteReverse(ctx->in, 16);
        lsapi_MD5Transform(ctx->buf, (uint32 *) ctx->in);
        buf += 64;
        len -= 64;
    }

    /* Handle any remaining bytes of data. */

    memmove(ctx->in, buf, len);
}


/*
 * Final wrap-up - pad to 64-byte boundary with the bit pattern
 * 1 0* (64-bit count of bits processed, MSB-first)
 */
void lsapi_MD5Final(unsigned char digest[16], struct lsapi_MD5Context *ctx)
{
    unsigned int count;
    unsigned char *p;

    /* Compute number of bytes mod 64 */
    count = (ctx->bits[0] >> 3) & 0x3F;

    /* Set the first char of padding to 0x80.  This is safe since there is
       always at least one byte free */
    p = ctx->in + count;
    *p++ = 0x80;

    /* Bytes of padding needed to make 64 bytes */
    count = 64 - 1 - count;

    /* Pad out to 56 mod 64 */
    if (count < 8) {
        /* Two lots of padding:  Pad the first block to 64 bytes */
        memset(p, 0, count);
        byteReverse(ctx->in, 16);
        lsapi_MD5Transform(ctx->buf, (uint32 *) ctx->in);

        /* Now fill the next block with 56 bytes */
        memset(ctx->in, 0, 56);
    } else {
        /* Pad block to 56 bytes */
        memset(p, 0, count - 8);
    }
    byteReverse(ctx->in, 14);

    /* Append length in bits and transform */
    ((uint32 *) ctx->in)[14] = ctx->bits[0];
    ((uint32 *) ctx->in)[15] = ctx->bits[1];

    lsapi_MD5Transform(ctx->buf, (uint32 *) ctx->in);
    byteReverse((unsigned char *) ctx->buf, 4);
    memmove(digest, ctx->buf, 16);
    memset(ctx, 0, sizeof(*ctx));        /* In case it's sensitive */
}


/* The four core functions - F1 is optimized somewhat */

/* #define F1(x, y, z) (x & y | ~x & z) */
#define F1(x, y, z) (z ^ (x & (y ^ z)))
#define F2(x, y, z) F1(z, x, y)
#define F3(x, y, z) (x ^ y ^ z)
#define F4(x, y, z) (y ^ (x | ~z))

/* This is the central step in the MD5 algorithm. */
#define MD5STEP(f, w, x, y, z, data, s) \
        ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )

/*
 * The core of the MD5 algorithm, this alters an existing MD5 hash to
 * reflect the addition of 16 longwords of new data.  MD5Update blocks
 * the data and converts bytes into longwords for this routine.
 */
static void lsapi_MD5Transform(uint32 buf[4], uint32 const in[16])
{
    register uint32 a, b, c, d;

    a = buf[0];
    b = buf[1];
    c = buf[2];
    d = buf[3];

    MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
    MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
    MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
    MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
    MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
    MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
    MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
    MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
    MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
    MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
    MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
    MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
    MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
    MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
    MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
    MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);

    MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
    MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
    MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
    MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
    MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
    MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
    MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
    MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
    MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
    MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
    MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
    MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
    MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
    MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
    MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
    MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);

    MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
    MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
    MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
    MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
    MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
    MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
    MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
    MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
    MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
    MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
    MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
    MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
    MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
    MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
    MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
    MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);

    MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
    MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
    MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
    MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
    MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
    MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
    MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
    MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
    MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
    MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
    MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
    MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
    MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
    MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
    MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
    MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);

    buf[0] += a;
    buf[1] += b;
    buf[2] += c;
    buf[3] += d;
}


int LSAPI_Set_Restored_Parent_Pid(int pid)
{
    int old_ppid = s_ppid;
    s_restored_ppid = pid;
    return old_ppid;
}


int LSAPI_Inc_Req_Processed(int cnt)
{
    return __atomic_add_fetch(s_global_counter, cnt, __ATOMIC_SEQ_CST);
}


PK$"#[��Y�/�/(gems/ruby-lsapi-5.6/ext/lsapi/lsapilib.hnu�[���/*
Copyright (c) 2002-2018, Lite Speed Technologies Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of the Lite Speed Technologies Inc nor the
      names of its contributors may be used to endorse or promote
      products derived from this software without specific prior
      written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


#ifndef  _LSAPILIB_H_
#define  _LSAPILIB_H_

#if defined (c_plusplus) || defined (__cplusplus)
extern "C" {
#endif

#include "lsapidef.h"

#include <stddef.h>
#include <sys/time.h>
#include <sys/types.h>

struct LSAPI_key_value_pair
{
    char * pKey;
    char * pValue;
    int    keyLen;
    int    valLen;
};

struct lsapi_child_status;
#define LSAPI_MAX_RESP_HEADERS  1000

typedef struct lsapi_request
{
    int               m_fdListen;
    int               m_fd;

    long              m_lLastActive;
    long              m_lReqBegin;

    char            * m_pReqBuf;
    int               m_reqBufSize;

    char            * m_pRespBuf;
    char            * m_pRespBufEnd;
    char            * m_pRespBufPos;

    char            * m_pRespHeaderBuf;
    char            * m_pRespHeaderBufEnd;
    char            * m_pRespHeaderBufPos;
    struct lsapi_child_status * child_status;


    struct iovec    * m_pIovec;
    struct iovec    * m_pIovecEnd;
    struct iovec    * m_pIovecCur;
    struct iovec    * m_pIovecToWrite;

    struct lsapi_packet_header      * m_respPktHeaderEnd;

    struct lsapi_req_header         * m_pHeader;
    struct LSAPI_key_value_pair     * m_pEnvList;
    struct LSAPI_key_value_pair     * m_pSpecialEnvList;
    int                               m_envListSize;
    int                               m_specialEnvListSize;

    struct lsapi_http_header_index  * m_pHeaderIndex;
    struct lsapi_header_offset      * m_pUnknownHeader;

    char            * m_pScriptFile;
    char            * m_pScriptName;
    char            * m_pQueryString;
    char            * m_pHttpHeader;
    char            * m_pRequestMethod;
    int               m_totalLen;
    int               m_reqState;
    off_t             m_reqBodyLen;
    off_t             m_reqBodyRead;
    int               m_bufProcessed;
    int               m_bufRead;

    struct lsapi_packet_header        m_respPktHeader[5];

    struct lsapi_resp_header          m_respHeader;
    short                             m_respHeaderLen[LSAPI_MAX_RESP_HEADERS];
    void            * m_pAppData;

}LSAPI_Request;

extern LSAPI_Request g_req;


/* return: >0 continue, ==0 stop, -1 failed  */
typedef int (*LSAPI_CB_EnvHandler )( const char * pKey, int keyLen,
                const char * pValue, int valLen, void * arg );


int LSAPI_Init(void);

void LSAPI_Stop(void);

int LSAPI_Is_Listen_r( LSAPI_Request * pReq);

int LSAPI_InitRequest( LSAPI_Request * pReq, int fd );

int LSAPI_Accept_r( LSAPI_Request * pReq );

void LSAPI_Reset_r( LSAPI_Request * pReq );

int LSAPI_Finish_r( LSAPI_Request * pReq );

int LSAPI_Release_r( LSAPI_Request * pReq );

char * LSAPI_GetHeader_r( LSAPI_Request * pReq, int headerIndex );

int LSAPI_ForeachHeader_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg );

int LSAPI_ForeachOrgHeader_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg );

int LSAPI_ForeachEnv_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg );

int LSAPI_ForeachSpecialEnv_r( LSAPI_Request * pReq,
            LSAPI_CB_EnvHandler fn, void * arg );

char * LSAPI_GetEnv_r( LSAPI_Request * pReq, const char * name );

ssize_t LSAPI_ReadReqBody_r( LSAPI_Request * pReq, char * pBuf, size_t len );

int LSAPI_ReqBodyGetChar_r( LSAPI_Request * pReq );

int LSAPI_ReqBodyGetLine_r( LSAPI_Request * pReq, char * pBuf, size_t bufLen, int *getLF );


int LSAPI_FinalizeRespHeaders_r( LSAPI_Request * pReq );

ssize_t LSAPI_Write_r( LSAPI_Request * pReq, const char * pBuf, size_t len );

ssize_t LSAPI_sendfile_r( LSAPI_Request * pReq, int fdIn, off_t* off, size_t size );

ssize_t LSAPI_Write_Stderr_r( LSAPI_Request * pReq, const char * pBuf, size_t len );

int LSAPI_Flush_r( LSAPI_Request * pReq );

int LSAPI_AppendRespHeader_r( LSAPI_Request * pReq, const char * pBuf, int len );

int LSAPI_AppendRespHeader2_r( LSAPI_Request * pReq, const char * pHeaderName,
                              const char * pHeaderValue );

int LSAPI_ErrResponse_r( LSAPI_Request * pReq, int code, const char ** pRespHeaders,
                         const char * pBody, int bodyLen );

static inline int LSAPI_SetRespStatus_r( LSAPI_Request * pReq, int code )
{
    if ( !pReq )
        return -1;
    pReq->m_respHeader.m_respInfo.m_status = code;
    return 0;
}

static inline int LSAPI_SetAppData_r( LSAPI_Request * pReq, void * data )
{
    if ( !pReq )
        return -1;
    pReq->m_pAppData = data;
    return 0;
}

static inline void * LSAPI_GetAppData_r( LSAPI_Request * pReq )
{
    if ( !pReq )
        return NULL;
    return pReq->m_pAppData;
}

static inline char * LSAPI_GetQueryString_r( LSAPI_Request * pReq )
{
    if ( pReq )
        return pReq->m_pQueryString;
    return NULL;
}


static inline char * LSAPI_GetScriptFileName_r( LSAPI_Request * pReq )
{
    if ( pReq )
        return pReq->m_pScriptFile;
    return NULL;
}


static inline char * LSAPI_GetScriptName_r( LSAPI_Request * pReq )
{
    if ( pReq )
        return pReq->m_pScriptName;
    return NULL;
}


static inline char * LSAPI_GetRequestMethod_r( LSAPI_Request * pReq)
{
    if ( pReq )
        return pReq->m_pRequestMethod;
    return NULL;
}



static inline off_t LSAPI_GetReqBodyLen_r( LSAPI_Request * pReq )
{
    if ( pReq )
        return pReq->m_reqBodyLen;
    return -1;
}

static inline off_t LSAPI_GetReqBodyRemain_r( LSAPI_Request * pReq )
{
    if ( pReq )
        return pReq->m_reqBodyLen - pReq->m_reqBodyRead;
    return -1;
}


int LSAPI_End_Response_r(LSAPI_Request * pReq);



int LSAPI_Is_Listen(void);

static inline int LSAPI_Accept( void )
{   return LSAPI_Accept_r( &g_req );                        }

static inline int LSAPI_Finish(void)
{   return LSAPI_Finish_r( &g_req );                        }

static inline char * LSAPI_GetHeader( int headerIndex )
{   return LSAPI_GetHeader_r( &g_req, headerIndex );        }

static inline int LSAPI_ForeachHeader( LSAPI_CB_EnvHandler fn, void * arg )
{   return LSAPI_ForeachHeader_r( &g_req, fn, arg );        }

static inline int LSAPI_ForeachOrgHeader(
            LSAPI_CB_EnvHandler fn, void * arg )
{   return LSAPI_ForeachOrgHeader_r( &g_req, fn, arg );     }

static inline int LSAPI_ForeachEnv( LSAPI_CB_EnvHandler fn, void * arg )
{   return LSAPI_ForeachEnv_r( &g_req, fn, arg );           }

static inline int LSAPI_ForeachSpecialEnv( LSAPI_CB_EnvHandler fn, void * arg )
{   return LSAPI_ForeachSpecialEnv_r( &g_req, fn, arg );    }

static inline char * LSAPI_GetEnv( const char * name )
{   return LSAPI_GetEnv_r( &g_req, name );                  }

static inline char * LSAPI_GetQueryString(void)
{   return LSAPI_GetQueryString_r( &g_req );                }

static inline char * LSAPI_GetScriptFileName(void)
{   return LSAPI_GetScriptFileName_r( &g_req );             }

static inline char * LSAPI_GetScriptName(void)
{    return LSAPI_GetScriptName_r( &g_req );                }

static inline char * LSAPI_GetRequestMethod(void)
{   return LSAPI_GetRequestMethod_r( &g_req );              }

static inline off_t LSAPI_GetReqBodyLen(void)
{   return LSAPI_GetReqBodyLen_r( &g_req );                 }

static inline off_t LSAPI_GetReqBodyRemain(void)
{   return LSAPI_GetReqBodyRemain_r( &g_req );                 }

static inline ssize_t LSAPI_ReadReqBody( char * pBuf, size_t len )
{   return LSAPI_ReadReqBody_r( &g_req, pBuf, len );        }

static inline int LSAPI_ReqBodyGetChar(void)
{   return LSAPI_ReqBodyGetChar_r( &g_req );        }

static inline int LSAPI_ReqBodyGetLine( char * pBuf, int len, int *getLF )
{   return LSAPI_ReqBodyGetLine_r( &g_req, pBuf, len, getLF );        }



static inline int LSAPI_FinalizeRespHeaders(void)
{   return LSAPI_FinalizeRespHeaders_r( &g_req );           }

static inline ssize_t LSAPI_Write( const char * pBuf, ssize_t len )
{   return LSAPI_Write_r( &g_req, pBuf, len );              }

static inline ssize_t LSAPI_sendfile( int fdIn, off_t* off, size_t size )
{
    return LSAPI_sendfile_r(&g_req, fdIn, off, size );
}

static inline ssize_t LSAPI_Write_Stderr( const char * pBuf, ssize_t len )
{   return LSAPI_Write_Stderr_r( &g_req, pBuf, len );       }

static inline int LSAPI_Flush(void)
{   return LSAPI_Flush_r( &g_req );                         }

static inline int LSAPI_AppendRespHeader( char * pBuf, int len )
{   return LSAPI_AppendRespHeader_r( &g_req, pBuf, len );   }

static inline int LSAPI_SetRespStatus( int code )
{   return LSAPI_SetRespStatus_r( &g_req, code );           }

static inline int LSAPI_ErrResponse( int code, const char ** pRespHeaders, const char * pBody, int bodyLen )
{   return LSAPI_ErrResponse_r( &g_req, code, pRespHeaders, pBody, bodyLen );   }

static inline int LSAPI_End_Response(void)
{   return LSAPI_End_Response_r( &g_req );                         }

int LSAPI_IsRunning(void);

int LSAPI_CreateListenSock( const char * pBind, int backlog );

typedef int (*fn_select_t)( int, fd_set *, fd_set *, fd_set *, struct timeval * );

int LSAPI_Init_Prefork_Server( int max_children, fn_select_t fp, int avoidFork );

void LSAPI_Set_Server_fd( int fd );

int LSAPI_Prefork_Accept_r( LSAPI_Request * pReq );

void LSAPI_No_Check_ppid(void);

void LSAPI_Set_Max_Reqs( int reqs );

void LSAPI_Set_Max_Idle( int secs );

void LSAPI_Set_Max_Children( int maxChildren );

void LSAPI_Set_Max_Idle_Children( int maxIdleChld );

void LSAPI_Set_Server_Max_Idle_Secs( int serverMaxIdle );

void LSAPI_Set_Max_Process_Time( int secs );

int LSAPI_Init_Env_Parameters( fn_select_t fp );

void LSAPI_Set_Slow_Req_Msecs( int msecs );

int  LSAPI_Get_Slow_Req_Msecs(void);

int LSAPI_is_suEXEC_Daemon(void);

int LSAPI_Set_Restored_Parent_Pid(int pid);

typedef void (*LSAPI_On_Timer_pf)(int *forked_child_pid);
void LSAPI_Register_Pgrp_Timer_Callback(LSAPI_On_Timer_pf);

int LSAPI_Inc_Req_Processed(int cnt);

int LSAPI_Accept_Before_Fork(LSAPI_Request * pReq);

int LSAPI_Postfork_Child(LSAPI_Request * pReq);

int LSAPI_Postfork_Parent(LSAPI_Request * pReq);

#define LSAPI_LOG_LEVEL_BITS    0xff
#define LSAPI_LOG_FLAG_NONE     0
#define LSAPI_LOG_FLAG_DEBUG    1
#define LSAPI_LOG_FLAG_INFO     2
#define LSAPI_LOG_FLAG_NOTICE   3
#define LSAPI_LOG_FLAG_WARN     4
#define LSAPI_LOG_FLAG_ERROR    5
#define LSAPI_LOG_FLAG_CRIT     6
#define LSAPI_LOG_FLAG_FATAL    7

#define LSAPI_LOG_TIMESTAMP_BITS (0xff00)
#define LSAPI_LOG_TIMESTAMP_FULL (0x100)
#define LSAPI_LOG_TIMESTAMP_HMS  (0x200)
#define LSAPI_LOG_TIMESTAMP_STDERR  (0x400)

#define LSAPI_LOG_PID            (0x10000)

void LSAPI_Log(int flag, const char * fmt, ...)
#if __GNUC__
        __attribute__((format(printf, 2, 3)))
#endif
;


#if defined (c_plusplus) || defined (__cplusplus)
}
#endif


#endif







PK$"#[L���(�((gems/ruby-lsapi-5.6/ext/lsapi/lsapilib.onu�[���ELF>�@@=<

02/3.4-5���ff.����Ð��H�GH+F�Hc�AVI��H�@AUATL�$�USH��tQH��H��tIH��I��L9�r�0H��I9�v'�KH�SM��sH�;�Յ��[]A\A]A^��[D��]A\A]A^ø������ff.�f����=�D���Ð��OAWD�D�_AVAUATUSD�6�^�nA��x�j׋G3GD!�3G��V���\$�ЋW�^$��D�D1��\$�!�3WA��ʋN��F���p $E��‰L$�A1�A1�D��D�^!�D1�G��;�ν�D�\$�D�E��D�V���D�T$�A!�A1�E�E���|���A��
1�A�D!�E��1�D�D��*ƇG���D1�D�!�A��1�A1�D�D�N���D�L$�E��	F0�D��!�D�nA1�D1�D�G���F�E��D�f ���D�d$�D�^(A!�A1�E�E��ؘ�i��A��
1�A�D!�1�D�D����D��ʋ^0��D1�D�!�A��1�D�E���[��D����1��!�D1�D�D�N,��A1��D�L$�G����\�E��A!�D�f8A1�E�D��"�k��A��
1�A�D!�1�D�D�N4��E���q����D�D1�!�1�D�E���Cy�D����1��!�D1�D�D�V<���1��G��!�I!�1�D�D�D$��
�E��b%���1�!�1�D�D�D$��E��@�@���1�!�1�D�D�D$���	�E��QZ^&��1�!�1�D�E��6�Ƕ����1�!�1�D�D��]/։���1�!�1�D�E��SD���1�!�1�D�E��
��؉���	�1�!�1�D�D�D$��E��0����1�!�1�D�D�D$���E�����!��1�!�1�D�E���7É��1�!�1�D�D�D$��	�E���
��1�!�1�D�D�D$��A��0�ZEA��A1�A!�A1�A�A���㩉�A��A�D1�!�1��t$�D������D��1�!�A��
�ogD1����	�1�D!�F���L*�1�D�D$�Ή���1�A��A!���B9��A1�DD$�A��A�D1���D$�����q���D�D1�1�‹D$�����0"a�mD���1�G��8�1�Ɖ��1��1�D�D�D$��	E��D꾤���1�1�D�D�D$�A�����KA���A1�A��5`K��A1�AЉ�A��p���A��1�A�D1����D1�D�1��A��	�~�(D����	1�G���'���1�����1��1�D�D�D$�A���0��A���A1�A1�AЋT$�A����2���A�1�D1�֋T$��	��
9��ى�D�D1����1��D�����1�1��C���|�A��A1��A1�A��D$�A����0eV�ĉ�A�1�D1��A��D")��D�t$��	��D�	�D1��A��
��*CD������G���#���	�1����
���	�1�D�D��9��������Ή��	��1�D�D���Y[e��\$���	�1�D�E�������D�t$�����	щ�1���D�E��3}���D�\$�
���	�1�D�D�D$���E���]����	�1�D�E��O~�oA���A���D��	�1�D�E��
��,���D�T$�����	�A��1�A��D�E��6C���D�t$���
��A���N�	�1�A���~S�A��D�E��A����A	�A1�A��5�:�A�D��A��A�D	�1�Љ�3���*�\$���D�	�D1��D��F���ӆ�[��
��]A\�A]A^	�1������։�	�1�DƉ�A�4A_���OW�G�O�W��ATI��1�U��SH��dH�%(H��$�1�H��H���H�<$t)H��$�dH3%(u<H�Ġ[]A\�f.�H�{�1�H�މ�DŽ$�L�$$���DH�
H�A(H�Q8H9�s;8u�fD98tH��0H9�w�1�Å�tH�P0H;Q0v�H�Q0�Df�H�@$@@�@,�������DUHc�SH��H��H��H�@�H��t#H�SPH�H+S@H�C@H�H�SPH�CH1�H��[]ø������f�U1҉�1�S���H�����t��t/H��1�[]�fD��t��H���‰߾[1�]�f�����ff.�SH��dH�%(H��$�1�H�T$H�t$�D$�D$���Ã��tf�|$t'H��$�dH3%(��u0H�Ġ[�f�H�L$A���Ǿ���ff.�f��� ��Hc�H�vL��H�L9���H��H)�H����S�Nf.�E��������L�I؃�H��L�G�L�E�C�H�D�G��w�I9�thH��H)�H��~SH�pH�2H�pD�H�2H�pD�XH�2�pA��E�L�@��L�Ic�A���pD�Hc�L�M�L9��i��������[�f��0��u�H��[H�1�ø����Ë��u�H��H�1��f�AVAUE1�ATUH�-SH�}(t[D��]A\A]A^��EEA������!Lc�@���D��
 DI�E1�1�A���Mc�L���H��H���t]L��1�H���K�vH�](H��H�]0H�H�]8H�CH�H�H�CH��H�H��[D��]A\A]A^�H�=A����1����H���H���H+��Hcp�G )�H����H��xsH9�AVHN�AUATUI��SHwH��D�wH���L��H��D���I��H���u!��8u
���u�D��[]A\A]A^ÐH��~���[]A\A]A^ø�����fDUSH������tMH��������u��8u
���u�H��E����H��t�(H�H��t�@��H��[]�ff.�@AWAVAUATUSH���������t8A��A��I����A��f�I�7D�����Å�-���tx���u�D��D)�H����[]A\A]A^A_��A)�E��~ڋ��t�I��f�H��)�I���~�H�PHc�H9�v�HI�H)H�x��������t���s����E)�E��AO��r���1��k���S���t-�=��t+1�����u�[�8������1�[�@�9�[����ÐAVAUATUH��SH��H��PdH�%(H��$H1��H��
fDH��H��DB u�L�d$@��H��L����D$@Ƅ$?</tc<[����:L��f�E�H������|$@*H�X�zH�5L���A�ƅ��;�EM�����H�}�lf�uL���1�H��$HdH3%(�QH��P[]A\A]A^�D�
M�l$�]f�ML���H�����|$A*H�XA���1��;:�
��1�H�H���H�Í@�=����E��uf��1�f�]�Y���D�Ef�1�H�T$)D$H�L$L��D$H�)D$ )D$0H�D$���upL�d$H��A�T$I�t$�L����L��E1�M�������EA���<�����EE1�M���"����::A�D$M��fA�$�
���������������AUI��ATU��SH��(H��$�H��$�L��$�L��$���t@)�$�)�$�)�$�)�$�)�$�)�$�)�$)�$dH�%(H��$h1����t�=���ML�d$`L��@��@��u��������L9���H�H�;H�L$HL��H��$P�D$HH�D$PH��$p�D$L0H�D$X�H��$hdH3%(��H��([]A\A]�H�H��L�H�����L�¾d1���H�HÁ��K����-�H��H�ߺUA��L��dH�����1��H�H�XZL9�����H��H�M��1�L)�H��H�;����f�H��1�L�d$`H���H�t$H�����uI��������D$�L��L��P�D$PD�L$(1��Y^Hc�L��L����H�D$L��L���P�D$P�D$$P�D$0P�D$<P�D$H��P�D$TD��l1��H��0Hc�L�����ff.�@��AWAVAUATUSH��(dH�%(H�D$1�H�=�.�D$�H�l$L�5L�-L�%@�H������A�Dž����T$�Ѓ���<~$��M��L������D��ME�1��D;=t�D;=tUD�����H��H��t�H�H1����@�1@�Ɖ�@����H�H��t�(H���h�K���������9����H�5H�N0H�V(H9�s*D�A�H�A�E��t�DH��0�8��u.H��H9�r�H�F0H�D$dH3%(uH��([]A\A]A^A_�H�N0����D$�@�1�D$�X���H�H���D����C���ff.��AWAVAUATUH��SH��H��(�=dH�%(H��$1���t1����thH�C(I��I��D�3L+cI)�H�C D�{H)���D$�H��E��E��AT��H�5�AU1�U�L$,�H�� ����t)H��$dH3%(ulH��([]A\A]A^A_�@D�H�\$H���H�߹�AQL��XH��Z����t
1��fDH�=����DAWAVAUATUSH��L�I�Z(M�j0L9��H�|$E1�E1�E1�@��B��ve�CA�l$����A�BD)�A;B�E9r�
���~ H�SH�L$��H�H)�H9���fD�CA��f��A��H��0I9�w�A�R��D)���1�)ȃ��H��[]A\A]A^A_�fDH�C H�t$H)�IcBH9����C��i�gf��f����)���f9�u������Cf��~pH�5�1���;�	����tp�CA��L�A��f�C�5���fD�C��f�C�����A�������H�5�1���;�����u���8u��L�����H��E��E��D��[H�5]�A\1�A]A^A_�fDH�t$H����������@E1�E1�E1��z���f.���UH����S��H���H����H��I��[H�5�1�]�f����1���u1��=������Ð����D��H�=�@��ATUSH��dH�%(H��$�1�H���}H�H��H�1�HLJ	H�ى�H��H)����	���H�H�{`�I��H���0H�CxH�S`L�c`� L�H)�H�CxH�CpL�H)�H�CpI��$H�Ch�H�C8H�C(H����H I���H��H�C0H��(L�cxL�cpH����l��������twH�T$H�t$���D$����t
��8kt0�����1��kH��$�dH3%(uiH�Ġ[]A\�fD�+����C�����C�1����1���H�=��1��1�����_���fD�������ff.����S���t	1ۉ�[��H�5L��
���e�H�5>��
�T�������H�=1�����tI���H�=��H���c���H�5H���H���[É��D�����1��?������H�=���H�W(H�w`HLJ�H��HLJ0H���H�W�H�VH�W�H�W�H�W�H�W�H��)���81����H�����SH��H�H��t�H���H��t�H���H��t�H�{@H��t�1�[�fD��H��tG��wBL���Hc�A�T�4��t/Hc�A�pH���H�H€:t
�H���H���1��ff.�f���H��tP��tJSHc��H��;��}H�S�HH������[������~	Hc���и����[Ã����AWAVAUATUSH�Z�H�H��H�D$H���:�G�����H���%H����I��H���I�����I��I��L��fDA���)�Hc�H����L9�Hc�IO�IvI���
H��L���H��tML)�H��L��H�XH��H��A��I��A�$��D)��EH��[]A\A]A^A_��L��H��H��H��A���L�|$I���I)�A���M���?����D���L���L�Hc�H��~�A����-���H��1��|���������v���@��AVAUATUSH������I����H��H����H��H����H���H+��E1�H����H9�Hc��HO؋��)�H�H��~)H9�H�wH��HN�H�H��I���E��L�L)�H��t6�E�u@H��H��D���H���u4��8u
���u�M��t-M��[L��]A\A]A^��H��~�I�H�H)�u���I�������D��H�O(H�W8H��LJLS���H)ʍB����H�GpH�0H�pH�@H�wp��~Hc�H�HH�� H�P�H�O8H�Gp����AWAVAUATUSH��H���H�T$H����H��H�<$�I��H�=�������HcB$H���H�@H�,�H9�r�Zf.�H��H9�vGH�3L�����u�H�CH��[]A\A]A^A_�H�D$L9��I��M9���f.�1�H��[]A\A]A^A_��H�$1�L�=L���@A�l�4��tI�4�L�������H��H��u�H�D$HcP 1���~�H�$H��L���M�tM9�s�H���H�$I�D$H�D$@IcMIcmH,$L�|
L9��)���A�\$���)����H�8H�D$�'���-t	��_����H��H��I9�t�����H�U:�t������8����IcUIcEH$H€:����������H�$Hc�Hc�A�VH��H€:�������@��AVAUATUSL��$���H��H�$L9�u�H��dH�%(H��$@1�H����H��H����H���H����H��E1�L�
L��f�H���Hc�HcT�4��t7�qH��M���
H��Ic�A��H��L�E��H�TD�T�tH��H��u�H���HcP ����H���H��L�L9���Ic�I��H��L��f�H��H�� I9���HcHHc0A��H���LcPI��HcHH��B�D�BH�J�HH�2�JA��u��H�
� L����$DI��H�
Ic� L���E��taE1��@A��I�� E9�~CA�MI�UI��A�uI�}�Ӆ��H��$@dH3%(u6H��@[]A\A]A^��D����1���@Ic��U����������ff.����AWAVAUATUSH��XH�t$ H�T$dH�%(H��$H1�H����I��H����1�E1�L�-H��L�%H��H���Hc�HcT�4��t/�HH��A��A�t�I�<�H���L�D$A�ׅ��4H��H��u�H���D�t$<HcB ���L���H��L�H�D$0I9���H�\$(L�t$@fDH�D$(A�l$Ic$A�HTTPH������A�F_L�<H�D$��O�Hcʼnl$8I�H�D$I9���M�nI��I�o�I���_@��-t�H���A�E�L9�u�H�D$I�D�t$8L�D$�L��IcD$IcT$HT$���H�D$ A�L$�Ѕ�~"I��L9d$0�-���H�l$(H����B D$<H��$HdH3<%(u'H��X[]A\A]A^A_�DI�F�v�����������ff.���H��t7H��t2H���D�@$1�E����H���H��H��D�����������f.���H��t7H��t2H���D�@(1�E����H���H��H��D���S��������f.���H����H�O`H��tz����Ѓ�tr��L�G@������H�WPL9�vH�wpL)��L�H��H�V�H�wpHc�0H�T�H�Q�����,H��(LJ(LSH�1�H�Oxø�����f.���H����H�GpH+GxH�������G�����SH�������H�C(H9C8tH���H�SpH+Sx1�H����~J�
�����u$�{H�sx����9��~H�{�������ǃ�H�S`H�SxH�Sp[�f�H�G(H9G8�c���1�����l���LJ�H�W(H�W8H�W`H�WxH�Wpø�����f���AWAVAUATUSH��XH�t$dH�%(H�D$H1�H���.H�=���GI�������;��H�G(H9G8t
H�$�H�$H�D$L�|$L�d$H�$H�l$ I��H��L)�H����H��@�@L�|$0HO�L�d$ �D$LS�BL�jH�T$8I׋�D$D��H�D$(H�l$��uA�~H�4$D����H�I9�~�I�~��H��L)�H���L��H+D$��H�t$��H�L$HdH3%(uH��X[]A\A]A^A_�H��������@AWAVAUATUSH��H�$H��dH�%(H��$1�H��I��I���H��8�H��I��H�HD��A���AW�H��SA���1�AVL��AU��H�� H��=O�Hc�M��t7L���1�H��$dH3%(u&H��[]A\A]A^A_�������ff.�@AT�~f�A��UH��SH��dH�%(H��$1�H�|$H��)$H���H�H����xH��$dH3%(u?H��[]A\É�I��D��H�51��1�H�5H���i����������ff.�f�ATUSH��H�$H��H�$H��dH�%(H��$ 1�������?/H��H�����H���H���bH�ߋH����������!�%����t�¹�����D�H�WHD���@�H��H)��</��)�Hc�Hc�H�1�H���H���JL��$�H��L���H�����H�=L������������AH��1���Ń������uRH�=H9�t
H��t�H��1��H�H��$ dH34%(����H�� []A\�fD�����������@�����4�����
�+����H��H�51�������r����r���DH�߹����������S���fD������H��H�51������������H��tv�����t]S��H��tC�uWH�C(H9C8tH���H�CpH�H��H�H��H�@����H�Cp�H���1�[�@���뢸�����ff.���H��������u��u1��f�S��H��tR�ubH�C(H9C8tH���H�CpH�H��H�H��H�@����H�Cp�H�{�:����������1�[��1�H�O@H9OPv��닸��������AWAVAUATUSH��H����H���|���I�֨�,���aH��H�t$H����>��L�{8I��H�C0L)�H9��>L�t$L+{(L��A�@L��L�f�I��M)�M����K�H��@���σ��LSL�Cp�N���I�H�D���I�0H��I�@H�KpM��~H�C(M�xI�H E1�I�@H�C8H���L�1H��M�L�I�H��H�KpH9��e���H������thI��L��M)�M���U���I9�t
H������tDL+t$H��L��[]A\A]A^A_�DM��@�@M)��(����������I�������H�t$H��L���Hk8�f.���H�������������AVL��AUI��ATI��U��S���H���u\��H�߉���A�D$�{L��ǃLS����H��u0�{L��[L���]A\A]A^�������[H�����]A\A]A^�H���ff.���AWAVAUATUSH��H����H�������H����������D$����0��xI��H��I��H���Lc��\�CHc��T���
t��
u(��H�DLc���L�H����
t�
t�L�����~6Hc�A�T���
t��
u#��H�@��~A�L�H����
t�
t�E�<A�G=���I�|$PH�H�TI9T$Hs7H��I+t$@L������2%�)�)���������I�|$PL��H��Hc�A���Mt$PH��L��I�FI�D$PA�:I�|$P�M�D$PI�I�@I�D$PA�Ic�$0fE��T8H�Ѓ�A��$0�D$H��[]A\A]A^A_��D$������ff.����H���
H����B�=����������0���AUATUSHc�H��f��D�A��<
t<
uH���؅�u�H��[]A\A]�I��H�PH��H�DI9D$Hs3H��I+t$@L������2%�)�)��������tQI�|$PH��H��A���I\$PH�CI�D$P�Ic�$0fE��T8H�Ѓ�A��$0H��1�[]A\A]ø�����S������D��AUATA��UH��SH���?dH�%(H�D$1��D$f����f��
t1�����f����H�L$dH3%(����H��[]A\A]ÐA�1Ҿ��Ã��tʼnǺ�1��H�L$A��ߺ����u#D��H������uD�������o�����߻����D� H���D�e�O����A��k���DH�}A�n��}�N������H��t����������ff.����U��SH��dH�%(H��$�1�H��H�����u/��H���H��$�dH3%(uH�Ę[]����������@��1�H�=t������AUATA�'USH�����'DN�uD������H���@�A���H��H�H����H��tH�-����Ɖlj��U�D�k H�D�cE��u<�����D�����SuG�CH�,H�C�1�H��[]A\A]�@A�|$�C�{�˸�����ك�ÉS�ff.�@��H�H��t�8�ff.�f���H��BH�B(H�R8H9�s��H��0H9�w�H�H��t	���H�H��t	����fD��H�H�H;�wH��H�H;�����ff.�@��ATUSH��H�� dH�%(H�D$1�H�D�`�H�SX����H�kXH�-�H����H�H�H��tH�1�1���H�-�E��H�H��t��{1��F�����uH�H��tA�D9 ~����ut�;���u]H�LS�[H��H�$��D$��H��߉D$��1�H�L$dH3%(u)H�� []A\�D����������t�����H�SH���@H�Xt1��H�SXH�BH�B�{��C����1�[���AWAVAUATUSH��HH�H�|$H��$�L�edH�%(H��$81����H����L��DŽ$(H��$��H�H������cH����L��DŽ$(H��$��H�H������H�H�������H�H��
�����H�H�������H�D$1�E1�L�d$ �L�|$ǀ��D$H�H��t	H�=��1��I��L9�t71���������L���P���C��t�S�����D$fD�V�H��L��H�1���H�Hc;��;M��L��H�D$H�D$�����������?)ѺH��1�H	T� 1��Ń����������8��1�H�5��1ҿH�5�1ҿH�5�1ҿH�5�1ҿ
H�5�H��$8dH3%(���kH��H[]A\A]A^A_�fDH�H��udD�C�S�K�
D9���H�A�����H��tD��H�51�������M��� �������fDD�0D�CE��~�E��~����D�A��u���D$�t$9��/������������D�;�)��A��H�D$D�pA���uc��0���k������b���H�=D����j���f.�H�=���������H�=���������1�1����H�\$H�CX�����������=�f����=�D��H�H��t�x�ff.����H�H��t��x�x����H�H��t��~�x����H�H��t��~�x����H�H��t�x�ff.�����=�D����D�������D��AUATUH��H�=SH��8dH�%(H��$(1��H��tH��� �H�=��H�=�H���E1��
H�������H�=�H��t�
1�H����H�=�H��H��t�
1�H���I��A��WE1�H�=�H��t�
1�H����H�=�H��tH�Ǻ
1�����H�=�H�����H�=�H��tH�Ǻ
1����������H�=�H����1��
H������OH�=�H��tH�Ǻ
1�����H�=�H��tH�Ǻ
1�����H�=�H��tH�Ǻ
1�����H�=�H��tH�Ǻ
1�����H�=�H��t�H�=�H��t�
1�H�������_H�=�H��t�
1�H����D���E����H�=�H�����=��u	�P��5����H�=�H�����
1�H�����…�t������H�H�H����H�H����D�L�L�
L��C�
H��L���������t@H�ֹL����€���D	�t%H��tAH�H��t9�H��L���������u�H��fDH�JH��H�J�H��u�H�H��u�1ۉ�H��$(dH3%(��H��8[]A\A]�fD�H����D����<G�~A��<MED�A������s���D��H�H��_���������@H�=�H���������fDH�=�H����������fDA���f��@��#���f�����fD1�E��H������H��8�����H�=�H��H�H����H�5H���H��H��H�����-������H�5H���H�5H��I��H��H�5H���H�5H��H����~H�5H���H�H�=H���~A�ԅ��L���H�=�H�=�H��$���@H��H�$H�D$����DH��H��$���$�����t
�1҃8k�‰����H�=�H��t1��
H�����~�H�=�H��t1��
H�����~�H�=�H��H���iH�Ǻ�1�1���Ã����H�T$�ƿ�������D$(?���H�5���H�������H�H��t�xc�@d�x��@�D�
E���9���D�E���)����Z���f�H�=��H���K����]����
��u
�'��������'�������)���f��Յ�tbH�H���-�������DH��H�5�1�������������A��Hc��L�%H��H��a�����Å�t��=������u
��5����`���H��H�5�u���H��H�5�1�������H��H�5�F���ff.����AVI��AUE��ATI��UH��SH��t��4H��u!�(fDH��H���H��L����H�]H��u�M��tE��L���[1�]A\A]A^ÐIc�L��L�������H�#Eg����H�GH�H��ܺ�vT2H�G����AWAVA���AUI��ATUH�oSH��1�H���G�O�@�ƉWD���������W��?t;A�ĉ�D��H��H�|�@D)�A9�rhA��G�t4�L��L��H��L���9���A��?vWE�f�A��I��I��I�H�޺@H��H��@�H��L������L9�u�A��?D��L��H��H��[]A\A]A^A_�I�������ATL�fUH��S�FH�����?��L�H�z���?)ƒ�w=��t1������9�r�L��H������f�CAD$AD$ I�D$0��71�)��H�CH��L��H�CP�?����oH�{1�H��MH�H�CPH)��KX���H�[]A\�ff.�f�AWAVAUATUSH��dH�%(H��$�1�H��t^� �I���A�����f�Mcg I�oA�_@L��H����H���uM��8u
�=��uٽ����H��$�dH3%(����
H�Ĩ[]A\A]A^A_�f���~�A��A������u���I���ALJ�f�8LS�|�x�r�@t�P�Hf�@�H�P�X���N������	M�g���A;G �ZA���9�~u���E�o)�H�Hc�I��H��L��D���H���u$��8������5��u�����������A��M�gA���9��I�D$,H�D$Hc�I�I���D�hA�����h(A9��}A�� �/Hc�I���H�4@H���H���A���I���I����h$A9��}A�� ��Hc�I���H�4@H���H����A���I���I���H�l$�p(I���L��H�����������I���I���L��p$�������hM���Ic@���o9��gIcP���[9��SIcp���G9��?IcH���39��+I�H�H�H�H�I���H�T$I���Ic@ H)�I���H��H��I���H��H�H���I���H�I���IcHI���H�H��H�D$I9���E����1�D�L�4��t9�d�<B�9�ZH��H��u�IcP ���kI���H��H�H9�r*�RP9�!�P9�P9�H��H9��-�9�~�H�5�1��H�5�1�����>���f�H�� �H��� ���I�GA�G  I�������P�Hf�@	f�@
�H�H�P�P�H�H�P�P�H�H�P�P�H�H�P�P�H�H�P�Pf�@f�@f�@�H�H#�P�P �H �H'�P#�P$�H$�H+�P'�P(f�@f�@!f�@%�H(�P+f�@)I������1��
fDI���HcȋL�4��t#f�BI���H�T�4�
�rf�B@�2�JH��H��u�M���IcP ����I���H��H�H9������pH��@�p��p�H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��p��H��H�@�p��H�H9�w�M���A�pI����b���Ic@I���H����0�ALJ���t`�
A������1������L��Hc��I��H������I�GA�o I����u���I���D�%D�-�B(A��A���1Ic�H�4II���L��I�
�9�H�qH�=����������I�J�D�B(�9�xH�qH�=���������XI�J���B(��$�A�D$I���KA�zH�L$�;M�bfoL�t$ L���AoL$AT$M�l$)�$��� L��L���H�L$�L��H���L��L���H��$�I�D$H��$�I3L$H1�H	���D�$$D�l$E����D��D�l$�H�=I��H��������I��D������M���H�=t"L��D��L����������������P�|$������E��t$A9u��H�t$�������D���������5���$A�?D�5���t�A�����H�5L���H��tH�����H�f�)�#���A��H�51��H��@�������H�5�1������L���H��������
1�H���I������H�5�1��H�5�1��D�%�D��D$�H�=I��H��tZE���W����7����E1�1�1�1�����������H�=����H�5�1������E��|$������M���2����;�����|$������E������1�H�5L���u������I�}��������1�H�5L���K�����fD�=������-�E���D$A���I���F������H�5�1��������H���H)���H�5�H��1������1�H�5L�����������
����1�H�5L�������A�#��L��H�
H�����1�H�5L���a����ff.����AVAUATUSH��dH�%(H��$�1��D$H���H�������	�;1�L�l$L�d$L�t$H�k�l���������{�ul�;�����L��L���D$���C�����H�H��t�@��H�H��t��{1�����f�|$���=u|H���4��tH��舴��H�������d���1�H��$�dH3%(u}H�Ġ[]A\A]A^�D����������������������{�H�5�H���f����ы{L���A���;����ff.���AWAVAUATUSH���D�=dH�%(H��$�1�E���xH���H�-H�����}����;�DH�-H��t1��H�ED�E���H��$L�|$PD�cA����:E1�A�f�D�
E����D�E��tH�H��t
�@f����L��H��1���H�Ic��D��H�D$PH�D$X����A���?)ѺH��H	��D9#��1�1�A�|$M��H��D9#������H�H��t
�@D9#��A��D9���1�葳��������f������H��$�dH34%(���'	H���[]A\A]A^A_��K���L��$�H�����DŽ$hM�l$H��$�L���H��$L��H��H�D$@����AH����L��DŽ$hH��$��H��$�L��H��H�D$0����PH��$�L��H��H�D$8����+H��$`L��
H��H�D$(����H��$ L��H��H�D$H�A�Dž���H�D$PE1�L�l$`H�D$H��$�H�D$H��$`H�D$f�D�%E����H�H��t	H�=��1��I��L9�t<1��ձ������L���5����E���D�uE���M��E1���V�H��L��H�1���H�Hc}��}L�D$L��H�D$PH�D$X�����������?)ѺH��1�H	T�`1��������������8�����H�t$(1ҿ
�������x������=�����������_����5��tH�H��t
�@f���,���D9#�
D������C�����H�H��t�@��H�H��t�D�c1�D���N����
�����=�����{�H�5�H����������H�H��t�*H�H�������B���(���@H�H��t�@��H�H����������@��8�B����-���DA��D9�����M�����=���������������=�����H��
H��t��D��H�H��t�
�A9����������H�H��tD��҉T$$D�E~:E��~5����T$$A���A������A��u������D�E�U�M�
D9�vH�A�����H��tD�H�5�1�����������D$��0������������H�=��T$���fD�}蠩���C�����1��m���H�|$I���H�|$��H�T$H�t$1�����6���������1�EM��tA�M�gM�g�{E1���C����H�t$1ҿ��������H�=����f��;�������>���fD�D$$��0���d������T$$�W���H�=�T$��T$����fDD�#A�����������fD����R���D�E���B���H�H���2����9�����{�H�5�H�{�w������H�=�����H�=�0�M������A����H������…��
H�{����H�������������H�=�����������H�t$1ҿ�����H����L�=�H��H�H��tH�1�1���L�=A�G��H�H��t��{1�蝦��D�-E��uH�H��t!�E�9~�������;���t������H�t$@1ҿL��$��H�t$01ҿ�H�t$H1ҿ�H�t$81ҿ�H�t$(1ҿ
��kH�LSH��$����$���L��$�������H�=�������%�����������,���H�=��Q���H�H��t*f�C1��C�D$�C���C��T$H�C(H�C �����fD���=��ff.�@��H�������,����LSLSLSLS����������������GA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realign
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONS
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignGA$3p1113GA$running gcc 8.5.0 20210514GA$annobin gcc 8.5.0 20210514GA$plugin name: annobinGA*GOW*�GA*GA+stack_clashGA*cf_protection
GA*FORTIFYGA+GLIBCXX_ASSERTIONSGA*GA!GA+omit_frame_pointerGA*GA!stack_realignAnonymous mmap() failedlocalhost%02d:%02d:%02d [%s] [UID:%d][%d] %.*syesnosystem()%s, errno: %d (%s)
/dev/nulllibpthread.sopthread_atforkHTTP_[UID:%d][%d] %s:%s: %s
LSAPI: jail() failure./etc/Can't set signalsaccept() failedLSAPI_STDERR_LOGPHP_LSAPI_MAX_REQUESTSLSAPI_MAX_REQSLSAPI_KEEP_LISTENLSAPI_AVOID_FORKLSAPI_ACCEPT_NOTIFYLSAPI_SLOW_REQ_MSECSLSAPI_ALLOW_CORE_DUMPLSAPI_MAX_IDLEPHP_LSAPI_CHILDRENLSAPI_CHILDRENLSAPI_EXTRA_CHILDRENLSAPI_MAX_IDLE_CHILDRENLSAPI_PGRP_MAX_IDLELSAPI_MAX_PROCESS_TIMELSAPI_PPID_NO_CHECKLSAPI_MAX_BUSY_WORKERLSAPI_DUMP_DEBUG_INFOnobodyLSAPI_DEFAULT_UIDLSAPI_DEFAULT_GIDLSAPI_SECRETLSAPI_LVE_ENABLELVE_ENABLEliblve.so.0lve_is_availablelve_instance_initlve_destroylve_enterlve_leavejailLSAPI_PHP_LSAPI_PHPRC=packetLen < 0
packetLen > %d
Bad request header - ERROR#1
ParseRequest error
SUEXEC_AUTHSUEXEC_UGIDLSAPI: setgid()LSAPI: initgroups()LSAPI: setgroups()LSAPI: setuid()Bad request header - ERROR#2
lsapi_accept() errorPragma: no-cacheRetry-After: 60Content-Type: text/htmlDEBUGINFONOTICEWARNERRORCRITFATALAcceptAccept-CharsetAccept-EncodingAccept-LanguageAuthorizationConnectionContent-TypeContent-LengthCookieCookie2HostPragmaRefererUser-AgentCache-ControlIf-Modified-SinceIf-MatchIf-None-MatchIf-RangeIf-Unmodified-SinceKeep-AliveRangeX-Forwarded-ForViaTransfer-EncodingHTTP_ACCEPTHTTP_ACCEPT_CHARSETHTTP_ACCEPT_ENCODINGHTTP_ACCEPT_LANGUAGEHTTP_AUTHORIZATIONHTTP_CONNECTIONCONTENT_TYPECONTENT_LENGTHHTTP_COOKIEHTTP_COOKIE2HTTP_HOSTHTTP_PRAGMAHTTP_REFERERHTTP_USER_AGENTHTTP_CACHE_CONTROLHTTP_IF_MODIFIED_SINCEHTTP_IF_MATCHHTTP_IF_NONE_MATCHHTTP_IF_RANGEHTTP_IF_UNMODIFIED_SINCEHTTP_KEEP_ALIVEHTTP_RANGEHTTP_X_FORWARDED_FORHTTP_VIAHTTP_TRANSFER_ENCODING%04d-%02d-%02d %02d:%02d:%02d.%06d Child process with pid: %d was killed by signal: %d, core dumped: %s
Possible runaway process, UID: %d, PPID: %d, PID: %d, reqCount: %d, process time: %ld, checkpoint time: %ld, start time: %ld
gdb --batch -ex "attach %d" -ex "set height 0" -ex "bt" >&2;PATH=$PATH:/usr/sbin lsof -p %d >&2Force killing runaway process PID: %d with SIGKILL
Killing runaway process PID: %d with SIGTERM
Children tracking is wrong: Cur Children: %d, count: %d, idle: %d, dying: %d
LSAPI: LVE jail(%d) result: %d, error: %s !
Invalid custom stderr log pathFailed to open custom stderr logCan't set signal handler for SIGCHILDReached max children process limit: %d, extra: %d, current: %d, busy: %d, please increase LSAPI_CHILDREN.
LSAPI: failed to open secret file: %s!
LSAPI: failed to check state of file: %s!
LSAPI: file permission check failure: %s
LSAPI: failed to read secret from secret file: %s
LSAPI: Unable to initialize LVERequest header does match total size, total: %d, real: %ld
LSAPI: missing SUEXEC_UGID env, use default user!
LSAPI: SUEXEC_AUTH authentication failed, use default user!
LSAPI: lve_enter() failure, reached resource limit.prctl: Failed to set dumpable, core dump may not be available!sigprocmask(SIG_BLOCK) to block SIGCHLDsigprocmask( SIG_SETMASK ) to restore SIGMASK in childfork() failed, please increase process limitsigprocmask( SIG_SETMASK ) to restore SIGMASKCache-Control: private, no-cache, no-store, must-revalidate, max-age=0PID<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>508 Resource Limit Is Reached</TITLE>
</HEAD><BODY>
<H1>Resource Limit Is Reached</H1>
The website is temporarily unable to service your request as it exceeded resource limit.
Please try again later.
<HR>
</BODY></HTML>






	


�^�d/4-////%-/Ga'9(�_intG�)@/G��G�@�@�G�@�G���������G����`<E�������!��<|/4�G��@B@+/000000 0@0��4<�G
8�"	S-p"�.$0
�5
�=�>�@
�A
� C	�$E
�(J
�0NL8PX@[+H\+X]+hj$xp4G-	-�	N�1�	ooGGXa�&�&	E�18�:	;�1?A
�B
�C�1GOI	J�K�1 O�Q	R�S
�TU1a�c
Ed
EC^�&e�&g�1 Y[E]ah
�1l5n�o
�1tfvEw
�x@Cp3�&5�&<�&D�b_rtL&VO&i�&p&y5��G1�$	+&	�(	�*	�0	�{	f|�HCIRT �Cv&"7&$	�R� � � E+v"��&T.1	��4��c�	�G@4�H�H�//�-Gldy"m
-91�1�;	�C�m�GFy�<�d(�e���GfI@I@IEIE"�1�	3�6	|7	|8	|9	| :	|(;	|0<	|8=	|@@	|HA	|PB	|XD�	`F�	hH�pI�tJ�xM9�NN�O�	�Q�	�Y
��[�	�\�	�]�	�^	E�_
�`��b�	�g+J�	��	G�	J�	J�	�
G4�'�
�	<
'�
'�
' �	T
h4I
' T
X@!�
	

!�!"!�!��
!��
""F"E"#!�X@$�
i0%9"#��#��#�
�4���G
"&4&6	�&7	��<|"0'1�'3	|'4	|'6�'7�'8	|'9	| ':	|(jtm8(,
(	�(
�(�(�(
�(�(�(�(� (�((0|<
G')�,
')��')��')�,
')��')��H*!B@,H�	

 !"#$%&'()*+,-./0123456789:;<<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������'-$|'-2�'-7�'-;�.U.m.�4�/�"/*/!B@/)�!)./23\^bgl�����00/{�C/�&/�
&/�-&/�=�-G�=G�MG"/�h/�	�4M'/�h'/�h"/��/��/��/�/��-�GK/,/�/�/�/M/�K005�07�08�09�0:�0;
F0<�0=	| 0>�(�,"n1�1�1 
���GkB@2,�	

C2q�&2s9&2t"2k2m
�2n
�2o
�2p
�2u�",2��2� �2�
92�
92�
92�
92�
92�
92�
9 2�
9$2�
9("�2��2��2�
�4��G9�G"2�2�
92�
92�
92�
9"2�G2�
92�
9"2�o2�"�2�"/"
/�
1|
2|
3�
4�k	
:�
<�
=�
?�
@�
B|
C� 
E|(
F|0
G|8
I|@
J|H
K|P
L!VX
O�`
P�h
Q�p
R�x
T'\�
V'b�
W'h�
X'h�
Y'��
Z'��
\'n�
]'t�
_|�
`|�
a|�
b|�
c|�
d��
e��
f�
g�
h��
i��L
k'zL
m'G(L
n'�8L
oE	"0pVr
�s
�uhv�w�x�z�{� |�(��v����Ga�=G�
q�'
s�
w��9��  �  � EM
X��9� �    $�EM
x7=RH H�"XO�YbufP=Q�YinR���G-�G?]!NB@j�~���	���	��	��	��	��	��	��	��	��	��	��	9� � � ��	��
H	�
H	�
H	��	�|	��	��	�	�	��	l��	�"G�	�*	^G�N	��G�t	�N	�t	�G��	M>CQ�	�L	�L	�@	�	J� 	l E	m�� 	� 9��  � � 	� 	� 9�#! �  � 9 9 #!�	@!	!9�Z! �  #!	
g!F!9��! �! |'�!	m!�
�		�
�	�
��
�	�#�	�#�	�*"G&%"	K ��"�������
�	K@�
V#�
	��
	��
	��
	��
	��
	��
	��
	��
	� �
�(�
�0�
�8M�
�"�
z#	V#
@	�	�	
�	
#�	
-�	
�	
�	H�!���x$2cnt�!�U����$2pid�'�U�	�:�
Y�O%2buf�'#!U#in�<O%a��b��c��d���(d��y'd#y'#ctxdH'f@pgy'`�w	&��}�q�`�|	d&��}�q�
`�	�&��}�q��T0
����&������
`��@'��}�q��$^'UuT|�$UuT|-N(3���)#ctx3/'#buf3I�)#len3W@t5�;�(pCy'S��G
?($��$��$��
��J	�(��������U|����v"T�TQ�$U}Tv
��S	*)��������UvTs@Q@
��\z)������n���$UuTv4($(��)2ctx$-'U7
�)!buf(y'
6@t�����5+�*5+�4��H;+�'�2�
v���*������*Us�[�*U|Tszq+U|�jU|T~Q} $ &�ok�	��9#fpk,�pmchn
�no	�p	�5,��
��}�U4Tw��
T,��T0Q:
���
�,��T0Q:����,��UsT0Q:���5-��T0Q:���
�-��T0Q:���
�-��T0Q:���.��T0Q:���
i.��T0Q:���
�.��T0Q:���
/��T0Q:���
P/��T0Q:����/��T0Q:���!�/��T0Q:
�:�B3�:�:N�:%3�:����0��T0Q:���0��T0Q:
#�25B��}NH�M}1e�Y�'�UvT0Q
��S
�14�'�3�U1TsQ��}ʊg
T2��ۊ@�UsT	Q@L�l2Us���2UL��2Us��UT	QvY��2U	Y�	3U	Y�U	f�U	
�{�	�5�{Ռ��3��T0Q:
z�	�4>�>74�r��"4Ts�Us��]4U	T
���4UsT	��
[��5m���4UsT	��5UsT	��,5UsT	��Q5UsT	��v5UsT	���5U	��ʳY��5U	Y�U	;��W6%�;O";#;Y�2x�6k�%2w���~����}׳�6U2T��~Qw�Y�7U	�9Y�,7U	Y�K7U	Y�j7U	Y��7U	Y��7U	�;Y��7U	Y��7U	�<ytY�,8U	Y�K8U	G<Y�w8U	�;Y��8U	�;Y��8U	<Y��8U	Q;Y�'9U	Y�F9U	�^9Us�<Y��9U	Y��9U	Q;{X�9TvQ
| $0.�MX�]�":!p],	_
":�3:=G�E�`:
E-	G	�%��:!p%)
%2|
%=�	'
�:len(	�end)|��:=G��;i�	�pw��!)p�7�
2;env�!)del�!D���T��D���(���;*�$�U(���;*�*�U(��<*�'�U(��G<*�&�U(��v<*�$�U(���<*�"�U(���<*��U(��	=���
��
��H�
-5+fd�
�ret�
��
��
���~�
E��t;�=	
�	
�5
>__d
���U| $ &585>8!�
�O�
�E�O�O�O�O��wP��yP��z%P��{2P��|?P��~LPYPfPsP�P�P�P��t�P��t�P��u�P��vN�P<?�P�P>�P	p?�P��>QT�?Q��?U
���
y��@y!y��
��9C@��������7�@�����*�UvT|Q@�T7��@U}C�
AUAT|Q��t7�"AU}C�GAU?T|Q��tC�lAU2T|Q��tC��AU:T|Q��tC��AU3T|Q��t3�AU	O��AU0��KQ
BU|[�%BUV3KBT}Q0R0X��t�C�|BU:T��tQ0���BUT	��BU��[W�V�BUu7��BU��th�CU��tTAt�DCU0T��tQ��t��L�t��CU2T��tQ���CU	���CU	���CU	��DU	��8DU	��t�iDU2T��tQ0���3�DU0T0Q	���DT0L�C��DUAT��tQ0C�EU?T��tQ0C�8EU3T��tQ0C�\EU2T��tQ0C��EU:T��tQ0���EU	Q��U	
?yj"�FQy-?y+Qy+�y	#/�y+�y#�y�y*�T	Q8ly�

9G~y+�y�y�y*�T	Q8zqQGUsO�hGU03�GU|TvQ0R0X��[W�GU|���GU|T0�Q��HU	L���GHUs?Ãs�x_HUs��HUs?Ãsqp�HUsO��HU0�M
���MM
.5+O
4P
4Q
���}R
E��}S
�retT
�V
z#EactX
���~;�I	�
	�	�
	�5�I__d�
	���;1J�
��#JU
���T7�VJU|C��JUATvQ	7��JU|C��JU?TvQ	C��JU2TvQ	C�KU:TvQ	C�@KU3TvQ	3[KU	O�rKU0��KQ�KU}[��KUV3�KT|Q0R0X�C�	LUAT	Q0C�2LU?T	Q0C�[LU3T	Q0C��LU2T	Q0C��LU:T	Q0���LUT	��LU��[W��)MU	��HMU	��gMU	�VMUu�>
�@�N>
+5+5NC
4O�U0L�
�p��O
*5+
	�
y6
GOy!y�@
��7�N����
��9O�������*�UsTwQ@�����3�OU0T0Q	���OT0L�Q�:�Q
:@z#
;95+act=�	=�	=%�	=/�	>�	>�	?�	@�retA�pidB�	C4	D4	E�	FE	H�	I�F�P	�	�	�	�FQ__d�	�)	��D/�1�T+�:�
6��R�,��	��	��	��	�������%RUT	��<RT9��dRUT	��{RT?�Z���RUT	�RUsT��:�
+��T�3��A��
�T��wi�)�	�S����z���UsT
Q1R
X	���ST0��r���TUT	R��w�X~Y����=TUs˴TTU0��sTU	���T=G�6�����U�|�	��	�`�
�cU��}�q��UsT}Q|ش�UU}T|Q3R!X	�Y}����U	7C
:V
C!�	E	�pidE�	F
�	G
�	H�)	T�	V(.Z��V4�5�6�k�,W2pid4�U��+`�!��}�q�:
�[W*�U6�
���=X�
�fd�
��
���~Elen�
F��~�
=X��~�XU�UT��~Q��~�/XUsT6Q1R��~X4��MXG(�
�{X2fd�
�U8�
��X
�
$�!fp�
>�
�
F��
�l�Y�
*�
5��

=X��~ret�
	�pfd�
	�YSYU�UTsZqYUsTv�88
�Z
8
'
8
@�	:

Zp;
|	<
|res=
�	=
,	>

�	?
	��ZG�
�-��[
6�[
G�ret

	�fd
	�
	��D
	����ZT1Q0��ZUsT2Q1�[UsT1Q2R�DX4�?[UsTvQ} �][UsT|�L�,��[Uv��8�	��[
�	/5+
�	B!len�	L�F�[ch�	�)	�	
��	���^�	05+�	C�	,�		��	�len�	�;�\ch�	�;�\ch�	�57]�	
��U|
���	x]��������T�TQ~
���	�]��������T}Qv��]Uv�U}�	���t^*�	25+U-���	�����	�F��^�	05+#fn�	!�#arg�	,E@p_Q�TR�Qt	�F�p_t	)5+#fnu	!�#argu	,E@p_Q�TR�Q6a	�s�`a	6h#nb	�#fnb	(�#argb	3Ed	#hrete		�qX}	���b	,5+#fn	!�#arg	,Ei 		�len!		�"	|ret#		�$		�;Zb7	Z��}p8	|9	|:	|;	�<	&t<	-t5(�achK	�%O	�F�a__cO	�9�
̋F	
1b���݋r��}U~T��}�#X��|3�bUv3$|"T	v2$}"�X��|���$�_d�/5+#fn�!�#arg�,Ei�	�len�	��|ret�	��	��_d���~5��c�|���&t�-tE�dUwQ R	E�=dUwT| $ &Q R	3QdXv�A"pd=G���
��d2v1�'�U2v2�7�T�|�'f�(5+�;�#h	�#h['f�f$Ff$9fSf^fNkf�elfwf�f�f�f�fU�f�fU�f�f9�R�U|Ts3$"R�U|q|�f
q-5+
q@is	�	t|)p�	�|	�|	��	�&t	�-t)ch��)	��)__c��8<	-�g
</5+
<B!len<O	> �	?p@	A
-	B
-retC	�iovD�g	E��gG����h$5+ret	�n	�
��.ph6�$)���C�P�]�q�Ts��h�hUs���hUs?Ãs^(�i�Ni*�'5+U�"\�	�-���Ä�����	-���j�+5+�5�#off�B�j�N�"\
���j�����g5jUs*�RjT~Q8Z^�yjT�TQ�QR�R^8	- k
(5+
;!lenH	"\	 p!	"
-	#
-	$
-	%	��	-��l�.5+�;|�Hlen�
-�
��	l��$������UvQ|-o�	��������ʊ��l��ۊ@�U~TvQs���l��n�-5+�:|�G�THlen�
-�
-�|�|�|p�|
���	>n��������#nTQs��TQsmo��no%�o�o��U~j�UT:Qs��]�mo�-5++mo�o%�o�o��Us���o
�.5+	�len�
-�|S�p*�+5+U�5�off�	�y�J�qpy&5+��������(nY��pn%5+-`�t��}�$q�K���zqK*5+�h-qUs�gEqUs��eqUs?Ãs^Us-���r-%5+�h�qUs�g�qUsqp�qUs^����Ft�%5+�=X��~Elen�F��~����~
?yPsQy-?y+Qy+�y /�y+�y	 �y�y*�T	Q8zqhsUs��sT0��sT|Q}���sT0�x�sUs���sUv?ÃsqptUs��8tT6Q1R~X4���
�yt*�(5+U����t@FtU	����%w�(5+#fd�2��	�
`��Tu��}�$q�
���
�u������v�T
Y�'�
>vk�%'w���~����~׳/vUvT��~Q��~�
H���ve�Y�'�U	T2ʳ�vU
 ��vUsT
���vUvT1��wU0��wT0�(��Sw2cb�;*UD���T�������x�E��ۄ�wU=T	ۄxU:T	��;xUIT1��WxU2T1�t{xU	T0�����xU	T1��T	A�y
A%5+lenC	�	D	�4�/y!fd4)�	6
/y�?yG+�^y!fd+,�s ���y!fd5�	��y!fd	7���y!fd.�!pktN\��*z
�*5+
�4�	�	�	�|	�|��Wz
�65+	�D��z
D.5+uidF	�gidG	�	H	I	J#h	K#hiL	�1�>{
1.5+
2|!len2�
2+|
26�	4�	5>{-N{G���{
�'5+!uid�3L!gid�>@
�Prv�	�pw��!���{	�6�����|�+5+#uid�7L#pw�L�!ret�	���T��w3o|U�QTs���|UT	Q|Xs�}�|UvT	Q0���$}
�,5+!uid�8L)	��ret�
���r}
�-5+�r}	��}	�}G��}=G#4�}6{���{,5+{?{R}
":��_n~	�
i�~
�~����$z���UvT
Q1R
X	����r��f�~U|Tv*��~U2�Dr��J�[
J%stLSfdM	�)�zrc+	���)uid����
�-5+	�	�i�	�)	�&t	�-t7�
O�
�35+i�	�F2�b��p�|)	�&t	�-t7�v�
�/5+p�b7���
�)Hp�|b��6t��Y�t4htB�*u!Qu#|w#hx
�x�h���!fdh�	j=XlenkFR�ف
R<ف
SH
S+�	U#hh>��
>>\
>L�)bF�62�G���235+2=�p4|v�Tv$�Ă
$+5+!n$5�p&����
05+
:�	|��i�!fd��
�2i�
�<�
�G�ret�	�	�	�n�	���-��!fd�'�
�2E!len�?ret�
-7�
у
�35+����!fd��ret�	�6�
�U���#fd�#��+�val�	����UsT3Q0@�U�UT47wф
wJ\
x&�!lenx0�tR
:A
����A�A2�EsaC���~C�W�UvT0Qs7�o�UsC���UvTsQ0�:8
�υ2sig8!�U:3
���2sig3 �Uu�(7��� .���m�Us@��UT	Q�UR�Tv���v�w��xfmt�'PVbuf�
�T��vyp�|z�	�Eap

��u5���Vtv�E��uVtm����u{i��և����z���U|T
Q1R
X	\i�/�X�����z���U|T
Q1R
X	õu�UsT0ϵUsT��u
��+���۵T1Q}R��u\i�-�������z���UsTdQ1R	�X	Yv�3$"
i�������z���UsTdQ1R	�X	
>�	[�[�O��T1Q	X|r��W
����
�:5+
�D�.�|ʊ�|�."-�"�"E"%.k|6�k�kk.\|`�\�\.>E��>E>�>.'E̋'E'�'.E�G�.��8�� 
��18��.d�i�d 
d<P.A���]__sA�]__nAAP.%|Ռ%%�|sz'
8n���
n8i��
i8	��B�
	��
	�B�S.)�s�))�PW1���1�W"m��"m,mo����o�o�o-o����������ʊ�����ۊ@�U~TvQ|�,��a�q�$ÃSу �G�$�% �L�8�Us�+���
$Ã,�������)�6�C�P�]����UvQ|�,��O�t�
��O����f�T0��,YY����Y�Y�Y��}�Y�Y�Y��}�Y��}�Y�Y�G
g�)�����U|TsQ�
�N
	ʑ)�����UvT|Ql
���
���UsT0Q:
`��
	T���}�q�
̋�
	�����݋
�Uv
6�\

�S�G��)��U|T:5�1�U|T	)�O�U}T]A�z�U}T0Q��}R��}N���U|[���U}�,�U����U�U�UQ�UQVV[�UC
ה$�U�U���U�UVVNV��V+V��UT|Qg���U	�TvQ3�VUu�,�fl�E��fggg,g9gDgQg^gkgxg�f�<	�gg�f%�g��,g9gDgQg^gkg��xg��
��e��6�)���C�P�]�q�TwQ2R}
��Z	�Ä�����g��U~��U~?Ã~*�7�U2T��~�,�9=���	::�п
`:b	���:}:r:�:��_�:�:
��,
2�����s�UwT
��9	������%Ɍ�UsT|Q
��јTvQ0���
3:g6�E:R:H�G��e�Y�'�UsT
AQ
�������Us��ڙUvT2L��Uv���U2T1�}U0T	Qs�9 ]��	:% :�}U0T	Q�U�,�j�����j�j�j�j�j�j�j�jkQk
�j	���j�j�j�j�j�j�j�jkk
��S	�$Ä������?	c���������UT��Qv�g{�Us�gUs^,�[��[�[�[}�[�	�[$�[$�[>�[,��[>�[3g��[�U|-���	��������TvQs,Y�8��Y�Y�Y�Y�Y�Y�YQ�Y�Y@t�U�UT�T,{X!�#��X�X�X-{X�
�X�X�X��՞U@T1�����[��UU��,�x����x�x�x
o�O/���������ʊ
� ���ۊ@�UsTvQ|�
�xAh��x�x�x߁1V۠���O��o�@iš������%8��ʊ�����ۊ@�U}T|Qv�
�yn
���y�yzz��~z��A�
�������%Aˁ+��5R������%5ˁv�Tv $ &33$��A�
��������%Aˁ+��5R������%5ˁv�Tv $ &33$
��	w����O�D��O���	X�]�%�j�
v���������
v��[�������
v����������
v���������
v��6�������
v���������
v��Ȧ������
v���������-v��������S��	K�$�%�>�#)��&�+v��
��%����O2��3�@�
v��
��������
v��
ڨ$������
v��
�$������-v��
$������*z1�	ԩ<z%1Iz�o��UT7��T0Q:���QqR|��
�R|��2�UT	��Z�UT	��UT	QsĂ+d��ւ%+�v�U|Tv $ &
Wzx��izvz�z�z�z�z�z�z
�zj¬�z{	{�z�z#{��~0{��
��9E��������)]�U~�'��U~T|Q �'��U~T��~Q8U%U}T~
N{�
2��{z{m{`{�{�{
�|�
M�$�|�|U}}��~}$}!�
��6}%!�)UT
�Q	R	X
#3%�T|Q	�R	�Xv�}UT	Q0ф-,	��Ƕ��U4Q0R0X0��U	ӶήU|�{�UT|Q}߶��U1T��~��5�U|ӶM�U|߶߶�}��UT	Q0��}ȯUT	Q0Ӷ�Uv�}
�UT	Q0�}UT	Q0L��dd�UT	�9����UT	��UT	`�z	���}�q�
?y��Qy-?y	+Qy+�y&/�y+�y
&�y�y*�T	Q8���UT	��;�UT	��UT	Q
��Ă/I޲�ւ%/�v�T
 �AA3�4E�	�*aw't*�*�585@5R

3
6�7%
~8*�9D*t*n��)K*k��*�*�*wpA
f
:96�6�6f
�6p6�*9+S;
3�;!3[%dupdup***�X3�&D)�]Z<4AA��::+O#3�=t0�0�
>"?o�363�A*��@'n*�A�*�A����B1�B(��1
:;9I841�B��1��1	4:;9I
1R�BUXYW:;9I�B4:;9I�B
:;9II:;9I4:;9I1R�BXYW.?<n:;94:;9I4:;9I�BI41U.:;9'I :;9I!I/.?:;9'I@�B4:;9I41
:;9I8.?<n:;9 I!:;9I":;9#:;9I�B$1%&
:;9I'4:;9I?<(.?:;9'@�B)*:;9I+1R�BXYW,.1@�B-1R�BUXYW..?:;9'I 4/$>0(1:;92:;9I3��4&I56.:;9'I@�B7.:;9' 8.?:;9'I 9'I:.:;9'@�B;U<7I=!I/>1?��1�B@���B1A.?<n:;B>I:;9C:;9D.?:;9'I@�BE4:;9IFG5IH4:;9I?<I
:;I8J<K:;9L
:;9I8M:;9IN1UO1PQ41R'S1XYWT.?:;9'@�BU1UV4:;9IW.:;9'I X>I:;9Y
:;9I8Z���B1[1UXYW\1R�BXYW]:;9I^%_$>`a:;9b
:;9Ic'd&eIf:;g:;9h!i(j:;9k:;9l4G:;9m'In���B1o.?:;9'I@�Bp4:;9I
q��r���Bs.:;9'I t.:;9' u.:;9I v.?:;9'@�Bw:;9I�Bx:;9I�By4:;9I�Bz4:;9I�B{1R�BUXYW|4:;9I}1UXYW~.?<n.?<n:;9�6ddqd	��T�)�T���u��P�P�P(�P�PsP��P�KP[�P�"R+�R��R�JQ^�Q�5Q5<v �<�Q��{ ���P�Tt ���_��X
~X��X�[Ti�T�2TA�X��X[P[aQx�T�4T@�P�P{P{t ���X��R��r �t;# $��������%!r"�p;# $��������%!r"���u�?[g�R�SRb�R�HRQ�R�R {R��TKTi�Q�X%vXvzr ���TiT��T��Q��q ��R��u.�Q�2QH�Q�+Q4�Q��QoQ��Q�;QQ�X��PiR~�R��v ��FRFW{ �_�R��z ��QK$KU$K�KV�K�K�U�KIKTIK�KS�K�K|h��K�K�T�K.KP.KPKQpKuKQuK}K?p� K$KQ$KLKUpK}KU3KFK	q�����3KFK0�3KFKUQKpK8�QKpK0�QKpK\pKyK7p�����yK}KQpK~K0�pK}KU�K�K@��K�KU�K�KS�K�KV�K�KX��K�K0��K�KS�K�K|h�JlJUlJ�J]�J�JU�J�J]�J�J�U��J�JUJ0JT0J�JS�J�JT�J�J�T��J�JS�J�JT�J�Js@��J�JS�J�JSJJQJ�J^�J�JQ�J�J�Q��J�J^�J�J^7JTJPWJZJp?�ZJaJPaJtJ\tJ�JP�J�J_lJ�JU�J�J|����v"�|J�J_|J�JS�J�JT�J�J�T�|J�JU�J�J|����v"��J�J@��J�JS�J�JT�J�Js@��J�J}��J�J	~������J�JQ�J�J\�J�Ju�`I�IU�I�I\�I�I�U��I�I\`I�IT�I�I�T�`I�IQ�I�IV�I�Ivx��I�IV�I�IV`I�IR�I�I^�I�I�R��I�I^`I�IX�I�I]�I�I�X��I�I]dI�ITdI�IUP@c@Uc@CVCrD�U�rDEVE.E�U�.EeEVeElF�U�lF;GV;GTI�U��@�@P�@�@P�@�@P�@APA0AS0ACAPVAiAP}A�AP�A�AP�A�AP�ABP$B7BPKB^BPrB�BP�B�BP�B�BPrD�DS�D�DP�DEPEEPEESlF�FP�D�Dsp"1�D�DP�@�@P�@�@PjApAP�A�AP�A�A0��A�AP�B�BP�D�DP�D�D0�.E4EP:EQEP~@A0�A!AP$A�C\rD�DP�D�D\�D�D0��D�D\�DE0�E�E\lF�F\�F�F0��F�H\�H@I\EITI\�@�@P�@�@PAAPAAS5ACAP[AiAP�A�AP�A�APBBP)B7BPPB^BPwB�BP�B�BP�B�BP�FGP"G,GP'CQCPE#EP HQHP�F�FPG!GP;GPGPPGTGUTG�GV�H�HV�H�HQ�H�HVI;IVEITIV�F�FPG!GPDGPGPPGTGUTG�GV�H�HV�H�HQ�H�HVI;IVEITIVWGpGPpG�GS�H�HSI%IS%I6IP6I@ISEITISDGWG0�DGPGPPGTGUTGWGV`GeG��}�eGpGQpGqG��}�`GpGPpGqGS�G�G@��G�G
��G�GS]CtCP{C}C0��GHPH HPfCtCP�H�HP�HIS<FOFP�H�HP�CDPDDp�DKDP0D8DQ8D<Dqx�<DDDQ�F�F2�P?W?UW?^?u�`Y�YU�Y[S[@[�U�@[dSdZd�U� Z[\�]�^\�^__\�_2`\�`a\�a-b\dUd\�Z�ZP�]�]Pp^�^P�^�^P�a�aP Z[^�]�^^�^__^�_2`^�`a^�a-b^dUd^aZdZ	| $ &�dZhZUhZ[	| $ &��](^	| $ &�p^�^	| $ &��^__	| $ &��_2`	| $ &��a-b	| $ &�dUd	| $ &�(_A_:�A___P@[�]S�^�^S__�_S2`�`SaBaS�a�aS-bdS@[�]V�^�^V__�_V2`�`Va9aV�a�aV-b<bVFb�cV�c�cV�cdV[`_`P_`�`_�a�a_Fb�b_dd_@[~\0�~\�]_�^�^___�__2`L`_L`�`0�a9a_�a�a0�-b<b0�Fb�c0��c�c0��cd0�@[~\0�b]x]P__g_P-bFb0��c�c0��`�`P�a�aPFbJbP@[~\0�~\�\^�\�\P�\�\\�\�]^�^�^\__�_^2`�`^a9a^�a�a^-b<b0�Fb�c^�c�c0��cd^	@[~\0��\�\P�\�]\�^�^\__�_\�_�_\2`�`\a9a\�a�a\-b<b0�FbBc\�c�c0��cd\]]v� $ &�]]U__p_0�p_�_Q�_�_��t�_�_��t�1��_�_|��_�_|~��_�_|��_�_|~��_�_|��_�_0��c�cV�c�c4��c�c
��c�c����c�c@��c�c6��c�c\M^`^sM^`^sM^`^sM^p^
�M^`^s�a�as�a�a
��a�as0;t;Ut;H?��}p;u<0�u<�<^�<�<P�<�=]�=�>]�>,?0�,?C?]p;u<0��<�<P�<�=]�=�>]�>,?0�,?C?]p;u<0�u<`=��}�=�>��}�>�>T�>�>��}�>,?0�,?,?��},?C?0�p;u<0�u<@=V@=V=PV=�=V�=�=P�=�>V�>�>V�>,?0�,?0?V>?C?0�p;`=S�=:?S�<�<s� $ &��<�<U�=>0�Z>c>0�c>{>^{>�>~��>�>~~��>�>~��:;U;/;S/;0;�U�;;P�9�9U�9�:S�:�:�U��:�:S�:�:�U��9S:\�:�:S�:�:@��:�:6��:�:W�:�:4��:�:
��:�:�H�4U4������U������
�U�
$��$6U40�4�^��^
$^$60�4�0��00�0T9�r�0���?�
$0�40�4�_�\_\m�m�_
$_$60�40�4K\K�V��\��V��\
$V$60��S��S
6S�]�]
6]��U��S���U���S���U���S�T.V.��T���
���
�����w���SP'S'Wv(drPrxS��
���
���p`#���p`#� 
<$��c~`#� 
<$�dx~`#� 
<$���
v�v�"���P�c^dx^\0�PS�89P�8:9Q��P�+	P��Q��Q	+	Q	#	0�	#	0�	#	P�	
U
s
�U�
)
P)
>
S>
k
Pk
n
Sn
r
Pr
s
S 7L7UL7�7�U� 7H7TH7w7Vw7x7�T�x7�7VM7Z7Px7�7P�5�5U�56V6?6�U�?6�6V�6�6�U��6�6V�6�6�U��56T6?6�T�?6F6TF6�6\�6�6�T��6�6T�6�6\�6�6�T��6�6P�6�6P�6�6\T6g6Pg6�6S�6�6UF6�6]�6�6n��2(3U(3�4\�4�4�U��223T23(4V(404T04�4�T��223Q23�4]�4�4�Q�63Y3PY3c3p�c3t3Pt3~3^�3�3p��3�3P�3�3S�34P4,4�,4h4�L3p3Qp3~3R�3�3Q�3�3R�3
4T
44tp�44T414^4(4V(404T0414�T�404|�I4R4QR4S4VI4R4TR4S4]I4R4|�_(l(Pl(v(u�_(v(3�_(l(u��l(v(P�'�'U�'�'�U��'�'U�'�'T�'�'Q�'�'�T��'�'T�'�'Q�'�'R�'�'�Q��'�'QP''U'�'�U��'�'UP'�'T�'�'Q�'�'�T��'�'TP'�'Q�'�'R�'�'�Q��'�'Q0`U`S��S��U0`T`�^���T���T0`Q`V��Q���V���Q���Q0`R`]��R���]���R���RD�\��~1$~"3$�U"����T $ &33$�U"���\��~1$~"3$�U"����T $ &33$�U"���\`iP{P0%�%U�%&S&�&��}�&+'�U�+'9'��}9'@'U@'E'�U�0%�%T�%&_&9'��}9'@'T@'E'��}0%�%Q�%9'��|9'@'Q@'E'��|�%�%V�%�%v�b%�%0��%�%p
���9'@'0��%�%Q�&�&Q�%�%P�&�&Pb%�%0��%�%^�%�%~��%&^&'��}+'9'��}9'@'0�c&u&��}�u&�&]�&�&}��&�&}��&�&]+'9'��}�K&�&_+'9'_c&�&S+'9'SK&X&V_&u&Vu&�&��}�&�&t��&�&T�&�&��}�#�+'9'V�%'\+'9'\&&P&'��}+'9'��}�&�&V�&�&v8$8&2$p"�&�&
v8$8&2$p"c&c&5�c&c&
�c&c&^#|$U|$�$�U��$�$U�$%�U�%%U%$%�U�#w#Tw#�$S�$�$�T��$%S%%T%$%�T�#w#Qw#�$V�$�$�Q��$%V%%�Q�%%V%%Q%$%�Q��#�#P�#�#p��$�$0��$�$0��$�$^�$%^<#w#0��#�#r
����#�#t
���%%0��#�#Q$$q$!$qpI$Y$RY$m$q%%qp�$�$P�$�$P�$%P<#w#0�w#�#\�#�#|��#,$\,$_$|�_$�$\�$%\%%\%%0�$!$T3$m$T%%T%%q`$!$X>$B$RB$�$X%%X�#�$P%%P�#�$Y%%Y� !U!7!S7!p!wp!{!��{!�!�U��!�!S�!*"w*"�"�U��"�"w� !T� � u�F!q!S�!�!S�!�!s��"�"S�"�"P�"�"P{!�!|�I"o"|�o"�"P{!�!VD"�"V�"�"v��"�"V{!�!_I"�"_{!�!}D"d"}{!�!]"�"]{!�!^"�"^o"�"q2$u"�"�"q2$u"o"�"v�8$8&2$u"�"�"v�8$8&2$u"�"�"v�8$8&2$u"�(�(U�(=)S=)>)�U�>)Q)UQ)b)Sb)�)U�()0�) )P!)&)	��&)<)P>)�)0��(�(u�u�@��()Q>)Q)u�u�@�b)|)u�u�@��()P�(	)s��	))T))s���()s�()Pt � u��� � T� � p� � p#�� � p`#�� � tp#�� � Q� � P� � 4�� � T2D2UD2�2S�2�2~�~��2�2�U��2�2S�2�2~�~��2�2�U��2�2U2D2TD2�2V�2�2T�2�2�T��2�2T�2�2V�2�2�T��2�2T2D2QD2�2]�2�2Q�2�2�Q��2�2Q�2�2]�2�2�Q��2�2Q2D2RD2�2\�2�2R�2�2�R��2�2R�2�2\�2�2�R��2�2R2)2u��)2�2^�2�2�U#���2�2^�2�2�U#���2�2u��U2Z2|�Z2u2PU2u24�U2u2^`�U�< ]< H �U�H b ]b k �U�`�T�< VH b V`�Q�5 SH [ S[ ^ sp�^ b S��P��}��q $ &���}��}�� $ &���P��\H b P��P��0��< \H b \��P��\��V 0 SH H S 0 VH H V 0 ^H H ^   PH b P  S  V  ^�ZUZ�^���U��H^H\U�QTQ�]���T��H]H\T�ZQZH�Q�H\Q�ZRZ�\���R��H\H\Rl�S�HS?ZSZ�_H_HRSP\��QTQZ]Z�V��U��V��V��U�HVH\T��T��_�_��P��P��S��S��_��_��U��V��U(4^(3	p $ &�37	s $ &���U��S���U���S���U���U��S��s��s�� $ &�0yTy��T�MYQYn	t2$x"#4nyR��U�)S)*�U���U��P���U�������0��/�/U�/0S0	0�U�	0#0S#0)0U�./U/[/S[/\/�U�\/a/Ua/o/So/u/U�W�WU�W�XS�X�X�U��XYSYY�U�YPYSPYUY�U�Y#YsY#YsY#YsY0Y
�Y#Ys�	U	S"�U�"rSr��U��'T'V"]V]_P_rVr�T�dlP3
	�30�3}@�3}S?LPL}\��V]d2�]d
�3JP,2,U2,h,Vh,k,�U�k,�,V,<,T<,j,\j,k,�T�k,�,\,G,QG,�,�Q�-,H,0�H,L,Pk,�,P�,�,R+:+U:+�+\�+�+�U��+�+\+:+T:+�+^�+�+�T��+�+^+:+Q:+V+SV+�+�Q��+�+P�+�+p $
 $-(�q+�+
�q+�+
��
�
U�
�
uh��
�U�
�
T�
��T��
qRqw�R�wyRy��R��
qZw�Z�
�
0��
[p���*X-q[q�0��
�
0��
�
T�
�
t��
u|�#�-4T47p���DWT^bt�bqu|�#�q�0�0	C	UC	n	Sn	p	�U�p	w	S0	G	TG	o	Vo	w	�T�H	_	P_	i	s�p	u	P�	�	U�	�	S�	�	�U��	�	S�	�	U�	�	�U��	�	S�	�	T�	�	V�	�	�T��	�	V�	�	�T��	�	V�	�	P�	�	P�	�	P0_U_�V���U���V07T7�\���T���\@JUJrVrvQvw�U�@UTUcScvRvw�T�@�U�V}�U�}�V�.�U�.�V��U�@�T�|]|}�T�}.].5T5]����v���\�S}
S
R.:��v�:�\��S��\��S�	P}�P��v����
���
���\c�
�c�
�c�\SWRWX��u�SWQWX]SWs}�
�}�d�}�S��
���d���U��S.
�
(s��U�
S

�U�

S
$
�U�$
*
U��Q$
*
Q��P
)
P)
*
u �t $ &���P�
\

\��T�
V

V�
^

^��P�
]
$
P��\��V��^G
P
P�
�
U�
�
V�
	�U�	�V��U�
�
T�
�
_�
	�T�	�_��T�
�
Q�
�
\�
	�Q�	�\��Q�
�
R�
�
^�
	�R�	z^z��R���R�
�
P�
�
S	%P%XSXdPd�S�
�
R�
�
]	�]��R�U�S��S�(S�T�V���T��9V4��}�4�]��}�*\k�P��S(P(QS�*S��0�4�^�0�QTPThSs�S'<��'<S',��}�,<\��l���\��U��v�FQSs�0�s�0�s���}���Q��|��������Q��|��V�\dUd��U�}�P��_�U_/0�/LPLn_��_��Ud�S��P�nS��S��P��Sd��n������������P������P�Q��Q��R��X�)�)U�)�*^�*�*U�*�*�U��*�*U�*�*�U��)�)T�)�*��~�*�*T�*�*��~�*�*T�*�*��~�)�)Q�)�)w�)�*�Q��*�*Q�*�*�Q��*�*Q�*�*�Q��)�)Q�)�)w�)�*�Q��)�)T�)�*��~�)�)U�)�*^*�*S�)*��~*`*_`*v*��v*�*_&*f*Qf*�*���*�*}x��*�*Qj*�*]�*�*P{*�*P�*�*]{*�*2�{*�*w{*�*~{*�*P�*�*]{*�*2�D*T*q�T*j*PD*j*6�D*j*\�,-U-�-V�-T.�U�T.�.V�.�.Q�.�.�U��.�.U�.�.V�.�.U�.�.V�.�.�U��,�-
�T.q.
��.�.
��.�.
��.�.
��,-W-�-ST.q.S�.�.S�.�.S�.�.S�,-U-{-V{-�-ST.q.S�.�.U�.�.V�.�.S�.�.V�,V-0�V-h-U�.�.0�r-�-P�.�.P-
-
�-
-W{-�-��_��-�-\{-�-S{-�-
��-.S*.T.S�.�.S�-�-P�-�-V*.;.P;.T.V�.�.P�.�.V�-�-
A��-�-Sq.�.V�.�.Q�.�.�U�00�0U�0�1S�1�1�U��1�1S�1�1�U��1�1S00�0T�0�1���1�1�T��1�1���1�1T�1�1���1�1�T��1�1��00�0Q�0�0V�0�1�Q��1�1Q�1�1V�1�1�Q��1�1V�0�0V�0�1�Q��1�1�Q��1�1V�0�1���1�1���1�1���0�1S�1�1S�1�1S�0�0]�0
1T
11x1b1Tn1�1T�1�1T�0�1V�1�1V�0�0���0F1^F1R1rpR1�1^�1�1^�0-1_-151x51�1_�1�1_�0b1Yq1�1Y�1�1Y�1�1Y�0�0R�1�1R�1�1
@��0�04��0�0T�1�1V�1�1���1�1_�45U5%5�U�%5/5U/5�5\�5�5�U��5�5\�5�5U�45T5%5�T�%5F5TF5�5V�5�5�T��5�5V�5�5T�45Q5%5�Q�%5P5QP5�5�Q��5�5Q55S55s�55}�%5�5S�5�5}��5�5S55P55st"%575P75F5st"1F5f5vs"1K5`5T`5b5tp�b5f5Tq5�5Sq5�5Vq55|�7
7U
77�U�77U7
7T
77�T�77T�7�7U�7�8�U��8�8U�8�8�U��7�7T�7�8V�8�8�T��8�8V�8�8T�8�8V�7�7Q�7�8]�8�8�Q��8�8]�8�8Q�8�8]�7�7Q�7�8]�8�8�Q��8�8]�8�8]�7�7T�7�8V�8�8�T��8�8V�8�8V�7�7U�7^8\�8�8\�K	LU	LWL_WL�L�U��LP_P$PU$POW_OWTW�U�TW�W_�L�LP,LWL\�L�L\,LWLV�L�LV,LWLS�L�LS=LGLP�L�LP,L=L\,L=LV,L=LS�LP_OPOW_TW�W_qM�MP�LPSOPDUS\UOWSTW�WS�L�L1��L�LP�L�LQ8MqMV8MqM\.MqM]NMXMPqM�MP8MNMV8MNM\8MNM]�MPSOP,RS\U�USV0VSW/WS�MP_OP,R_\U�U_V0V_W/W_�M�M
p�1��OPQ
p�1���MP\OP,R\\U�U\V0V\W/W\�MNV�MN���MN���MNV�MN���MN���MNPNONVNON��NON��!NONV!NON��!NON��8NONPyO�O_RiR_�RDU_\UV_5V�V_4WOW_TW�W_yO�O�#R,R�#\UhU�#yO{O0�{O�OP�O�Op��O�OP�O�OROPQ_OPQPOPkPp�OPQp�SPkPQkPyPp�kPQp�oPyPQyP�Pp�yPQp�}P�PQ�P�Pp�P�Pp��PQp�	�P�Pp�P�Pp��PQp�	�P�Pp�P�Pp��PQp��P�PQ�P�Pp�P�Pp ��PQp �	�P�Pp!�P�Pp$��PQp$�	�P�Pp%�P�Pp(��PQp(��P�PQ�P�Pp)QEQPEQIQp�"Q'Qp1$q""Q.Qp1$q"�3QEQQ3QEQQ6QEQRiQ�QP�Q�Qpp��QRPpQRQ�Q�QP�Q�Qpp��Q�QP�QRpp��Q�QR�Q�QR�Q�QR�Q�QR\U�U_iU�UPvR�RVvR�R_�R�RP�RU_�UV_5V�V_4WOW_TW�W_�RDS\DSGSPGS�Sw�ST\�U�U\�U�U0��U�U\�RKS]KS�SP�S�S��~�ST]�U�U]�TUP�RU0��UV0�5V�V0�4WOW0�TW�W0��RSZS�Szh��U�Uzh��U�U0�S�SZ�U�UZ�R�Rp��R�SX�U�UX_S�S__S�Sz|_S�SR�S�S��~_S�Sz_S�Sz�S�S\�S�S}p��S�S@��S�S
��S�S]T�T0��UV0�5V�V0��V�V0�4WJW0�TW�W0��W�W0�TT��~�U�UP8VXV\�V�VVT�T_�UV_5V�V_�V�V_4WJW_TW�W_�W�W_^TpTPyT�TP�T�TP�T�TP�U�UP�UVVAVXVPiV�VP�V�VP�V�VP�V�VV�V�VP4WIWP�W�WP�W�WVT2TP2T�T]�U�UP5V@VP@VXV]XVzV0��V�V]�V�V]�V�VPTW�W] T�T_�U�U_XVzV_�V�V_TW�W_ T3T	��3T;TPTWgWPhW�W_UUH�UU0�UU
�U4UU4UU4UUDU
�U4UPJP
 �P$PU$PJP_.PJPP,�d�


�


��������9>ACFQxx|��������� *)SX����
05:������@n��Oh���"'3"'3TY}O[]d�RV]���������������������� 0 P P  0 P P � � � � � � {!�!�!""�"{!�!"�"`"h"p"�"�"�"`"h"�"�"�%'0'9'.&5&B&G&c&c&_(e(l(v(�(�(�()	))�)***`*f*{*�*D*D*I*Q*;+>+c+n+q+�+�,�,�,�-X.x.�.�.�.�.�,�,-
-�-.0.X.�.�.�0�1�1�1�1�1�0�0�0�0U2U2`2j2D3c3k3~3�3�3�3�34%4,41464<4I4S455+5�5�5�5q5w5{5�5�7�7�788�8�8�8�8�8s:}:�:�:s:}:�:�:�:�:�:�:�:�:O<T<�<�<�<�<�=>`>�>�@�@�@�@�BQC E0E�FH HXH�H�HI;IEITI�F�G�H�HI;IEITIDG�G�H�HI;IEITIQC�ChEpFH HXH�H�HIhE�EXH�H�HI�EpF�H�HdIdIxI�I_J�J�J�J|J|J�J�J�J�J�J�J�J�J�J�J�J�J�J�JpKpKuKwKyK~K�K�K�K�K�K�K�K�K,LWL�L�L0LWL�L�LWL\L�L POPiSiSUUUUOWTW�W�MPOP,R\U�UV5VW4WyOyO�O�OOP\PaPdPhPkP\PaPdPhPkPrPvPyPrPvPyP�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�P�PQ�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�Q�RiSiSU�UV5V�V4W@WEWOWTW`WcW�WUSeSiSiSiS�S�S�SUS_S_SeSiSiSiS�S�S�SiSqS�S�S�S�ST�T�UV8V�V4W@WEWOWTW`WcW�WTTT�T�U�U�UV8V�V4W@WEWOWTW`WcW�W T;T�U�UTW`WcW�W T;TTW`WcW�WUUUUUDUYYYYY0Y�Y�YZ ZUZaZZZ@[�]�^_`_`8`�`aHa�a�a0b<bFb�c�cdZ\_\]	]]]:cBc�c�c:cBc�c�cM^M^M^M^M^p^
R��
/usr/include/bits/usr/include/usr/include/sys/usr/lib/gcc/x86_64-redhat-linux/8/include/usr/include/bits/types/usr/include/netinet/usr/include/arpalsapilib.cstring_fortified.hunistd.hbyteswap.hstdlib.hstdio2.hfcntl2.hstdlib.hstat.hlsapilib.htypes.hstddef.hfcntl.hstruct_timespec.hstat.htime_t.h__sigset_t.hsigset_t.h__sigval_t.hsiginfo_t.hsignal.hsigaction.htypes.hstdint-intn.hstruct_timeval.hselect.hstdarg.h<built-in>struct_FILE.hFILE.hstdio.hsys_errlist.hresource.hstruct_iovec.hsocket.hsocket_type.hsockaddr.htime.hpwd.hstruct_tm.htime.hunistd.hctype.hconfname.hgetopt_core.hstdint-uintn.hin.hnetdb.hun.hlsapidef.hstring.hresource.hdlfcn.hsocket.herrno.hselect2.hsched.hmman.hsendfile.huio.hstrings.hinet.hwait.hprctl.hgrp.h	�K�K��.K5��J/�I#KK1
0	z
zJ	Z	"OJJ�= ...v �<Kg�fJ��.T2KxJ.n=@�<YDw<<=�:/;<�;/u;=IK=H</փ-K-=>:X�-=;=0:/;=I</�/sf�=H</[G��-K-=��18=;=0:X�;=-/�I=;/�?Gf�-K-=�I<�-=��;=-/�e=-/�t�0���/���/���-</��-</��-</��-</��/���/���-</��/���/��-J=�t=��Y-</ȑ-</�J>Xtu-=ttu;/�K-=-/X��-/t��;/�g�K-=Y-=;=J�;=�/K-=-/X��;/��u-=ttu-=�K;</f�;=;/f�u-=t�.V>,>t�;=�/.K-=-/t�-=-//-/-X�.I</t�.W=-/0,0,<�.W=-/t�/�t�;=;/<t�.W=-/0:0:<�.W=�/.�:==:</�=;J=u�I=-=.Y�x =5 x./yJ.K0+=0+/.Z1Mz.?/=:===�`�[+�/�{�.	��r	�	KZ.��4tKK
	Z	�	J
sJX/
t 
OJg8��j
�� �n�!;K;KJYZC%t!K%K:K%K/X X�~�!-/-!WgY	L
Xf  	zt
Z@F�2
yt<���/
��	�
X/	Z�J
v �0X	�n	�<
JK
	�<<x�	��	�	=	=#	=E	K#>H	>#	K#	=
l	Z<<	h	u$I$K="IY<IJ	=$J$<=;"<J	=�v�XF.L
L
=/d f.L
u/��O7@p$ti�k<�=<><V=�
Wu�k�i
��I)HKI,IKI,<K*Iu*u,1K,�uY�	r u	;Y�v�VvV�M,U	i+h]q<.qJXq<3 q3J�v<v	�|
	�fX.X��	< X	�vJ�		Yh x�`
�ut
h.s�		uXX.X	�
	su	Y
yJ	t	Yt'X
	w
	��	�
�	/J
iX�<%<
`t
=X��I/7L*J<_C=&<K
�X._�<t
eX$.�~�	"fN	f	K
txX
	`x �t�.eX/g�.J.X	�
I
Jw�l
X��
V�	�Y�	K	Y	�?U	Lj 
��k<�Lt	�
�lX��	K�l
�	��.�	��Z�	K	�	�>V	La$f	�mX	�X�m<	�.>�m��<�XN1+	p��k"�
�kJ�J
�k.X�X"~K
�k��	�	[X	O(�kX
	�<
�kX�	�
b�>=E<>:<Y<;
=
v�k<�qR<
!��l
�
�
�l<�����l�z/	�f�X<	Kf�fk�v
�~��*�~
X�$	rJ�~
#��.?f	h
�~����~<
��.<1	��~)�	<
�~t)�X
�~<<t	�
�~XX	����
��~
/�.<<
zf�~�
�~X�.
�~t.�J<<X�< �
�W=�
ڬq		K	�ff
L
4z�
>=
jtt		�	�	�
Z-JJXf�t
X
L!s
gf�
�
fF�
J
Y�	Y
:�"foXXXJlt0�
hd/	L.XN�6�g	J�	y��i<
X$	��	Z
���
4�tKK
	�;:|".<
Z
IY�6t��(f+K"JMX"X<�
mJ<	&�
AJ�X0J
X��XXV�$J)�I�!4f<9X�!Jh
.$r.XX`KJ
Jt5<uY�"J
q<%�
3$x.`XYBW[$g	
�	F�	x	\	*2.	F^�	\t;:�j KK-uYI��X	�Ki+J��JK�2K�Ku\�/
�u���
 �u
(�tX
�|��
�x(��9?JL6�J9�xX<u1tu��6,XJK�,@g
L,K /sJK u
X�Q�y��XKEW	\�	gx.	<	%
	/s	uZ	p��tt��	/�t.X	��o� t�K
!fJ/	kt	Z�s	gY���	Z	�Y�	g	Y
�#!�xwJ��K�xJK��K!JK
�sJ��
�s< !�KJ9J!JK!��s
f���K =J	YYt	YYt	YYJ	YY<xK�	t<YL	,<W	ue	[A<v v�.�KXe#��!CJ;�CgK	EdX�` x DNK$�JGMY�<,�"g
< 	�
�	=	�&>	t	u
X	�
Y
�r<�
f	K�r
�
<
�r<X	�
	v	v

�[L	qX�r
�
�
�r<X	�
ltXrl.<	v
h
�K�1<
z�'�K��,�M�;�!?qL	�/	Z(>
�rJ<J(�

�r<<<	�
�r
X	�
	u	=
>	h�uJL	�|
�	�fX.X��

]u	�u<�

Z
=
=
y<kJ��K,&J"I�rt�
�&s=�r<�
!�rff�
	"yJD!I�K	L%;	K%H	K	KK��K.7���
�.XB#I1u#J
Q	
F	Z�
KNJ U�
	X

�hJ.$.�Xhr	�/X
L�*~Jf-�S.	LKI	u	YZ�
�.HJ
K
Y)�%f�X80��JJ
)X%<�XX�$�%4HJL<�0�YBL=;B=Vv<��)/Mt	z�0<6u 	zt/�
L4K"vI4H
="
@"F
�%#K%W
Yz
Q*uJf�	�	uJ	K
�mJJ
�.I

<vJ
uMF
=0J
u)
Y%#K,K"9
=&
=�X	�YsJY	FX:�JJ	Z	LN*<xX�<JX>tJ�	e
<	7/t�
L4K
xH4�
=
K
�*v�Jf�J	�	uJ	�
�Y.W
�mJ�t
�m��X
K�
t
K�m
�\�x JYKWiX<JJz
�NS
=;0WX
Y)?
K
�
LeJf<Ki*�_8t�K��)^	~tf<_�K��z.`	z�tf<	X�K�JZfv*=�gJ	Z
AK=%,	=%H	KM,
tY,Lh�o!(�f�ot��(=-Kl X�|�K���<x� <�	��o�.K	M�s�f�sf�tJt	
��	Z	�93JJM _<� .	j�y��	�93JJ	Kw '� K�"�f/�	s�	�XM
X
X�
mXL
�
f	��	y��r�
�rX�'�
=PY�r<f'�	Kz<	�	Y�r�	�
.
Z
j�
fX��	]XX$XZ�&��v��/8�
�yX
�<t
�y�
���y<
��	��;	Y3�4J�J	�
�/<0��/Y;K;=�R�.	z XZw� �/J�8fC
�b�<	h�b
�X�	�<	=	K<Xh���a
����	X�+^�aX��^	t	�Y=-Xu	g+�uJit�#	Y�E<�7	]�X	gv.X	g.X�m�LZ
fF&	t
0
N�
�)J
x)8
=)H
�
uK	Z�/ Xp�ytK�
h�/a<'	t
0
Q�
�)J
x)8
=)H
�
uKY	��/ l�m.�tt��Kw	�"
g;�L	p�<>J:h6t�
YGu	
uf>=
.
f	�	K�	^�tj
�!�tJ<	�	jF	�%	=%H	�K
Z7)K
LK)8
K!
K	2%o	=K%:	K2	GK
��_X#<
]<
<&�	Y�ZX
[f<Ȃ	_Xy�	��q
�	�	K��K&�,���N>:hZ�s"�	[�sf�	�"Ui	XigY ..-	s�X� �... ��K� fh00<
�=
�	h+<	Y�
u<
	�	YJ�z�

.	L+<	g
/.
	L	gJ�	JK�*X.X	v6=�	Y;�	u/X��l
�f?
�lJX�Y
�l�f"�K�l
���"�K8G��8=�P.4XK% ���	�	�
�
J.J�p<J*<X	v6=�	Y;.	�/X��l
�f
�lJX�Y"�=8G��8=�I/..c<�<jBz<�	�
�sX&�`"
f
�[�Z�	M	�
L
��Y0	U==YK^f	�4I	gY��K��$�/fY	L��	y�^/�K-%�]��
��	K+/X�>0XX�<u��j�	YvXg
YIgZ$�Hv&L<X�(.=	/.u.�Z.fJOwX(WuO=.ft"<*w 
<K	t	Y /?�N&tuKK
	h	g
G]	t	Y�	t	Y��tM
� �
t�����	�
YIgYJvY�Y�g	r�	Y
>v	t	YK��,�	<Y��	._�h���o<�x
�}�<J��u
��

Z�L
X�w	v�Y-�)X
f\Ks =K	v.	Y
+J	K'J�u<$RxtXp�/Zu:��Y	<�u:��Y	<	�-;	�-;	�-;�bX)	�<]X�&ZX�
_	#�#t
Y	�	�
Z.X
��<L�	��	y}	Af<X1d�	��	9�	+Y	��
�X)�////0
A1t
[J	.<%<;
� <3�
�l
z<�)�
>K��YWJtbXK �X	9��	�

ft
"u
;	�<u	WY	rXu	WY
�X"0", XX
LX��J<f?JfjK
t	Y*=�K	t	�,=�K	t	�0=�K	t	�.=�K
t	Y,=�KgjK�K�2K��	�zt�/	Y	Z��	�	��c�	��	�	Z�c�	�
�cf�	�	Z�c�
<<	�	a�,<	�	Z�c��i	�	Z�c�	�x	�	��	�	Z�c�	�w
X	�
	�
��c�	�	�
	�
Y�c�
�	v
	�
Y�c�
�	v
	�
Z�c�
�	w
	�
Y�c�
�	v�
Z	[
	�
Z�c�
� 
g	�
	�
Y�b
�	�f�}r��	�	�
��
��	��g�	��{
��	g1J��
�}	�
�<1�-�u-�).K.X
UJ.<	Z.)J
�KIK
Xx<X�/
�-
�
�X<�
��/
ift��	�	�<
�<J�J<��X
_�!	�hX�~<u	� 	u
X	��f
��~��<uY��uY	Y�vt�=	���	����	XJ��e�u\TKEW��	�~�	�
Z�d�
�K	h
	�
Z�d�
�K	h
	��h��y�X.��	�}
X�����y
.��t	�t
Zg2
u�4w��
�i�
f���
��X	�h�
o�.Jt.	���u�	�f�	=���^uL2�3fK&� 	�m�Y�X	�fX��K
�a�
�a<Z,g�
�<
=<I
X�J^��J...	*�Kz�}>��K
+zz< O=�>;g<0:><	Y6
2
�_<� <	Z	�	\�_<
� 
�_X<
� 
�_<X	� K	
	0�f	/�_

� �
�_JX	� B	
	9�
X
J�_� 
�_<f� XX
�_JX� �K
		.wJ]7A<@.=
J?w	Z�_
.	� �	
	�<<[�_
�	� �_	� 
�_X	� .
�_.X�	
�McMY�	
��_
!JJ_fJ� �_
 �� ..�i�/Z�l	h+JJ�xJL	�|
�	�fX.X�	�,X	�x4�	Ltot�$r��y5��	h	K)MU	=)	= <���Jf
�
t	�T.TJ=..7<�x<�	�|
�	�fX.�	Z�	�t
�Q�~%�#<=u�7<�{�z�+h	�s	u�t0<�{�z�+h	�s	u�t
��
��
t	K�	K�	K�	K�#/K;?;;*x/Su$	*zJ/:<v3O/xJuBJ=su;uIu<<Y���{�	�{t/J
L5KK-)EJ
fJ	�	uJ	K"�<K<#K<
LyJ
�.J	�/��	;YtX�yJ�	�	K	�	uX��{oK
M�=
K=	nK
=
K=
mK
=
K=

Ku:
Ku:
NXl
X
k
Xj
=
K=

Ku:
Ku:
NXi
Xh
Xg
=
=
XtX��	�{t/<
�
ZtWX=
MU=
=*JftJ	�	uJ	=
�M=

2J
NJK
H=K
K
N<
+LK
K
H=K
K
N<
,KK
K
H=K
K
N<
-JK
K
H=K
K
<
.z���)Ju��d�P�w	j	u	`��yf�	�	K	K	uX��}
	rtu	u=t	h(t	�<!�J&;
�
HK%�J*;�(IgY<
RL��
4fNJ�w
��
�w�f���w�Y�K�
#&K	]X:�
�~�
Zr>	@�	/�	��
�
�
��
��
J	�	��	
��
f��:v	ZYw�	Y���u
�	�
�Zv
�
.X�	��t� �	��tXI/
/		
	u
�~ft
Zr>	Z�J	�
�z	��	��X�/X
��<
��zX
�
	tX�	/
�`��ggWK>�X	�u	�~��X�~��	�}XYX�
�|X��
�|<Y^	�
X	��./��
X�R�	XUJ
Y	�
h.�e�X>	�tYvtYK��	��	M�
U�-�/](tq $��~Zv
<�����Qyt/�Z
t	���
t	Z*(t
N
��	bXJ�|�
�<�	y

�!�#�J
��<X=�
��
�
K
	��tZ2K�'eK,�t��X
�~+�|Z�s�W��	��u:��Y	�	�/�	�/�	�/�+��X	�<\
.X�
��	�#t
Y	�	�
Z.X
��<��	��	y}	AfJX?��	��	9�	+Y	��
�X���
?����%�t'YJ��" �=�tYwtYLL����mZv
<��tYKt�t�tYvt�)�X�|.K���6�2X��!s Y!Y+�! t!Y+K �f
�|tY1+
IKv�vWJgWJ
~J	.<%<;
[(���Jt"� 	�|��	=
�
vV
>Y�
�
Z+��KZ)=1K-
M�<
�<Y
v�.�u.
�}Jt
Z�Y��<
gJ
f"�<�	�	/
��np
<
��}�2NX��)�	��	
��
�~�	�|X���}�Y�"�Xg![qg!p�'�Y>�tYK�&�C�XK%��.ZY&i
�f���Y�p<�x ��u
��

Z�v
X� w	�~���9�}�5Xl�
�t.Z7j.+�"<g7/W5K/I
Mu_��Kg\K�_SC_THREAD_SPORADIC_SERVERpthread_atfork_functotalLSAPI_Set_Max_Process_Timelsapi_parent_dead__fxstatparseContentLenFromHeaderugidLen_SC_2_SW_DEVm_pScriptFileLSAPI_Stopsi_addr_lsb_unused2_SC_TIMERSm_iReqCounter_fileno_SC_SHELL_SC_MEMORY_PROTECTION_SC_SCHAR_MAX__pathtm_secH_AUTHORIZATION_SC_THREAD_SAFE_FUNCTIONS_SC_UCHAR_MAXmax_lenfreeaddrinfogid_tverifyHeader_SC_C_LANG_SUPPORTm_pIovecEndstrcpy__uint8_tIPPROTO_TPpw_uidwaitpidHTTP_HEADER_LEN_SC_TTY_NAME_MAX_SC_PASS_MAXLSAPI_ErrResponse_rsi_uidm_bytes_SC_2_PBS_TRACKfp_lve_destroym_pHeader_IO_buf_end__RLIM_NLIMITS_SC_SELECT_shortbufrlimitsockaddr_insa_family_tSOCK_DCCP_SC_BC_STRING_MAX_ISpunctis_enough_free_meminet_addr_SC_TRACE_INHERITinit_lve_exnewSizem_tmStartliblvesetgroups_SC_SEMAPHORES_SC_EQUIV_CLASS_MAXread__environ_sigpollsa_datauint16_t__builtin_memmoveai_protocol_valuem_pChildrenStatusCurIPPROTO_UDPoverflow_arg_areatime_tsin_zero_SC_DEVICE_SPECIFICin_port_t_flagsachMD5_SC_THREAD_THREADS_MAXerror_msg_SC_LEVEL3_CACHE_SIZE_SC_TRACEreg_save_areacalloc_archm_respPktHeaderg_running__off_t_addr_bndlsapi_cleanupachHeaderNamest_size_SC_THREAD_PROCESS_SHAREDallocateBuf_SC_JOB_CONTROLgetppidtm_isdstswapIntEndianlsapi_check_child_statussignal_locks_max_idle_secslsapi_set_nblockenvirons_schedule_notifysetUID_LVE_SC_NL_NMAX__RLIMIT_NPROCRLIMIT_DATApServeratoluint32_tinitgroups_SC_POLLm_pHttpHeader_SC_V6_ILP32_OFF32_SC_TRACE_SYS_MAXm_pScriptName__builtin_va_listst_blksizeRLIMIT_NOFILEm_pEnvList_SC_BASE_sigchldLSAPI_Set_Max_Idle_Childrenint32_t_SC_LONG_BITfixEndianLSAPI_GetEnv_r_upper__fmtsa_familym_specialEnvListSizepw_passwd_SC_CLOCK_SELECTIONmasklsapi_resp_infosigaction__RLIMIT_RTTIME_SC_V7_LPBIG_OFFBIGbodyLeftfcntllastTimeold_ppid_SC_AIO_LISTIO_MAXLSAPI_Init_Prefork_ServerpErr1pErr2st_gidm_cntHeaderss_notify_scheduledm_envListSizeacceptinggettimeofdaypBufai_addrm_iAvoidForks_secret_timerlsapi_MD5Context__syscall_slong_t__builtin_memset_SC_FILE_SYSTEMsa_restorerm_pChildrenStatusEnd_IO_write_endtype_SC_SCHAR_MIN_SC_LINE_MAXLSAPI_SetRespStatus_rlsapi_MD5_CTX__resst_nlinks_addr_SC_TZNAME_MAX__va_list_tag_syscallst_ctimnameLen__builtin___snprintf_chkLSAPI_Postfork_Child_SC_2_VERSIONfree_SC_2_PBS_CHECKPOINTIPPROTO_MPLS__sigset_tm_requestMethodOffm_tmWaitBeginreadSecretreadReq__tznameatoig_initedgetaddrinfovalLens_acklsapi_jailLVE__d0_SC_LEVEL4_CACHE_ASSOClsapi_MD5Final_SC_NL_LANGMAXdoAddrInfo__stack_chk_failmemcpy_killcurSizeRLIMIT_STACKIPPROTO_IPIPdlopenbacklogsin_family_SC_LEVEL1_ICACHE_ASSOCpIovrlim_maxm_iKillSentm_fdListen_SC_AIO_PRIO_DELTA_MAXvalidateHeadersst_atimm_statusm_reqBodyLensig_numoptargSOCK_RAWsnprintfold_int_SC_2_C_BINDs_enable_lve__clock_tparseRequestIPPROTO_RAWstrdupbufLen_SC_PRIORITY_SCHEDULING_SC_SS_REPL_MAXsys_errlistsival_ptrpStderrLogsetpgid__uid_tdaylightsi_stimeoptoptLSAPI_ReqBodyGetChar_rpKeysun_family__uint16_t_SC_FSYNCsin_portgetpeernameLSAPI_is_suEXEC_DaemonLSAPI_Is_Listen_rLSAPI_End_Response_r_SC_FILE_ATTRIBUTESsetreuidserverAddr_SC_NZEROm_pQueryString__gnuc_va_list_SC_2_C_DEV_chainpContentLen_call_addrEnvForeachnewfdm_iServerMaxIdleSOCK_NONBLOCKusleepSOCK_RDM_SC_SYMLOOP_MAXsockaddr_un_ISblankunsigned charIPPROTO_MAX_SC_MQ_OPEN_MAXSOCK_DGRAMm_tmReqBegin__fd_mask__blkcnt_tlsapi_enterLVE__builtin_calloc_IO_lock_tLSAPI_Is_ListenIPPROTO_COMPLSAPI_key_value_pairlsapi_check_pathLSAPI_ForeachHeader_rpHeaderName_SC_SEM_NSEMS_MAX_SC_USHRT_MAXLSAPI_FinalizeRespHeaders_r__read_alias__fdelt_chkshouldFixEndianpBody_SC_STREAM_MAX_SC_ASYNCHRONOUS_IOserverMaxIdle__open_alias_SC_READER_WRITER_LOCKS_SC_CPUTIME__getcwd_alias_SC_2_PBS_LOCATE_SC_DEVICE_IOsa_flagspVecgeteuid_SC_SIGNALS__ctype_b_loc_SC_V7_ILP32_OFFBIGstatusoff_tchild_statuss_notified_pids_max_reqsH_X_FORWARDED_FORs_pid_dump_debug_info_ISalpha__fprintf_chktm_zone__mode_tm_queryStringOff_SC_V7_LP64_OFF64_SC_NPROCESSORS_CONF__RLIMIT_SIGPENDINGfdInlsapi_changeUGidtv_usec_SC_XOPEN_XCU_VERSIONold_childold_termLSAPI_sendfile_rlsapi_lve_erroraccept_SC_MEMLOCKallocateRespHeaderBuf_ISprintsched_yieldpMessages_liblvepValueH_CONTENT_LENGTHm_tmLastCheckPoint__vfprintf_chk_ISalnum_SC_SEM_VALUE_MAXs_req_processedstrtollopen_SC_XOPEN_XPG2_SC_XOPEN_XPG3_SC_XOPEN_XPG4LSAPI_STATE_CONNECTED_IO_write_ptr_SC_REALTIME_SIGNALSsystemlsapi_packet_headerIPPROTO_ENCAP_ISspacelsapi_suexec_authgetLFg_prefork_serverva_list__suseconds_treqsexitLSAPI_CreateListenSock2__rlim_ts_ignore_pid__RLIMIT_MEMLOCKpCurpHeaderValue__sizesizes_slow_req_msecslsapi_init_children_statusgetuidFILEH_COOKIELSAPI_ParseSockAddrdlsympthread_lib_SC_PII_INTERNET_DGRAM_SC_SINGLE_PROCESSbyteReversedump_debug_infoLSAPI_Accept_Before_Fork_SC_SHRT_MAX_ISxdigit_SC_RAW_SOCKETSfp_lve_enterLSAPI_AppendRespHeader_rsize_tH_CONNECTIONLSAPI_GetHeader_r_SC_MULTI_PROCESSs_stderr_log_pathm_statefp_lve_instance_init_SC_BC_BASE_MAXH_CONTENT_TYPELSAPI_STATE_ACCEPTING_SC_RTSIG_MAX_SC_NETWORKINGachCmdH_ACCEPT_SC_GETGR_R_SIZE_MAXperrorcompareValueLocation_SC_THREAD_ATTR_STACKADDR_SC_LEVEL2_CACHE_ASSOC_SC_IOV_MAX_SC_TRACE_EVENT_NAME_MAX_SC_PII_INTERNETIPPROTO_IGMPpServerAddrlsapi_acceptlsapi_initLVE_IO_save_baseLSAPI_Release_riovecold_usr1maxIdleChldsocklen_tm_iMaxChildren_SC_2_UPEai_canonnameIPPROTO_IPV6_SC_DELAYTIMER_MAXpw_dirsa_mask__sigval_tLSAPI_Set_Extra_Childrens_restored_ppidsin6_flowinfototalLenm_pid_SC_SYSTEM_DATABASElsapi_prefork_server_acceptm_pIovecToWritecodem_respHeaderLen_wide_dataH_IF_MATCHai_family__nlink_tsi_addrst_inost_modeLSAPI_IsRunning_SC_T_IOV_MAXCGI_HEADER_LENIPPROTO_DCCP__in6_uGetHeaderVarH_ACC_CHARSET__stream_SC_XOPEN_STREAMSm_iMaxIdleChildrensendfile_IScntrlm_reqBufSizelsapi_child_statusprctlallocateEnvList_ISupperpStatuserr_nosival_intsi_codem_pReqBufwait_timestrcasecmpH_IF_UNMOD_SINCEpw_name_SC_TRACE_USER_EVENT_MAX__socklen_tsend_notification_pktlsapi_requestpKeyEndcurTimefprintflsapi_writev__ssize_t__srclsapi_closepChrootH_IF_RANGEtimespecnameOff__u6_addr8strerror__RLIMIT_RSSavoidForkm_packetLenLSAPI_ReadReqBody_rIPPROTO_MPTCP_SC_2_FORT_RUNbindfp_lve_leave__valin6_addr_SC_ADVISORY_INFOpacketLen__timezone__ctype_toupper_locsin6_addr_SC_TIMER_MAXpBufCur_SC_THREADSunset_lsapi_envs__sighandler_t_SC_USER_GROUPS_RLSAPI_Set_Server_fdLSAPI_CreateListenSock__RLIMIT_LOCKSm_respPktHeaderEndLSAPI_On_Timer_pfLSAPI_Set_Max_Reqs_SC_UINT_MAXst_uids_conn_close_pktLSAPI_Postfork_ParentpEndpktTypelsapilib.cset_skip_write_SC_TRACE_NAME_MAX_lowers_busy_workers_SC_THREAD_DESTRUCTOR_ITERATIONSm_flagmemsetlevelstderrm_pHeaderIndexnameidle_SC_CHILD_MAXlsapi_reopen_stderr2_IO_save_endtm_min__nptrLSAPI_InitLSAPI_Request_SC_V6_LP64_OFF64flag_SC_NGROUPS_MAXm_bufProcessedfixHeaderIndexEndianstdoutfp_offsetlsapi_MD5TransformLSAPI_Write_Stderr_r__time_t_SC_THREAD_ROBUST_PRIO_INHERITgp_offset_padLSAPI_ForeachOrgHeader_rsigaddsetLSAPI_Inc_Req_Processedm_httpHeaderLendyingrealpathtm_yday_SC_SSIZE_MAX_SC_PII_OSI_CLTS_SC_SYSTEM_DATABASE_RmsecspAuth_SC_LEVEL1_DCACHE_SIZEkeyLenextraChildrenLSAPI_Flush_rshort unsigned intrlim_cursigned charLSAPI_Reset_rs_lve/builddir/build/BUILD/opt/alt/ruby31/share/gems/gems/ruby-lsapi-5.6/ext/lsapiLSAPI_CB_EnvHandler_valueLen__blksize_t_SC_STREAMSSOCK_STREAMdigestpBufEndGNU C17 8.5.0 20210514 (Red Hat 8.5.0-20) -mtune=generic -m64 -march=x86-64 -g -O2 -fPIC -fexceptions -fstack-protector-strong -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection=full -fplugin=annobin_SC_PAGESIZE_SC_THREAD_PRIORITY_SCHEDULINGcountsi_pidIPPROTO_MTPs_stop_SC_CHARCLASS_NAME_MAXlsapi_header_offsetstrchrvfprintfsetgid_boundstm_wday__off64_t__fd__lenachBuf_sigsys_IO_read_base_SC_XBS5_ILP32_OFFBIGsend_req_received_notification_offsetIPPROTO_EGPLSAPI_reset_server_statesockaddrsigset_ts_defaultGids_keep_listenersecsm_cntUnknownHeadersreadfdsai_addrlenlongsopterr_SC_DEVICE_SPECIFIC_RLSAPI_Set_Restored_Parent_Pidpw_gecos_modem_iExtraChildrenLSAPI_No_Check_ppid_SC_PIPE_IO_write_base_SC_XOPEN_CRYPTvalueLenm_respInfotz_dsttime_SC_PHYS_PAGESlsapi_enable_core_dumpH_CACHE_CTRLH_COOKIE2_SC_ATEXIT_MAX__desttm_monclose_SC_SHRT_MIN_SC_FIFObitstimeH_USERAGENTs_min_avail_pages_SC_USER_GROUPSm_lLastActiveLSAPI_ForeachEnv_rlong intSOCK_PACKETsa_sigactionnotify_req_received_SC_XBS5_ILP32_OFF32dumps_worker_status_IO_marker__builtin_strncpys_ppidtm_yearlimitmax_children_SC_2_PBS_MESSAGEm_pRespBufEndtimevalorig_masktmCur_SC_XOPEN_REALTIME_THREADSfp_lve_is_availablepAddrs_defaultUidm_pChildrenStatus__fds_bits_SC_SPIN_LOCKSLSAPI_Set_Server_Max_Idle_Secswritem_bufRead_SC_SPORADIC_SERVERlsapi_close_connectionuint8_t_SC_LEVEL1_DCACHE_LINESIZE__sigaction_handlerlsapi_signal_SC_PRIORITIZED_IOin_addrSOCK_SEQPACKET__pid_t_IO_codecvt_SC_GETPW_R_SIZE_MAXpUgidheadershints_SC_XOPEN_VERSIONH_RANGE_SC_BC_SCALE_MAX_SC_2_C_VERSIONdup2strtolg_reqlong doubleparseEnvai_socktype_SC_THREAD_KEYS_MAXiov_len_SC_LEVEL4_CACHE_LINESIZEfd_setlsapi_MD5Init_SC_NL_TEXTMAXnonblocklong unsigned intlsapi_req_header_SC_LOGIN_NAME_MAXfind_child_statusIPPROTO_PIM_SC_XBS5_LP64_OFF64_SC_SPAWNmaxChildrennewlensi_statussigemptyset_pkeym_headerOff__RLIMIT_OFILEHTTP_HEADERS_SC_2_PBSs_proc_group_timer_cbpw_gid__errno_location_SC_XBS5_LPBIG_OFFBIG_SC_WORD_BITchar_SC_2_PBS_ACCOUNTINGm_pSpecialEnvListsin6_scope_idstdin_SC_AIO_MAX__oflag_SC_2_CHAR_TERMresolved_path_SC_LEVEL1_ICACHE_LINESIZE_IO_buf_baseai_flagsrealloc_SC_XOPEN_SHM__dev_t_SC_XOPEN_ENH_I18Nold_quitRLIMIT_CPU__glibc_reserved_IO_read_end_SC_ULONG_MAX_SC_TYPED_MEMORY_OBJECTS_SC_TIMEOUTS_SC_LEVEL2_CACHE_SIZEfinal_SC_XOPEN_UNIXm_pRespBufPos_IO_FILEin_addr_tm_fdH_HOST_IO_wide_datacookiestrlentzname_sifields_SC_LEVEL2_CACHE_LINESIZE__u6_addr16s_pidIPPROTO_AHLSAPI_ReqBodyGetLine_rtm_hoursetsidFlush_RespBuf_r_SC_THREAD_STACK_MINisPipe_SC_PII_OSI_Mm_respHeaders_global_counterRLIMIT_AS_SC_NL_MSGMAXsi_signom_pAppData__RLIMIT_MSGQUEUEachAddrm_inProcess_SC_THREAD_ROBUST_PRIO_PROTECT_ISgraph_lsapi_prefork_servertm_mdaypIntegerlsapi_siguser1__pad0_SC_BC_DIM_MAX__pad5_SC_LEVEL1_DCACHE_ASSOCmallocs_dump_debug_infos_avail_pages__u6_addr32_headerInfom_typesi_errnofinish_closelistensigno_SC_XOPEN_REALTIME_markersLSAPI_InitRequest_SC_SAVED_IDSpBindm_scriptFileOff_SC_INT_MAXsi_bands_log_level_namess_skip_writeH_VIAmemccpy_codecvtforkIPPROTO_ESPm_pRespHeaderBufEnd_SC_TRACE_LOGgetpwnamtimeout_SC_THREAD_PRIO_PROTECTg_fnSelectRLIMIT_FSIZE__builtin_memcpyst_rdevlsapi_http_header_indexpEnv_SC_OPEN_MAXst_devssize_tdlerrorheaderIndex_SC_UIO_MAXIOVLSAPI_Logm_pRespHeaderBuf__int32_tH_PRAGMA__uint32_tqsortpSecretFile__RLIMIT_NLIMITS__daylightIPPROTO_RSVPstrncpyH_REFERERIPPROTO_UDPLITESOCK_CLOEXECLSAPI_Set_Slow_Req_MsecsLSAPI_Prefork_Accept_r_sys_siglisthandler_SC_CHAR_MAXLSAPI_Get_ppid_ISlowerpEnvEndsigprocmaskm_pUnknownHeadergetpwuidm_reqState_SC_PII_XTIpRespHeadersleftkillsysconfm_pRespBufm_iCurChildrensocketLSAPI_Write_r_SC_PII_OSI_COTSm_totalLenpasswdm_pIovecs_stderr_is_pipefstat__snprintf_chk_SC_PII_SOCKET__gid_tlsapi_sigpipe_SC_V6_LPBIG_OFFBIG_SC_MQ_PRIO_MAXgetcwdH_TRANSFER_ENCODINGH_IF_MODIFIED_SINCE__bsxai_nexts_enable_core_dump_SC_TRACE_EVENT_FILTERnodelaysin6_family__resolved_freeres_buf_sigfaultm_iChildrenMaxIdleTime_SC_THREAD_CPUTIMEsi_utimetv_sec_SC_VERSIONm_cntSpecialEnv_SC_C_LANG_SUPPORT_Rlong long unsigned intmemmovesa_handlersin_addr_cur_columnlsapi_load_lve_libtoWriteuid_t_SC_PIIsi_fd_SC_MAPPED_FILES_SC_LEVEL4_CACHE_SIZEIPPROTO_BEETPHfp_lve_jail_SC_2_FORT_DEVIPPROTO_IPm_pRespHeaderBufPosst_blockslsapi_initSuEXEC__bswap_16getpid__buf_SC_2_LOCALEDEFm_cntEnvlocaltime_r_SC_LEVEL1_ICACHE_SIZEreadBodyToReqBuftm_gmtoffIPPROTO_PUP_namesigval_IO_backup_baseH_KEEP_ALIVE_IO_read_ptr_SC_CHAR_BITLSAPI_Register_Pgrp_Timer_Callbackmd5ctx__socket_type__nbytes_nameLengetenv_freeres_list__aps_max_busy_workersIPPROTO_ETHERNETH_IF_NO_MATCHpEnvListrlim_tlsapi_readsun_pathtimezoneCGI_HEADERSsi_overrun__bswap_32pReq_SC_INT_MINlsapi_MD5Update_SC_RE_DUP_MAX_SC_PII_INTERNET_STREAMachBodyachPeerheader_SC_THREAD_ATTR_STACKSIZEfull_path_old_offset_SC_SIGQUEUE_MAXsiginfo_t_SC_FD_MGMTexpect_connected_SC_SYNCHRONIZED_IOLSAPI_STATE_IDLEvalueOffsighandler_t_SC_V7_ILP32_OFF32skipunlinksend_conn_close_notificationoptinds_accept_notifywritevH_ACC_LANG_SC_EXPR_NEST_MAX_SC_LEVEL3_CACHE_LINESIZElong long intm_pktHeaderin6addr_loopbackports_accepting_workersIPPROTO_IDP_flags2lsapi_prefork_serverallocateIovec_SC_MESSAGE_PASSING__ch_SC_REGEX_VERSIONm_iLenLSAPI_Set_Max_Children__d1setuidtv_nsecm_scriptNameOfflsapi_perror_SC_FILE_LOCKING_SC_AVPHYS_PAGES_SC_MB_LEN_MAXpHeader_ISdigitsockaddr_in6IPPROTO_SCTP_SC_PII_OSI_SC_ARG_MAX__ino_tsetsockopt_SC_MEMLOCK_RANGELSAPI_Finish_r_SC_SHARED_MEMORY_OBJECTSlsapi_resp_headersys_nerrin6addr_anym_pRequestMethodachError_SC_CHAR_MIN__realpath_chkiov_basem_lReqBegins_uids_total_pagespw_shell__namem_versionB0m_versionB1IPPROTO_GRE_SC_XOPEN_LEGACY_SC_NL_ARGMAXRLIMIT_COREsi_tidtobekilled_SC_THREAD_PRIO_INHERIT_SC_LEVEL3_CACHE_ASSOC_SC_NPROCESSORS_ONLNm_headerLenexpect_acceptingm_pIovecCurfdListenLSAPI_Init_Env_Parametersaddr_len_SC_HOST_NAME_MAXIPPROTO_TCPLSAPI_AppendRespHeader2_r_SC_COLL_WEIGHTS_MAX_SC_MONOTONIC_CLOCK__rlimit_resourcem_reqBodyReadLSAPI_Set_Max_Idle_SC_CLK_TCKLSAPI_ForeachSpecialEnv_rlsapi_buildPacketHeaderLSAPI_perror_r_SC_NL_SETMAXunsigned int_SC_BARRIERSbodyLenpBeginLSAPI_Accept_rwait_secslsapi_reopen_stderrstrcmpst_mtim__statbuf__RLIMIT_NICEfn_select_tshort intlsapi_notify_pidsi_sigvalsetrlimit_vtable_offsetaddrinfo_SC_IPV6mmapIPPROTO_ICMPlsapi_sigchild_SC_REGEXPlsapi_schedule_notifyLSAPI_Get_Slow_Req_Msecs_SC_V6_ILP32_OFFBIGstatmemchrtz_minuteswestsys_siglistH_ACC_ENCODINGsin6_portm_iMaxReqProcessTime__RLIMIT_RTPRIOGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-20)GNU�zRx�0D
LXsE�I�B �E(�A0�z
(A BBBIA
(D BBBA��@�YG�J�B �B(�A0�A8��0F(B DBb0�B�F�C �G�
 AABKHk(\GA�D�J n
AAA4�UA�G�K R
CAGL
JCG ��A�G�]
AJ �t��
CKF�L�B�B�E �A(�H0�H
(D BBBD�
(D BBBAPX�v�F�B �A(�D0�D
(A BBBBL(A BBBA�����$�aA�A�D XAAH��B�B�B �B(�A0�A8�D@N
8C0A(B BBBH$ OA�f
QC
EH@HYB�B�B �A(�D0�J��
0A(A BBBFx��F�E�A �C(�G�
 
(A ABBDM�
I�
c�
A�
��
E�
M�
A�
k�
E�
E�
E�
E�
H�V�
H�F�B�B �B(�A0�A8�D``
8A0A(B BBBDlT+B�B�B �B(�A0�D8�J�Y�H�P�C�	M�i
8A0A(B BBBEL�T�M�D�d�6B�B�B �B(�A0�A8�DP�
8A0A(B BBBG
8J0H(G DBBK$,7E�F�F IIOTh|�4��F�A�A �G�>
 AABG ��E�O
D�
A
(Y<JE�DXS l]P�h
HXA�H�lF�B�B �B(�A0�A8�LP�
8A0A(B BBBH<�F�B�B �A(�A0��
(D BBBIi`0F�B�B �B(�A0�A8�DP~
8A0A(B BBBAk
8A0A(B BBBHL�$F�B�B �A(�A0�H��Q
D���
0A(A BBBHL�F�B�B �B(�A0�A8�G��
8A0A(B BBBF4FHF\�$p�n�C�X�J�L�lF�B�B �B(�A0�A8�D�A
8A0A(B BBBA`��B�B�B �B(�A0�A8�G� I� K� I� L� N� N� w
8A0A(B BBBI0L	�B�M�D �G�L
 AABA<�	=B�A�A �G� L�@I�@U
 AABG$�	�T�WE�H�G� �	�a�g
HS�H
�F�B�B �B(�A0�A8�DPS
8D0A(B BBBFTX
�b�I�E �D(�C0�P
�(F� B�B�B�MQ(H BBBA�����H�
�F�B�B �B(�A0�A8�DP�
8A0A(B BBBAT�
C�B�A �A(�G0`
(A ABBD�
(C ABBAJ����8T-F�B�D �D(�D@T
(A ABBB�(�lE�C�G�F
AAIL�!c�B�G �A(�D0�
(A ABBEX����D0���� 4ZH10\pF�A�A �G@7
 AABF�@L�sL�F�B�B �B(�A0�A8�G��
8A0A(B BBBG�
$
8
L
`
t
�
�
�
�
<�
	F�B�A �K(�G�
(A ABBG<�F�E�E �D(�D0�M
(C BBBBX(Hl�F�B�H �E(�A0�E8�I@�
8A0A(B BBBE(��F�E�D ��ABH��B�B�B �B(�A0�A8�G��
8A0A(B BBBJD0�F�B�B �A(�A0�G�
0A(A BBBFLx�
F�B�B �B(�A0�A8�G��
8A0A(B BBBA��
�	
1-
E2a~3��4��5.IWu��l	��-�-
�"0s-�J�e�s	z����	����)�Y)2�L0�Y�z+	��k�	 �+	�w	0	Gw	:�	X�	Ui�	�s
��	��s
����
��
x5��P	�_	�s(�0�x�*
����*
#�
N0
al	�|�
����
������O&	�-	�=�h9��Y�9��	��@	�$�@�O	�e`	r���U�+���6�6	%		�7	6S	wm	w�	��		l�		��	��	��	�
�4
�f
��
	x�
��
��
�]	�'	�;]\m{m��������*+*L�k������\�\"
k C
k b
� 
� �
�"�
 ��
�"�
$%@� `d0$%UE'x�d�E'��'��'��'�'D�(m�(��)��)��*�	���*�+7+�F�+c�,~,��	0��,��.��,=��.u/*7u/[)0})0��1��1��2��2�4C�4k�5��5��6��67!7G�7k�7��8�d	��X	��8
�8+�8S:9y:9�q9�P	�q9��:	�#h	3	(B�:g0;�0;�H?�	��	���	@��	���	��H?'^?GR^?tk?�k?��?��?�?,�?V�?~�?��?��?@,@T@z	��@�+@�+@�?@?@;K@WK@�TI�	)�	p�	h�	d�	`�	P�	H	@#	80	X6TIY�Iz�I�J�J��J��J�K(�K?�WT�K�\(b $o(|�W�UY�UY�Zd Zd>qdiqd��d!#$&()+23456718���2�8�F�"��K�O�(�p���R�P���[oy�#�)�/�5;�A�G8MXS�Y�_�e�k�qw+}=�N�b�w��������������*�@�V���������������
����%]+o1�7�=�CpIO@U�[Tahgtms8yp��6�����&�������������(���P���,-./0) 
>�Mcmy�������� ��1�������   " / 9 @��C R a h v � � � � �� @7� � �� �� �� �!�� !'!	#S!3!8!��C!RK!@	Q!X!^!`
p!p�!�Y�!�J�!�!0S�!�]�!�l�!�!�!`"p i"� %","@"#$Y"_"0%u"P'F�"�'F�"�'��"�(��"�)l��"�"�"�"#
#�.�#�/�1#00�?#2�P#Y#�2�s#z#�4�#�5-�#�#�#�#�#7�# 7l�#�7!
$$$!$�85$�8ZN$@91a$�9pv$�:@�$�$0;�$�$�$�$P?�$`?�$p?%�?%�?:%�?V%�?u%@�% @�%0@�%@@�%P@	�%�%�%�%&&& &`I�4&�I(B&J�R&K�a&j&q&{&�&�&�&�&�W��&`Y�
�&�&�&`d�&�d
'.annobin_lsapilib.c.annobin_lsapilib.c_end.annobin_lsapilib.c.hot.annobin_lsapilib.c_end.hot.annobin_lsapilib.c.unlikely.annobin_lsapilib.c_end.unlikely.annobin_lsapilib.c.startup.annobin_lsapilib.c_end.startup.annobin_lsapilib.c.exit.annobin_lsapilib.c_end.exit.annobin_lsapi_sigpipe.start.annobin_lsapi_sigpipe.endlsapi_sigpipe.annobin_lsapi_siguser1.start.annobin_lsapi_siguser1.endlsapi_siguser1g_running.annobin_compareValueLocation.start.annobin_compareValueLocation.end.annobin_EnvForeach.start.annobin_EnvForeach.endEnvForeach.annobin_lsapi_cleanup.start.annobin_lsapi_cleanup.endlsapi_cleanups_stop.annobin_set_skip_write.start.annobin_set_skip_write.ends_skip_write.annobin_lsapi_MD5Transform.start.annobin_lsapi_MD5Transform.endlsapi_MD5Transform.annobin_lsapi_signal.start.annobin_lsapi_signal.endlsapi_signal.annobin_find_child_status.start.annobin_find_child_status.endfind_child_statusg_prefork_server.annobin_allocateRespHeaderBuf.start.annobin_allocateRespHeaderBuf.endallocateRespHeaderBuf.annobin_lsapi_set_nblock.start.annobin_lsapi_set_nblock.endlsapi_set_nblock.annobin_lsapi_accept.start.annobin_lsapi_accept.endlsapi_accept.annobin_parseEnv.start.annobin_parseEnv.endparseEnv.annobin_lsapi_init_children_status.start.annobin_lsapi_init_children_status.endlsapi_init_children_statuss_busy_workerss_accepting_workerss_avail_pagess_global_counter.annobin_readBodyToReqBuf.part.2.start.annobin_readBodyToReqBuf.part.2.endreadBodyToReqBuf.part.2.annobin_lsapi_close_connection.isra.4.start.annobin_lsapi_close_connection.isra.4.endlsapi_close_connection.isra.4s_worker_status.annobin_lsapi_writev.part.6.start.annobin_lsapi_writev.part.6.endlsapi_writev.part.6.annobin_lsapi_parent_dead.start.annobin_lsapi_parent_dead.endlsapi_parent_deads_ppids_restored_ppid.annobin_LSAPI_ParseSockAddr.part.13.start.annobin_LSAPI_ParseSockAddr.part.13.endLSAPI_ParseSockAddr.part.13.annobin_LSAPI_Log.start.annobin_LSAPI_Log.ends_stderr_is_pipes_log_level_namess_pid.annobin_lsapi_sigchild.start.annobin_lsapi_sigchild.endlsapi_sigchilds_pid_dump_debug_infos_ignore_pid.annobin_dump_debug_info.start.annobin_dump_debug_info.end.annobin_lsapi_check_child_status.start.annobin_lsapi_check_child_status.endlsapi_check_child_statuss_max_idle_secss_dump_debug_info.annobin_lsapi_perror.start.annobin_lsapi_perror.end.annobin_LSAPI_is_suEXEC_Daemon.start.annobin_LSAPI_is_suEXEC_Daemon.ends_uids_secret.annobin_LSAPI_Stop.start.annobin_LSAPI_Stop.end.annobin_LSAPI_IsRunning.start.annobin_LSAPI_IsRunning.end.annobin_LSAPI_Register_Pgrp_Timer_Callback.start.annobin_LSAPI_Register_Pgrp_Timer_Callback.ends_proc_group_timer_cb.annobin_LSAPI_InitRequest.start.annobin_LSAPI_InitRequest.end.annobin_LSAPI_Init.start.annobin_LSAPI_Init.endg_initedpthread_atfork_func.annobin_LSAPI_Is_Listen_r.start.annobin_LSAPI_Is_Listen_r.end.annobin_LSAPI_Is_Listen.start.annobin_LSAPI_Is_Listen.end.annobin_LSAPI_Reset_r.start.annobin_LSAPI_Reset_r.end.annobin_LSAPI_Release_r.start.annobin_LSAPI_Release_r.end.annobin_LSAPI_GetHeader_r.start.annobin_LSAPI_GetHeader_r.end.annobin_LSAPI_ReqBodyGetChar_r.start.annobin_LSAPI_ReqBodyGetChar_r.end.annobin_LSAPI_ReqBodyGetLine_r.start.annobin_LSAPI_ReqBodyGetLine_r.end.annobin_LSAPI_ReadReqBody_r.start.annobin_LSAPI_ReadReqBody_r.end.annobin_Flush_RespBuf_r.start.annobin_Flush_RespBuf_r.end.annobin_LSAPI_GetEnv_r.start.annobin_LSAPI_GetEnv_r.endCGI_HEADERS.annobin_LSAPI_ForeachOrgHeader_r.start.annobin_LSAPI_ForeachOrgHeader_r.endHTTP_HEADERSHTTP_HEADER_LEN.annobin_LSAPI_ForeachHeader_r.start.annobin_LSAPI_ForeachHeader_r.endCGI_HEADER_LEN.annobin_LSAPI_ForeachEnv_r.start.annobin_LSAPI_ForeachEnv_r.end.annobin_LSAPI_ForeachSpecialEnv_r.start.annobin_LSAPI_ForeachSpecialEnv_r.end.annobin_LSAPI_FinalizeRespHeaders_r.start.annobin_LSAPI_FinalizeRespHeaders_r.end.annobin_LSAPI_Flush_r.start.annobin_LSAPI_Flush_r.end.annobin_LSAPI_Write_Stderr_r.start.annobin_LSAPI_Write_Stderr_r.ends_stderr_log_path.annobin_LSAPI_perror_r.start.annobin_LSAPI_perror_r.endLSAPI_perror_r.annobin_lsapi_jailLVE.start.annobin_lsapi_jailLVE.endlsapi_jailLVEfp_lve_jail.annobin_lsapi_reopen_stderr.start.annobin_lsapi_reopen_stderr.endlsapi_reopen_stderr.annobin_LSAPI_Finish_r.start.annobin_LSAPI_Finish_r.endfinish_close.annobin_LSAPI_End_Response_r.start.annobin_LSAPI_End_Response_r.end.annobin_LSAPI_Write_r.start.annobin_LSAPI_Write_r.end.annobin_LSAPI_sendfile_r.start.annobin_LSAPI_sendfile_r.end.annobin_LSAPI_AppendRespHeader2_r.start.annobin_LSAPI_AppendRespHeader2_r.end.annobin_LSAPI_AppendRespHeader_r.start.annobin_LSAPI_AppendRespHeader_r.end.annobin_LSAPI_CreateListenSock2.start.annobin_LSAPI_CreateListenSock2.end.annobin_LSAPI_ParseSockAddr.start.annobin_LSAPI_ParseSockAddr.end.annobin_LSAPI_CreateListenSock.start.annobin_LSAPI_CreateListenSock.end.annobin_LSAPI_Init_Prefork_Server.start.annobin_LSAPI_Init_Prefork_Server.ends_max_busy_workersg_fnSelects_total_pages.annobin_LSAPI_Set_Server_fd.start.annobin_LSAPI_Set_Server_fd.end.annobin_LSAPI_reset_server_state.start.annobin_LSAPI_reset_server_state.end.annobin_is_enough_free_mem.start.annobin_is_enough_free_mem.ends_min_avail_pages.annobin_LSAPI_Postfork_Child.start.annobin_LSAPI_Postfork_Child.ends_req_processeds_keep_listeners_notified_pid.annobin_LSAPI_Postfork_Parent.start.annobin_LSAPI_Postfork_Parent.end.annobin_LSAPI_Accept_Before_Fork.start.annobin_LSAPI_Accept_Before_Fork.endold_childold_termold_intold_usr1old_quit.annobin_LSAPI_Set_Max_Reqs.start.annobin_LSAPI_Set_Max_Reqs.ends_max_reqs.annobin_LSAPI_Set_Max_Idle.start.annobin_LSAPI_Set_Max_Idle.end.annobin_LSAPI_Set_Max_Children.start.annobin_LSAPI_Set_Max_Children.end.annobin_LSAPI_Set_Extra_Children.start.annobin_LSAPI_Set_Extra_Children.end.annobin_LSAPI_Set_Max_Process_Time.start.annobin_LSAPI_Set_Max_Process_Time.end.annobin_LSAPI_Set_Max_Idle_Children.start.annobin_LSAPI_Set_Max_Idle_Children.end.annobin_LSAPI_Set_Server_Max_Idle_Secs.start.annobin_LSAPI_Set_Server_Max_Idle_Secs.end.annobin_LSAPI_Set_Slow_Req_Msecs.start.annobin_LSAPI_Set_Slow_Req_Msecs.ends_slow_req_msecs.annobin_LSAPI_Get_Slow_Req_Msecs.start.annobin_LSAPI_Get_Slow_Req_Msecs.end.annobin_LSAPI_No_Check_ppid.start.annobin_LSAPI_No_Check_ppid.end.annobin_LSAPI_Get_ppid.start.annobin_LSAPI_Get_ppid.end.annobin_LSAPI_Init_Env_Parameters.start.annobin_LSAPI_Init_Env_Parameters.ends_accept_notifys_enable_core_dumps_defaultUids_defaultGids_enable_lves_liblvefp_lve_is_availablefp_lve_instance_initfp_lve_enters_lve.annobin_LSAPI_ErrResponse_r.start.annobin_LSAPI_ErrResponse_r.end.annobin_lsapi_MD5Init.start.annobin_lsapi_MD5Init.end.annobin_lsapi_MD5Update.start.annobin_lsapi_MD5Update.end.annobin_lsapi_MD5Final.start.annobin_lsapi_MD5Final.end.annobin_readReq.start.annobin_readReq.endreadReqs_ackachBody.7025headers.7024.annobin_LSAPI_Accept_r.start.annobin_LSAPI_Accept_r.end.annobin_LSAPI_Prefork_Accept_r.start.annobin_LSAPI_Prefork_Accept_r.ends_conn_close_pkt.annobin_LSAPI_Set_Restored_Parent_Pid.start.annobin_LSAPI_Set_Restored_Parent_Pid.end.annobin_LSAPI_Inc_Req_Processed.start.annobin_LSAPI_Inc_Req_Processed.end.LC0.LC1.LC4.LC5.LC6.LC3.LC2.LC7.LC8.LC9.LC10.LC11.LC12.LC13.LC14.LC15.LC16.LC17.LC18.LC19.LC20.LC21.LC22.LC23.LC24.LC25.LC26.LC27.LC31.LC32.LC30.LC29.LC33.LC34.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC44.LC45.LC46.LC47.LC48.LC49.LC50.LC51.LC59.LC69.LC70.LC71.LC43.LC35.LC61.LC62.LC63.LC64.LC65.LC66.LC67.LC68.LC52.LC53.LC54.LC60.LC58.LC57.LC55.LC56.LC87.LC76.LC77.LC78.LC72.LC79.LC80.LC86.LC74.LC84.LC83.LC73.LC75.LC82.LC81.LC85.LC92.LC91.LC88.LC90.LC89.text.group.text.hot.group.text.unlikely.group.text.startup.group.text.exit.groupcompareValueLocationset_skip_write_GLOBAL_OFFSET_TABLE_sigactionsigemptyset__stack_chk_failreallocfcntlsetsockoptmmapmemsetsetsidread__errno_locationwritevkillgetppid__ctype_b_locstrncpystrchrstrcasecmpstrtolgetaddrinfomemcpyfreeaddrinfoinet_addrLSAPI_Log__vfprintf_chk__snprintf_chkgetuid__fprintf_chkgettimeofdaylocaltime_rwaitpidforksystemlsapi_perrorstrerrorLSAPI_is_suEXEC_DaemonLSAPI_StopLSAPI_IsRunningLSAPI_Register_Pgrp_Timer_CallbackLSAPI_InitRequestmallocgetpeernamedup2LSAPI_Initgeteuidg_reqdlopendlsymLSAPI_Is_Listen_rLSAPI_Is_ListenLSAPI_Reset_rLSAPI_Release_rfreeLSAPI_GetHeader_rLSAPI_ReqBodyGetChar_rLSAPI_ReqBodyGetLine_rmemchrmemmoveLSAPI_ReadReqBody_rFlush_RespBuf_rLSAPI_GetEnv_rstrcmp__ctype_toupper_locLSAPI_ForeachOrgHeader_rqsortLSAPI_ForeachHeader_rLSAPI_ForeachEnv_rLSAPI_ForeachSpecialEnv_rLSAPI_FinalizeRespHeaders_rLSAPI_Flush_rLSAPI_Write_Stderr_rgetpidgetcwdmemccpy__realpath_chkstrdupLSAPI_Finish_rLSAPI_End_Response_rLSAPI_Write_rLSAPI_sendfile_rsendfileLSAPI_AppendRespHeader2_rstrlenLSAPI_AppendRespHeader_rLSAPI_CreateListenSock2socketbindlistenunlinkLSAPI_ParseSockAddrLSAPI_CreateListenSockLSAPI_Init_Prefork_ServercallocsetpgidsysconfLSAPI_Set_Server_fdLSAPI_reset_server_stateis_enough_free_memLSAPI_Postfork_ChildLSAPI_Postfork_ParenttimeLSAPI_Accept_Before_Fork__fdelt_chkusleepsched_yieldLSAPI_Set_Max_ReqsLSAPI_Set_Max_IdleLSAPI_Set_Max_ChildrenLSAPI_Set_Extra_ChildrenLSAPI_Set_Max_Process_TimeLSAPI_Set_Max_Idle_ChildrenLSAPI_Set_Server_Max_Idle_SecsLSAPI_Set_Slow_Req_MsecsLSAPI_Get_Slow_Req_MsecsLSAPI_No_Check_ppidLSAPI_Get_ppidLSAPI_Init_Env_Parametersgetenvgetpwnamenvirondlerrorsetrlimit__fxstatsetreuidLSAPI_ErrResponse_rlsapi_MD5Initlsapi_MD5Updatelsapi_MD5FinalgetpwuidsetgidsetgroupssetuidstrtollprctlinitgroupsLSAPI_Accept_rLSAPI_Prefork_Accept_rsigaddsetsigprocmaskLSAPI_Set_Restored_Parent_PidLSAPI_Inc_Req_Processedselectd	���\����������������������������������������D	����������	���������
���������h
���������o
�����������������������������2�9�H$O,T���������g-��������o������������������������������h	C
���������M
���������X
h	c
�z
��
h	�
����������
h	h	a�������������������������������������������	���������8���������g����������.�������������������������������������J�������������������������������������������������5�����������*���������T�������������������/�������������������������������0������������������	*���������1��������%���������>���������K���������w2�������������������3����������������������������5R4��������Y5��������`6��������v����������������������\	��
"X	3�����������������������/���������8���������M7��������`���������i���������o��8���������������������������������������9����������������������������p���������3:��������?���������K���������_�;����������������������������������������<��������R���������f=���������h�{�d	�h	�t8���������~�����������������������������K���������W>��������`���������i��������������������������������{�h���������������������*����������������������������$?��������*�/���������?@��������G���������N�w*�������������������������������������"������������������������������������������������� ��������� ���������( h	!A��������`!����������!�!���������a"���������j#<q#�\p$*���������}$����������$*����������$��������� %���������%���%�&���������A'����������(����������(�Y)����������)��)���������b*��*����������*���������7+���������A+���������N+B��������W+���������_+���������}+C���������+����������+����������+����������+���������D,,{,D���������,����������,E���������,����������,h	-���������n-����������-����������-F���������-����������-��-����������-���������.�8.���������?.���������N.���������Y.���������~.G���������.����������.����������.H���������.���������/���������*/L/���������T/���������i/����������/����������/�/���������0���������_1����������1����������1����������1���������Q2���������v2����������2���������/3����������3���������-4���������O4���������|5���������N6���������h6����������6����������6����������6����������6����������6����������6����������6���������I7���������W7����������7����������7�7`	�7`	�7���������78��������8���������8�#8���������-8�28��������<8��������G8T	{8����������8�89�'9�G9$Q9L	f9T	�9�9����������9��9��9����������9�9����������9��9��9��9p:*���������:�#:�<:d	G:�Z:`	d:h�:����������:����������:����������:#�:����������:���������:����������:
;��������!;���������H;�;����������;���������;����������;����������;|�;����������;<<���������<�<���������,<�9<���������V<x<t�<\	�<���������<���������<$�<
��������:=��������S=���������e=��������o=���������}=|�=����������=��=����������=<�=����������=��=����������=�>�/>I��������6>���������@>��������F>w>���������>���������>����������>J���������>���������?K��������
?���������?L��������#?���������D?���������Y?f?��������w?�?�?�?�?@�&@�6@�F@�_@M��������@���������@��@N���������@���������@����������@O���������@���������@����������@d	�@P���������@��������A���������'AQ��������,A��������@A���������FA%MAR��������RA��������fA���������mA��������tAS��������yA���������Ah�AT���������A���������A����������A���������A����������AU���������A���������A����������AV���������A��������
B���������B��������BW�������� B��������4B���������;B��������BBX��������GB��������[B���������bB��������iBY��������nB���������B����������B���������BZ���������B���������B���������B[���������B���������B����������B`	�B\���������B���������B����������B��BhC`
C\C]��������#C��������2Cd?CdEC`TC^��������YC��������qC���������wC\�Ch�C*���������Ch�C_���������C`���������Ca��������zD`	�D����������DL	�D
���������Db���������D���������Dc��������E��������%E`1E��������NE���������UE*���������\E��������pEd��������uE���������EL�Ee���������E����������ED�E���������E\�Ef���������E����������Eg���������E<�E����������Eh���������E����������Ei��������F4
F���������Fj��������F���������%F,,FTGFk��������LF���������SFTXF���������_FP�F���������F����������F����������F��Fl���������F���������F����������FdGm��������
G��������G���������(G`/Gn��������4G��������QG���������mG���������G|�G����������G����������G�Gd�G`Ho��������H��������H\"Hd,H`6H`DH\ZHXyHL�Hp���������H����������H����������H����������H<�HT�H����������Hh�H���������HD�HXIh
I��������Iq��������+Ir��������7I���������AI���������KIs���������I����������I����������I����������I����������J����������J���������zK���������9L���������DL���������OLh	JM���������UM���������dMh	�M���������4N����������Ot���������O���������Pu��������P���������*P���������.RhDR%JR$]R#}R����������Rd�R`�Rv��������Sw��������mS|�S!���������S"���������S"���������S#��������	T$��������TT/T4GT+uT%���������T&���������T'���������Tl�Th�T����������TM���������T���������U�U|*U$1U���������GUx��������SU���������eU���������}U(���������Uy���������U����������Uz���������U����������Ud�U`�U$���������UT�U)��������V{��������V��������� V|��������,V���������=V%��������eV%��������V}���������V*���������V~���������V[�Vd�V`�V$���������V��������W���������W���������+W���������9W���������PW���������YW���������yW��W���������W ���������W����������W���������Xh	BX���������UX�hX��X$�X����������Xh	�X���������Y$ Y���������GY���������QY���������xY��Y����������Y�Y��Y�Y��Y���������Yh	#Zh	3Z�?Z�eZ
���������Z���������Z��Z��������p[����������[����������[����������[����������[���������\���������C\����������\�\t�\\	�\���������\���������\$]
��������^]��������u]����������]����������]��]�^�^�4^d	B^$X^$]^���������s^��^��^��^��^���������_d	_��������_c	+_�D_�c_��_���������_���������_���������_��_I���������_����������_��������`��������� `���������%`���������\`���������k`-��������|`.���������`����������`����������`.���������`����������`����������`���������
a���������,aJ��������5a���������ba�qa`	�a��a`	�a�a����������a����������a����������a����������a����������a���������b���������bh	3bK��������8b���������Gb���������Xb.��������gbpb���������vb�{b����������b��b��b��b��bp�b*����������b��b��bd	�b�c`	ch$c���������Cc���������Tc���������ec���������vc����������c����������c����������c����������c����������c#�c��cL���������c����������c��������d���������
d���������d�9d��������Kd�Vd���������fd�ld��d,�	������������������s���������|����������2����������J��������� +�� (LT����-��--�@-H�l�t�����������,�4)`�h)�)���)�����+	 �(+	L+	Tw	�+	�w	�w	��	�w	��	�	s
@�	Hs
ls
t��s
�����x�x,x4*
`xh*
�*
��
�*
��
��
�� �
(�L�T��������9���9	9	@	9H	l	t	��	�	��	��	�
�
�,
�4
6`
�h
6�
6�
w�
6�
w�
w�
� w(�L�T���������������@�H�l�t��������]
�
],
]4
m`
]h
m�
m�
��
m�
��
��
� �(�L�T*���*�*���*����@�H�l�t\���\�\�k \k ,k 4� `k h� �� ��"�� ��"��"�$% �"($%L$%TE'�$%�E'�E'��'�E'��'�'�'@�'H�'l�'t�(��'��(��(��)�(�),�)4�*`�)h�*��*��+��*��+��+��, �+(�,L�,T�.��,��.��.�u/��.�u/u/)0@u/H)0l)0t�1�)0��1��1��2�1�2,�24�4`�2h�4��4��5��4��5��5��6 �5(�6L�6T7��6�7�7��7�7��7�7�8@�7H�8l�8t�8��8��8��8�:9�8:9,:94q9`:9hq9�q9��:�q9��:��:�0; �:(0;L0;TH?�0;�H?�H?�^?�H?�^?^?k?@^?Hk?lk?t�?�k?��?��?��?�?�?,�?4�?`�?h�?��?��?��?��?��?�@ �?(@L@T@�@�@�@�+@�@�+@+@?@@+@H?@l?@tK@�?@�K@�K@�TIK@TI,TI4�I`TIh�I��I�J��I�J�J��J  J( �JL �JT �K� �J� �K� �K� �W� �K� �W!�W!UY@!�WH!UYl!UYt!Zd�!UY�!Zd�!Zd�!qd"Zd"qd,"qd4"�d`"qdh"�d % & ' (]�C�CC(X	0�1C�C3C9C> CE(CJ0CP8CU@C[HCbPCqXC�`C�hC�pC�xC��C��C��C��C��C��C��C��C�C�C�C+�C4�CH�CS�CY�CiCm C(C�0C�8C�@C�HC�PC�XC�`ChCpC!xC+�C7�CD�CT�Cg�C~�C��C��C��C��C��C��C��C�

$�
$�
$H)
#0
$A
<
$C
$	7J
$�$Q
$(V
$�d
$�7n
$�z
${+�
$�+�
$�!�
$�&�
$��
$a-�
$<4�
$��
$��
$q�
$`

$�#
$0"
$Z.
$�:
$*M
$�Y
$�
e
$iq
$��
$&�
$�
$��
$d,�
$��
$4�
$r�
$��
$��
$�(�
$8
�
$Z�
$��
$)
$� 
$n,
$�9
$k.F
$�3T
$Q8a
$.+n
$�{
$��
$��
$J�
$s�
$=)�
$�*�
$��
$�
$�/�
$�
�
$f7

$�
$'5
$�A
$rM
$�.b
$#�
$O	�
$��
$0�
$��
$��
$��
$��
$�
$o5
$*1
$�7(
$�5
$B
$�7Y
$�f
$s
$z%�
$b.�
$��
$��
$��
$y�
$�%�
$��
$�
$P
$9*(
$/?
$�L
$�Y
$Qp
$*|
$)
�
$��
$9�
$..�
$M�
$|�
$�(�
$�)
$�
$=)
$�',
$�18
$�^
$�.j
$�!�
$��
$�#�
$��
$#�
$-�
$3,
$l8
$�2
$�..
$5+:
$^F
$�"S
$k.`
$Mn
$�
�
$#�
$�$�
$��
$��
$��
$ �
$�
$�
$<
$�'(
$�5
$A0B
$'O
$�\
$� i
$�v
$N�
$�&�
$I�
$G�
$$0�
$@�
$�)�
$��
$��
$#3�
$�1	
$�.	
$�7	
$o,	
$9	
$�F	
$n*S	
$�`	
$�0m	
$!.z	
$S)�	
$� �	
$��	
$��	
$�
�	
$:"�	
$�#�	
$�'

$"

$S&&

$�2

$�>

$�4Z

$�f

${6x

$�&~

$�*�

$��

$7
�

$c5�

$��

$�

$�%�

$�(�

$t�

$p�

$��

$#�

$�(�

$x7�

$�8�

$��

$�+�

$U�

$�0�

$y
$
$�

$e,
$�49
$�$G
$�S
$�0e
$�k
$k
q
$�
w
$
}
$�#�
$��
$�!�
$�+�
$��
$��
$��
$��
$V�
$1�
$]8	
$!(
$-5
$�B
$�O
$�\
$�%i
$� v
$��
$5�
$�
$M�
$&(�
$)�
$^!�
$^"�
$X�
$�

$�

$0

$�=

$�	I

$�+U

$Na

$�'m

$�y

$1�

$C�

$04�

$�

$�6�

$��

$!+�

$��

$��

$��

$	*�

$��

$a�

$��

$��

$�#�

$2�

$
$/
$�
$O4
$�
$N3
$$
$p4*
$:0
$Y&6
$�
<
$�B
$[
H
$�-N
$r.T
$�Z
$N`
$(f
$2l
$�1r
$wx
$~
$D)�
$>$�
$��
$R6�
$*�
$�2�
$o�
$a1�
$�
$	�
$�
$��
$S/�
$�
$��
$�/�
$/�
$�,�
$R-�
$�
$$4�
$�
$d
$Q+
$�
$p1
$ 
$-&
$�,
$a(2
$�8
$�>
$5D
${J
$�#P
$%V
$�\
$�b
$�$h
$E(n
$�t
$�z
$�1�
$��
$�5�
$�*�
$��
$�
$�5�
$!�
$�3�
$H!�
$��
$$$�
$U�
$o'�
$� �
$�&�
$�&�
$m&�
$O$�
$��
$a�
$p�
$
$N0

$H,
$�4
$-*
$E1"
$f(
$&.
$�34
$�:
$�@
$	F
$aL
$eR
$k!X
$O^
$=d
$'j
$:p
$U5v
$�	|
$�(�
$h�
$�6�
$�$�
$"�
$��
$I%�
$�%�
$D5�
$�)�
$�"�
$2�
$7�
$0�
$��
$�.�
$��
$��
$O.�
$�
$��
$\ 
$�1
$x!
$� 
$b
$�3
$$
$g6*
$�0
$6
$\<
$�B
$#H
$8N
$g3T
$�Z
$9`
$]%f
$N#l
$r
$0x
$�~
$F'�
$-'�
$�!�
$��
$�%�
$&�
$�
$y"�
$ �
$
�
$��
$-	�
$��
$=8�
$t�
$w-�
$6�
$2�
$�-�
$��
$�*�
$�/
$k

$�&
$�
$Z)
$�# 
$S'&
$�,
$�'2
$8
$�5>
$�2D
$"/J
$�	P
$�$V
$�7\
$|b
$B2h
$Sn
$�t
$z
$y�
$��
$��
$��
$��
$,�
$�
$�(�
$�
�
$~2�
$U �
$��
$y#�
$^�
$�
$�'
$�#
$�9
$b/?
$�7E
$K
$D
Q
$,6W
$�]
$0c
$�i
$3o
$�u
$�{
$��
$�+�
$85�
$|*�
$(�
$��
$8/�
$��
$=%�
$�
�
$4�
$�+�
$B	�
$�0�
$G�
$��
$O
�
$��
$�
$�'
$�)N
$)[
$n
$�4z
$�2�
$��
$`
�
$�
$�.�
$��
$
4�
$
.�
$�8
$
$m
$E&-
$�7;
$�&I
$�W
$�$e
$ys
$D �
$��
$��
$�-�
$,
�
$��
$1�
$r
$

$x8
$�2
$%
$�"
$)(
$�.
$�4
$>!:
$�'@
$�+F
$�+L
$�!R
$1!X
$�-^
$�d
$�0j
$�p
$�v
$40|
$6$�
$��
$`*�
$�-�
$y3�
$�
$��
$ 5�
$,5�
$�)�
$��
$�
$%
$�2 
$j-
$�
:
$*G
$�3T
$�a
$Z	n
$( {
$�/�
$~.�
$+�
$�5�
$�%�
$%�
$��
$�
$,2
$�  
$�-
$z:
$�
H
$�4U
$�2b
$� r
$q$w
$�
�
$��
$��
$��
$�	�
$6�
$�
�
$�'�
$�!�
$�4�
$�
$c
$�,"
$�"/
$~'<
$j+I
$�*V
$m/c
$tp
$#-}
$��
$�5�
$`�
$�
$?�
$%�
$3&�
$��
$��
$�
$�,
$�
$�&
$�3
$�@
$�4M
$-Z
$�,g
$�
t
$�6�
$��
$D#�
$W�
$o(�
$u�
$�(�
$p�
$*�
$�
$�

$�(
$�"
$�/
$m	<
$v
I
$�
$f�
$k$�
$��
$�7+
$O
$�i
$�!�
$��
$2�
$��
$8�
$p�
$*"���
$�	�
$gl	$
$W"1�:
$G�P
$�']�f
$�s�|
$ �h	�
$y)���
$����
$D���
$S*��
$�
$�,�5
$3B�K
$|(X0a
$�0nd	w
$����
$,-���
$c�`	�
$5�X	�
$�!�P	�
$�)�(
�#
$�0�9
$�%Fx_
$1l �
$�����
$�%�@�
$���`�
$A*��
$52�
$�- p 
$�4 l( 
$�"6 h? 
$ M dV 
$#d `m 
$
r 
$B� X� 
$�� P� 
$�"� H� 
$� @� 
$0*!
$�8!8[!
$�!
$G/�!0�!
$�2�!)�!
$K�!
$��!
$��!(�!
$�	�!("
$Q" +"
$�)9"B"
$�)P"
$0^"
$�0l"
$�z"
$��"
$�*�"�"
$)�"
$�'�"
$��"
$� �"
$�,�"
$>�"
$�#
$8.#
$�8#
$�,#
$�":#
$�H#
$9W#
$+3d#
$r# �#
$��#�#
$"�#�#
$�#�#
$u�#��#
$�&�#��#
$$@$
$k$�"$
$k0$9$
$CF$
$RR$�dy$
$r �$`d�$
$1�$
 �$
 �$
$��$��$
 1�$
 -
%
 �%
 j %
 ~$%
 R3%
 �7%
 pF%
 hJ%
 @V%
$�	^%Ku%
$��%
 �%
 ��%
 X�%
 P�%
$��%
 ��%
 ��%
 (	�%
 "	�%3K�%3K�%
 s	�%
 q	�%
 �	&
 �	&
 �	&
 �	&QK$&QKA&
 �	E&
 �	N&
 
R&
 
[&
 8
_&
 6
i&pKs&
" �&
 _
�&
 [
�&
 �
�&
 �
�&
 �
�&
 �
�&~K�&�K�&
"`�&
 �
�&
 �
�&
 �&
 �&
 M�&
 K'�K'
"�'
 r!'
 p*'
 �.'
 �7'
 �;'
 �A'QK_'�K�'
$Q1�'J�'
 �'
 ��'
 ��'
 ��'
 h
�'
 \
�'
 �
�'
 �
�'
"@
(
 �(
 �(dJD(|JN(
"p_(
 �c(
 �l(
 �p(
 �y(
 @}(
 <�(�J�(�J�(�J�(
"��(
 ��(
 ��(
 ��(
 �)
 �)
 �
)�J/)�J9)
"�J)
 $N)
  W)
 d[)
 bd)
 �h)
 �m)�J{)�J�)
$�$�)�I�)
$0�)
$O �)
$�*`I"*
$@1.*
 �2*
 �7*
$pC*
 G*
 L*
$�,X*
 \\*
 Ra*
$�m*
 �q*
 �v*
$#7�*
 <�*
 4�*dI�*
"�*
 ��*
 ��*
 ��*
 ��*�I�*�I�*�I+�IB+
$�5N+P@p+
 �t+
 ��+
 ��+
 ��+
 ��+
 ��+
 ��+
 ��+
$��+
 ��+
 ��+pF�+
$f"�+�F,�@,�@3,
 7,
 <,�@Y,�@c,
"�t,
 6x,
 4},�@�,A�,A�,
 ]�,
 Y�,A�,5A�,5A-
 �-
 �-DA:-[AD-[Aa-
 �e-
 �j-jA�-�A�-�A�-
 ��-
 ��-�A�-�A�-�A�-
 �-
 .�A!.B+.BH.
 )L.
 'Q.Bn.)Bx.)B�.
 N�.
 L�.8B�.PB�.PB�.
 s�.
 q�._B/wB/wB//
 �3/
 �8/�BU/�B_/�B|/
 ��/
 ��/�B�/�B�/�B�/
 ��/
 ��/�B�/�B�/
" 0
" 0
 	0
 0
 E 0
 ?)0
"�60
 �:0
 �C0�FM0�Fj0
 rn0
 ps0�F�0G�0G�0
 ��0
 ��0"G�0DG�0
"��0
 ��0
 �1
"�1
 �1
 r 1DG*1DGG1
 K1
 T1
 AX1
 ;]1UG�1`G�1`G�1
 ��1
 ��1
 ��1
 ��1qG�1�G�1�G2
 2
 2
 A2
 ?%2
 o)2
 m.2�GE2�U2�Gm2�H�2�H�2;I�2]�2�F�2C]�2G3Co
38G3C�&3'C73CVG3QCQ3
"@
^3
"@
g3
 �k3
 �t3fC~3fC�3
 ��3
 ��3uC�3hE�3
"�
�3�H�3
  �3
 �3�H4�H#4I84yEM4C�^4�Ey4C��4�E�4�E�4
"�
�4
"�
�4
 Z�4
 V�4�E�4C��4�E�4C�5�E#5C�-5FH5C�R5"Fm5C�w5PF�5]��5\F�5�H�5]C�5C��5H�5C��5�C�5�C6�C*6
 �.6
 �760DL6
 �P6
 �\6�Ff6�F�6
 4 �6
 2 �6�F�6�F�6�F�6�@�6C�7�@7�@#7C-7�@B7C+L7�@a7C=k70A�7CN�7VA�7Cb�7qA�7}A�7Cw�7�A�7C��7�A8�A8�A#8C�-8�AB8C�L8BY8$Bn8C�x8?B�8KB�8C��8fB�8rB�8C��8�B�8�B�8C�8�B	9�B9C*(9�B=9C@G9�D_9�Dl9�D�9C��9E�9C�95E�9RE�9`E�9EI�9
$K7:
$�14:
$+F:
$�1S:
$�a:
$�
~:
$i'�:
$]�:
$}&�:
$�/;
$�3;
$U,?;@@R;
$� Z;0@m;
$$8y; @�;
$,�;@�;
$��;
$#�;�?�;
$��;
$B�;�?	<
$t<
$5!<�?8<
$# H<
$�P<�?g<
$�w<
$�3<p?�<
$g%�<
$�6�<`?�<
$# �<
$*�<P?�<
$8=
 \ =
 X 
=
$,=`Y-=
$@19=
 � ==
 � M=
 !!Q=
 !b=
 �!f=
 �!k=
$A7w=
 ="{=
 /"�=
$< �=
$�*�=
"��=
$�	�=
$�3�=aZ�=
 �"�=
 �"�=iZ>(_ >
$�,>
 �#0>
 �#:>@[D>
"�U>
 ($Y>
 $b>
 ($f>
 $o>
 �$s>
 �$x>
"��>
 �%�>
 �%�>
 0&�>
 &�>
 5'�>
 +'�>
 �'�>
 �'�>
 (�>
 �'�>
 I)�>
 /))?
"�A?]Z?
 W*^?
 S*c?]u?`_�?
 �*�?
 �*�?�_�?�_�?�_�?�c�?
"��?
 �+�?
 �+�?
"�@�c@
"� @
 �+$@
 �+-@
 �+1@
 �+:@
 	,>@
 ,H@�cR@�co@
 1,s@
 /,|@
 W,�@
 U,�@
 },�@
 {,�@�c�@�c�@E[�@t[�@�[A�[#A�[HA�[mA"\�AG\�A�\�A`	�A�\�A�\�A�\B�\&Bb]LBy]YB�]}B�_�B]��B�_�B@`�BS`�B``�Bo`C�`EC�`RC�`_C�`�C�`�C]��Ca�C9a�CC��C�a�C](�C�a�C�aD]�D<b/DC�9DKbFD\bjDtbwDb�D�b�D��D�b�D(c�DGc�DXcEic9Ezc]E�c�E�c�E]��E�c�Ed�E]P�EM^�E
" �E
 �,�E
 �,�EM^F
"0
F
 �,F
 �,FM^$FM^=F
 �,AF
 �,JFM^TFM^mF
 -qF
 -zF
 B-~F
 @-�Fa^�F(�F�a�F�a�F
 h-�F
 f-�F�a�F�aG
 �-G
 �-G
 �-G
 �-G�a)G :G�YRG�YiG�Z�G�Z�G�]�G2^�G�^�G_�G	`�G)`HC�H�`(H�aHH�a`Hb�Hb�H=d�HZd�H
$L�H0;�H
$@1�H
 �-�H
 �-�H
$(I
 *.I
 .
I
$LI
 �.I
 �.I
$< 0I
$�*AI
$A7MI
 a/QI
 Q/bI
 (0fI
 0kI
$�wI
 �0{I
 �0�I
"��I
$�	�I
$�3�I�<�I
 71�I
 31�I�<�I
"��I
$�J
 �1J
 w1J{>$J�>2Ju;?J�;WJ�;wJ�J�;�J�;�J��J<�J@�J!<
K�K=<7K�AK�<RK`	\K�<sK�<�K�<�K�<�K>=�KW=�Ks=�K
L�=$L�3L�=ML�\L�=vL@�L�=�L��L:>�L]��LD>�L�>�L�>M�> MC�*M??MC�IM'?^M]�hM5?�MH?�M
$b�M�:�M
$@1�M
 2�M
 
2�M
;�M
$L�M
 a2�M
 _2�M;N%;N
$	N�95N
$@1AN
 �2EN
 �2JN
$l"VN
 3ZN
 3cN�:mN
"�
~N
 *3�N
 (3�N
"�
�N�:�N
"�N
 O3�N
 M3�N
 u3�N
 s3�N
 �3�N
 �3�N�:�N
"P�N
 �3�N
 �3O
 �3O
 �3O
 4O
 4O�:'O�:HO�9UO�9bO�9oO:�O��O::�O�:�O�:�O�:�O
$D�O
$��O
$@1P
$uP
$�&&P
$3P
$k@P
$kMP
$tZP
$A7�P
$(�P
$L�P
$< �P
$�*�P
$��P
$�"�P
$�	�P
$�3Q
$�Q
$�Q@91Q
$�9Q�LQ
$�TQkQ
$�"wQ
 G4{Q
 94�Q
$�Q
 �4�Q
 �4�Q
$v5�Q
 o5�Q
 c5�Q
$z�Q
 6�Q
 �5�Q
$��Q
 �6�Q
 �6�Q
$��Q
 ^7�Q
 X7�Q
$x�Q
 �7�Q
 �7�QCR]P&RO=R�[R]�eR�|R��R
�R]��R�R
$<�R��R
$��R
 8�R
 �7S
$�"S
 �8S
 �8S
$k,S�6S�SS
 �8WS
 �8`S
 9dS
 
9mS
 69qS
 29vS��S]��S�S3�S<�Sd�S]pTm&T�>T�UT�jTCRtT��T
$��T��T
$��T
 y9�T
 o9�T
$��T
 �9�T
 �9�T
$l"�T
 �:�T
 �:�TU U
 ;$U
 ;-U
 B;1U
 @;:U
 j;>U
 f;CUdU��UX�Us�UC�U
$�7�U
$�U
$g�U
$�1V
$�5V
$tV
$�
,V
$%";V
$�CV�8ZV
$�fV
 �;jV
 �;oV
$x{V
 �;V
 �;�V
$+%�V��V
$��V
 �;�V
 �;�V
$x�V
 *<�V
 $<�V	�V	W
 u<W
 s<W
 �<W
 �<"W
 �<&W
 �<-W
$�5W�LW
$\W
$,hW�	W
$�5�W
 �<�W
 �<�W
 .=�W
 "=�W
$.�W
$�1�W
Xl
0Xs
NX
$�VX�8|X
$M�X
$l"�X
$��X
$��X 7�X
$*�X
 �=�X
 �=�X
$X
�X
 �=�X
 �=Y
$Y
 X>#Y
 T>5YM7TY[7rY�7�Y
$��Y
$*�Y
$�"�Y
$�(�Y
$x�Y
$$�Y
$
�Y
$�2Z
$B"Z�59Z
$ EZ
 �>IZ
 �>NZ
$X
ZZ
 J?^Z
 :?oZ
 @sZ
 �?�Z
 P@�Z
 J@�Z
$��Z
$6�Z
 �@�Z
 �@�ZR6�Zl6�Z�6[�6@[�6^[�6k[�6x[�6�[�6�[
$��[
$@1�[
$��[
$s%�[
$86\�2"\
$@1.\
 �@2\
 �@7\
$C\
 /AG\
 'AL\
$�X\
 �A\\
 �Aa\
$�m\
 �Aq\
 �Av\
$�	�\
 LB�\
 FB�\
 �B�\
 �B�\
"P	�\
 �B�\
 �B�\
"�	�\
 (C�\
 $C�\�3�\
$s%�\
 dC]
 ^C]4]4)]
"�	:]
 �C>]
 �CG]
 �CK]
 �CT]
 +DX]
 )D]]14}]I4�]
"�	�]
 TD�]
 PD�]
 �D�]
 �D�]
 �D�]
 �D�]S4�]33�]�3^
$H^�'&^
$@19^_(C^
"�P^
 �DT^
 �D]^
 )Ea^
 'Ej^
 QEn^
 MEu^
$�6�^�'�^
$@1�^
 �E�^
 �E�^
 �E�^
 �E�^
 KF�^
 CF�^�'�^
$�!�^P'_
$@1"_
 �F&_
 �F6_
 G:_
 �FK_
 kGO_
 cGT_�'q_
$�}_0�_
$+�_
 �G�_
 �G�_
 6H�_
 .H�_
 �H�_
 �H�_
 5I�_
 )I�_
$x�_
 �I�_
 �I`
 �J
`
 �J`{ `
$,`0%C`
$@1O`
 �JS`
 �Jc`
 �Kg`
 �Kx`
 L|`
 L�`
 lL�`
 hL�`
 �L�`
 �L�`
$��`
 �L�`
 �L�`
 9M�`
 5M�`
$��`
 }M�`
 oM�`
"@�`
$�a
 &Na
 Na
$�!a
 �N%a
 �N*a
$D6a
 �N:a
 �N?a
$�Ka
 4OOa
 &OTa
$�`a
 �Oda
 �Oia
$xua
 Pya
 P~ax&�a
 cP�a
 aP�a�&�a
$��a
 �P�a
 �P�a�&�ac&�a
"pb
 �Pb
 �Pb
 Qb
 �P(b
 /Q,b
 -Q2b�&[b�%�bE'�b
$/�b#�b
$@1�b
 ^Q�b
 RQ�b
 �Q�b
 �Q�b
 �R�b
 }Rc
 JSc
 >Sc
 �Sc
 �S!c
$�-c
 NT1c
 BTBc
 �TFc
 �TKc
$�Wc
 5U[c
 #U`c
$$rc�#�c
$��c
 �U�c
 �U�c
$��c
 cV�c
 [V�c
$��c
 �V�c
 �V�c
$x�c
 �V�c
 �V�c�$�c�d�$4d�>d�$Rd$%qd
$�}d �d
$}�d� �d
$@1�d
 EW�d
 3W�d
$�d
 
X�d
 X�d
$+7
e
 4Xe
 0Xe
$x$e
"`;e
"`De
 rXHe
 lXQe
 �XUe
 �X^e
"�ke
 �Xoe
 �Xxe
 RY|e
 JY�e
 �Y�e
 �Y�e
 �Y�e
 �Y�e
 *Z�e
 &Z�e
 dZ�e
 `Z�e
"��e
 �Z�e
 �Z�e
"�e
 �Z�e
 �Z�ee"�e�!fd!(f
$:f
$@1Gf
$_f
$�xf
$��f
$D�f
$��f
$��f
$x�f
$��f
$��f
$@1g
$� g
$�1-g
$xEg
$DRg
$!yg
$�
�g
$��g�(�g
$@1�g
 e[�g
 Y[�g
 �[�g
 �[�g
 o\�g
 g\�g�(h
"�h
 �\h
 �\(h
 ],h
 ]5h
 h]9h
 f]>h
"�Lh
 �]Ph
 �]Zh)qh�(�h!)�h])�h
$5(�hp �h
$@1�h
$�3�h
 �]�h
 �]�h
$Zi
 T^
i
 R^i� i
" *i
 y^.i
 w^7i
 �^;i
 �^Di
 �^Hi
 �^Oi
$~[i2ri
$@1~i
 �^�i
 �^�i
$7�i
 �_�i
 �_�i
 y`�i
 i`�i
$��i
 7a�i
 'a�i
$�3�i
 �a�i
 �a�iU2�i
" 	�i
 �b�i
 �bj
 �bj
 �bj
 �bj
 �bjU26jz2Sj�2zj�2�j
$�,�j
$@1�j
$��j
$�3�j
$x�j
$Z�j
$�.k
$Dk
$U2!k
$�-k`Dk
$@1Pk
 cTk
 cYk
$�ek
 �cik
 �cnk
$Zzk
 �c~k
 �c�k
 dd�k
 Xd�k
$/�k
 
e�k
 e�k��k
"��k
 ne�k
 je�k
 �e�k
 �e�k�l l
"�l
 �e!l
 �e*l
 f.l
 f7l
 Af;l
 =f@l
"�Il
 {fMl
 wfVl `l }l
 �f�l
 �f�l
 �f�l
 �f�l
 �f�l
 �f�l �l! �l
$(�l��l
$@1m
 *gm
  g	m
$�m
 �gm
 �gm
$Z*m
 h.m
 h3m
$?m
 thCm
 jhTm
 �hXm
 �h]m
$�,im
 (imm
  irm
$�~m
 �i�m
 �i�m
$��m
 �i�m
 �i�m
$��m
 �j�m
 �j�m
 �j�m
 �j�m��m
" �m
 k�m
 k�m
 Tk�m
 Pk�m
 �kn
 �kn�$n�Cn(Mn(jn
 �knn
 �ksn(�n
 l�n
 �k�n4�n��n
$��n��n
$@1�n
 Tl�n
 Hlo�o�+o
 �l/o
 �l4o�No
 mRo
 mWo�no
$�/�o
$@1�o
$�o
$��o0�o
$@1�o
$E+�o
 ;m�o
 7m�o
 zm�o
 tmp
$Up�(p
$@14p
 �m8p
 �m=p�JpWpdp&rp
$4zp��p
$@1�p
 #n�p
 n�p��p
"��p
 qn�p
 on�p
 �n�p
 �n�p
$M�p�/q
$@1
q
 �nq
 �nq�/.q�/Fq�/fq!0{q
$a4�q�.�q
$@1�q
 Do�q
 8o�q#/�qP/�qX/�qm/	r
$27r�W,r
$@18r
 �o<r
 �oAr
$�1cr
$.xrY�r
"P�r
 wp�r
 up�rY�r
"`�r
 �p�r
 �p�rY�rY�r
 �p�r
 �p�rY�rYs
 �ps
 �p$s
 q(s
 q-s$Y>s(Qs�WisX�sFX�sX�s�X�s�X�s�Xt�XtKY9tUYGt
$;St`jt
$@1zt
$�
�tp�t��t��t
$�)�t��t
$@1�t
 Eq�t
 ;q�t
 �qu
 �qu
$�u
 Mru
 Kru(u
"9u
 rr=u
 prFu
 �rJu
 �rYu3cu
"@tu
 �rxu
 �r�u
 �r�u
 �r�u
"@�u
 
s�u
 	s�u<�u��u��u
 Es�u
 Cs�u�
v�0v�Cv]Mv
"�^v
 jsbv
 hskv
 �sov
 �stvd�vCo�v��v��v=�vOwmw�&w
$[0.w�Tw
$�`w�sw
$�{w��w
$[�w��w
"��w
$��w
 �s�w
 �s�w��w��w�w�x x�<x�Xxmx�|x�x3�xCy�xK�xC��x
$�	�x
$@1�x
$Dy
$�7"y
$u@y
$�!_y
$8my
$a2�y
$��y
$ �y
$:�y
$@1�y
$!z
$}z
$+7z
$x+z
$k=z
$@1Jz
$�Xz
$<jz
$@1�z
$��z
$��z
$+�z
$��z
$��z
$@1�z
$�
{
$${
$�${
$~01{
$�O{
$]a{
$@1�{
$��{
$9�{
$+�{
$�	�{,�{
$@1�{
 �s|
 �s|
 Pt|
 Ht&|
 �t*|
 �t;|
 �t?|
 �tD|
$U|H,p|�,�|]�|�,�|C��|�,�|
$�
�|
$@1	}
$�'%}
$�7}
$@1D}
$$R}[}
$�1i}� �}
$�6�}+�}
$@1�}
 Yu�}
 Qu�}
$g�}
 �u�}
 �u�}
$m�}
 %v�}
 v�}
$�4~
 uv~
 qv#~q+-~
"�>~
 �vB~
 �vK~
 �vO~
 �vY~�+�~C��~;+�~E+�~[+�~c+�~�+�~�+�~�+
$$�$
${	6
$�+\
$�{
$�.�
$�
�
$@1�
$!�
$��
$x�
$��
$@14�
$�A�
$xP�
$s^�
$@1w�
$���
$%)��
$}$���
̀
$�0؀
 w܀
 w�
$��
 jw�
 fw��
$+7�
$x�
 �w�
 �w�
$m,&�
 x*�
 
x/�
$�;�
 Sx?�
 GxD�
$�	P�
 �xT�
 �xZ�
$Z(x�
$�1��
$���
$�0��
$/
��
$�́
$��
$x�
$�3��
$}�
$�&�0	=�
$@1I�
 �yM�
 �yR�
$�^�
 Fzb�
 @zq�
 �zu�
 �zz�H	��
$@3��
$@1ł
$�ׂ
$@1�
$��
$���
$\�
$,*�
$�7�
$!Q�
$�,p�
$1��
$���
$b#ă
$@1҃
$y��
$2
��	,�
 �z0�
 �z5�
$�$A�
 �{E�
 �{V�
 &|Z�
  |_��	���	��
$�6��
$�3��
$\҄
$!܄
$�#�0��
$�)�
 w|�
 o|�
$@,�
 �| �
 �|5�`X��p�������
$.)��Ѕ
$i-؅��
$P
�
$�3�@,�
$�8�
 E}<�
 =}A�
$�M�
 �}Q�
 �}V�Vn�w��C[��
$`+��@��
$�ʆ
 ~Ά
 ~ކ
 �~�
 �~�
 \�
 H
�
$��
 6��
 0�.�0e��o�
"P�
 ����
 ����
 ����
 ����
 ܀��
 ڀ���̇]ۇc�c�
 ��
 ���
 /��
 -��
 W��
 U�$��N�C"Y�Bv�O��S��
"���
 ~���
 z���
 ��ˆ
 ��ˈ
 �ψ
 �ԈX������
 �#�
 �,�
 G�0�
 E�9�
 n�=�
 l�B��j�C2~������
"���
 ����
 ����
 ����
 ��ĉ
 �ȉ
 �͉���C8��
"�
 "�#�
  �,�
 P�0�
 N�5�)K�CF\��i�w�
$|��
$@1��
$p��
$�-��
$�/��
$�ˊ
$>܊
$j�
$�/�
$�0�
$�+�
$W!�
$s*�
$o7�
$�H�
$W!T�
$sa�
$�r�
$W!~�
$b3��
$o��
$�.��
$W!��
$s��
$o͋
$"
ދ
$W!�
$s��
$o�
$@�
$# �
$�,�
$�0?�
$TP�
$#\�
$�j�
$��
$���
$���
$5��
$.֌
$��
$T��
$�	�
$T�
$=-(�
$j5�
$n7I�
$\Z�
$f�
$e&t�
$51��
$�-��
$�/��
$�-���ύ
 ��Ӎ
 t�܍
 ��
 ��
 H��
 B�����
"
�
 ���
 ���
 ��
 �'�
 @�+�
 <�0�
"09�
 |�=�
 v�F��P��m�
 Džq�
 Ņz�
 �~�
 ���
 ���
 �������Ŏ0
�@
�@
�
 6��
 4�!�G
9�Q
L�w
V�w
v��
��
 c���
 Y���
 ߆��
 Ն��
 [���
 Q���
 ه��
 ͇ŏ
 m�ɏ
 a�ҏ
 ��֏
 ���
��e��+��5�
"`B��P��g��y����
 [���
 S���
 ����
 ����
 &���
 �Đ
 ��Ȑ
 ���
 ��
 ��
 X��
 R���'�'$�
 ��(�
 ��1�
 ʋ5�
 ȋ>�
 �B�
 �G�<l��v�
"���
 ,���
 *���
 S���
 Q���
 z���
 v����ϑFّ
"��
 ���
 ���N�x �
"1�
 ٌ5�
 ׌>�
 �B�
 ��K�
 (�O�
 $�Y��c�
"Pt�
 e�x�
 a���
 ����
 ����
 ͍��
 ˍ�������
"�˒
 �ϒ
 �ؒ
 �ܒ
 ��
�k
��(�C2�P��{�������9��ؓ
 C�ܓ
 ?��
"��
"�$�
 ��(�
 |�1�
 V�5�
 J�>�
 �B�
 ؏K�
 v�O�
 p�X�
"�e�
 ��i�
 ��r�
 �v�
 �{����z”�ؔ���)�
 �	�
 	��
 ���
 ���
 ?�#�
 1�T��)^��){�
 ��
 ޒ��
 5���
 1���
 q���
 m����)��
 ����
 ��ɕ
 ԓ͕
 ̓֕
 <�ڕ
 4��
 ���
 ���
 Ô�
 ���{*�
" *�
 �.�
 �7�
 "�;�
  �D�
 H�H�
 F�Q�
 n�U�
 l�Z�
" h�
 ��l�
 ��u�
 Εy�
 ̕~��*��D*��
"p��
 ��Ö
 �̖
 0�Ж
 .�ٖ
 V�ݖ
 T���)���*��*8��*J��,e�
 ��i�
 y�|��,��
"���
 ����
 y���
 
���
 ���
 ����
 ����
"�̗
 M�З
 G�ٗ
 ��ݗ
 ���-�
"@�
 ԙ�
 ҙ�
 ���
 ���
-7�{-A�{-^�
 #�b�
 �k�
 ^�o�
 \�t�{-��
 ����
 �����-��r-Ҙ].ߘ�.��.���-	�
"p�
 ���
 ��#�
"p,�
 �0�
 ��9��-C��-`�
 ��d�
 ��m�
 ��q�
 ��v��-���-���-��<.ۙC.�R.��.%�]X;�x.E�x.b�
 ٛf�
 ӛk�x.���.��]8���.��00ך
 1�ۚ
 %��
 ɜ�
 ���
 ����
 �"��0,�
"�=�
 0�A�
 (�J�
 ��N�
 ��W�
 �[�
 �`�
"�i�
 B�m�
 6�v�
 ɟz�
 ş��
 	���
 ����
 ����
 {���
 ���
 ���
 J���
 D����0ƛ
"�ܛ
 ���
 ���
 ���
 �����1��1�
 �"�
 �+�
 �/�
 �8�
 /�<�
 -�A��1d�c1|��1���1���4��
 `�Ü
 R�̜
 	�М
 ��ٜ
 ��ݜ
 ���
"
�
 /���
 #�
�5#�
 ��'�
 ��1�>5J�
 F�N�
 @�S�g5l�q5v�
"P
��
 ����
 ����
 ����
 ����
 ���
 ޥ���5ǝ7�
 ��
 ��
 ]��
 W��7=��7X�
 ��\�
 ��e�
 �i�
 �r�
 ��v�
 ����7��
"�
��
 ?���
 5���
 ����
 ����
 3���
 -����7֞8�'8�68��@8�8(��KC�
 ��G�
 |�P�
 <�T�
 :�b�,Ll�
"�}�
 c���
 _���
 ����
 ����
 ת��
 Ӫ��
"���
 ���
 
���0L��0Lݟ
 I��
 G��
 n��
 l���
 ����
 ���=L!�HL4��L>�
" O�
 ��S�
 ��X�
" a�
 �e�
 �n�
 2�r�
 *�{��L���L��
 ����
 ����
 ����
 �����LѠ
 ۬ՠ
 ٬�8M�8M�
 ��
 ���
 %��
 #�!�
 J�%�
 H�*�@M?�
 q�C�
 m�L�@MV�@Ms�
 ��w�
 ����
 ��
 ̭��
 ���
 ���NM��YMʡ�Mԡ
"��
  ��
 ��
 ����
 ����
"��
 ��
 ��
 ^��
 T�'��M1��MN�
 ϯR�
 ͯ[�
 �_�
 �h�
 �l�
 �q��M���M���M��
 D���
 B���
 i���
 g�Ȣ
 ��̢
 ��Ѣ�M�
 ���
 ����M�N�N<�
 ް@�
 ܰI�
 �M�
 �V�
 +�Z�
 )�_�Ny�!N��!N��
 S���
 Q���
 x���
 v���
 ����
 ����!Nԣ
 ȱأ
 Ʊݣ8N�yO
�
"�
 ��"�
 �'�
"0�
 ��4�
 ��=�
 �A�
 �J��O_�
 @�c�
 >�l�
 e�p�
 c�|�OP��OP��
 ����
 ����OP��
 ��Ť
 ��ΤOPؤ
"0�
 Գ�
 ҳ�
"0��
 ����
 ���
 "��
  ��kP!�
"p2�
 G�6�
 E�;�
"pD�
 n�H�
 l�Q�
 ��U�
 ��`�yPj�
"�{�
 ���
 ����
"���
 ���
 ߴ��
 
���
 ����P��
"ĥ
 C�ȥ
 A�ͥ
"֥
 j�ڥ
 h��
 ���
 ����P��
"`
�
 ���
 ���
"`�
 ޵#�
 ܵ,�
 �0�
 �;��PE�
"�V�
 +�Z�
 )�_�
"�h�
 R�l�
 P�u�
 {�y�
 w����P��
"��
 ����
 ����
"��
 ۶��
 ٶ��
 �¦
 �ͦ�Pצ
"`�
 (��
 &��
"`��
 O���
 M��
 v��
 t���P �
"�-�
 ��1�
 ��6�
"�?�
 ÷C�
 ��L�
 �P�
 �]�Q{�Q��
 '���
 #���"Q��
 a���
 _�ç
 ��ǧ
 ��Ч3Qڧ3Q�
 ����
 ����3Q�
 ݸ�
 ۸�
 �"�
 �.�bQC�
 +�G�
 %�P�
 x�T�
 v�]��Qg�
"�x�
 ��|�
 ����
"���
 ۹��
 ׹��
 ���
 ����Q��
"0¨
"0Ш
 :�Ԩ
 8�ߨ�Q�
"p��
"p	�
 _�
�
 ]���Q"�
"�0�
"�>�
 ��B�
 ��P�\UZ�\Uw�
 ��{�
 ����\U��
 �
 ̺��iU���UթpN��N�P)�C�3�0VQ�C6[�/Wu�]���vR��vR��
 ���
 ���
 �ê
 �ȪvRݪ
 =��
 ;���R��R�
"�'�
 j�+�
 `�0�
"�9�
 �=�
 ٻF�
 ��J�
 ~�S�
 ��W�
 ��`�
 (�d�
 �m�
 ��q�
 ��z�
 	�~�
 ���
 E���
 ?���_S��
"p��
 ����
 ����
 ����
 ��ɫ
 ߾ͫ
 ۾֫
 �ګ
 ��
 C��
 =��
"���S�
" "�
 ��&�
 ��/�
 ��3�
 ��<�
 �@�
 �F��S^��S���S���SǬTѬ
"`�
 ��
 ��
 ���
 ����
 ��
 �	�
 6�
�
 (��
"��
 ��
 �(�
 *�,�
 �5��U?�
"�U�
 �Y�
 ��b�
"�t�
 x�x�
 r���hW��hW��
 ����
 ����hW­�W��� �3T&�hW=�]�R��U\��Uu�V��V��]���
TϮ\T�yT��T��T6��UN�AV[�iVh��V��C����V���V��C�ɯ�V�JW��C���W"�C�3��T@��T[�C�e�Ur��U��]8���U��]pİUΰU�
 ���
 ����
 ���
 ��
 6�	�
 4��U�
".�
 d�2�
 b�;�UE�
" R�
 ��V�
 ��_�Ui�U��
 ����
 ����U��U��
 ����
 ����
 �ñ
 �ȱ5Uٱ(�P
�CT�WU2�C<�
WV�C&m� Pw� P��
 *���
 (���
 T���
 P��� P��
 ��ò
 ��Ȳ.P߲TW�
$��
$��
$�.��
$g�
$�'�
$�'�
$�7�
$�7�
$d$ �
$d$(�
$\,�
$�4�
$b8�
$bA�
$>E�
$dM�
$e!Q�
$e!Z�
$�0^�
$�0g�
$�*k�
$�*s�
$�w�
$���
$v��
$v��
$Q
��
$Q
��
$���
$���
$=+��
$=+��
$���
$���
$(	³
$(	˳
$r)ϳ
$r)س
$ܳ
$�
$�%�
$�%�
$
�
$
��
$q��
$q�
$
	�
$
�
$��
$��
$�/"�
$�/+�
$>#/�
$>#8�
$�%<�
$�%D�
$�H�
$�P�
$�!T�
$�!\�
$�,`�
$�,i�
$Hm�
$Hu�
$u,y�
$u,��
$w*��
$w*��
$.(��
$.(��
$���
$���
$�,��
$�,��
$C-��
$���
$�ô
$�̴
$=д
$=ٴ
$�7ݴ
$�7�
$��
$��
$D4��
$D4��
$�,�
$�,	�
$"
�
$"�
$�
$!�
$�)%�
$�)-�
$Z21�
$Z2:�
$Y>�
$YF�
$�+J�
$�+S�
$_7W�
$_7_�
$Qc�
$Qk�
$V8o�
$V8w�
$�&{�
$�&��
$_$��
$_$��
$1��
$1��
$��
$��
$���
$�ĵ
$�ȵ
$�е
$�/Ե
$�/ܵ
$�
$�
$��
$��
$�2��
$�2�
$�+�
$E"�
$"
�
$�*�
$E"�
$E*�
$9.�
$96�
$�:�
$�B�
$�	F�
$�	O�
$eS�
$e\�
$�`�
$�h�
$�l�
$�t�
$�-x�
$���
$�4��
$�4��
$f*��
$f*��
$S��
$S��
$J��
$�
��
$���
$���
$T��
$Tȶ
$�̶
$�Զ
$�,ض
$�,�
$I�
$I�
$�
$��
$�3��
$�3�
$�
�
$��T��+�'-(�- �3��8]�QC��p(�sCo�vC���]�C",�C2��C85�CF�
�ʿ�I����(
��
�� 4H \0������0L�`0	��	��	��
�\��0
��
$�L��@X��0@X�l���������`p,�@�\0p����` p 4� �#�0%8P'L�'`�'t�(��)�+P	,�	�,�	�.�	�/
00\
2�
�2�4X�5�7� 7��7$�88�8L@9`�9��:�0;
P?
`?(
p?<
�?P
�?d
�?x
�?�
@�
 @�
0@�
@@�
P@`I\�IpJ�K��K4�W|`Y�`d��d.symtab.strtab.shstrtab.rela.text.data.bss.rela.gnu.build.attributes.text.hot.rela.gnu.build.attributes.hot.text.unlikely.rela.gnu.build.attributes.unlikely.text.startup.rela.gnu.build.attributes.startup.text.exit.rela.gnu.build.attributes.exit.rodata.str1.1.rodata.str1.8.rodata.rela.data.rel.local.rela.data.rel.rela.data.rel.ro.local.rela.debug_info.debug_abbrev.rela.debug_loc.rela.debug_aranges.debug_ranges.rela.debug_line.debug_str.comment.text.hot.zzz.text.unlikely.zzz.text.startup.zzz.text.exit.zzz.note.GNU-stack.note.gnu.property.rela.eh_frame.groupP@:�PT:�Pl:�P�:�P�:� ��d@ A@G:&`ep	 ,�n� 6�np"1@`�� :
LP�[P��V@0�0:
u �� ���@`�0:������@��0:��������@��0:2��2��/"�D /@�8 *@��:Dx�?@��:S��� N@��p:kh��f@��\:!wza��
i���@��:$��/0�@�0:&��/`�LJR�@�H:)�0]��8�0�.�A��A�uA�LA� A��A��A��A�A�A�.H� Fh��A@(:8X��4;�	'0WPK$"#[�}AC��(gems/ruby-lsapi-5.6/rails/dispatch.lsapinuȯ��#!/opt/alt/ruby31/bin/ruby

if GC.respond_to?(:copy_on_write_friendly=)
    GC.copy_on_write_friendly = true
end

require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)

# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
require "dispatcher"
require "lsapi"

while LSAPI.accept != nil
	Dispatcher.dispatch
end
PK$"#[lV5���.gems/ruby-lsapi-5.6/examples/lsapi_with_cgi.rbnuȯ��#!/opt/alt/ruby31/bin/ruby

require 'lsapi'
require 'cgi'


while LSAPI.accept != nil
    cgi = CGI.new
    name = cgi['name']
    puts cgi.header
    puts "Hello #{name}! <br> " if name
    puts "You are from #{cgi.remote_addr}<br>"

end
PK$"#[��.�)gems/ruby-lsapi-5.6/examples/testlsapi.rbnuȯ��#!/opt/alt/ruby31/bin/ruby

require 'lsapi'

$count = 0;

while LSAPI.accept != nil
	print "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\nHello World! \##{$count}<br>\r\n"
	ENV.each_pair {|key, value| print "#{key} is #{value}<br>\r\n" }
	$count = $count + 1
end
PK$"#[whf:��!gems/ruby-lsapi-5.6/lsapi.gemspecnu�[���Gem::Specification.new do |s|
  s.name = %q{ruby-lsapi}
  s.version = "5.6"
  s.date = %q{2024-01-22}
  s.description = "This is a ruby extension for fast communication with LiteSpeed Web Server."
  s.summary = %q{A ruby extension for fast communication with LiteSpeed Web Server.}
  s.has_rdoc = false
  s.authors = ["LiteSpeed Technologies Inc."]
  s.email = "info@litespeedtech.com"
  s.homepage = "http://www.litespeedtech.com/"
  s.rubyforge_project = "ruby-lsapi"
  s.files = ["lsapi.gemspec", "README", "examples", "examples/testlsapi.rb", "examples/lsapi_with_cgi.rb", "ext", "ext/lsapi", "ext/lsapi/extconf.rb", "ext/lsapi/lsapidef.h", "ext/lsapi/lsapilib.c", "ext/lsapi/lsapilib.h", "ext/lsapi/lsruby.c", "rails", "rails/dispatch.lsapi", "scripts", "scripts/lsruby_runner.rb", "setup.rb"]
  s.extra_rdoc_files = ["README"]
  s.extensions << "ext/lsapi/extconf.rb"
  s.require_paths << "lib"
end
PK$"#[�^wͱ�gems/ruby-lsapi-5.6/READMEnu�[���
lsapi - LSAPI extension for Ruby
================================

INSTALL
-------

  $ ruby setup.rb config
  $ ruby setup.rb setup
  # ruby setup.rb install

USAGE
-----

General CGI scripts
^^^^^^^^^^^^^^^^^^^
The most efficient way to use LSAPI interface is to modify your CGI scripts. 
You need to add the following code to your CGI scripts:

  require 'lsapi'
  
  while LSAPI.accept != nil

     <your CGI script>
     ...

  end

There is no need to change the way that how CGI environment variables 
are being accessed in your scripts.

You can find some examples under examples/ folder.


Ruby Script Runner
^^^^^^^^^^^^^^^^^^
If you don't want to change your existing Ruby CGI code, you can use our 
Ruby script runner under scripts/ folder. You need to configure 
lsruby_runner.rb as a LSAPI application, then add a script handler 
for "rb" suffix.



Rails dispatcher
^^^^^^^^^^^^^^^^

With Ruby LSAPI, we proudly provide a optimum platform for Rails application
deployment. Ruby LSAPI has the following advantages over other solutions.

  * Easy configuration, deploy a Rails application only take a few clicks
    with our Rails easy configuration
  * Fast startup, the expensive Rails framework initialization only takes
    place once when multiple processes need to be started
  * Resource efficience, ruby processes can be started on demand, idle
    process will be stop.
    
To use LSAPI with Ruby on Rails, please check out our toturial
http://www.litespeedtech.com/support/wiki/doku.php

There are a few environment variables that can be tweaked to tune ruby 
LSAPI process.

* LSAPI_CHILDREN                (default: 0)

LSAPI_CHILDREN controls the maximum number of children processes can be
started by the first ruby process started by web server. When set to <=1,
the first ruby process will handle request by itself, without starting any
child process. When LSAPI_CHILDREN is >1, the LSAPI application is stared in
"Self Managed Mode", which will start children processes based on demand.
With Rails easy configuration, LSAPI_CHILDREN is set to the value of
"Max Connections" by web server, no need to set it explicitly.

Usually, there is no need to set value of LSAPI_CHILDREN over 100 in most
server environment.


* LSAPI_AVOID_FORK              (default: 0)

LSAPI_AVOID_FORK specifies the policy of the internal process manager in
"Self Managed Mode". When set to 0, the internal process manager will stop
and start children process on demand to save system resource. This is
preferred in a shared hosting environment. When set to 1, the internal
process manager will try to avoid freqently stopping and starting children
process. This might be preferred in a dedicate hosting environment.


* LSAPI_EXTRA_CHILDREN          (default: 1/3 of LSAPI_CHILDREN or 0)

LSAPI_EXTRA_CHILDREN controls the maximum number of extra children processes
can be started when some or all existing children processes are in
malfunctioning state. Total number of children processes will be reduced to
LSAPI_CHILDREN level as soon as service is back to normal.
When LSAPI_AVOID_FORK is set to 0, the default value is 1/3 of
LSAPI_CHIDLREN, When LSAPI_AVOID_FORK is set to 1, the default value is 0.


* LSAPI_MAX_REQS                (default value: 10000)

LSAPI_MAX_REQS specifies the maximum number of requests each child
process will handle before it exits automatically. This parameter can
help reducing memory usage when there are memory leaks in the application. 


* LSAPI_MAX_IDLE                (default value: 300 seconds)

In Self Managed Mode, LSAPI_MAX_IDLE controls how long a idle child  
process will wait for a new request before exit. This option help 
releasing system resources taken by idle processes.


* LSAPI_MAX_IDLE_CHILDREN
    (default value: 1/3 of LSAPI_CHILDREN or LSAPI_CHILDREN)

In Self Managed Mode, LSAI_MAX_IDLE_CHILDREN controls how many idle 
children processes are allowed. Excessive idle children processes
will be killed by the parent process.
When LSAPI_AVOID_FORK is set to 0, the default value is 1/3 of
LSAPI_CHIDLREN, When LSAPI_AVOID_FORK is set to 1, the default value
is LSAPI_CHILDREN.


* LSAPI_MAX_PROCESS_TIME        (default value: 300 seconds)

In Self Managed Mode, LSAPI_MAX_PROCESS_TIME controls the maximum 
processing time allowed when processing a request. If a child process
can not finish processing of a request in the given time period, it 
will be killed by the parent process. This option can help getting rid 
of dead or runaway child process.


* LSAPI_PGRP_MAX_IDLE           (default value: FOREVER )

In Self Managed Mode, LSAPI_PGRP_MAX_IDLE controls how long the parent
process will wait before exiting when there is no child process.
This option help releasing system resources taken by an idle parent 
process.


* LSAPI_PPID_NO_CHECK

By default a LSAPI application check the existence of its parent process
and exits automatically if the parent process died. This is to reduce 
orphan process when web server is restarted. However, it is desireable 
to disable this feature, such as when a LSAPI process was started 
manually from command line. LSAPI_PPID_NO_CHECK should be set when 
you want to disable the checking of existence of parent process.


License
-------

LSAPI library code is under BSD license

LSAPI ruby extension code is under Ruby license

* ((<URL:http://www.ruby-lang.org/ja/LICENSE.txt>)) (Japanese)
* ((<URL:http://www.ruby-lang.org/en/LICENSE.txt>)) (English)


Copyright
---------

Copyright (C) 2006 Lite Speed Technologies Inc.


PK$"#[EK�<-M-Mgems/json-2.6.1/lib/json.rbnu�[���#frozen_string_literal: false
require 'json/common'

##
# = JavaScript \Object Notation (\JSON)
#
# \JSON is a lightweight data-interchange format.
#
# A \JSON value is one of the following:
# - Double-quoted text:  <tt>"foo"</tt>.
# - Number:  +1+, +1.0+, +2.0e2+.
# - Boolean:  +true+, +false+.
# - Null: +null+.
# - \Array: an ordered list of values, enclosed by square brackets:
#     ["foo", 1, 1.0, 2.0e2, true, false, null]
#
# - \Object: a collection of name/value pairs, enclosed by curly braces;
#   each name is double-quoted text;
#   the values may be any \JSON values:
#     {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}
#
# A \JSON array or object may contain nested arrays, objects, and scalars
# to any depth:
#   {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}
#   [{"foo": 0, "bar": 1}, ["baz", 2]]
#
# == Using \Module \JSON
#
# To make module \JSON available in your code, begin with:
#   require 'json'
#
# All examples here assume that this has been done.
#
# === Parsing \JSON
#
# You can parse a \String containing \JSON data using
# either of two methods:
# - <tt>JSON.parse(source, opts)</tt>
# - <tt>JSON.parse!(source, opts)</tt>
#
# where
# - +source+ is a Ruby object.
# - +opts+ is a \Hash object containing options
#   that control both input allowed and output formatting.
#
# The difference between the two methods
# is that JSON.parse! omits some checks
# and may not be safe for some +source+ data;
# use it only for data from trusted sources.
# Use the safer method JSON.parse for less trusted sources.
#
# ==== Parsing \JSON Arrays
#
# When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array:
#   json = '["foo", 1, 1.0, 2.0e2, true, false, null]'
#   ruby = JSON.parse(json)
#   ruby # => ["foo", 1, 1.0, 200.0, true, false, nil]
#   ruby.class # => Array
#
# The \JSON array may contain nested arrays, objects, and scalars
# to any depth:
#   json = '[{"foo": 0, "bar": 1}, ["baz", 2]]'
#   JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]]
#
# ==== Parsing \JSON \Objects
#
# When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash:
#   json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}'
#   ruby = JSON.parse(json)
#   ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil}
#   ruby.class # => Hash
#
# The \JSON object may contain nested arrays, objects, and scalars
# to any depth:
#   json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}'
#   JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]}
#
# ==== Parsing \JSON Scalars
#
# When the source is a \JSON scalar (not an array or object),
# JSON.parse returns a Ruby scalar.
#
# \String:
#   ruby = JSON.parse('"foo"')
#   ruby # => 'foo'
#   ruby.class # => String
# \Integer:
#   ruby = JSON.parse('1')
#   ruby # => 1
#   ruby.class # => Integer
# \Float:
#   ruby = JSON.parse('1.0')
#   ruby # => 1.0
#   ruby.class # => Float
#   ruby = JSON.parse('2.0e2')
#   ruby # => 200
#   ruby.class # => Float
# Boolean:
#   ruby = JSON.parse('true')
#   ruby # => true
#   ruby.class # => TrueClass
#   ruby = JSON.parse('false')
#   ruby # => false
#   ruby.class # => FalseClass
# Null:
#   ruby = JSON.parse('null')
#   ruby # => nil
#   ruby.class # => NilClass
#
# ==== Parsing Options
#
# ====== Input Options
#
# Option +max_nesting+ (\Integer) specifies the maximum nesting depth allowed;
# defaults to +100+; specify +false+ to disable depth checking.
#
# With the default, +false+:
#   source = '[0, [1, [2, [3]]]]'
#   ruby = JSON.parse(source)
#   ruby # => [0, [1, [2, [3]]]]
# Too deep:
#   # Raises JSON::NestingError (nesting of 2 is too deep):
#   JSON.parse(source, {max_nesting: 1})
# Bad value:
#   # Raises TypeError (wrong argument type Symbol (expected Fixnum)):
#   JSON.parse(source, {max_nesting: :foo})
#
# ---
#
# Option +allow_nan+ (boolean) specifies whether to allow
# NaN, Infinity, and MinusInfinity in +source+;
# defaults to +false+.
#
# With the default, +false+:
#   # Raises JSON::ParserError (225: unexpected token at '[NaN]'):
#   JSON.parse('[NaN]')
#   # Raises JSON::ParserError (232: unexpected token at '[Infinity]'):
#   JSON.parse('[Infinity]')
#   # Raises JSON::ParserError (248: unexpected token at '[-Infinity]'):
#   JSON.parse('[-Infinity]')
# Allow:
#   source = '[NaN, Infinity, -Infinity]'
#   ruby = JSON.parse(source, {allow_nan: true})
#   ruby # => [NaN, Infinity, -Infinity]
#
# ====== Output Options
#
# Option +symbolize_names+ (boolean) specifies whether returned \Hash keys
# should be Symbols;
# defaults to +false+ (use Strings).
#
# With the default, +false+:
#   source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
#   ruby = JSON.parse(source)
#   ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
# Use Symbols:
#   ruby = JSON.parse(source, {symbolize_names: true})
#   ruby # => {:a=>"foo", :b=>1.0, :c=>true, :d=>false, :e=>nil}
#
# ---
#
# Option +object_class+ (\Class) specifies the Ruby class to be used
# for each \JSON object;
# defaults to \Hash.
#
# With the default, \Hash:
#   source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
#   ruby = JSON.parse(source)
#   ruby.class # => Hash
# Use class \OpenStruct:
#   ruby = JSON.parse(source, {object_class: OpenStruct})
#   ruby # => #<OpenStruct a="foo", b=1.0, c=true, d=false, e=nil>
#
# ---
#
# Option +array_class+ (\Class) specifies the Ruby class to be used
# for each \JSON array;
# defaults to \Array.
#
# With the default, \Array:
#   source = '["foo", 1.0, true, false, null]'
#   ruby = JSON.parse(source)
#   ruby.class # => Array
# Use class \Set:
#   ruby = JSON.parse(source, {array_class: Set})
#   ruby # => #<Set: {"foo", 1.0, true, false, nil}>
#
# ---
#
# Option +create_additions+ (boolean) specifies whether to use \JSON additions in parsing.
# See {\JSON Additions}[#module-JSON-label-JSON+Additions].
#
# === Generating \JSON
#
# To generate a Ruby \String containing \JSON data,
# use method <tt>JSON.generate(source, opts)</tt>, where
# - +source+ is a Ruby object.
# - +opts+ is a \Hash object containing options
#   that control both input allowed and output formatting.
#
# ==== Generating \JSON from Arrays
#
# When the source is a Ruby \Array, JSON.generate returns
# a \String containing a \JSON array:
#   ruby = [0, 's', :foo]
#   json = JSON.generate(ruby)
#   json # => '[0,"s","foo"]'
#
# The Ruby \Array array may contain nested arrays, hashes, and scalars
# to any depth:
#   ruby = [0, [1, 2], {foo: 3, bar: 4}]
#   json = JSON.generate(ruby)
#   json # => '[0,[1,2],{"foo":3,"bar":4}]'
#
# ==== Generating \JSON from Hashes
#
# When the source is a Ruby \Hash, JSON.generate returns
# a \String containing a \JSON object:
#   ruby = {foo: 0, bar: 's', baz: :bat}
#   json = JSON.generate(ruby)
#   json # => '{"foo":0,"bar":"s","baz":"bat"}'
#
# The Ruby \Hash array may contain nested arrays, hashes, and scalars
# to any depth:
#   ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
#   json = JSON.generate(ruby)
#   json # => '{"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}'
#
# ==== Generating \JSON from Other Objects
#
# When the source is neither an \Array nor a \Hash,
# the generated \JSON data depends on the class of the source.
#
# When the source is a Ruby \Integer or \Float, JSON.generate returns
# a \String containing a \JSON number:
#   JSON.generate(42) # => '42'
#   JSON.generate(0.42) # => '0.42'
#
# When the source is a Ruby \String, JSON.generate returns
# a \String containing a \JSON string (with double-quotes):
#   JSON.generate('A string') # => '"A string"'
#
# When the source is +true+, +false+ or +nil+, JSON.generate returns
# a \String containing the corresponding \JSON token:
#   JSON.generate(true) # => 'true'
#   JSON.generate(false) # => 'false'
#   JSON.generate(nil) # => 'null'
#
# When the source is none of the above, JSON.generate returns
# a \String containing a \JSON string representation of the source:
#   JSON.generate(:foo) # => '"foo"'
#   JSON.generate(Complex(0, 0)) # => '"0+0i"'
#   JSON.generate(Dir.new('.')) # => '"#<Dir>"'
#
# ==== Generating Options
#
# ====== Input Options
#
# Option +allow_nan+ (boolean) specifies whether
# +NaN+, +Infinity+, and <tt>-Infinity</tt> may be generated;
# defaults to +false+.
#
# With the default, +false+:
#   # Raises JSON::GeneratorError (920: NaN not allowed in JSON):
#   JSON.generate(JSON::NaN)
#   # Raises JSON::GeneratorError (917: Infinity not allowed in JSON):
#   JSON.generate(JSON::Infinity)
#   # Raises JSON::GeneratorError (917: -Infinity not allowed in JSON):
#   JSON.generate(JSON::MinusInfinity)
#
# Allow:
#   ruby = [Float::NaN, Float::Infinity, Float::MinusInfinity]
#   JSON.generate(ruby, allow_nan: true) # => '[NaN,Infinity,-Infinity]'
#
# ---
#
# Option +max_nesting+ (\Integer) specifies the maximum nesting depth
# in +obj+; defaults to +100+.
#
# With the default, +100+:
#   obj = [[[[[[0]]]]]]
#   JSON.generate(obj) # => '[[[[[[0]]]]]]'
#
# Too deep:
#   # Raises JSON::NestingError (nesting of 2 is too deep):
#   JSON.generate(obj, max_nesting: 2)
#
# ====== Output Options
#
# The default formatting options generate the most compact
# \JSON data, all on one line and with no whitespace.
#
# You can use these formatting options to generate
# \JSON data in a more open format, using whitespace.
# See also JSON.pretty_generate.
#
# - Option +array_nl+ (\String) specifies a string (usually a newline)
#   to be inserted after each \JSON array; defaults to the empty \String, <tt>''</tt>.
# - Option +object_nl+ (\String) specifies a string (usually a newline)
#   to be inserted after each \JSON object; defaults to the empty \String, <tt>''</tt>.
# - Option +indent+ (\String) specifies the string (usually spaces) to be
#   used for indentation; defaults to the empty \String, <tt>''</tt>;
#   defaults to the empty \String, <tt>''</tt>;
#   has no effect unless options +array_nl+ or +object_nl+ specify newlines.
# - Option +space+ (\String) specifies a string (usually a space) to be
#   inserted after the colon in each \JSON object's pair;
#   defaults to the empty \String, <tt>''</tt>.
# - Option +space_before+ (\String) specifies a string (usually a space) to be
#   inserted before the colon in each \JSON object's pair;
#   defaults to the empty \String, <tt>''</tt>.
#
# In this example, +obj+ is used first to generate the shortest
# \JSON data (no whitespace), then again with all formatting options
# specified:
#
#   obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
#   json = JSON.generate(obj)
#   puts 'Compact:', json
#   opts = {
#     array_nl: "\n",
#     object_nl: "\n",
#     indent: '  ',
#     space_before: ' ',
#     space: ' '
#   }
#   puts 'Open:', JSON.generate(obj, opts)
#
# Output:
#   Compact:
#   {"foo":["bar","baz"],"bat":{"bam":0,"bad":1}}
#   Open:
#   {
#     "foo" : [
#       "bar",
#       "baz"
#   ],
#     "bat" : {
#       "bam" : 0,
#       "bad" : 1
#     }
#   }
#
# == \JSON Additions
#
# When you "round trip" a non-\String object from Ruby to \JSON and back,
# you have a new \String, instead of the object you began with:
#   ruby0 = Range.new(0, 2)
#   json = JSON.generate(ruby0)
#   json # => '0..2"'
#   ruby1 = JSON.parse(json)
#   ruby1 # => '0..2'
#   ruby1.class # => String
#
# You can use \JSON _additions_ to preserve the original object.
# The addition is an extension of a ruby class, so that:
# - \JSON.generate stores more information in the \JSON string.
# - \JSON.parse, called with option +create_additions+,
#   uses that information to create a proper Ruby object.
#
# This example shows a \Range being generated into \JSON
# and parsed back into Ruby, both without and with
# the addition for \Range:
#   ruby = Range.new(0, 2)
#   # This passage does not use the addition for Range.
#   json0 = JSON.generate(ruby)
#   ruby0 = JSON.parse(json0)
#   # This passage uses the addition for Range.
#   require 'json/add/range'
#   json1 = JSON.generate(ruby)
#   ruby1 = JSON.parse(json1, create_additions: true)
#   # Make a nice display.
#   display = <<EOT
#   Generated JSON:
#     Without addition:  #{json0} (#{json0.class})
#     With addition:     #{json1} (#{json1.class})
#   Parsed JSON:
#     Without addition:  #{ruby0.inspect} (#{ruby0.class})
#     With addition:     #{ruby1.inspect} (#{ruby1.class})
#   EOT
#   puts display
#
# This output shows the different results:
#   Generated JSON:
#     Without addition:  "0..2" (String)
#     With addition:     {"json_class":"Range","a":[0,2,false]} (String)
#   Parsed JSON:
#     Without addition:  "0..2" (String)
#     With addition:     0..2 (Range)
#
# The \JSON module includes additions for certain classes.
# You can also craft custom additions.
# See {Custom \JSON Additions}[#module-JSON-label-Custom+JSON+Additions].
#
# === Built-in Additions
#
# The \JSON module includes additions for certain classes.
# To use an addition, +require+ its source:
# - BigDecimal: <tt>require 'json/add/bigdecimal'</tt>
# - Complex: <tt>require 'json/add/complex'</tt>
# - Date: <tt>require 'json/add/date'</tt>
# - DateTime: <tt>require 'json/add/date_time'</tt>
# - Exception: <tt>require 'json/add/exception'</tt>
# - OpenStruct: <tt>require 'json/add/ostruct'</tt>
# - Range: <tt>require 'json/add/range'</tt>
# - Rational: <tt>require 'json/add/rational'</tt>
# - Regexp: <tt>require 'json/add/regexp'</tt>
# - Set: <tt>require 'json/add/set'</tt>
# - Struct: <tt>require 'json/add/struct'</tt>
# - Symbol: <tt>require 'json/add/symbol'</tt>
# - Time: <tt>require 'json/add/time'</tt>
#
# To reduce punctuation clutter, the examples below
# show the generated \JSON via +puts+, rather than the usual +inspect+,
#
# \BigDecimal:
#   require 'json/add/bigdecimal'
#   ruby0 = BigDecimal(0) # 0.0
#   json = JSON.generate(ruby0) # {"json_class":"BigDecimal","b":"27:0.0"}
#   ruby1 = JSON.parse(json, create_additions: true) # 0.0
#   ruby1.class # => BigDecimal
#
# \Complex:
#   require 'json/add/complex'
#   ruby0 = Complex(1+0i) # 1+0i
#   json = JSON.generate(ruby0) # {"json_class":"Complex","r":1,"i":0}
#   ruby1 = JSON.parse(json, create_additions: true) # 1+0i
#   ruby1.class # Complex
#
# \Date:
#   require 'json/add/date'
#   ruby0 = Date.today # 2020-05-02
#   json = JSON.generate(ruby0) # {"json_class":"Date","y":2020,"m":5,"d":2,"sg":2299161.0}
#   ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02
#   ruby1.class # Date
#
# \DateTime:
#   require 'json/add/date_time'
#   ruby0 = DateTime.now # 2020-05-02T10:38:13-05:00
#   json = JSON.generate(ruby0) # {"json_class":"DateTime","y":2020,"m":5,"d":2,"H":10,"M":38,"S":13,"of":"-5/24","sg":2299161.0}
#   ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02T10:38:13-05:00
#   ruby1.class # DateTime
#
# \Exception (and its subclasses including \RuntimeError):
#   require 'json/add/exception'
#   ruby0 = Exception.new('A message') # A message
#   json = JSON.generate(ruby0) # {"json_class":"Exception","m":"A message","b":null}
#   ruby1 = JSON.parse(json, create_additions: true) # A message
#   ruby1.class # Exception
#   ruby0 = RuntimeError.new('Another message') # Another message
#   json = JSON.generate(ruby0) # {"json_class":"RuntimeError","m":"Another message","b":null}
#   ruby1 = JSON.parse(json, create_additions: true) # Another message
#   ruby1.class # RuntimeError
#
# \OpenStruct:
#   require 'json/add/ostruct'
#   ruby0 = OpenStruct.new(name: 'Matz', language: 'Ruby') # #<OpenStruct name="Matz", language="Ruby">
#   json = JSON.generate(ruby0) # {"json_class":"OpenStruct","t":{"name":"Matz","language":"Ruby"}}
#   ruby1 = JSON.parse(json, create_additions: true) # #<OpenStruct name="Matz", language="Ruby">
#   ruby1.class # OpenStruct
#
# \Range:
#   require 'json/add/range'
#   ruby0 = Range.new(0, 2) # 0..2
#   json = JSON.generate(ruby0) # {"json_class":"Range","a":[0,2,false]}
#   ruby1 = JSON.parse(json, create_additions: true) # 0..2
#   ruby1.class # Range
#
# \Rational:
#   require 'json/add/rational'
#   ruby0 = Rational(1, 3) # 1/3
#   json = JSON.generate(ruby0) # {"json_class":"Rational","n":1,"d":3}
#   ruby1 = JSON.parse(json, create_additions: true) # 1/3
#   ruby1.class # Rational
#
# \Regexp:
#   require 'json/add/regexp'
#   ruby0 = Regexp.new('foo') # (?-mix:foo)
#   json = JSON.generate(ruby0) # {"json_class":"Regexp","o":0,"s":"foo"}
#   ruby1 = JSON.parse(json, create_additions: true) # (?-mix:foo)
#   ruby1.class # Regexp
#
# \Set:
#   require 'json/add/set'
#   ruby0 = Set.new([0, 1, 2]) # #<Set: {0, 1, 2}>
#   json = JSON.generate(ruby0) # {"json_class":"Set","a":[0,1,2]}
#   ruby1 = JSON.parse(json, create_additions: true) # #<Set: {0, 1, 2}>
#   ruby1.class # Set
#
# \Struct:
#   require 'json/add/struct'
#   Customer = Struct.new(:name, :address) # Customer
#   ruby0 = Customer.new("Dave", "123 Main") # #<struct Customer name="Dave", address="123 Main">
#   json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]}
#   ruby1 = JSON.parse(json, create_additions: true) # #<struct Customer name="Dave", address="123 Main">
#   ruby1.class # Customer
#
# \Symbol:
#   require 'json/add/symbol'
#   ruby0 = :foo # foo
#   json = JSON.generate(ruby0) # {"json_class":"Symbol","s":"foo"}
#   ruby1 = JSON.parse(json, create_additions: true) # foo
#   ruby1.class # Symbol
#
# \Time:
#   require 'json/add/time'
#   ruby0 = Time.now # 2020-05-02 11:28:26 -0500
#   json = JSON.generate(ruby0) # {"json_class":"Time","s":1588436906,"n":840560000}
#   ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 11:28:26 -0500
#   ruby1.class # Time
#
#
# === Custom \JSON Additions
#
# In addition to the \JSON additions provided,
# you can craft \JSON additions of your own,
# either for Ruby built-in classes or for user-defined classes.
#
# Here's a user-defined class +Foo+:
#   class Foo
#     attr_accessor :bar, :baz
#     def initialize(bar, baz)
#       self.bar = bar
#       self.baz = baz
#     end
#   end
#
# Here's the \JSON addition for it:
#   # Extend class Foo with JSON addition.
#   class Foo
#     # Serialize Foo object with its class name and arguments
#     def to_json(*args)
#       {
#         JSON.create_id  => self.class.name,
#         'a'             => [ bar, baz ]
#       }.to_json(*args)
#     end
#     # Deserialize JSON string by constructing new Foo object with arguments.
#     def self.json_create(object)
#       new(*object['a'])
#     end
#   end
#
# Demonstration:
#   require 'json'
#   # This Foo object has no custom addition.
#   foo0 = Foo.new(0, 1)
#   json0 = JSON.generate(foo0)
#   obj0 = JSON.parse(json0)
#   # Lood the custom addition.
#   require_relative 'foo_addition'
#   # This foo has the custom addition.
#   foo1 = Foo.new(0, 1)
#   json1 = JSON.generate(foo1)
#   obj1 = JSON.parse(json1, create_additions: true)
#   #   Make a nice display.
#   display = <<EOT
#   Generated JSON:
#     Without custom addition:  #{json0} (#{json0.class})
#     With custom addition:     #{json1} (#{json1.class})
#   Parsed JSON:
#     Without custom addition:  #{obj0.inspect} (#{obj0.class})
#     With custom addition:     #{obj1.inspect} (#{obj1.class})
#   EOT
#   puts display
#
# Output:
#
#   Generated JSON:
#     Without custom addition:  "#<Foo:0x0000000006534e80>" (String)
#     With custom addition:     {"json_class":"Foo","a":[0,1]} (String)
#   Parsed JSON:
#     Without custom addition:  "#<Foo:0x0000000006534e80>" (String)
#     With custom addition:     #<Foo:0x0000000006473bb8 @bar=0, @baz=1> (Foo)
#
module JSON
  require 'json/version'

  begin
    require 'json/ext'
  rescue LoadError
    require 'json/pure'
  end
end
PK$"#[��..#gems/json-2.6.1/lib/json/version.rbnu�[���# frozen_string_literal: false
module JSON
  # JSON version
  VERSION         = '2.6.1'
  VERSION_ARRAY   = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
  VERSION_MAJOR   = VERSION_ARRAY[0] # :nodoc:
  VERSION_MINOR   = VERSION_ARRAY[1] # :nodoc:
  VERSION_BUILD   = VERSION_ARRAY[2] # :nodoc:
end
PK$"#[1z���gems/json-2.6.1/lib/json/ext.rbnu�[���require 'json/common'

module JSON
  # This module holds all the modules/classes that implement JSON's
  # functionality as C extensions.
  module Ext
    require 'json/ext/parser'
    require 'json/ext/generator'
    $DEBUG and warn "Using Ext extension for JSON."
    JSON.parser = Parser
    JSON.generator = Generator
  end

  JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
end
PK$"#[E��”�*gems/json-2.6.1/lib/json/generic_object.rbnu�[���#frozen_string_literal: false
require 'ostruct'

module JSON
  class GenericObject < OpenStruct
    class << self
      alias [] new

      def json_creatable?
        @json_creatable
      end

      attr_writer :json_creatable

      def json_create(data)
        data = data.dup
        data.delete JSON.create_id
        self[data]
      end

      def from_hash(object)
        case
        when object.respond_to?(:to_hash)
          result = new
          object.to_hash.each do |key, value|
            result[key] = from_hash(value)
          end
          result
        when object.respond_to?(:to_ary)
          object.to_ary.map { |a| from_hash(a) }
        else
          object
        end
      end

      def load(source, proc = nil, opts = {})
        result = ::JSON.load(source, proc, opts.merge(:object_class => self))
        result.nil? ? new : result
      end

      def dump(obj, *args)
        ::JSON.dump(obj, *args)
      end
    end
    self.json_creatable = false

    def to_hash
      table
    end

    def [](name)
      __send__(name)
    end unless method_defined?(:[])

    def []=(name, value)
      __send__("#{name}=", value)
    end unless method_defined?(:[]=)

    def |(other)
      self.class[other.to_hash.merge(to_hash)]
    end

    def as_json(*)
      { JSON.create_id => self.class.name }.merge to_hash
    end

    def to_json(*a)
      as_json.to_json(*a)
    end
  end
end
PK$"#[ҍ��iSiS"gems/json-2.6.1/lib/json/common.rbnu�[���#frozen_string_literal: false
require 'json/version'
require 'json/generic_object'

module JSON
  class << self
    # :call-seq:
    #   JSON[object] -> new_array or new_string
    #
    # If +object+ is a \String,
    # calls JSON.parse with +object+ and +opts+ (see method #parse):
    #   json = '[0, 1, null]'
    #   JSON[json]# => [0, 1, nil]
    #
    # Otherwise, calls JSON.generate with +object+ and +opts+ (see method #generate):
    #   ruby = [0, 1, nil]
    #   JSON[ruby] # => '[0,1,null]'
    def [](object, opts = {})
      if object.respond_to? :to_str
        JSON.parse(object.to_str, opts)
      else
        JSON.generate(object, opts)
      end
    end

    # Returns the JSON parser class that is used by JSON. This is either
    # JSON::Ext::Parser or JSON::Pure::Parser:
    #   JSON.parser # => JSON::Ext::Parser
    attr_reader :parser

    # Set the JSON parser class _parser_ to be used by JSON.
    def parser=(parser) # :nodoc:
      @parser = parser
      remove_const :Parser if const_defined?(:Parser, false)
      const_set :Parser, parser
    end

    # Return the constant located at _path_. The format of _path_ has to be
    # either ::A::B::C or A::B::C. In any case, A has to be located at the top
    # level (absolute namespace path?). If there doesn't exist a constant at
    # the given path, an ArgumentError is raised.
    def deep_const_get(path) # :nodoc:
      path.to_s.split(/::/).inject(Object) do |p, c|
        case
        when c.empty?                  then p
        when p.const_defined?(c, true) then p.const_get(c)
        else
          begin
            p.const_missing(c)
          rescue NameError => e
            raise ArgumentError, "can't get const #{path}: #{e}"
          end
        end
      end
    end

    # Set the module _generator_ to be used by JSON.
    def generator=(generator) # :nodoc:
      old, $VERBOSE = $VERBOSE, nil
      @generator = generator
      generator_methods = generator::GeneratorMethods
      for const in generator_methods.constants
        klass = deep_const_get(const)
        modul = generator_methods.const_get(const)
        klass.class_eval do
          instance_methods(false).each do |m|
            m.to_s == 'to_json' and remove_method m
          end
          include modul
        end
      end
      self.state = generator::State
      const_set :State, self.state
      const_set :SAFE_STATE_PROTOTYPE, State.new # for JRuby
      const_set :FAST_STATE_PROTOTYPE, create_fast_state
      const_set :PRETTY_STATE_PROTOTYPE, create_pretty_state
    ensure
      $VERBOSE = old
    end

    def create_fast_state
      State.new(
        :indent         => '',
        :space          => '',
        :object_nl      => "",
        :array_nl       => "",
        :max_nesting    => false
      )
    end

    def create_pretty_state
      State.new(
        :indent         => '  ',
        :space          => ' ',
        :object_nl      => "\n",
        :array_nl       => "\n"
      )
    end

    # Returns the JSON generator module that is used by JSON. This is
    # either JSON::Ext::Generator or JSON::Pure::Generator:
    #   JSON.generator # => JSON::Ext::Generator
    attr_reader :generator

    # Sets or Returns the JSON generator state class that is used by JSON. This is
    # either JSON::Ext::Generator::State or JSON::Pure::Generator::State:
    #   JSON.state # => JSON::Ext::Generator::State
    attr_accessor :state
  end

  DEFAULT_CREATE_ID = 'json_class'.freeze
  private_constant :DEFAULT_CREATE_ID

  CREATE_ID_TLS_KEY = "JSON.create_id".freeze
  private_constant :CREATE_ID_TLS_KEY

  # Sets create identifier, which is used to decide if the _json_create_
  # hook of a class should be called; initial value is +json_class+:
  #   JSON.create_id # => 'json_class'
  def self.create_id=(new_value)
    Thread.current[CREATE_ID_TLS_KEY] = new_value.dup.freeze
  end

  # Returns the current create identifier.
  # See also JSON.create_id=.
  def self.create_id
    Thread.current[CREATE_ID_TLS_KEY] || DEFAULT_CREATE_ID
  end

  NaN           = 0.0/0

  Infinity      = 1.0/0

  MinusInfinity = -Infinity

  # The base exception for JSON errors.
  class JSONError < StandardError
    def self.wrap(exception)
      obj = new("Wrapped(#{exception.class}): #{exception.message.inspect}")
      obj.set_backtrace exception.backtrace
      obj
    end
  end

  # This exception is raised if a parser error occurs.
  class ParserError < JSONError; end

  # This exception is raised if the nesting of parsed data structures is too
  # deep.
  class NestingError < ParserError; end

  # :stopdoc:
  class CircularDatastructure < NestingError; end
  # :startdoc:

  # This exception is raised if a generator or unparser error occurs.
  class GeneratorError < JSONError; end
  # For backwards compatibility
  UnparserError = GeneratorError # :nodoc:

  # This exception is raised if the required unicode support is missing on the
  # system. Usually this means that the iconv library is not installed.
  class MissingUnicodeSupport < JSONError; end

  module_function

  # :call-seq:
  #   JSON.parse(source, opts) -> object
  #
  # Returns the Ruby objects created by parsing the given +source+.
  #
  # Argument +source+ contains the \String to be parsed.
  #
  # Argument +opts+, if given, contains a \Hash of options for the parsing.
  # See {Parsing Options}[#module-JSON-label-Parsing+Options].
  #
  # ---
  #
  # When +source+ is a \JSON array, returns a Ruby \Array:
  #   source = '["foo", 1.0, true, false, null]'
  #   ruby = JSON.parse(source)
  #   ruby # => ["foo", 1.0, true, false, nil]
  #   ruby.class # => Array
  #
  # When +source+ is a \JSON object, returns a Ruby \Hash:
  #   source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}'
  #   ruby = JSON.parse(source)
  #   ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil}
  #   ruby.class # => Hash
  #
  # For examples of parsing for all \JSON data types, see
  # {Parsing \JSON}[#module-JSON-label-Parsing+JSON].
  #
  # Parses nested JSON objects:
  #   source = <<-EOT
  #   {
  #   "name": "Dave",
  #     "age" :40,
  #     "hats": [
  #       "Cattleman's",
  #       "Panama",
  #       "Tophat"
  #     ]
  #   }
  #   EOT
  #   ruby = JSON.parse(source)
  #   ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # ---
  #
  # Raises an exception if +source+ is not valid JSON:
  #   # Raises JSON::ParserError (783: unexpected token at ''):
  #   JSON.parse('')
  #
  def parse(source, opts = {})
    Parser.new(source, **(opts||{})).parse
  end

  # :call-seq:
  #   JSON.parse!(source, opts) -> object
  #
  # Calls
  #   parse(source, opts)
  # with +source+ and possibly modified +opts+.
  #
  # Differences from JSON.parse:
  # - Option +max_nesting+, if not provided, defaults to +false+,
  #   which disables checking for nesting depth.
  # - Option +allow_nan+, if not provided, defaults to +true+.
  def parse!(source, opts = {})
    opts = {
      :max_nesting  => false,
      :allow_nan    => true
    }.merge(opts)
    Parser.new(source, **(opts||{})).parse
  end

  # :call-seq:
  #   JSON.load_file(path, opts={}) -> object
  #
  # Calls:
  #   parse(File.read(path), opts)
  #
  # See method #parse.
  def load_file(filespec, opts = {})
    parse(File.read(filespec), opts)
  end

  # :call-seq:
  #   JSON.load_file!(path, opts = {})
  #
  # Calls:
  #   JSON.parse!(File.read(path, opts))
  #
  # See method #parse!
  def load_file!(filespec, opts = {})
    parse!(File.read(filespec), opts)
  end

  # :call-seq:
  #   JSON.generate(obj, opts = nil) -> new_string
  #
  # Returns a \String containing the generated \JSON data.
  #
  # See also JSON.fast_generate, JSON.pretty_generate.
  #
  # Argument +obj+ is the Ruby object to be converted to \JSON.
  #
  # Argument +opts+, if given, contains a \Hash of options for the generation.
  # See {Generating Options}[#module-JSON-label-Generating+Options].
  #
  # ---
  #
  # When +obj+ is an \Array, returns a \String containing a \JSON array:
  #   obj = ["foo", 1.0, true, false, nil]
  #   json = JSON.generate(obj)
  #   json # => '["foo",1.0,true,false,null]'
  #
  # When +obj+ is a \Hash, returns a \String containing a \JSON object:
  #   obj = {foo: 0, bar: 's', baz: :bat}
  #   json = JSON.generate(obj)
  #   json # => '{"foo":0,"bar":"s","baz":"bat"}'
  #
  # For examples of generating from other Ruby objects, see
  # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects].
  #
  # ---
  #
  # Raises an exception if any formatting option is not a \String.
  #
  # Raises an exception if +obj+ contains circular references:
  #   a = []; b = []; a.push(b); b.push(a)
  #   # Raises JSON::NestingError (nesting of 100 is too deep):
  #   JSON.generate(a)
  #
  def generate(obj, opts = nil)
    if State === opts
      state, opts = opts, nil
    else
      state = State.new
    end
    if opts
      if opts.respond_to? :to_hash
        opts = opts.to_hash
      elsif opts.respond_to? :to_h
        opts = opts.to_h
      else
        raise TypeError, "can't convert #{opts.class} into Hash"
      end
      state = state.configure(opts)
    end
    state.generate(obj)
  end

  # :stopdoc:
  # I want to deprecate these later, so I'll first be silent about them, and
  # later delete them.
  alias unparse generate
  module_function :unparse
  # :startdoc:

  # :call-seq:
  #   JSON.fast_generate(obj, opts) -> new_string
  #
  # Arguments +obj+ and +opts+ here are the same as
  # arguments +obj+ and +opts+ in JSON.generate.
  #
  # By default, generates \JSON data without checking
  # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled).
  #
  # Raises an exception if +obj+ contains circular references:
  #   a = []; b = []; a.push(b); b.push(a)
  #   # Raises SystemStackError (stack level too deep):
  #   JSON.fast_generate(a)
  def fast_generate(obj, opts = nil)
    if State === opts
      state, opts = opts, nil
    else
      state = JSON.create_fast_state
    end
    if opts
      if opts.respond_to? :to_hash
        opts = opts.to_hash
      elsif opts.respond_to? :to_h
        opts = opts.to_h
      else
        raise TypeError, "can't convert #{opts.class} into Hash"
      end
      state.configure(opts)
    end
    state.generate(obj)
  end

  # :stopdoc:
  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
  alias fast_unparse fast_generate
  module_function :fast_unparse
  # :startdoc:

  # :call-seq:
  #   JSON.pretty_generate(obj, opts = nil) -> new_string
  #
  # Arguments +obj+ and +opts+ here are the same as
  # arguments +obj+ and +opts+ in JSON.generate.
  #
  # Default options are:
  #   {
  #     indent: '  ',   # Two spaces
  #     space: ' ',     # One space
  #     array_nl: "\n", # Newline
  #     object_nl: "\n" # Newline
  #   }
  #
  # Example:
  #   obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}}
  #   json = JSON.pretty_generate(obj)
  #   puts json
  # Output:
  #   {
  #     "foo": [
  #       "bar",
  #       "baz"
  #     ],
  #     "bat": {
  #       "bam": 0,
  #       "bad": 1
  #     }
  #   }
  #
  def pretty_generate(obj, opts = nil)
    if State === opts
      state, opts = opts, nil
    else
      state = JSON.create_pretty_state
    end
    if opts
      if opts.respond_to? :to_hash
        opts = opts.to_hash
      elsif opts.respond_to? :to_h
        opts = opts.to_h
      else
        raise TypeError, "can't convert #{opts.class} into Hash"
      end
      state.configure(opts)
    end
    state.generate(obj)
  end

  # :stopdoc:
  # I want to deprecate these later, so I'll first be silent about them, and later delete them.
  alias pretty_unparse pretty_generate
  module_function :pretty_unparse
  # :startdoc:

  class << self
    # Sets or returns default options for the JSON.load method.
    # Initially:
    #   opts = JSON.load_default_options
    #   opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true}
    attr_accessor :load_default_options
  end
  self.load_default_options = {
    :max_nesting      => false,
    :allow_nan        => true,
    :allow_blank       => true,
    :create_additions => true,
  }

  # :call-seq:
  #   JSON.load(source, proc = nil, options = {}) -> object
  #
  # Returns the Ruby objects created by parsing the given +source+.
  #
  # - Argument +source+ must be, or be convertible to, a \String:
  #   - If +source+ responds to instance method +to_str+,
  #     <tt>source.to_str</tt> becomes the source.
  #   - If +source+ responds to instance method +to_io+,
  #     <tt>source.to_io.read</tt> becomes the source.
  #   - If +source+ responds to instance method +read+,
  #     <tt>source.read</tt> becomes the source.
  #   - If both of the following are true, source becomes the \String <tt>'null'</tt>:
  #     - Option +allow_blank+ specifies a truthy value.
  #     - The source, as defined above, is +nil+ or the empty \String <tt>''</tt>.
  #   - Otherwise, +source+ remains the source.
  # - Argument +proc+, if given, must be a \Proc that accepts one argument.
  #   It will be called recursively with each result (depth-first order).
  #   See details below.
  #   BEWARE: This method is meant to serialise data from trusted user input,
  #   like from your own database server or clients under your control, it could
  #   be dangerous to allow untrusted users to pass JSON sources into it.
  # - Argument +opts+, if given, contains a \Hash of options for the parsing.
  #   See {Parsing Options}[#module-JSON-label-Parsing+Options].
  #   The default options can be changed via method JSON.load_default_options=.
  #
  # ---
  #
  # When no +proc+ is given, modifies +source+ as above and returns the result of
  # <tt>parse(source, opts)</tt>;  see #parse.
  #
  # Source for following examples:
  #   source = <<-EOT
  #   {
  #   "name": "Dave",
  #     "age" :40,
  #     "hats": [
  #       "Cattleman's",
  #       "Panama",
  #       "Tophat"
  #     ]
  #   }
  #   EOT
  #
  # Load a \String:
  #   ruby = JSON.load(source)
  #   ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # Load an \IO object:
  #   require 'stringio'
  #   object = JSON.load(StringIO.new(source))
  #   object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # Load a \File object:
  #   path = 't.json'
  #   File.write(path, source)
  #   File.open(path) do |file|
  #     JSON.load(file)
  #   end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
  #
  # ---
  #
  # When +proc+ is given:
  # - Modifies +source+ as above.
  # - Gets the +result+ from calling <tt>parse(source, opts)</tt>.
  # - Recursively calls <tt>proc(result)</tt>.
  # - Returns the final result.
  #
  # Example:
  #   require 'json'
  #
  #   # Some classes for the example.
  #   class Base
  #     def initialize(attributes)
  #       @attributes = attributes
  #     end
  #   end
  #   class User    < Base; end
  #   class Account < Base; end
  #   class Admin   < Base; end
  #   # The JSON source.
  #   json = <<-EOF
  #   {
  #     "users": [
  #         {"type": "User", "username": "jane", "email": "jane@example.com"},
  #         {"type": "User", "username": "john", "email": "john@example.com"}
  #     ],
  #     "accounts": [
  #         {"account": {"type": "Account", "paid": true, "account_id": "1234"}},
  #         {"account": {"type": "Account", "paid": false, "account_id": "1235"}}
  #     ],
  #     "admins": {"type": "Admin", "password": "0wn3d"}
  #   }
  #   EOF
  #   # Deserializer method.
  #   def deserialize_obj(obj, safe_types = %w(User Account Admin))
  #     type = obj.is_a?(Hash) && obj["type"]
  #     safe_types.include?(type) ? Object.const_get(type).new(obj) : obj
  #   end
  #   # Call to JSON.load
  #   ruby = JSON.load(json, proc {|obj|
  #     case obj
  #     when Hash
  #       obj.each {|k, v| obj[k] = deserialize_obj v }
  #     when Array
  #       obj.map! {|v| deserialize_obj v }
  #     end
  #   })
  #   pp ruby
  # Output:
  #   {"users"=>
  #      [#<User:0x00000000064c4c98
  #        @attributes=
  #          {"type"=>"User", "username"=>"jane", "email"=>"jane@example.com"}>,
  #        #<User:0x00000000064c4bd0
  #        @attributes=
  #          {"type"=>"User", "username"=>"john", "email"=>"john@example.com"}>],
  #    "accounts"=>
  #      [{"account"=>
  #          #<Account:0x00000000064c4928
  #          @attributes={"type"=>"Account", "paid"=>true, "account_id"=>"1234"}>},
  #       {"account"=>
  #          #<Account:0x00000000064c4680
  #          @attributes={"type"=>"Account", "paid"=>false, "account_id"=>"1235"}>}],
  #    "admins"=>
  #      #<Admin:0x00000000064c41f8
  #      @attributes={"type"=>"Admin", "password"=>"0wn3d"}>}
  #
  def load(source, proc = nil, options = {})
    opts = load_default_options.merge options
    if source.respond_to? :to_str
      source = source.to_str
    elsif source.respond_to? :to_io
      source = source.to_io.read
    elsif source.respond_to?(:read)
      source = source.read
    end
    if opts[:allow_blank] && (source.nil? || source.empty?)
      source = 'null'
    end
    result = parse(source, opts)
    recurse_proc(result, &proc) if proc
    result
  end

  # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_
  def recurse_proc(result, &proc) # :nodoc:
    case result
    when Array
      result.each { |x| recurse_proc x, &proc }
      proc.call result
    when Hash
      result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc }
      proc.call result
    else
      proc.call result
    end
  end

  alias restore load
  module_function :restore

  class << self
    # Sets or returns the default options for the JSON.dump method.
    # Initially:
    #   opts = JSON.dump_default_options
    #   opts # => {:max_nesting=>false, :allow_nan=>true, :escape_slash=>false}
    attr_accessor :dump_default_options
  end
  self.dump_default_options = {
    :max_nesting => false,
    :allow_nan   => true,
    :escape_slash => false,
  }

  # :call-seq:
  #   JSON.dump(obj, io = nil, limit = nil)
  #
  # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result.
  #
  # The default options can be changed via method JSON.dump_default_options.
  #
  # - Argument +io+, if given, should respond to method +write+;
  #   the \JSON \String is written to +io+, and +io+ is returned.
  #   If +io+ is not given, the \JSON \String is returned.
  # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+.
  #
  # ---
  #
  # When argument +io+ is not given, returns the \JSON \String generated from +obj+:
  #   obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad}
  #   json = JSON.dump(obj)
  #   json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}"
  #
  # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+:
  #   path = 't.json'
  #   File.open(path, 'w') do |file|
  #     JSON.dump(obj, file)
  #   end # => #<File:t.json (closed)>
  #   puts File.read(path)
  # Output:
  #   {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}
  def dump(obj, anIO = nil, limit = nil)
    if anIO and limit.nil?
      anIO = anIO.to_io if anIO.respond_to?(:to_io)
      unless anIO.respond_to?(:write)
        limit = anIO
        anIO = nil
      end
    end
    opts = JSON.dump_default_options
    opts = opts.merge(:max_nesting => limit) if limit
    result = generate(obj, opts)
    if anIO
      anIO.write result
      anIO
    else
      result
    end
  rescue JSON::NestingError
    raise ArgumentError, "exceed depth limit"
  end

  # Encodes string using String.encode.
  def self.iconv(to, from, string)
    string.encode(to, from)
  end
end

module ::Kernel
  private

  # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
  # one line.
  def j(*objs)
    objs.each do |obj|
      puts JSON::generate(obj, :allow_nan => true, :max_nesting => false)
    end
    nil
  end

  # Outputs _objs_ to STDOUT as JSON strings in a pretty format, with
  # indentation and over many lines.
  def jj(*objs)
    objs.each do |obj|
      puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false)
    end
    nil
  end

  # If _object_ is string-like, parse the string and return the parsed result as
  # a Ruby data structure. Otherwise, generate a JSON text from the Ruby data
  # structure object and return it.
  #
  # The _opts_ argument is passed through to generate/parse respectively. See
  # generate and parse for their documentation.
  def JSON(object, *args)
    if object.respond_to? :to_str
      JSON.parse(object.to_str, args.first)
    else
      JSON.generate(object, args.first)
    end
  end
end

# Extends any Class to include _json_creatable?_ method.
class ::Class
  # Returns true if this class can be used to create an instance
  # from a serialised JSON string. The class has to implement a class
  # method _json_create_ that expects a hash as first parameter. The hash
  # should include the required data.
  def json_creatable?
    respond_to?(:json_create)
  end
end
PK$"#[Px���(gems/json-2.6.1/lib/json/add/rational.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Rational
  # Deserializes JSON string by converting numerator value <tt>n</tt>,
  # denominator value <tt>d</tt>, to a Rational object.
  def self.json_create(object)
    Rational(object['n'], object['d'])
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'n'            => numerator,
      'd'            => denominator,
    }
  end

  # Stores class name (Rational) along with numerator value <tt>n</tt> and denominator value <tt>d</tt> as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[�k�)gems/json-2.6.1/lib/json/add/exception.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Exception

  # Deserializes JSON string by constructing new Exception object with message
  # <tt>m</tt> and backtrace <tt>b</tt> serialized with <tt>to_json</tt>
  def self.json_create(object)
    result = new(object['m'])
    result.set_backtrace object['b']
    result
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'm'            => message,
      'b'            => backtrace,
    }
  end

  # Stores class name (Exception) with message <tt>m</tt> and backtrace array
  # <tt>b</tt> as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[���!!#gems/json-2.6.1/lib/json/add/set.rbnu�[���unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
defined?(::Set) or require 'set'

class Set
  # Import a JSON Marshalled object.
  #
  # method used for JSON marshalling support.
  def self.json_create(object)
    new object['a']
  end

  # Marshal the object to JSON.
  #
  # method used for JSON marshalling support.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'a'            => to_a,
    }
  end

  # return the JSON value
  def to_json(*args)
    as_json.to_json(*args)
  end
end

PK$"#[��ff&gems/json-2.6.1/lib/json/add/symbol.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Symbol
  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      's'            => to_s,
    }
  end

  # Stores class name (Symbol) with String representation of Symbol as a JSON string.
  def to_json(*a)
    as_json.to_json(*a)
  end

  # Deserializes JSON string by converting the <tt>string</tt> value stored in the object to a Symbol
  def self.json_create(o)
    o['s'].to_sym
  end
end
PK$"#[ȅ����'gems/json-2.6.1/lib/json/add/complex.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Complex

  # Deserializes JSON string by converting Real value <tt>r</tt>, imaginary
  # value <tt>i</tt>, to a Complex object.
  def self.json_create(object)
    Complex(object['r'], object['i'])
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'r'            => real,
      'i'            => imag,
    }
  end

  # Stores class name (Complex) along with real value <tt>r</tt> and imaginary value <tt>i</tt> as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[�m��qq$gems/json-2.6.1/lib/json/add/date.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
require 'date'

class Date

  # Deserializes JSON string by converting Julian year <tt>y</tt>, month
  # <tt>m</tt>, day <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> to Date.
  def self.json_create(object)
    civil(*object.values_at('y', 'm', 'd', 'sg'))
  end

  alias start sg unless method_defined?(:start)

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'y' => year,
      'm' => month,
      'd' => day,
      'sg' => start,
    }
  end

  # Stores class name (Date) with Julian year <tt>y</tt>, month <tt>m</tt>, day
  # <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[J��$gems/json-2.6.1/lib/json/add/time.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Time

  # Deserializes JSON string by converting time since epoch to Time
  def self.json_create(object)
    if usec = object.delete('u') # used to be tv_usec -> tv_nsec
      object['n'] = usec * 1000
    end
    if method_defined?(:tv_nsec)
      at(object['s'], Rational(object['n'], 1000))
    else
      at(object['s'], object['n'] / 1000)
    end
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    nanoseconds = [ tv_usec * 1000 ]
    respond_to?(:tv_nsec) and nanoseconds << tv_nsec
    nanoseconds = nanoseconds.max
    {
      JSON.create_id => self.class.name,
      's'            => tv_sec,
      'n'            => nanoseconds,
    }
  end

  # Stores class name (Time) with number of seconds since epoch and number of
  # microseconds for Time as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[@9%&gems/json-2.6.1/lib/json/add/regexp.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Regexp

  # Deserializes JSON string by constructing new Regexp object with source
  # <tt>s</tt> (Regexp or String) and options <tt>o</tt> serialized by
  # <tt>to_json</tt>
  def self.json_create(object)
    new(object['s'], object['o'])
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'o'            => options,
      's'            => source,
    }
  end

  # Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
  # (Regexp or String) as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[o���aa*gems/json-2.6.1/lib/json/add/bigdecimal.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
defined?(::BigDecimal) or require 'bigdecimal'

class BigDecimal
  # Import a JSON Marshalled object.
  #
  # method used for JSON marshalling support.
  def self.json_create(object)
    BigDecimal._load object['b']
  end

  # Marshal the object to JSON.
  #
  # method used for JSON marshalling support.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'b'            => _dump,
    }
  end

  # return the JSON value
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK$"#[1+Ǔ00)gems/json-2.6.1/lib/json/add/date_time.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
require 'date'

class DateTime

  # Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
  # day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
  # offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> to DateTime.
  def self.json_create(object)
    args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
    of_a, of_b = object['of'].split('/')
    if of_b and of_b != '0'
      args << Rational(of_a.to_i, of_b.to_i)
    else
      args << of_a
    end
    args << object['sg']
    civil(*args)
  end

  alias start sg unless method_defined?(:start)

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id => self.class.name,
      'y' => year,
      'm' => month,
      'd' => day,
      'H' => hour,
      'M' => min,
      'S' => sec,
      'of' => offset.to_s,
      'sg' => start,
    }
  end

  # Stores class name (DateTime) with Julian year <tt>y</tt>, month <tt>m</tt>,
  # day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
  # offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
  def to_json(*args)
    as_json.to_json(*args)
  end
end


PK$"#[�%��&gems/json-2.6.1/lib/json/add/struct.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Struct

  # Deserializes JSON string by constructing new Struct object with values
  # <tt>v</tt> serialized by <tt>to_json</tt>.
  def self.json_create(object)
    new(*object['v'])
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    klass = self.class.name
    klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
    {
      JSON.create_id => klass,
      'v'            => values,
    }
  end

  # Stores class name (Struct) with Struct values <tt>v</tt> as a JSON string.
  # Only named structs are supported.
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK%"#[��a%gems/json-2.6.1/lib/json/add/range.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end

class Range

  # Deserializes JSON string by constructing new Range object with arguments
  # <tt>a</tt> serialized by <tt>to_json</tt>.
  def self.json_create(object)
    new(*object['a'])
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    {
      JSON.create_id  => self.class.name,
      'a'             => [ first, last, exclude_end? ]
    }
  end

  # Stores class name (Range) with JSON array of arguments <tt>a</tt> which
  # include <tt>first</tt> (integer), <tt>last</tt> (integer), and
  # <tt>exclude_end?</tt> (boolean) as JSON string.
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK%"#[��&a\\$gems/json-2.6.1/lib/json/add/core.rbnu�[���#frozen_string_literal: false
# This file requires the implementations of ruby core's custom objects for
# serialisation/deserialisation.

require 'json/add/date'
require 'json/add/date_time'
require 'json/add/exception'
require 'json/add/range'
require 'json/add/regexp'
require 'json/add/struct'
require 'json/add/symbol'
require 'json/add/time'
PK%"#[��m�'gems/json-2.6.1/lib/json/add/ostruct.rbnu�[���#frozen_string_literal: false
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
  require 'json'
end
require 'ostruct'

class OpenStruct

  # Deserializes JSON string by constructing new Struct object with values
  # <tt>t</tt> serialized by <tt>to_json</tt>.
  def self.json_create(object)
    new(object['t'] || object[:t])
  end

  # Returns a hash, that will be turned into a JSON object and represent this
  # object.
  def as_json(*)
    klass = self.class.name
    klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
    {
      JSON.create_id => klass,
      't'            => table,
    }
  end

  # Stores class name (OpenStruct) with this struct's values <tt>t</tt> as a
  # JSON string.
  def to_json(*args)
    as_json.to_json(*args)
  end
end
PK%"#[�C�6cc#gems/bundler-2.3.27/libexec/bundlernuȯ��#!/opt/alt/ruby31/bin/ruby
# frozen_string_literal: true

load File.expand_path("bundle", __dir__)
PK%"#[�w��~~"gems/bundler-2.3.27/libexec/bundlenuȯ��#!/opt/alt/ruby31/bin/ruby
# frozen_string_literal: true

# Exit cleanly from an early interrupt
Signal.trap("INT") do
  Bundler.ui.debug("\n#{caller.join("\n")}") if defined?(Bundler)
  exit 1
end

base_path = File.expand_path("../lib", __dir__)

if File.exist?(base_path)
  require_relative "../lib/bundler"
else
  require "bundler"
end

# Workaround for non-activated bundler spec due to missing https://github.com/rubygems/rubygems/commit/4e306d7bcdee924b8d80ca9db6125aa59ee4e5a3
gem "bundler", Bundler::VERSION if Gem.rubygems_version < Gem::Version.new("2.6.2")

if Gem.rubygems_version < Gem::Version.new("3.2.3") && Gem.ruby_version < Gem::Version.new("2.6.a") && !ENV["BUNDLER_NO_OLD_RUBYGEMS_WARNING"]
  Bundler.ui.warn \
    "Your RubyGems version (#{Gem::VERSION}) has a bug that prevents " \
    "`required_ruby_version` from working for Bundler. Any scripts that use " \
    "`gem install bundler` will break as soon as Bundler drops support for " \
    "your Ruby version. Please upgrade RubyGems to avoid future breakage " \
    "and silence this warning by running `gem update --system 3.2.3`"
end

if File.exist?(base_path)
  require_relative "../lib/bundler/friendly_errors"
else
  require "bundler/friendly_errors"
end

Bundler.with_friendly_errors do
  if File.exist?(base_path)
    require_relative "../lib/bundler/cli"
  else
    require "bundler/cli"
  end

  # Allow any command to use --help flag to show help for that command
  help_flags = %w[--help -h]
  help_flag_used = ARGV.any? {|a| help_flags.include? a }
  args = help_flag_used ? Bundler::CLI.reformatted_help_args(ARGV) : ARGV

  Bundler::CLI.start(args, :debug => true)
end
PK%"#[���8gems/bundler-2.3.27/lib/bundler/environment_preserver.rbnu�[���# frozen_string_literal: true

module Bundler
  class EnvironmentPreserver
    INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL".freeze
    BUNDLER_KEYS = %w[
      BUNDLE_BIN_PATH
      BUNDLE_GEMFILE
      BUNDLER_VERSION
      GEM_HOME
      GEM_PATH
      MANPATH
      PATH
      RB_USER_INSTALL
      RUBYLIB
      RUBYOPT
    ].map(&:freeze).freeze
    BUNDLER_PREFIX = "BUNDLER_ORIG_".freeze

    def self.from_env
      new(env_to_hash(ENV), BUNDLER_KEYS)
    end

    def self.env_to_hash(env)
      to_hash = env.to_hash
      return to_hash unless Gem.win_platform?

      to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
    end

    # @param env [Hash]
    # @param keys [Array<String>]
    def initialize(env, keys)
      @original = env
      @keys = keys
      @prefix = BUNDLER_PREFIX
    end

    # Replaces `ENV` with the bundler environment variables backed up
    def replace_with_backup
      unless Gem.win_platform?
        ENV.replace(backup)
        return
      end

      # Fallback logic for Windows below to workaround
      # https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
      # supported rubies include the fix for that.

      ENV.clear

      backup.each {|k, v| ENV[k] = v }
    end

    # @return [Hash]
    def backup
      env = @original.clone
      @keys.each do |key|
        value = env[key]
        if !value.nil? && !value.empty?
          env[@prefix + key] ||= value
        elsif value.nil?
          env[@prefix + key] ||= INTENTIONALLY_NIL
        end
      end
      env
    end

    # @return [Hash]
    def restore
      env = @original.clone
      @keys.each do |key|
        value_original = env[@prefix + key]
        next if value_original.nil? || value_original.empty?
        if value_original == INTENTIONALLY_NIL
          env.delete(key)
        else
          env[key] = value_original
        end
        env.delete(@prefix + key)
      end
      env
    end
  end
end
PK%"#[.z0gems/bundler-2.3.27/lib/bundler/man/bundle-gem.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-GEM" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
.
.SH "SYNOPSIS"
\fBbundle gem\fR \fIGEM_NAME\fR \fIOPTIONS\fR
.
.SH "DESCRIPTION"
Generates a directory named \fBGEM_NAME\fR with a \fBRakefile\fR, \fBGEM_NAME\.gemspec\fR, and other supporting files and directories that can be used to develop a rubygem with that name\.
.
.P
Run \fBrake \-T\fR in the resulting project for a list of Rake tasks that can be used to test and publish the gem to rubygems\.org\.
.
.P
The generated project skeleton can be customized with OPTIONS, as explained below\. Note that these options can also be specified via Bundler\'s global configuration file using the following names:
.
.IP "\(bu" 4
\fBgem\.coc\fR
.
.IP "\(bu" 4
\fBgem\.mit\fR
.
.IP "\(bu" 4
\fBgem\.test\fR
.
.IP "" 0
.
.SH "OPTIONS"
.
.TP
\fB\-\-exe\fR or \fB\-b\fR or \fB\-\-bin\fR
Specify that Bundler should create a binary executable (as \fBexe/GEM_NAME\fR) in the generated rubygem project\. This binary will also be added to the \fBGEM_NAME\.gemspec\fR manifest\. This behavior is disabled by default\.
.
.TP
\fB\-\-no\-exe\fR
Do not create a binary (overrides \fB\-\-exe\fR specified in the global config)\.
.
.TP
\fB\-\-coc\fR
Add a \fBCODE_OF_CONDUCT\.md\fR file to the root of the generated project\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
.
.TP
\fB\-\-no\-coc\fR
Do not create a \fBCODE_OF_CONDUCT\.md\fR (overrides \fB\-\-coc\fR specified in the global config)\.
.
.TP
\fB\-\-ext\fR
Add boilerplate for C extension code to the generated project\. This behavior is disabled by default\.
.
.TP
\fB\-\-no\-ext\fR
Do not add C extension code (overrides \fB\-\-ext\fR specified in the global config)\.
.
.TP
\fB\-\-mit\fR
Add an MIT license to a \fBLICENSE\.txt\fR file in the root of the generated project\. Your name from the global git config is used for the copyright statement\. If this option is unspecified, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
.
.TP
\fB\-\-no\-mit\fR
Do not create a \fBLICENSE\.txt\fR (overrides \fB\-\-mit\fR specified in the global config)\.
.
.TP
\fB\-t\fR, \fB\-\-test=minitest\fR, \fB\-\-test=rspec\fR, \fB\-\-test=test\-unit\fR
Specify the test framework that Bundler should use when generating the project\. Acceptable values are \fBminitest\fR, \fBrspec\fR and \fBtest\-unit\fR\. The \fBGEM_NAME\.gemspec\fR will be configured and a skeleton test/spec directory will be created based on this option\. Given no option is specified:
.
.IP
When Bundler is configured to generate tests, this defaults to Bundler\'s global config setting \fBgem\.test\fR\.
.
.IP
When Bundler is configured to not generate tests, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
.
.TP
\fB\-\-ci\fR, \fB\-\-ci=github\fR, \fB\-\-ci=travis\fR, \fB\-\-ci=gitlab\fR, \fB\-\-ci=circle\fR
Specify the continuous integration service that Bundler should use when generating the project\. Acceptable values are \fBgithub\fR, \fBtravis\fR, \fBgitlab\fR and \fBcircle\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
.
.IP
When Bundler is configured to generate CI files, this defaults to Bundler\'s global config setting \fBgem\.ci\fR\.
.
.IP
When Bundler is configured to not generate CI files, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
.
.TP
\fB\-\-linter\fR, \fB\-\-linter=rubocop\fR, \fB\-\-linter=standard\fR
Specify the linter and code formatter that Bundler should add to the project\'s development dependencies\. Acceptable values are \fBrubocop\fR and \fBstandard\fR\. A configuration file will be generated in the project directory\. Given no option is specified:
.
.IP
When Bundler is configured to add a linter, this defaults to Bundler\'s global config setting \fBgem\.linter\fR\.
.
.IP
When Bundler is configured not to add a linter, an interactive prompt will be displayed and the answer will be used for the current rubygem project\.
.
.IP
When Bundler is unconfigured, an interactive prompt will be displayed and the answer will be saved in Bundler\'s global config for future \fBbundle gem\fR use\.
.
.TP
\fB\-e\fR, \fB\-\-edit[=EDITOR]\fR
Open the resulting GEM_NAME\.gemspec in EDITOR, or the default editor if not specified\. The default is \fB$BUNDLER_EDITOR\fR, \fB$VISUAL\fR, or \fB$EDITOR\fR\.
.
.SH "SEE ALSO"
.
.IP "\(bu" 4
bundle config(1) \fIbundle\-config\.1\.html\fR
.
.IP "" 0

PK%"#[\'i�TT6gems/bundler-2.3.27/lib/bundler/man/bundle-show.1.ronnnu�[���bundle-show(1) -- Shows all the gems in your bundle, or the path to a gem
=========================================================================

## SYNOPSIS

`bundle show` [GEM]
              [--paths]

## DESCRIPTION

Without the [GEM] option, `show` will print a list of the names and versions of
all gems that are required by your [`Gemfile(5)`][Gemfile(5)], sorted by name.

Calling show with [GEM] will list the exact location of that gem on your
machine.

## OPTIONS

* `--paths`:
  List the paths of all gems that are required by your [`Gemfile(5)`][Gemfile(5)],
  sorted by gem name.
PK%"#[�;���1gems/bundler-2.3.27/lib/bundler/man/bundle-list.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-LIST" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-list\fR \- List all the gems in the bundle
.
.SH "SYNOPSIS"
\fBbundle list\fR [\-\-name\-only] [\-\-paths] [\-\-without\-group=GROUP[ GROUP\.\.\.]] [\-\-only\-group=GROUP[ GROUP\.\.\.]]
.
.SH "DESCRIPTION"
Prints a list of all the gems in the bundle including their version\.
.
.P
Example:
.
.P
bundle list \-\-name\-only
.
.P
bundle list \-\-paths
.
.P
bundle list \-\-without\-group test
.
.P
bundle list \-\-only\-group dev
.
.P
bundle list \-\-only\-group dev test \-\-paths
.
.SH "OPTIONS"
.
.TP
\fB\-\-name\-only\fR
Print only the name of each gem\.
.
.TP
\fB\-\-paths\fR
Print the path to each gem in the bundle\.
.
.TP
\fB\-\-without\-group=<list>\fR
A space\-separated list of groups of gems to skip during printing\.
.
.TP
\fB\-\-only\-group=<list>\fR
A space\-separated list of groups of gems to print\.

PK%"#[�lr]]6gems/bundler-2.3.27/lib/bundler/man/bundle-help.1.ronnnu�[���bundle-help(1) -- Displays detailed help for each subcommand
============================================================

## SYNOPSIS

`bundle help` [COMMAND]

## DESCRIPTION

Displays detailed help for the given subcommand.
You can specify a single `COMMAND` at the same time.
When `COMMAND` is omitted, help for `help` command will be displayed.
PK%"#[1�~��:gems/bundler-2.3.27/lib/bundler/man/bundle-binstubs.1.ronnnu�[���bundle-binstubs(1) -- Install the binstubs of the listed gems
=============================================================

## SYNOPSIS

`bundle binstubs` <GEM_NAME> [--force] [--path PATH] [--standalone]

## DESCRIPTION

Binstubs are scripts that wrap around executables. Bundler creates a
small Ruby file (a binstub) that loads Bundler, runs the command,
and puts it into `bin/`. Binstubs are a shortcut-or alternative-
to always using `bundle exec`. This gives you a file that can be run
directly, and one that will always run the correct gem version
used by the application.

For example, if you run `bundle binstubs rspec-core`, Bundler will create
the file `bin/rspec`. That file will contain enough code to load Bundler,
tell it to load the bundled gems, and then run rspec.

This command generates binstubs for executables in `GEM_NAME`.
Binstubs are put into `bin`, or the `--path` directory if one has been set.
Calling binstubs with [GEM [GEM]] will create binstubs for all given gems.

## OPTIONS

* `--force`:
  Overwrite existing binstubs if they exist.

* `--path`:
  The location to install the specified binstubs to. This defaults to `bin`.

* `--standalone`:
  Makes binstubs that can work without depending on Rubygems or Bundler at
  runtime.

* `--shebang`:
  Specify a different shebang executable name than the default (default 'ruby')

* `--all`:
  Create binstubs for all gems in the bundle.
PK%"#[�85gems/bundler-2.3.27/lib/bundler/man/bundle-gem.1.ronnnu�[���bundle-gem(1) -- Generate a project skeleton for creating a rubygem
====================================================================

## SYNOPSIS

`bundle gem` <GEM_NAME> [OPTIONS]

## DESCRIPTION

Generates a directory named `GEM_NAME` with a `Rakefile`, `GEM_NAME.gemspec`,
and other supporting files and directories that can be used to develop a
rubygem with that name.

Run `rake -T` in the resulting project for a list of Rake tasks that can be used
to test and publish the gem to rubygems.org.

The generated project skeleton can be customized with OPTIONS, as explained
below. Note that these options can also be specified via Bundler's global
configuration file using the following names:

* `gem.coc`
* `gem.mit`
* `gem.test`

## OPTIONS

* `--exe` or `-b` or `--bin`:
  Specify that Bundler should create a binary executable (as `exe/GEM_NAME`)
  in the generated rubygem project. This binary will also be added to the
  `GEM_NAME.gemspec` manifest. This behavior is disabled by default.

* `--no-exe`:
  Do not create a binary (overrides `--exe` specified in the global config).

* `--coc`:
  Add a `CODE_OF_CONDUCT.md` file to the root of the generated project. If
  this option is unspecified, an interactive prompt will be displayed and the
  answer will be saved in Bundler's global config for future `bundle gem` use.

* `--no-coc`:
  Do not create a `CODE_OF_CONDUCT.md` (overrides `--coc` specified in the
  global config).

* `--ext`:
  Add boilerplate for C extension code to the generated project. This behavior
  is disabled by default.

* `--no-ext`:
  Do not add C extension code (overrides `--ext` specified in the global
  config).

* `--mit`:
  Add an MIT license to a `LICENSE.txt` file in the root of the generated
  project. Your name from the global git config is used for the copyright
  statement. If this option is unspecified, an interactive prompt will be
  displayed and the answer will be saved in Bundler's global config for future
  `bundle gem` use.

* `--no-mit`:
  Do not create a `LICENSE.txt` (overrides `--mit` specified in the global
  config).

* `-t`, `--test=minitest`, `--test=rspec`, `--test=test-unit`:
  Specify the test framework that Bundler should use when generating the
  project. Acceptable values are `minitest`, `rspec` and `test-unit`. The
  `GEM_NAME.gemspec` will be configured and a skeleton test/spec directory will
  be created based on this option. Given no option is specified:

  When Bundler is configured to generate tests, this defaults to Bundler's
  global config setting `gem.test`.

  When Bundler is configured to not generate tests, an interactive prompt will
  be displayed and the answer will be used for the current rubygem project.

  When Bundler is unconfigured, an interactive prompt will be displayed and
  the answer will be saved in Bundler's global config for future `bundle gem`
  use.

* `--ci`, `--ci=github`, `--ci=travis`, `--ci=gitlab`, `--ci=circle`:
  Specify the continuous integration service that Bundler should use when
  generating the project. Acceptable values are `github`, `travis`, `gitlab`
  and `circle`. A configuration file will be generated in the project directory.
  Given no option is specified:

  When Bundler is configured to generate CI files, this defaults to Bundler's
  global config setting `gem.ci`.

  When Bundler is configured to not generate CI files, an interactive prompt
  will be displayed and the answer will be used for the current rubygem project.

  When Bundler is unconfigured, an interactive prompt will be displayed and
  the answer will be saved in Bundler's global config for future `bundle gem`
  use.

* `--linter`, `--linter=rubocop`, `--linter=standard`:
  Specify the linter and code formatter that Bundler should add to the
  project's development dependencies. Acceptable values are `rubocop` and
  `standard`. A configuration file will be generated in the project directory.
  Given no option is specified:

  When Bundler is configured to add a linter, this defaults to Bundler's
  global config setting `gem.linter`.

  When Bundler is configured not to add a linter, an interactive prompt
  will be displayed and the answer will be used for the current rubygem project.

  When Bundler is unconfigured, an interactive prompt will be displayed and
  the answer will be saved in Bundler's global config for future `bundle gem`
  use.

* `-e`, `--edit[=EDITOR]`:
  Open the resulting GEM_NAME.gemspec in EDITOR, or the default editor if not
  specified. The default is `$BUNDLER_EDITOR`, `$VISUAL`, or `$EDITOR`.

## SEE ALSO

* [bundle config(1)](bundle-config.1.html)
PK%"#[s��kZZ-gems/bundler-2.3.27/lib/bundler/man/gemfile.5nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "GEMFILE" "5" "October 2022" "" ""
.
.SH "NAME"
\fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
.
.SH "SYNOPSIS"
A \fBGemfile\fR describes the gem dependencies required to execute associated Ruby code\.
.
.P
Place the \fBGemfile\fR in the root of the directory containing the associated code\. For instance, in a Rails application, place the \fBGemfile\fR in the same directory as the \fBRakefile\fR\.
.
.SH "SYNTAX"
A \fBGemfile\fR is evaluated as Ruby code, in a context which makes available a number of methods used to describe the gem requirements\.
.
.SH "GLOBAL SOURCE"
At the top of the \fBGemfile\fR, add a single line for the \fBRubyGems\fR source that contains the gems listed in the \fBGemfile\fR\.
.
.IP "" 4
.
.nf

source "https://rubygems\.org"
.
.fi
.
.IP "" 0
.
.P
You can add only one global source\. In Bundler 1\.13, adding multiple global sources was deprecated\. The \fBsource\fR \fBMUST\fR be a valid RubyGems repository\.
.
.P
To use more than one source of RubyGems, you should use \fI\fBsource\fR block\fR\.
.
.P
A source is checked for gems following the heuristics described in \fISOURCE PRIORITY\fR\.
.
.P
\fBNote about a behavior of the feature deprecated in Bundler 1\.13\fR: If a gem is found in more than one global source, Bundler will print a warning after installing the gem indicating which source was used, and listing the other sources where the gem is available\. A specific source can be selected for gems that need to use a non\-standard repository, suppressing this warning, by using the \fI\fB:source\fR option\fR or \fBsource\fR block\.
.
.SS "CREDENTIALS"
Some gem sources require a username and password\. Use bundle config(1) \fIbundle\-config\.1\.html\fR to set the username and password for any of the sources that need it\. The command must be run once on each computer that will install the Gemfile, but this keeps the credentials from being stored in plain text in version control\.
.
.IP "" 4
.
.nf

bundle config gems\.example\.com user:password
.
.fi
.
.IP "" 0
.
.P
For some sources, like a company Gemfury account, it may be easier to include the credentials in the Gemfile as part of the source URL\.
.
.IP "" 4
.
.nf

source "https://user:password@gems\.example\.com"
.
.fi
.
.IP "" 0
.
.P
Credentials in the source URL will take precedence over credentials set using \fBconfig\fR\.
.
.SH "RUBY"
If your application requires a specific Ruby version or engine, specify your requirements using the \fBruby\fR method, with the following arguments\. All parameters are \fBOPTIONAL\fR unless otherwise specified\.
.
.SS "VERSION (required)"
The version of Ruby that your application requires\. If your application requires an alternate Ruby engine, such as JRuby, TruffleRuby, etc\., this should be the Ruby version that the engine is compatible with\.
.
.IP "" 4
.
.nf

ruby "3\.1\.2"
.
.fi
.
.IP "" 0
.
.SS "ENGINE"
Each application \fImay\fR specify a Ruby engine\. If an engine is specified, an engine version \fImust\fR also be specified\.
.
.P
What exactly is an Engine? \- A Ruby engine is an implementation of the Ruby language\.
.
.IP "\(bu" 4
For background: the reference or original implementation of the Ruby programming language is called Matz\'s Ruby Interpreter \fIhttps://en\.wikipedia\.org/wiki/Ruby_MRI\fR, or MRI for short\. This is named after Ruby creator Yukihiro Matsumoto, also known as Matz\. MRI is also known as CRuby, because it is written in C\. MRI is the most widely used Ruby engine\.
.
.IP "\(bu" 4
Other implementations \fIhttps://www\.ruby\-lang\.org/en/about/\fR of Ruby exist\. Some of the more well\-known implementations include JRuby \fIhttp://jruby\.org/\fR and TruffleRuby \fIhttps://www\.graalvm\.org/ruby/\fR\. Rubinius is an alternative implementation of Ruby written in Ruby\. JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine\. TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM\.
.
.IP "" 0
.
.SS "ENGINE VERSION"
Each application \fImay\fR specify a Ruby engine version\. If an engine version is specified, an engine \fImust\fR also be specified\. If the engine is "ruby" the engine version specified \fImust\fR match the Ruby version\.
.
.IP "" 4
.
.nf

ruby "2\.6\.8", engine: "jruby", engine_version: "9\.3\.8\.0"
.
.fi
.
.IP "" 0
.
.SS "PATCHLEVEL"
Each application \fImay\fR specify a Ruby patchlevel\. Specifying the patchlevel has been meaningless since Ruby 2\.1\.0 was released as the patchlevel is now uniquely determined by a combination of major, minor, and teeny version numbers\.
.
.P
This option was implemented in Bundler 1\.4\.0 for Ruby 2\.0 or earlier\.
.
.IP "" 4
.
.nf

ruby "3\.1\.2", patchlevel: "20"
.
.fi
.
.IP "" 0
.
.SH "GEMS"
Specify gem requirements using the \fBgem\fR method, with the following arguments\. All parameters are \fBOPTIONAL\fR unless otherwise specified\.
.
.SS "NAME (required)"
For each gem requirement, list a single \fIgem\fR line\.
.
.IP "" 4
.
.nf

gem "nokogiri"
.
.fi
.
.IP "" 0
.
.SS "VERSION"
Each \fIgem\fR \fBMAY\fR have one or more version specifiers\.
.
.IP "" 4
.
.nf

gem "nokogiri", ">= 1\.4\.2"
gem "RedCloth", ">= 4\.1\.0", "< 4\.2\.0"
.
.fi
.
.IP "" 0
.
.SS "REQUIRE AS"
Each \fIgem\fR \fBMAY\fR specify files that should be used when autorequiring via \fBBundler\.require\fR\. You may pass an array with multiple files or \fBtrue\fR if the file you want \fBrequired\fR has the same name as \fIgem\fR or \fBfalse\fR to prevent any file from being autorequired\.
.
.IP "" 4
.
.nf

gem "redis", require: ["redis/connection/hiredis", "redis"]
gem "webmock", require: false
gem "byebug", require: true
.
.fi
.
.IP "" 0
.
.P
The argument defaults to the name of the gem\. For example, these are identical:
.
.IP "" 4
.
.nf

gem "nokogiri"
gem "nokogiri", require: "nokogiri"
gem "nokogiri", require: true
.
.fi
.
.IP "" 0
.
.SS "GROUPS"
Each \fIgem\fR \fBMAY\fR specify membership in one or more groups\. Any \fIgem\fR that does not specify membership in any group is placed in the \fBdefault\fR group\.
.
.IP "" 4
.
.nf

gem "rspec", group: :test
gem "wirble", groups: [:development, :test]
.
.fi
.
.IP "" 0
.
.P
The Bundler runtime allows its two main methods, \fBBundler\.setup\fR and \fBBundler\.require\fR, to limit their impact to particular groups\.
.
.IP "" 4
.
.nf

# setup adds gems to Ruby\'s load path
Bundler\.setup                    # defaults to all groups
require "bundler/setup"          # same as Bundler\.setup
Bundler\.setup(:default)          # only set up the _default_ group
Bundler\.setup(:test)             # only set up the _test_ group (but `not` _default_)
Bundler\.setup(:default, :test)   # set up the _default_ and _test_ groups, but no others

# require requires all of the gems in the specified groups
Bundler\.require                  # defaults to the _default_ group
Bundler\.require(:default)        # identical
Bundler\.require(:default, :test) # requires the _default_ and _test_ groups
Bundler\.require(:test)           # requires the _test_ group
.
.fi
.
.IP "" 0
.
.P
The Bundler CLI allows you to specify a list of groups whose gems \fBbundle install\fR should not install with the \fBwithout\fR configuration\.
.
.P
To specify multiple groups to ignore, specify a list of groups separated by spaces\.
.
.IP "" 4
.
.nf

bundle config set \-\-local without test
bundle config set \-\-local without development test
.
.fi
.
.IP "" 0
.
.P
Also, calling \fBBundler\.setup\fR with no parameters, or calling \fBrequire "bundler/setup"\fR will setup all groups except for the ones you excluded via \fB\-\-without\fR (since they are not available)\.
.
.P
Note that on \fBbundle install\fR, bundler downloads and evaluates all gems, in order to create a single canonical list of all of the required gems and their dependencies\. This means that you cannot list different versions of the same gems in different groups\. For more details, see Understanding Bundler \fIhttps://bundler\.io/rationale\.html\fR\.
.
.SS "PLATFORMS"
If a gem should only be used in a particular platform or set of platforms, you can specify them\. Platforms are essentially identical to groups, except that you do not need to use the \fB\-\-without\fR install\-time flag to exclude groups of gems for other platforms\.
.
.P
There are a number of \fBGemfile\fR platforms:
.
.TP
\fBruby\fR
C Ruby (MRI), Rubinius, or TruffleRuby, but not Windows
.
.TP
\fBmri\fR
C Ruby (MRI) only, but not Windows
.
.TP
\fBwindows\fR
Windows C Ruby (MRI), including RubyInstaller 32\-bit and 64\-bit versions
.
.TP
\fBmswin\fR
Windows C Ruby (MRI), including RubyInstaller 32\-bit versions
.
.TP
\fBmswin64\fR
Windows C Ruby (MRI), including RubyInstaller 64\-bit versions
.
.TP
\fBrbx\fR
Rubinius
.
.TP
\fBjruby\fR
JRuby
.
.TP
\fBtruffleruby\fR
TruffleRuby
.
.P
On platforms \fBruby\fR, \fBmri\fR, \fBmswin\fR, \fBmswin64\fR, and \fBwindows\fR, you may additionally specify a version by appending the major and minor version numbers without a delimiter\. For example, to specify that a gem should only be used on platform \fBruby\fR version 3\.1, use:
.
.IP "" 4
.
.nf

ruby_31
.
.fi
.
.IP "" 0
.
.P
As with groups (above), you may specify one or more platforms:
.
.IP "" 4
.
.nf

gem "weakling",   platforms: :jruby
gem "ruby\-debug", platforms: :mri_31
gem "nokogiri",   platforms: [:windows_31, :jruby]
.
.fi
.
.IP "" 0
.
.P
All operations involving groups (\fBbundle install\fR \fIbundle\-install\.1\.html\fR, \fBBundler\.setup\fR, \fBBundler\.require\fR) behave exactly the same as if any groups not matching the current platform were explicitly excluded\.
.
.SS "FORCE_RUBY_PLATFORM"
If you always want the pure ruby variant of a gem to be chosen over platform specific variants, you can use the \fBforce_ruby_platform\fR option:
.
.IP "" 4
.
.nf

gem "ffi", force_ruby_platform: true
.
.fi
.
.IP "" 0
.
.P
This can be handy (assuming the pure ruby variant works fine) when:
.
.IP "\(bu" 4
You\'re having issues with the platform specific variant\.
.
.IP "\(bu" 4
The platform specific variant does not yet support a newer ruby (and thus has a \fBrequired_ruby_version\fR upper bound), but you still want your Gemfile{\.lock} files to resolve under that ruby\.
.
.IP "" 0
.
.SS "SOURCE"
You can select an alternate RubyGems repository for a gem using the \':source\' option\.
.
.IP "" 4
.
.nf

gem "some_internal_gem", source: "https://gems\.example\.com"
.
.fi
.
.IP "" 0
.
.P
This forces the gem to be loaded from this source and ignores the global source declared at the top level of the file\. If the gem does not exist in this source, it will not be installed\.
.
.P
Bundler will search for child dependencies of this gem by first looking in the source selected for the parent, but if they are not found there, it will fall back on the global source\.
.
.P
\fBNote about a behavior of the feature deprecated in Bundler 1\.13\fR: Selecting a specific source repository this way also suppresses the ambiguous gem warning described above in \fIGLOBAL SOURCE\fR\.
.
.P
Using the \fB:source\fR option for an individual gem will also make that source available as a possible global source for any other gems which do not specify explicit sources\. Thus, when adding gems with explicit sources, it is recommended that you also ensure all other gems in the Gemfile are using explicit sources\.
.
.SS "GIT"
If necessary, you can specify that a gem is located at a particular git repository using the \fB:git\fR parameter\. The repository can be accessed via several protocols:
.
.TP
\fBHTTP(S)\fR
gem "rails", git: "https://github\.com/rails/rails\.git"
.
.TP
\fBSSH\fR
gem "rails", git: "git@github\.com:rails/rails\.git"
.
.TP
\fBgit\fR
gem "rails", git: "git://github\.com/rails/rails\.git"
.
.P
If using SSH, the user that you use to run \fBbundle install\fR \fBMUST\fR have the appropriate keys available in their \fB$HOME/\.ssh\fR\.
.
.P
\fBNOTE\fR: \fBhttp://\fR and \fBgit://\fR URLs should be avoided if at all possible\. These protocols are unauthenticated, so a man\-in\-the\-middle attacker can deliver malicious code and compromise your system\. HTTPS and SSH are strongly preferred\.
.
.P
The \fBgroup\fR, \fBplatforms\fR, and \fBrequire\fR options are available and behave exactly the same as they would for a normal gem\.
.
.P
A git repository \fBSHOULD\fR have at least one file, at the root of the directory containing the gem, with the extension \fB\.gemspec\fR\. This file \fBMUST\fR contain a valid gem specification, as expected by the \fBgem build\fR command\.
.
.P
If a git repository does not have a \fB\.gemspec\fR, bundler will attempt to create one, but it will not contain any dependencies, executables, or C extension compilation instructions\. As a result, it may fail to properly integrate into your application\.
.
.P
If a git repository does have a \fB\.gemspec\fR for the gem you attached it to, a version specifier, if provided, means that the git repository is only valid if the \fB\.gemspec\fR specifies a version matching the version specifier\. If not, bundler will print a warning\.
.
.IP "" 4
.
.nf

gem "rails", "2\.3\.8", git: "https://github\.com/rails/rails\.git"
# bundle install will fail, because the \.gemspec in the rails
# repository\'s master branch specifies version 3\.0\.0
.
.fi
.
.IP "" 0
.
.P
If a git repository does \fBnot\fR have a \fB\.gemspec\fR for the gem you attached it to, a version specifier \fBMUST\fR be provided\. Bundler will use this version in the simple \fB\.gemspec\fR it creates\.
.
.P
Git repositories support a number of additional options\.
.
.TP
\fBbranch\fR, \fBtag\fR, and \fBref\fR
You \fBMUST\fR only specify at most one of these options\. The default is \fBbranch: "master"\fR\. For example:
.
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", branch: "5\-0\-stable"
.
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", tag: "v5\.0\.0"
.
.IP
gem "rails", git: "https://github\.com/rails/rails\.git", ref: "4aded"
.
.TP
\fBsubmodules\fR
For reference, a git submodule \fIhttps://git\-scm\.com/book/en/v2/Git\-Tools\-Submodules\fR lets you have another git repository within a subfolder of your repository\. Specify \fBsubmodules: true\fR to cause bundler to expand any submodules included in the git repository
.
.P
If a git repository contains multiple \fB\.gemspecs\fR, each \fB\.gemspec\fR represents a gem located at the same place in the file system as the \fB\.gemspec\fR\.
.
.IP "" 4
.
.nf

|~rails                   [git root]
| |\-rails\.gemspec         [rails gem located here]
|~actionpack
| |\-actionpack\.gemspec    [actionpack gem located here]
|~activesupport
| |\-activesupport\.gemspec [activesupport gem located here]
|\.\.\.
.
.fi
.
.IP "" 0
.
.P
To install a gem located in a git repository, bundler changes to the directory containing the gemspec, runs \fBgem build name\.gemspec\fR and then installs the resulting gem\. The \fBgem build\fR command, which comes standard with Rubygems, evaluates the \fB\.gemspec\fR in the context of the directory in which it is located\.
.
.SS "GIT SOURCE"
A custom git source can be defined via the \fBgit_source\fR method\. Provide the source\'s name as an argument, and a block which receives a single argument and interpolates it into a string to return the full repo address:
.
.IP "" 4
.
.nf

git_source(:stash){ |repo_name| "https://stash\.corp\.acme\.pl/#{repo_name}\.git" }
gem \'rails\', stash: \'forks/rails\'
.
.fi
.
.IP "" 0
.
.P
In addition, if you wish to choose a specific branch:
.
.IP "" 4
.
.nf

gem "rails", stash: "forks/rails", branch: "branch_name"
.
.fi
.
.IP "" 0
.
.SS "GITHUB"
\fBNOTE\fR: This shorthand should be avoided until Bundler 2\.0, since it currently expands to an insecure \fBgit://\fR URL\. This allows a man\-in\-the\-middle attacker to compromise your system\.
.
.P
If the git repository you want to use is hosted on GitHub and is public, you can use the :github shorthand to specify the github username and repository name (without the trailing "\.git"), separated by a slash\. If both the username and repository name are the same, you can omit one\.
.
.IP "" 4
.
.nf

gem "rails", github: "rails/rails"
gem "rails", github: "rails"
.
.fi
.
.IP "" 0
.
.P
Are both equivalent to
.
.IP "" 4
.
.nf

gem "rails", git: "https://github\.com/rails/rails\.git"
.
.fi
.
.IP "" 0
.
.P
Since the \fBgithub\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.
.P
You can also directly pass a pull request URL:
.
.IP "" 4
.
.nf

gem "rails", github: "https://github\.com/rails/rails/pull/43753"
.
.fi
.
.IP "" 0
.
.P
Which is equivalent to:
.
.IP "" 4
.
.nf

gem "rails", github: "rails/rails", branch: "refs/pull/43753/head"
.
.fi
.
.IP "" 0
.
.SS "GIST"
If the git repository you want to use is hosted as a GitHub Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing "\.git")\.
.
.IP "" 4
.
.nf

gem "the_hatch", gist: "4815162342"
.
.fi
.
.IP "" 0
.
.P
Is equivalent to:
.
.IP "" 4
.
.nf

gem "the_hatch", git: "https://gist\.github\.com/4815162342\.git"
.
.fi
.
.IP "" 0
.
.P
Since the \fBgist\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.
.SS "BITBUCKET"
If the git repository you want to use is hosted on Bitbucket and is public, you can use the :bitbucket shorthand to specify the bitbucket username and repository name (without the trailing "\.git"), separated by a slash\. If both the username and repository name are the same, you can omit one\.
.
.IP "" 4
.
.nf

gem "rails", bitbucket: "rails/rails"
gem "rails", bitbucket: "rails"
.
.fi
.
.IP "" 0
.
.P
Are both equivalent to
.
.IP "" 4
.
.nf

gem "rails", git: "https://rails@bitbucket\.org/rails/rails\.git"
.
.fi
.
.IP "" 0
.
.P
Since the \fBbitbucket\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\.
.
.SS "PATH"
You can specify that a gem is located in a particular location on the file system\. Relative paths are resolved relative to the directory containing the \fBGemfile\fR\.
.
.P
Similar to the semantics of the \fB:git\fR option, the \fB:path\fR option requires that the directory in question either contains a \fB\.gemspec\fR for the gem, or that you specify an explicit version that bundler should use\.
.
.P
Unlike \fB:git\fR, bundler does not compile C extensions for gems specified as paths\.
.
.IP "" 4
.
.nf

gem "rails", path: "vendor/rails"
.
.fi
.
.IP "" 0
.
.P
If you would like to use multiple local gems directly from the filesystem, you can set a global \fBpath\fR option to the path containing the gem\'s files\. This will automatically load gemspec files from subdirectories\.
.
.IP "" 4
.
.nf

path \'components\' do
  gem \'admin_ui\'
  gem \'public_ui\'
end
.
.fi
.
.IP "" 0
.
.SH "BLOCK FORM OF SOURCE, GIT, PATH, GROUP and PLATFORMS"
The \fB:source\fR, \fB:git\fR, \fB:path\fR, \fB:group\fR, and \fB:platforms\fR options may be applied to a group of gems by using block form\.
.
.IP "" 4
.
.nf

source "https://gems\.example\.com" do
  gem "some_internal_gem"
  gem "another_internal_gem"
end

git "https://github\.com/rails/rails\.git" do
  gem "activesupport"
  gem "actionpack"
end

platforms :ruby do
  gem "ruby\-debug"
  gem "sqlite3"
end

group :development, optional: true do
  gem "wirble"
  gem "faker"
end
.
.fi
.
.IP "" 0
.
.P
In the case of the group block form the :optional option can be given to prevent a group from being installed unless listed in the \fB\-\-with\fR option given to the \fBbundle install\fR command\.
.
.P
In the case of the \fBgit\fR block form, the \fB:ref\fR, \fB:branch\fR, \fB:tag\fR, and \fB:submodules\fR options may be passed to the \fBgit\fR method, and all gems in the block will inherit those options\.
.
.P
The presence of a \fBsource\fR block in a Gemfile also makes that source available as a possible global source for any other gems which do not specify explicit sources\. Thus, when defining source blocks, it is recommended that you also ensure all other gems in the Gemfile are using explicit sources, either via source blocks or \fB:source\fR directives on individual gems\.
.
.SH "INSTALL_IF"
The \fBinstall_if\fR method allows gems to be installed based on a proc or lambda\. This is especially useful for optional gems that can only be used if certain software is installed or some other conditions are met\.
.
.IP "" 4
.
.nf

install_if \-> { RUBY_PLATFORM =~ /darwin/ } do
  gem "pasteboard"
end
.
.fi
.
.IP "" 0
.
.SH "GEMSPEC"
The \fB\.gemspec\fR \fIhttp://guides\.rubygems\.org/specification\-reference/\fR file is where you provide metadata about your gem to Rubygems\. Some required Gemspec attributes include the name, description, and homepage of your gem\. This is also where you specify the dependencies your gem needs to run\.
.
.P
If you wish to use Bundler to help install dependencies for a gem while it is being developed, use the \fBgemspec\fR method to pull in the dependencies listed in the \fB\.gemspec\fR file\.
.
.P
The \fBgemspec\fR method adds any runtime dependencies as gem requirements in the default group\. It also adds development dependencies as gem requirements in the \fBdevelopment\fR group\. Finally, it adds a gem requirement on your project (\fBpath: \'\.\'\fR)\. In conjunction with \fBBundler\.setup\fR, this allows you to require project files in your test code as you would if the project were installed as a gem; you need not manipulate the load path manually or require project files via relative paths\.
.
.P
The \fBgemspec\fR method supports optional \fB:path\fR, \fB:glob\fR, \fB:name\fR, and \fB:development_group\fR options, which control where bundler looks for the \fB\.gemspec\fR, the glob it uses to look for the gemspec (defaults to: "{,\fI,\fR/*}\.gemspec"), what named \fB\.gemspec\fR it uses (if more than one is present), and which group development dependencies are included in\.
.
.P
When a \fBgemspec\fR dependency encounters version conflicts during resolution, the local version under development will always be selected \-\- even if there are remote versions that better match other requirements for the \fBgemspec\fR gem\.
.
.SH "SOURCE PRIORITY"
When attempting to locate a gem to satisfy a gem requirement, bundler uses the following priority order:
.
.IP "1." 4
The source explicitly attached to the gem (using \fB:source\fR, \fB:path\fR, or \fB:git\fR)
.
.IP "2." 4
For implicit gems (dependencies of explicit gems), any source, git, or path repository declared on the parent\. This results in bundler prioritizing the ActiveSupport gem from the Rails git repository over ones from \fBrubygems\.org\fR
.
.IP "3." 4
If neither of the above conditions are met, the global source will be used\. If multiple global sources are specified, they will be prioritized from last to first, but this is deprecated since Bundler 1\.13, so Bundler prints a warning and will abort with an error in the future\.
.
.IP "" 0

PK%"#[A��7gems/bundler-2.3.27/lib/bundler/man/bundle-cache.1.ronnnu�[���bundle-cache(1) -- Package your needed `.gem` files into your application
===========================================================================

## SYNOPSIS

`bundle cache`

alias: `package`, `pack`

## DESCRIPTION

Copy all of the `.gem` files needed to run the application into the
`vendor/cache` directory. In the future, when running [bundle install(1)][bundle-install],
use the gems in the cache in preference to the ones on `rubygems.org`.

## GIT AND PATH GEMS

The `bundle cache` command can also package `:git` and `:path` dependencies
besides .gem files. This needs to be explicitly enabled via the `--all` option.
Once used, the `--all` option will be remembered.

## SUPPORT FOR MULTIPLE PLATFORMS

When using gems that have different packages for different platforms, Bundler
supports caching of gems for other platforms where the Gemfile has been resolved
(i.e. present in the lockfile) in `vendor/cache`.  This needs to be enabled via
the `--all-platforms` option. This setting will be remembered in your local
bundler configuration.

## REMOTE FETCHING

By default, if you run `bundle install(1)`](bundle-install.1.html) after running
[bundle cache(1)](bundle-cache.1.html), bundler will still connect to `rubygems.org`
to check whether a platform-specific gem exists for any of the gems
in `vendor/cache`.

For instance, consider this Gemfile(5):

    source "https://rubygems.org"

    gem "nokogiri"

If you run `bundle cache` under C Ruby, bundler will retrieve
the version of `nokogiri` for the `"ruby"` platform. If you deploy
to JRuby and run `bundle install`, bundler is forced to check to
see whether a `"java"` platformed `nokogiri` exists.

Even though the `nokogiri` gem for the Ruby platform is
_technically_ acceptable on JRuby, it has a C extension
that does not run on JRuby. As a result, bundler will, by default,
still connect to `rubygems.org` to check whether it has a version
of one of your gems more specific to your platform.

This problem is also not limited to the `"java"` platform.
A similar (common) problem can happen when developing on Windows
and deploying to Linux, or even when developing on OSX and
deploying to Linux.

If you know for sure that the gems packaged in `vendor/cache`
are appropriate for the platform you are on, you can run
`bundle install --local` to skip checking for more appropriate
gems, and use the ones in `vendor/cache`.

One way to be sure that you have the right platformed versions
of all your gems is to run `bundle cache` on an identical
machine and check in the gems. For instance, you can run
`bundle cache` on an identical staging box during your
staging process, and check in the `vendor/cache` before
deploying to production.

By default, [bundle cache(1)](bundle-cache.1.html) fetches and also
installs the gems to the default location. To package the
dependencies to `vendor/cache` without installing them to the
local install location, you can run `bundle cache --no-install`.

## HISTORY

In Bundler 2.1, `cache` took in the functionalities of `package` and now
`package` and `pack` are aliases of `cache`.
PK%"#[�)&LYY7gems/bundler-2.3.27/lib/bundler/man/bundle-check.1.ronnnu�[���bundle-check(1) -- Verifies if dependencies are satisfied by installed gems
===========================================================================

## SYNOPSIS

`bundle check` [--dry-run]
               [--gemfile=FILE]
               [--path=PATH]

## DESCRIPTION

`check` searches the local machine for each of the gems requested in the
Gemfile. If all gems are found, Bundler prints a success message and exits with
a status of 0.

If not, the first missing gem is listed and Bundler exits status 1.

## OPTIONS

* `--dry-run`:
  Locks the [`Gemfile(5)`][Gemfile(5)] before running the command.
* `--gemfile`:
  Use the specified gemfile instead of the [`Gemfile(5)`][Gemfile(5)].
* `--path`:
  Specify a different path than the system default (`$BUNDLE_PATH` or `$GEM_HOME`).
  Bundler will remember this value for future installs on this machine.
PK%"#["�7��5gems/bundler-2.3.27/lib/bundler/man/bundle-platform.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-PLATFORM" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-platform\fR \- Displays platform compatibility information
.
.SH "SYNOPSIS"
\fBbundle platform\fR [\-\-ruby]
.
.SH "DESCRIPTION"
\fBplatform\fR displays information from your Gemfile, Gemfile\.lock, and Ruby VM about your platform\.
.
.P
For instance, using this Gemfile(5):
.
.IP "" 4
.
.nf

source "https://rubygems\.org"

ruby "3\.1\.2"

gem "rack"
.
.fi
.
.IP "" 0
.
.P
If you run \fBbundle platform\fR on Ruby 3\.1\.2, it displays the following output:
.
.IP "" 4
.
.nf

Your platform is: x86_64\-linux

Your app has gems that work on these platforms:
* arm64\-darwin\-21
* ruby
* x64\-mingw\-ucrt
* x86_64\-linux

Your Gemfile specifies a Ruby version requirement:
* ruby 3\.1\.2

Your current platform satisfies the Ruby version requirement\.
.
.fi
.
.IP "" 0
.
.P
\fBplatform\fR lists all the platforms in your \fBGemfile\.lock\fR as well as the \fBruby\fR directive if applicable from your Gemfile(5)\. It also lets you know if the \fBruby\fR directive requirement has been met\. If \fBruby\fR directive doesn\'t match the running Ruby VM, it tells you what part does not\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-ruby\fR
It will display the ruby directive information, so you don\'t have to parse it from the Gemfile(5)\.
.
.SH "SEE ALSO"
.
.IP "\(bu" 4
bundle\-lock(1) \fIbundle\-lock\.1\.ronn\fR
.
.IP "" 0

PK%"#[+3`-DD1gems/bundler-2.3.27/lib/bundler/man/bundle-open.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-OPEN" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
.
.SH "SYNOPSIS"
\fBbundle open\fR [GEM]
.
.SH "DESCRIPTION"
Opens the source directory of the provided GEM in your editor\.
.
.P
For this to work the \fBEDITOR\fR or \fBBUNDLER_EDITOR\fR environment variable has to be set\.
.
.P
Example:
.
.IP "" 4
.
.nf

bundle open \'rack\'
.
.fi
.
.IP "" 0
.
.P
Will open the source directory for the \'rack\' gem in your bundle\.
PK%"#[3����9gems/bundler-2.3.27/lib/bundler/man/bundle-console.1.ronnnu�[���bundle-console(1) -- Deprecated way to open an IRB session with the bundle pre-loaded
=====================================================================================

## SYNOPSIS

`bundle console` [GROUP]

## DESCRIPTION

Starts an interactive Ruby console session in the context of the current bundle.

If no `GROUP` is specified, all gems in the `default` group in the [Gemfile(5)](https://bundler.io/man/gemfile.5.html) are
preliminarily loaded.

If `GROUP` is specified, all gems in the given group in the Gemfile in addition
to the gems in `default` group are loaded. Even if the given group does not
exist in the Gemfile, IRB console starts without any warning or error.

The environment variable `BUNDLE_CONSOLE` or `bundle config set console` can be used to change
the shell from the following:

* `irb` (default)
* `pry` (https://github.com/pry/pry)
* `ripl` (https://github.com/cldwalker/ripl)

`bundle console` uses irb by default. An alternative Pry or Ripl can be used with
`bundle console` by adjusting the `console` Bundler setting. Also make sure that
`pry` or `ripl` is in your Gemfile.

## EXAMPLE

    $ bundle config set console pry
    $ bundle console
    Resolving dependencies...
    [1] pry(main)>

## NOTES

This command was deprecated in Bundler 2.1 and will be removed in 3.0.
Use `bin/console` script, which can be generated by `bundle gem <NAME>`.

## SEE ALSO

[Gemfile(5)](https://bundler.io/man/gemfile.5.html)
PK%"#[���MM3gems/bundler-2.3.27/lib/bundler/man/bundle-inject.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-INJECT" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
.
.SH "SYNOPSIS"
\fBbundle inject\fR [GEM] [VERSION]
.
.SH "DESCRIPTION"
Adds the named gem(s) with their version requirements to the resolved [\fBGemfile(5)\fR][Gemfile(5)]\.
.
.P
This command will add the gem to both your [\fBGemfile(5)\fR][Gemfile(5)] and Gemfile\.lock if it isn\'t listed yet\.
.
.P
Example:
.
.IP "" 4
.
.nf

bundle install
bundle inject \'rack\' \'> 0\'
.
.fi
.
.IP "" 0
.
.P
This will inject the \'rack\' gem with a version greater than 0 in your [\fBGemfile(5)\fR][Gemfile(5)] and Gemfile\.lock\.
.
.P
The \fBbundle inject\fR command was deprecated in Bundler 2\.1 and will be removed in Bundler 3\.0\.
PK%"#[R�,a\C\C9gems/bundler-2.3.27/lib/bundler/man/bundle-install.1.ronnnu�[���bundle-install(1) -- Install the dependencies specified in your Gemfile
=======================================================================

## SYNOPSIS

`bundle install` [--binstubs[=DIRECTORY]]
                 [--clean]
                 [--deployment]
                 [--frozen]
                 [--full-index]
                 [--gemfile=GEMFILE]
                 [--jobs=NUMBER]
                 [--local]
                 [--no-cache]
                 [--no-prune]
                 [--path PATH]
                 [--quiet]
                 [--redownload]
                 [--retry=NUMBER]
                 [--shebang]
                 [--standalone[=GROUP[ GROUP...]]]
                 [--system]
                 [--trust-policy=POLICY]
                 [--with=GROUP[ GROUP...]]
                 [--without=GROUP[ GROUP...]]

## DESCRIPTION

Install the gems specified in your Gemfile(5). If this is the first
time you run bundle install (and a `Gemfile.lock` does not exist),
Bundler will fetch all remote sources, resolve dependencies and
install all needed gems.

If a `Gemfile.lock` does exist, and you have not updated your Gemfile(5),
Bundler will fetch all remote sources, but use the dependencies
specified in the `Gemfile.lock` instead of resolving dependencies.

If a `Gemfile.lock` does exist, and you have updated your Gemfile(5),
Bundler will use the dependencies in the `Gemfile.lock` for all gems
that you did not update, but will re-resolve the dependencies of
gems that you did update. You can find more information about this
update process below under [CONSERVATIVE UPDATING][].

## OPTIONS

The `--clean`, `--deployment`, `--frozen`, `--no-prune`, `--path`, `--shebang`,
`--system`, `--without` and `--with` options are deprecated because they only
make sense if they are applied to every subsequent `bundle install` run
automatically and that requires `bundler` to silently remember them. Since
`bundler` will no longer remember CLI flags in future versions, `bundle config`
(see bundle-config(1)) should be used to apply them permanently.

* `--binstubs[=<directory>]`:
  Binstubs are scripts that wrap around executables. Bundler creates a small Ruby
  file (a binstub) that loads Bundler, runs the command, and puts it in `bin/`.
  This lets you link the binstub inside of an application to the exact gem
  version the application needs.

  Creates a directory (defaults to `~/bin`) and places any executables from the
  gem there. These executables run in Bundler's context. If used, you might add
  this directory to your environment's `PATH` variable. For instance, if the
  `rails` gem comes with a `rails` executable, this flag will create a
  `bin/rails` executable that ensures that all referred dependencies will be
  resolved using the bundled gems.

* `--clean`:
  On finishing the installation Bundler is going to remove any gems not present
  in the current Gemfile(5). Don't worry, gems currently in use will not be
  removed.

  This option is deprecated in favor of the `clean` setting.

* `--deployment`:
  In [deployment mode][DEPLOYMENT MODE], Bundler will 'roll-out' the bundle for
  production or CI use. Please check carefully if you want to have this option
  enabled in your development environment.

  This option is deprecated in favor of the `deployment` setting.

* `--redownload`:
  Force download every gem, even if the required versions are already available
  locally.

* `--frozen`:
  Do not allow the Gemfile.lock to be updated after this install. Exits
  non-zero if there are going to be changes to the Gemfile.lock.

  This option is deprecated in favor of the `frozen` setting.

* `--full-index`:
  Bundler will not call Rubygems' API endpoint (default) but download and cache
  a (currently big) index file of all gems. Performance can be improved for
  large bundles that seldom change by enabling this option.

* `--gemfile=<gemfile>`:
  The location of the Gemfile(5) which Bundler should use. This defaults
  to a Gemfile(5) in the current working directory. In general, Bundler
  will assume that the location of the Gemfile(5) is also the project's
  root and will try to find `Gemfile.lock` and `vendor/cache` relative
  to this location.

* `--jobs=[<number>]`, `-j[<number>]`:
  The maximum number of parallel download and install jobs. The default is the
  number of available processors.

* `--local`:
  Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
  gems already present in Rubygems' cache or in `vendor/cache`. Note that if an
  appropriate platform-specific gem exists on `rubygems.org` it will not be
  found.

* `--prefer-local`:
  Force using locally installed gems, or gems already present in Rubygems' cache
  or in `vendor/cache`, when resolving, even if newer versions are available
  remotely. Only attempt to connect to `rubygems.org` for gems that are not
  present locally.

* `--no-cache`:
  Do not update the cache in `vendor/cache` with the newly bundled gems. This
  does not remove any gems in the cache but keeps the newly bundled gems from
  being cached during the install.

* `--no-prune`:
  Don't remove stale gems from the cache when the installation finishes.

  This option is deprecated in favor of the `no_prune` setting.

* `--path=<path>`:
  The location to install the specified gems to. This defaults to Rubygems'
  setting. Bundler shares this location with Rubygems, `gem install ...` will
  have gem installed there, too. Therefore, gems installed without a
  `--path ...` setting will show up by calling `gem list`. Accordingly, gems
  installed to other locations will not get listed.

  This option is deprecated in favor of the `path` setting.

* `--quiet`:
  Do not print progress information to the standard output. Instead, Bundler
  will exit using a status code (`$?`).

* `--retry=[<number>]`:
  Retry failed network or git requests for <number> times.

* `--shebang=<ruby-executable>`:
  Uses the specified ruby executable (usually `ruby`) to execute the scripts
  created with `--binstubs`. In addition, if you use `--binstubs` together with
  `--shebang jruby` these executables will be changed to execute `jruby`
  instead.

  This option is deprecated in favor of the `shebang` setting.

* `--standalone[=<list>]`:
  Makes a bundle that can work without depending on Rubygems or Bundler at
  runtime. A space separated list of groups to install has to be specified.
  Bundler creates a directory named `bundle` and installs the bundle there. It
  also generates a `bundle/bundler/setup.rb` file to replace Bundler's own setup
  in the manner required. Using this option implicitly sets `path`, which is a
  [remembered option][REMEMBERED OPTIONS].

* `--system`:
  Installs the gems specified in the bundle to the system's Rubygems location.
  This overrides any previous configuration of `--path`.

  This option is deprecated in favor of the `system` setting.

* `--trust-policy=[<policy>]`:
  Apply the Rubygems security policy <policy>, where policy is one of
  `HighSecurity`, `MediumSecurity`, `LowSecurity`, `AlmostNoSecurity`, or
  `NoSecurity`. For more details, please see the Rubygems signing documentation
  linked below in [SEE ALSO][].

* `--with=<list>`:
  A space-separated list of groups referencing gems to install. If an
  optional group is given it is installed. If a group is given that is
  in the remembered list of groups given to --without, it is removed
  from that list.

  This option is deprecated in favor of the `with` setting.

* `--without=<list>`:
  A space-separated list of groups referencing gems to skip during installation.
  If a group is given that is in the remembered list of groups given
  to --with, it is removed from that list.

  This option is deprecated in favor of the `without` setting.

## DEPLOYMENT MODE

Bundler's defaults are optimized for development. To switch to
defaults optimized for deployment and for CI, use the `--deployment`
flag. Do not activate deployment mode on development machines, as it
will cause an error when the Gemfile(5) is modified.

1. A `Gemfile.lock` is required.

   To ensure that the same versions of the gems you developed with
   and tested with are also used in deployments, a `Gemfile.lock`
   is required.

   This is mainly to ensure that you remember to check your
   `Gemfile.lock` into version control.

2. The `Gemfile.lock` must be up to date

   In development, you can modify your Gemfile(5) and re-run
   `bundle install` to [conservatively update][CONSERVATIVE UPDATING]
   your `Gemfile.lock` snapshot.

   In deployment, your `Gemfile.lock` should be up-to-date with
   changes made in your Gemfile(5).

3. Gems are installed to `vendor/bundle` not your default system location

   In development, it's convenient to share the gems used in your
   application with other applications and other scripts that run on
   the system.

   In deployment, isolation is a more important default. In addition,
   the user deploying the application may not have permission to install
   gems to the system, or the web server may not have permission to
   read them.

   As a result, `bundle install --deployment` installs gems to
   the `vendor/bundle` directory in the application. This may be
   overridden using the `--path` option.

## SUDO USAGE

By default, Bundler installs gems to the same location as `gem install`.

In some cases, that location may not be writable by your Unix user. In
that case, Bundler will stage everything in a temporary directory,
then ask you for your `sudo` password in order to copy the gems into
their system location.

From your perspective, this is identical to installing the gems
directly into the system.

You should never use `sudo bundle install`. This is because several
other steps in `bundle install` must be performed as the current user:

* Updating your `Gemfile.lock`
* Updating your `vendor/cache`, if necessary
* Checking out private git repositories using your user's SSH keys

Of these three, the first two could theoretically be performed by
`chown`ing the resulting files to `$SUDO_USER`. The third, however,
can only be performed by invoking the `git` command as
the current user. Therefore, git gems are downloaded and installed
into `~/.bundle` rather than $GEM_HOME or $BUNDLE_PATH.

As a result, you should run `bundle install` as the current user,
and Bundler will ask for your password if it is needed to put the
gems into their final location.

## INSTALLING GROUPS

By default, `bundle install` will install all gems in all groups
in your Gemfile(5), except those declared for a different platform.

However, you can explicitly tell Bundler to skip installing
certain groups with the `--without` option. This option takes
a space-separated list of groups.

While the `--without` option will skip _installing_ the gems in the
specified groups, it will still _download_ those gems and use them to
resolve the dependencies of every gem in your Gemfile(5).

This is so that installing a different set of groups on another
 machine (such as a production server) will not change the
gems and versions that you have already developed and tested against.

`Bundler offers a rock-solid guarantee that the third-party
code you are running in development and testing is also the
third-party code you are running in production. You can choose
to exclude some of that code in different environments, but you
will never be caught flat-footed by different versions of
third-party code being used in different environments.`

For a simple illustration, consider the following Gemfile(5):

    source 'https://rubygems.org'

    gem 'sinatra'

    group :production do
      gem 'rack-perftools-profiler'
    end

In this case, `sinatra` depends on any version of Rack (`>= 1.0`), while
`rack-perftools-profiler` depends on 1.x (`~> 1.0`).

When you run `bundle install --without production` in development, we
look at the dependencies of `rack-perftools-profiler` as well. That way,
you do not spend all your time developing against Rack 2.0, using new
APIs unavailable in Rack 1.x, only to have Bundler switch to Rack 1.2
when the `production` group _is_ used.

This should not cause any problems in practice, because we do not
attempt to `install` the gems in the excluded groups, and only evaluate
as part of the dependency resolution process.

This also means that you cannot include different versions of the same
gem in different groups, because doing so would result in different
sets of dependencies used in development and production. Because of
the vagaries of the dependency resolution process, this usually
affects more than the gems you list in your Gemfile(5), and can
(surprisingly) radically change the gems you are using.

## THE GEMFILE.LOCK

When you run `bundle install`, Bundler will persist the full names
and versions of all gems that you used (including dependencies of
the gems specified in the Gemfile(5)) into a file called `Gemfile.lock`.

Bundler uses this file in all subsequent calls to `bundle install`,
which guarantees that you always use the same exact code, even
as your application moves across machines.

Because of the way dependency resolution works, even a
seemingly small change (for instance, an update to a point-release
of a dependency of a gem in your Gemfile(5)) can result in radically
different gems being needed to satisfy all dependencies.

As a result, you `SHOULD` check your `Gemfile.lock` into version
control, in both applications and gems. If you do not, every machine that
checks out your repository (including your production server) will resolve all
dependencies again, which will result in different versions of
third-party code being used if `any` of the gems in the Gemfile(5)
or any of their dependencies have been updated.

When Bundler first shipped, the `Gemfile.lock` was included in the `.gitignore`
file included with generated gems.  Over time, however, it became clear that
this practice forces the pain of broken dependencies onto new contributors,
while leaving existing contributors potentially unaware of the problem. Since
`bundle install` is usually the first step towards a contribution, the pain of
broken dependencies would discourage new contributors from contributing. As a
result, we have revised our guidance for gem authors to now recommend checking
in the lock for gems.

## CONSERVATIVE UPDATING

When you make a change to the Gemfile(5) and then run `bundle install`,
Bundler will update only the gems that you modified.

In other words, if a gem that you `did not modify` worked before
you called `bundle install`, it will continue to use the exact
same versions of all dependencies as it used before the update.

Let's take a look at an example. Here's your original Gemfile(5):

    source 'https://rubygems.org'

    gem 'actionpack', '2.3.8'
    gem 'activemerchant'

In this case, both `actionpack` and `activemerchant` depend on
`activesupport`. The `actionpack` gem depends on `activesupport 2.3.8`
and `rack ~> 1.1.0`, while the `activemerchant` gem depends on
`activesupport >= 2.3.2`, `braintree >= 2.0.0`, and `builder >= 2.0.0`.

When the dependencies are first resolved, Bundler will select
`activesupport 2.3.8`, which satisfies the requirements of both
gems in your Gemfile(5).

Next, you modify your Gemfile(5) to:

    source 'https://rubygems.org'

    gem 'actionpack', '3.0.0.rc'
    gem 'activemerchant'

The `actionpack 3.0.0.rc` gem has a number of new dependencies,
and updates the `activesupport` dependency to `= 3.0.0.rc` and
the `rack` dependency to `~> 1.2.1`.

When you run `bundle install`, Bundler notices that you changed
the `actionpack` gem, but not the `activemerchant` gem. It
evaluates the gems currently being used to satisfy its requirements:

  * `activesupport 2.3.8`:
    also used to satisfy a dependency in `activemerchant`,
    which is not being updated
  * `rack ~> 1.1.0`:
    not currently being used to satisfy another dependency

Because you did not explicitly ask to update `activemerchant`,
you would not expect it to suddenly stop working after updating
`actionpack`. However, satisfying the new `activesupport 3.0.0.rc`
dependency of actionpack requires updating one of its dependencies.

Even though `activemerchant` declares a very loose dependency
that theoretically matches `activesupport 3.0.0.rc`, Bundler treats
gems in your Gemfile(5) that have not changed as an atomic unit
together with their dependencies. In this case, the `activemerchant`
dependency is treated as `activemerchant 1.7.1 + activesupport 2.3.8`,
so `bundle install` will report that it cannot update `actionpack`.

To explicitly update `actionpack`, including its dependencies
which other gems in the Gemfile(5) still depend on, run
`bundle update actionpack` (see `bundle update(1)`).

`Summary`: In general, after making a change to the Gemfile(5) , you
should first try to run `bundle install`, which will guarantee that no
other gem in the Gemfile(5) is impacted by the change. If that
does not work, run [bundle update(1)](bundle-update.1.html).

## SEE ALSO

* [Gem install docs](http://guides.rubygems.org/rubygems-basics/#installing-gems)
* [Rubygems signing docs](http://guides.rubygems.org/security/)
PK%"#[|�Koo8gems/bundler-2.3.27/lib/bundler/man/bundle-plugin.1.ronnnu�[���bundle-plugin(1) -- Manage Bundler plugins
==========================================

## SYNOPSIS

`bundle plugin` install PLUGINS [--source=<SOURCE>] [--version=<version>]
                              [--git|--local_git=<git-url>] [--branch=<branch>|--ref=<rev>]<br>
`bundle plugin` uninstall PLUGINS<br>
`bundle plugin` list<br>
`bundle plugin` help [COMMAND]

## DESCRIPTION

You can install, uninstall, and list plugin(s) with this command to extend functionalities of Bundler.

## SUB-COMMANDS

### install

Install the given plugin(s).

* `bundle plugin install bundler-graph`:
  Install bundler-graph gem from RubyGems.org. The global source, specified in source in Gemfile is ignored.

* `bundle plugin install bundler-graph --source https://example.com`:
  Install bundler-graph gem from example.com. The global source, specified in source in Gemfile is not considered.

* `bundle plugin install bundler-graph --version 0.2.1`:
  You can specify the version of the gem via `--version`.

* `bundle plugin install bundler-graph --git https://github.com/rubygems/bundler-graph`:
  Install bundler-graph gem from Git repository. `--git` can be replaced with `--local-git`. You cannot use both `--git` and `--local-git`. You can use standard Git URLs like:

  * `ssh://[user@]host.xz[:port]/path/to/repo.git`
  * `http[s]://host.xz[:port]/path/to/repo.git`
  * `/path/to/repo`
  * `file:///path/to/repo`

  When you specify `--git`/`--local-git`, you can use `--branch` or `--ref` to specify any branch, tag, or commit hash (revision) to use. When you specify both, only the latter is used.

### uninstall

Uninstall the plugin(s) specified in PLUGINS.

### list

List the installed plugins and available commands.

No options.

### help

Describe subcommands or one specific subcommand.

No options.

## SEE ALSO

* [How to write a Bundler plugin](https://bundler.io/guides/bundler_plugins.html)
PK%"#[��		3gems/bundler-2.3.27/lib/bundler/man/bundle-plugin.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-PLUGIN" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-plugin\fR \- Manage Bundler plugins
.
.SH "SYNOPSIS"
\fBbundle plugin\fR install PLUGINS [\-\-source=\fISOURCE\fR] [\-\-version=\fIversion\fR] [\-\-git|\-\-local_git=\fIgit\-url\fR] [\-\-branch=\fIbranch\fR|\-\-ref=\fIrev\fR]
.
.br
\fBbundle plugin\fR uninstall PLUGINS
.
.br
\fBbundle plugin\fR list
.
.br
\fBbundle plugin\fR help [COMMAND]
.
.SH "DESCRIPTION"
You can install, uninstall, and list plugin(s) with this command to extend functionalities of Bundler\.
.
.SH "SUB\-COMMANDS"
.
.SS "install"
Install the given plugin(s)\.
.
.IP "\(bu" 4
\fBbundle plugin install bundler\-graph\fR: Install bundler\-graph gem from RubyGems\.org\. The global source, specified in source in Gemfile is ignored\.
.
.IP "\(bu" 4
\fBbundle plugin install bundler\-graph \-\-source https://example\.com\fR: Install bundler\-graph gem from example\.com\. The global source, specified in source in Gemfile is not considered\.
.
.IP "\(bu" 4
\fBbundle plugin install bundler\-graph \-\-version 0\.2\.1\fR: You can specify the version of the gem via \fB\-\-version\fR\.
.
.IP "\(bu" 4
\fBbundle plugin install bundler\-graph \-\-git https://github\.com/rubygems/bundler\-graph\fR: Install bundler\-graph gem from Git repository\. \fB\-\-git\fR can be replaced with \fB\-\-local\-git\fR\. You cannot use both \fB\-\-git\fR and \fB\-\-local\-git\fR\. You can use standard Git URLs like:
.
.IP "\(bu" 4
\fBssh://[user@]host\.xz[:port]/path/to/repo\.git\fR
.
.IP "\(bu" 4
\fBhttp[s]://host\.xz[:port]/path/to/repo\.git\fR
.
.IP "\(bu" 4
\fB/path/to/repo\fR
.
.IP "\(bu" 4
\fBfile:///path/to/repo\fR
.
.IP "" 0
.
.IP
When you specify \fB\-\-git\fR/\fB\-\-local\-git\fR, you can use \fB\-\-branch\fR or \fB\-\-ref\fR to specify any branch, tag, or commit hash (revision) to use\. When you specify both, only the latter is used\.
.
.IP "" 0
.
.SS "uninstall"
Uninstall the plugin(s) specified in PLUGINS\.
.
.SS "list"
List the installed plugins and available commands\.
.
.P
No options\.
.
.SS "help"
Describe subcommands or one specific subcommand\.
.
.P
No options\.
.
.SH "SEE ALSO"
.
.IP "\(bu" 4
How to write a Bundler plugin \fIhttps://bundler\.io/guides/bundler_plugins\.html\fR
.
.IP "" 0

PK%"#[�
���5gems/bundler-2.3.27/lib/bundler/man/bundle-pristine.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-PRISTINE" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
.
.SH "SYNOPSIS"
\fBbundle pristine\fR
.
.SH "DESCRIPTION"
\fBpristine\fR restores the installed gems in the bundle to their pristine condition using the local gem cache from RubyGems\. For git gems, a forced checkout will be performed\.
.
.P
For further explanation, \fBbundle pristine\fR ignores unpacked files on disk\. In other words, this command utilizes the local \fB\.gem\fR cache or the gem\'s git repository as if one were installing from scratch\.
.
.P
Note: the Bundler gem cannot be restored to its original state with \fBpristine\fR\. One also cannot use \fBbundle pristine\fR on gems with a \'path\' option in the Gemfile, because bundler has no original copy it can restore from\.
.
.P
When is it practical to use \fBbundle pristine\fR?
.
.P
It comes in handy when a developer is debugging a gem\. \fBbundle pristine\fR is a great way to get rid of experimental changes to a gem that one may not want\.
.
.P
Why use \fBbundle pristine\fR over \fBgem pristine \-\-all\fR?
.
.P
Both commands are very similar\. For context: \fBbundle pristine\fR, without arguments, cleans all gems from the lockfile\. Meanwhile, \fBgem pristine \-\-all\fR cleans all installed gems for that Ruby version\.
.
.P
If a developer forgets which gems in their project they might have been debugging, the Rubygems \fBgem pristine [GEMNAME]\fR command may be inconvenient\. One can avoid waiting for \fBgem pristine \-\-all\fR, and instead run \fBbundle pristine\fR\.
PK%"#[f�Qvv1gems/bundler-2.3.27/lib/bundler/man/bundle-lock.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-LOCK" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
.
.SH "SYNOPSIS"
\fBbundle lock\fR [\-\-update] [\-\-local] [\-\-print] [\-\-lockfile=PATH] [\-\-full\-index] [\-\-add\-platform] [\-\-remove\-platform] [\-\-patch] [\-\-minor] [\-\-major] [\-\-strict] [\-\-conservative]
.
.SH "DESCRIPTION"
Lock the gems specified in Gemfile\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-update=<*gems>\fR
Ignores the existing lockfile\. Resolve then updates lockfile\. Taking a list of gems or updating all gems if no list is given\.
.
.TP
\fB\-\-local\fR
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems\' cache or in \fBvendor/cache\fR\. Note that if a appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
.
.TP
\fB\-\-print\fR
Prints the lockfile to STDOUT instead of writing to the file system\.
.
.TP
\fB\-\-lockfile=<path>\fR
The path where the lockfile should be written to\.
.
.TP
\fB\-\-full\-index\fR
Fall back to using the single\-file index of all gems\.
.
.TP
\fB\-\-add\-platform\fR
Add a new platform to the lockfile, re\-resolving for the addition of that platform\.
.
.TP
\fB\-\-remove\-platform\fR
Remove a platform from the lockfile\.
.
.TP
\fB\-\-patch\fR
If updating, prefer updating only to next patch version\.
.
.TP
\fB\-\-minor\fR
If updating, prefer updating only to next minor version\.
.
.TP
\fB\-\-major\fR
If updating, prefer updating to next major version (default)\.
.
.TP
\fB\-\-strict\fR
If updating, do not allow any gem to be updated past latest \-\-patch | \-\-minor | \-\-major\.
.
.TP
\fB\-\-conservative\fR
If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated\.
.
.SH "UPDATING ALL GEMS"
If you run \fBbundle lock\fR with \fB\-\-update\fR option without list of gems, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
.
.SH "UPDATING A LIST OF GEMS"
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.
.P
For instance, you only want to update \fBnokogiri\fR, run \fBbundle lock \-\-update nokogiri\fR\.
.
.P
Bundler will update \fBnokogiri\fR and any of its dependencies, but leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.
.SH "SUPPORTING OTHER PLATFORMS"
If you want your bundle to support platforms other than the one you\'re running locally, you can run \fBbundle lock \-\-add\-platform PLATFORM\fR to add PLATFORM to the lockfile, force bundler to re\-resolve and consider the new platform when picking gems, all without needing to have a machine that matches PLATFORM handy to install those platform\-specific gems on\.
.
.P
For a full explanation of gem platforms, see \fBgem help platform\fR\.
.
.SH "PATCH LEVEL OPTIONS"
See bundle update(1) \fIbundle\-update\.1\.html\fR for details\.
PK%"#[#]E228gems/bundler-2.3.27/lib/bundler/man/bundle-update.1.ronnnu�[���bundle-update(1) -- Update your gems to the latest available versions
=====================================================================

## SYNOPSIS

`bundle update` <*gems> [--all]
                        [--group=NAME]
                        [--source=NAME]
                        [--local]
                        [--ruby]
                        [--bundler[=VERSION]]
                        [--full-index]
                        [--jobs=JOBS]
                        [--quiet]
                        [--patch|--minor|--major]
                        [--redownload]
                        [--strict]
                        [--conservative]

## DESCRIPTION

Update the gems specified (all gems, if `--all` flag is used), ignoring
the previously installed gems specified in the `Gemfile.lock`. In
general, you should use [bundle install(1)](bundle-install.1.html) to install the same exact
gems and versions across machines.

You would use `bundle update` to explicitly update the version of a
gem.

## OPTIONS

* `--all`:
  Update all gems specified in Gemfile.

* `--group=<name>`, `-g=[<name>]`:
  Only update the gems in the specified group. For instance, you can update all gems
  in the development group with `bundle update --group development`. You can also
  call `bundle update rails --group test` to update the rails gem and all gems in
  the test group, for example.

* `--source=<name>`:
  The name of a `:git` or `:path` source used in the Gemfile(5). For
  instance, with a `:git` source of `http://github.com/rails/rails.git`,
  you would call `bundle update --source rails`

* `--local`:
  Do not attempt to fetch gems remotely and use the gem cache instead.

* `--ruby`:
  Update the locked version of Ruby to the current version of Ruby.

* `--bundler`:
  Update the locked version of bundler to the invoked bundler version.

* `--full-index`:
  Fall back to using the single-file index of all gems.

* `--jobs=[<number>]`, `-j[<number>]`:
  Specify the number of jobs to run in parallel. The default is the number of
  available processors.

* `--retry=[<number>]`:
  Retry failed network or git requests for <number> times.

* `--quiet`:
  Only output warnings and errors.

* `--redownload`:
  Force downloading every gem.

* `--patch`:
  Prefer updating only to next patch version.

* `--minor`:
  Prefer updating only to next minor version.

* `--major`:
  Prefer updating to next major version (default).

* `--strict`:
  Do not allow any gem to be updated past latest `--patch` | `--minor` | `--major`.

* `--conservative`:
  Use bundle install conservative update behavior and do not allow indirect dependencies to be updated.

## UPDATING ALL GEMS

If you run `bundle update --all`, bundler will ignore
any previously installed gems and resolve all dependencies again
based on the latest versions of all gems available in the sources.

Consider the following Gemfile(5):

    source "https://rubygems.org"

    gem "rails", "3.0.0.rc"
    gem "nokogiri"

When you run [bundle install(1)](bundle-install.1.html) the first time, bundler will resolve
all of the dependencies, all the way down, and install what you need:

    Fetching gem metadata from https://rubygems.org/.........
    Resolving dependencies...
    Installing builder 2.1.2
    Installing abstract 1.0.0
    Installing rack 1.2.8
    Using bundler 1.7.6
    Installing rake 10.4.0
    Installing polyglot 0.3.5
    Installing mime-types 1.25.1
    Installing i18n 0.4.2
    Installing mini_portile 0.6.1
    Installing tzinfo 0.3.42
    Installing rack-mount 0.6.14
    Installing rack-test 0.5.7
    Installing treetop 1.4.15
    Installing thor 0.14.6
    Installing activesupport 3.0.0.rc
    Installing erubis 2.6.6
    Installing activemodel 3.0.0.rc
    Installing arel 0.4.0
    Installing mail 2.2.20
    Installing activeresource 3.0.0.rc
    Installing actionpack 3.0.0.rc
    Installing activerecord 3.0.0.rc
    Installing actionmailer 3.0.0.rc
    Installing railties 3.0.0.rc
    Installing rails 3.0.0.rc
    Installing nokogiri 1.6.5

    Bundle complete! 2 Gemfile dependencies, 26 gems total.
    Use `bundle show [gemname]` to see where a bundled gem is installed.

As you can see, even though you have two gems in the Gemfile(5), your application
needs 26 different gems in order to run. Bundler remembers the exact versions
it installed in `Gemfile.lock`. The next time you run [bundle install(1)](bundle-install.1.html), bundler skips
the dependency resolution and installs the same gems as it installed last time.

After checking in the `Gemfile.lock` into version control and cloning it on another
machine, running [bundle install(1)](bundle-install.1.html) will _still_ install the gems that you installed
last time. You don't need to worry that a new release of `erubis` or `mail` changes
the gems you use.

However, from time to time, you might want to update the gems you are using to the
newest versions that still match the gems in your Gemfile(5).

To do this, run `bundle update --all`, which will ignore the `Gemfile.lock`, and resolve
all the dependencies again. Keep in mind that this process can result in a significantly
different set of the 25 gems, based on the requirements of new gems that the gem
authors released since the last time you ran `bundle update --all`.

## UPDATING A LIST OF GEMS

Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the
gems that you specified locked to the versions in the `Gemfile.lock`.

For instance, in the scenario above, imagine that `nokogiri` releases version `1.4.4`, and
you want to update it _without_ updating Rails and all of its dependencies. To do this,
run `bundle update nokogiri`.

Bundler will update `nokogiri` and any of its dependencies, but leave alone Rails and
its dependencies.

## OVERLAPPING DEPENDENCIES

Sometimes, multiple gems declared in your Gemfile(5) are satisfied by the same
second-level dependency. For instance, consider the case of `thin` and
`rack-perftools-profiler`.

    source "https://rubygems.org"

    gem "thin"
    gem "rack-perftools-profiler"

The `thin` gem depends on `rack >= 1.0`, while `rack-perftools-profiler` depends
on `rack ~> 1.0`. If you run bundle install, you get:

    Fetching source index for https://rubygems.org/
    Installing daemons (1.1.0)
    Installing eventmachine (0.12.10) with native extensions
    Installing open4 (1.0.1)
    Installing perftools.rb (0.4.7) with native extensions
    Installing rack (1.2.1)
    Installing rack-perftools_profiler (0.0.2)
    Installing thin (1.2.7) with native extensions
    Using bundler (1.0.0.rc.3)

In this case, the two gems have their own set of dependencies, but they share
`rack` in common. If you run `bundle update thin`, bundler will update `daemons`,
`eventmachine` and `rack`, which are dependencies of `thin`, but not `open4` or
`perftools.rb`, which are dependencies of `rack-perftools_profiler`. Note that
`bundle update thin` will update `rack` even though it's _also_ a dependency of
`rack-perftools_profiler`.

In short, by default, when you update a gem using `bundle update`, bundler will
update all dependencies of that gem, including those that are also dependencies
of another gem.

To prevent updating indirect dependencies, prior to version 1.14 the only option
was the `CONSERVATIVE UPDATING` behavior in [bundle install(1)](bundle-install.1.html):

In this scenario, updating the `thin` version manually in the Gemfile(5),
and then running [bundle install(1)](bundle-install.1.html) will only update `daemons` and `eventmachine`,
but not `rack`. For more information, see the `CONSERVATIVE UPDATING` section
of [bundle install(1)](bundle-install.1.html).

Starting with 1.14, specifying the `--conservative` option will also prevent indirect
dependencies from being updated.

## PATCH LEVEL OPTIONS

Version 1.14 introduced 4 patch-level options that will influence how gem
versions are resolved. One of the following options can be used: `--patch`,
`--minor` or `--major`. `--strict` can be added to further influence resolution.

* `--patch`:
  Prefer updating only to next patch version.

* `--minor`:
  Prefer updating only to next minor version.

* `--major`:
  Prefer updating to next major version (default).

* `--strict`:
  Do not allow any gem to be updated past latest `--patch` | `--minor` | `--major`.

When Bundler is resolving what versions to use to satisfy declared
requirements in the Gemfile or in parent gems, it looks up all
available versions, filters out any versions that don't satisfy
the requirement, and then, by default, sorts them from newest to
oldest, considering them in that order.

Providing one of the patch level options (e.g. `--patch`) changes the
sort order of the satisfying versions, causing Bundler to consider the
latest `--patch` or `--minor` version available before other versions.
Note that versions outside the stated patch level could still be
resolved to if necessary to find a suitable dependency graph.

For example, if gem 'foo' is locked at 1.0.2, with no gem requirement
defined in the Gemfile, and versions 1.0.3, 1.0.4, 1.1.0, 1.1.1, 2.0.0
all exist, the default order of preference by default (`--major`) will
be "2.0.0, 1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2".

If the `--patch` option is used, the order of preference will change to
"1.0.4, 1.0.3, 1.0.2, 1.1.1, 1.1.0, 2.0.0".

If the `--minor` option is used, the order of preference will change to
"1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2, 2.0.0".

Combining the `--strict` option with any of the patch level options
will remove any versions beyond the scope of the patch level option,
to ensure that no gem is updated that far.

To continue the previous example, if both `--patch` and `--strict`
options are used, the available versions for resolution would be
"1.0.4, 1.0.3, 1.0.2". If `--minor` and `--strict` are used, it would
be "1.1.1, 1.1.0, 1.0.4, 1.0.3, 1.0.2".

Gem requirements as defined in the Gemfile will still be the first
determining factor for what versions are available. If the gem
requirement for `foo` in the Gemfile is '~> 1.0', that will accomplish
the same thing as providing the `--minor` and `--strict` options.

## PATCH LEVEL EXAMPLES

Given the following gem specifications:

    foo 1.4.3, requires: ~> bar 2.0
    foo 1.4.4, requires: ~> bar 2.0
    foo 1.4.5, requires: ~> bar 2.1
    foo 1.5.0, requires: ~> bar 2.1
    foo 1.5.1, requires: ~> bar 3.0
    bar with versions 2.0.3, 2.0.4, 2.1.0, 2.1.1, 3.0.0

Gemfile:

    gem 'foo'

Gemfile.lock:

    foo (1.4.3)
      bar (~> 2.0)
    bar (2.0.3)

Cases:

    #  Command Line                     Result
    ------------------------------------------------------------
    1  bundle update --patch            'foo 1.4.5', 'bar 2.1.1'
    2  bundle update --patch foo        'foo 1.4.5', 'bar 2.1.1'
    3  bundle update --minor            'foo 1.5.1', 'bar 3.0.0'
    4  bundle update --minor --strict   'foo 1.5.0', 'bar 2.1.1'
    5  bundle update --patch --strict   'foo 1.4.4', 'bar 2.0.4'

In case 1, bar is upgraded to 2.1.1, a minor version increase, because
the dependency from foo 1.4.5 required it.

In case 2, only foo is requested to be unlocked, but bar is also
allowed to move because it's not a declared dependency in the Gemfile.

In case 3, bar goes up a whole major release, because a minor increase
is preferred now for foo, and when it goes to 1.5.1, it requires 3.0.0
of bar.

In case 4, foo is preferred up to a minor version, but 1.5.1 won't work
because the --strict flag removes bar 3.0.0 from consideration since
it's a major increment.

In case 5, both foo and bar have any minor or major increments removed
from consideration because of the --strict flag, so the most they can
move is up to 1.4.4 and 2.0.4.

## RECOMMENDED WORKFLOW

In general, when working with an application managed with bundler, you should
use the following workflow:

* After you create your Gemfile(5) for the first time, run

    $ bundle install

* Check the resulting `Gemfile.lock` into version control

    $ git add Gemfile.lock

* When checking out this repository on another development machine, run

    $ bundle install

* When checking out this repository on a deployment machine, run

    $ bundle install --deployment

* After changing the Gemfile(5) to reflect a new or update dependency, run

    $ bundle install

* Make sure to check the updated `Gemfile.lock` into version control

    $ git add Gemfile.lock

* If [bundle install(1)](bundle-install.1.html) reports a conflict, manually update the specific
  gems that you changed in the Gemfile(5)

    $ bundle update rails thin

* If you want to update all the gems to the latest possible versions that
  still match the gems listed in the Gemfile(5), run

    $ bundle update --all
PK%"#[�x��G�G4gems/bundler-2.3.27/lib/bundler/man/bundle-install.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-INSTALL" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
.
.SH "SYNOPSIS"
\fBbundle install\fR [\-\-binstubs[=DIRECTORY]] [\-\-clean] [\-\-deployment] [\-\-frozen] [\-\-full\-index] [\-\-gemfile=GEMFILE] [\-\-jobs=NUMBER] [\-\-local] [\-\-no\-cache] [\-\-no\-prune] [\-\-path PATH] [\-\-quiet] [\-\-redownload] [\-\-retry=NUMBER] [\-\-shebang] [\-\-standalone[=GROUP[ GROUP\.\.\.]]] [\-\-system] [\-\-trust\-policy=POLICY] [\-\-with=GROUP[ GROUP\.\.\.]] [\-\-without=GROUP[ GROUP\.\.\.]]
.
.SH "DESCRIPTION"
Install the gems specified in your Gemfile(5)\. If this is the first time you run bundle install (and a \fBGemfile\.lock\fR does not exist), Bundler will fetch all remote sources, resolve dependencies and install all needed gems\.
.
.P
If a \fBGemfile\.lock\fR does exist, and you have not updated your Gemfile(5), Bundler will fetch all remote sources, but use the dependencies specified in the \fBGemfile\.lock\fR instead of resolving dependencies\.
.
.P
If a \fBGemfile\.lock\fR does exist, and you have updated your Gemfile(5), Bundler will use the dependencies in the \fBGemfile\.lock\fR for all gems that you did not update, but will re\-resolve the dependencies of gems that you did update\. You can find more information about this update process below under \fICONSERVATIVE UPDATING\fR\.
.
.SH "OPTIONS"
The \fB\-\-clean\fR, \fB\-\-deployment\fR, \fB\-\-frozen\fR, \fB\-\-no\-prune\fR, \fB\-\-path\fR, \fB\-\-shebang\fR, \fB\-\-system\fR, \fB\-\-without\fR and \fB\-\-with\fR options are deprecated because they only make sense if they are applied to every subsequent \fBbundle install\fR run automatically and that requires \fBbundler\fR to silently remember them\. Since \fBbundler\fR will no longer remember CLI flags in future versions, \fBbundle config\fR (see bundle\-config(1)) should be used to apply them permanently\.
.
.TP
\fB\-\-binstubs[=<directory>]\fR
Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it in \fBbin/\fR\. This lets you link the binstub inside of an application to the exact gem version the application needs\.
.
.IP
Creates a directory (defaults to \fB~/bin\fR) and places any executables from the gem there\. These executables run in Bundler\'s context\. If used, you might add this directory to your environment\'s \fBPATH\fR variable\. For instance, if the \fBrails\fR gem comes with a \fBrails\fR executable, this flag will create a \fBbin/rails\fR executable that ensures that all referred dependencies will be resolved using the bundled gems\.
.
.TP
\fB\-\-clean\fR
On finishing the installation Bundler is going to remove any gems not present in the current Gemfile(5)\. Don\'t worry, gems currently in use will not be removed\.
.
.IP
This option is deprecated in favor of the \fBclean\fR setting\.
.
.TP
\fB\-\-deployment\fR
In \fIdeployment mode\fR, Bundler will \'roll\-out\' the bundle for production or CI use\. Please check carefully if you want to have this option enabled in your development environment\.
.
.IP
This option is deprecated in favor of the \fBdeployment\fR setting\.
.
.TP
\fB\-\-redownload\fR
Force download every gem, even if the required versions are already available locally\.
.
.TP
\fB\-\-frozen\fR
Do not allow the Gemfile\.lock to be updated after this install\. Exits non\-zero if there are going to be changes to the Gemfile\.lock\.
.
.IP
This option is deprecated in favor of the \fBfrozen\fR setting\.
.
.TP
\fB\-\-full\-index\fR
Bundler will not call Rubygems\' API endpoint (default) but download and cache a (currently big) index file of all gems\. Performance can be improved for large bundles that seldom change by enabling this option\.
.
.TP
\fB\-\-gemfile=<gemfile>\fR
The location of the Gemfile(5) which Bundler should use\. This defaults to a Gemfile(5) in the current working directory\. In general, Bundler will assume that the location of the Gemfile(5) is also the project\'s root and will try to find \fBGemfile\.lock\fR and \fBvendor/cache\fR relative to this location\.
.
.TP
\fB\-\-jobs=[<number>]\fR, \fB\-j[<number>]\fR
The maximum number of parallel download and install jobs\. The default is the number of available processors\.
.
.TP
\fB\-\-local\fR
Do not attempt to connect to \fBrubygems\.org\fR\. Instead, Bundler will use the gems already present in Rubygems\' cache or in \fBvendor/cache\fR\. Note that if an appropriate platform\-specific gem exists on \fBrubygems\.org\fR it will not be found\.
.
.TP
\fB\-\-prefer\-local\fR
Force using locally installed gems, or gems already present in Rubygems\' cache or in \fBvendor/cache\fR, when resolving, even if newer versions are available remotely\. Only attempt to connect to \fBrubygems\.org\fR for gems that are not present locally\.
.
.TP
\fB\-\-no\-cache\fR
Do not update the cache in \fBvendor/cache\fR with the newly bundled gems\. This does not remove any gems in the cache but keeps the newly bundled gems from being cached during the install\.
.
.TP
\fB\-\-no\-prune\fR
Don\'t remove stale gems from the cache when the installation finishes\.
.
.IP
This option is deprecated in favor of the \fBno_prune\fR setting\.
.
.TP
\fB\-\-path=<path>\fR
The location to install the specified gems to\. This defaults to Rubygems\' setting\. Bundler shares this location with Rubygems, \fBgem install \.\.\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \.\.\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
.
.IP
This option is deprecated in favor of the \fBpath\fR setting\.
.
.TP
\fB\-\-quiet\fR
Do not print progress information to the standard output\. Instead, Bundler will exit using a status code (\fB$?\fR)\.
.
.TP
\fB\-\-retry=[<number>]\fR
Retry failed network or git requests for \fInumber\fR times\.
.
.TP
\fB\-\-shebang=<ruby\-executable>\fR
Uses the specified ruby executable (usually \fBruby\fR) to execute the scripts created with \fB\-\-binstubs\fR\. In addition, if you use \fB\-\-binstubs\fR together with \fB\-\-shebang jruby\fR these executables will be changed to execute \fBjruby\fR instead\.
.
.IP
This option is deprecated in favor of the \fBshebang\fR setting\.
.
.TP
\fB\-\-standalone[=<list>]\fR
Makes a bundle that can work without depending on Rubygems or Bundler at runtime\. A space separated list of groups to install has to be specified\. Bundler creates a directory named \fBbundle\fR and installs the bundle there\. It also generates a \fBbundle/bundler/setup\.rb\fR file to replace Bundler\'s own setup in the manner required\. Using this option implicitly sets \fBpath\fR, which is a [remembered option][REMEMBERED OPTIONS]\.
.
.TP
\fB\-\-system\fR
Installs the gems specified in the bundle to the system\'s Rubygems location\. This overrides any previous configuration of \fB\-\-path\fR\.
.
.IP
This option is deprecated in favor of the \fBsystem\fR setting\.
.
.TP
\fB\-\-trust\-policy=[<policy>]\fR
Apply the Rubygems security policy \fIpolicy\fR, where policy is one of \fBHighSecurity\fR, \fBMediumSecurity\fR, \fBLowSecurity\fR, \fBAlmostNoSecurity\fR, or \fBNoSecurity\fR\. For more details, please see the Rubygems signing documentation linked below in \fISEE ALSO\fR\.
.
.TP
\fB\-\-with=<list>\fR
A space\-separated list of groups referencing gems to install\. If an optional group is given it is installed\. If a group is given that is in the remembered list of groups given to \-\-without, it is removed from that list\.
.
.IP
This option is deprecated in favor of the \fBwith\fR setting\.
.
.TP
\fB\-\-without=<list>\fR
A space\-separated list of groups referencing gems to skip during installation\. If a group is given that is in the remembered list of groups given to \-\-with, it is removed from that list\.
.
.IP
This option is deprecated in favor of the \fBwithout\fR setting\.
.
.SH "DEPLOYMENT MODE"
Bundler\'s defaults are optimized for development\. To switch to defaults optimized for deployment and for CI, use the \fB\-\-deployment\fR flag\. Do not activate deployment mode on development machines, as it will cause an error when the Gemfile(5) is modified\.
.
.IP "1." 4
A \fBGemfile\.lock\fR is required\.
.
.IP
To ensure that the same versions of the gems you developed with and tested with are also used in deployments, a \fBGemfile\.lock\fR is required\.
.
.IP
This is mainly to ensure that you remember to check your \fBGemfile\.lock\fR into version control\.
.
.IP "2." 4
The \fBGemfile\.lock\fR must be up to date
.
.IP
In development, you can modify your Gemfile(5) and re\-run \fBbundle install\fR to \fIconservatively update\fR your \fBGemfile\.lock\fR snapshot\.
.
.IP
In deployment, your \fBGemfile\.lock\fR should be up\-to\-date with changes made in your Gemfile(5)\.
.
.IP "3." 4
Gems are installed to \fBvendor/bundle\fR not your default system location
.
.IP
In development, it\'s convenient to share the gems used in your application with other applications and other scripts that run on the system\.
.
.IP
In deployment, isolation is a more important default\. In addition, the user deploying the application may not have permission to install gems to the system, or the web server may not have permission to read them\.
.
.IP
As a result, \fBbundle install \-\-deployment\fR installs gems to the \fBvendor/bundle\fR directory in the application\. This may be overridden using the \fB\-\-path\fR option\.
.
.IP "" 0
.
.SH "SUDO USAGE"
By default, Bundler installs gems to the same location as \fBgem install\fR\.
.
.P
In some cases, that location may not be writable by your Unix user\. In that case, Bundler will stage everything in a temporary directory, then ask you for your \fBsudo\fR password in order to copy the gems into their system location\.
.
.P
From your perspective, this is identical to installing the gems directly into the system\.
.
.P
You should never use \fBsudo bundle install\fR\. This is because several other steps in \fBbundle install\fR must be performed as the current user:
.
.IP "\(bu" 4
Updating your \fBGemfile\.lock\fR
.
.IP "\(bu" 4
Updating your \fBvendor/cache\fR, if necessary
.
.IP "\(bu" 4
Checking out private git repositories using your user\'s SSH keys
.
.IP "" 0
.
.P
Of these three, the first two could theoretically be performed by \fBchown\fRing the resulting files to \fB$SUDO_USER\fR\. The third, however, can only be performed by invoking the \fBgit\fR command as the current user\. Therefore, git gems are downloaded and installed into \fB~/\.bundle\fR rather than $GEM_HOME or $BUNDLE_PATH\.
.
.P
As a result, you should run \fBbundle install\fR as the current user, and Bundler will ask for your password if it is needed to put the gems into their final location\.
.
.SH "INSTALLING GROUPS"
By default, \fBbundle install\fR will install all gems in all groups in your Gemfile(5), except those declared for a different platform\.
.
.P
However, you can explicitly tell Bundler to skip installing certain groups with the \fB\-\-without\fR option\. This option takes a space\-separated list of groups\.
.
.P
While the \fB\-\-without\fR option will skip \fIinstalling\fR the gems in the specified groups, it will still \fIdownload\fR those gems and use them to resolve the dependencies of every gem in your Gemfile(5)\.
.
.P
This is so that installing a different set of groups on another machine (such as a production server) will not change the gems and versions that you have already developed and tested against\.
.
.P
\fBBundler offers a rock\-solid guarantee that the third\-party code you are running in development and testing is also the third\-party code you are running in production\. You can choose to exclude some of that code in different environments, but you will never be caught flat\-footed by different versions of third\-party code being used in different environments\.\fR
.
.P
For a simple illustration, consider the following Gemfile(5):
.
.IP "" 4
.
.nf

source \'https://rubygems\.org\'

gem \'sinatra\'

group :production do
  gem \'rack\-perftools\-profiler\'
end
.
.fi
.
.IP "" 0
.
.P
In this case, \fBsinatra\fR depends on any version of Rack (\fB>= 1\.0\fR), while \fBrack\-perftools\-profiler\fR depends on 1\.x (\fB~> 1\.0\fR)\.
.
.P
When you run \fBbundle install \-\-without production\fR in development, we look at the dependencies of \fBrack\-perftools\-profiler\fR as well\. That way, you do not spend all your time developing against Rack 2\.0, using new APIs unavailable in Rack 1\.x, only to have Bundler switch to Rack 1\.2 when the \fBproduction\fR group \fIis\fR used\.
.
.P
This should not cause any problems in practice, because we do not attempt to \fBinstall\fR the gems in the excluded groups, and only evaluate as part of the dependency resolution process\.
.
.P
This also means that you cannot include different versions of the same gem in different groups, because doing so would result in different sets of dependencies used in development and production\. Because of the vagaries of the dependency resolution process, this usually affects more than the gems you list in your Gemfile(5), and can (surprisingly) radically change the gems you are using\.
.
.SH "THE GEMFILE\.LOCK"
When you run \fBbundle install\fR, Bundler will persist the full names and versions of all gems that you used (including dependencies of the gems specified in the Gemfile(5)) into a file called \fBGemfile\.lock\fR\.
.
.P
Bundler uses this file in all subsequent calls to \fBbundle install\fR, which guarantees that you always use the same exact code, even as your application moves across machines\.
.
.P
Because of the way dependency resolution works, even a seemingly small change (for instance, an update to a point\-release of a dependency of a gem in your Gemfile(5)) can result in radically different gems being needed to satisfy all dependencies\.
.
.P
As a result, you \fBSHOULD\fR check your \fBGemfile\.lock\fR into version control, in both applications and gems\. If you do not, every machine that checks out your repository (including your production server) will resolve all dependencies again, which will result in different versions of third\-party code being used if \fBany\fR of the gems in the Gemfile(5) or any of their dependencies have been updated\.
.
.P
When Bundler first shipped, the \fBGemfile\.lock\fR was included in the \fB\.gitignore\fR file included with generated gems\. Over time, however, it became clear that this practice forces the pain of broken dependencies onto new contributors, while leaving existing contributors potentially unaware of the problem\. Since \fBbundle install\fR is usually the first step towards a contribution, the pain of broken dependencies would discourage new contributors from contributing\. As a result, we have revised our guidance for gem authors to now recommend checking in the lock for gems\.
.
.SH "CONSERVATIVE UPDATING"
When you make a change to the Gemfile(5) and then run \fBbundle install\fR, Bundler will update only the gems that you modified\.
.
.P
In other words, if a gem that you \fBdid not modify\fR worked before you called \fBbundle install\fR, it will continue to use the exact same versions of all dependencies as it used before the update\.
.
.P
Let\'s take a look at an example\. Here\'s your original Gemfile(5):
.
.IP "" 4
.
.nf

source \'https://rubygems\.org\'

gem \'actionpack\', \'2\.3\.8\'
gem \'activemerchant\'
.
.fi
.
.IP "" 0
.
.P
In this case, both \fBactionpack\fR and \fBactivemerchant\fR depend on \fBactivesupport\fR\. The \fBactionpack\fR gem depends on \fBactivesupport 2\.3\.8\fR and \fBrack ~> 1\.1\.0\fR, while the \fBactivemerchant\fR gem depends on \fBactivesupport >= 2\.3\.2\fR, \fBbraintree >= 2\.0\.0\fR, and \fBbuilder >= 2\.0\.0\fR\.
.
.P
When the dependencies are first resolved, Bundler will select \fBactivesupport 2\.3\.8\fR, which satisfies the requirements of both gems in your Gemfile(5)\.
.
.P
Next, you modify your Gemfile(5) to:
.
.IP "" 4
.
.nf

source \'https://rubygems\.org\'

gem \'actionpack\', \'3\.0\.0\.rc\'
gem \'activemerchant\'
.
.fi
.
.IP "" 0
.
.P
The \fBactionpack 3\.0\.0\.rc\fR gem has a number of new dependencies, and updates the \fBactivesupport\fR dependency to \fB= 3\.0\.0\.rc\fR and the \fBrack\fR dependency to \fB~> 1\.2\.1\fR\.
.
.P
When you run \fBbundle install\fR, Bundler notices that you changed the \fBactionpack\fR gem, but not the \fBactivemerchant\fR gem\. It evaluates the gems currently being used to satisfy its requirements:
.
.TP
\fBactivesupport 2\.3\.8\fR
also used to satisfy a dependency in \fBactivemerchant\fR, which is not being updated
.
.TP
\fBrack ~> 1\.1\.0\fR
not currently being used to satisfy another dependency
.
.P
Because you did not explicitly ask to update \fBactivemerchant\fR, you would not expect it to suddenly stop working after updating \fBactionpack\fR\. However, satisfying the new \fBactivesupport 3\.0\.0\.rc\fR dependency of actionpack requires updating one of its dependencies\.
.
.P
Even though \fBactivemerchant\fR declares a very loose dependency that theoretically matches \fBactivesupport 3\.0\.0\.rc\fR, Bundler treats gems in your Gemfile(5) that have not changed as an atomic unit together with their dependencies\. In this case, the \fBactivemerchant\fR dependency is treated as \fBactivemerchant 1\.7\.1 + activesupport 2\.3\.8\fR, so \fBbundle install\fR will report that it cannot update \fBactionpack\fR\.
.
.P
To explicitly update \fBactionpack\fR, including its dependencies which other gems in the Gemfile(5) still depend on, run \fBbundle update actionpack\fR (see \fBbundle update(1)\fR)\.
.
.P
\fBSummary\fR: In general, after making a change to the Gemfile(5) , you should first try to run \fBbundle install\fR, which will guarantee that no other gem in the Gemfile(5) is impacted by the change\. If that does not work, run bundle update(1) \fIbundle\-update\.1\.html\fR\.
.
.SH "SEE ALSO"
.
.IP "\(bu" 4
Gem install docs \fIhttp://guides\.rubygems\.org/rubygems\-basics/#installing\-gems\fR
.
.IP "\(bu" 4
Rubygems signing docs \fIhttp://guides\.rubygems\.org/security/\fR
.
.IP "" 0

PK%"#[;�H��2gems/bundler-2.3.27/lib/bundler/man/bundle-clean.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-CLEAN" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
.
.SH "SYNOPSIS"
\fBbundle clean\fR [\-\-dry\-run] [\-\-force]
.
.SH "DESCRIPTION"
This command will remove all unused gems in your bundler directory\. This is useful when you have made many changes to your gem dependencies\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-dry\-run\fR
Print the changes, but do not clean the unused gems\.
.
.TP
\fB\-\-force\fR
Forces cleaning up unused gems even if Bundler is configured to use globally installed gems\. As a consequence, removes all system gems except for the ones in the current application\.

PK&"#[b�Mp

5gems/bundler-2.3.27/lib/bundler/man/bundle-outdated.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-OUTDATED" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-outdated\fR \- List installed gems with newer versions available
.
.SH "SYNOPSIS"
\fBbundle outdated\fR [GEM] [\-\-local] [\-\-pre] [\-\-source] [\-\-strict] [\-\-parseable | \-\-porcelain] [\-\-group=GROUP] [\-\-groups] [\-\-patch|\-\-minor|\-\-major] [\-\-filter\-major] [\-\-filter\-minor] [\-\-filter\-patch] [\-\-only\-explicit]
.
.SH "DESCRIPTION"
Outdated lists the names and versions of gems that have a newer version available in the given source\. Calling outdated with [GEM [GEM]] will only check for newer versions of the given gems\. Prerelease gems are ignored by default\. If your gems are up to date, Bundler will exit with a status of 0\. Otherwise, it will exit 1\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-local\fR
Do not attempt to fetch gems remotely and use the gem cache instead\.
.
.TP
\fB\-\-pre\fR
Check for newer pre\-release gems\.
.
.TP
\fB\-\-source\fR
Check against a specific source\.
.
.TP
\fB\-\-strict\fR
Only list newer versions allowed by your Gemfile requirements, also respecting conservative update flags (\-\-patch, \-\-minor, \-\-major)\.
.
.TP
\fB\-\-parseable\fR, \fB\-\-porcelain\fR
Use minimal formatting for more parseable output\.
.
.TP
\fB\-\-group\fR
List gems from a specific group\.
.
.TP
\fB\-\-groups\fR
List gems organized by groups\.
.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.
.TP
\fB\-\-filter\-major\fR
Only list major newer versions\.
.
.TP
\fB\-\-filter\-minor\fR
Only list minor newer versions\.
.
.TP
\fB\-\-filter\-patch\fR
Only list patch newer versions\.
.
.TP
\fB\-\-only\-explicit\fR
Only list gems specified in your Gemfile, not their dependencies\.
.
.SH "PATCH LEVEL OPTIONS"
See bundle update(1) \fIbundle\-update\.1\.html\fR for details\.
.
.SH "FILTERING OUTPUT"
The 3 filtering options do not affect the resolution of versions, merely what versions are shown in the output\.
.
.P
If the regular output shows the following:
.
.IP "" 4
.
.nf

* faker (newest 1\.6\.6, installed 1\.6\.5, requested ~> 1\.4) in groups "development, test"
* hashie (newest 3\.4\.6, installed 1\.2\.0, requested = 1\.2\.0) in groups "default"
* headless (newest 2\.3\.1, installed 2\.2\.3) in groups "test"
.
.fi
.
.IP "" 0
.
.P
\fB\-\-filter\-major\fR would only show:
.
.IP "" 4
.
.nf

* hashie (newest 3\.4\.6, installed 1\.2\.0, requested = 1\.2\.0) in groups "default"
.
.fi
.
.IP "" 0
.
.P
\fB\-\-filter\-minor\fR would only show:
.
.IP "" 4
.
.nf

* headless (newest 2\.3\.1, installed 2\.2\.3) in groups "test"
.
.fi
.
.IP "" 0
.
.P
\fB\-\-filter\-patch\fR would only show:
.
.IP "" 4
.
.nf

* faker (newest 1\.6\.6, installed 1\.6\.5, requested ~> 1\.4) in groups "development, test"
.
.fi
.
.IP "" 0
.
.P
Filter options can be combined\. \fB\-\-filter\-minor\fR and \fB\-\-filter\-patch\fR would show:
.
.IP "" 4
.
.nf

* faker (newest 1\.6\.6, installed 1\.6\.5, requested ~> 1\.4) in groups "development, test"
* headless (newest 2\.3\.1, installed 2\.2\.3) in groups "test"
.
.fi
.
.IP "" 0
.
.P
Combining all three \fBfilter\fR options would be the same result as providing none of them\.
PK&"#[�n��77:gems/bundler-2.3.27/lib/bundler/man/bundle-outdated.1.ronnnu�[���bundle-outdated(1) -- List installed gems with newer versions available
=======================================================================

## SYNOPSIS

`bundle outdated` [GEM] [--local]
                        [--pre]
                        [--source]
                        [--strict]
                        [--parseable | --porcelain]
                        [--group=GROUP]
                        [--groups]
                        [--patch|--minor|--major]
                        [--filter-major]
                        [--filter-minor]
                        [--filter-patch]
                        [--only-explicit]

## DESCRIPTION

Outdated lists the names and versions of gems that have a newer version available
in the given source. Calling outdated with [GEM [GEM]] will only check for newer
versions of the given gems. Prerelease gems are ignored by default. If your gems
are up to date, Bundler will exit with a status of 0. Otherwise, it will exit 1.

## OPTIONS

* `--local`:
  Do not attempt to fetch gems remotely and use the gem cache instead.

* `--pre`:
  Check for newer pre-release gems.

* `--source`:
  Check against a specific source.

* `--strict`:
  Only list newer versions allowed by your Gemfile requirements, also respecting conservative update flags (--patch, --minor, --major).

* `--parseable`, `--porcelain`:
   Use minimal formatting for more parseable output.

* `--group`:
  List gems from a specific group.

* `--groups`:
  List gems organized by groups.

* `--minor`:
  Prefer updating only to next minor version.

* `--major`:
  Prefer updating to next major version (default).

* `--patch`:
  Prefer updating only to next patch version.

* `--filter-major`:
  Only list major newer versions.

* `--filter-minor`:
  Only list minor newer versions.

* `--filter-patch`:
  Only list patch newer versions.

* `--only-explicit`:
  Only list gems specified in your Gemfile, not their dependencies.

## PATCH LEVEL OPTIONS

See [bundle update(1)](bundle-update.1.html) for details.

## FILTERING OUTPUT

The 3 filtering options do not affect the resolution of versions, merely what versions are shown
in the output.

If the regular output shows the following:

    * faker (newest 1.6.6, installed 1.6.5, requested ~> 1.4) in groups "development, test"
    * hashie (newest 3.4.6, installed 1.2.0, requested = 1.2.0) in groups "default"
    * headless (newest 2.3.1, installed 2.2.3) in groups "test"

`--filter-major` would only show:

    * hashie (newest 3.4.6, installed 1.2.0, requested = 1.2.0) in groups "default"

`--filter-minor` would only show:

    * headless (newest 2.3.1, installed 2.2.3) in groups "test"

`--filter-patch` would only show:

    * faker (newest 1.6.6, installed 1.6.5, requested ~> 1.4) in groups "development, test"

Filter options can be combined. `--filter-minor` and `--filter-patch` would show:

    * faker (newest 1.6.6, installed 1.6.5, requested ~> 1.4) in groups "development, test"
    * headless (newest 2.3.1, installed 2.2.3) in groups "test"

Combining all three `filter` options would be the same result as providing none of them.
PK&"#["�:110gems/bundler-2.3.27/lib/bundler/man/bundle-add.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-ADD" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
.
.SH "SYNOPSIS"
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT] [\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
.
.SH "DESCRIPTION"
Adds the named gem to the Gemfile and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
.
.P
Example:
.
.P
bundle add rails
.
.P
bundle add rails \-\-version "< 3\.0, > 1\.1"
.
.P
bundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"
.
.P
bundle add rails \-\-skip\-install
.
.P
bundle add rails \-\-group "development, test"
.
.SH "OPTIONS"
.
.TP
\fB\-\-version\fR, \fB\-v\fR
Specify version requirements(s) for the added gem\.
.
.TP
\fB\-\-group\fR, \fB\-g\fR
Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
.
.TP
\fB\-\-source\fR, \fB\-s\fR
Specify the source for the added gem\.
.
.TP
\fB\-\-require\fR, \fB\-r\fR
Adds require path to gem\. Provide false, or a path as a string\.
.
.TP
\fB\-\-path\fR
Specify the file system path for the added gem\.
.
.TP
\fB\-\-git\fR
Specify the git source for the added gem\.
.
.TP
\fB\-\-github\fR
Specify the github source for the added gem\.
.
.TP
\fB\-\-branch\fR
Specify the git branch for the added gem\.
.
.TP
\fB\-\-ref\fR
Specify the git ref for the added gem\.
.
.TP
\fB\-\-skip\-install\fR
Adds the gem to the Gemfile but does not install it\.
.
.TP
\fB\-\-optimistic\fR
Adds optimistic declaration of version\.
.
.TP
\fB\-\-strict\fR
Adds strict declaration of version\.

PK&"#[��]]1gems/bundler-2.3.27/lib/bundler/man/bundle-exec.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-EXEC" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
.
.SH "SYNOPSIS"
\fBbundle exec\fR [\-\-keep\-file\-descriptors] \fIcommand\fR
.
.SH "DESCRIPTION"
This command executes the command, making all gems specified in the [\fBGemfile(5)\fR][Gemfile(5)] available to \fBrequire\fR in Ruby programs\.
.
.P
Essentially, if you would normally have run something like \fBrspec spec/my_spec\.rb\fR, and you want to use the gems specified in the [\fBGemfile(5)\fR][Gemfile(5)] and installed via bundle install(1) \fIbundle\-install\.1\.html\fR, you should run \fBbundle exec rspec spec/my_spec\.rb\fR\.
.
.P
Note that \fBbundle exec\fR does not require that an executable is available on your shell\'s \fB$PATH\fR\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-keep\-file\-descriptors\fR
Exec in Ruby 2\.0 began discarding non\-standard file descriptors\. When this flag is passed, exec will revert to the 1\.9 behaviour of passing all file descriptors to the new process\.
.
.SH "BUNDLE INSTALL \-\-BINSTUBS"
If you use the \fB\-\-binstubs\fR flag in bundle install(1) \fIbundle\-install\.1\.html\fR, Bundler will automatically create a directory (which defaults to \fBapp_root/bin\fR) containing all of the executables available from gems in the bundle\.
.
.P
After using \fB\-\-binstubs\fR, \fBbin/rspec spec/my_spec\.rb\fR is identical to \fBbundle exec rspec spec/my_spec\.rb\fR\.
.
.SH "ENVIRONMENT MODIFICATIONS"
\fBbundle exec\fR makes a number of changes to the shell environment, then executes the command you specify in full\.
.
.IP "\(bu" 4
make sure that it\'s still possible to shell out to \fBbundle\fR from inside a command invoked by \fBbundle exec\fR (using \fB$BUNDLE_BIN_PATH\fR)
.
.IP "\(bu" 4
put the directory containing executables (like \fBrails\fR, \fBrspec\fR, \fBrackup\fR) for your bundle on \fB$PATH\fR
.
.IP "\(bu" 4
make sure that if bundler is invoked in the subshell, it uses the same \fBGemfile\fR (by setting \fBBUNDLE_GEMFILE\fR)
.
.IP "\(bu" 4
add \fB\-rbundler/setup\fR to \fB$RUBYOPT\fR, which makes sure that Ruby programs invoked in the subshell can see the gems in the bundle
.
.IP "" 0
.
.P
It also modifies Rubygems:
.
.IP "\(bu" 4
disallow loading additional gems not in the bundle
.
.IP "\(bu" 4
modify the \fBgem\fR method to be a no\-op if a gem matching the requirements is in the bundle, and to raise a \fBGem::LoadError\fR if it\'s not
.
.IP "\(bu" 4
Define \fBGem\.refresh\fR to be a no\-op, since the source index is always frozen when using bundler, and to prevent gems from the system leaking into the environment
.
.IP "\(bu" 4
Override \fBGem\.bin_path\fR to use the gems in the bundle, making system executables work
.
.IP "\(bu" 4
Add all gems in the bundle into Gem\.loaded_specs
.
.IP "" 0
.
.P
Finally, \fBbundle exec\fR also implicitly modifies \fBGemfile\.lock\fR if the lockfile and the Gemfile do not match\. Bundler needs the Gemfile to determine things such as a gem\'s groups, \fBautorequire\fR, and platforms, etc\., and that information isn\'t stored in the lockfile\. The Gemfile and lockfile must be synced in order to \fBbundle exec\fR successfully, so \fBbundle exec\fR updates the lockfile beforehand\.
.
.SS "Loading"
By default, when attempting to \fBbundle exec\fR to a file with a ruby shebang, Bundler will \fBKernel\.load\fR that file instead of using \fBKernel\.exec\fR\. For the vast majority of cases, this is a performance improvement\. In a rare few cases, this could cause some subtle side\-effects (such as dependence on the exact contents of \fB$0\fR or \fB__FILE__\fR) and the optimization can be disabled by enabling the \fBdisable_exec_load\fR setting\.
.
.SS "Shelling out"
Any Ruby code that opens a subshell (like \fBsystem\fR, backticks, or \fB%x{}\fR) will automatically use the current Bundler environment\. If you need to shell out to a Ruby command that is not part of your current bundle, use the \fBwith_clean_env\fR method with a block\. Any subshells created inside the block will be given the environment present before Bundler was activated\. For example, Homebrew commands run Ruby, but don\'t work inside a bundle:
.
.IP "" 4
.
.nf

Bundler\.with_clean_env do
  `brew install wget`
end
.
.fi
.
.IP "" 0
.
.P
Using \fBwith_clean_env\fR is also necessary if you are shelling out to a different bundle\. Any Bundler commands run in a subshell will inherit the current Gemfile, so commands that need to run in the context of a different bundle also need to use \fBwith_clean_env\fR\.
.
.IP "" 4
.
.nf

Bundler\.with_clean_env do
  Dir\.chdir "/other/bundler/project" do
    `bundle exec \./script`
  end
end
.
.fi
.
.IP "" 0
.
.P
Bundler provides convenience helpers that wrap \fBsystem\fR and \fBexec\fR, and they can be used like this:
.
.IP "" 4
.
.nf

Bundler\.clean_system(\'brew install wget\')
Bundler\.clean_exec(\'brew install wget\')
.
.fi
.
.IP "" 0
.
.SH "RUBYGEMS PLUGINS"
At present, the Rubygems plugin system requires all files named \fBrubygems_plugin\.rb\fR on the load path of \fIany\fR installed gem when any Ruby code requires \fBrubygems\.rb\fR\. This includes executables installed into the system, like \fBrails\fR, \fBrackup\fR, and \fBrspec\fR\.
.
.P
Since Rubygems plugins can contain arbitrary Ruby code, they commonly end up activating themselves or their dependencies\.
.
.P
For instance, the \fBgemcutter 0\.5\fR gem depended on \fBjson_pure\fR\. If you had that version of gemcutter installed (even if you \fIalso\fR had a newer version without this problem), Rubygems would activate \fBgemcutter 0\.5\fR and \fBjson_pure <latest>\fR\.
.
.P
If your Gemfile(5) also contained \fBjson_pure\fR (or a gem with a dependency on \fBjson_pure\fR), the latest version on your system might conflict with the version in your Gemfile(5), or the snapshot version in your \fBGemfile\.lock\fR\.
.
.P
If this happens, bundler will say:
.
.IP "" 4
.
.nf

You have already activated json_pure 1\.4\.6 but your Gemfile
requires json_pure 1\.4\.3\. Consider using bundle exec\.
.
.fi
.
.IP "" 0
.
.P
In this situation, you almost certainly want to remove the underlying gem with the problematic gem plugin\. In general, the authors of these plugins (in this case, the \fBgemcutter\fR gem) have released newer versions that are more careful in their plugins\.
.
.P
You can find a list of all the gems containing gem plugins by running
.
.IP "" 4
.
.nf

ruby \-e "puts Gem\.find_files(\'rubygems_plugin\.rb\')"
.
.fi
.
.IP "" 0
.
.P
At the very least, you should remove all but the newest version of each gem plugin, and also remove all gem plugins that you aren\'t using (\fBgem uninstall gem_name\fR)\.
PK&"#[���o��9gems/bundler-2.3.27/lib/bundler/man/bundle-version.1.ronnnu�[���bundle-version(1) -- Prints Bundler version information
=======================================================

## SYNOPSIS

`bundle version`

## DESCRIPTION

Prints Bundler version information.

## OPTIONS

No options.

## EXAMPLE

Print the version of Bundler with build date and commit hash of the in the Git source.

    bundle version

shows `Bundler version 2.3.21 (2022-08-24 commit d54be5fdd8)` for example.

cf. `bundle --version` shows `Bundler version 2.3.21`.
PK&"#[B�:��1gems/bundler-2.3.27/lib/bundler/man/bundle-help.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-HELP" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-help\fR \- Displays detailed help for each subcommand
.
.SH "SYNOPSIS"
\fBbundle help\fR [COMMAND]
.
.SH "DESCRIPTION"
Displays detailed help for the given subcommand\. You can specify a single \fBCOMMAND\fR at the same time\. When \fBCOMMAND\fR is omitted, help for \fBhelp\fR command will be displayed\.
PK&"#[�[�n��2gems/bundler-2.3.27/lib/bundler/man/bundle-check.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-CHECK" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
.
.SH "SYNOPSIS"
\fBbundle check\fR [\-\-dry\-run] [\-\-gemfile=FILE] [\-\-path=PATH]
.
.SH "DESCRIPTION"
\fBcheck\fR searches the local machine for each of the gems requested in the Gemfile\. If all gems are found, Bundler prints a success message and exits with a status of 0\.
.
.P
If not, the first missing gem is listed and Bundler exits status 1\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-dry\-run\fR
Locks the [\fBGemfile(5)\fR][Gemfile(5)] before running the command\.
.
.TP
\fB\-\-gemfile\fR
Use the specified gemfile instead of the [\fBGemfile(5)\fR][Gemfile(5)]\.
.
.TP
\fB\-\-path\fR
Specify a different path than the system default (\fB$BUNDLE_PATH\fR or \fB$GEM_HOME\fR)\. Bundler will remember this value for future installs on this machine\.

PK&"#[O�tu��8gems/bundler-2.3.27/lib/bundler/man/bundle-inject.1.ronnnu�[���bundle-inject(1) -- Add named gem(s) with version requirements to Gemfile
=========================================================================

## SYNOPSIS

`bundle inject` [GEM] [VERSION]

## DESCRIPTION

Adds the named gem(s) with their version requirements to the resolved
[`Gemfile(5)`][Gemfile(5)].

This command will add the gem to both your [`Gemfile(5)`][Gemfile(5)] and Gemfile.lock if it
isn't listed yet.

Example:

    bundle install
    bundle inject 'rack' '> 0'

This will inject the 'rack' gem with a version greater than 0 in your
[`Gemfile(5)`][Gemfile(5)] and Gemfile.lock.

The `bundle inject` command was deprecated in Bundler 2.1 and will be removed in Bundler 3.0.
PK&"#[Ժ�p��,gems/bundler-2.3.27/lib/bundler/man/bundle.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\fR \- Ruby Dependency Management
.
.SH "SYNOPSIS"
\fBbundle\fR COMMAND [\-\-no\-color] [\-\-verbose] [ARGS]
.
.SH "DESCRIPTION"
Bundler manages an \fBapplication\'s dependencies\fR through its entire life across many machines systematically and repeatably\.
.
.P
See the bundler website \fIhttps://bundler\.io\fR for information on getting started, and Gemfile(5) for more information on the \fBGemfile\fR format\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-no\-color\fR
Print all output without color
.
.TP
\fB\-\-retry\fR, \fB\-r\fR
Specify the number of times you wish to attempt network commands
.
.TP
\fB\-\-verbose\fR, \fB\-V\fR
Print out additional logging information
.
.SH "BUNDLE COMMANDS"
We divide \fBbundle\fR subcommands into primary commands and utilities:
.
.SH "PRIMARY COMMANDS"
.
.TP
\fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR
Install the gems specified by the \fBGemfile\fR or \fBGemfile\.lock\fR
.
.TP
\fBbundle update(1)\fR \fIbundle\-update\.1\.html\fR
Update dependencies to their latest versions
.
.TP
\fBbundle cache(1)\fR \fIbundle\-cache\.1\.html\fR
Package the \.gem files required by your application into the \fBvendor/cache\fR directory (aliases: \fBbundle package\fR, \fBbundle pack\fR)
.
.TP
\fBbundle exec(1)\fR \fIbundle\-exec\.1\.html\fR
Execute a script in the current bundle
.
.TP
\fBbundle config(1)\fR \fIbundle\-config\.1\.html\fR
Specify and read configuration options for Bundler
.
.TP
\fBbundle help(1)\fR \fIbundle\-help\.1\.html\fR
Display detailed help for each subcommand
.
.SH "UTILITIES"
.
.TP
\fBbundle add(1)\fR \fIbundle\-add\.1\.html\fR
Add the named gem to the Gemfile and run \fBbundle install\fR
.
.TP
\fBbundle binstubs(1)\fR \fIbundle\-binstubs\.1\.html\fR
Generate binstubs for executables in a gem
.
.TP
\fBbundle check(1)\fR \fIbundle\-check\.1\.html\fR
Determine whether the requirements for your application are installed and available to Bundler
.
.TP
\fBbundle show(1)\fR \fIbundle\-show\.1\.html\fR
Show the source location of a particular gem in the bundle
.
.TP
\fBbundle outdated(1)\fR \fIbundle\-outdated\.1\.html\fR
Show all of the outdated gems in the current bundle
.
.TP
\fBbundle console(1)\fR (deprecated)
Start an IRB session in the current bundle
.
.TP
\fBbundle open(1)\fR \fIbundle\-open\.1\.html\fR
Open an installed gem in the editor
.
.TP
\fBbundle lock(1)\fR \fIbundle\-lock\.1\.html\fR
Generate a lockfile for your dependencies
.
.TP
\fBbundle viz(1)\fR \fIbundle\-viz\.1\.html\fR (deprecated)
Generate a visual representation of your dependencies
.
.TP
\fBbundle init(1)\fR \fIbundle\-init\.1\.html\fR
Generate a simple \fBGemfile\fR, placed in the current directory
.
.TP
\fBbundle gem(1)\fR \fIbundle\-gem\.1\.html\fR
Create a simple gem, suitable for development with Bundler
.
.TP
\fBbundle platform(1)\fR \fIbundle\-platform\.1\.html\fR
Display platform compatibility information
.
.TP
\fBbundle clean(1)\fR \fIbundle\-clean\.1\.html\fR
Clean up unused gems in your Bundler directory
.
.TP
\fBbundle doctor(1)\fR \fIbundle\-doctor\.1\.html\fR
Display warnings about common problems
.
.TP
\fBbundle remove(1)\fR \fIbundle\-remove\.1\.html\fR
Removes gems from the Gemfile
.
.TP
\fBbundle plugin(1)\fR \fIbundle\-plugin\.1\.html\fR
Manage Bundler plugins
.
.TP
\fBbundle version(1)\fR \fIbundle\-version\.1\.html\fR
Prints Bundler version information
.
.SH "PLUGINS"
When running a command that isn\'t listed in PRIMARY COMMANDS or UTILITIES, Bundler will try to find an executable on your path named \fBbundler\-<command>\fR and execute it, passing down any extra arguments to it\.
.
.SH "OBSOLETE"
These commands are obsolete and should no longer be used:
.
.IP "\(bu" 4
\fBbundle inject(1)\fR
.
.IP "" 0

PK&"#[��h���6gems/bundler-2.3.27/lib/bundler/man/bundle-init.1.ronnnu�[���bundle-init(1) -- Generates a Gemfile into the current working directory
========================================================================

## SYNOPSIS

`bundle init` [--gemspec=FILE]

## DESCRIPTION

Init generates a default [`Gemfile(5)`][Gemfile(5)] in the current working directory. When
adding a [`Gemfile(5)`][Gemfile(5)] to a gem with a gemspec, the `--gemspec` option will
automatically add each dependency listed in the gemspec file to the newly
created [`Gemfile(5)`][Gemfile(5)].

## OPTIONS

* `--gemspec`:
  Use the specified .gemspec to create the [`Gemfile(5)`][Gemfile(5)]

## FILES

Included in the default [`Gemfile(5)`][Gemfile(5)]
generated is the line `# frozen_string_literal: true`. This is a magic comment
supported for the first time in Ruby 2.3. The presence of this line
results in all string literals in the file being implicitly frozen.

## SEE ALSO

[Gemfile(5)](https://bundler.io/man/gemfile.5.html)
PK&"#[�V�#6gems/bundler-2.3.27/lib/bundler/man/bundle-list.1.ronnnu�[���bundle-list(1) -- List all the gems in the bundle
=========================================================================

## SYNOPSIS

`bundle list` [--name-only] [--paths] [--without-group=GROUP[ GROUP...]] [--only-group=GROUP[ GROUP...]]

## DESCRIPTION

Prints a list of all the gems in the bundle including their version.

Example:

bundle list --name-only

bundle list --paths

bundle list --without-group test

bundle list --only-group dev

bundle list --only-group dev test --paths

## OPTIONS

* `--name-only`:
  Print only the name of each gem.
* `--paths`:
  Print the path to each gem in the bundle.
* `--without-group=<list>`:
  A space-separated list of groups of gems to skip during printing.
* `--only-group=<list>`:
  A space-separated list of groups of gems to print.
PK&"#[�'�+
+
1gems/bundler-2.3.27/lib/bundler/man/bundle.1.ronnnu�[���bundle(1) -- Ruby Dependency Management
=======================================

## SYNOPSIS

`bundle` COMMAND [--no-color] [--verbose] [ARGS]

## DESCRIPTION

Bundler manages an `application's dependencies` through its entire life
across many machines systematically and repeatably.

See [the bundler website](https://bundler.io) for information on getting
started, and Gemfile(5) for more information on the `Gemfile` format.

## OPTIONS

* `--no-color`:
  Print all output without color

* `--retry`, `-r`:
  Specify the number of times you wish to attempt network commands

* `--verbose`, `-V`:
  Print out additional logging information

## BUNDLE COMMANDS

We divide `bundle` subcommands into primary commands and utilities:

## PRIMARY COMMANDS

* [`bundle install(1)`](bundle-install.1.html):
  Install the gems specified by the `Gemfile` or `Gemfile.lock`

* [`bundle update(1)`](bundle-update.1.html):
  Update dependencies to their latest versions

* [`bundle cache(1)`](bundle-cache.1.html):
  Package the .gem files required by your application into the
  `vendor/cache` directory (aliases: `bundle package`, `bundle pack`)

* [`bundle exec(1)`](bundle-exec.1.html):
  Execute a script in the current bundle

* [`bundle config(1)`](bundle-config.1.html):
  Specify and read configuration options for Bundler

* [`bundle help(1)`](bundle-help.1.html):
  Display detailed help for each subcommand

## UTILITIES

* [`bundle add(1)`](bundle-add.1.html):
  Add the named gem to the Gemfile and run `bundle install`

* [`bundle binstubs(1)`](bundle-binstubs.1.html):
  Generate binstubs for executables in a gem

* [`bundle check(1)`](bundle-check.1.html):
  Determine whether the requirements for your application are installed
  and available to Bundler

* [`bundle show(1)`](bundle-show.1.html):
  Show the source location of a particular gem in the bundle

* [`bundle outdated(1)`](bundle-outdated.1.html):
  Show all of the outdated gems in the current bundle

* `bundle console(1)` (deprecated):
  Start an IRB session in the current bundle

* [`bundle open(1)`](bundle-open.1.html):
  Open an installed gem in the editor

* [`bundle lock(1)`](bundle-lock.1.html):
  Generate a lockfile for your dependencies

* [`bundle viz(1)`](bundle-viz.1.html) (deprecated):
  Generate a visual representation of your dependencies

* [`bundle init(1)`](bundle-init.1.html):
  Generate a simple `Gemfile`, placed in the current directory

* [`bundle gem(1)`](bundle-gem.1.html):
  Create a simple gem, suitable for development with Bundler

* [`bundle platform(1)`](bundle-platform.1.html):
  Display platform compatibility information

* [`bundle clean(1)`](bundle-clean.1.html):
  Clean up unused gems in your Bundler directory

* [`bundle doctor(1)`](bundle-doctor.1.html):
  Display warnings about common problems

* [`bundle remove(1)`](bundle-remove.1.html):
  Removes gems from the Gemfile

* [`bundle plugin(1)`](bundle-plugin.1.html):
  Manage Bundler plugins

* [`bundle version(1)`](bundle-version.1.html):
  Prints Bundler version information

## PLUGINS

When running a command that isn't listed in PRIMARY COMMANDS or UTILITIES,
Bundler will try to find an executable on your path named `bundler-<command>`
and execute it, passing down any extra arguments to it.

## OBSOLETE

These commands are obsolete and should no longer be used:

* `bundle inject(1)`
PK&"#[��#s��:gems/bundler-2.3.27/lib/bundler/man/bundle-pristine.1.ronnnu�[���bundle-pristine(1) -- Restores installed gems to their pristine condition
===========================================================================

## SYNOPSIS

`bundle pristine`

## DESCRIPTION

`pristine` restores the installed gems in the bundle to their pristine condition
using the local gem cache from RubyGems. For git gems, a forced checkout will be performed.

For further explanation, `bundle pristine` ignores unpacked files on disk. In other
words, this command utilizes the local `.gem` cache or the gem's git repository
as if one were installing from scratch.

Note: the Bundler gem cannot be restored to its original state with `pristine`.
One also cannot use `bundle pristine` on gems with a 'path' option in the Gemfile,
because bundler has no original copy it can restore from.

When is it practical to use `bundle pristine`?

It comes in handy when a developer is debugging a gem. `bundle pristine` is a
great way to get rid of experimental changes to a gem that one may not want.

Why use `bundle pristine` over `gem pristine --all`?

Both commands are very similar.
For context: `bundle pristine`, without arguments, cleans all gems from the lockfile.
Meanwhile, `gem pristine --all` cleans all installed gems for that Ruby version.

If a developer forgets which gems in their project they might
have been debugging, the Rubygems `gem pristine [GEMNAME]` command may be inconvenient.
One can avoid waiting for `gem pristine --all`, and instead run `bundle pristine`.
PK&"#[1��>��4gems/bundler-2.3.27/lib/bundler/man/bundle-console.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-CONSOLE" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-console\fR \- Deprecated way to open an IRB session with the bundle pre\-loaded
.
.SH "SYNOPSIS"
\fBbundle console\fR [GROUP]
.
.SH "DESCRIPTION"
Starts an interactive Ruby console session in the context of the current bundle\.
.
.P
If no \fBGROUP\fR is specified, all gems in the \fBdefault\fR group in the Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR are preliminarily loaded\.
.
.P
If \fBGROUP\fR is specified, all gems in the given group in the Gemfile in addition to the gems in \fBdefault\fR group are loaded\. Even if the given group does not exist in the Gemfile, IRB console starts without any warning or error\.
.
.P
The environment variable \fBBUNDLE_CONSOLE\fR or \fBbundle config set console\fR can be used to change the shell from the following:
.
.IP "\(bu" 4
\fBirb\fR (default)
.
.IP "\(bu" 4
\fBpry\fR (https://github\.com/pry/pry)
.
.IP "\(bu" 4
\fBripl\fR (https://github\.com/cldwalker/ripl)
.
.IP "" 0
.
.P
\fBbundle console\fR uses irb by default\. An alternative Pry or Ripl can be used with \fBbundle console\fR by adjusting the \fBconsole\fR Bundler setting\. Also make sure that \fBpry\fR or \fBripl\fR is in your Gemfile\.
.
.SH "EXAMPLE"
.
.nf

$ bundle config set console pry
$ bundle console
Resolving dependencies\.\.\.
[1] pry(main)>
.
.fi
.
.SH "NOTES"
This command was deprecated in Bundler 2\.1 and will be removed in 3\.0\. Use \fBbin/console\fR script, which can be generated by \fBbundle gem <NAME>\fR\.
.
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR
PK&"#[���qq6gems/bundler-2.3.27/lib/bundler/man/bundle-exec.1.ronnnu�[���bundle-exec(1) -- Execute a command in the context of the bundle
================================================================

## SYNOPSIS

`bundle exec` [--keep-file-descriptors] <command>

## DESCRIPTION

This command executes the command, making all gems specified in the
[`Gemfile(5)`][Gemfile(5)] available to `require` in Ruby programs.

Essentially, if you would normally have run something like
`rspec spec/my_spec.rb`, and you want to use the gems specified
in the [`Gemfile(5)`][Gemfile(5)] and installed via [bundle install(1)](bundle-install.1.html), you
should run `bundle exec rspec spec/my_spec.rb`.

Note that `bundle exec` does not require that an executable is
available on your shell's `$PATH`.

## OPTIONS

* `--keep-file-descriptors`:
  Exec in Ruby 2.0 began discarding non-standard file descriptors. When this
  flag is passed, exec will revert to the 1.9 behaviour of passing all file
  descriptors to the new process.

## BUNDLE INSTALL --BINSTUBS

If you use the `--binstubs` flag in [bundle install(1)](bundle-install.1.html), Bundler will
automatically create a directory (which defaults to `app_root/bin`)
containing all of the executables available from gems in the bundle.

After using `--binstubs`, `bin/rspec spec/my_spec.rb` is identical
to `bundle exec rspec spec/my_spec.rb`.

## ENVIRONMENT MODIFICATIONS

`bundle exec` makes a number of changes to the shell environment,
then executes the command you specify in full.

* make sure that it's still possible to shell out to `bundle`
  from inside a command invoked by `bundle exec` (using
  `$BUNDLE_BIN_PATH`)
* put the directory containing executables (like `rails`, `rspec`,
  `rackup`) for your bundle on `$PATH`
* make sure that if bundler is invoked in the subshell, it uses
  the same `Gemfile` (by setting `BUNDLE_GEMFILE`)
* add `-rbundler/setup` to `$RUBYOPT`, which makes sure that
  Ruby programs invoked in the subshell can see the gems in
  the bundle

It also modifies Rubygems:

* disallow loading additional gems not in the bundle
* modify the `gem` method to be a no-op if a gem matching
  the requirements is in the bundle, and to raise a
  `Gem::LoadError` if it's not
* Define `Gem.refresh` to be a no-op, since the source
  index is always frozen when using bundler, and to
  prevent gems from the system leaking into the environment
* Override `Gem.bin_path` to use the gems in the bundle,
  making system executables work
* Add all gems in the bundle into Gem.loaded_specs

Finally, `bundle exec` also implicitly modifies `Gemfile.lock` if the lockfile
and the Gemfile do not match. Bundler needs the Gemfile to determine things
such as a gem's groups, `autorequire`, and platforms, etc., and that
information isn't stored in the lockfile. The Gemfile and lockfile must be
synced in order to `bundle exec` successfully, so `bundle exec`
updates the lockfile beforehand.

### Loading

By default, when attempting to `bundle exec` to a file with a ruby shebang,
Bundler will `Kernel.load` that file instead of using `Kernel.exec`. For the
vast majority of cases, this is a performance improvement. In a rare few cases,
this could cause some subtle side-effects (such as dependence on the exact
contents of `$0` or `__FILE__`) and the optimization can be disabled by enabling
the `disable_exec_load` setting.

### Shelling out

Any Ruby code that opens a subshell (like `system`, backticks, or `%x{}`) will
automatically use the current Bundler environment. If you need to shell out to
a Ruby command that is not part of your current bundle, use the
`with_clean_env` method with a block. Any subshells created inside the block
will be given the environment present before Bundler was activated. For
example, Homebrew commands run Ruby, but don't work inside a bundle:

    Bundler.with_clean_env do
      `brew install wget`
    end

Using `with_clean_env` is also necessary if you are shelling out to a different
bundle. Any Bundler commands run in a subshell will inherit the current
Gemfile, so commands that need to run in the context of a different bundle also
need to use `with_clean_env`.

    Bundler.with_clean_env do
      Dir.chdir "/other/bundler/project" do
        `bundle exec ./script`
      end
    end

Bundler provides convenience helpers that wrap `system` and `exec`, and they
can be used like this:

    Bundler.clean_system('brew install wget')
    Bundler.clean_exec('brew install wget')


## RUBYGEMS PLUGINS

At present, the Rubygems plugin system requires all files
named `rubygems_plugin.rb` on the load path of _any_ installed
gem when any Ruby code requires `rubygems.rb`. This includes
executables installed into the system, like `rails`, `rackup`,
and `rspec`.

Since Rubygems plugins can contain arbitrary Ruby code, they
commonly end up activating themselves or their dependencies.

For instance, the `gemcutter 0.5` gem depended on `json_pure`.
If you had that version of gemcutter installed (even if
you _also_ had a newer version without this problem), Rubygems
would activate `gemcutter 0.5` and `json_pure <latest>`.

If your Gemfile(5) also contained `json_pure` (or a gem
with a dependency on `json_pure`), the latest version on
your system might conflict with the version in your
Gemfile(5), or the snapshot version in your `Gemfile.lock`.

If this happens, bundler will say:

    You have already activated json_pure 1.4.6 but your Gemfile
    requires json_pure 1.4.3. Consider using bundle exec.

In this situation, you almost certainly want to remove the
underlying gem with the problematic gem plugin. In general,
the authors of these plugins (in this case, the `gemcutter`
gem) have released newer versions that are more careful in
their plugins.

You can find a list of all the gems containing gem plugins
by running

    ruby -e "puts Gem.find_files('rubygems_plugin.rb')"

At the very least, you should remove all but the newest
version of each gem plugin, and also remove all gem plugins
that you aren't using (`gem uninstall gem_name`).
PK&"#[M��661gems/bundler-2.3.27/lib/bundler/man/bundle-init.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-INIT" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
.
.SH "SYNOPSIS"
\fBbundle init\fR [\-\-gemspec=FILE]
.
.SH "DESCRIPTION"
Init generates a default [\fBGemfile(5)\fR][Gemfile(5)] in the current working directory\. When adding a [\fBGemfile(5)\fR][Gemfile(5)] to a gem with a gemspec, the \fB\-\-gemspec\fR option will automatically add each dependency listed in the gemspec file to the newly created [\fBGemfile(5)\fR][Gemfile(5)]\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-gemspec\fR
Use the specified \.gemspec to create the [\fBGemfile(5)\fR][Gemfile(5)]
.
.SH "FILES"
Included in the default [\fBGemfile(5)\fR][Gemfile(5)] generated is the line \fB# frozen_string_literal: true\fR\. This is a magic comment supported for the first time in Ruby 2\.3\. The presence of this line results in all string literals in the file being implicitly frozen\.
.
.SH "SEE ALSO"
Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR
PK&"#[��5gems/bundler-2.3.27/lib/bundler/man/bundle-add.1.ronnnu�[���bundle-add(1) -- Add gem to the Gemfile and run bundle install
================================================================

## SYNOPSIS

`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--path=PATH] [--git=GIT] [--github=GITHUB] [--branch=BRANCH] [--ref=REF] [--skip-install] [--strict] [--optimistic]

## DESCRIPTION
Adds the named gem to the Gemfile and run `bundle install`. `bundle install` can be avoided by using the flag `--skip-install`.

Example:

bundle add rails

bundle add rails --version "< 3.0, > 1.1"

bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development"

bundle add rails --skip-install

bundle add rails --group "development, test"

## OPTIONS
* `--version`, `-v`:
  Specify version requirements(s) for the added gem.

* `--group`, `-g`:
  Specify the group(s) for the added gem. Multiple groups should be separated by commas.

* `--source`, `-s`:
  Specify the source for the added gem.

* `--require`, `-r`:
  Adds require path to gem. Provide false, or a path as a string.

* `--path`:
  Specify the file system path for the added gem.

* `--git`:
  Specify the git source for the added gem.

* `--github`:
  Specify the github source for the added gem.

* `--branch`:
  Specify the git branch for the added gem.

* `--ref`:
  Specify the git ref for the added gem.

* `--skip-install`:
  Adds the gem to the Gemfile but does not install it.

* `--optimistic`:
  Adds optimistic declaration of version.

* `--strict`:
  Adds strict declaration of version.
PK&"#[6�H��8gems/bundler-2.3.27/lib/bundler/man/bundle-doctor.1.ronnnu�[���bundle-doctor(1) -- Checks the bundle for common problems
=========================================================

## SYNOPSIS

`bundle doctor` [--quiet]
                [--gemfile=GEMFILE]

## DESCRIPTION

Checks your Gemfile and gem environment for common problems. If issues
are detected, Bundler prints them and exits status 1. Otherwise,
Bundler prints a success message and exits status 0.

Examples of common problems caught by bundle-doctor include:

* Invalid Bundler settings
* Mismatched Ruby versions
* Mismatched platforms
* Uninstalled gems
* Missing dependencies

## OPTIONS

* `--quiet`:
  Only output warnings and errors.

* `--gemfile=<gemfile>`:
  The location of the Gemfile(5) which Bundler should use. This defaults
  to a Gemfile(5) in the current working directory. In general, Bundler
  will assume that the location of the Gemfile(5) is also the project's
  root and will try to find `Gemfile.lock` and `vendor/cache` relative
  to this location.
PK&"#[�TI;;5gems/bundler-2.3.27/lib/bundler/man/bundle-viz.1.ronnnu�[���bundle-viz(1) -- Generates a visual dependency graph for your Gemfile
=====================================================================

## SYNOPSIS

`bundle viz` [--file=FILE]
             [--format=FORMAT]
             [--requirements]
             [--version]
             [--without=GROUP GROUP]

## DESCRIPTION

`viz` generates a PNG file of the current `Gemfile(5)` as a dependency graph.
`viz` requires the ruby-graphviz gem (and its dependencies).

The associated gems must also be installed via [`bundle install(1)`](bundle-install.1.html).

`viz` command was deprecated in Bundler 2.2. Use [bundler-graph plugin](https://github.com/rubygems/bundler-graph) instead.

## OPTIONS

* `--file`, `-f`:
  The name to use for the generated file. See `--format` option
* `--format`, `-F`:
  This is output format option. Supported format is png, jpg, svg, dot ...
* `--requirements`, `-R`:
  Set to show the version of each required dependency.
* `--version`, `-v`:
  Set to show each gem version.
* `--without`, `-W`:
  Exclude gems that are part of the specified named group.
PK&"#[˱[y��8gems/bundler-2.3.27/lib/bundler/man/bundle-remove.1.ronnnu�[���bundle-remove(1) -- Removes gems from the Gemfile
===========================================================================

## SYNOPSIS

`bundle remove [GEM [GEM ...]] [--install]`

## DESCRIPTION

Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If a gem cannot be removed, a warning is printed. If a gem is already absent from the Gemfile, and error is raised.

## OPTIONS

* `--install`:
  Runs `bundle install` after the given gems have been removed from the Gemfile, which ensures that both the lockfile and the installed gems on disk are also updated to remove the given gem(s).

Example:

bundle remove rails

bundle remove rails rack

bundle remove rails rack --install
PK&"#[ZۖX3R3R2gems/bundler-2.3.27/lib/bundler/man/gemfile.5.ronnnu�[���Gemfile(5) -- A format for describing gem dependencies for Ruby programs
========================================================================

## SYNOPSIS

A `Gemfile` describes the gem dependencies required to execute associated
Ruby code.

Place the `Gemfile` in the root of the directory containing the associated
code. For instance, in a Rails application, place the `Gemfile` in the same
directory as the `Rakefile`.

## SYNTAX

A `Gemfile` is evaluated as Ruby code, in a context which makes available
a number of methods used to describe the gem requirements.

## GLOBAL SOURCE

At the top of the `Gemfile`, add a single line for the `RubyGems` source that
contains the gems listed in the `Gemfile`.

    source "https://rubygems.org"

You can add only one global source. In Bundler 1.13, adding multiple global
sources was deprecated. The `source` `MUST` be a valid RubyGems repository.

To use more than one source of RubyGems, you should use [`source` block
](#BLOCK-FORM-OF-SOURCE-GIT-PATH-GROUP-and-PLATFORMS).

A source is checked for gems following the heuristics described in
[SOURCE PRIORITY][].

**Note about a behavior of the feature deprecated in Bundler 1.13**:
If a gem is found in more than one global source, Bundler
will print a warning after installing the gem indicating which source was used,
and listing the other sources where the gem is available. A specific source can
be selected for gems that need to use a non-standard repository, suppressing
this warning, by using the [`:source` option](#SOURCE) or `source` block.

### CREDENTIALS

Some gem sources require a username and password. Use [bundle config(1)](bundle-config.1.html) to set
the username and password for any of the sources that need it. The command must
be run once on each computer that will install the Gemfile, but this keeps the
credentials from being stored in plain text in version control.

    bundle config gems.example.com user:password

For some sources, like a company Gemfury account, it may be easier to
include the credentials in the Gemfile as part of the source URL.

    source "https://user:password@gems.example.com"

Credentials in the source URL will take precedence over credentials set using
`config`.

## RUBY

If your application requires a specific Ruby version or engine, specify your
requirements using the `ruby` method, with the following arguments.
All parameters are `OPTIONAL` unless otherwise specified.

### VERSION (required)

The version of Ruby that your application requires. If your application
requires an alternate Ruby engine, such as JRuby, TruffleRuby, etc., this
should be the Ruby version that the engine is compatible with.

    ruby "3.1.2"

### ENGINE

Each application _may_ specify a Ruby engine. If an engine is specified, an
engine version _must_ also be specified.

What exactly is an Engine?
  - A Ruby engine is an implementation of the Ruby language.

  - For background: the reference or original implementation of the Ruby
    programming language is called
    [Matz's Ruby Interpreter](https://en.wikipedia.org/wiki/Ruby_MRI), or  MRI
    for short. This is named after Ruby creator Yukihiro Matsumoto,
    also known as Matz. MRI is also known as CRuby, because it is written in C.
    MRI is the most widely used Ruby engine.

  - [Other implementations](https://www.ruby-lang.org/en/about/) of Ruby exist.
    Some of the more well-known implementations include
    [JRuby](http://jruby.org/) and [TruffleRuby](https://www.graalvm.org/ruby/).
    Rubinius is an alternative implementation of Ruby written in Ruby.
    JRuby is an implementation of Ruby on the JVM, short for Java Virtual Machine.
    TruffleRuby is a Ruby implementation on the GraalVM, a language toolkit built on the JVM.

### ENGINE VERSION

Each application _may_ specify a Ruby engine version. If an engine version is
specified, an engine _must_ also be specified. If the engine is "ruby" the
engine version specified _must_ match the Ruby version.

    ruby "2.6.8", engine: "jruby", engine_version: "9.3.8.0"

### PATCHLEVEL

Each application _may_ specify a Ruby patchlevel. Specifying the patchlevel has
been meaningless since Ruby 2.1.0 was released as the patchlevel is now
uniquely determined by a combination of major, minor, and teeny version numbers.

This option was implemented in Bundler 1.4.0 for Ruby 2.0 or earlier.

    ruby "3.1.2", patchlevel: "20"

## GEMS

Specify gem requirements using the `gem` method, with the following arguments.
All parameters are `OPTIONAL` unless otherwise specified.

### NAME (required)

For each gem requirement, list a single _gem_ line.

    gem "nokogiri"

### VERSION

Each _gem_ `MAY` have one or more version specifiers.

    gem "nokogiri", ">= 1.4.2"
    gem "RedCloth", ">= 4.1.0", "< 4.2.0"

### REQUIRE AS

Each _gem_ `MAY` specify files that should be used when autorequiring via
`Bundler.require`. You may pass an array with multiple files or `true` if the file
you want `required` has the same name as _gem_ or `false` to
prevent any file from being autorequired.

    gem "redis", require: ["redis/connection/hiredis", "redis"]
    gem "webmock", require: false
    gem "byebug", require: true

The argument defaults to the name of the gem. For example, these are identical:

    gem "nokogiri"
    gem "nokogiri", require: "nokogiri"
    gem "nokogiri", require: true

### GROUPS

Each _gem_ `MAY` specify membership in one or more groups. Any _gem_ that does
not specify membership in any group is placed in the `default` group.

    gem "rspec", group: :test
    gem "wirble", groups: [:development, :test]

The Bundler runtime allows its two main methods, `Bundler.setup` and
`Bundler.require`, to limit their impact to particular groups.

    # setup adds gems to Ruby's load path
    Bundler.setup                    # defaults to all groups
    require "bundler/setup"          # same as Bundler.setup
    Bundler.setup(:default)          # only set up the _default_ group
    Bundler.setup(:test)             # only set up the _test_ group (but `not` _default_)
    Bundler.setup(:default, :test)   # set up the _default_ and _test_ groups, but no others

    # require requires all of the gems in the specified groups
    Bundler.require                  # defaults to the _default_ group
    Bundler.require(:default)        # identical
    Bundler.require(:default, :test) # requires the _default_ and _test_ groups
    Bundler.require(:test)           # requires the _test_ group

The Bundler CLI allows you to specify a list of groups whose gems `bundle install` should
not install with the `without` configuration.

To specify multiple groups to ignore, specify a list of groups separated by spaces.

    bundle config set --local without test
    bundle config set --local without development test

Also, calling `Bundler.setup` with no parameters, or calling `require "bundler/setup"`
will setup all groups except for the ones you excluded via `--without` (since they
are not available).

Note that on `bundle install`, bundler downloads and evaluates all gems, in order to
create a single canonical list of all of the required gems and their dependencies.
This means that you cannot list different versions of the same gems in different
groups. For more details, see [Understanding Bundler](https://bundler.io/rationale.html).

### PLATFORMS

If a gem should only be used in a particular platform or set of platforms, you can
specify them. Platforms are essentially identical to groups, except that you do not
need to use the `--without` install-time flag to exclude groups of gems for other
platforms.

There are a number of `Gemfile` platforms:

  * `ruby`:
    C Ruby (MRI), Rubinius, or TruffleRuby, but not Windows
  * `mri`:
    C Ruby (MRI) only, but not Windows
  * `windows`:
    Windows C Ruby (MRI), including RubyInstaller 32-bit and 64-bit versions
  * `mswin`:
    Windows C Ruby (MRI), including RubyInstaller 32-bit versions
  * `mswin64`:
    Windows C Ruby (MRI), including RubyInstaller 64-bit versions
  * `rbx`:
    Rubinius
  * `jruby`:
    JRuby
  * `truffleruby`:
    TruffleRuby

On platforms `ruby`, `mri`, `mswin`, `mswin64`, and `windows`, you may
additionally specify a version by appending the major and minor version numbers
without a delimiter. For example, to specify that a gem should only be used on
platform `ruby` version 3.1, use:

    ruby_31

As with groups (above), you may specify one or more platforms:

    gem "weakling",   platforms: :jruby
    gem "ruby-debug", platforms: :mri_31
    gem "nokogiri",   platforms: [:windows_31, :jruby]

All operations involving groups ([`bundle install`](bundle-install.1.html), `Bundler.setup`,
`Bundler.require`) behave exactly the same as if any groups not
matching the current platform were explicitly excluded.

### FORCE_RUBY_PLATFORM

If you always want the pure ruby variant of a gem to be chosen over platform
specific variants, you can use the `force_ruby_platform` option:

    gem "ffi", force_ruby_platform: true

This can be handy (assuming the pure ruby variant works fine) when:

* You're having issues with the platform specific variant.
* The platform specific variant does not yet support a newer ruby (and thus has
  a `required_ruby_version` upper bound), but you still want your Gemfile{.lock}
  files to resolve under that ruby.

### SOURCE

You can select an alternate RubyGems repository for a gem using the ':source'
option.

    gem "some_internal_gem", source: "https://gems.example.com"

This forces the gem to be loaded from this source and ignores the global source
declared at the top level of the file. If the gem does not exist in this source,
it will not be installed.

Bundler will search for child dependencies of this gem by first looking in the
source selected for the parent, but if they are not found there, it will fall
back on the global source.

**Note about a behavior of the feature deprecated in Bundler 1.13**:
Selecting a specific source repository this way also suppresses the ambiguous
gem warning described above in [GLOBAL SOURCE](#GLOBAL-SOURCE).

Using the `:source` option for an individual gem will also make that source
available as a possible global source for any other gems which do not specify
explicit sources. Thus, when adding gems with explicit sources, it is
recommended that you also ensure all other gems in the Gemfile are using
explicit sources.

### GIT

If necessary, you can specify that a gem is located at a particular
git repository using the `:git` parameter. The repository can be accessed via
several protocols:

  * `HTTP(S)`:
    gem "rails", git: "https://github.com/rails/rails.git"
  * `SSH`:
    gem "rails", git: "git@github.com:rails/rails.git"
  * `git`:
    gem "rails", git: "git://github.com/rails/rails.git"

If using SSH, the user that you use to run `bundle install` `MUST` have the
appropriate keys available in their `$HOME/.ssh`.

`NOTE`: `http://` and `git://` URLs should be avoided if at all possible. These
protocols are unauthenticated, so a man-in-the-middle attacker can deliver
malicious code and compromise your system. HTTPS and SSH are strongly
preferred.

The `group`, `platforms`, and `require` options are available and behave
exactly the same as they would for a normal gem.

A git repository `SHOULD` have at least one file, at the root of the
directory containing the gem, with the extension `.gemspec`. This file
`MUST` contain a valid gem specification, as expected by the `gem build`
command.

If a git repository does not have a `.gemspec`, bundler will attempt to
create one, but it will not contain any dependencies, executables, or
C extension compilation instructions. As a result, it may fail to properly
integrate into your application.

If a git repository does have a `.gemspec` for the gem you attached it
to, a version specifier, if provided, means that the git repository is
only valid if the `.gemspec` specifies a version matching the version
specifier. If not, bundler will print a warning.

    gem "rails", "2.3.8", git: "https://github.com/rails/rails.git"
    # bundle install will fail, because the .gemspec in the rails
    # repository's master branch specifies version 3.0.0

If a git repository does `not` have a `.gemspec` for the gem you attached
it to, a version specifier `MUST` be provided. Bundler will use this
version in the simple `.gemspec` it creates.

Git repositories support a number of additional options.

  * `branch`, `tag`, and `ref`:
    You `MUST` only specify at most one of these options. The default
    is `branch: "master"`.  For example:

      gem "rails", git: "https://github.com/rails/rails.git", branch: "5-0-stable"

      gem "rails", git: "https://github.com/rails/rails.git", tag: "v5.0.0"

      gem "rails", git: "https://github.com/rails/rails.git", ref: "4aded"

  * `submodules`:
    For reference, a [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules)
    lets you have another git repository within a subfolder of your repository.
    Specify `submodules: true` to cause bundler to expand any
    submodules included in the git repository

If a git repository contains multiple `.gemspecs`, each `.gemspec`
represents a gem located at the same place in the file system as
the `.gemspec`.

    |~rails                   [git root]
    | |-rails.gemspec         [rails gem located here]
    |~actionpack
    | |-actionpack.gemspec    [actionpack gem located here]
    |~activesupport
    | |-activesupport.gemspec [activesupport gem located here]
    |...

To install a gem located in a git repository, bundler changes to
the directory containing the gemspec, runs `gem build name.gemspec`
and then installs the resulting gem. The `gem build` command,
which comes standard with Rubygems, evaluates the `.gemspec` in
the context of the directory in which it is located.

### GIT SOURCE

A custom git source can be defined via the `git_source` method. Provide the source's name
as an argument, and a block which receives a single argument and interpolates it into a
string to return the full repo address:

    git_source(:stash){ |repo_name| "https://stash.corp.acme.pl/#{repo_name}.git" }
    gem 'rails', stash: 'forks/rails'

In addition, if you wish to choose a specific branch:

    gem "rails", stash: "forks/rails", branch: "branch_name"

### GITHUB

`NOTE`: This shorthand should be avoided until Bundler 2.0, since it
currently expands to an insecure `git://` URL. This allows a
man-in-the-middle attacker to compromise your system.

If the git repository you want to use is hosted on GitHub and is public, you can use the
:github shorthand to specify the github username and repository name (without the
trailing ".git"), separated by a slash. If both the username and repository name are the
same, you can omit one.

    gem "rails", github: "rails/rails"
    gem "rails", github: "rails"

Are both equivalent to

    gem "rails", git: "https://github.com/rails/rails.git"

Since the `github` method is a specialization of `git_source`, it accepts a `:branch` named argument.

You can also directly pass a pull request URL:

    gem "rails", github: "https://github.com/rails/rails/pull/43753"

Which is equivalent to:

    gem "rails", github: "rails/rails", branch: "refs/pull/43753/head"

### GIST

If the git repository you want to use is hosted as a GitHub Gist and is public, you can use
the :gist shorthand to specify the gist identifier (without the trailing ".git").

    gem "the_hatch", gist: "4815162342"

Is equivalent to:

    gem "the_hatch", git: "https://gist.github.com/4815162342.git"

Since the `gist` method is a specialization of `git_source`, it accepts a `:branch` named argument.

### BITBUCKET

If the git repository you want to use is hosted on Bitbucket and is public, you can use the
:bitbucket shorthand to specify the bitbucket username and repository name (without the
trailing ".git"), separated by a slash. If both the username and repository name are the
same, you can omit one.

    gem "rails", bitbucket: "rails/rails"
    gem "rails", bitbucket: "rails"

Are both equivalent to

    gem "rails", git: "https://rails@bitbucket.org/rails/rails.git"

Since the `bitbucket` method is a specialization of `git_source`, it accepts a `:branch` named argument.

### PATH

You can specify that a gem is located in a particular location
on the file system. Relative paths are resolved relative to the
directory containing the `Gemfile`.

Similar to the semantics of the `:git` option, the `:path`
option requires that the directory in question either contains
a `.gemspec` for the gem, or that you specify an explicit
version that bundler should use.

Unlike `:git`, bundler does not compile C extensions for
gems specified as paths.

    gem "rails", path: "vendor/rails"

If you would like to use multiple local gems directly from the filesystem, you can set a global `path` option to the path containing the gem's files. This will automatically load gemspec files from subdirectories.

    path 'components' do
      gem 'admin_ui'
      gem 'public_ui'
    end

## BLOCK FORM OF SOURCE, GIT, PATH, GROUP and PLATFORMS

The `:source`, `:git`, `:path`, `:group`, and `:platforms` options may be
applied to a group of gems by using block form.

    source "https://gems.example.com" do
      gem "some_internal_gem"
      gem "another_internal_gem"
    end

    git "https://github.com/rails/rails.git" do
      gem "activesupport"
      gem "actionpack"
    end

    platforms :ruby do
      gem "ruby-debug"
      gem "sqlite3"
    end

    group :development, optional: true do
      gem "wirble"
      gem "faker"
    end

In the case of the group block form the :optional option can be given
to prevent a group from being installed unless listed in the `--with`
option given to the `bundle install` command.

In the case of the `git` block form, the `:ref`, `:branch`, `:tag`,
and `:submodules` options may be passed to the `git` method, and
all gems in the block will inherit those options.

The presence of a `source` block in a Gemfile also makes that source
available as a possible global source for any other gems which do not specify
explicit sources. Thus, when defining source blocks, it is
recommended that you also ensure all other gems in the Gemfile are using
explicit sources, either via source blocks or `:source` directives on
individual gems.

## INSTALL_IF

The `install_if` method allows gems to be installed based on a proc or lambda.
This is especially useful for optional gems that can only be used if certain
software is installed or some other conditions are met.

    install_if -> { RUBY_PLATFORM =~ /darwin/ } do
      gem "pasteboard"
    end

## GEMSPEC

The [`.gemspec`](http://guides.rubygems.org/specification-reference/) file is where
 you provide metadata about your gem to Rubygems. Some required Gemspec
 attributes include the name, description, and homepage of your gem. This is
 also where you specify the dependencies your gem needs to run.

If you wish to use Bundler to help install dependencies for a gem while it is
being developed, use the `gemspec` method to pull in the dependencies listed in
the `.gemspec` file.

The `gemspec` method adds any runtime dependencies as gem requirements in the
default group. It also adds development dependencies as gem requirements in the
`development` group. Finally, it adds a gem requirement on your project (`path:
'.'`). In conjunction with `Bundler.setup`, this allows you to require project
files in your test code as you would if the project were installed as a gem; you
need not manipulate the load path manually or require project files via relative
paths.

The `gemspec` method supports optional `:path`, `:glob`, `:name`, and `:development_group`
options, which control where bundler looks for the `.gemspec`, the glob it uses to look
for the gemspec (defaults to: "{,*,*/*}.gemspec"), what named `.gemspec` it uses
(if more than one is present), and which group development dependencies are included in.

When a `gemspec` dependency encounters version conflicts during resolution, the
local version under development will always be selected -- even if there are
remote versions that better match other requirements for the `gemspec` gem.

## SOURCE PRIORITY

When attempting to locate a gem to satisfy a gem requirement,
bundler uses the following priority order:

  1. The source explicitly attached to the gem (using `:source`, `:path`, or
     `:git`)
  2. For implicit gems (dependencies of explicit gems), any source, git, or path
     repository declared on the parent. This results in bundler prioritizing the
     ActiveSupport gem from the Rails git repository over ones from
     `rubygems.org`
  3. If neither of the above conditions are met, the global source will be used.
     If multiple global sources are specified, they will be prioritized from
     last to first, but this is deprecated since Bundler 1.13, so Bundler prints
     a warning and will abort with an error in the future.
PK&"#[�#K���1gems/bundler-2.3.27/lib/bundler/man/bundle-info.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-INFO" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-info\fR \- Show information for the given gem in your bundle
.
.SH "SYNOPSIS"
\fBbundle info\fR [GEM] [\-\-path]
.
.SH "DESCRIPTION"
Print the basic information about the provided GEM such as homepage, version, path and summary\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-path\fR
Print the path of the given gem

PK&"#[�5���6gems/bundler-2.3.27/lib/bundler/man/bundle-open.1.ronnnu�[���bundle-open(1) -- Opens the source directory for a gem in your bundle
=====================================================================

## SYNOPSIS

`bundle open` [GEM]

## DESCRIPTION

Opens the source directory of the provided GEM in your editor.

For this to work the `EDITOR` or `BUNDLER_EDITOR` environment variable has to
be set.

Example:

    bundle open 'rack'

Will open the source directory for the 'rack' gem in your bundle.
PK&"#[�:�RPP3gems/bundler-2.3.27/lib/bundler/man/bundle-remove.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-REMOVE" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-remove\fR \- Removes gems from the Gemfile
.
.SH "SYNOPSIS"
\fBbundle remove [GEM [GEM \.\.\.]] [\-\-install]\fR
.
.SH "DESCRIPTION"
Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid\. If a gem cannot be removed, a warning is printed\. If a gem is already absent from the Gemfile, and error is raised\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-install\fR
Runs \fBbundle install\fR after the given gems have been removed from the Gemfile, which ensures that both the lockfile and the installed gems on disk are also updated to remove the given gem(s)\.
.
.P
Example:
.
.P
bundle remove rails
.
.P
bundle remove rails rack
.
.P
bundle remove rails rack \-\-install
PK&"#[=��q��1gems/bundler-2.3.27/lib/bundler/man/bundle-show.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-SHOW" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
.
.SH "SYNOPSIS"
\fBbundle show\fR [GEM] [\-\-paths]
.
.SH "DESCRIPTION"
Without the [GEM] option, \fBshow\fR will print a list of the names and versions of all gems that are required by your [\fBGemfile(5)\fR][Gemfile(5)], sorted by name\.
.
.P
Calling show with [GEM] will list the exact location of that gem on your machine\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-paths\fR
List the paths of all gems that are required by your [\fBGemfile(5)\fR][Gemfile(5)], sorted by gem name\.

PK&"#[�I�OO5gems/bundler-2.3.27/lib/bundler/man/bundle-binstubs.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-BINSTUBS" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
.
.SH "SYNOPSIS"
\fBbundle binstubs\fR \fIGEM_NAME\fR [\-\-force] [\-\-path PATH] [\-\-standalone]
.
.SH "DESCRIPTION"
Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it into \fBbin/\fR\. Binstubs are a shortcut\-or alternative\- to always using \fBbundle exec\fR\. This gives you a file that can be run directly, and one that will always run the correct gem version used by the application\.
.
.P
For example, if you run \fBbundle binstubs rspec\-core\fR, Bundler will create the file \fBbin/rspec\fR\. That file will contain enough code to load Bundler, tell it to load the bundled gems, and then run rspec\.
.
.P
This command generates binstubs for executables in \fBGEM_NAME\fR\. Binstubs are put into \fBbin\fR, or the \fB\-\-path\fR directory if one has been set\. Calling binstubs with [GEM [GEM]] will create binstubs for all given gems\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-force\fR
Overwrite existing binstubs if they exist\.
.
.TP
\fB\-\-path\fR
The location to install the specified binstubs to\. This defaults to \fBbin\fR\.
.
.TP
\fB\-\-standalone\fR
Makes binstubs that can work without depending on Rubygems or Bundler at runtime\.
.
.TP
\fB\-\-shebang\fR
Specify a different shebang executable name than the default (default \'ruby\')
.
.TP
\fB\-\-all\fR
Create binstubs for all gems in the bundle\.

PK&"#[9IG���6gems/bundler-2.3.27/lib/bundler/man/bundle-lock.1.ronnnu�[���bundle-lock(1) -- Creates / Updates a lockfile without installing
=================================================================

## SYNOPSIS

`bundle lock` [--update]
              [--local]
              [--print]
              [--lockfile=PATH]
              [--full-index]
              [--add-platform]
              [--remove-platform]
              [--patch]
              [--minor]
              [--major]
              [--strict]
              [--conservative]

## DESCRIPTION

Lock the gems specified in Gemfile.

## OPTIONS

* `--update=<*gems>`:
  Ignores the existing lockfile. Resolve then updates lockfile. Taking a list
  of gems or updating all gems if no list is given.

* `--local`:
  Do not attempt to connect to `rubygems.org`. Instead, Bundler will use the
  gems already present in Rubygems' cache or in `vendor/cache`. Note that if a
  appropriate platform-specific gem exists on `rubygems.org` it will not be
  found.

* `--print`:
  Prints the lockfile to STDOUT instead of writing to the file system.

* `--lockfile=<path>`:
  The path where the lockfile should be written to.

* `--full-index`:
  Fall back to using the single-file index of all gems.

* `--add-platform`:
  Add a new platform to the lockfile, re-resolving for the addition of that
  platform.

* `--remove-platform`:
  Remove a platform from the lockfile.

* `--patch`:
  If updating, prefer updating only to next patch version.

* `--minor`:
  If updating, prefer updating only to next minor version.

* `--major`:
  If updating, prefer updating to next major version (default).

* `--strict`:
  If updating, do not allow any gem to be updated past latest --patch | --minor | --major.

* `--conservative`:
  If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated.

## UPDATING ALL GEMS

If you run `bundle lock` with `--update` option without list of gems, bundler will
ignore any previously installed gems and resolve all dependencies again based
on the latest versions of all gems available in the sources.

## UPDATING A LIST OF GEMS

Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of
the gems that you specified locked to the versions in the `Gemfile.lock`.

For instance, you only want to update `nokogiri`, run `bundle lock --update nokogiri`.

Bundler will update `nokogiri` and any of its dependencies, but leave the rest of the
gems that you specified locked to the versions in the `Gemfile.lock`.

## SUPPORTING OTHER PLATFORMS

If you want your bundle to support platforms other than the one you're running
locally, you can run `bundle lock --add-platform PLATFORM` to add PLATFORM to
the lockfile, force bundler to re-resolve and consider the new platform when
picking gems, all without needing to have a machine that matches PLATFORM handy
to install those platform-specific gems on.

For a full explanation of gem platforms, see `gem help platform`.

## PATCH LEVEL OPTIONS

See [bundle update(1)](bundle-update.1.html) for details.
PK&"#[�3�pp7gems/bundler-2.3.27/lib/bundler/man/bundle-clean.1.ronnnu�[���bundle-clean(1) -- Cleans up unused gems in your bundler directory
==================================================================

## SYNOPSIS

`bundle clean` [--dry-run] [--force]

## DESCRIPTION

This command will remove all unused gems in your bundler directory. This is
useful when you have made many changes to your gem dependencies.

## OPTIONS

* `--dry-run`:
  Print the changes, but do not clean the unused gems.
* `--force`:
  Forces cleaning up unused gems even if Bundler is configured to use globally installed gems. As a consequence, removes all system gems except for the ones in the current application.
PK&"#[l����:gems/bundler-2.3.27/lib/bundler/man/bundle-platform.1.ronnnu�[���bundle-platform(1) -- Displays platform compatibility information
=================================================================

## SYNOPSIS

`bundle platform` [--ruby]

## DESCRIPTION

`platform` displays information from your Gemfile, Gemfile.lock, and Ruby
VM about your platform.

For instance, using this Gemfile(5):

    source "https://rubygems.org"

    ruby "3.1.2"

    gem "rack"

If you run `bundle platform` on Ruby 3.1.2, it displays the following output:

    Your platform is: x86_64-linux

    Your app has gems that work on these platforms:
    * arm64-darwin-21
    * ruby
    * x64-mingw-ucrt
    * x86_64-linux

    Your Gemfile specifies a Ruby version requirement:
    * ruby 3.1.2

    Your current platform satisfies the Ruby version requirement.

`platform` lists all the platforms in your `Gemfile.lock` as well as the
`ruby` directive if applicable from your Gemfile(5). It also lets you know
if the `ruby` directive requirement has been met. If `ruby` directive doesn't
match the running Ruby VM, it tells you what part does not.

## OPTIONS

* `--ruby`:
  It will display the ruby directive information, so you don't have to
  parse it from the Gemfile(5).

## SEE ALSO

* [bundle-lock(1)](bundle-lock.1.ronn)
PK&"#[^A�I��0gems/bundler-2.3.27/lib/bundler/man/bundle-viz.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-VIZ" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
.
.SH "SYNOPSIS"
\fBbundle viz\fR [\-\-file=FILE] [\-\-format=FORMAT] [\-\-requirements] [\-\-version] [\-\-without=GROUP GROUP]
.
.SH "DESCRIPTION"
\fBviz\fR generates a PNG file of the current \fBGemfile(5)\fR as a dependency graph\. \fBviz\fR requires the ruby\-graphviz gem (and its dependencies)\.
.
.P
The associated gems must also be installed via \fBbundle install(1)\fR \fIbundle\-install\.1\.html\fR\.
.
.P
\fBviz\fR command was deprecated in Bundler 2\.2\. Use bundler\-graph plugin \fIhttps://github\.com/rubygems/bundler\-graph\fR instead\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-file\fR, \fB\-f\fR
The name to use for the generated file\. See \fB\-\-format\fR option
.
.TP
\fB\-\-format\fR, \fB\-F\fR
This is output format option\. Supported format is png, jpg, svg, dot \.\.\.
.
.TP
\fB\-\-requirements\fR, \fB\-R\fR
Set to show the version of each required dependency\.
.
.TP
\fB\-\-version\fR, \fB\-v\fR
Set to show each gem version\.
.
.TP
\fB\-\-without\fR, \fB\-W\fR
Exclude gems that are part of the specified named group\.

PK&"#[����4gems/bundler-2.3.27/lib/bundler/man/bundle-version.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-VERSION" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-version\fR \- Prints Bundler version information
.
.SH "SYNOPSIS"
\fBbundle version\fR
.
.SH "DESCRIPTION"
Prints Bundler version information\.
.
.SH "OPTIONS"
No options\.
.
.SH "EXAMPLE"
Print the version of Bundler with build date and commit hash of the in the Git source\.
.
.IP "" 4
.
.nf

bundle version
.
.fi
.
.IP "" 0
.
.P
shows \fBBundler version 2\.3\.21 (2022\-08\-24 commit d54be5fdd8)\fR for example\.
.
.P
cf\. \fBbundle \-\-version\fR shows \fBBundler version 2\.3\.21\fR\.
PK&"#[$�q���3gems/bundler-2.3.27/lib/bundler/man/bundle-doctor.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-DOCTOR" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-doctor\fR \- Checks the bundle for common problems
.
.SH "SYNOPSIS"
\fBbundle doctor\fR [\-\-quiet] [\-\-gemfile=GEMFILE]
.
.SH "DESCRIPTION"
Checks your Gemfile and gem environment for common problems\. If issues are detected, Bundler prints them and exits status 1\. Otherwise, Bundler prints a success message and exits status 0\.
.
.P
Examples of common problems caught by bundle\-doctor include:
.
.IP "\(bu" 4
Invalid Bundler settings
.
.IP "\(bu" 4
Mismatched Ruby versions
.
.IP "\(bu" 4
Mismatched platforms
.
.IP "\(bu" 4
Uninstalled gems
.
.IP "\(bu" 4
Missing dependencies
.
.IP "" 0
.
.SH "OPTIONS"
.
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.
.TP
\fB\-\-gemfile=<gemfile>\fR
The location of the Gemfile(5) which Bundler should use\. This defaults to a Gemfile(5) in the current working directory\. In general, Bundler will assume that the location of the Gemfile(5) is also the project\'s root and will try to find \fBGemfile\.lock\fR and \fBvendor/cache\fR relative to this location\.

PK&"#[��O�U�U3gems/bundler-2.3.27/lib/bundler/man/bundle-config.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-CONFIG" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-config\fR \- Set bundler configuration options
.
.SH "SYNOPSIS"
\fBbundle config\fR list
.
.br
\fBbundle config\fR [get] NAME
.
.br
\fBbundle config\fR [set] NAME VALUE
.
.br
\fBbundle config\fR unset NAME
.
.SH "DESCRIPTION"
This command allows you to interact with Bundler\'s configuration system\.
.
.P
Bundler loads configuration settings in this order:
.
.IP "1." 4
Local config (\fB<project_root>/\.bundle/config\fR or \fB$BUNDLE_APP_CONFIG/config\fR)
.
.IP "2." 4
Environmental variables (\fBENV\fR)
.
.IP "3." 4
Global config (\fB~/\.bundle/config\fR)
.
.IP "4." 4
Bundler default config
.
.IP "" 0
.
.P
Executing \fBbundle config list\fR with will print a list of all bundler configuration for the current bundle, and where that configuration was set\.
.
.P
Executing \fBbundle config get <name>\fR will print the value of that configuration setting, and where it was set\.
.
.P
Executing \fBbundle config set <name> <value>\fR defaults to setting \fBlocal\fR configuration if executing from within a local application, otherwise it will set \fBglobal\fR configuration\. See \fB\-\-local\fR and \fB\-\-global\fR options below\.
.
.P
Executing \fBbundle config set \-\-local <name> <value>\fR will set that configuration in the directory for the local application\. The configuration will be stored in \fB<project_root>/\.bundle/config\fR\. If \fBBUNDLE_APP_CONFIG\fR is set, the configuration will be stored in \fB$BUNDLE_APP_CONFIG/config\fR\.
.
.P
Executing \fBbundle config set \-\-global <name> <value>\fR will set that configuration to the value specified for all bundles executed as the current user\. The configuration will be stored in \fB~/\.bundle/config\fR\. If \fIname\fR already is set, \fIname\fR will be overridden and user will be warned\.
.
.P
Executing \fBbundle config unset <name>\fR will delete the configuration in both local and global sources\.
.
.P
Executing \fBbundle config unset \-\-global <name>\fR will delete the configuration only from the user configuration\.
.
.P
Executing \fBbundle config unset \-\-local <name>\fR will delete the configuration only from the local application\.
.
.P
Executing bundle with the \fBBUNDLE_IGNORE_CONFIG\fR environment variable set will cause it to ignore all configuration\.
.
.SH "REMEMBERING OPTIONS"
Flags passed to \fBbundle install\fR or the Bundler runtime, such as \fB\-\-path foo\fR or \fB\-\-without production\fR, are remembered between commands and saved to your local application\'s configuration (normally, \fB\./\.bundle/config\fR)\.
.
.P
However, this will be changed in bundler 3, so it\'s better not to rely on this behavior\. If these options must be remembered, it\'s better to set them using \fBbundle config\fR (e\.g\., \fBbundle config set \-\-local path foo\fR)\.
.
.P
The options that can be configured are:
.
.TP
\fBbin\fR
Creates a directory (defaults to \fB~/bin\fR) and place any executables from the gem there\. These executables run in Bundler\'s context\. If used, you might add this directory to your environment\'s \fBPATH\fR variable\. For instance, if the \fBrails\fR gem comes with a \fBrails\fR executable, this flag will create a \fBbin/rails\fR executable that ensures that all referred dependencies will be resolved using the bundled gems\.
.
.TP
\fBdeployment\fR
In deployment mode, Bundler will \'roll\-out\' the bundle for \fBproduction\fR use\. Please check carefully if you want to have this option enabled in \fBdevelopment\fR or \fBtest\fR environments\.
.
.TP
\fBonly\fR
A space\-separated list of groups to install only gems of the specified groups\.
.
.TP
\fBpath\fR
The location to install the specified gems to\. This defaults to Rubygems\' setting\. Bundler shares this location with Rubygems, \fBgem install \.\.\.\fR will have gem installed there, too\. Therefore, gems installed without a \fB\-\-path \.\.\.\fR setting will show up by calling \fBgem list\fR\. Accordingly, gems installed to other locations will not get listed\.
.
.TP
\fBwithout\fR
A space\-separated list of groups referencing gems to skip during installation\.
.
.TP
\fBwith\fR
A space\-separated list of \fBoptional\fR groups referencing gems to include during installation\.
.
.SH "BUILD OPTIONS"
You can use \fBbundle config\fR to give Bundler the flags to pass to the gem installer every time bundler tries to install a particular gem\.
.
.P
A very common example, the \fBmysql\fR gem, requires Snow Leopard users to pass configuration flags to \fBgem install\fR to specify where to find the \fBmysql_config\fR executable\.
.
.IP "" 4
.
.nf

gem install mysql \-\- \-\-with\-mysql\-config=/usr/local/mysql/bin/mysql_config
.
.fi
.
.IP "" 0
.
.P
Since the specific location of that executable can change from machine to machine, you can specify these flags on a per\-machine basis\.
.
.IP "" 4
.
.nf

bundle config set \-\-global build\.mysql \-\-with\-mysql\-config=/usr/local/mysql/bin/mysql_config
.
.fi
.
.IP "" 0
.
.P
After running this command, every time bundler needs to install the \fBmysql\fR gem, it will pass along the flags you specified\.
.
.SH "CONFIGURATION KEYS"
Configuration keys in bundler have two forms: the canonical form and the environment variable form\.
.
.P
For instance, passing the \fB\-\-without\fR flag to bundle install(1) \fIbundle\-install\.1\.html\fR prevents Bundler from installing certain groups specified in the Gemfile(5)\. Bundler persists this value in \fBapp/\.bundle/config\fR so that calls to \fBBundler\.setup\fR do not try to find gems from the \fBGemfile\fR that you didn\'t install\. Additionally, subsequent calls to bundle install(1) \fIbundle\-install\.1\.html\fR remember this setting and skip those groups\.
.
.P
The canonical form of this configuration is \fB"without"\fR\. To convert the canonical form to the environment variable form, capitalize it, and prepend \fBBUNDLE_\fR\. The environment variable form of \fB"without"\fR is \fBBUNDLE_WITHOUT\fR\.
.
.P
Any periods in the configuration keys must be replaced with two underscores when setting it via environment variables\. The configuration key \fBlocal\.rack\fR becomes the environment variable \fBBUNDLE_LOCAL__RACK\fR\.
.
.SH "LIST OF AVAILABLE KEYS"
The following is a list of all configuration keys and their purpose\. You can learn more about their operation in bundle install(1) \fIbundle\-install\.1\.html\fR\.
.
.IP "\(bu" 4
\fBallow_deployment_source_credential_changes\fR (\fBBUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES\fR): When in deployment mode, allow changing the credentials to a gem\'s source\. Ex: \fBhttps://some\.host\.com/gems/path/\fR \-> \fBhttps://user_name:password@some\.host\.com/gems/path\fR
.
.IP "\(bu" 4
\fBallow_offline_install\fR (\fBBUNDLE_ALLOW_OFFLINE_INSTALL\fR): Allow Bundler to use cached data when installing without network access\.
.
.IP "\(bu" 4
\fBauto_clean_without_path\fR (\fBBUNDLE_AUTO_CLEAN_WITHOUT_PATH\fR): Automatically run \fBbundle clean\fR after installing when an explicit \fBpath\fR has not been set and Bundler is not installing into the system gems\.
.
.IP "\(bu" 4
\fBauto_install\fR (\fBBUNDLE_AUTO_INSTALL\fR): Automatically run \fBbundle install\fR when gems are missing\.
.
.IP "\(bu" 4
\fBbin\fR (\fBBUNDLE_BIN\fR): Install executables from gems in the bundle to the specified directory\. Defaults to \fBfalse\fR\.
.
.IP "\(bu" 4
\fBcache_all\fR (\fBBUNDLE_CACHE_ALL\fR): Cache all gems, including path and git gems\. This needs to be explicitly configured on bundler 1 and bundler 2, but will be the default on bundler 3\.
.
.IP "\(bu" 4
\fBcache_all_platforms\fR (\fBBUNDLE_CACHE_ALL_PLATFORMS\fR): Cache gems for all platforms\.
.
.IP "\(bu" 4
\fBcache_path\fR (\fBBUNDLE_CACHE_PATH\fR): The directory that bundler will place cached gems in when running \fBbundle package\fR, and that bundler will look in when installing gems\. Defaults to \fBvendor/cache\fR\.
.
.IP "\(bu" 4
\fBclean\fR (\fBBUNDLE_CLEAN\fR): Whether Bundler should run \fBbundle clean\fR automatically after \fBbundle install\fR\.
.
.IP "\(bu" 4
\fBconsole\fR (\fBBUNDLE_CONSOLE\fR): The console that \fBbundle console\fR starts\. Defaults to \fBirb\fR\.
.
.IP "\(bu" 4
\fBdefault_install_uses_path\fR (\fBBUNDLE_DEFAULT_INSTALL_USES_PATH\fR): Whether a \fBbundle install\fR without an explicit \fB\-\-path\fR argument defaults to installing gems in \fB\.bundle\fR\.
.
.IP "\(bu" 4
\fBdeployment\fR (\fBBUNDLE_DEPLOYMENT\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\.
.
.IP "\(bu" 4
\fBdisable_checksum_validation\fR (\fBBUNDLE_DISABLE_CHECKSUM_VALIDATION\fR): Allow installing gems even if they do not match the checksum provided by RubyGems\.
.
.IP "\(bu" 4
\fBdisable_exec_load\fR (\fBBUNDLE_DISABLE_EXEC_LOAD\fR): Stop Bundler from using \fBload\fR to launch an executable in\-process in \fBbundle exec\fR\.
.
.IP "\(bu" 4
\fBdisable_local_branch_check\fR (\fBBUNDLE_DISABLE_LOCAL_BRANCH_CHECK\fR): Allow Bundler to use a local git override without a branch specified in the Gemfile\.
.
.IP "\(bu" 4
\fBdisable_local_revision_check\fR (\fBBUNDLE_DISABLE_LOCAL_REVISION_CHECK\fR): Allow Bundler to use a local git override without checking if the revision present in the lockfile is present in the repository\.
.
.IP "\(bu" 4
\fBdisable_shared_gems\fR (\fBBUNDLE_DISABLE_SHARED_GEMS\fR): Stop Bundler from accessing gems installed to RubyGems\' normal location\.
.
.IP "\(bu" 4
\fBdisable_version_check\fR (\fBBUNDLE_DISABLE_VERSION_CHECK\fR): Stop Bundler from checking if a newer Bundler version is available on rubygems\.org\.
.
.IP "\(bu" 4
\fBforce_ruby_platform\fR (\fBBUNDLE_FORCE_RUBY_PLATFORM\fR): Ignore the current machine\'s platform and install only \fBruby\fR platform gems\. As a result, gems with native extensions will be compiled from source\.
.
.IP "\(bu" 4
\fBfrozen\fR (\fBBUNDLE_FROZEN\fR): Disallow changes to the \fBGemfile\fR\. When the \fBGemfile\fR is changed and the lockfile has not been updated, running Bundler commands will be blocked\. Defaults to \fBtrue\fR when \fB\-\-deployment\fR is used\.
.
.IP "\(bu" 4
\fBgem\.github_username\fR (\fBBUNDLE_GEM__GITHUB_USERNAME\fR): Sets a GitHub username or organization to be used in \fBREADME\fR file when you create a new gem via \fBbundle gem\fR command\. It can be overridden by passing an explicit \fB\-\-github\-username\fR flag to \fBbundle gem\fR\.
.
.IP "\(bu" 4
\fBgem\.push_key\fR (\fBBUNDLE_GEM__PUSH_KEY\fR): Sets the \fB\-\-key\fR parameter for \fBgem push\fR when using the \fBrake release\fR command with a private gemstash server\.
.
.IP "\(bu" 4
\fBgemfile\fR (\fBBUNDLE_GEMFILE\fR): The name of the file that bundler should use as the \fBGemfile\fR\. This location of this file also sets the root of the project, which is used to resolve relative paths in the \fBGemfile\fR, among other things\. By default, bundler will search up from the current working directory until it finds a \fBGemfile\fR\.
.
.IP "\(bu" 4
\fBglobal_gem_cache\fR (\fBBUNDLE_GLOBAL_GEM_CACHE\fR): Whether Bundler should cache all gems globally, rather than locally to the installing Ruby installation\.
.
.IP "\(bu" 4
\fBignore_funding_requests\fR (\fBBUNDLE_IGNORE_FUNDING_REQUESTS\fR): When set, no funding requests will be printed\.
.
.IP "\(bu" 4
\fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\.
.
.IP "\(bu" 4
\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\.
.
.IP "\(bu" 4
\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to the number of available processors\.
.
.IP "\(bu" 4
\fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\.
.
.IP "\(bu" 4
\fBno_prune\fR (\fBBUNDLE_NO_PRUNE\fR): Whether Bundler should leave outdated gems unpruned when caching\.
.
.IP "\(bu" 4
\fBonly\fR (\fBBUNDLE_ONLY\fR): A space\-separated list of groups to install only gems of the specified groups\.
.
.IP "\(bu" 4
\fBpath\fR (\fBBUNDLE_PATH\fR): The location on disk where all gems in your bundle will be located regardless of \fB$GEM_HOME\fR or \fB$GEM_PATH\fR values\. Bundle gems not found in this location will be installed by \fBbundle install\fR\. Defaults to \fBGem\.dir\fR\. When \-\-deployment is used, defaults to vendor/bundle\.
.
.IP "\(bu" 4
\fBpath\.system\fR (\fBBUNDLE_PATH__SYSTEM\fR): Whether Bundler will install gems into the default system path (\fBGem\.dir\fR)\.
.
.IP "\(bu" 4
\fBpath_relative_to_cwd\fR (\fBBUNDLE_PATH_RELATIVE_TO_CWD\fR) Makes \fB\-\-path\fR relative to the CWD instead of the \fBGemfile\fR\.
.
.IP "\(bu" 4
\fBplugins\fR (\fBBUNDLE_PLUGINS\fR): Enable Bundler\'s experimental plugin system\.
.
.IP "\(bu" 4
\fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
.
.IP "\(bu" 4
\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\.
.
.IP "\(bu" 4
\fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\.
.
.IP "\(bu" 4
\fBretry\fR (\fBBUNDLE_RETRY\fR): The number of times to retry failed network requests\. Defaults to \fB3\fR\.
.
.IP "\(bu" 4
\fBsetup_makes_kernel_gem_public\fR (\fBBUNDLE_SETUP_MAKES_KERNEL_GEM_PUBLIC\fR): Have \fBBundler\.setup\fR make the \fBKernel#gem\fR method public, even though RubyGems declares it as private\.
.
.IP "\(bu" 4
\fBshebang\fR (\fBBUNDLE_SHEBANG\fR): The program name that should be invoked for generated binstubs\. Defaults to the ruby install name used to generate the binstub\.
.
.IP "\(bu" 4
\fBsilence_deprecations\fR (\fBBUNDLE_SILENCE_DEPRECATIONS\fR): Whether Bundler should silence deprecation warnings for behavior that will be changed in the next major version\.
.
.IP "\(bu" 4
\fBsilence_root_warning\fR (\fBBUNDLE_SILENCE_ROOT_WARNING\fR): Silence the warning Bundler prints when installing gems as root\.
.
.IP "\(bu" 4
\fBssl_ca_cert\fR (\fBBUNDLE_SSL_CA_CERT\fR): Path to a designated CA certificate file or folder containing multiple certificates for trusted CAs in PEM format\.
.
.IP "\(bu" 4
\fBssl_client_cert\fR (\fBBUNDLE_SSL_CLIENT_CERT\fR): Path to a designated file containing a X\.509 client certificate and key in PEM format\.
.
.IP "\(bu" 4
\fBssl_verify_mode\fR (\fBBUNDLE_SSL_VERIFY_MODE\fR): The SSL verification mode Bundler uses when making HTTPS requests\. Defaults to verify peer\.
.
.IP "\(bu" 4
\fBsuppress_install_using_messages\fR (\fBBUNDLE_SUPPRESS_INSTALL_USING_MESSAGES\fR): Avoid printing \fBUsing \.\.\.\fR messages during installation when the version of a gem has not changed\.
.
.IP "\(bu" 4
\fBsystem_bindir\fR (\fBBUNDLE_SYSTEM_BINDIR\fR): The location where RubyGems installs binstubs\. Defaults to \fBGem\.bindir\fR\.
.
.IP "\(bu" 4
\fBtimeout\fR (\fBBUNDLE_TIMEOUT\fR): The seconds allowed before timing out for network requests\. Defaults to \fB10\fR\.
.
.IP "\(bu" 4
\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\.
.
.IP "\(bu" 4
\fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\.
.
.IP "\(bu" 4
\fBwith\fR (\fBBUNDLE_WITH\fR): A \fB:\fR\-separated list of groups whose gems bundler should install\.
.
.IP "\(bu" 4
\fBwithout\fR (\fBBUNDLE_WITHOUT\fR): A \fB:\fR\-separated list of groups whose gems bundler should not install\.
.
.IP "" 0
.
.P
In general, you should set these settings per\-application by using the applicable flag to the bundle install(1) \fIbundle\-install\.1\.html\fR or bundle cache(1) \fIbundle\-cache\.1\.html\fR command\.
.
.P
You can set them globally either via environment variables or \fBbundle config\fR, whichever is preferable for your setup\. If you use both, environment variables will take preference over global settings\.
.
.SH "LOCAL GIT REPOS"
Bundler also allows you to work against a git repository locally instead of using the remote version\. This can be achieved by setting up a local override:
.
.IP "" 4
.
.nf

bundle config set \-\-local local\.GEM_NAME /path/to/local/git/repository
.
.fi
.
.IP "" 0
.
.P
For example, in order to use a local Rack repository, a developer could call:
.
.IP "" 4
.
.nf

bundle config set \-\-local local\.rack ~/Work/git/rack
.
.fi
.
.IP "" 0
.
.P
Now instead of checking out the remote git repository, the local override will be used\. Similar to a path source, every time the local git repository change, changes will be automatically picked up by Bundler\. This means a commit in the local git repo will update the revision in the \fBGemfile\.lock\fR to the local git repo revision\. This requires the same attention as git submodules\. Before pushing to the remote, you need to ensure the local override was pushed, otherwise you may point to a commit that only exists in your local machine\. You\'ll also need to CGI escape your usernames and passwords as well\.
.
.P
Bundler does many checks to ensure a developer won\'t work with invalid references\. Particularly, we force a developer to specify a branch in the \fBGemfile\fR in order to use this feature\. If the branch specified in the \fBGemfile\fR and the current branch in the local git repository do not match, Bundler will abort\. This ensures that a developer is always working against the correct branches, and prevents accidental locking to a different branch\.
.
.P
Finally, Bundler also ensures that the current revision in the \fBGemfile\.lock\fR exists in the local git repository\. By doing this, Bundler forces you to fetch the latest changes in the remotes\.
.
.SH "MIRRORS OF GEM SOURCES"
Bundler supports overriding gem sources with mirrors\. This allows you to configure rubygems\.org as the gem source in your Gemfile while still using your mirror to fetch gems\.
.
.IP "" 4
.
.nf

bundle config set \-\-global mirror\.SOURCE_URL MIRROR_URL
.
.fi
.
.IP "" 0
.
.P
For example, to use a mirror of https://rubygems\.org hosted at https://example\.org:
.
.IP "" 4
.
.nf

bundle config set \-\-global mirror\.https://rubygems\.org https://example\.org
.
.fi
.
.IP "" 0
.
.P
Each mirror also provides a fallback timeout setting\. If the mirror does not respond within the fallback timeout, Bundler will try to use the original server instead of the mirror\.
.
.IP "" 4
.
.nf

bundle config set \-\-global mirror\.SOURCE_URL\.fallback_timeout TIMEOUT
.
.fi
.
.IP "" 0
.
.P
For example, to fall back to rubygems\.org after 3 seconds:
.
.IP "" 4
.
.nf

bundle config set \-\-global mirror\.https://rubygems\.org\.fallback_timeout 3
.
.fi
.
.IP "" 0
.
.P
The default fallback timeout is 0\.1 seconds, but the setting can currently only accept whole seconds (for example, 1, 15, or 30)\.
.
.SH "CREDENTIALS FOR GEM SOURCES"
Bundler allows you to configure credentials for any gem source, which allows you to avoid putting secrets into your Gemfile\.
.
.IP "" 4
.
.nf

bundle config set \-\-global SOURCE_HOSTNAME USERNAME:PASSWORD
.
.fi
.
.IP "" 0
.
.P
For example, to save the credentials of user \fBclaudette\fR for the gem source at \fBgems\.longerous\.com\fR, you would run:
.
.IP "" 4
.
.nf

bundle config set \-\-global gems\.longerous\.com claudette:s00pers3krit
.
.fi
.
.IP "" 0
.
.P
Or you can set the credentials as an environment variable like this:
.
.IP "" 4
.
.nf

export BUNDLE_GEMS__LONGEROUS__COM="claudette:s00pers3krit"
.
.fi
.
.IP "" 0
.
.P
For gems with a git source with HTTP(S) URL you can specify credentials like so:
.
.IP "" 4
.
.nf

bundle config set \-\-global https://github\.com/rubygems/rubygems\.git username:password
.
.fi
.
.IP "" 0
.
.P
Or you can set the credentials as an environment variable like so:
.
.IP "" 4
.
.nf

export BUNDLE_GITHUB__COM=username:password
.
.fi
.
.IP "" 0
.
.P
This is especially useful for private repositories on hosts such as GitHub, where you can use personal OAuth tokens:
.
.IP "" 4
.
.nf

export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x\-oauth\-basic
.
.fi
.
.IP "" 0
.
.P
Note that any configured credentials will be redacted by informative commands such as \fBbundle config list\fR or \fBbundle config get\fR, unless you use the \fB\-\-parseable\fR flag\. This is to avoid unintentionally leaking credentials when copy\-pasting bundler output\.
.
.P
Also note that to guarantee a sane mapping between valid environment variable names and valid host names, bundler makes the following transformations:
.
.IP "\(bu" 4
Any \fB\-\fR characters in a host name are mapped to a triple dash (\fB___\fR) in the corresponding environment variable\.
.
.IP "\(bu" 4
Any \fB\.\fR characters in a host name are mapped to a double dash (\fB__\fR) in the corresponding environment variable\.
.
.IP "" 0
.
.P
This means that if you have a gem server named \fBmy\.gem\-host\.com\fR, you\'ll need to use the \fBBUNDLE_MY__GEM___HOST__COM\fR variable to configure credentials for it through ENV\.
.
.SH "CONFIGURE BUNDLER DIRECTORIES"
Bundler\'s home, config, cache and plugin directories are able to be configured through environment variables\. The default location for Bundler\'s home directory is \fB~/\.bundle\fR, which all directories inherit from by default\. The following outlines the available environment variables and their default values
.
.IP "" 4
.
.nf

BUNDLE_USER_HOME : $HOME/\.bundle
BUNDLE_USER_CACHE : $BUNDLE_USER_HOME/cache
BUNDLE_USER_CONFIG : $BUNDLE_USER_HOME/config
BUNDLE_USER_PLUGIN : $BUNDLE_USER_HOME/plugin
.
.fi
.
.IP "" 0

PK&"#[�;㊅
�
2gems/bundler-2.3.27/lib/bundler/man/bundle-cache.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-CACHE" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
.
.SH "SYNOPSIS"
\fBbundle cache\fR
.
.P
alias: \fBpackage\fR, \fBpack\fR
.
.SH "DESCRIPTION"
Copy all of the \fB\.gem\fR files needed to run the application into the \fBvendor/cache\fR directory\. In the future, when running [bundle install(1)][bundle\-install], use the gems in the cache in preference to the ones on \fBrubygems\.org\fR\.
.
.SH "GIT AND PATH GEMS"
The \fBbundle cache\fR command can also package \fB:git\fR and \fB:path\fR dependencies besides \.gem files\. This needs to be explicitly enabled via the \fB\-\-all\fR option\. Once used, the \fB\-\-all\fR option will be remembered\.
.
.SH "SUPPORT FOR MULTIPLE PLATFORMS"
When using gems that have different packages for different platforms, Bundler supports caching of gems for other platforms where the Gemfile has been resolved (i\.e\. present in the lockfile) in \fBvendor/cache\fR\. This needs to be enabled via the \fB\-\-all\-platforms\fR option\. This setting will be remembered in your local bundler configuration\.
.
.SH "REMOTE FETCHING"
By default, if you run \fBbundle install(1)\fR](bundle\-install\.1\.html) after running bundle cache(1) \fIbundle\-cache\.1\.html\fR, bundler will still connect to \fBrubygems\.org\fR to check whether a platform\-specific gem exists for any of the gems in \fBvendor/cache\fR\.
.
.P
For instance, consider this Gemfile(5):
.
.IP "" 4
.
.nf

source "https://rubygems\.org"

gem "nokogiri"
.
.fi
.
.IP "" 0
.
.P
If you run \fBbundle cache\fR under C Ruby, bundler will retrieve the version of \fBnokogiri\fR for the \fB"ruby"\fR platform\. If you deploy to JRuby and run \fBbundle install\fR, bundler is forced to check to see whether a \fB"java"\fR platformed \fBnokogiri\fR exists\.
.
.P
Even though the \fBnokogiri\fR gem for the Ruby platform is \fItechnically\fR acceptable on JRuby, it has a C extension that does not run on JRuby\. As a result, bundler will, by default, still connect to \fBrubygems\.org\fR to check whether it has a version of one of your gems more specific to your platform\.
.
.P
This problem is also not limited to the \fB"java"\fR platform\. A similar (common) problem can happen when developing on Windows and deploying to Linux, or even when developing on OSX and deploying to Linux\.
.
.P
If you know for sure that the gems packaged in \fBvendor/cache\fR are appropriate for the platform you are on, you can run \fBbundle install \-\-local\fR to skip checking for more appropriate gems, and use the ones in \fBvendor/cache\fR\.
.
.P
One way to be sure that you have the right platformed versions of all your gems is to run \fBbundle cache\fR on an identical machine and check in the gems\. For instance, you can run \fBbundle cache\fR on an identical staging box during your staging process, and check in the \fBvendor/cache\fR before deploying to production\.
.
.P
By default, bundle cache(1) \fIbundle\-cache\.1\.html\fR fetches and also installs the gems to the default location\. To package the dependencies to \fBvendor/cache\fR without installing them to the local install location, you can run \fBbundle cache \-\-no\-install\fR\.
.
.SH "HISTORY"
In Bundler 2\.1, \fBcache\fR took in the functionalities of \fBpackage\fR and now \fBpackage\fR and \fBpack\fR are aliases of \fBcache\fR\.
PK&"#[�S�LL8gems/bundler-2.3.27/lib/bundler/man/bundle-config.1.ronnnu�[���bundle-config(1) -- Set bundler configuration options
=====================================================

## SYNOPSIS

`bundle config` list<br>
`bundle config` [get] NAME<br>
`bundle config` [set] NAME VALUE<br>
`bundle config` unset NAME

## DESCRIPTION

This command allows you to interact with Bundler's configuration system.

Bundler loads configuration settings in this order:

1. Local config (`<project_root>/.bundle/config` or `$BUNDLE_APP_CONFIG/config`)
2. Environmental variables (`ENV`)
3. Global config (`~/.bundle/config`)
4. Bundler default config

Executing `bundle config list` with will print a list of all bundler
configuration for the current bundle, and where that configuration
was set.

Executing `bundle config get <name>` will print the value of that configuration
setting, and where it was set.

Executing `bundle config set <name> <value>` defaults to setting `local`
configuration if executing from within a local application, otherwise it will
set `global` configuration. See `--local` and `--global` options below.

Executing `bundle config set --local <name> <value>` will set that configuration
in the directory for the local application. The configuration will be stored in
`<project_root>/.bundle/config`. If `BUNDLE_APP_CONFIG` is set, the configuration
will be stored in `$BUNDLE_APP_CONFIG/config`.

Executing `bundle config set --global <name> <value>` will set that
configuration to the value specified for all bundles executed as the current
user. The configuration will be stored in `~/.bundle/config`. If <name> already
is set, <name> will be overridden and user will be warned.

Executing `bundle config unset <name>` will delete the configuration in both
local and global sources.

Executing `bundle config unset --global <name>` will delete the configuration
only from the user configuration.

Executing `bundle config unset --local <name>` will delete the configuration
only from the local application.

Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
cause it to ignore all configuration.

## REMEMBERING OPTIONS

Flags passed to `bundle install` or the Bundler runtime, such as `--path foo` or
`--without production`, are remembered between commands and saved to your local
application's configuration (normally, `./.bundle/config`).

However, this will be changed in bundler 3, so it's better not to rely on this
behavior. If these options must be remembered, it's better to set them using
`bundle config` (e.g., `bundle config set --local path foo`).

The options that can be configured are:

* `bin`:
   Creates a directory (defaults to `~/bin`) and place any executables from the
   gem there. These executables run in Bundler's context. If used, you might add
   this directory to your environment's `PATH` variable. For instance, if the
   `rails` gem comes with a `rails` executable, this flag will create a
   `bin/rails` executable that ensures that all referred dependencies will be
   resolved using the bundled gems.

* `deployment`:
   In deployment mode, Bundler will 'roll-out' the bundle for
   `production` use. Please check carefully if you want to have this option
   enabled in `development` or `test` environments.

* `only`:
   A space-separated list of groups to install only gems of the specified groups.

* `path`:
   The location to install the specified gems to. This defaults to Rubygems'
   setting. Bundler shares this location with Rubygems, `gem install ...` will
   have gem installed there, too. Therefore, gems installed without a
   `--path ...` setting will show up by calling `gem list`. Accordingly, gems
   installed to other locations will not get listed.

* `without`:
   A space-separated list of groups referencing gems to skip during installation.

* `with`:
  A space-separated list of **optional** groups referencing gems to include during installation.

## BUILD OPTIONS

You can use `bundle config` to give Bundler the flags to pass to the gem
installer every time bundler tries to install a particular gem.

A very common example, the `mysql` gem, requires Snow Leopard users to
pass configuration flags to `gem install` to specify where to find the
`mysql_config` executable.

    gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

Since the specific location of that executable can change from machine
to machine, you can specify these flags on a per-machine basis.

    bundle config set --global build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config

After running this command, every time bundler needs to install the
`mysql` gem, it will pass along the flags you specified.

## CONFIGURATION KEYS

Configuration keys in bundler have two forms: the canonical form and the
environment variable form.

For instance, passing the `--without` flag to [bundle install(1)](bundle-install.1.html)
prevents Bundler from installing certain groups specified in the Gemfile(5). Bundler
persists this value in `app/.bundle/config` so that calls to `Bundler.setup`
do not try to find gems from the `Gemfile` that you didn't install. Additionally,
subsequent calls to [bundle install(1)](bundle-install.1.html) remember this setting
and skip those groups.

The canonical form of this configuration is `"without"`. To convert the canonical
form to the environment variable form, capitalize it, and prepend `BUNDLE_`. The
environment variable form of `"without"` is `BUNDLE_WITHOUT`.

Any periods in the configuration keys must be replaced with two underscores when
setting it via environment variables. The configuration key `local.rack` becomes
the environment variable `BUNDLE_LOCAL__RACK`.

## LIST OF AVAILABLE KEYS

The following is a list of all configuration keys and their purpose. You can
learn more about their operation in [bundle install(1)](bundle-install.1.html).

* `allow_deployment_source_credential_changes` (`BUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES`):
   When in deployment mode, allow changing the credentials to a gem's source.
   Ex: `https://some.host.com/gems/path/` -> `https://user_name:password@some.host.com/gems/path`
* `allow_offline_install` (`BUNDLE_ALLOW_OFFLINE_INSTALL`):
   Allow Bundler to use cached data when installing without network access.
* `auto_clean_without_path` (`BUNDLE_AUTO_CLEAN_WITHOUT_PATH`):
   Automatically run `bundle clean` after installing when an explicit `path`
   has not been set and Bundler is not installing into the system gems.
* `auto_install` (`BUNDLE_AUTO_INSTALL`):
   Automatically run `bundle install` when gems are missing.
* `bin` (`BUNDLE_BIN`):
   Install executables from gems in the bundle to the specified directory.
   Defaults to `false`.
* `cache_all` (`BUNDLE_CACHE_ALL`):
   Cache all gems, including path and git gems. This needs to be explicitly
   configured on bundler 1 and bundler 2, but will be the default on bundler 3.
* `cache_all_platforms` (`BUNDLE_CACHE_ALL_PLATFORMS`):
   Cache gems for all platforms.
* `cache_path` (`BUNDLE_CACHE_PATH`):
   The directory that bundler will place cached gems in when running
   <code>bundle package</code>, and that bundler will look in when installing gems.
   Defaults to `vendor/cache`.
* `clean` (`BUNDLE_CLEAN`):
   Whether Bundler should run `bundle clean` automatically after
   `bundle install`.
* `console` (`BUNDLE_CONSOLE`):
   The console that `bundle console` starts. Defaults to `irb`.
* `default_install_uses_path` (`BUNDLE_DEFAULT_INSTALL_USES_PATH`):
   Whether a `bundle install` without an explicit `--path` argument defaults
   to installing gems in `.bundle`.
* `deployment` (`BUNDLE_DEPLOYMENT`):
   Disallow changes to the `Gemfile`. When the `Gemfile` is changed and the
   lockfile has not been updated, running Bundler commands will be blocked.
* `disable_checksum_validation` (`BUNDLE_DISABLE_CHECKSUM_VALIDATION`):
   Allow installing gems even if they do not match the checksum provided by
   RubyGems.
* `disable_exec_load` (`BUNDLE_DISABLE_EXEC_LOAD`):
   Stop Bundler from using `load` to launch an executable in-process in
   `bundle exec`.
* `disable_local_branch_check` (`BUNDLE_DISABLE_LOCAL_BRANCH_CHECK`):
   Allow Bundler to use a local git override without a branch specified in the
   Gemfile.
* `disable_local_revision_check` (`BUNDLE_DISABLE_LOCAL_REVISION_CHECK`):
   Allow Bundler to use a local git override without checking if the revision
   present in the lockfile is present in the repository.
* `disable_shared_gems` (`BUNDLE_DISABLE_SHARED_GEMS`):
   Stop Bundler from accessing gems installed to RubyGems' normal location.
* `disable_version_check` (`BUNDLE_DISABLE_VERSION_CHECK`):
   Stop Bundler from checking if a newer Bundler version is available on
   rubygems.org.
* `force_ruby_platform` (`BUNDLE_FORCE_RUBY_PLATFORM`):
   Ignore the current machine's platform and install only `ruby` platform gems.
   As a result, gems with native extensions will be compiled from source.
* `frozen` (`BUNDLE_FROZEN`):
   Disallow changes to the `Gemfile`. When the `Gemfile` is changed and the
   lockfile has not been updated, running Bundler commands will be blocked.
   Defaults to `true` when `--deployment` is used.
* `gem.github_username` (`BUNDLE_GEM__GITHUB_USERNAME`):
   Sets a GitHub username or organization to be used in `README` file when you
   create a new gem via `bundle gem` command. It can be overridden by passing an
   explicit `--github-username` flag to `bundle gem`.
* `gem.push_key` (`BUNDLE_GEM__PUSH_KEY`):
   Sets the `--key` parameter for `gem push` when using the `rake release`
   command with a private gemstash server.
* `gemfile` (`BUNDLE_GEMFILE`):
   The name of the file that bundler should use as the `Gemfile`. This location
   of this file also sets the root of the project, which is used to resolve
   relative paths in the `Gemfile`, among other things. By default, bundler
   will search up from the current working directory until it finds a
   `Gemfile`.
* `global_gem_cache` (`BUNDLE_GLOBAL_GEM_CACHE`):
   Whether Bundler should cache all gems globally, rather than locally to the
   installing Ruby installation.
* `ignore_funding_requests` (`BUNDLE_IGNORE_FUNDING_REQUESTS`):
   When set, no funding requests will be printed.
* `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`):
   When set, no post install messages will be printed. To silence a single gem,
   use dot notation like `ignore_messages.httparty true`.
* `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`):
   Generate a `gems.rb` instead of a `Gemfile` when running `bundle init`.
* `jobs` (`BUNDLE_JOBS`):
   The number of gems Bundler can install in parallel. Defaults to the number of
   available processors.
* `no_install` (`BUNDLE_NO_INSTALL`):
   Whether `bundle package` should skip installing gems.
* `no_prune` (`BUNDLE_NO_PRUNE`):
   Whether Bundler should leave outdated gems unpruned when caching.
* `only` (`BUNDLE_ONLY`):
   A space-separated list of groups to install only gems of the specified groups.
* `path` (`BUNDLE_PATH`):
   The location on disk where all gems in your bundle will be located regardless
   of `$GEM_HOME` or `$GEM_PATH` values. Bundle gems not found in this location
   will be installed by `bundle install`. Defaults to `Gem.dir`. When --deployment
   is used, defaults to vendor/bundle.
* `path.system` (`BUNDLE_PATH__SYSTEM`):
   Whether Bundler will install gems into the default system path (`Gem.dir`).
* `path_relative_to_cwd` (`BUNDLE_PATH_RELATIVE_TO_CWD`)
   Makes `--path` relative to the CWD instead of the `Gemfile`.
* `plugins` (`BUNDLE_PLUGINS`):
   Enable Bundler's experimental plugin system.
* `prefer_patch` (BUNDLE_PREFER_PATCH):
   Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
* `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`):
   Print only version number from `bundler --version`.
* `redirect` (`BUNDLE_REDIRECT`):
   The number of redirects allowed for network requests. Defaults to `5`.
* `retry` (`BUNDLE_RETRY`):
   The number of times to retry failed network requests. Defaults to `3`.
* `setup_makes_kernel_gem_public` (`BUNDLE_SETUP_MAKES_KERNEL_GEM_PUBLIC`):
   Have `Bundler.setup` make the `Kernel#gem` method public, even though
   RubyGems declares it as private.
* `shebang` (`BUNDLE_SHEBANG`):
   The program name that should be invoked for generated binstubs. Defaults to
   the ruby install name used to generate the binstub.
* `silence_deprecations` (`BUNDLE_SILENCE_DEPRECATIONS`):
   Whether Bundler should silence deprecation warnings for behavior that will
   be changed in the next major version.
* `silence_root_warning` (`BUNDLE_SILENCE_ROOT_WARNING`):
   Silence the warning Bundler prints when installing gems as root.
* `ssl_ca_cert` (`BUNDLE_SSL_CA_CERT`):
   Path to a designated CA certificate file or folder containing multiple
   certificates for trusted CAs in PEM format.
* `ssl_client_cert` (`BUNDLE_SSL_CLIENT_CERT`):
   Path to a designated file containing a X.509 client certificate
   and key in PEM format.
* `ssl_verify_mode` (`BUNDLE_SSL_VERIFY_MODE`):
   The SSL verification mode Bundler uses when making HTTPS requests.
   Defaults to verify peer.
* `suppress_install_using_messages` (`BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES`):
   Avoid printing `Using ...` messages during installation when the version of
   a gem has not changed.
* `system_bindir` (`BUNDLE_SYSTEM_BINDIR`):
   The location where RubyGems installs binstubs. Defaults to `Gem.bindir`.
* `timeout` (`BUNDLE_TIMEOUT`):
   The seconds allowed before timing out for network requests. Defaults to `10`.
* `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`):
   Require passing `--all` to `bundle update` when everything should be updated,
   and disallow passing no options to `bundle update`.
* `user_agent` (`BUNDLE_USER_AGENT`):
   The custom user agent fragment Bundler includes in API requests.
* `with` (`BUNDLE_WITH`):
   A `:`-separated list of groups whose gems bundler should install.
* `without` (`BUNDLE_WITHOUT`):
   A `:`-separated list of groups whose gems bundler should not install.

In general, you should set these settings per-application by using the applicable
flag to the [bundle install(1)](bundle-install.1.html) or [bundle cache(1)](bundle-cache.1.html) command.

You can set them globally either via environment variables or `bundle config`,
whichever is preferable for your setup. If you use both, environment variables
will take preference over global settings.

## LOCAL GIT REPOS

Bundler also allows you to work against a git repository locally
instead of using the remote version. This can be achieved by setting
up a local override:

    bundle config set --local local.GEM_NAME /path/to/local/git/repository

For example, in order to use a local Rack repository, a developer could call:

    bundle config set --local local.rack ~/Work/git/rack

Now instead of checking out the remote git repository, the local
override will be used. Similar to a path source, every time the local
git repository change, changes will be automatically picked up by
Bundler. This means a commit in the local git repo will update the
revision in the `Gemfile.lock` to the local git repo revision. This
requires the same attention as git submodules. Before pushing to
the remote, you need to ensure the local override was pushed, otherwise
you may point to a commit that only exists in your local machine.
You'll also need to CGI escape your usernames and passwords as well.

Bundler does many checks to ensure a developer won't work with
invalid references. Particularly, we force a developer to specify
a branch in the `Gemfile` in order to use this feature. If the branch
specified in the `Gemfile` and the current branch in the local git
repository do not match, Bundler will abort. This ensures that
a developer is always working against the correct branches, and prevents
accidental locking to a different branch.

Finally, Bundler also ensures that the current revision in the
`Gemfile.lock` exists in the local git repository. By doing this, Bundler
forces you to fetch the latest changes in the remotes.

## MIRRORS OF GEM SOURCES

Bundler supports overriding gem sources with mirrors. This allows you to
configure rubygems.org as the gem source in your Gemfile while still using your
mirror to fetch gems.

    bundle config set --global mirror.SOURCE_URL MIRROR_URL

For example, to use a mirror of https://rubygems.org hosted at https://example.org:

    bundle config set --global mirror.https://rubygems.org https://example.org

Each mirror also provides a fallback timeout setting. If the mirror does not
respond within the fallback timeout, Bundler will try to use the original
server instead of the mirror.

    bundle config set --global mirror.SOURCE_URL.fallback_timeout TIMEOUT

For example, to fall back to rubygems.org after 3 seconds:

    bundle config set --global mirror.https://rubygems.org.fallback_timeout 3

The default fallback timeout is 0.1 seconds, but the setting can currently
only accept whole seconds (for example, 1, 15, or 30).

## CREDENTIALS FOR GEM SOURCES

Bundler allows you to configure credentials for any gem source, which allows
you to avoid putting secrets into your Gemfile.

    bundle config set --global SOURCE_HOSTNAME USERNAME:PASSWORD

For example, to save the credentials of user `claudette` for the gem source at
`gems.longerous.com`, you would run:

    bundle config set --global gems.longerous.com claudette:s00pers3krit

Or you can set the credentials as an environment variable like this:

    export BUNDLE_GEMS__LONGEROUS__COM="claudette:s00pers3krit"

For gems with a git source with HTTP(S) URL you can specify credentials like so:

    bundle config set --global https://github.com/rubygems/rubygems.git username:password

Or you can set the credentials as an environment variable like so:

    export BUNDLE_GITHUB__COM=username:password

This is especially useful for private repositories on hosts such as GitHub,
where you can use personal OAuth tokens:

    export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x-oauth-basic

Note that any configured credentials will be redacted by informative commands
such as `bundle config list` or `bundle config get`, unless you use the
`--parseable` flag. This is to avoid unintentionally leaking credentials when
copy-pasting bundler output.

Also note that to guarantee a sane mapping between valid environment variable
names and valid host names, bundler makes the following transformations:

* Any `-` characters in a host name are mapped to a triple dash (`___`) in the
  corresponding environment variable.

* Any `.` characters in a host name are mapped to a double dash (`__`) in the
  corresponding environment variable.

This means that if you have a gem server named `my.gem-host.com`, you'll need to
use the `BUNDLE_MY__GEM___HOST__COM` variable to configure credentials for it
through ENV.

## CONFIGURE BUNDLER DIRECTORIES

Bundler's home, config, cache and plugin directories are able to be configured
through environment variables. The default location for Bundler's home directory is
`~/.bundle`, which all directories inherit from by default. The following
outlines the available environment variables and their default values

    BUNDLE_USER_HOME : $HOME/.bundle
    BUNDLE_USER_CACHE : $BUNDLE_USER_HOME/cache
    BUNDLE_USER_CONFIG : $BUNDLE_USER_HOME/config
    BUNDLE_USER_PLUGIN : $BUNDLE_USER_HOME/plugin
PK&"#[���qq6gems/bundler-2.3.27/lib/bundler/man/bundle-info.1.ronnnu�[���bundle-info(1) -- Show information for the given gem in your bundle
=========================================================================

## SYNOPSIS

`bundle info` [GEM]
              [--path]

## DESCRIPTION

Print the basic information about the provided GEM such as homepage, version,
path and summary.

## OPTIONS

* `--path`:
Print the path of the given gem
PK&"#[��C&U6U63gems/bundler-2.3.27/lib/bundler/man/bundle-update.1nu�[���.\" generated with Ronn/v0.7.3
.\" http://github.com/rtomayko/ronn/tree/0.7.3
.
.TH "BUNDLE\-UPDATE" "1" "October 2022" "" ""
.
.SH "NAME"
\fBbundle\-update\fR \- Update your gems to the latest available versions
.
.SH "SYNOPSIS"
\fBbundle update\fR \fI*gems\fR [\-\-all] [\-\-group=NAME] [\-\-source=NAME] [\-\-local] [\-\-ruby] [\-\-bundler[=VERSION]] [\-\-full\-index] [\-\-jobs=JOBS] [\-\-quiet] [\-\-patch|\-\-minor|\-\-major] [\-\-redownload] [\-\-strict] [\-\-conservative]
.
.SH "DESCRIPTION"
Update the gems specified (all gems, if \fB\-\-all\fR flag is used), ignoring the previously installed gems specified in the \fBGemfile\.lock\fR\. In general, you should use bundle install(1) \fIbundle\-install\.1\.html\fR to install the same exact gems and versions across machines\.
.
.P
You would use \fBbundle update\fR to explicitly update the version of a gem\.
.
.SH "OPTIONS"
.
.TP
\fB\-\-all\fR
Update all gems specified in Gemfile\.
.
.TP
\fB\-\-group=<name>\fR, \fB\-g=[<name>]\fR
Only update the gems in the specified group\. For instance, you can update all gems in the development group with \fBbundle update \-\-group development\fR\. You can also call \fBbundle update rails \-\-group test\fR to update the rails gem and all gems in the test group, for example\.
.
.TP
\fB\-\-source=<name>\fR
The name of a \fB:git\fR or \fB:path\fR source used in the Gemfile(5)\. For instance, with a \fB:git\fR source of \fBhttp://github\.com/rails/rails\.git\fR, you would call \fBbundle update \-\-source rails\fR
.
.TP
\fB\-\-local\fR
Do not attempt to fetch gems remotely and use the gem cache instead\.
.
.TP
\fB\-\-ruby\fR
Update the locked version of Ruby to the current version of Ruby\.
.
.TP
\fB\-\-bundler\fR
Update the locked version of bundler to the invoked bundler version\.
.
.TP
\fB\-\-full\-index\fR
Fall back to using the single\-file index of all gems\.
.
.TP
\fB\-\-jobs=[<number>]\fR, \fB\-j[<number>]\fR
Specify the number of jobs to run in parallel\. The default is the number of available processors\.
.
.TP
\fB\-\-retry=[<number>]\fR
Retry failed network or git requests for \fInumber\fR times\.
.
.TP
\fB\-\-quiet\fR
Only output warnings and errors\.
.
.TP
\fB\-\-redownload\fR
Force downloading every gem\.
.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.
.TP
\fB\-\-strict\fR
Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR | \fB\-\-major\fR\.
.
.TP
\fB\-\-conservative\fR
Use bundle install conservative update behavior and do not allow indirect dependencies to be updated\.
.
.SH "UPDATING ALL GEMS"
If you run \fBbundle update \-\-all\fR, bundler will ignore any previously installed gems and resolve all dependencies again based on the latest versions of all gems available in the sources\.
.
.P
Consider the following Gemfile(5):
.
.IP "" 4
.
.nf

source "https://rubygems\.org"

gem "rails", "3\.0\.0\.rc"
gem "nokogiri"
.
.fi
.
.IP "" 0
.
.P
When you run bundle install(1) \fIbundle\-install\.1\.html\fR the first time, bundler will resolve all of the dependencies, all the way down, and install what you need:
.
.IP "" 4
.
.nf

Fetching gem metadata from https://rubygems\.org/\.\.\.\.\.\.\.\.\.
Resolving dependencies\.\.\.
Installing builder 2\.1\.2
Installing abstract 1\.0\.0
Installing rack 1\.2\.8
Using bundler 1\.7\.6
Installing rake 10\.4\.0
Installing polyglot 0\.3\.5
Installing mime\-types 1\.25\.1
Installing i18n 0\.4\.2
Installing mini_portile 0\.6\.1
Installing tzinfo 0\.3\.42
Installing rack\-mount 0\.6\.14
Installing rack\-test 0\.5\.7
Installing treetop 1\.4\.15
Installing thor 0\.14\.6
Installing activesupport 3\.0\.0\.rc
Installing erubis 2\.6\.6
Installing activemodel 3\.0\.0\.rc
Installing arel 0\.4\.0
Installing mail 2\.2\.20
Installing activeresource 3\.0\.0\.rc
Installing actionpack 3\.0\.0\.rc
Installing activerecord 3\.0\.0\.rc
Installing actionmailer 3\.0\.0\.rc
Installing railties 3\.0\.0\.rc
Installing rails 3\.0\.0\.rc
Installing nokogiri 1\.6\.5

Bundle complete! 2 Gemfile dependencies, 26 gems total\.
Use `bundle show [gemname]` to see where a bundled gem is installed\.
.
.fi
.
.IP "" 0
.
.P
As you can see, even though you have two gems in the Gemfile(5), your application needs 26 different gems in order to run\. Bundler remembers the exact versions it installed in \fBGemfile\.lock\fR\. The next time you run bundle install(1) \fIbundle\-install\.1\.html\fR, bundler skips the dependency resolution and installs the same gems as it installed last time\.
.
.P
After checking in the \fBGemfile\.lock\fR into version control and cloning it on another machine, running bundle install(1) \fIbundle\-install\.1\.html\fR will \fIstill\fR install the gems that you installed last time\. You don\'t need to worry that a new release of \fBerubis\fR or \fBmail\fR changes the gems you use\.
.
.P
However, from time to time, you might want to update the gems you are using to the newest versions that still match the gems in your Gemfile(5)\.
.
.P
To do this, run \fBbundle update \-\-all\fR, which will ignore the \fBGemfile\.lock\fR, and resolve all the dependencies again\. Keep in mind that this process can result in a significantly different set of the 25 gems, based on the requirements of new gems that the gem authors released since the last time you ran \fBbundle update \-\-all\fR\.
.
.SH "UPDATING A LIST OF GEMS"
Sometimes, you want to update a single gem in the Gemfile(5), and leave the rest of the gems that you specified locked to the versions in the \fBGemfile\.lock\fR\.
.
.P
For instance, in the scenario above, imagine that \fBnokogiri\fR releases version \fB1\.4\.4\fR, and you want to update it \fIwithout\fR updating Rails and all of its dependencies\. To do this, run \fBbundle update nokogiri\fR\.
.
.P
Bundler will update \fBnokogiri\fR and any of its dependencies, but leave alone Rails and its dependencies\.
.
.SH "OVERLAPPING DEPENDENCIES"
Sometimes, multiple gems declared in your Gemfile(5) are satisfied by the same second\-level dependency\. For instance, consider the case of \fBthin\fR and \fBrack\-perftools\-profiler\fR\.
.
.IP "" 4
.
.nf

source "https://rubygems\.org"

gem "thin"
gem "rack\-perftools\-profiler"
.
.fi
.
.IP "" 0
.
.P
The \fBthin\fR gem depends on \fBrack >= 1\.0\fR, while \fBrack\-perftools\-profiler\fR depends on \fBrack ~> 1\.0\fR\. If you run bundle install, you get:
.
.IP "" 4
.
.nf

Fetching source index for https://rubygems\.org/
Installing daemons (1\.1\.0)
Installing eventmachine (0\.12\.10) with native extensions
Installing open4 (1\.0\.1)
Installing perftools\.rb (0\.4\.7) with native extensions
Installing rack (1\.2\.1)
Installing rack\-perftools_profiler (0\.0\.2)
Installing thin (1\.2\.7) with native extensions
Using bundler (1\.0\.0\.rc\.3)
.
.fi
.
.IP "" 0
.
.P
In this case, the two gems have their own set of dependencies, but they share \fBrack\fR in common\. If you run \fBbundle update thin\fR, bundler will update \fBdaemons\fR, \fBeventmachine\fR and \fBrack\fR, which are dependencies of \fBthin\fR, but not \fBopen4\fR or \fBperftools\.rb\fR, which are dependencies of \fBrack\-perftools_profiler\fR\. Note that \fBbundle update thin\fR will update \fBrack\fR even though it\'s \fIalso\fR a dependency of \fBrack\-perftools_profiler\fR\.
.
.P
In short, by default, when you update a gem using \fBbundle update\fR, bundler will update all dependencies of that gem, including those that are also dependencies of another gem\.
.
.P
To prevent updating indirect dependencies, prior to version 1\.14 the only option was the \fBCONSERVATIVE UPDATING\fR behavior in bundle install(1) \fIbundle\-install\.1\.html\fR:
.
.P
In this scenario, updating the \fBthin\fR version manually in the Gemfile(5), and then running bundle install(1) \fIbundle\-install\.1\.html\fR will only update \fBdaemons\fR and \fBeventmachine\fR, but not \fBrack\fR\. For more information, see the \fBCONSERVATIVE UPDATING\fR section of bundle install(1) \fIbundle\-install\.1\.html\fR\.
.
.P
Starting with 1\.14, specifying the \fB\-\-conservative\fR option will also prevent indirect dependencies from being updated\.
.
.SH "PATCH LEVEL OPTIONS"
Version 1\.14 introduced 4 patch\-level options that will influence how gem versions are resolved\. One of the following options can be used: \fB\-\-patch\fR, \fB\-\-minor\fR or \fB\-\-major\fR\. \fB\-\-strict\fR can be added to further influence resolution\.
.
.TP
\fB\-\-patch\fR
Prefer updating only to next patch version\.
.
.TP
\fB\-\-minor\fR
Prefer updating only to next minor version\.
.
.TP
\fB\-\-major\fR
Prefer updating to next major version (default)\.
.
.TP
\fB\-\-strict\fR
Do not allow any gem to be updated past latest \fB\-\-patch\fR | \fB\-\-minor\fR | \fB\-\-major\fR\.
.
.P
When Bundler is resolving what versions to use to satisfy declared requirements in the Gemfile or in parent gems, it looks up all available versions, filters out any versions that don\'t satisfy the requirement, and then, by default, sorts them from newest to oldest, considering them in that order\.
.
.P
Providing one of the patch level options (e\.g\. \fB\-\-patch\fR) changes the sort order of the satisfying versions, causing Bundler to consider the latest \fB\-\-patch\fR or \fB\-\-minor\fR version available before other versions\. Note that versions outside the stated patch level could still be resolved to if necessary to find a suitable dependency graph\.
.
.P
For example, if gem \'foo\' is locked at 1\.0\.2, with no gem requirement defined in the Gemfile, and versions 1\.0\.3, 1\.0\.4, 1\.1\.0, 1\.1\.1, 2\.0\.0 all exist, the default order of preference by default (\fB\-\-major\fR) will be "2\.0\.0, 1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2"\.
.
.P
If the \fB\-\-patch\fR option is used, the order of preference will change to "1\.0\.4, 1\.0\.3, 1\.0\.2, 1\.1\.1, 1\.1\.0, 2\.0\.0"\.
.
.P
If the \fB\-\-minor\fR option is used, the order of preference will change to "1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2, 2\.0\.0"\.
.
.P
Combining the \fB\-\-strict\fR option with any of the patch level options will remove any versions beyond the scope of the patch level option, to ensure that no gem is updated that far\.
.
.P
To continue the previous example, if both \fB\-\-patch\fR and \fB\-\-strict\fR options are used, the available versions for resolution would be "1\.0\.4, 1\.0\.3, 1\.0\.2"\. If \fB\-\-minor\fR and \fB\-\-strict\fR are used, it would be "1\.1\.1, 1\.1\.0, 1\.0\.4, 1\.0\.3, 1\.0\.2"\.
.
.P
Gem requirements as defined in the Gemfile will still be the first determining factor for what versions are available\. If the gem requirement for \fBfoo\fR in the Gemfile is \'~> 1\.0\', that will accomplish the same thing as providing the \fB\-\-minor\fR and \fB\-\-strict\fR options\.
.
.SH "PATCH LEVEL EXAMPLES"
Given the following gem specifications:
.
.IP "" 4
.
.nf

foo 1\.4\.3, requires: ~> bar 2\.0
foo 1\.4\.4, requires: ~> bar 2\.0
foo 1\.4\.5, requires: ~> bar 2\.1
foo 1\.5\.0, requires: ~> bar 2\.1
foo 1\.5\.1, requires: ~> bar 3\.0
bar with versions 2\.0\.3, 2\.0\.4, 2\.1\.0, 2\.1\.1, 3\.0\.0
.
.fi
.
.IP "" 0
.
.P
Gemfile:
.
.IP "" 4
.
.nf

gem \'foo\'
.
.fi
.
.IP "" 0
.
.P
Gemfile\.lock:
.
.IP "" 4
.
.nf

foo (1\.4\.3)
  bar (~> 2\.0)
bar (2\.0\.3)
.
.fi
.
.IP "" 0
.
.P
Cases:
.
.IP "" 4
.
.nf

#  Command Line                     Result
\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
1  bundle update \-\-patch            \'foo 1\.4\.5\', \'bar 2\.1\.1\'
2  bundle update \-\-patch foo        \'foo 1\.4\.5\', \'bar 2\.1\.1\'
3  bundle update \-\-minor            \'foo 1\.5\.1\', \'bar 3\.0\.0\'
4  bundle update \-\-minor \-\-strict   \'foo 1\.5\.0\', \'bar 2\.1\.1\'
5  bundle update \-\-patch \-\-strict   \'foo 1\.4\.4\', \'bar 2\.0\.4\'
.
.fi
.
.IP "" 0
.
.P
In case 1, bar is upgraded to 2\.1\.1, a minor version increase, because the dependency from foo 1\.4\.5 required it\.
.
.P
In case 2, only foo is requested to be unlocked, but bar is also allowed to move because it\'s not a declared dependency in the Gemfile\.
.
.P
In case 3, bar goes up a whole major release, because a minor increase is preferred now for foo, and when it goes to 1\.5\.1, it requires 3\.0\.0 of bar\.
.
.P
In case 4, foo is preferred up to a minor version, but 1\.5\.1 won\'t work because the \-\-strict flag removes bar 3\.0\.0 from consideration since it\'s a major increment\.
.
.P
In case 5, both foo and bar have any minor or major increments removed from consideration because of the \-\-strict flag, so the most they can move is up to 1\.4\.4 and 2\.0\.4\.
.
.SH "RECOMMENDED WORKFLOW"
In general, when working with an application managed with bundler, you should use the following workflow:
.
.IP "\(bu" 4
After you create your Gemfile(5) for the first time, run
.
.IP
$ bundle install
.
.IP "\(bu" 4
Check the resulting \fBGemfile\.lock\fR into version control
.
.IP
$ git add Gemfile\.lock
.
.IP "\(bu" 4
When checking out this repository on another development machine, run
.
.IP
$ bundle install
.
.IP "\(bu" 4
When checking out this repository on a deployment machine, run
.
.IP
$ bundle install \-\-deployment
.
.IP "\(bu" 4
After changing the Gemfile(5) to reflect a new or update dependency, run
.
.IP
$ bundle install
.
.IP "\(bu" 4
Make sure to check the updated \fBGemfile\.lock\fR into version control
.
.IP
$ git add Gemfile\.lock
.
.IP "\(bu" 4
If bundle install(1) \fIbundle\-install\.1\.html\fR reports a conflict, manually update the specific gems that you changed in the Gemfile(5)
.
.IP
$ bundle update rails thin
.
.IP "\(bu" 4
If you want to update all the gems to the latest possible versions that still match the gems listed in the Gemfile(5), run
.
.IP
$ bundle update \-\-all
.
.IP "" 0

PK&"#[����*gems/bundler-2.3.27/lib/bundler/version.rbnu�[���# frozen_string_literal: false

module Bundler
  VERSION = "2.3.27".freeze

  def self.bundler_major_version
    @bundler_major_version ||= VERSION.split(".").first.to_i
  end
end
PK&"#[W�|��%gems/bundler-2.3.27/lib/bundler/ui.rbnu�[���# frozen_string_literal: true

module Bundler
  module UI
    autoload :RGProxy, File.expand_path("ui/rg_proxy", __dir__)
    autoload :Shell,   File.expand_path("ui/shell", __dir__)
    autoload :Silent,  File.expand_path("ui/silent", __dir__)
  end
end
PK&"#[��3�

+gems/bundler-2.3.27/lib/bundler/cli/init.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Init
    attr_reader :options
    def initialize(options)
      @options = options
    end

    def run
      if File.exist?(gemfile)
        Bundler.ui.error "#{gemfile} already exists at #{File.expand_path(gemfile)}"
        exit 1
      end

      unless File.writable?(Dir.pwd)
        Bundler.ui.error "Can not create #{gemfile} as the current directory is not writable."
        exit 1
      end

      if options[:gemspec]
        gemspec = File.expand_path(options[:gemspec])
        unless File.exist?(gemspec)
          Bundler.ui.error "Gem specification #{gemspec} doesn't exist"
          exit 1
        end

        spec = Bundler.load_gemspec_uncached(gemspec)

        File.open(gemfile, "wb") do |file|
          file << "# Generated from #{gemspec}\n"
          file << spec.to_gemfile
        end
      else
        File.open(File.expand_path("../templates/#{gemfile}", __dir__), "r") do |template|
          File.open(gemfile, "wb") do |destination|
            IO.copy_stream(template, destination)
          end
        end
      end

      puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
    end

    private

    def gemfile
      @gemfile ||= Bundler.preferred_gemfile_name
    end
  end
end
PK'"#[5H
��/gems/bundler-2.3.27/lib/bundler/cli/platform.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Platform
    attr_reader :options
    def initialize(options)
      @options = options
    end

    def run
      platforms, ruby_version = Bundler.ui.silence do
        locked_ruby_version = Bundler.locked_gems && Bundler.locked_gems.ruby_version&.gsub(/p\d+\Z/, "")
        gemfile_ruby_version = Bundler.definition.ruby_version && Bundler.definition.ruby_version.single_version_string
        [Bundler.definition.platforms.map {|p| "* #{p}" },
         locked_ruby_version || gemfile_ruby_version]
      end
      output = []

      if options[:ruby]
        if ruby_version
          output << ruby_version
        else
          output << "No ruby version specified"
        end
      else
        output << "Your platform is: #{Gem::Platform.local}"
        output << "Your app has gems that work on these platforms:\n#{platforms.join("\n")}"

        if ruby_version
          output << "Your Gemfile specifies a Ruby version requirement:\n* #{ruby_version}"

          begin
            Bundler.definition.validate_runtime!
            output << "Your current platform satisfies the Ruby version requirement."
          rescue RubyVersionMismatch => e
            output << e.message
          end
        else
          output << "Your Gemfile does not specify a Ruby version requirement."
        end
      end

      Bundler.ui.info output.join("\n\n")
    end
  end
end
PK'"#[V�9��+gems/bundler-2.3.27/lib/bundler/cli/fund.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Fund
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      Bundler.definition.validate_runtime!

      groups = Array(options[:group]).map(&:to_sym)

      deps = if groups.any?
        Bundler.definition.dependencies_for(groups)
      else
        Bundler.definition.current_dependencies
      end

      fund_info = deps.each_with_object([]) do |dep, arr|
        spec = Bundler.definition.specs[dep.name].first
        if spec.metadata.key?("funding_uri")
          arr << "* #{spec.name} (#{spec.version})\n  Funding: #{spec.metadata["funding_uri"]}"
        end
      end

      if fund_info.empty?
        Bundler.ui.info "None of the installed gems you directly depend on are looking for funding."
      else
        Bundler.ui.info fund_info.join("\n")
      end
    end
  end
end
PK'"#[�^f+gems/bundler-2.3.27/lib/bundler/cli/list.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::List
    def initialize(options)
      @options = options
      @without_group = options["without-group"].map(&:to_sym)
      @only_group = options["only-group"].map(&:to_sym)
    end

    def run
      raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @only_group.any? && @without_group.any?

      raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]

      specs = if @only_group.any? || @without_group.any?
        filtered_specs_by_groups
      else
        begin
          Bundler.load.specs
        rescue GemNotFound => e
          Bundler.ui.error e.message
          Bundler.ui.warn "Install missing gems with `bundle install`."
          exit 1
        end
      end.reject {|s| s.name == "bundler" }.sort_by(&:name)

      return Bundler.ui.info "No gems in the Gemfile" if specs.empty?

      return specs.each {|s| Bundler.ui.info s.name } if @options["name-only"]
      return specs.each {|s| Bundler.ui.info s.full_gem_path } if @options["paths"]

      Bundler.ui.info "Gems included by the bundle:"

      specs.each {|s| Bundler.ui.info "  * #{s.name} (#{s.version}#{s.git_version})" }

      Bundler.ui.info "Use `bundle info` to print more detailed information about a gem"
    end

    private

    def verify_group_exists(groups)
      (@without_group + @only_group).each do |group|
        raise InvalidOption, "`#{group}` group could not be found." unless groups.include?(group)
      end
    end

    def filtered_specs_by_groups
      definition = Bundler.definition
      groups = definition.groups

      verify_group_exists(groups)

      show_groups =
        if @without_group.any?
          groups.reject {|g| @without_group.include?(g) }
        elsif @only_group.any?
          groups.select {|g| @only_group.include?(g) }
        else
          groups
        end.map(&:to_sym)

      definition.specs_for(show_groups)
    end
  end
end
PK'"#[a����$�$/gems/bundler-2.3.27/lib/bundler/cli/outdated.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Outdated
    attr_reader :options, :gems, :options_include_groups, :filter_options_patch, :sources, :strict
    attr_accessor :outdated_gems

    def initialize(options, gems)
      @options = options
      @gems = gems
      @sources = Array(options[:source])

      @filter_options_patch = options.keys & %w[filter-major filter-minor filter-patch]

      @outdated_gems = []

      @options_include_groups = [:group, :groups].any? do |v|
        options.keys.include?(v.to_s)
      end

      # the patch level options imply strict is also true. It wouldn't make
      # sense otherwise.
      @strict = options["filter-strict"] || Bundler::CLI::Common.patch_level_options(options).any?
    end

    def run
      check_for_deployment_mode!

      gems.each do |gem_name|
        Bundler::CLI::Common.select_spec(gem_name)
      end

      Bundler.definition.validate_runtime!
      current_specs = Bundler.ui.silence { Bundler.definition.resolve }

      current_dependencies = Bundler.ui.silence do
        Bundler.load.dependencies.map {|dep| [dep.name, dep] }.to_h
      end

      definition = if gems.empty? && sources.empty?
        # We're doing a full update
        Bundler.definition(true)
      else
        Bundler.definition(:gems => gems, :sources => sources)
      end

      Bundler::CLI::Common.configure_gem_version_promoter(
        Bundler.definition,
        options.merge(:strict => @strict)
      )

      definition_resolution = proc do
        options[:local] ? definition.resolve_with_cache! : definition.resolve_remotely!
      end

      if options[:parseable]
        Bundler.ui.silence(&definition_resolution)
      else
        definition_resolution.call
      end

      Bundler.ui.info ""

      # Loop through the current specs
      gemfile_specs, dependency_specs = current_specs.partition do |spec|
        current_dependencies.key? spec.name
      end

      specs = if options["only-explicit"]
        gemfile_specs
      else
        gemfile_specs + dependency_specs
      end

      specs.sort_by(&:name).uniq(&:name).each do |current_spec|
        next unless gems.empty? || gems.include?(current_spec.name)

        active_spec = retrieve_active_spec(definition, current_spec)
        next unless active_spec

        next unless filter_options_patch.empty? || update_present_via_semver_portions(current_spec, active_spec, options)

        gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
        next unless gem_outdated || (current_spec.git_version != active_spec.git_version)

        dependency = current_dependencies[current_spec.name]
        groups = ""
        if dependency && !options[:parseable]
          groups = dependency.groups.join(", ")
        end

        outdated_gems << {
          :active_spec => active_spec,
          :current_spec => current_spec,
          :dependency => dependency,
          :groups => groups,
        }
      end

      if outdated_gems.empty?
        unless options[:parseable]
          Bundler.ui.info(nothing_outdated_message)
        end
      else
        if options_include_groups
          relevant_outdated_gems = outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
            contains_group = groups.split(", ").include?(options[:group])
            next unless options[:groups] || contains_group

            gems
          end.compact

          if options[:parseable]
            relevant_outdated_gems.each do |gems|
              print_gems(gems)
            end
          else
            print_gems_table(relevant_outdated_gems)
          end
        elsif options[:parseable]
          print_gems(outdated_gems)
        else
          print_gems_table(outdated_gems)
        end

        exit 1
      end
    end

    private

    def loaded_from_for(spec)
      return unless spec.respond_to?(:loaded_from)

      spec.loaded_from
    end

    def groups_text(group_text, groups)
      "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
    end

    def nothing_outdated_message
      if filter_options_patch.any?
        display = filter_options_patch.map do |o|
          o.sub("filter-", "")
        end.join(" or ")

        "No #{display} updates to display.\n"
      else
        "Bundle up to date!\n"
      end
    end

    def retrieve_active_spec(definition, current_spec)
      active_spec = definition.resolve.find_by_name_and_platform(current_spec.name, current_spec.platform)
      return unless active_spec

      return active_spec if strict

      active_specs = active_spec.source.specs.search(current_spec.name).select {|spec| spec.match_platform(current_spec.platform) }.sort_by(&:version)
      if !current_spec.version.prerelease? && !options[:pre] && active_specs.size > 1
        active_specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
      end
      active_specs.last
    end

    def print_gems(gems_list)
      gems_list.each do |gem|
        print_gem(
          gem[:current_spec],
          gem[:active_spec],
          gem[:dependency],
          gem[:groups],
        )
      end
    end

    def print_gems_table(gems_list)
      data = gems_list.map do |gem|
        gem_column_for(
          gem[:current_spec],
          gem[:active_spec],
          gem[:dependency],
          gem[:groups],
        )
      end

      print_indented([table_header] + data)
    end

    def print_gem(current_spec, active_spec, dependency, groups)
      spec_version = "#{active_spec.version}#{active_spec.git_version}"
      if Bundler.ui.debug?
        loaded_from = loaded_from_for(active_spec)
        spec_version += " (from #{loaded_from})" if loaded_from
      end
      current_version = "#{current_spec.version}#{current_spec.git_version}"

      if dependency && dependency.specific?
        dependency_version = %(, requested #{dependency.requirement})
      end

      spec_outdated_info = "#{active_spec.name} (newest #{spec_version}, " \
        "installed #{current_version}#{dependency_version})"

      output_message = if options[:parseable]
        spec_outdated_info.to_s
      elsif options_include_groups || groups.empty?
        "  * #{spec_outdated_info}"
      else
        "  * #{spec_outdated_info} in #{groups_text("group", groups)}"
      end

      Bundler.ui.info output_message.rstrip
    end

    def gem_column_for(current_spec, active_spec, dependency, groups)
      current_version = "#{current_spec.version}#{current_spec.git_version}"
      spec_version = "#{active_spec.version}#{active_spec.git_version}"
      dependency = dependency.requirement if dependency

      ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
      ret_val << loaded_from_for(active_spec).to_s if Bundler.ui.debug?
      ret_val
    end

    def check_for_deployment_mode!
      return unless Bundler.frozen_bundle?
      suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
        "bundle config unset frozen"
      elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
        "bundle config unset deployment"
      end
      raise ProductionError, "You are trying to check outdated gems in " \
        "deployment mode. Run `bundle outdated` elsewhere.\n" \
        "\nIf this is a development machine, remove the " \
        "#{Bundler.default_gemfile} freeze" \
        "\nby running `#{suggested_command}`."
    end

    def update_present_via_semver_portions(current_spec, active_spec, options)
      current_major = current_spec.version.segments.first
      active_major = active_spec.version.segments.first

      update_present = false
      update_present = active_major > current_major if options["filter-major"]

      if !update_present && (options["filter-minor"] || options["filter-patch"]) && current_major == active_major
        current_minor = get_version_semver_portion_value(current_spec, 1)
        active_minor = get_version_semver_portion_value(active_spec, 1)

        update_present = active_minor > current_minor if options["filter-minor"]

        if !update_present && options["filter-patch"] && current_minor == active_minor
          current_patch = get_version_semver_portion_value(current_spec, 2)
          active_patch = get_version_semver_portion_value(active_spec, 2)

          update_present = active_patch > current_patch
        end
      end

      update_present
    end

    def get_version_semver_portion_value(spec, version_portion_index)
      version_section = spec.version.segments[version_portion_index, 1]
      version_section.to_a[0].to_i
    end

    def print_indented(matrix)
      header = matrix[0]
      data = matrix[1..-1]

      column_sizes = Array.new(header.size) do |index|
        matrix.max_by {|row| row[index].length }[index].length
      end

      Bundler.ui.info justify(header, column_sizes)

      data.sort_by! {|row| row[0] }

      data.each do |row|
        Bundler.ui.info justify(row, column_sizes)
      end
    end

    def table_header
      header = ["Gem", "Current", "Latest", "Requested", "Groups"]
      header << "Path" if Bundler.ui.debug?
      header
    end

    def justify(row, sizes)
      row.each_with_index.map do |element, index|
        element.ljust(sizes[index])
      end.join("  ").strip + "\n"
    end
  end
end
PK'"#[�st��+gems/bundler-2.3.27/lib/bundler/cli/show.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Show
    attr_reader :options, :gem_name, :latest_specs
    def initialize(options, gem_name)
      @options = options
      @gem_name = gem_name
      @verbose = options[:verbose] || options[:outdated]
      @latest_specs = fetch_latest_specs if @verbose
    end

    def run
      Bundler.ui.silence do
        Bundler.definition.validate_runtime!
        Bundler.load.lock
      end

      if gem_name
        if gem_name == "bundler"
          path = File.expand_path("../../..", __dir__)
        else
          spec = Bundler::CLI::Common.select_spec(gem_name, :regex_match)
          return unless spec
          path = spec.full_gem_path
          unless File.directory?(path)
            return Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at: #{path}"
          end
        end
        return Bundler.ui.info(path)
      end

      if options[:paths]
        Bundler.load.specs.sort_by(&:name).map do |s|
          Bundler.ui.info s.full_gem_path
        end
      else
        Bundler.ui.info "Gems included by the bundle:"
        Bundler.load.specs.sort_by(&:name).each do |s|
          desc = "  * #{s.name} (#{s.version}#{s.git_version})"
          if @verbose
            latest = latest_specs.find {|l| l.name == s.name }
            Bundler.ui.info <<-END.gsub(/^ +/, "")
              #{desc}
              \tSummary:  #{s.summary || "No description available."}
              \tHomepage: #{s.homepage || "No website available."}
              \tStatus:   #{outdated?(s, latest) ? "Outdated - #{s.version} < #{latest.version}" : "Up to date"}
            END
          else
            Bundler.ui.info desc
          end
        end
      end
    end

    private

    def fetch_latest_specs
      definition = Bundler.definition(true)
      if options[:outdated]
        Bundler.ui.info "Fetching remote specs for outdated check...\n\n"
        Bundler.ui.silence { definition.resolve_remotely! }
      else
        definition.resolve_with_cache!
      end
      Bundler.reset!
      definition.specs
    end

    def outdated?(current, latest)
      return false unless latest
      Gem::Version.new(current.version) < Gem::Version.new(latest.version)
    end
  end
end
PK'"#[�im�$>$>*gems/bundler-2.3.27/lib/bundler/cli/gem.rbnu�[���# frozen_string_literal: true

require "pathname"

module Bundler
  class CLI
    Bundler.require_thor_actions
    include Thor::Actions
  end

  class CLI::Gem
    TEST_FRAMEWORK_VERSIONS = {
      "rspec" => "3.0",
      "minitest" => "5.0",
      "test-unit" => "3.0",
    }.freeze

    attr_reader :options, :gem_name, :thor, :name, :target

    def initialize(options, gem_name, thor)
      @options = options
      @gem_name = resolve_name(gem_name)

      @thor = thor
      thor.behavior = :invoke
      thor.destination_root = nil

      @name = @gem_name
      @target = SharedHelpers.pwd.join(gem_name)

      validate_ext_name if options[:ext]
    end

    def run
      Bundler.ui.confirm "Creating gem '#{name}'..."

      underscored_name = name.tr("-", "_")
      namespaced_path = name.tr("-", "/")
      constant_name = name.gsub(/-[_-]*(?![_-]|$)/) { "::" }.gsub(/([_-]+|(::)|^)(.|$)/) { $2.to_s + $3.upcase }
      constant_array = constant_name.split("::")
      minitest_constant_name = constant_array.clone.tap {|a| a[-1] = "Test#{a[-1]}" }.join("::") # Foo::Bar => Foo::TestBar

      use_git = Bundler.git_present? && options[:git]

      git_author_name = use_git ? `git config user.name`.chomp : ""
      git_username = use_git ? `git config github.user`.chomp : ""
      git_user_email = use_git ? `git config user.email`.chomp : ""

      github_username = if options[:github_username].nil?
        git_username
      elsif options[:github_username] == false
        ""
      else
        options[:github_username]
      end

      config = {
        :name             => name,
        :underscored_name => underscored_name,
        :namespaced_path  => namespaced_path,
        :makefile_path    => "#{underscored_name}/#{underscored_name}",
        :constant_name    => constant_name,
        :constant_array   => constant_array,
        :author           => git_author_name.empty? ? "TODO: Write your name" : git_author_name,
        :email            => git_user_email.empty? ? "TODO: Write your email address" : git_user_email,
        :test             => options[:test],
        :ext              => options[:ext],
        :exe              => options[:exe],
        :bundler_version  => bundler_dependency_version,
        :git              => use_git,
        :github_username  => github_username.empty? ? "[USERNAME]" : github_username,
        :required_ruby_version => required_ruby_version,
        :minitest_constant_name => minitest_constant_name,
      }
      ensure_safe_gem_name(name, constant_array)

      templates = {
        "#{Bundler.preferred_gemfile_name}.tt" => Bundler.preferred_gemfile_name,
        "lib/newgem.rb.tt" => "lib/#{namespaced_path}.rb",
        "lib/newgem/version.rb.tt" => "lib/#{namespaced_path}/version.rb",
        "sig/newgem.rbs.tt" => "sig/#{namespaced_path}.rbs",
        "newgem.gemspec.tt" => "#{name}.gemspec",
        "Rakefile.tt" => "Rakefile",
        "README.md.tt" => "README.md",
        "bin/console.tt" => "bin/console",
        "bin/setup.tt" => "bin/setup",
      }

      executables = %w[
        bin/console
        bin/setup
      ]

      templates.merge!("gitignore.tt" => ".gitignore") if use_git

      if test_framework = ask_and_set_test_framework
        config[:test] = test_framework
        config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]

        case test_framework
        when "rspec"
          templates.merge!(
            "rspec.tt" => ".rspec",
            "spec/spec_helper.rb.tt" => "spec/spec_helper.rb",
            "spec/newgem_spec.rb.tt" => "spec/#{namespaced_path}_spec.rb"
          )
          config[:test_task] = :spec
        when "minitest"
          # Generate path for minitest target file (FileList["test/**/test_*.rb"])
          #   foo     => test/test_foo.rb
          #   foo-bar => test/foo/test_bar.rb
          #   foo_bar => test/test_foo_bar.rb
          paths = namespaced_path.rpartition("/")
          paths[2] = "test_#{paths[2]}"
          minitest_namespaced_path = paths.join("")

          templates.merge!(
            "test/minitest/test_helper.rb.tt" => "test/test_helper.rb",
            "test/minitest/test_newgem.rb.tt" => "test/#{minitest_namespaced_path}.rb"
          )
          config[:test_task] = :test
        when "test-unit"
          templates.merge!(
            "test/test-unit/test_helper.rb.tt" => "test/test_helper.rb",
            "test/test-unit/newgem_test.rb.tt" => "test/#{namespaced_path}_test.rb"
          )
          config[:test_task] = :test
        end
      end

      config[:ci] = ask_and_set_ci
      case config[:ci]
      when "github"
        templates.merge!("github/workflows/main.yml.tt" => ".github/workflows/main.yml")
      when "travis"
        templates.merge!("travis.yml.tt" => ".travis.yml")
      when "gitlab"
        templates.merge!("gitlab-ci.yml.tt" => ".gitlab-ci.yml")
      when "circle"
        templates.merge!("circleci/config.yml.tt" => ".circleci/config.yml")
      end

      if ask_and_set(:mit, "Do you want to license your code permissively under the MIT license?",
        "This means that any other developer or company will be legally allowed to use your code " \
        "for free as long as they admit you created it. You can read more about the MIT license " \
        "at https://choosealicense.com/licenses/mit.")
        config[:mit] = true
        Bundler.ui.info "MIT License enabled in config"
        templates.merge!("LICENSE.txt.tt" => "LICENSE.txt")
      end

      if ask_and_set(:coc, "Do you want to include a code of conduct in gems you generate?",
        "Codes of conduct can increase contributions to your project by contributors who " \
        "prefer collaborative, safe spaces. You can read more about the code of conduct at " \
        "contributor-covenant.org. Having a code of conduct means agreeing to the responsibility " \
        "of enforcing it, so be sure that you are prepared to do that. Be sure that your email " \
        "address is specified as a contact in the generated code of conduct so that people know " \
        "who to contact in case of a violation. For suggestions about " \
        "how to enforce codes of conduct, see https://bit.ly/coc-enforcement.")
        config[:coc] = true
        Bundler.ui.info "Code of conduct enabled in config"
        templates.merge!("CODE_OF_CONDUCT.md.tt" => "CODE_OF_CONDUCT.md")
      end

      if ask_and_set(:changelog, "Do you want to include a changelog?",
        "A changelog is a file which contains a curated, chronologically ordered list of notable " \
        "changes for each version of a project. To make it easier for users and contributors to" \
        " see precisely what notable changes have been made between each release (or version) of" \
        " the project. Whether consumers or developers, the end users of software are" \
        " human beings who care about what's in the software. When the software changes, people " \
        "want to know why and how. see https://keepachangelog.com")
        config[:changelog] = true
        Bundler.ui.info "Changelog enabled in config"
        templates.merge!("CHANGELOG.md.tt" => "CHANGELOG.md")
      end

      config[:linter] = ask_and_set_linter
      case config[:linter]
      when "rubocop"
        config[:linter_version] = rubocop_version
        Bundler.ui.info "RuboCop enabled in config"
        templates.merge!("rubocop.yml.tt" => ".rubocop.yml")
      when "standard"
        config[:linter_version] = standard_version
        Bundler.ui.info "Standard enabled in config"
        templates.merge!("standard.yml.tt" => ".standard.yml")
      end

      templates.merge!("exe/newgem.tt" => "exe/#{name}") if config[:exe]

      if options[:ext]
        templates.merge!(
          "ext/newgem/extconf.rb.tt" => "ext/#{name}/extconf.rb",
          "ext/newgem/newgem.h.tt" => "ext/#{name}/#{underscored_name}.h",
          "ext/newgem/newgem.c.tt" => "ext/#{name}/#{underscored_name}.c"
        )
      end

      if target.exist? && !target.directory?
        Bundler.ui.error "Couldn't create a new gem named `#{gem_name}` because there's an existing file named `#{gem_name}`."
        exit Bundler::BundlerError.all_errors[Bundler::GenericSystemCallError]
      end

      if use_git
        Bundler.ui.info "Initializing git repo in #{target}"
        require "shellwords"
        `git init #{target.to_s.shellescape}`

        config[:git_default_branch] = File.read("#{target}/.git/HEAD").split("/").last.chomp
      end

      templates.each do |src, dst|
        destination = target.join(dst)
        thor.template("newgem/#{src}", destination, config)
      end

      executables.each do |file|
        path = target.join(file)
        executable = (path.stat.mode | 0o111)
        path.chmod(executable)
      end

      if use_git
        Dir.chdir(target) do
          `git add .`
        end
      end

      # Open gemspec in editor
      open_editor(options["edit"], target.join("#{name}.gemspec")) if options[:edit]

      Bundler.ui.info "Gem '#{name}' was successfully created. " \
        "For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html"
    end

    private

    def resolve_name(name)
      SharedHelpers.pwd.join(name).basename.to_s
    end

    def ask_and_set(key, header, message)
      choice = options[key]
      choice = Bundler.settings["gem.#{key}"] if choice.nil?

      if choice.nil?
        Bundler.ui.confirm header
        choice = Bundler.ui.yes? "#{message} y/(n):"
        Bundler.settings.set_global("gem.#{key}", choice)
      end

      choice
    end

    def validate_ext_name
      return unless gem_name.index("-")

      Bundler.ui.error "You have specified a gem name which does not conform to the \n" \
                       "naming guidelines for C extensions. For more information, \n" \
                       "see the 'Extension Naming' section at the following URL:\n" \
                       "https://guides.rubygems.org/gems-with-extensions/\n"
      exit 1
    end

    def ask_and_set_test_framework
      test_framework = options[:test] || Bundler.settings["gem.test"]

      if test_framework.to_s.empty?
        Bundler.ui.confirm "Do you want to generate tests with your gem?"
        Bundler.ui.info hint_text("test")

        result = Bundler.ui.ask "Enter a test framework. rspec/minitest/test-unit/(none):"
        if result =~ /rspec|minitest|test-unit/
          test_framework = result
        else
          test_framework = false
        end
      end

      if Bundler.settings["gem.test"].nil?
        Bundler.settings.set_global("gem.test", test_framework)
      end

      if options[:test] == Bundler.settings["gem.test"]
        Bundler.ui.info "#{options[:test]} is already configured, ignoring --test flag."
      end

      test_framework
    end

    def hint_text(setting)
      if Bundler.settings["gem.#{setting}"] == false
        "Your choice will only be applied to this gem."
      else
        "Future `bundle gem` calls will use your choice. " \
        "This setting can be changed anytime with `bundle config gem.#{setting}`."
      end
    end

    def ask_and_set_ci
      ci_template = options[:ci] || Bundler.settings["gem.ci"]

      if ci_template.to_s.empty?
        Bundler.ui.confirm "Do you want to set up continuous integration for your gem? " \
          "Supported services:\n" \
          "* CircleCI:       https://circleci.com/\n" \
          "* GitHub Actions: https://github.com/features/actions\n" \
          "* GitLab CI:      https://docs.gitlab.com/ee/ci/\n" \
          "* Travis CI:      https://travis-ci.org/\n" \
          "\n"
        Bundler.ui.info hint_text("ci")

        result = Bundler.ui.ask "Enter a CI service. github/travis/gitlab/circle/(none):"
        if result =~ /github|travis|gitlab|circle/
          ci_template = result
        else
          ci_template = false
        end
      end

      if Bundler.settings["gem.ci"].nil?
        Bundler.settings.set_global("gem.ci", ci_template)
      end

      if options[:ci] == Bundler.settings["gem.ci"]
        Bundler.ui.info "#{options[:ci]} is already configured, ignoring --ci flag."
      end

      ci_template
    end

    def ask_and_set_linter
      linter_template = options[:linter] || Bundler.settings["gem.linter"]
      linter_template = deprecated_rubocop_option if linter_template.nil?

      if linter_template.to_s.empty?
        Bundler.ui.confirm "Do you want to add a code linter and formatter to your gem? " \
          "Supported Linters:\n" \
          "* RuboCop:       https://rubocop.org\n" \
          "* Standard:      https://github.com/testdouble/standard\n" \
          "\n"
        Bundler.ui.info hint_text("linter")

        result = Bundler.ui.ask "Enter a linter. rubocop/standard/(none):"
        if result =~ /rubocop|standard/
          linter_template = result
        else
          linter_template = false
        end
      end

      if Bundler.settings["gem.linter"].nil?
        Bundler.settings.set_global("gem.linter", linter_template)
      end

      # Once gem.linter safely set, unset the deprecated gem.rubocop
      unless Bundler.settings["gem.rubocop"].nil?
        Bundler.settings.set_global("gem.rubocop", nil)
      end

      if options[:linter] == Bundler.settings["gem.linter"]
        Bundler.ui.info "#{options[:linter]} is already configured, ignoring --linter flag."
      end

      linter_template
    end

    def deprecated_rubocop_option
      if !options[:rubocop].nil?
        if options[:rubocop]
          Bundler::SharedHelpers.major_deprecation 2, "--rubocop is deprecated, use --linter=rubocop"
          "rubocop"
        else
          Bundler::SharedHelpers.major_deprecation 2, "--no-rubocop is deprecated, use --linter"
          false
        end
      elsif !Bundler.settings["gem.rubocop"].nil?
        Bundler::SharedHelpers.major_deprecation 2,
          "config gem.rubocop is deprecated; we've updated your config to use gem.linter instead"
        Bundler.settings["gem.rubocop"] ? "rubocop" : false
      end
    end

    def bundler_dependency_version
      v = Gem::Version.new(Bundler::VERSION)
      req = v.segments[0..1]
      req << "a" if v.prerelease?
      req.join(".")
    end

    def ensure_safe_gem_name(name, constant_array)
      if name =~ /^\d/
        Bundler.ui.error "Invalid gem name #{name} Please give a name which does not start with numbers."
        exit 1
      end

      constant_name = constant_array.join("::")

      existing_constant = constant_array.inject(Object) do |c, s|
        defined = begin
          c.const_defined?(s)
        rescue NameError
          Bundler.ui.error "Invalid gem name #{name} -- `#{constant_name}` is an invalid constant name"
          exit 1
        end
        (defined && c.const_get(s)) || break
      end

      return unless existing_constant
      Bundler.ui.error "Invalid gem name #{name} constant #{constant_name} is already in use. Please choose another gem name."
      exit 1
    end

    def open_editor(editor, file)
      thor.run(%(#{editor} "#{file}"))
    end

    def required_ruby_version
      if Gem.ruby_version < Gem::Version.new("2.4.a") then "2.3.0"
      elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "2.4.0"
      elsif Gem.ruby_version < Gem::Version.new("2.6.a") then "2.5.0"
      else
        "2.6.0"
      end
    end

    def rubocop_version
      if Gem.ruby_version < Gem::Version.new("2.4.a") then "0.81.0"
      elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "1.12"
      else
        "1.21"
      end
    end

    def standard_version
      if Gem.ruby_version < Gem::Version.new("2.4.a") then "0.2.5"
      elsif Gem.ruby_version < Gem::Version.new("2.5.a") then "1.0"
      else
        "1.3"
      end
    end
  end
end
PK'"#[�p�u��-gems/bundler-2.3.27/lib/bundler/cli/doctor.rbnu�[���# frozen_string_literal: true

require "rbconfig"
require "shellwords"
require "fiddle"

module Bundler
  class CLI::Doctor
    DARWIN_REGEX = /\s+(.+) \(compatibility /.freeze
    LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/.freeze

    attr_reader :options

    def initialize(options)
      @options = options
    end

    def otool_available?
      Bundler.which("otool")
    end

    def ldd_available?
      Bundler.which("ldd")
    end

    def dylibs_darwin(path)
      output = `/usr/bin/otool -L #{path.shellescape}`.chomp
      dylibs = output.split("\n")[1..-1].map {|l| l.match(DARWIN_REGEX).captures[0] }.uniq
      # ignore @rpath and friends
      dylibs.reject {|dylib| dylib.start_with? "@" }
    end

    def dylibs_ldd(path)
      output = `/usr/bin/ldd #{path.shellescape}`.chomp
      output.split("\n").map do |l|
        match = l.match(LDD_REGEX)
        next if match.nil?
        match.captures[0]
      end.compact
    end

    def dylibs(path)
      case RbConfig::CONFIG["host_os"]
      when /darwin/
        return [] unless otool_available?
        dylibs_darwin(path)
      when /(linux|solaris|bsd)/
        return [] unless ldd_available?
        dylibs_ldd(path)
      else # Windows, etc.
        Bundler.ui.warn("Dynamic library check not supported on this platform.")
        []
      end
    end

    def bundles_for_gem(spec)
      Dir.glob("#{spec.full_gem_path}/**/*.bundle")
    end

    def check!
      require_relative "check"
      Bundler::CLI::Check.new({}).run
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]
      Bundler.settings.validate!
      check!

      definition = Bundler.definition
      broken_links = {}

      definition.specs.each do |spec|
        bundles_for_gem(spec).each do |bundle|
          bad_paths = dylibs(bundle).select do |f|
            begin
              Fiddle.dlopen(f)
              false
            rescue Fiddle::DLError
              true
            end
          end
          if bad_paths.any?
            broken_links[spec] ||= []
            broken_links[spec].concat(bad_paths)
          end
        end
      end

      permissions_valid = check_home_permissions

      if broken_links.any?
        message = "The following gems are missing OS dependencies:"
        broken_links.map do |spec, paths|
          paths.uniq.map do |path|
            "\n * #{spec.name}: #{path}"
          end
        end.flatten.sort.each {|m| message += m }
        raise ProductionError, message
      elsif !permissions_valid
        Bundler.ui.info "No issues found with the installed bundle"
      end
    end

    private

    def check_home_permissions
      require "find"
      files_not_readable_or_writable = []
      files_not_rw_and_owned_by_different_user = []
      files_not_owned_by_current_user_but_still_rw = []
      broken_symlinks = []
      Find.find(Bundler.bundle_path.to_s).each do |f|
        if !File.exist?(f)
          broken_symlinks << f
        elsif !File.writable?(f) || !File.readable?(f)
          if File.stat(f).uid != Process.uid
            files_not_rw_and_owned_by_different_user << f
          else
            files_not_readable_or_writable << f
          end
        elsif File.stat(f).uid != Process.uid
          files_not_owned_by_current_user_but_still_rw << f
        end
      end

      ok = true

      if broken_symlinks.any?
        Bundler.ui.warn "Broken links exist in the Bundler home. Please report them to the offending gem's upstream repo. These files are:\n - #{broken_symlinks.join("\n - ")}"

        ok = false
      end

      if files_not_owned_by_current_user_but_still_rw.any?
        Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
          "user, but are still readable/writable. These files are:\n - #{files_not_owned_by_current_user_but_still_rw.join("\n - ")}"

        ok = false
      end

      if files_not_rw_and_owned_by_different_user.any?
        Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
          "user, and are not readable/writable. These files are:\n - #{files_not_rw_and_owned_by_different_user.join("\n - ")}"

        ok = false
      end

      if files_not_readable_or_writable.any?
        Bundler.ui.warn "Files exist in the Bundler home that are not " \
          "readable/writable by the current user. These files are:\n - #{files_not_readable_or_writable.join("\n - ")}"

        ok = false
      end

      ok
    end
  end
end
PK'"#[���,gems/bundler-2.3.27/lib/bundler/cli/check.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Check
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      Bundler.settings.set_command_option_if_given :path, options[:path]

      definition = Bundler.definition
      definition.validate_runtime!

      begin
        definition.resolve_only_locally!
        not_installed = definition.missing_specs
      rescue GemNotFound, VersionConflict
        Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
        Bundler.ui.warn "Install missing gems with `bundle install`."
        exit 1
      end

      if not_installed.any?
        Bundler.ui.error "The following gems are missing"
        not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
        Bundler.ui.warn "Install missing gems with `bundle install`"
        exit 1
      elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
        Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
        exit 1
      else
        Bundler.load.lock(:preserve_unknown_sections => true) unless options[:"dry-run"]
        Bundler.ui.info "The Gemfile's dependencies are satisfied"
      end
    end
  end
end
PK'"#["�G���/gems/bundler-2.3.27/lib/bundler/cli/binstubs.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Binstubs
    attr_reader :options, :gems
    def initialize(options, gems)
      @options = options
      @gems = gems
    end

    def run
      Bundler.definition.validate_runtime!
      path_option = options["path"]
      path_option = nil if path_option && path_option.empty?
      Bundler.settings.set_command_option :bin, path_option if options["path"]
      Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
      installer = Installer.new(Bundler.root, Bundler.definition)

      installer_opts = {
        :force => options[:force],
        :binstubs_cmd => true,
        :all_platforms => options["all-platforms"],
      }

      if options[:all]
        raise InvalidOption, "Cannot specify --all with specific gems" unless gems.empty?
        @gems = Bundler.definition.specs.map(&:name)
        installer_opts.delete(:binstubs_cmd)
      elsif gems.empty?
        Bundler.ui.error "`bundle binstubs` needs at least one gem to run."
        exit 1
      end

      gems.each do |gem_name|
        spec = Bundler.definition.specs.find {|s| s.name == gem_name }
        unless spec
          raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(
            gem_name, Bundler.definition.specs
          )
        end

        if options[:standalone]
          next Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") if gem_name == "bundler"
          Bundler.settings.temporary(:path => (Bundler.settings[:path] || Bundler.root)) do
            installer.generate_standalone_bundler_executable_stubs(spec, installer_opts)
          end
        else
          installer.generate_bundler_executable_stubs(spec, installer_opts)
        end
      end
    end
  end
end
PK'"#[�c|��
�
+gems/bundler-2.3.27/lib/bundler/cli/info.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Info
    attr_reader :gem_name, :options
    def initialize(options, gem_name)
      @options = options
      @gem_name = gem_name
    end

    def run
      Bundler.ui.silence do
        Bundler.definition.validate_runtime!
        Bundler.load.lock
      end

      spec = spec_for_gem(gem_name)

      if spec
        return print_gem_path(spec) if @options[:path]
        return print_gem_version(spec) if @options[:version]
        print_gem_info(spec)
      end
    end

    private

    def spec_for_gem(gem_name)
      spec = Bundler.definition.specs.find {|s| s.name == gem_name }
      spec || default_gem_spec(gem_name) || Bundler::CLI::Common.select_spec(gem_name, :regex_match)
    end

    def default_gem_spec(gem_name)
      return unless Gem::Specification.respond_to?(:find_all_by_name)
      gem_spec = Gem::Specification.find_all_by_name(gem_name).last
      return gem_spec if gem_spec && gem_spec.respond_to?(:default_gem?) && gem_spec.default_gem?
    end

    def spec_not_found(gem_name)
      raise GemNotFound, Bundler::CLI::Common.gem_not_found_message(gem_name, Bundler.definition.dependencies)
    end

    def print_gem_version(spec)
      Bundler.ui.info spec.version.to_s
    end

    def print_gem_path(spec)
      name = spec.name
      if name == "bundler"
        path = File.expand_path("../../..", __dir__)
      else
        path = spec.full_gem_path
        if spec.deleted_gem?
          return Bundler.ui.warn "The gem #{name} has been deleted. It was installed at: #{path}"
        end
      end

      Bundler.ui.info path
    end

    def print_gem_info(spec)
      metadata = spec.metadata
      name = spec.name
      gem_info = String.new
      gem_info << "  * #{name} (#{spec.version}#{spec.git_version})\n"
      gem_info << "\tSummary: #{spec.summary}\n" if spec.summary
      gem_info << "\tHomepage: #{spec.homepage}\n" if spec.homepage
      gem_info << "\tDocumentation: #{metadata["documentation_uri"]}\n" if metadata.key?("documentation_uri")
      gem_info << "\tSource Code: #{metadata["source_code_uri"]}\n" if metadata.key?("source_code_uri")
      gem_info << "\tFunding: #{metadata["funding_uri"]}\n" if metadata.key?("funding_uri")
      gem_info << "\tWiki: #{metadata["wiki_uri"]}\n" if metadata.key?("wiki_uri")
      gem_info << "\tChangelog: #{metadata["changelog_uri"]}\n" if metadata.key?("changelog_uri")
      gem_info << "\tBug Tracker: #{metadata["bug_tracker_uri"]}\n" if metadata.key?("bug_tracker_uri")
      gem_info << "\tMailing List: #{metadata["mailing_list_uri"]}\n" if metadata.key?("mailing_list_uri")
      gem_info << "\tPath: #{spec.full_gem_path}\n"
      gem_info << "\tDefault Gem: yes\n" if spec.respond_to?(:default_gem?) && spec.default_gem?
      gem_info << "\tReverse Dependencies: \n\t\t#{gem_dependencies.join("\n\t\t")}" if gem_dependencies.any?

      if name != "bundler" && spec.deleted_gem?
        return Bundler.ui.warn "The gem #{name} has been deleted. Gemspec information is still available though:\n#{gem_info}"
      end

      Bundler.ui.info gem_info
    end

    def gem_dependencies
      @gem_dependencies ||= Bundler.definition.specs.map do |spec|
        dependency = spec.dependencies.find {|dep| dep.name == gem_name }
        next unless dependency
        "#{spec.name} (#{spec.version}) depends on #{gem_name} (#{dependency.requirements_list.join(", ")})"
      end.compact.sort
    end
  end
end
PK'"#[�LLb	b	+gems/bundler-2.3.27/lib/bundler/cli/exec.rbnu�[���# frozen_string_literal: true

require_relative "../current_ruby"

module Bundler
  class CLI::Exec
    attr_reader :options, :args, :cmd

    TRAPPED_SIGNALS = %w[INT].freeze

    def initialize(options, args)
      @options = options
      @cmd = args.shift
      @args = args
      @args << { :close_others => !options.keep_file_descriptors? } unless Bundler.current_ruby.jruby?
    end

    def run
      validate_cmd!
      SharedHelpers.set_bundle_environment
      if bin_path = Bundler.which(cmd)
        if !Bundler.settings[:disable_exec_load] && ruby_shebang?(bin_path)
          return kernel_load(bin_path, *args)
        end
        kernel_exec(bin_path, *args)
      else
        # exec using the given command
        kernel_exec(cmd, *args)
      end
    end

    private

    def validate_cmd!
      return unless cmd.nil?
      Bundler.ui.error "bundler: exec needs a command to run"
      exit 128
    end

    def kernel_exec(*args)
      Kernel.exec(*args)
    rescue Errno::EACCES, Errno::ENOEXEC
      Bundler.ui.error "bundler: not executable: #{cmd}"
      exit 126
    rescue Errno::ENOENT
      Bundler.ui.error "bundler: command not found: #{cmd}"
      Bundler.ui.warn "Install missing gem executables with `bundle install`"
      exit 127
    end

    def kernel_load(file, *args)
      args.pop if args.last.is_a?(Hash)
      ARGV.replace(args)
      $0 = file
      Process.setproctitle(process_title(file, args)) if Process.respond_to?(:setproctitle)
      require_relative "../setup"
      TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
      Kernel.load(file)
    rescue SystemExit, SignalException
      raise
    rescue Exception # rubocop:disable Lint/RescueException
      Bundler.ui.error "bundler: failed to load command: #{cmd} (#{file})"
      Bundler::FriendlyErrors.disable!
      raise
    end

    def process_title(file, args)
      "#{file} #{args.join(" ")}".strip
    end

    def ruby_shebang?(file)
      possibilities = [
        "#!/opt/alt/ruby31/bin/ruby\n",
        "#!/usr/bin/env jruby\n",
        "#!/usr/bin/env truffleruby\n",
        "#!#{Gem.ruby}\n",
      ]

      if File.zero?(file)
        Bundler.ui.warn "#{file} is empty"
        return false
      end

      first_line = File.open(file, "rb") {|f| f.read(possibilities.map(&:size).max) }
      possibilities.any? {|shebang| first_line.start_with?(shebang) }
    end
  end
end
PK'"#[��88.gems/bundler-2.3.27/lib/bundler/cli/console.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Console
    attr_reader :options, :group
    def initialize(options, group)
      @options = options
      @group = group
    end

    def run
      Bundler::SharedHelpers.major_deprecation 2, "bundle console will be replaced " \
                           "by `bin/console` generated by `bundle gem <name>`"

      group ? Bundler.require(:default, *group.split(" ").map!(&:to_sym)) : Bundler.require
      ARGV.clear

      console = get_console(Bundler.settings[:console] || "irb")
      console.start
    end

    def get_console(name)
      require name
      get_constant(name)
    rescue LoadError
      Bundler.ui.error "Couldn't load console #{name}, falling back to irb"
      require "irb"
      get_constant("irb")
    end

    def get_constant(name)
      const_name = {
        "pry"  => :Pry,
        "ripl" => :Ripl,
        "irb"  => :IRB,
      }[name]
      Object.const_get(const_name)
    rescue NameError
      Bundler.ui.error "Could not find constant #{const_name}"
      exit 1
    end
  end
end
PK'"#[��)``,gems/bundler-2.3.27/lib/bundler/cli/clean.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Clean
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      require_path_or_force unless options[:"dry-run"]
      Bundler.load.clean(options[:"dry-run"])
    end

    protected

    def require_path_or_force
      return unless Bundler.use_system_gems? && !options[:force]
      raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
        "If you're sure you want to remove every system gem not in this " \
        "bundle, run `bundle clean --force`."
    end
  end
end
PK'"#[Ak���-gems/bundler-2.3.27/lib/bundler/cli/plugin.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_thor"
module Bundler
  class CLI::Plugin < Thor
    desc "install PLUGINS", "Install the plugin from the source"
    long_desc <<-D
      Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git (for remote repos) or --local_git (for local repos). If no sources are provided, it uses Gem.sources
   D
    method_option "source", :type => :string, :default => nil, :banner =>
      "URL of the RubyGems source to fetch the plugin from"
    method_option "version", :type => :string, :default => nil, :banner =>
      "The version of the plugin to fetch"
    method_option "git", :type => :string, :default => nil, :banner =>
      "URL of the git repo to fetch from"
    method_option "local_git", :type => :string, :default => nil, :banner =>
      "Path of the local git repo to fetch from"
    method_option "branch", :type => :string, :default => nil, :banner =>
      "The git branch to checkout"
    method_option "ref", :type => :string, :default => nil, :banner =>
      "The git revision to check out"
    def install(*plugins)
      Bundler::Plugin.install(plugins, options)
    end

    desc "uninstall PLUGINS", "Uninstall the plugins"
    long_desc <<-D
      Uninstall given list of plugins. To uninstall all the plugins, use -all option.
    D
    method_option "all", :type => :boolean, :default => nil, :banner =>
      "Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
    def uninstall(*plugins)
      Bundler::Plugin.uninstall(plugins, options)
    end

    desc "list", "List the installed plugins and available commands"
    def list
      Bundler::Plugin.list
    end
  end
end
PK'"#[�;�.>>*gems/bundler-2.3.27/lib/bundler/cli/viz.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Viz
    attr_reader :options, :gem_name
    def initialize(options)
      @options = options
    end

    def run
      # make sure we get the right `graphviz`. There is also a `graphviz`
      # gem we're not built to support
      gem "ruby-graphviz"
      require "graphviz"

      options[:without] = options[:without].join(":").tr(" ", ":").split(":")
      output_file = File.expand_path(options[:file])

      graph = Graph.new(Bundler.load, output_file, options[:version], options[:requirements], options[:format], options[:without])
      graph.viz
    rescue LoadError => e
      Bundler.ui.error e.inspect
      Bundler.ui.warn "Make sure you have the graphviz ruby gem. You can install it with:"
      Bundler.ui.warn "`gem install ruby-graphviz`"
    rescue StandardError => e
      raise unless e.message =~ /GraphViz not installed or dot not in PATH/
      Bundler.ui.error e.message
      Bundler.ui.warn "Please install GraphViz. On a Mac with Homebrew, you can run `brew install graphviz`."
    end
  end
end
PK'"#[mV����+gems/bundler-2.3.27/lib/bundler/cli/open.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Open
    attr_reader :options, :name
    def initialize(options, name)
      @options = options
      @name = name
    end

    def run
      editor = [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? }
      return Bundler.ui.info("To open a bundled gem, set $EDITOR or $BUNDLER_EDITOR") unless editor
      return unless spec = Bundler::CLI::Common.select_spec(name, :regex_match)
      if spec.default_gem?
        Bundler.ui.info "Unable to open #{name} because it's a default gem, so the directory it would normally be installed to does not exist."
      else
        path = spec.full_gem_path
        Dir.chdir(path) do
          require "shellwords"
          command = Shellwords.split(editor) + [path]
          Bundler.with_original_env do
            system(*command)
          end || Bundler.ui.info("Could not run '#{command.join(" ")}'")
        end
      end
    end
  end
end
PK'"#[g�ӽFF,gems/bundler-2.3.27/lib/bundler/cli/issue.rbnu�[���# frozen_string_literal: true

require "rbconfig"

module Bundler
  class CLI::Issue
    def run
      Bundler.ui.info <<-EOS.gsub(/^ {8}/, "")
        Did you find an issue with Bundler? Before filing a new issue,
        be sure to check out these resources:

        1. Check out our troubleshooting guide for quick fixes to common issues:
        https://github.com/rubygems/rubygems/blob/master/bundler/doc/TROUBLESHOOTING.md

        2. Instructions for common Bundler uses can be found on the documentation
        site: https://bundler.io/

        3. Information about each Bundler command can be found in the Bundler
        man pages: https://bundler.io/man/bundle.1.html

        Hopefully the troubleshooting steps above resolved your problem!  If things
        still aren't working the way you expect them to, please let us know so
        that we can diagnose and help fix the problem you're having, by filling
        in the new issue form located at
        https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md,
        and copy and pasting the information below.

      EOS

      Bundler.ui.info Bundler::Env.report

      Bundler.ui.info "\n## Bundle Doctor"
      doctor
    end

    def doctor
      require_relative "doctor"
      Bundler::CLI::Doctor.new({}).run
    end
  end
end
PK'"#[⮬�77-gems/bundler-2.3.27/lib/bundler/cli/common.rbnu�[���# frozen_string_literal: true

module Bundler
  module CLI::Common
    def self.output_post_install_messages(messages)
      return if Bundler.settings["ignore_messages"]
      messages.to_a.each do |name, msg|
        print_post_install_message(name, msg) unless Bundler.settings["ignore_messages.#{name}"]
      end
    end

    def self.print_post_install_message(name, msg)
      Bundler.ui.confirm "Post-install message from #{name}:"
      Bundler.ui.info msg
    end

    def self.output_fund_metadata_summary
      return if Bundler.settings["ignore_funding_requests"]
      definition = Bundler.definition
      current_dependencies = definition.requested_dependencies
      current_specs = definition.specs

      count = current_dependencies.count {|dep| current_specs[dep.name].first.metadata.key?("funding_uri") }

      return if count.zero?

      intro = count > 1 ? "#{count} installed gems you directly depend on are" : "#{count} installed gem you directly depend on is"
      message = "#{intro} looking for funding.\n  Run `bundle fund` for details"
      Bundler.ui.info message
    end

    def self.output_without_groups_message(command)
      return if Bundler.settings[:without].empty?
      Bundler.ui.confirm without_groups_message(command)
    end

    def self.without_groups_message(command)
      command_in_past_tense = command == :install ? "installed" : "updated"
      groups = Bundler.settings[:without]
      "Gems in the #{verbalize_groups(groups)} were not #{command_in_past_tense}."
    end

    def self.verbalize_groups(groups)
      groups.map! {|g| "'#{g}'" }
      group_list = [groups[0...-1].join(", "), groups[-1..-1]].
        reject {|s| s.to_s.empty? }.join(" and ")
      group_str = groups.size == 1 ? "group" : "groups"
      "#{group_str} #{group_list}"
    end

    def self.select_spec(name, regex_match = nil)
      specs = []
      regexp = Regexp.new(name) if regex_match

      Bundler.definition.specs.each do |spec|
        return spec if spec.name == name
        specs << spec if regexp && spec.name =~ regexp
      end

      case specs.count
      when 0
        dep_in_other_group = Bundler.definition.current_dependencies.find {|dep|dep.name == name }

        if dep_in_other_group
          raise GemNotFound, "Could not find gem '#{name}', because it's in the #{verbalize_groups(dep_in_other_group.groups)}, configured to be ignored."
        else
          raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
        end
      when 1
        specs.first
      else
        ask_for_spec_from(specs)
      end
    rescue RegexpError
      raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
    end

    def self.ask_for_spec_from(specs)
      specs.each_with_index do |spec, index|
        Bundler.ui.info "#{index.succ} : #{spec.name}", true
      end
      Bundler.ui.info "0 : - exit -", true

      num = Bundler.ui.ask("> ").to_i
      num > 0 ? specs[num - 1] : nil
    end

    def self.gem_not_found_message(missing_gem_name, alternatives)
      require_relative "../similarity_detector"
      message = "Could not find gem '#{missing_gem_name}'."
      alternate_names = alternatives.map {|a| a.respond_to?(:name) ? a.name : a }
      suggestions = SimilarityDetector.new(alternate_names).similar_word_list(missing_gem_name)
      message += "\nDid you mean #{suggestions}?" if suggestions
      message
    end

    def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
      return unless locked_gems

      locked_names = locked_gems.specs.map(&:name).uniq
      names.-(locked_names).each do |g|
        raise GemNotFound, gem_not_found_message(g, locked_names)
      end
    end

    def self.configure_gem_version_promoter(definition, options)
      patch_level = patch_level_options(options)
      patch_level << :patch if patch_level.empty? && Bundler.settings[:prefer_patch]
      raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1

      definition.gem_version_promoter.tap do |gvp|
        gvp.level = patch_level.first || :major
        gvp.strict = options[:strict] || options["filter-strict"]
      end
    end

    def self.patch_level_options(options)
      [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
    end

    def self.clean_after_install?
      clean = Bundler.settings[:clean]
      return clean unless clean.nil?
      clean ||= Bundler.feature_flag.auto_clean_without_path? && Bundler.settings[:path].nil?
      clean &&= !Bundler.use_system_gems?
      clean
    end
  end
end
PK'"#[/Ԗ __-gems/bundler-2.3.27/lib/bundler/cli/remove.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Remove
    def initialize(gems, options)
      @gems = gems
      @options = options
    end

    def run
      raise InvalidOption, "Please specify gems to remove." if @gems.empty?

      Injector.remove(@gems, {})
      Installer.install(Bundler.root, Bundler.definition)
    end
  end
end
PK'"#[3�LT��/gems/bundler-2.3.27/lib/bundler/cli/pristine.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Pristine
    def initialize(gems)
      @gems = gems
    end

    def run
      CLI::Common.ensure_all_gems_in_lockfile!(@gems)
      definition = Bundler.definition
      definition.validate_runtime!
      installer = Bundler::Installer.new(Bundler.root, definition)

      Bundler.load.specs.each do |spec|
        next if spec.name == "bundler" # Source::Rubygems doesn't install bundler
        next if !@gems.empty? && !@gems.include?(spec.name)

        gem_name = "#{spec.name} (#{spec.version}#{spec.git_version})"
        gem_name += " (#{spec.platform})" if !spec.platform.nil? && spec.platform != Gem::Platform::RUBY

        case source = spec.source
        when Source::Rubygems
          cached_gem = spec.cache_file
          unless File.exist?(cached_gem)
            Bundler.ui.error("Failed to pristine #{gem_name}. Cached gem #{cached_gem} does not exist.")
            next
          end

          FileUtils.rm_rf spec.full_gem_path
        when Source::Git
          if source.local?
            Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
            next
          end

          source.remote!
          if extension_cache_path = source.extension_cache_path(spec)
            FileUtils.rm_rf extension_cache_path
          end
          FileUtils.rm_rf spec.extension_dir
          FileUtils.rm_rf spec.full_gem_path
        else
          Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
          next
        end

        Bundler::GemInstaller.new(spec, installer, false, 0, true).install_from_spec
      end
    end
  end
end
PK'"#[U<�{{-gems/bundler-2.3.27/lib/bundler/cli/update.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Update
    attr_reader :options, :gems
    def initialize(options, gems)
      @options = options
      @gems = gems
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]

      update_bundler = options[:bundler]

      Bundler.self_manager.update_bundler_and_restart_with_it_if_needed(update_bundler) if update_bundler

      Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?

      sources = Array(options[:source])
      groups  = Array(options[:group]).map(&:to_sym)

      full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !update_bundler

      if full_update && !options[:all]
        if Bundler.feature_flag.update_requires_all_flag?
          raise InvalidOption, "To update everything, pass the `--all` flag."
        end
        SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
      elsif !full_update && options[:all]
        raise InvalidOption, "Cannot specify --all along with specific options."
      end

      conservative = options[:conservative]

      if full_update
        if conservative
          Bundler.definition(:conservative => conservative)
        else
          Bundler.definition(true)
        end
      else
        unless Bundler.default_lockfile.exist?
          raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " \
            "Run `bundle install` to update and install the bundled gems."
        end
        Bundler::CLI::Common.ensure_all_gems_in_lockfile!(gems)

        if groups.any?
          deps = Bundler.definition.dependencies.select {|d| (d.groups & groups).any? }
          gems.concat(deps.map(&:name))
        end

        Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
                           :conservative => conservative,
                           :bundler => update_bundler)
      end

      Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)

      Bundler::Fetcher.disable_endpoint = options["full-index"]

      opts = options.dup
      opts["update"] = true
      opts["local"] = options[:local]

      Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]

      Bundler.definition.validate_runtime!

      if locked_gems = Bundler.definition.locked_gems
        previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
          h[s.name] = { :spec => s, :version => s.version, :source => s.source.identifier }
          h
        end
      end

      installer = Installer.install Bundler.root, Bundler.definition, opts
      Bundler.load.cache if Bundler.app_cache.exist?

      if CLI::Common.clean_after_install?
        require_relative "clean"
        Bundler::CLI::Clean.new(options).run
      end

      if locked_gems
        gems.each do |name|
          locked_info = previous_locked_info[name]
          next unless locked_info

          locked_spec = locked_info[:spec]
          new_spec = Bundler.definition.specs[name].first
          unless new_spec
            unless locked_spec.match_platform(Bundler.local_platform)
              Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
            end

            next
          end

          locked_source = locked_info[:source]
          new_source = new_spec.source.identifier
          next if locked_source != new_source

          new_version = new_spec.version
          locked_version = locked_info[:version]
          if new_version < locked_version
            Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
          elsif new_version == locked_version
            Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
          end
        end
      end

      Bundler.ui.confirm "Bundle updated!"
      Bundler::CLI::Common.output_without_groups_message(:update)
      Bundler::CLI::Common.output_post_install_messages installer.post_install_messages

      Bundler::CLI::Common.output_fund_metadata_summary
    end
  end
end
PK'"#[ ��ii,gems/bundler-2.3.27/lib/bundler/cli/cache.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Cache
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]
      Bundler.settings.set_command_option_if_given :path, options[:path]
      Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]

      setup_cache_all
      install

      # TODO: move cache contents here now that all bundles are locked
      custom_path = Bundler.settings[:path] if options[:path]

      Bundler.settings.temporary(:cache_all_platforms => options["all-platforms"]) do
        Bundler.load.cache(custom_path)
      end
    end

    private

    def install
      require_relative "install"
      options = self.options.dup
      options["local"] = false if Bundler.settings[:cache_all_platforms]
      options["no-cache"] = true
      Bundler::CLI::Install.new(options).run
    end

    def setup_cache_all
      all = options.fetch(:all, Bundler.feature_flag.cache_all? || nil)

      Bundler.settings.set_command_option_if_given :cache_all, all
    end
  end
end
PK'"#[a���-gems/bundler-2.3.27/lib/bundler/cli/config.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Config < Thor
    class_option :parseable, :type => :boolean, :banner => "Use minimal formatting for more parseable output"

    def self.scope_options
      method_option :global, :type => :boolean, :banner => "Only change the global config"
      method_option :local, :type => :boolean, :banner => "Only change the local config"
    end
    private_class_method :scope_options

    desc "base NAME [VALUE]", "The Bundler 1 config interface", :hide => true
    scope_options
    method_option :delete, :type => :boolean, :banner => "delete"
    def base(name = nil, *value)
      new_args =
        if ARGV.size == 1
          ["config", "list"]
        elsif ARGV.include?("--delete")
          ARGV.map {|arg| arg == "--delete" ? "unset" : arg }
        elsif ARGV.include?("--global") || ARGV.include?("--local") || ARGV.size == 3
          ["config", "set", *ARGV[1..-1]]
        else
          ["config", "get", ARGV[1]]
        end

      SharedHelpers.major_deprecation 3,
        "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."

      Base.new(options, name, value, self).run
    end

    desc "list", "List out all configured settings"
    def list
      Base.new(options, nil, nil, self).run
    end

    desc "get NAME", "Returns the value for the given key"
    def get(name)
      Base.new(options, name, nil, self).run
    end

    desc "set NAME VALUE", "Sets the given value for the given key"
    scope_options
    def set(name, value, *value_)
      Base.new(options, name, value_.unshift(value), self).run
    end

    desc "unset NAME", "Unsets the value for the given key"
    scope_options
    def unset(name)
      options[:delete] = true
      Base.new(options, name, nil, self).run
    end

    default_task :base

    class Base
      attr_reader :name, :value, :options, :scope, :thor

      def initialize(options, name, value, thor)
        @options = options
        @name = name
        value = Array(value)
        @value = value.empty? ? nil : value.join(" ")
        @thor = thor
        validate_scope!
      end

      def run
        unless name
          warn_unused_scope "Ignoring --#{scope}"
          confirm_all
          return
        end

        if options[:delete]
          if !explicit_scope? || scope != "global"
            Bundler.settings.set_local(name, nil)
          end
          if !explicit_scope? || scope != "local"
            Bundler.settings.set_global(name, nil)
          end
          return
        end

        if value.nil?
          warn_unused_scope "Ignoring --#{scope} since no value to set was given"

          if options[:parseable]
            if value = Bundler.settings[name]
              Bundler.ui.info("#{name}=#{value}")
            end
            return
          end

          confirm(name)
          return
        end

        Bundler.ui.info(message) if message
        Bundler.settings.send("set_#{scope}", name, new_value)
      end

      def confirm_all
        if @options[:parseable]
          thor.with_padding do
            Bundler.settings.all.each do |setting|
              val = Bundler.settings[setting]
              Bundler.ui.info "#{setting}=#{val}"
            end
          end
        else
          Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
          Bundler.settings.all.each do |setting|
            Bundler.ui.confirm setting
            show_pretty_values_for(setting)
            Bundler.ui.confirm ""
          end
        end
      end

      def confirm(name)
        Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
        show_pretty_values_for(name)
      end

      def new_value
        pathname = Pathname.new(value)
        if name.start_with?("local.") && pathname.directory?
          pathname.expand_path.to_s
        else
          value
        end
      end

      def message
        locations = Bundler.settings.locations(name)
        if @options[:parseable]
          "#{name}=#{new_value}" if new_value
        elsif scope == "global"
          if !locations[:local].nil?
            "Your application has set #{name} to #{locations[:local].inspect}. " \
              "This will override the global value you are currently setting"
          elsif locations[:env]
            "You have a bundler environment variable for #{name} set to " \
              "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
          elsif !locations[:global].nil? && locations[:global] != value
            "You are replacing the current global value of #{name}, which is currently " \
              "#{locations[:global].inspect}"
          end
        elsif scope == "local" && !locations[:local].nil? && locations[:local] != value
          "You are replacing the current local value of #{name}, which is currently " \
            "#{locations[:local].inspect}"
        end
      end

      def show_pretty_values_for(setting)
        thor.with_padding do
          Bundler.settings.pretty_values_for(setting).each do |line|
            Bundler.ui.info line
          end
        end
      end

      def explicit_scope?
        @explicit_scope
      end

      def warn_unused_scope(msg)
        return unless explicit_scope?
        return if options[:parseable]

        Bundler.ui.warn(msg)
      end

      def validate_scope!
        @explicit_scope = true
        scopes = %w[global local].select {|s| options[s] }
        case scopes.size
        when 0
          @scope = inside_app? ? "local" : "global"
          @explicit_scope = false
        when 1
          @scope = scopes.first
        else
          raise InvalidOption,
            "The options #{scopes.join " and "} were specified. Please only use one of the switches at a time."
        end
      end

      private

      def inside_app?
        Bundler.root
        true
      rescue GemfileNotFound
        false
      end
    end
  end
end
PK'"#[lqOww-gems/bundler-2.3.27/lib/bundler/cli/inject.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Inject
    attr_reader :options, :name, :version, :group, :source, :gems
    def initialize(options, name, version)
      @options = options
      @name = name
      @version = version || last_version_number
      @group = options[:group].split(",") unless options[:group].nil?
      @source = options[:source]
      @gems = []
    end

    def run
      # The required arguments allow Thor to give useful feedback when the arguments
      # are incorrect. This adds those first two arguments onto the list as a whole.
      gems.unshift(source).unshift(group).unshift(version).unshift(name)

      # Build an array of Dependency objects out of the arguments
      deps = []
      # when `inject` support addition of more than one gem, then this loop will
      # help. Currently this loop is running once.
      gems.each_slice(4) do |gem_name, gem_version, gem_group, gem_source|
        ops = Gem::Requirement::OPS.map {|key, _val| key }
        has_op = ops.any? {|op| gem_version.start_with? op }
        gem_version = "~> #{gem_version}" unless has_op
        deps << Bundler::Dependency.new(gem_name, gem_version, "group" => gem_group, "source" => gem_source)
      end

      added = Injector.inject(deps, options)

      if added.any?
        Bundler.ui.confirm "Added to Gemfile:"
        Bundler.ui.confirm(added.map do |d|
          name = "'#{d.name}'"
          requirement = ", '#{d.requirement}'"
          group = ", :group => #{d.groups.inspect}" if d.groups != Array(:default)
          source = ", :source => '#{d.source}'" unless d.source.nil?
          %(gem #{name}#{requirement}#{group}#{source})
        end.join("\n"))
      else
        Bundler.ui.confirm "All gems were already present in the Gemfile"
      end
    end

    private

    def last_version_number
      definition = Bundler.definition(true)
      definition.resolve_remotely!
      specs = definition.index[name].sort_by(&:version)
      unless options[:pre]
        specs.delete_if {|b| b.respond_to?(:version) && b.version.prerelease? }
      end
      spec = specs.last
      spec.version.to_s
    end
  end
end
PK("#[�`K��+gems/bundler-2.3.27/lib/bundler/cli/lock.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Lock
    attr_reader :options

    def initialize(options)
      @options = options
    end

    def run
      unless Bundler.default_gemfile
        Bundler.ui.error "Unable to find a Gemfile to lock"
        exit 1
      end

      print = options[:print]
      ui = Bundler.ui
      Bundler.ui = UI::Silent.new if print

      Bundler::Fetcher.disable_endpoint = options["full-index"]

      update = options[:update]
      conservative = options[:conservative]

      if update.is_a?(Array) # unlocking specific gems
        Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
        update = { :gems => update, :conservative => conservative }
      elsif update
        update = { :conservative => conservative } if conservative
      end
      definition = Bundler.definition(update)

      Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options) if options[:update]

      options["remove-platform"].each do |platform|
        definition.remove_platform(platform)
      end

      options["add-platform"].each do |platform_string|
        platform = Gem::Platform.new(platform_string)
        if platform.to_s == "unknown"
          Bundler.ui.warn "The platform `#{platform_string}` is unknown to RubyGems " \
            "and adding it will likely lead to resolution errors"
        end
        definition.add_platform(platform)
      end

      if definition.platforms.empty?
        raise InvalidOption, "Removing all platforms from the bundle is not allowed"
      end

      definition.resolve_remotely! unless options[:local]

      if print
        puts definition.to_lock
      else
        file = options[:lockfile]
        file = file ? File.expand_path(file) : Bundler.default_lockfile
        puts "Writing lockfile to #{file}"
        definition.lock(file)
      end

      Bundler.ui = ui
    end
  end
end
PK("#[R�L��*gems/bundler-2.3.27/lib/bundler/cli/add.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Add
    attr_reader :gems, :options, :version

    def initialize(options, gems)
      @gems = gems
      @options = options
      @options[:group] = options[:group].split(",").map(&:strip) unless options[:group].nil?
      @version = options[:version].split(",").map(&:strip) unless options[:version].nil?
    end

    def run
      validate_options!
      inject_dependencies
      perform_bundle_install unless options["skip-install"]
    end

    private

    def perform_bundle_install
      Installer.install(Bundler.root, Bundler.definition)
      Bundler.load.cache if Bundler.app_cache.exist?
    end

    def inject_dependencies
      dependencies = gems.map {|g| Bundler::Dependency.new(g, version, options) }

      Injector.inject(dependencies,
        :conservative_versioning => options[:version].nil?, # Perform conservative versioning only when version is not specified
        :optimistic => options[:optimistic],
        :strict => options[:strict])
    end

    def validate_options!
      raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if options[:strict] && options[:optimistic]

      # raise error when no gems are specified
      raise InvalidOption, "Please specify gems to add." if gems.empty?

      version.to_a.each do |v|
        raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
      end
    end
  end
end
PK("#[|���.gems/bundler-2.3.27/lib/bundler/cli/install.rbnu�[���# frozen_string_literal: true

module Bundler
  class CLI::Install
    attr_reader :options
    def initialize(options)
      @options = options
    end

    def run
      Bundler.ui.level = "warn" if options[:quiet]

      warn_if_root

      Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed

      Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD

      # Disable color in deployment mode
      Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]

      check_for_options_conflicts

      check_trust_policy

      if options[:deployment] || options[:frozen] || Bundler.frozen_bundle?
        unless Bundler.default_lockfile.exist?
          flag   = "--deployment flag" if options[:deployment]
          flag ||= "--frozen flag"     if options[:frozen]
          flag ||= "deployment setting"
          raise ProductionError, "The #{flag} requires a #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}. Please make " \
                                 "sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
                                 "before deploying."
        end

        options[:local] = true if Bundler.app_cache.exist?

        Bundler.settings.set_command_option :deployment, true if options[:deployment]
        Bundler.settings.set_command_option :frozen, true if options[:frozen]
      end

      # When install is called with --no-deployment, disable deployment mode
      if options[:deployment] == false
        Bundler.settings.set_command_option :frozen, nil
        options[:system] = true
      end

      normalize_settings

      Bundler::Fetcher.disable_endpoint = options["full-index"]

      if options["binstubs"]
        Bundler::SharedHelpers.major_deprecation 2,
          "The --binstubs option will be removed in favor of `bundle binstubs --all`"
      end

      Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?

      definition = Bundler.definition
      definition.validate_runtime!

      installer = Installer.install(Bundler.root, definition, options)

      Bundler.settings.temporary(:cache_all_platforms => options[:local] ? false : Bundler.settings[:cache_all_platforms]) do
        Bundler.load.cache(nil, options[:local]) if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
      end

      Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
      Bundler::CLI::Common.output_without_groups_message(:install)

      if Bundler.use_system_gems?
        Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
      else
        relative_path = Bundler.configured_bundle_path.base_path_relative_to_pwd
        Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
      end

      Bundler::CLI::Common.output_post_install_messages installer.post_install_messages

      warn_ambiguous_gems

      if CLI::Common.clean_after_install?
        require_relative "clean"
        Bundler::CLI::Clean.new(options).run
      end

      Bundler::CLI::Common.output_fund_metadata_summary
    rescue Gem::InvalidSpecificationException
      Bundler.ui.warn "You have one or more invalid gemspecs that need to be fixed."
      raise
    end

    private

    def warn_if_root
      return if Bundler.settings[:silence_root_warning] || Gem.win_platform? || !Process.uid.zero?
      Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
        "if it is needed, and installing your bundle as root will break this " \
        "application for all non-root users on this machine.", :wrap => true
    end

    def dependencies_count_for(definition)
      count = definition.dependencies.count
      "#{count} Gemfile #{count == 1 ? "dependency" : "dependencies"}"
    end

    def gems_installed_for(definition)
      count = definition.specs.count
      "#{count} #{count == 1 ? "gem" : "gems"} now installed"
    end

    def check_for_group_conflicts_in_cli_options
      conflicting_groups = Array(options[:without]) & Array(options[:with])
      return if conflicting_groups.empty?
      raise InvalidOption, "You can't list a group in both with and without." \
        " The offending groups are: #{conflicting_groups.join(", ")}."
    end

    def check_for_options_conflicts
      if (options[:path] || options[:deployment]) && options[:system]
        error_message = String.new
        error_message << "You have specified both --path as well as --system. Please choose only one option.\n" if options[:path]
        error_message << "You have specified both --deployment as well as --system. Please choose only one option.\n" if options[:deployment]
        raise InvalidOption.new(error_message)
      end
    end

    def check_trust_policy
      trust_policy = options["trust-policy"]
      unless Bundler.rubygems.security_policies.keys.unshift(nil).include?(trust_policy)
        raise InvalidOption, "RubyGems doesn't know about trust policy '#{trust_policy}'. " \
          "The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
      end
      Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
    end

    def normalize_groups
      check_for_group_conflicts_in_cli_options

      # need to nil them out first to get around validation for backwards compatibility
      Bundler.settings.set_command_option :without, nil
      Bundler.settings.set_command_option :with,    nil
      Bundler.settings.set_command_option :without, options[:without]
      Bundler.settings.set_command_option :with,    options[:with]
    end

    def normalize_settings
      Bundler.settings.set_command_option :path, nil if options[:system]
      Bundler.settings.set_command_option_if_given :path, options[:path]

      if options["standalone"] && Bundler.settings[:path].nil? && !options["local"]
        Bundler.settings.temporary(:path_relative_to_cwd => false) do
          Bundler.settings.set_command_option :path, "bundle"
        end
      end

      bin_option = options["binstubs"]
      bin_option = nil if bin_option && bin_option.empty?
      Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]

      Bundler.settings.set_command_option_if_given :shebang, options["shebang"]

      Bundler.settings.set_command_option_if_given :jobs, options["jobs"]

      Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]

      Bundler.settings.set_command_option_if_given :no_install, options["no-install"]

      Bundler.settings.set_command_option_if_given :clean, options["clean"]

      normalize_groups if options[:without] || options[:with]

      options[:force] = options[:redownload]
    end

    def warn_ambiguous_gems
      # TODO: remove this when we drop Bundler 1.x support
      Installer.ambiguous_gems.to_a.each do |name, installed_from_uri, *also_found_in_uris|
        Bundler.ui.warn "Warning: the gem '#{name}' was found in multiple sources."
        Bundler.ui.warn "Installed from: #{installed_from_uri}"
        Bundler.ui.warn "Also found in:"
        also_found_in_uris.each {|uri| Bundler.ui.warn "  * #{uri}" }
        Bundler.ui.warn "You should add a source requirement to restrict this gem to your preferred source."
        Bundler.ui.warn "For example:"
        Bundler.ui.warn "    gem '#{name}', :source => '#{installed_from_uri}'"
        Bundler.ui.warn "Then uninstall the gem '#{name}' (or delete all bundled gems) and then install again."
      end
    end
  end
end
PK("#[Ӄ�nDD0gems/bundler-2.3.27/lib/bundler/plugin/events.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    module Events
      def self.define(const, event)
        const = const.to_sym.freeze
        if const_defined?(const) && const_get(const) != event
          raise ArgumentError, "Attempting to reassign #{const} to a different value"
        end
        const_set(const, event) unless const_defined?(const)
        @events ||= {}
        @events[event] = const
      end
      private_class_method :define

      def self.reset
        @events.each_value do |const|
          remove_const(const)
        end
        @events = nil
      end
      private_class_method :reset

      # Check if an event has been defined
      # @param event [String] An event to check
      # @return [Boolean] A boolean indicating if the event has been defined
      def self.defined_event?(event)
        @events ||= {}
        @events.key?(event)
      end

      # @!parse
      #   A hook called before each individual gem is installed
      #   Includes a Bundler::ParallelInstaller::SpecInstallation.
      #   No state, error, post_install_message will be present as nothing has installed yet
      #   GEM_BEFORE_INSTALL = "before-install"
      define :GEM_BEFORE_INSTALL, "before-install"

      # @!parse
      #   A hook called after each individual gem is installed
      #   Includes a Bundler::ParallelInstaller::SpecInstallation.
      #     - If state is failed, an error will be present.
      #     - If state is success, a post_install_message may be present.
      #   GEM_AFTER_INSTALL = "after-install"
      define :GEM_AFTER_INSTALL,  "after-install"

      # @!parse
      #   A hook called before any gems install
      #   Includes an Array of Bundler::Dependency objects
      #   GEM_BEFORE_INSTALL_ALL = "before-install-all"
      define :GEM_BEFORE_INSTALL_ALL, "before-install-all"

      # @!parse
      #   A hook called after any gems install
      #   Includes an Array of Bundler::Dependency objects
      #   GEM_AFTER_INSTALL_ALL = "after-install-all"
      define :GEM_AFTER_INSTALL_ALL,  "after-install-all"
    end
  end
end
PK("#["�x��-gems/bundler-2.3.27/lib/bundler/plugin/dsl.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    # Dsl to parse the Gemfile looking for plugins to install
    class DSL < Bundler::Dsl
      class PluginGemfileError < PluginError; end
      alias_method :_gem, :gem # To use for plugin installation as gem

      # So that we don't have to override all there methods to dummy ones
      # explicitly.
      # They will be handled by method_missing
      [:gemspec, :gem, :install_if, :platforms, :env].each {|m| undef_method m }

      # This lists the plugins that was added automatically and not specified by
      # the user.
      #
      # When we encounter :type attribute with a source block, we add a plugin
      # by name bundler-source-<type> to list of plugins to be installed.
      #
      # These plugins are optional and are not installed when there is conflict
      # with any other plugin.
      attr_reader :inferred_plugins

      def initialize
        super
        @sources = Plugin::SourceList.new
        @inferred_plugins = [] # The source plugins inferred from :type
      end

      def plugin(name, *args)
        _gem(name, *args)
      end

      def method_missing(name, *args)
        raise PluginGemfileError, "Undefined local variable or method `#{name}' for Gemfile" unless Bundler::Dsl.method_defined? name
      end

      def source(source, *args, &blk)
        options = args.last.is_a?(Hash) ? args.pop.dup : {}
        options = normalize_hash(options)
        return super unless options.key?("type")

        plugin_name = "bundler-source-#{options["type"]}"

        return if @dependencies.any? {|d| d.name == plugin_name }

        plugin(plugin_name)
        @inferred_plugins << plugin_name
      end
    end
  end
end
PK("#[��AA5gems/bundler-2.3.27/lib/bundler/plugin/source_list.rbnu�[���# frozen_string_literal: true

module Bundler
  # SourceList object to be used while parsing the Gemfile, setting the
  # approptiate options to be used with Source classes for plugin installation
  module Plugin
    class SourceList < Bundler::SourceList
      def add_git_source(options = {})
        add_source_to_list Plugin::Installer::Git.new(options), git_sources
      end

      def add_rubygems_source(options = {})
        add_source_to_list Plugin::Installer::Rubygems.new(options), @rubygems_sources
      end

      def all_sources
        path_sources + git_sources + rubygems_sources + [metadata_source]
      end

      def default_source
        git_sources.first || global_rubygems_source
      end

      private

      def rubygems_aggregate_class
        Plugin::Installer::Rubygems
      end
    end
  end
end
PK("#[UK<�
�
3gems/bundler-2.3.27/lib/bundler/plugin/installer.rbnu�[���# frozen_string_literal: true

module Bundler
  # Handles the installation of plugin in appropriate directories.
  #
  # This class is supposed to be wrapper over the existing gem installation infra
  # but currently it itself handles everything as the Source's subclasses (e.g. Source::RubyGems)
  # are heavily dependent on the Gemfile.
  module Plugin
    class Installer
      autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
      autoload :Git,      File.expand_path("installer/git", __dir__)

      def install(names, options)
        check_sources_consistency!(options)

        version = options[:version] || [">= 0"]

        if options[:git]
          install_git(names, version, options)
        elsif options[:local_git]
          install_local_git(names, version, options)
        else
          sources = options[:source] || Gem.sources
          install_rubygems(names, version, sources)
        end
      end

      # Installs the plugin from Definition object created by limited parsing of
      # Gemfile searching for plugins to be installed
      #
      # @param [Definition] definition object
      # @return [Hash] map of names to their specs they are installed with
      def install_definition(definition)
        def definition.lock(*); end
        definition.resolve_remotely!
        specs = definition.specs

        install_from_specs specs
      end

      private

      def check_sources_consistency!(options)
        if options.key?(:git) && options.key?(:local_git)
          raise InvalidOption, "Remote and local plugin git sources can't be both specified"
        end
      end

      def install_git(names, version, options)
        uri = options.delete(:git)
        options["uri"] = uri

        install_all_sources(names, version, options, options[:source])
      end

      def install_local_git(names, version, options)
        uri = options.delete(:local_git)
        options["uri"] = uri

        install_all_sources(names, version, options, options[:source])
      end

      # Installs the plugin from rubygems source and returns the path where the
      # plugin was installed
      #
      # @param [String] name of the plugin gem to search in the source
      # @param [Array] version of the gem to install
      # @param [String, Array<String>] source(s) to resolve the gem
      #
      # @return [Hash] map of names to the specs of plugins installed
      def install_rubygems(names, version, sources)
        install_all_sources(names, version, nil, sources)
      end

      def install_all_sources(names, version, git_source_options, rubygems_source)
        source_list = SourceList.new

        source_list.add_git_source(git_source_options) if git_source_options
        Array(rubygems_source).each {|remote| source_list.add_global_rubygems_remote(remote) } if rubygems_source

        deps = names.map {|name| Dependency.new name, version }

        Bundler.configure_gem_home_and_path(Plugin.root)

        definition = Definition.new(nil, deps, source_list, true)
        install_definition(definition)
      end

      # Installs the plugins and deps from the provided specs and returns map of
      # gems to their paths
      #
      # @param specs to install
      #
      # @return [Hash] map of names to the specs
      def install_from_specs(specs)
        paths = {}

        specs.each do |spec|
          spec.source.install spec

          paths[spec.name] = spec
        end

        paths
      end
    end
  end
end
PK("#[}[?n		7gems/bundler-2.3.27/lib/bundler/plugin/installer/git.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class Installer
      class Git < Bundler::Source::Git
        def cache_path
          @cache_path ||= begin
            git_scope = "#{base_name}-#{uri_hash}"

            Plugin.cache.join("bundler", "git", git_scope)
          end
        end

        def install_path
          @install_path ||= begin
            git_scope = "#{base_name}-#{shortref_for_path(revision)}"

            Plugin.root.join("bundler", "gems", git_scope)
          end
        end

        def root
          Plugin.root
        end

        def generate_bin(spec, disable_extensions = false)
          # Need to find a way without code duplication
          # For now, we can ignore this
        end
      end
    end
  end
end
PK("#[zm��<gems/bundler-2.3.27/lib/bundler/plugin/installer/rubygems.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class Installer
      class Rubygems < Bundler::Source::Rubygems
        private

        def requires_sudo?
          false # Will change on implementation of project level plugins
        end

        def rubygems_dir
          Plugin.root
        end

        def cache_path
          Plugin.cache
        end
      end
    end
  end
end
PK("#[.���/gems/bundler-2.3.27/lib/bundler/plugin/index.rbnu�[���# frozen_string_literal: true

module Bundler
  # Manages which plugins are installed and their sources. This also is supposed to map
  # which plugin does what (currently the features are not implemented so this class is
  # now a stub class).
  module Plugin
    class Index
      class CommandConflict < PluginError
        def initialize(plugin, commands)
          msg = "Command(s) `#{commands.join("`, `")}` declared by #{plugin} are already registered."
          super msg
        end
      end

      class SourceConflict < PluginError
        def initialize(plugin, sources)
          msg = "Source(s) `#{sources.join("`, `")}` declared by #{plugin} are already registered."
          super msg
        end
      end

      attr_reader :commands

      def initialize
        @plugin_paths = {}
        @commands = {}
        @sources = {}
        @hooks = {}
        @load_paths = {}

        begin
          load_index(global_index_file, true)
        rescue GenericSystemCallError
          # no need to fail when on a read-only FS, for example
          nil
        end
        load_index(local_index_file) if SharedHelpers.in_bundle?
      end

      # This function is to be called when a new plugin is installed. This
      # function shall add the functions of the plugin to existing maps and also
      # the name to source location.
      #
      # @param [String] name of the plugin to be registered
      # @param [String] path where the plugin is installed
      # @param [Array<String>] load_paths for the plugin
      # @param [Array<String>] commands that are handled by the plugin
      # @param [Array<String>] sources that are handled by the plugin
      def register_plugin(name, path, load_paths, commands, sources, hooks)
        old_commands = @commands.dup

        common = commands & @commands.keys
        raise CommandConflict.new(name, common) unless common.empty?
        commands.each {|c| @commands[c] = name }

        common = sources & @sources.keys
        raise SourceConflict.new(name, common) unless common.empty?
        sources.each {|k| @sources[k] = name }

        hooks.each do |event|
          event_hooks = (@hooks[event] ||= []) << name
          event_hooks.uniq!
        end

        @plugin_paths[name] = path
        @load_paths[name] = load_paths
        save_index
      rescue StandardError
        @commands = old_commands
        raise
      end

      def unregister_plugin(name)
        @commands.delete_if {|_, v| v == name }
        @sources.delete_if {|_, v| v == name }
        @hooks.each do |hook, names|
          names.delete(name)
          @hooks.delete(hook) if names.empty?
        end
        @plugin_paths.delete(name)
        @load_paths.delete(name)
        save_index
      end

      # Path of default index file
      def index_file
        Plugin.root.join("index")
      end

      # Path where the global index file is stored
      def global_index_file
        Plugin.global_root.join("index")
      end

      # Path where the local index file is stored
      def local_index_file
        Plugin.local_root.join("index")
      end

      def plugin_path(name)
        Pathname.new @plugin_paths[name]
      end

      def load_paths(name)
        @load_paths[name]
      end

      # Fetch the name of plugin handling the command
      def command_plugin(command)
        @commands[command]
      end

      def installed?(name)
        @plugin_paths[name]
      end

      def installed_plugins
        @plugin_paths.keys
      end

      def plugin_commands(plugin)
        @commands.find_all {|_, n| n == plugin }.map(&:first)
      end

      def source?(source)
        @sources.key? source
      end

      def source_plugin(name)
        @sources[name]
      end

      # Returns the list of plugin names handling the passed event
      def hook_plugins(event)
        @hooks[event] || []
      end

      private

      # Reads the index file from the directory and initializes the instance
      # variables.
      #
      # It skips the sources if the second param is true
      # @param [Pathname] index file path
      # @param [Boolean] is the index file global index
      def load_index(index_file, global = false)
        SharedHelpers.filesystem_access(index_file, :read) do |index_f|
          valid_file = index_f && index_f.exist? && !index_f.size.zero?
          break unless valid_file

          data = index_f.read

          require_relative "../yaml_serializer"
          index = YAMLSerializer.load(data)

          @commands.merge!(index["commands"])
          @hooks.merge!(index["hooks"])
          @load_paths.merge!(index["load_paths"])
          @plugin_paths.merge!(index["plugin_paths"])
          @sources.merge!(index["sources"]) unless global
        end
      end

      # Should be called when any of the instance variables change. Stores the
      # instance variables in YAML format. (The instance variables are supposed
      # to be only String key value pairs)
      def save_index
        index = {
          "commands"     => @commands,
          "hooks"        => @hooks,
          "load_paths"   => @load_paths,
          "plugin_paths" => @plugin_paths,
          "sources"      => @sources,
        }

        require_relative "../yaml_serializer"
        SharedHelpers.filesystem_access(index_file) do |index_f|
          FileUtils.mkdir_p(index_f.dirname)
          File.open(index_f, "w") {|f| f.puts YAMLSerializer.dump(index) }
        end
      end
    end
  end
end
PK("#[�6�PP-gems/bundler-2.3.27/lib/bundler/plugin/api.rbnu�[���# frozen_string_literal: true

module Bundler
  # This is the interfacing class represents the API that we intend to provide
  # the plugins to use.
  #
  # For plugins to be independent of the Bundler internals they shall limit their
  # interactions to methods of this class only. This will save them from breaking
  # when some internal change.
  #
  # Currently we are delegating the methods defined in Bundler class to
  # itself. So, this class acts as a buffer.
  #
  # If there is some change in the Bundler class that is incompatible to its
  # previous behavior or if otherwise desired, we can reimplement(or implement)
  # the method to preserve compatibility.
  #
  # To use this, either the class can inherit this class or use it directly.
  # For example of both types of use, refer the file `spec/plugins/command.rb`
  #
  # To use it without inheriting, you will have to create an object of this
  # to use the functions (except for declaration functions like command, source,
  # and hooks).
  module Plugin
    class API
      autoload :Source, File.expand_path("api/source", __dir__)

      # The plugins should declare that they handle a command through this helper.
      #
      # @param [String] command being handled by them
      # @param [Class] (optional) class that handles the command. If not
      #                 provided, the `self` class will be used.
      def self.command(command, cls = self)
        Plugin.add_command command, cls
      end

      # The plugins should declare that they provide a installation source
      # through this helper.
      #
      # @param [String] the source type they provide
      # @param [Class] (optional) class that handles the source. If not
      #                 provided, the `self` class will be used.
      def self.source(source, cls = self)
        cls.send :include, Bundler::Plugin::API::Source
        Plugin.add_source source, cls
      end

      def self.hook(event, &block)
        Plugin.add_hook(event, &block)
      end

      # The cache dir to be used by the plugins for storage
      #
      # @return [Pathname] path of the cache dir
      def cache_dir
        Plugin.cache.join("plugins")
      end

      # A tmp dir to be used by plugins
      # Accepts names that get concatenated as suffix
      #
      # @return [Pathname] object for the new directory created
      def tmp(*names)
        Bundler.tmp(["plugin", *names].join("-"))
      end

      def method_missing(name, *args, &blk)
        return Bundler.send(name, *args, &blk) if Bundler.respond_to?(name)

        return SharedHelpers.send(name, *args, &blk) if SharedHelpers.respond_to?(name)

        super
      end

      def respond_to_missing?(name, include_private = false)
        SharedHelpers.respond_to?(name, include_private) ||
          Bundler.respond_to?(name, include_private) || super
      end
    end
  end
end
PK("#[����.�.4gems/bundler-2.3.27/lib/bundler/plugin/api/source.rbnu�[���# frozen_string_literal: true

module Bundler
  module Plugin
    class API
      # This class provides the base to build source plugins
      # All the method here are required to build a source plugin (except
      # `uri_hash`, `gem_install_dir`; they are helpers).
      #
      # Defaults for methods, where ever possible are provided which is
      # expected to work. But, all source plugins have to override
      # `fetch_gemspec_files` and `install`. Defaults are also not provided for
      # `remote!`, `cache!` and `unlock!`.
      #
      # The defaults shall work for most situations but nevertheless they can
      # be (preferably should be) overridden as per the plugins' needs safely
      # (as long as they behave as expected).
      # On overriding `initialize` you should call super first.
      #
      # If required plugin should override `hash`, `==` and `eql?` methods to be
      # able to match objects representing same sources, but may be created in
      # different situation (like form gemfile and lockfile). The default ones
      # checks only for class and uri, but elaborate source plugins may need
      # more comparisons (e.g. git checking on branch or tag).
      #
      # @!attribute [r] uri
      #   @return [String] the remote specified with `source` block in Gemfile
      #
      # @!attribute [r] options
      #   @return [String] options passed during initialization (either from
      #     lockfile or Gemfile)
      #
      # @!attribute [r] name
      #   @return [String] name that can be used to uniquely identify a source
      #
      # @!attribute [rw] dependency_names
      #   @return [Array<String>] Names of dependencies that the source should
      #     try to resolve. It is not necessary to use this list internally. This
      #     is present to be compatible with `Definition` and is used by
      #     rubygems source.
      module Source
        attr_reader :uri, :options, :name
        attr_accessor :dependency_names

        def initialize(opts)
          @options = opts
          @dependency_names = []
          @uri = opts["uri"]
          @type = opts["type"]
          @name = opts["name"] || "#{@type} at #{@uri}"
        end

        # This is used by the default `spec` method to constructs the
        # Specification objects for the gems and versions that can be installed
        # by this source plugin.
        #
        # Note: If the spec method is overridden, this function is not necessary
        #
        # @return [Array<String>] paths of the gemspec files for gems that can
        #                         be installed
        def fetch_gemspec_files
          []
        end

        # Options to be saved in the lockfile so that the source plugin is able
        # to check out same version of gem later.
        #
        # There options are passed when the source plugin is created from the
        # lock file.
        #
        # @return [Hash]
        def options_to_lock
          {}
        end

        # Install the gem specified by the spec at appropriate path.
        # `install_path` provides a sufficient default, if the source can only
        # satisfy one gem,  but is not binding.
        #
        # @return [String] post installation message (if any)
        def install(spec, opts)
          raise MalformattedPlugin, "Source plugins need to override the install method."
        end

        # It builds extensions, generates bins and installs them for the spec
        # provided.
        #
        # It depends on `spec.loaded_from` to get full_gem_path. The source
        # plugins should set that.
        #
        # It should be called in `install` after the plugin is done placing the
        # gem at correct install location.
        #
        # It also runs Gem hooks `pre_install`, `post_build` and `post_install`
        #
        # Note: Do not override if you don't know what you are doing.
        def post_install(spec, disable_exts = false)
          opts = { :env_shebang => false, :disable_extensions => disable_exts }
          installer = Bundler::Source::Path::Installer.new(spec, opts)
          installer.post_install
        end

        # A default installation path to install a single gem. If the source
        # servers multiple gems, it's not of much use and the source should one
        # of its own.
        def install_path
          @install_path ||=
            begin
              base_name = File.basename(Bundler::URI.parse(uri).normalize.path)

              gem_install_dir.join("#{base_name}-#{uri_hash[0..11]}")
            end
        end

        # Parses the gemspec files to find the specs for the gems that can be
        # satisfied by the source.
        #
        # Few important points to keep in mind:
        #   - If the gems are not installed then it shall return specs for all
        #   the gems it can satisfy
        #   - If gem is installed (that is to be detected by the plugin itself)
        #   then it shall return at least the specs that are installed.
        #   - The `loaded_from` for each of the specs shall be correct (it is
        #   used to find the load path)
        #
        # @return [Bundler::Index] index containing the specs
        def specs
          files = fetch_gemspec_files

          Bundler::Index.build do |index|
            files.each do |file|
              next unless spec = Bundler.load_gemspec(file)
              Bundler.rubygems.set_installed_by_version(spec)

              spec.source = self
              Bundler.rubygems.validate(spec)

              index << spec
            end
          end
        end

        # Set internal representation to fetch the gems/specs locally.
        #
        # When this is called, the source should try to fetch the specs and
        # install from the local system.
        def local!
        end

        # Set internal representation to fetch the gems/specs from remote.
        #
        # When this is called, the source should try to fetch the specs and
        # install from remote path.
        def remote!
        end

        # Set internal representation to fetch the gems/specs from app cache.
        #
        # When this is called, the source should try to fetch the specs and
        # install from the path provided by `app_cache_path`.
        def cached!
        end

        # This is called to update the spec and installation.
        #
        # If the source plugin is loaded from lockfile or otherwise, it shall
        # refresh the cache/specs (e.g. git sources can make a fresh clone).
        def unlock!
        end

        # Name of directory where plugin the is expected to cache the gems when
        # #cache is called.
        #
        # Also this name is matched against the directories in cache for pruning
        #
        # This is used by `app_cache_path`
        def app_cache_dirname
          base_name = File.basename(Bundler::URI.parse(uri).normalize.path)
          "#{base_name}-#{uri_hash}"
        end

        # This method is called while caching to save copy of the gems that the
        # source can resolve to path provided by `app_cache_app`so that they can
        # be reinstalled from the cache without querying the remote (i.e. an
        # alternative to remote)
        #
        # This is stored with the app and source plugins should try to provide
        # specs and install only from this cache when `cached!` is called.
        #
        # This cache is different from the internal caching that can be done
        # at sub paths of `cache_path` (from API). This can be though as caching
        # by bundler.
        def cache(spec, custom_path = nil)
          new_cache_path = app_cache_path(custom_path)

          FileUtils.rm_rf(new_cache_path)
          FileUtils.cp_r(install_path, new_cache_path)
          FileUtils.touch(app_cache_path.join(".bundlecache"))
        end

        # This shall check if two source object represent the same source.
        #
        # The comparison shall take place only on the attribute that can be
        # inferred from the options passed from Gemfile and not on attributes
        # that are used to pin down the gem to specific version (e.g. Git
        # sources should compare on branch and tag but not on commit hash)
        #
        # The sources objects are constructed from Gemfile as well as from
        # lockfile. To converge the sources, it is necessary that they match.
        #
        # The same applies for `eql?` and `hash`
        def ==(other)
          other.is_a?(self.class) && uri == other.uri
        end

        # When overriding `eql?` please preserve the behaviour as mentioned in
        # docstring for `==` method.
        alias_method :eql?, :==

        # When overriding `hash` please preserve the behaviour as mentioned in
        # docstring for `==` method, i.e. two methods equal by above comparison
        # should have same hash.
        def hash
          [self.class, uri].hash
        end

        # A helper method, not necessary if not used internally.
        def installed?
          File.directory?(install_path)
        end

        # The full path where the plugin should cache the gem so that it can be
        # installed latter.
        #
        # Note: Do not override if you don't know what you are doing.
        def app_cache_path(custom_path = nil)
          @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname)
        end

        # Used by definition.
        #
        # Note: Do not override if you don't know what you are doing.
        def unmet_deps
          specs.unmet_dependency_names
        end

        # Used by definition.
        #
        # Note: Do not override if you don't know what you are doing.
        def spec_names
          specs.spec_names
        end

        # Used by definition.
        #
        # Note: Do not override if you don't know what you are doing.
        def add_dependency_names(names)
          @dependencies |= Array(names)
        end

        # NOTE: Do not override if you don't know what you are doing.
        def can_lock?(spec)
          spec.source == self
        end

        # Generates the content to be entered into the lockfile.
        # Saves type and remote and also calls to `options_to_lock`.
        #
        # Plugin should use `options_to_lock` to save information in lockfile
        # and not override this.
        #
        # Note: Do not override if you don't know what you are doing.
        def to_lock
          out = String.new("#{LockfileParser::PLUGIN}\n")
          out << "  remote: #{@uri}\n"
          out << "  type: #{@type}\n"
          options_to_lock.each do |opt, value|
            out << "  #{opt}: #{value}\n"
          end
          out << "  specs:\n"
        end

        def to_s
          "plugin source for #{@type} with uri #{@uri}"
        end
        alias_method :identifier, :to_s

        # NOTE: Do not override if you don't know what you are doing.
        def include?(other)
          other == self
        end

        def uri_hash
          SharedHelpers.digest(:SHA1).hexdigest(uri)
        end

        # NOTE: Do not override if you don't know what you are doing.
        def gem_install_dir
          Bundler.install_path
        end

        # It is used to obtain the full_gem_path.
        #
        # spec's loaded_from path is expanded against this to get full_gem_path
        #
        # Note: Do not override if you don't know what you are doing.
        def root
          Bundler.root
        end

        # @private
        # This API on source might not be stable, and for now we expect plugins
        # to download all specs in `#specs`, so we implement the method for
        # compatibility purposes and leave it undocumented (and don't support)
        # overriding it)
        def double_check_for(*); end
      end
    end
  end
end
PK("#[<��,,5gems/bundler-2.3.27/lib/bundler/settings/validator.rbnu�[���# frozen_string_literal: true

module Bundler
  class Settings
    class Validator
      class Rule
        attr_reader :description

        def initialize(keys, description, &validate)
          @keys = keys
          @description = description
          @validate = validate
        end

        def validate!(key, value, settings)
          instance_exec(key, value, settings, &@validate)
        end

        def fail!(key, value, *reasons)
          reasons.unshift @description
          raise InvalidOption, "Setting `#{key}` to #{value.inspect} failed:\n#{reasons.map {|r| " - #{r}" }.join("\n")}"
        end

        def set(settings, key, value, *reasons)
          hash_key = k(key)
          return if settings[hash_key] == value
          reasons.unshift @description
          Bundler.ui.info "Setting `#{key}` to #{value.inspect}, since #{reasons.join(", ")}"
          if value.nil?
            settings.delete(hash_key)
          else
            settings[hash_key] = value
          end
        end

        def k(key)
          Bundler.settings.key_for(key)
        end
      end

      def self.rules
        @rules ||= Hash.new {|h, k| h[k] = [] }
      end
      private_class_method :rules

      def self.rule(keys, description, &blk)
        rule = Rule.new(keys, description, &blk)
        keys.each {|k| rules[k] << rule }
      end
      private_class_method :rule

      def self.validate!(key, value, settings)
        rules_to_validate = rules[key]
        rules_to_validate.each {|rule| rule.validate!(key, value, settings) }
      end

      rule %w[path path.system], "path and path.system are mutually exclusive" do |key, value, settings|
        if key == "path" && value
          set(settings, "path.system", nil)
        elsif key == "path.system" && value
          set(settings, :path, nil)
        end
      end

      rule %w[with without], "a group cannot be in both `with` & `without` simultaneously" do |key, value, settings|
        with = settings.fetch(k(:with), "").split(":").map(&:to_sym)
        without = settings.fetch(k(:without), "").split(":").map(&:to_sym)

        other_key = key == "with" ? :without : :with
        other_setting = key == "with" ? without : with

        conflicting = with & without
        if conflicting.any?
          fail!(key, value, "`#{other_key}` is current set to #{other_setting.inspect}", "the `#{conflicting.join("`, `")}` groups conflict")
        end
      end

      rule %w[path], "relative paths are expanded relative to the current working directory" do |key, value, settings|
        next if value.nil?

        path = Pathname.new(value)
        next if !path.relative? || !Bundler.feature_flag.path_relative_to_cwd?

        path = path.expand_path

        root = begin
                 Bundler.root
               rescue GemfileNotFound
                 Pathname.pwd.expand_path
               end

        path = begin
                 path.relative_path_from(root)
               rescue ArgumentError
                 path
               end

        set(settings, key, path.to_s)
      end
    end
  end
end
PK("#[��{�&gems/bundler-2.3.27/lib/bundler/env.rbnu�[���# frozen_string_literal: true

require_relative "rubygems_integration"
require_relative "source/git/git_proxy"

module Bundler
  class Env
    def self.write(io)
      io.write report
    end

    def self.report(options = {})
      print_gemfile = options.delete(:print_gemfile) { true }
      print_gemspecs = options.delete(:print_gemspecs) { true }

      out = String.new
      append_formatted_table("Environment", environment, out)
      append_formatted_table("Bundler Build Metadata", BuildMetadata.to_h, out)

      unless Bundler.settings.all.empty?
        out << "\n## Bundler settings\n\n```\n"
        Bundler.settings.all.each do |setting|
          out << setting << "\n"
          Bundler.settings.pretty_values_for(setting).each do |line|
            out << "  " << line << "\n"
          end
        end
        out << "```\n"
      end

      return out unless SharedHelpers.in_bundle?

      if print_gemfile
        gemfiles = [Bundler.default_gemfile]
        begin
          gemfiles = Bundler.definition.gemfiles
        rescue GemfileNotFound
          nil
        end

        out << "\n## Gemfile\n"
        gemfiles.each do |gemfile|
          out << "\n### #{Pathname.new(gemfile).relative_path_from(SharedHelpers.pwd)}\n\n"
          out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
        end

        out << "\n### #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}\n\n"
        out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
      end

      if print_gemspecs
        dsl = Dsl.new.tap {|d| d.eval_gemfile(Bundler.default_gemfile) }
        out << "\n## Gemspecs\n" unless dsl.gemspecs.empty?
        dsl.gemspecs.each do |gs|
          out << "\n### #{File.basename(gs.loaded_from)}"
          out << "\n\n```ruby\n" << read_file(gs.loaded_from).chomp << "\n```\n"
        end
      end

      out
    end

    def self.read_file(filename)
      Bundler.read_file(filename.to_s).strip
    rescue Errno::ENOENT
      "<No #{filename} found>"
    rescue RuntimeError => e
      "#{e.class}: #{e.message}"
    end

    def self.ruby_version
      str = String.new(RUBY_VERSION)
      str << "p#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
      str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
    end

    def self.git_version
      Bundler::Source::Git::GitProxy.new(nil, nil, nil).full_version
    rescue Bundler::Source::Git::GitNotInstalledError
      "not installed"
    end

    def self.version_of(script)
      return "not installed" unless Bundler.which(script)
      `#{script} --version`.chomp
    end

    def self.chruby_version
      return "not installed" unless Bundler.which("chruby-exec")
      `chruby-exec -- chruby --version`.
        sub(/.*^chruby: (#{Gem::Version::VERSION_PATTERN}).*/m, '\1')
    end

    def self.environment
      out = []

      out << ["Bundler", Bundler::VERSION]
      out << ["  Platforms", Gem.platforms.join(", ")]
      out << ["Ruby", ruby_version]
      out << ["  Full Path", Gem.ruby]
      out << ["  Config Dir", Pathname.new(Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE).dirname]
      out << ["RubyGems", Gem::VERSION]
      out << ["  Gem Home", Gem.dir]
      out << ["  Gem Path", Gem.path.join(File::PATH_SEPARATOR)]
      out << ["  User Home", Gem.user_home]
      out << ["  User Path", Gem.user_dir]
      out << ["  Bin Dir", Gem.bindir]
      if defined?(OpenSSL::SSL)
        out << ["OpenSSL"]
        out << ["  Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
        out << ["  Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
        out << ["  Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
        out << ["  Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
      end
      out << ["Tools"]
      out << ["  Git", git_version]
      out << ["  RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
      out << ["  rbenv", version_of("rbenv")]
      out << ["  chruby", chruby_version]

      %w[rubygems-bundler open_gem].each do |name|
        specs = Bundler.rubygems.find_name(name)
        out << ["  #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
      end
      if (exe = caller.last.split(":").first) && exe =~ %r{(exe|bin)/bundler?\z}
        shebang = File.read(exe).lines.first
        shebang.sub!(/^#!\s*/, "")
        unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
          out << ["Gem.ruby", Gem.ruby]
          out << ["bundle #!", shebang]
        end
      end

      out
    end

    def self.append_formatted_table(title, pairs, out)
      return if pairs.empty?
      out << "\n" unless out.empty?
      out << "## #{title}\n\n```\n"
      ljust = pairs.map {|k, _v| k.to_s.length }.max
      pairs.each do |k, v|
        out << "#{k.to_s.ljust(ljust)}  #{v}\n"
      end
      out << "```\n"
    end

    private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table, :version_of, :chruby_version
  end
end
PK)"#[�W	�?�?7gems/bundler-2.3.27/lib/bundler/rubygems_integration.rbnu�[���# frozen_string_literal: true

require "rubygems" unless defined?(Gem)

module Bundler
  class RubygemsIntegration
    if defined?(Gem::Ext::Builder::CHDIR_MONITOR)
      EXT_LOCK = Gem::Ext::Builder::CHDIR_MONITOR
    else
      require "monitor"

      EXT_LOCK = Monitor.new
    end

    def initialize
      @replaced_methods = {}
      backport_ext_builder_monitor
    end

    def version
      @version ||= Gem.rubygems_version
    end

    def provides?(req_str)
      Gem::Requirement.new(req_str).satisfied_by?(version)
    end

    def supports_bundler_trampolining?
      provides?(">= 3.3.0.a")
    end

    def build_args
      require "rubygems/command"
      Gem::Command.build_args
    end

    def build_args=(args)
      require "rubygems/command"
      Gem::Command.build_args = args
    end

    def loaded_specs(name)
      Gem.loaded_specs[name]
    end

    def add_to_load_path(paths)
      return Gem.add_to_load_path(*paths) if Gem.respond_to?(:add_to_load_path)

      if insert_index = Gem.load_path_insert_index
        # Gem directories must come after -I and ENV['RUBYLIB']
        $LOAD_PATH.insert(insert_index, *paths)
      else
        # We are probably testing in core, -I and RUBYLIB don't apply
        $LOAD_PATH.unshift(*paths)
      end
    end

    def mark_loaded(spec)
      if spec.respond_to?(:activated=)
        current = Gem.loaded_specs[spec.name]
        current.activated = false if current
        spec.activated = true
      end
      Gem.loaded_specs[spec.name] = spec
    end

    def validate(spec)
      Bundler.ui.silence { spec.validate(false) }
    rescue Gem::InvalidSpecificationException => e
      error_message = "The gemspec at #{spec.loaded_from} is not valid. Please fix this gemspec.\n" \
        "The validation error was '#{e.message}'\n"
      raise Gem::InvalidSpecificationException.new(error_message)
    rescue Errno::ENOENT
      nil
    end

    def set_installed_by_version(spec, installed_by_version = Gem::VERSION)
      return unless spec.respond_to?(:installed_by_version=)
      spec.installed_by_version = Gem::Version.create(installed_by_version)
    end

    def spec_missing_extensions?(spec, default = true)
      return spec.missing_extensions? if spec.respond_to?(:missing_extensions?)

      return false if spec.default_gem?
      return false if spec.extensions.empty?

      default
    end

    def spec_matches_for_glob(spec, glob)
      return spec.matches_for_glob(glob) if spec.respond_to?(:matches_for_glob)

      spec.load_paths.map do |lp|
        Dir["#{lp}/#{glob}#{suffix_pattern}"]
      end.flatten(1)
    end

    def stub_set_spec(stub, spec)
      stub.instance_variable_set(:@spec, spec)
    end

    def path(obj)
      obj.to_s
    end

    def ruby_engine
      Gem.ruby_engine
    end

    def read_binary(path)
      Gem.read_binary(path)
    end

    def inflate(obj)
      Gem::Util.inflate(obj)
    end

    def correct_for_windows_path(path)
      if Gem::Util.respond_to?(:correct_for_windows_path)
        Gem::Util.correct_for_windows_path(path)
      elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
        path[1..-1]
      else
        path
      end
    end

    def gem_dir
      Gem.dir
    end

    def gem_bindir
      Gem.bindir
    end

    def user_home
      Gem.user_home
    end

    def gem_path
      Gem.path
    end

    def reset
      Gem::Specification.reset
    end

    def post_reset_hooks
      Gem.post_reset_hooks
    end

    def suffix_pattern
      Gem.suffix_pattern
    end

    def gem_cache
      gem_path.map {|p| File.expand_path("cache", p) }
    end

    def spec_cache_dirs
      @spec_cache_dirs ||= begin
        dirs = gem_path.map {|dir| File.join(dir, "specifications") }
        dirs << Gem.spec_cache_dir if Gem.respond_to?(:spec_cache_dir) # Not in RubyGems 2.0.3 or earlier
        dirs.uniq.select {|dir| File.directory? dir }
      end
    end

    def marshal_spec_dir
      Gem::MARSHAL_SPEC_DIR
    end

    def clear_paths
      Gem.clear_paths
    end

    def bin_path(gem, bin, ver)
      Gem.bin_path(gem, bin, ver)
    end

    def loaded_gem_paths
      loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
      loaded_gem_paths.flatten
    end

    def load_plugins
      Gem.load_plugins if Gem.respond_to?(:load_plugins)
    end

    def load_plugin_files(files)
      Gem.load_plugin_files(files) if Gem.respond_to?(:load_plugin_files)
    end

    def load_env_plugins
      Gem.load_env_plugins if Gem.respond_to?(:load_env_plugins)
    end

    def ui=(obj)
      Gem::DefaultUserInteraction.ui = obj
    end

    def ext_lock
      EXT_LOCK
    end

    def spec_from_gem(path)
      require "rubygems/package"
      Gem::Package.new(path).spec
    end

    def build_gem(gem_dir, spec)
      build(spec)
    end

    def security_policy_keys
      %w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
    end

    def security_policies
      @security_policies ||= begin
        require "rubygems/security"
        Gem::Security::Policies
      rescue LoadError, NameError
        {}
      end
    end

    def reverse_rubygems_kernel_mixin
      # Disable rubygems' gem activation system
      kernel = (class << ::Kernel; self; end)
      [kernel, ::Kernel].each do |k|
        if k.private_method_defined?(:gem_original_require)
          redefine_method(k, :require, k.instance_method(:gem_original_require))
        end
      end
    end

    def replace_gem(specs, specs_by_name)
      reverse_rubygems_kernel_mixin

      executables = nil

      kernel = (class << ::Kernel; self; end)
      [kernel, ::Kernel].each do |kernel_class|
        redefine_method(kernel_class, :gem) do |dep, *reqs|
          if executables && executables.include?(File.basename(caller.first.split(":").first))
            break
          end

          reqs.pop if reqs.last.is_a?(Hash)

          unless dep.respond_to?(:name) && dep.respond_to?(:requirement)
            dep = Gem::Dependency.new(dep, reqs)
          end

          if spec = specs_by_name[dep.name]
            return true if dep.matches_spec?(spec)
          end

          message = if spec.nil?
            target_file = begin
                            Bundler.default_gemfile.basename
                          rescue GemfileNotFound
                            "inline Gemfile"
                          end
            "#{dep.name} is not part of the bundle." \
            " Add it to your #{target_file}."
          else
            "can't activate #{dep}, already activated #{spec.full_name}. " \
            "Make sure all dependencies are added to Gemfile."
          end

          e = Gem::LoadError.new(message)
          e.name = dep.name
          if e.respond_to?(:requirement=)
            e.requirement = dep.requirement
          elsif e.respond_to?(:version_requirement=)
            e.version_requirement = dep.requirement
          end
          raise e
        end

        # backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
        kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
      end
    end

    # Used to make bin stubs that are not created by bundler work
    # under bundler. The new Gem.bin_path only considers gems in
    # +specs+
    def replace_bin_path(specs_by_name)
      gem_class = (class << Gem; self; end)

      redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
        exec_name = args.first
        raise ArgumentError, "you must supply exec_name" unless exec_name

        spec_with_name = specs_by_name[gem_name]
        matching_specs_by_exec_name = specs_by_name.values.select {|s| s.executables.include?(exec_name) }
        spec = matching_specs_by_exec_name.delete(spec_with_name)

        unless spec || !matching_specs_by_exec_name.empty?
          message = "can't find executable #{exec_name} for gem #{gem_name}"
          if spec_with_name.nil?
            message += ". #{gem_name} is not currently included in the bundle, " \
                       "perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
          end
          raise Gem::Exception, message
        end

        unless spec
          spec = matching_specs_by_exec_name.shift
          warn \
            "Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
            "You should run `bundle binstub #{gem_name}` " \
            "to work around a system/bundle conflict."
        end

        unless matching_specs_by_exec_name.empty?
          conflicting_names = matching_specs_by_exec_name.map(&:name).join(", ")
          warn \
            "The `#{exec_name}` executable in the `#{spec.name}` gem is being loaded, but it's also present in other gems (#{conflicting_names}).\n" \
            "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
            "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
        end

        spec
      end

      redefine_method(gem_class, :activate_bin_path) do |name, *args|
        exec_name = args.first
        return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle"

        # Copy of Rubygems activate_bin_path impl
        requirement = args.last
        spec = find_spec_for_exe name, exec_name, [requirement]

        gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name)
        gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name)
        File.exist?(gem_bin) ? gem_bin : gem_from_path_bin
      end

      redefine_method(gem_class, :bin_path) do |name, *args|
        exec_name = args.first
        return ENV["BUNDLE_BIN_PATH"] if exec_name == "bundle"

        spec = find_spec_for_exe(name, *args)
        exec_name ||= spec.default_executable

        gem_bin = File.join(spec.full_gem_path, spec.bindir, exec_name)
        gem_from_path_bin = File.join(File.dirname(spec.loaded_from), spec.bindir, exec_name)
        File.exist?(gem_bin) ? gem_bin : gem_from_path_bin
      end
    end

    # Replace or hook into RubyGems to provide a bundlerized view
    # of the world.
    def replace_entrypoints(specs)
      specs_by_name = add_default_gems_to(specs)

      replace_gem(specs, specs_by_name)
      stub_rubygems(specs)
      replace_bin_path(specs_by_name)

      Gem.clear_paths
    end

    # Add default gems not already present in specs, and return them as a hash.
    def add_default_gems_to(specs)
      specs_by_name = specs.reduce({}) do |h, s|
        h[s.name] = s
        h
      end

      Bundler.rubygems.default_stubs.each do |stub|
        default_spec = stub.to_spec
        default_spec_name = default_spec.name
        next if specs_by_name.key?(default_spec_name)

        specs << default_spec
        specs_by_name[default_spec_name] = default_spec
      end

      specs_by_name
    end

    def undo_replacements
      @replaced_methods.each do |(sym, klass), method|
        redefine_method(klass, sym, method)
      end
      if Binding.public_method_defined?(:source_location)
        post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
      else
        post_reset_hooks.reject! {|proc| proc.binding.eval("__FILE__") == __FILE__ }
      end
      @replaced_methods.clear
    end

    def redefine_method(klass, method, unbound_method = nil, &block)
      visibility = method_visibility(klass, method)
      begin
        if (instance_method = klass.instance_method(method)) && method != :initialize
          # doing this to ensure we also get private methods
          klass.send(:remove_method, method)
        end
      rescue NameError
        # method isn't defined
        nil
      end
      @replaced_methods[[method, klass]] = instance_method
      if unbound_method
        klass.send(:define_method, method, unbound_method)
        klass.send(visibility, method)
      elsif block
        klass.send(:define_method, method, &block)
        klass.send(visibility, method)
      end
    end

    def method_visibility(klass, method)
      if klass.private_method_defined?(method)
        :private
      elsif klass.protected_method_defined?(method)
        :protected
      else
        :public
      end
    end

    def stub_rubygems(specs)
      Gem::Specification.all = specs

      Gem.post_reset do
        Gem::Specification.all = specs
      end

      redefine_method((class << Gem; self; end), :finish_resolve) do |*|
        []
      end
    end

    def plain_specs
      Gem::Specification._all
    end

    def plain_specs=(specs)
      Gem::Specification.all = specs
    end

    def fetch_specs(remote, name)
      require "rubygems/remote_fetcher"
      path = remote.uri.to_s + "#{name}.#{Gem.marshal_version}.gz"
      fetcher = gem_remote_fetcher
      fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
      string = fetcher.fetch_path(path)
      Bundler.load_marshal(string)
    rescue Gem::RemoteFetcher::FetchError
      # it's okay for prerelease to fail
      raise unless name == "prerelease_specs"
    end

    def fetch_all_remote_specs(remote)
      specs = fetch_specs(remote, "specs")
      pres = fetch_specs(remote, "prerelease_specs") || []

      specs.concat(pres)
    end

    def download_gem(spec, uri, cache_dir)
      require "rubygems/remote_fetcher"
      uri = Bundler.settings.mirror_for(uri)
      fetcher = gem_remote_fetcher
      fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
      Bundler::Retry.new("download gem from #{uri}").attempts do
        gem_file_name = spec.file_name
        local_gem_path = File.join cache_dir, gem_file_name
        return if File.exist? local_gem_path

        begin
          remote_gem_path = uri + "gems/#{gem_file_name}"
          remote_gem_path = remote_gem_path.to_s if provides?("< 3.2.0.rc.1")

          SharedHelpers.filesystem_access(local_gem_path) do
            fetcher.cache_update_path remote_gem_path, local_gem_path
          end
        rescue Gem::RemoteFetcher::FetchError
          raise if spec.original_platform == spec.platform

          original_gem_file_name = "#{spec.original_name}.gem"
          raise if gem_file_name == original_gem_file_name

          gem_file_name = original_gem_file_name
          retry
        end
      end
    rescue Gem::RemoteFetcher::FetchError => e
      raise Bundler::HTTPError, "Could not download gem from #{uri} due to underlying error <#{e.message}>"
    end

    def gem_remote_fetcher
      require "rubygems/remote_fetcher"
      proxy = Gem.configuration[:http_proxy]
      Gem::RemoteFetcher.new(proxy)
    end

    def build(spec, skip_validation = false)
      require "rubygems/package"
      Gem::Package.build(spec, skip_validation)
    end

    def repository_subdirectories
      Gem::REPOSITORY_SUBDIRECTORIES
    end

    def path_separator
      Gem.path_separator
    end

    def all_specs
      Gem::Specification.stubs.map do |stub|
        StubSpecification.from_stub(stub)
      end
    end

    def backport_ext_builder_monitor
      # So we can avoid requiring "rubygems/ext" in its entirety
      Gem.module_eval <<-RUBY, __FILE__, __LINE__ + 1
        module Ext
        end
      RUBY

      require "rubygems/ext/builder"

      Gem::Ext::Builder.class_eval do
        unless const_defined?(:CHDIR_MONITOR)
          const_set(:CHDIR_MONITOR, EXT_LOCK)
        end

        remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
        const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
      end
    end

    def find_bundler(version)
      find_name("bundler").find {|s| s.version.to_s == version }
    end

    def find_name(name)
      Gem::Specification.stubs_for(name).map(&:to_spec)
    end

    if Gem::Specification.respond_to?(:default_stubs)
      def default_stubs
        Gem::Specification.default_stubs("*.gemspec")
      end
    else
      def default_stubs
        Gem::Specification.send(:default_stubs, "*.gemspec")
      end
    end
  end

  def self.rubygems
    @rubygems ||= RubygemsIntegration.new
  end
end
PK)"#[\�����'gems/bundler-2.3.27/lib/bundler/vlad.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2,
  "The Bundler task for Vlad"

# Vlad task for Bundler.
#
# Add "require 'bundler/vlad'" in your Vlad deploy.rb, and
# include the vlad:bundle:install task in your vlad:deploy task.
require_relative "deployment"

include Rake::DSL if defined? Rake::DSL

namespace :vlad do
  Bundler::Deployment.define_task(Rake::RemoteTask, :remote_task, :roles => :app)
end
PK)"#[�u:����&gems/bundler-2.3.27/lib/bundler/cli.rbnu�[���# frozen_string_literal: true

require_relative "vendored_thor"

module Bundler
  class CLI < Thor
    require_relative "cli/common"

    package_name "Bundler"

    AUTO_INSTALL_CMDS = %w[show binstubs outdated exec open console licenses clean].freeze
    PARSEABLE_COMMANDS = %w[check config help exec platform show version].freeze

    COMMAND_ALIASES = {
      "check" => "c",
      "install" => "i",
      "plugin" => "",
      "list" => "ls",
      "exec" => ["e", "ex", "exe"],
      "cache" => ["package", "pack"],
      "version" => ["-v", "--version"],
    }.freeze

    def self.start(*)
      super
    ensure
      Bundler::SharedHelpers.print_major_deprecations!
    end

    def self.dispatch(*)
      super do |i|
        i.send(:print_command)
        i.send(:warn_on_outdated_bundler)
      end
    end

    def self.all_aliases
      @all_aliases ||= begin
                         command_aliases = {}

                         COMMAND_ALIASES.each do |name, aliases|
                           Array(aliases).each do |one_alias|
                             command_aliases[one_alias] = name
                           end
                         end

                         command_aliases
                       end
    end

    def self.aliases_for(command_name)
      COMMAND_ALIASES.select {|k, _| k == command_name }.invert
    end

    def initialize(*args)
      super

      custom_gemfile = options[:gemfile] || Bundler.settings[:gemfile]
      if custom_gemfile && !custom_gemfile.empty?
        Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", File.expand_path(custom_gemfile)
        Bundler.reset_settings_and_root!
      end

      Bundler.self_manager.restart_with_locked_bundler_if_needed

      Bundler.settings.set_command_option_if_given :retry, options[:retry]

      current_cmd = args.last[:current_command].name
      auto_install if AUTO_INSTALL_CMDS.include?(current_cmd)
    rescue UnknownArgumentError => e
      raise InvalidOption, e.message
    ensure
      self.options ||= {}
      unprinted_warnings = Bundler.ui.unprinted_warnings
      Bundler.ui = UI::Shell.new(options)
      Bundler.ui.level = "debug" if options["verbose"]
      unprinted_warnings.each {|w| Bundler.ui.warn(w) }
    end

    check_unknown_options!(:except => [:config, :exec])
    stop_on_unknown_option! :exec

    desc "cli_help", "Prints a summary of bundler commands", :hide => true
    def cli_help
      version
      Bundler.ui.info "\n"

      primary_commands = ["install", "update", "cache", "exec", "config", "help"]

      list = self.class.printable_commands(true)
      by_name = list.group_by {|name, _message| name.match(/^bundle (\w+)/)[1] }
      utilities = by_name.keys.sort - primary_commands
      primary_commands.map! {|name| (by_name[name] || raise("no primary command #{name}")).first }
      utilities.map! {|name| by_name[name].first }

      shell.say "Bundler commands:\n\n"

      shell.say "  Primary commands:\n"
      shell.print_table(primary_commands, :indent => 4, :truncate => true)
      shell.say
      shell.say "  Utilities:\n"
      shell.print_table(utilities, :indent => 4, :truncate => true)
      shell.say
      self.class.send(:class_options_help, shell)
    end
    default_task(Bundler.feature_flag.default_cli_command)

    class_option "no-color", :type => :boolean, :desc => "Disable colorization in output"
    class_option "retry",    :type => :numeric, :aliases => "-r", :banner => "NUM",
                             :desc => "Specify the number of times you wish to attempt network commands"
    class_option "verbose", :type => :boolean, :desc => "Enable verbose output mode", :aliases => "-V"

    def help(cli = nil)
      case cli
      when "gemfile" then command = "gemfile"
      when nil       then command = "bundle"
      else command = "bundle-#{cli}"
      end

      man_path = File.expand_path("man", __dir__)
      man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f|
        [File.basename(f, ".*"), f]
      end]

      if man_pages.include?(command)
        man_page = man_pages[command]
        if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+}
          Kernel.exec "man #{man_page}"
        else
          puts File.read("#{man_path}/#{File.basename(man_page)}.ronn")
        end
      elsif command_path = Bundler.which("bundler-#{cli}")
        Kernel.exec(command_path, "--help")
      else
        super
      end
    end

    def self.handle_no_command_error(command, has_namespace = $thor_runner)
      if Bundler.feature_flag.plugins? && Bundler::Plugin.command?(command)
        return Bundler::Plugin.exec_command(command, ARGV[1..-1])
      end

      return super unless command_path = Bundler.which("bundler-#{command}")

      Kernel.exec(command_path, *ARGV[1..-1])
    end

    desc "init [OPTIONS]", "Generates a Gemfile into the current working directory"
    long_desc <<-D
      Init generates a default Gemfile in the current working directory. When adding a
      Gemfile to a gem with a gemspec, the --gemspec option will automatically add each
      dependency listed in the gemspec file to the newly created Gemfile.
    D
    method_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile"
    def init
      require_relative "cli/init"
      Init.new(options.dup).run
    end

    desc "check [OPTIONS]", "Checks if the dependencies listed in Gemfile are satisfied by currently installed gems"
    long_desc <<-D
      Check searches the local machine for each of the gems requested in the Gemfile. If
      all gems are found, Bundler prints a success message and exits with a status of 0.
      If not, the first missing gem is listed and Bundler exits status 1.
    D
    method_option "dry-run", :type => :boolean, :default => false, :banner =>
      "Lock the Gemfile"
    method_option "gemfile", :type => :string, :banner =>
      "Use the specified gemfile instead of Gemfile"
    method_option "path", :type => :string, :banner =>
      "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
    def check
      remembered_flag_deprecation("path")

      require_relative "cli/check"
      Check.new(options).run
    end

    map aliases_for("check")

    desc "remove [GEM [GEM ...]]", "Removes gems from the Gemfile"
    long_desc <<-D
      Removes the given gems from the Gemfile while ensuring that the resulting Gemfile is still valid. If the gem is not found, Bundler prints a error message and if gem could not be removed due to any reason Bundler will display a warning.
    D
    method_option "install", :type => :boolean, :banner =>
      "Runs 'bundle install' after removing the gems from the Gemfile"
    def remove(*gems)
      SharedHelpers.major_deprecation(2, "The `--install` flag has been deprecated. `bundle install` is triggered by default.") if ARGV.include?("--install")
      require_relative "cli/remove"
      Remove.new(gems, options).run
    end

    desc "install [OPTIONS]", "Install the current environment to the system"
    long_desc <<-D
      Install will install all of the gems in the current bundle, making them available
      for use. In a freshly checked out repository, this command will give you the same
      gem versions as the last person who updated the Gemfile and ran `bundle update`.

      Passing [DIR] to install (e.g. vendor) will cause the unpacked gems to be installed
      into the [DIR] directory rather than into system gems.

      If the bundle has already been installed, bundler will tell you so and then exit.
    D
    method_option "binstubs", :type => :string, :lazy_default => "bin", :banner =>
      "Generate bin stubs for bundled gems to ./bin"
    method_option "clean", :type => :boolean, :banner =>
      "Run bundle clean automatically after install"
    method_option "deployment", :type => :boolean, :banner =>
      "Install using defaults tuned for deployment environments"
    method_option "frozen", :type => :boolean, :banner =>
      "Do not allow the Gemfile.lock to be updated after this install"
    method_option "full-index", :type => :boolean, :banner =>
      "Fall back to using the single-file index of all gems"
    method_option "gemfile", :type => :string, :banner =>
      "Use the specified gemfile instead of Gemfile"
    method_option "jobs", :aliases => "-j", :type => :numeric, :banner =>
      "Specify the number of jobs to run in parallel"
    method_option "local", :type => :boolean, :banner =>
      "Do not attempt to fetch gems remotely and use the gem cache instead"
    method_option "prefer-local", :type => :boolean, :banner =>
      "Only attempt to fetch gems remotely if not present locally, even if newer versions are available remotely"
    method_option "no-cache", :type => :boolean, :banner =>
      "Don't update the existing gem cache."
    method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
      "Force downloading every gem."
    method_option "no-prune", :type => :boolean, :banner =>
      "Don't remove stale gems from the cache."
    method_option "path", :type => :string, :banner =>
      "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
    method_option "quiet", :type => :boolean, :banner =>
      "Only output warnings and errors."
    method_option "shebang", :type => :string, :banner =>
      "Specify a different shebang executable name than the default (usually 'ruby')"
    method_option "standalone", :type => :array, :lazy_default => [], :banner =>
      "Make a bundle that can work without the Bundler runtime"
    method_option "system", :type => :boolean, :banner =>
      "Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
    method_option "trust-policy", :alias => "P", :type => :string, :banner =>
      "Gem trust policy (like gem install -P). Must be one of " +
      Bundler.rubygems.security_policy_keys.join("|")
    method_option "without", :type => :array, :banner =>
      "Exclude gems that are part of the specified named group."
    method_option "with", :type => :array, :banner =>
      "Include gems that are part of the specified named group."
    def install
      SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")

      %w[clean deployment frozen no-prune path shebang system without with].each do |option|
        remembered_flag_deprecation(option)
      end

      remembered_negative_flag_deprecation("no-deployment")

      require_relative "cli/install"
      Bundler.settings.temporary(:no_install => false) do
        Install.new(options.dup).run
      end
    end

    map aliases_for("install")

    desc "update [OPTIONS]", "Update the current environment"
    long_desc <<-D
      Update will install the newest versions of the gems listed in the Gemfile. Use
      update when you have changed the Gemfile, or if you want to get the newest
      possible versions of the gems in the bundle.
    D
    method_option "full-index", :type => :boolean, :banner =>
      "Fall back to using the single-file index of all gems"
    method_option "gemfile", :type => :string, :banner =>
      "Use the specified gemfile instead of Gemfile"
    method_option "group", :aliases => "-g", :type => :array, :banner =>
      "Update a specific group"
    method_option "jobs", :aliases => "-j", :type => :numeric, :banner =>
      "Specify the number of jobs to run in parallel"
    method_option "local", :type => :boolean, :banner =>
      "Do not attempt to fetch gems remotely and use the gem cache instead"
    method_option "quiet", :type => :boolean, :banner =>
      "Only output warnings and errors."
    method_option "source", :type => :array, :banner =>
      "Update a specific source (and all gems associated with it)"
    method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
      "Force downloading every gem."
    method_option "ruby", :type => :boolean, :banner =>
      "Update ruby specified in Gemfile.lock"
    method_option "bundler", :type => :string, :lazy_default => "> 0.a", :banner =>
      "Update the locked version of bundler"
    method_option "patch", :type => :boolean, :banner =>
      "Prefer updating only to next patch version"
    method_option "minor", :type => :boolean, :banner =>
      "Prefer updating only to next minor version"
    method_option "major", :type => :boolean, :banner =>
      "Prefer updating to next major version (default)"
    method_option "strict", :type => :boolean, :banner =>
      "Do not allow any gem to be updated past latest --patch | --minor | --major"
    method_option "conservative", :type => :boolean, :banner =>
      "Use bundle install conservative update behavior and do not allow shared dependencies to be updated."
    method_option "all", :type => :boolean, :banner =>
      "Update everything."
    def update(*gems)
      SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
      require_relative "cli/update"
      Bundler.settings.temporary(:no_install => false) do
        Update.new(options, gems).run
      end
    end

    desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
    long_desc <<-D
      Show lists the names and versions of all gems that are required by your Gemfile.
      Calling show with [GEM] will list the exact location of that gem on your machine.
    D
    method_option "paths", :type => :boolean,
                           :banner => "List the paths of all gems that are required by your Gemfile."
    method_option "outdated", :type => :boolean,
                              :banner => "Show verbose output including whether gems are outdated."
    def show(gem_name = nil)
      SharedHelpers.major_deprecation(2, "the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement") if ARGV.include?("--outdated")
      require_relative "cli/show"
      Show.new(options, gem_name).run
    end

    desc "list", "List all gems in the bundle"
    method_option "name-only", :type => :boolean, :banner => "print only the gem names"
    method_option "only-group", :type => :array, :default => [], :banner => "print gems from a given set of groups"
    method_option "without-group", :type => :array, :default => [], :banner => "print all gems except from a given set of groups"
    method_option "paths", :type => :boolean, :banner => "print the path to each gem in the bundle"
    def list
      require_relative "cli/list"
      List.new(options).run
    end

    map aliases_for("list")

    desc "info GEM [OPTIONS]", "Show information for the given gem"
    method_option "path", :type => :boolean, :banner => "Print full path to gem"
    method_option "version", :type => :boolean, :banner => "Print gem version"
    def info(gem_name)
      require_relative "cli/info"
      Info.new(options, gem_name).run
    end

    desc "binstubs GEM [OPTIONS]", "Install the binstubs of the listed gem"
    long_desc <<-D
      Generate binstubs for executables in [GEM]. Binstubs are put into bin,
      or the --binstubs directory if one has been set. Calling binstubs with [GEM [GEM]]
      will create binstubs for all given gems.
    D
    method_option "force", :type => :boolean, :default => false, :banner =>
      "Overwrite existing binstubs if they exist"
    method_option "path", :type => :string, :lazy_default => "bin", :banner =>
      "Binstub destination directory (default bin)"
    method_option "shebang", :type => :string, :banner =>
      "Specify a different shebang executable name than the default (usually 'ruby')"
    method_option "standalone", :type => :boolean, :banner =>
      "Make binstubs that can work without the Bundler runtime"
    method_option "all", :type => :boolean, :banner =>
      "Install binstubs for all gems"
    method_option "all-platforms", :type => :boolean, :default => false, :banner =>
      "Install binstubs for all platforms"
    def binstubs(*gems)
      require_relative "cli/binstubs"
      Binstubs.new(options, gems).run
    end

    desc "add GEM VERSION", "Add gem to Gemfile and run bundle install"
    long_desc <<-D
      Adds the specified gem to Gemfile (if valid) and run 'bundle install' in one step.
    D
    method_option "version", :aliases => "-v", :type => :string
    method_option "group", :aliases => "-g", :type => :string
    method_option "source", :aliases => "-s", :type => :string
    method_option "require", :aliases => "-r", :type => :string, :banner => "Adds require path to gem. Provide false, or a path as a string."
    method_option "path", :type => :string
    method_option "git", :type => :string
    method_option "github", :type => :string
    method_option "branch", :type => :string
    method_option "ref", :type => :string
    method_option "skip-install", :type => :boolean, :banner =>
      "Adds gem to the Gemfile but does not install it"
    method_option "optimistic", :type => :boolean, :banner => "Adds optimistic declaration of version to gem"
    method_option "strict", :type => :boolean, :banner => "Adds strict declaration of version to gem"
    def add(*gems)
      require_relative "cli/add"
      Add.new(options.dup, gems).run
    end

    desc "outdated GEM [OPTIONS]", "List installed gems with newer versions available"
    long_desc <<-D
      Outdated lists the names and versions of gems that have a newer version available
      in the given source. Calling outdated with [GEM [GEM]] will only check for newer
      versions of the given gems. Prerelease gems are ignored by default. If your gems
      are up to date, Bundler will exit with a status of 0. Otherwise, it will exit 1.

      For more information on patch level options (--major, --minor, --patch,
      --strict) see documentation on the same options on the update command.
    D
    method_option "group", :type => :string, :banner => "List gems from a specific group"
    method_option "groups", :type => :boolean, :banner => "List gems organized by groups"
    method_option "local", :type => :boolean, :banner =>
      "Do not attempt to fetch gems remotely and use the gem cache instead"
    method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
    method_option "source", :type => :array, :banner => "Check against a specific source"
    method_option "filter-strict", :type => :boolean, :aliases => "--strict", :banner =>
      "Only list newer versions allowed by your Gemfile requirements"
    method_option "update-strict", :type => :boolean, :banner =>
      "Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
    method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
    method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
    method_option "patch", :type => :boolean, :banner => "Prefer updating only to next patch version"
    method_option "filter-major", :type => :boolean, :banner => "Only list major newer versions"
    method_option "filter-minor", :type => :boolean, :banner => "Only list minor newer versions"
    method_option "filter-patch", :type => :boolean, :banner => "Only list patch newer versions"
    method_option "parseable", :aliases => "--porcelain", :type => :boolean, :banner =>
      "Use minimal formatting for more parseable output"
    method_option "only-explicit", :type => :boolean, :banner =>
      "Only list gems specified in your Gemfile, not their dependencies"
    def outdated(*gems)
      require_relative "cli/outdated"
      Outdated.new(options, gems).run
    end

    desc "fund [OPTIONS]", "Lists information about gems seeking funding assistance"
    method_option "group", :aliases => "-g", :type => :array, :banner =>
      "Fetch funding information for a specific group"
    def fund
      require_relative "cli/fund"
      Fund.new(options).run
    end

    desc "cache [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
    method_option "all",  :type => :boolean,
                          :default => Bundler.feature_flag.cache_all?,
                          :banner => "Include all sources (including path and git)."
    method_option "all-platforms", :type => :boolean, :banner => "Include gems for all platforms present in the lockfile, not only the current one"
    method_option "cache-path", :type => :string, :banner =>
      "Specify a different cache path than the default (vendor/cache)."
    method_option "gemfile", :type => :string, :banner => "Use the specified gemfile instead of Gemfile"
    method_option "no-install", :type => :boolean, :banner => "Don't install the gems, only update the cache."
    method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
    method_option "path", :type => :string, :banner =>
      "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
    method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors."
    method_option "frozen", :type => :boolean, :banner =>
      "Do not allow the Gemfile.lock to be updated after this bundle cache operation's install"
    long_desc <<-D
      The cache command will copy the .gem files for every gem in the bundle into the
      directory ./vendor/cache. If you then check that directory into your source
      control repository, others who check out your source will be able to install the
      bundle without having to download any additional gems.
    D
    def cache
      SharedHelpers.major_deprecation 2,
        "The `--all` flag is deprecated because it relies on being " \
        "remembered across bundler invocations, which bundler will no longer " \
        "do in future versions. Instead please use `bundle config set cache_all true`, " \
        "and stop using this flag" if ARGV.include?("--all")

      SharedHelpers.major_deprecation 2,
        "The `--path` flag is deprecated because its semantics are unclear. " \
        "Use `bundle config cache_path` to configure the path of your cache of gems, " \
        "and `bundle config path` to configure the path where your gems are installed, " \
        "and stop using this flag" if ARGV.include?("--path")

      require_relative "cli/cache"
      Cache.new(options).run
    end

    map aliases_for("cache")

    desc "exec [OPTIONS]", "Run the command in context of the bundle"
    method_option :keep_file_descriptors, :type => :boolean, :default => true
    method_option :gemfile, :type => :string, :required => false
    long_desc <<-D
      Exec runs a command, providing it access to the gems in the bundle. While using
      bundle exec you can require and call the bundled gems as if they were installed
      into the system wide RubyGems repository.
    D
    def exec(*args)
      if ARGV.include?("--no-keep-file-descriptors")
        SharedHelpers.major_deprecation(2, "The `--no-keep-file-descriptors` has been deprecated. `bundle exec` no longer mess with your file descriptors. Close them in the exec'd script if you need to")
      end

      require_relative "cli/exec"
      Exec.new(options, args).run
    end

    map aliases_for("exec")

    desc "config NAME [VALUE]", "Retrieve or set a configuration value"
    long_desc <<-D
      Retrieves or sets a configuration value. If only one parameter is provided, retrieve the value. If two parameters are provided, replace the
      existing value with the newly provided one.

      By default, setting a configuration value sets it for all projects
      on the machine.

      If a global setting is superseded by local configuration, this command
      will show the current value, as well as any superseded values and
      where they were specified.
    D
    require_relative "cli/config"
    subcommand "config", Config

    desc "open GEM", "Opens the source directory of the given bundled gem"
    def open(name)
      require_relative "cli/open"
      Open.new(options, name).run
    end

    unless Bundler.feature_flag.bundler_3_mode?
      desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded"
      def console(group = nil)
        require_relative "cli/console"
        Console.new(options, group).run
      end
    end

    desc "version", "Prints Bundler version information"
    def version
      cli_help = current_command.name == "cli_help"
      if cli_help || ARGV.include?("version")
        build_info = " (#{BuildMetadata.built_at} commit #{BuildMetadata.git_commit_sha})"
      end

      if !cli_help && Bundler.feature_flag.print_only_version_number?
        Bundler.ui.info "#{Bundler::VERSION}#{build_info}"
      else
        Bundler.ui.info "Bundler version #{Bundler::VERSION}#{build_info}"
      end
    end

    map aliases_for("version")

    desc "licenses", "Prints the license of all gems in the bundle"
    def licenses
      Bundler.load.specs.sort_by {|s| s.license.to_s }.reverse_each do |s|
        gem_name = s.name
        license  = s.license || s.licenses

        if license.empty?
          Bundler.ui.warn "#{gem_name}: Unknown"
        else
          Bundler.ui.info "#{gem_name}: #{license}"
        end
      end
    end

    unless Bundler.feature_flag.bundler_3_mode?
      desc "viz [OPTIONS]", "Generates a visual dependency graph", :hide => true
      long_desc <<-D
        Viz generates a PNG file of the current Gemfile as a dependency graph.
        Viz requires the ruby-graphviz gem (and its dependencies).
        The associated gems must also be installed via 'bundle install'.
      D
      method_option :file, :type => :string, :default => "gem_graph", :aliases => "-f", :desc => "The name to use for the generated file. see format option"
      method_option :format, :type => :string, :default => "png", :aliases => "-F", :desc => "This is output format option. Supported format is png, jpg, svg, dot ..."
      method_option :requirements, :type => :boolean, :default => false, :aliases => "-R", :desc => "Set to show the version of each required dependency."
      method_option :version, :type => :boolean, :default => false, :aliases => "-v", :desc => "Set to show each gem version."
      method_option :without, :type => :array, :default => [], :aliases => "-W", :banner => "GROUP[ GROUP...]", :desc => "Exclude gems that are part of the specified named group."
      def viz
        SharedHelpers.major_deprecation 2, "The `viz` command has been renamed to `graph` and moved to a plugin. See https://github.com/rubygems/bundler-graph"
        require_relative "cli/viz"
        Viz.new(options.dup).run
      end
    end

    old_gem = instance_method(:gem)

    desc "gem NAME [OPTIONS]", "Creates a skeleton for creating a rubygem"
    method_option :exe, :type => :boolean, :default => false, :aliases => ["--bin", "-b"], :desc => "Generate a binary executable for your library."
    method_option :coc, :type => :boolean, :desc => "Generate a code of conduct file. Set a default with `bundle config set --global gem.coc true`."
    method_option :edit, :type => :string, :aliases => "-e", :required => false, :banner => "EDITOR",
                         :lazy_default => [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? },
                         :desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
    method_option :ext, :type => :boolean, :default => false, :desc => "Generate the boilerplate for C extension code"
    method_option :git, :type => :boolean, :default => true, :desc => "Initialize a git repo inside your library."
    method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config set --global gem.mit true`."
    method_option :rubocop, :type => :boolean, :desc => "Add rubocop to the generated Rakefile and gemspec. Set a default with `bundle config set --global gem.rubocop true`."
    method_option :changelog, :type => :boolean, :desc => "Generate changelog file. Set a default with `bundle config set --global gem.changelog true`."
    method_option :test, :type => :string, :lazy_default => Bundler.settings["gem.test"] || "", :aliases => "-t", :banner => "Use the specified test framework for your library",
                         :desc => "Generate a test directory for your library, either rspec, minitest or test-unit. Set a default with `bundle config set --global gem.test (rspec|minitest|test-unit)`."
    method_option :ci, :type => :string, :lazy_default => Bundler.settings["gem.ci"] || "",
                       :desc => "Generate CI configuration, either GitHub Actions, Travis CI, GitLab CI or CircleCI. Set a default with `bundle config set --global gem.ci (github|travis|gitlab|circle)`"
    method_option :linter, :type => :string, :lazy_default => Bundler.settings["gem.linter"] || "",
                           :desc => "Add a linter and code formatter, either RuboCop or Standard. Set a default with `bundle config set --global gem.linter (rubocop|standard)`"
    method_option :github_username, :type => :string, :default => Bundler.settings["gem.github_username"], :banner => "Set your username on GitHub", :desc => "Fill in GitHub username on README so that you don't have to do it manually. Set a default with `bundle config set --global gem.github_username <your_username>`."

    def gem(name)
    end

    commands["gem"].tap do |gem_command|
      def gem_command.run(instance, args = [])
        arity = 1 # name

        require_relative "cli/gem"
        cmd_args = args + [instance]
        cmd_args.unshift(instance.options)

        cmd = begin
          Gem.new(*cmd_args)
        rescue ArgumentError => e
          instance.class.handle_argument_error(self, e, args, arity)
        end

        cmd.run
      end
    end

    undef_method(:gem)
    define_method(:gem, old_gem)
    private :gem

    def self.source_root
      File.expand_path("templates", __dir__)
    end

    desc "clean [OPTIONS]", "Cleans up unused gems in your bundler directory", :hide => true
    method_option "dry-run", :type => :boolean, :default => false, :banner =>
      "Only print out changes, do not clean gems"
    method_option "force", :type => :boolean, :default => false, :banner =>
      "Forces cleaning up unused gems even if Bundler is configured to use globally installed gems. As a consequence, removes all system gems except for the ones in the current application."
    def clean
      require_relative "cli/clean"
      Clean.new(options.dup).run
    end

    desc "platform [OPTIONS]", "Displays platform compatibility information"
    method_option "ruby", :type => :boolean, :default => false, :banner =>
      "only display ruby related platform information"
    def platform
      require_relative "cli/platform"
      Platform.new(options).run
    end

    desc "inject GEM VERSION", "Add the named gem, with version requirements, to the resolved Gemfile", :hide => true
    method_option "source", :type => :string, :banner =>
     "Install gem from the given source"
    method_option "group", :type => :string, :banner =>
     "Install gem into a bundler group"
    def inject(name, version)
      SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
      require_relative "cli/inject"
      Inject.new(options.dup, name, version).run
    end

    desc "lock", "Creates a lockfile without installing"
    method_option "update", :type => :array, :lazy_default => true, :banner =>
      "ignore the existing lockfile, update all gems by default, or update list of given gems"
    method_option "local", :type => :boolean, :default => false, :banner =>
      "do not attempt to fetch remote gemspecs and use the local gem cache only"
    method_option "print", :type => :boolean, :default => false, :banner =>
      "print the lockfile to STDOUT instead of writing to the file system"
    method_option "gemfile", :type => :string, :banner =>
      "Use the specified gemfile instead of Gemfile"
    method_option "lockfile", :type => :string, :default => nil, :banner =>
      "the path the lockfile should be written to"
    method_option "full-index", :type => :boolean, :default => false, :banner =>
      "Fall back to using the single-file index of all gems"
    method_option "add-platform", :type => :array, :default => [], :banner =>
      "Add a new platform to the lockfile"
    method_option "remove-platform", :type => :array, :default => [], :banner =>
      "Remove a platform from the lockfile"
    method_option "patch", :type => :boolean, :banner =>
      "If updating, prefer updating only to next patch version"
    method_option "minor", :type => :boolean, :banner =>
      "If updating, prefer updating only to next minor version"
    method_option "major", :type => :boolean, :banner =>
      "If updating, prefer updating to next major version (default)"
    method_option "strict", :type => :boolean, :banner =>
      "If updating, do not allow any gem to be updated past latest --patch | --minor | --major"
    method_option "conservative", :type => :boolean, :banner =>
      "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
    def lock
      require_relative "cli/lock"
      Lock.new(options).run
    end

    desc "env", "Print information about the environment Bundler is running under"
    def env
      Env.write($stdout)
    end

    desc "doctor [OPTIONS]", "Checks the bundle for common problems"
    long_desc <<-D
      Doctor scans the OS dependencies of each of the gems requested in the Gemfile. If
      missing dependencies are detected, Bundler prints them and exits status 1.
      Otherwise, Bundler prints a success message and exits with a status of 0.
    D
    method_option "gemfile", :type => :string, :banner =>
      "Use the specified gemfile instead of Gemfile"
    method_option "quiet", :type => :boolean, :banner =>
        "Only output warnings and errors."
    def doctor
      require_relative "cli/doctor"
      Doctor.new(options).run
    end

    desc "issue", "Learn how to report an issue in Bundler"
    def issue
      require_relative "cli/issue"
      Issue.new.run
    end

    desc "pristine [GEMS...]", "Restores installed gems to pristine condition"
    long_desc <<-D
      Restores installed gems to pristine condition from files located in the
      gem cache. Gems installed from a git repository will be issued `git
      checkout --force`.
    D
    def pristine(*gems)
      require_relative "cli/pristine"
      Pristine.new(gems).run
    end

    if Bundler.feature_flag.plugins?
      require_relative "cli/plugin"
      desc "plugin", "Manage the bundler plugins"
      subcommand "plugin", Plugin
    end

    # Reformat the arguments passed to bundle that include a --help flag
    # into the corresponding `bundle help #{command}` call
    def self.reformatted_help_args(args)
      bundler_commands = (COMMAND_ALIASES.keys + COMMAND_ALIASES.values).flatten

      help_flags = %w[--help -h]
      exec_commands = ["exec"] + COMMAND_ALIASES["exec"]

      help_used = args.index {|a| help_flags.include? a }
      exec_used = args.index {|a| exec_commands.include? a }

      command = args.find {|a| bundler_commands.include? a }
      command = all_aliases[command] if all_aliases[command]

      if exec_used && help_used
        if exec_used + help_used == 1
          %w[help exec]
        else
          args
        end
      elsif help_used
        args = args.dup
        args.delete_at(help_used)
        ["help", command || args].flatten.compact
      else
        args
      end
    end

    private

    # Automatically invoke `bundle install` and resume if
    # Bundler.settings[:auto_install] exists. This is set through config cmd
    # `bundle config set --global auto_install 1`.
    #
    # Note that this method `nil`s out the global Definition object, so it
    # should be called first, before you instantiate anything like an
    # `Installer` that'll keep a reference to the old one instead.
    def auto_install
      return unless Bundler.settings[:auto_install]

      begin
        Bundler.definition.specs
      rescue GemNotFound
        Bundler.ui.info "Automatically installing missing gems."
        Bundler.reset!
        invoke :install, []
        Bundler.reset!
      end
    end

    def current_command
      _, _, config = @_initializer
      config[:current_command]
    end

    def print_command
      return unless Bundler.ui.debug?
      cmd = current_command
      command_name = cmd.name
      return if PARSEABLE_COMMANDS.include?(command_name)
      command = ["bundle", command_name] + args
      options_to_print = options.dup
      options_to_print.delete_if do |k, v|
        next unless o = cmd.options[k]
        o.default == v
      end
      command << Thor::Options.to_switches(options_to_print.sort_by(&:first)).strip
      command.reject!(&:empty?)
      Bundler.ui.info "Running `#{command * " "}` with bundler #{Bundler::VERSION}"
    end

    def warn_on_outdated_bundler
      return if Bundler.settings[:disable_version_check]

      command_name = current_command.name
      return if PARSEABLE_COMMANDS.include?(command_name)

      return unless SharedHelpers.md5_available?

      latest = Fetcher::CompactIndex.
               new(nil, Source::Rubygems::Remote.new(Bundler::URI("https://rubygems.org")), nil).
               send(:compact_index_client).
               instance_variable_get(:@cache).
               dependencies("bundler").
               map {|d| Gem::Version.new(d.first) }.
               max
      return unless latest

      current = Gem::Version.new(VERSION)
      return if current >= latest

      Bundler.ui.warn \
        "The latest bundler is #{latest}, but you are currently running #{current}.\n" \
        "To update to the most recent version, run `bundle update --bundler`"
    rescue RuntimeError
      nil
    end

    def remembered_negative_flag_deprecation(name)
      positive_name = name.gsub(/\Ano-/, "")
      option = current_command.options[positive_name]
      flag_name = "--no-" + option.switch_name.gsub(/\A--/, "")

      flag_deprecation(positive_name, flag_name, option)
    end

    def remembered_flag_deprecation(name)
      option = current_command.options[name]
      flag_name = option.switch_name

      flag_deprecation(name, flag_name, option)
    end

    def flag_deprecation(name, flag_name, option)
      name_index = ARGV.find {|arg| flag_name == arg.split("=")[0] }
      return unless name_index

      value = options[name]
      value = value.join(" ").to_s if option.type == :array

      Bundler::SharedHelpers.major_deprecation 2,
        "The `#{flag_name}` flag is deprecated because it relies on being " \
        "remembered across bundler invocations, which bundler will no longer " \
        "do in future versions. Instead please use `bundle config set --local #{name.tr("-", "_")} " \
        "'#{value}'`, and stop using this flag"
    end
  end
end
PK)"#[E�d��9gems/bundler-2.3.27/lib/bundler/endpoint_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  # used for Creating Specifications from the Gemcutter Endpoint
  class EndpointSpecification < Gem::Specification
    include MatchRemoteMetadata

    attr_reader :name, :version, :platform, :checksum
    attr_accessor :source, :remote, :dependencies

    def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
      super()
      @name         = name
      @version      = Gem::Version.create version
      @platform     = Gem::Platform.new(platform)
      @spec_fetcher = spec_fetcher
      @dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }

      @loaded_from          = nil
      @remote_specification = nil

      parse_metadata(metadata)
    end

    def fetch_platform
      @platform
    end

    def identifier
      @__identifier ||= [name, version, platform.to_s]
    end

    # needed for standalone, load required_paths from local gemspec
    # after the gem is installed
    def require_paths
      if @remote_specification
        @remote_specification.require_paths
      elsif _local_specification
        _local_specification.require_paths
      else
        super
      end
    end

    # needed for inline
    def load_paths
      # remote specs aren't installed, and can't have load_paths
      if _local_specification
        _local_specification.load_paths
      else
        super
      end
    end

    # needed for binstubs
    def executables
      if @remote_specification
        @remote_specification.executables
      elsif _local_specification
        _local_specification.executables
      else
        super
      end
    end

    # needed for bundle clean
    def bindir
      if @remote_specification
        @remote_specification.bindir
      elsif _local_specification
        _local_specification.bindir
      else
        super
      end
    end

    # needed for post_install_messages during install
    def post_install_message
      if @remote_specification
        @remote_specification.post_install_message
      elsif _local_specification
        _local_specification.post_install_message
      else
        super
      end
    end

    # needed for "with native extensions" during install
    def extensions
      if @remote_specification
        @remote_specification.extensions
      elsif _local_specification
        _local_specification.extensions
      else
        super
      end
    end

    def _local_specification
      return unless @loaded_from && File.exist?(local_specification_path)
      eval(File.read(local_specification_path)).tap do |spec|
        spec.loaded_from = @loaded_from
      end
    end

    def __swap__(spec)
      SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
      @remote_specification = spec
    end

    private

    def _remote_specification
      @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
    end

    def local_specification_path
      "#{base_dir}/specifications/#{full_name}.gemspec"
    end

    def parse_metadata(data)
      unless data
        @required_ruby_version = nil
        @required_rubygems_version = nil
        return
      end

      data.each do |k, v|
        next unless v
        case k.to_s
        when "checksum"
          @checksum = v.last
        when "rubygems"
          @required_rubygems_version = Gem::Requirement.new(v)
        when "ruby"
          @required_ruby_version = Gem::Requirement.new(v)
        end
      end
    rescue StandardError => e
      raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
    end

    def build_dependency(name, requirements)
      Gem::Dependency.new(name, requirements)
    end
  end
end
PK)"#[��Ǵ�0gems/bundler-2.3.27/lib/bundler/vendored_thor.rbnu�[���# frozen_string_literal: true

module Bundler
  def self.require_thor_actions
    require_relative "vendor/thor/lib/thor/actions"
  end
end
require_relative "vendor/thor/lib/thor"
PK)"#[�:H�OO7gems/bundler-2.3.27/lib/bundler/remote_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  # Represents a lazily loaded gem specification, where the full specification
  # is on the source server in rubygems' "quick" index. The proxy object is to
  # be seeded with what we're given from the source's abbreviated index - the
  # full specification will only be fetched when necessary.
  class RemoteSpecification
    include MatchRemoteMetadata
    include MatchPlatform
    include Comparable

    attr_reader :name, :version, :platform
    attr_writer :dependencies
    attr_accessor :source, :remote

    def initialize(name, version, platform, spec_fetcher)
      @name         = name
      @version      = Gem::Version.create version
      @original_platform = platform || Gem::Platform::RUBY
      @platform     = Gem::Platform.new(platform)
      @spec_fetcher = spec_fetcher
      @dependencies = nil
    end

    # Needed before installs, since the arch matters then and quick
    # specs don't bother to include the arch in the platform string
    def fetch_platform
      @platform = _remote_specification.platform
    end

    def identifier
      @__identifier ||= [name, version, @platform.to_s]
    end

    def full_name
      if @platform == Gem::Platform::RUBY
        "#{@name}-#{@version}"
      else
        "#{@name}-#{@version}-#{@platform}"
      end
    end

    # Compare this specification against another object. Using sort_obj
    # is compatible with Gem::Specification and other Bundler or RubyGems
    # objects. Otherwise, use the default Object comparison.
    def <=>(other)
      if other.respond_to?(:sort_obj)
        sort_obj <=> other.sort_obj
      else
        super
      end
    end

    # Because Rubyforge cannot be trusted to provide valid specifications
    # once the remote gem is downloaded, the backend specification will
    # be swapped out.
    def __swap__(spec)
      raise APIResponseInvalidDependenciesError unless spec.dependencies.all? {|d| d.is_a?(Gem::Dependency) }

      SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
      @_remote_specification = spec
    end

    # Create a delegate used for sorting. This strategy is copied from
    # RubyGems 2.23 and ensures that Bundler's specifications can be
    # compared and sorted with RubyGems' own specifications.
    #
    # @see #<=>
    # @see Gem::Specification#sort_obj
    #
    # @return [Array] an object you can use to compare and sort this
    #   specification against other specifications
    def sort_obj
      [@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1]
    end

    def to_s
      "#<#{self.class} name=#{name} version=#{version} platform=#{platform}>"
    end

    def dependencies
      @dependencies ||= begin
        deps = method_missing(:dependencies)

        # allow us to handle when the specs dependencies are an array of array of string
        # in order to delay the crash to `#__swap__` where it results in a friendlier error
        # see https://github.com/rubygems/bundler/issues/5797
        deps = deps.map {|d| d.is_a?(Gem::Dependency) ? d : Gem::Dependency.new(*d) }

        deps
      end
    end

    def git_version
      return unless loaded_from && source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

    private

    def to_ary
      nil
    end

    def _remote_specification
      @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform])
      @_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
        " missing from the server! Try installing with `--full-index` as a workaround.")
    end

    def method_missing(method, *args, &blk)
      _remote_specification.send(method, *args, &blk)
    end

    def respond_to?(method, include_all = false)
      super || _remote_specification.respond_to?(method, include_all)
    end
    public :respond_to?
  end
end
PK)"#[|L�0��/gems/bundler-2.3.27/lib/bundler/ruby_version.rbnu�[���# frozen_string_literal: true

module Bundler
  class RubyVersion
    attr_reader :versions,
      :patchlevel,
      :engine,
      :engine_versions,
      :gem_version,
      :engine_gem_version

    def initialize(versions, patchlevel, engine, engine_version)
      # The parameters to this method must satisfy the
      # following constraints, which are verified in
      # the DSL:
      #
      # * If an engine is specified, an engine version
      #   must also be specified
      # * If an engine version is specified, an engine
      #   must also be specified
      # * If the engine is "ruby", the engine version
      #   must not be specified, or the engine version
      #   specified must match the version.

      @versions = Array(versions).map do |v|
        op, v = Gem::Requirement.parse(v)
        op == "=" ? v.to_s : "#{op} #{v}"
      end

      @gem_version        = Gem::Requirement.create(@versions.first).requirements.first.last
      @input_engine       = engine && engine.to_s
      @engine             = engine && engine.to_s || "ruby"
      @engine_versions    = (engine_version && Array(engine_version)) || @versions
      @engine_gem_version = Gem::Requirement.create(@engine_versions.first).requirements.first.last
      @patchlevel         = patchlevel || (@gem_version.prerelease? ? "-1" : nil)
    end

    def to_s(versions = self.versions)
      output = String.new("ruby #{versions_string(versions)}")
      output << "p#{patchlevel}" if patchlevel && patchlevel != "-1"
      output << " (#{engine} #{versions_string(engine_versions)})" unless engine == "ruby"

      output
    end

    # @private
    PATTERN = /
      ruby\s
      (\d+\.\d+\.\d+(?:\.\S+)?) # ruby version
      (?:p(-?\d+))? # optional patchlevel
      (?:\s\((\S+)\s(.+)\))? # optional engine info
    /xo.freeze

    # Returns a RubyVersion from the given string.
    # @param [String] the version string to match.
    # @return [RubyVersion,Nil] The version if the string is a valid RubyVersion
    #         description, and nil otherwise.
    def self.from_string(string)
      new($1, $2, $3, $4) if string =~ PATTERN
    end

    def single_version_string
      to_s(gem_version)
    end

    def ==(other)
      versions == other.versions &&
        engine == other.engine &&
        engine_versions == other.engine_versions &&
        patchlevel == other.patchlevel
    end

    def host
      @host ||= [
        RbConfig::CONFIG["host_cpu"],
        RbConfig::CONFIG["host_vendor"],
        RbConfig::CONFIG["host_os"],
      ].join("-")
    end

    # Returns a tuple of these things:
    #   [diff, this, other]
    #   The priority of attributes are
    #   1. engine
    #   2. ruby_version
    #   3. engine_version
    def diff(other)
      raise ArgumentError, "Can only diff with a RubyVersion, not a #{other.class}" unless other.is_a?(RubyVersion)
      if engine != other.engine && @input_engine
        [:engine, engine, other.engine]
      elsif versions.empty? || !matches?(versions, other.gem_version)
        [:version, versions_string(versions), versions_string(other.versions)]
      elsif @input_engine && !matches?(engine_versions, other.engine_gem_version)
        [:engine_version, versions_string(engine_versions), versions_string(other.engine_versions)]
      elsif patchlevel && (!patchlevel.is_a?(String) || !other.patchlevel.is_a?(String) || !matches?(patchlevel, other.patchlevel))
        [:patchlevel, patchlevel, other.patchlevel]
      end
    end

    def versions_string(versions)
      Array(versions).join(", ")
    end

    def self.system
      ruby_engine = RUBY_ENGINE.dup
      ruby_version = Gem.ruby_version.to_s
      ruby_engine_version = RUBY_ENGINE == "ruby" ? ruby_version : RUBY_ENGINE_VERSION.dup
      patchlevel = RUBY_PATCHLEVEL.to_s

      @ruby_version ||= RubyVersion.new(ruby_version, patchlevel, ruby_engine, ruby_engine_version)
    end

    private

    def matches?(requirements, version)
      # Handles RUBY_PATCHLEVEL of -1 for instances like ruby-head
      return requirements == version if requirements.to_s == "-1" || version.to_s == "-1"

      Array(requirements).all? do |requirement|
        Gem::Requirement.create(requirement).satisfied_by?(Gem::Version.create(version))
      end
    end
  end
end
PK)"#[�OP#oo)gems/bundler-2.3.27/lib/bundler/errors.rbnu�[���# frozen_string_literal: true

module Bundler
  class BundlerError < StandardError
    def self.status_code(code)
      define_method(:status_code) { code }
      if match = BundlerError.all_errors.find {|_k, v| v == code }
        error, _ = match
        raise ArgumentError,
          "Trying to register #{self} for status code #{code} but #{error} is already registered"
      end
      BundlerError.all_errors[self] = code
    end

    def self.all_errors
      @all_errors ||= {}
    end
  end

  class GemfileError < BundlerError; status_code(4); end
  class InstallError < BundlerError; status_code(5); end

  # Internal error, should be rescued
  class VersionConflict < BundlerError
    attr_reader :conflicts

    def initialize(conflicts, msg = nil)
      super(msg)
      @conflicts = conflicts
    end

    status_code(6)
  end

  class GemNotFound < BundlerError; status_code(7); end
  class InstallHookError < BundlerError; status_code(8); end
  class GemfileNotFound < BundlerError; status_code(10); end
  class GitError < BundlerError; status_code(11); end
  class DeprecatedError < BundlerError; status_code(12); end
  class PathError < BundlerError; status_code(13); end
  class GemspecError < BundlerError; status_code(14); end
  class InvalidOption < BundlerError; status_code(15); end
  class ProductionError < BundlerError; status_code(16); end

  class HTTPError < BundlerError
    status_code(17)
    def filter_uri(uri)
      URICredentialsFilter.credential_filtered_uri(uri)
    end
  end

  class RubyVersionMismatch < BundlerError; status_code(18); end
  class SecurityError < BundlerError; status_code(19); end
  class LockfileError < BundlerError; status_code(20); end
  class CyclicDependencyError < BundlerError; status_code(21); end
  class GemfileLockNotFound < BundlerError; status_code(22); end
  class PluginError < BundlerError; status_code(29); end
  class SudoNotPermittedError < BundlerError; status_code(30); end
  class ThreadCreationError < BundlerError; status_code(33); end
  class APIResponseMismatchError < BundlerError; status_code(34); end
  class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
  class GemfileEvalError < GemfileError; end
  class MarshalError < StandardError; end

  class PermissionError < BundlerError
    def initialize(path, permission_type = :write)
      @path = path
      @permission_type = permission_type
    end

    def action
      case @permission_type
      when :read then "read from"
      when :write then "write to"
      when :executable, :exec then "execute"
      else @permission_type.to_s
      end
    end

    def permission_type
      case @permission_type
      when :create
        "executable permissions for all parent directories and write permissions for `#{parent_folder}`"
      else
        "#{@permission_type} permissions for that path"
      end
    end

    def parent_folder
      File.dirname(@path)
    end

    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "It is likely that you need to grant #{permission_type}."
    end

    status_code(23)
  end

  class GemRequireError < BundlerError
    attr_reader :orig_exception

    def initialize(orig_exception, msg)
      full_message = msg + "\nGem Load Error is: #{orig_exception.message}\n"\
                      "Backtrace for gem load error is:\n"\
                      "#{orig_exception.backtrace.join("\n")}\n"\
                      "Bundler Error Backtrace:\n"
      super(full_message)
      @orig_exception = orig_exception
    end

    status_code(24)
  end

  class YamlSyntaxError < BundlerError
    attr_reader :orig_exception

    def initialize(orig_exception, msg)
      super(msg)
      @orig_exception = orig_exception
    end

    status_code(25)
  end

  class TemporaryResourceError < PermissionError
    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "Some resource was temporarily unavailable. It's suggested that you try" \
      "the operation again."
    end

    status_code(26)
  end

  class VirtualProtocolError < BundlerError
    def message
      "There was an error relating to virtualization and file access. " \
      "It is likely that you need to grant access to or mount some file system correctly."
    end

    status_code(27)
  end

  class OperationNotSupportedError < PermissionError
    def message
      "Attempting to #{action} `#{@path}` is unsupported by your OS."
    end

    status_code(28)
  end

  class NoSpaceOnDeviceError < PermissionError
    def message
      "There was an error while trying to #{action} `#{@path}`. " \
      "There was insufficient space remaining on the device."
    end

    status_code(31)
  end

  class GenericSystemCallError < BundlerError
    attr_reader :underlying_error

    def initialize(underlying_error, message)
      @underlying_error = underlying_error
      super("#{message}\nThe underlying system error is #{@underlying_error.class}: #{@underlying_error}")
    end

    status_code(32)
  end

  class DirectoryRemovalError < BundlerError
    def initialize(orig_exception, msg)
      full_message = "#{msg}.\n" \
                     "The underlying error was #{orig_exception.class}: #{orig_exception.message}, with backtrace:\n" \
                     "  #{orig_exception.backtrace.join("\n  ")}\n\n" \
                     "Bundler Error Backtrace:"
      super(full_message)
    end

    status_code(36)
  end
end
PK)"#[�?��/gems/bundler-2.3.27/lib/bundler/self_manager.rbnu�[���# frozen_string_literal: true

module Bundler
  #
  # This class handles installing and switching to the version of bundler needed
  # by an application.
  #
  class SelfManager
    def restart_with_locked_bundler_if_needed
      return unless needs_switching? && installed?

      restart_with(lockfile_version)
    end

    def install_locked_bundler_and_restart_with_it_if_needed
      return unless needs_switching?

      Bundler.ui.info \
        "Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
        "Installing Bundler #{lockfile_version} and restarting using that version."

      install_and_restart_with(lockfile_version)
    end

    def update_bundler_and_restart_with_it_if_needed(target)
      return unless autoswitching_applies?

      spec = resolve_update_version_from(target)
      return unless spec

      version = spec.version

      Bundler.ui.info "Updating bundler to #{version}."

      install(spec)

      restart_with(version)
    end

    private

    def install_and_restart_with(version)
      requirement = Gem::Requirement.new(version)
      spec = find_latest_matching_spec(requirement)

      if spec.nil?
        Bundler.ui.warn "Your lockfile is locked to a version of bundler (#{lockfile_version}) that doesn't exist at https://rubygems.org/. Going on using #{current_version}"
        return
      end

      install(spec)
    rescue StandardError => e
      Bundler.ui.trace e
      Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
    else
      restart_with(version)
    end

    def install(spec)
      spec.source.install(spec)
    end

    def restart_with(version)
      configured_gem_home = ENV["GEM_HOME"]
      configured_gem_path = ENV["GEM_PATH"]

      cmd = [$PROGRAM_NAME, *ARGV]
      cmd.unshift(Gem.ruby) unless File.executable?($PROGRAM_NAME)

      Bundler.with_original_env do
        Kernel.exec(
          { "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => version.to_s },
          *cmd
        )
      end
    end

    def needs_switching?
      autoswitching_applies? &&
        released?(lockfile_version) &&
        !running?(lockfile_version) &&
        !updating?
    end

    def autoswitching_applies?
      ENV["BUNDLER_VERSION"].nil? &&
        Bundler.rubygems.supports_bundler_trampolining? &&
        SharedHelpers.in_bundle? &&
        lockfile_version
    end

    def resolve_update_version_from(target)
      requirement = Gem::Requirement.new(target)
      update_candidate = find_latest_matching_spec(requirement)

      if update_candidate.nil?
        raise InvalidOption, "The `bundle update --bundler` target version (#{target}) does not exist"
      end

      resolved_version = update_candidate.version
      needs_update = requirement.specific? ? !running?(resolved_version) : running_older_than?(resolved_version)

      return unless needs_update

      update_candidate
    end

    def local_specs
      @local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true).specs.select {|spec| spec.name == "bundler" }
    end

    def remote_specs
      @remote_specs ||= begin
        source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
        source.remote!
        source.add_dependency_names("bundler")
        source.specs
      end
    end

    def find_latest_matching_spec(requirement)
      local_result = find_latest_matching_spec_from_collection(local_specs, requirement)
      return local_result if local_result && requirement.specific?

      remote_result = find_latest_matching_spec_from_collection(remote_specs, requirement)
      return remote_result if local_result.nil?

      [local_result, remote_result].max
    end

    def find_latest_matching_spec_from_collection(specs, requirement)
      specs.sort.reverse_each.find {|spec| requirement.satisfied_by?(spec.version) }
    end

    def running?(version)
      version == current_version
    end

    def running_older_than?(version)
      current_version < version
    end

    def released?(version)
      !version.to_s.end_with?(".dev")
    end

    def updating?
      "update".start_with?(ARGV.first || " ") && ARGV[1..-1].any? {|a| a.start_with?("--bundler") }
    end

    def installed?
      Bundler.configure

      Bundler.rubygems.find_bundler(lockfile_version.to_s)
    end

    def current_version
      @current_version ||= Gem::Version.new(Bundler::VERSION)
    end

    def lockfile_version
      return @lockfile_version if defined?(@lockfile_version)

      parsed_version = Bundler::LockfileParser.bundled_with
      @lockfile_version = parsed_version ? Gem::Version.new(parsed_version) : nil
    end
  end
end
PK)"#[s�{ss/gems/bundler-2.3.27/lib/bundler/feature_flag.rbnu�[���# frozen_string_literal: true

module Bundler
  class FeatureFlag
    def self.settings_flag(flag, &default)
      unless Bundler::Settings::BOOL_KEYS.include?(flag.to_s)
        raise "Cannot use `#{flag}` as a settings feature flag since it isn't a bool key"
      end

      settings_method("#{flag}?", flag, &default)
    end
    private_class_method :settings_flag

    def self.settings_option(key, &default)
      settings_method(key, key, &default)
    end
    private_class_method :settings_option

    def self.settings_method(name, key, &default)
      define_method(name) do
        value = Bundler.settings[key]
        value = instance_eval(&default) if value.nil?
        value
      end
    end
    private_class_method :settings_method

    (1..10).each {|v| define_method("bundler_#{v}_mode?") { major_version >= v } }

    settings_flag(:allow_offline_install) { bundler_3_mode? }
    settings_flag(:auto_clean_without_path) { bundler_3_mode? }
    settings_flag(:cache_all) { bundler_3_mode? }
    settings_flag(:default_install_uses_path) { bundler_3_mode? }
    settings_flag(:forget_cli_options) { bundler_3_mode? }
    settings_flag(:global_gem_cache) { bundler_3_mode? }
    settings_flag(:path_relative_to_cwd) { bundler_3_mode? }
    settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
    settings_flag(:print_only_version_number) { bundler_3_mode? }
    settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
    settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
    settings_flag(:update_requires_all_flag) { bundler_4_mode? }

    settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }

    def initialize(bundler_version)
      @bundler_version = Gem::Version.create(bundler_version)
    end

    def major_version
      @bundler_version.segments.first
    end
    private :major_version
  end
end
PK)"#[�a(gems/bundler-2.3.27/lib/bundler/setup.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"

if Bundler::SharedHelpers.in_bundle?
  require_relative "../bundler"

  if STDOUT.tty? || ENV["BUNDLER_FORCE_TTY"]
    begin
      Bundler.ui.silence { Bundler.setup }
    rescue Bundler::BundlerError => e
      Bundler.ui.error e.message
      Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
      if e.is_a?(Bundler::GemNotFound)
        Bundler.ui.warn "Run `bundle install` to install missing gems."
      end
      exit e.status_code
    end
  else
    Bundler.ui.silence { Bundler.setup }
  end

  # We might be in the middle of shelling out to rubygems
  # (RUBYOPT=-rbundler/setup), so we need to give rubygems the opportunity of
  # not being silent.
  Gem::DefaultUserInteraction.ui = nil
end
PK)"#[�T�ee5gems/bundler-2.3.27/lib/bundler/vendored_molinillo.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/molinillo/lib/molinillo"
PK)"#[��Z7)7)*gems/bundler-2.3.27/lib/bundler/runtime.rbnu�[���# frozen_string_literal: true

module Bundler
  class Runtime
    include SharedHelpers

    def initialize(root, definition)
      @root = root
      @definition = definition
    end

    def setup(*groups)
      @definition.ensure_equivalent_gemfile_and_lockfile if Bundler.frozen_bundle?

      # Has to happen first
      clean_load_path

      specs = @definition.specs_for(groups)

      SharedHelpers.set_bundle_environment
      Bundler.rubygems.replace_entrypoints(specs)

      # Activate the specs
      load_paths = specs.map do |spec|
        check_for_activated_spec!(spec)

        Bundler.rubygems.mark_loaded(spec)
        spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
      end.reverse.flatten

      Bundler.rubygems.add_to_load_path(load_paths)

      setup_manpath

      lock(:preserve_unknown_sections => true)

      self
    end

    def require(*groups)
      groups.map!(&:to_sym)
      groups = [:default] if groups.empty?

      @definition.dependencies.each do |dep|
        # Skip the dependency if it is not in any of the requested groups, or
        # not for the current platform, or doesn't match the gem constraints.
        next unless (dep.groups & groups).any? && dep.should_include?

        required_file = nil

        begin
          # Loop through all the specified autorequires for the
          # dependency. If there are none, use the dependency's name
          # as the autorequire.
          Array(dep.autorequire || dep.name).each do |file|
            # Allow `require: true` as an alias for `require: <name>`
            file = dep.name if file == true
            required_file = file
            begin
              Kernel.require file
            rescue RuntimeError => e
              raise e if e.is_a?(LoadError) # we handle this a little later
              raise Bundler::GemRequireError.new e,
                "There was an error while trying to load the gem '#{file}'."
            end
          end
        rescue LoadError => e
          raise if dep.autorequire || e.path != required_file

          if dep.autorequire.nil? && dep.name.include?("-")
            begin
              namespaced_file = dep.name.tr("-", "/")
              Kernel.require namespaced_file
            rescue LoadError => e
              raise if e.path != namespaced_file
            end
          end
        end
      end
    end

    def self.definition_method(meth)
      define_method(meth) do
        raise ArgumentError, "no definition when calling Runtime##{meth}" unless @definition
        @definition.send(meth)
      end
    end
    private_class_method :definition_method

    definition_method :requested_specs
    definition_method :specs
    definition_method :dependencies
    definition_method :current_dependencies
    definition_method :requires

    def lock(opts = {})
      return if @definition.nothing_changed? && !@definition.unlocking?
      @definition.lock(Bundler.default_lockfile, opts[:preserve_unknown_sections])
    end

    alias_method :gems, :specs

    def cache(custom_path = nil, local = false)
      cache_path = Bundler.app_cache(custom_path)
      SharedHelpers.filesystem_access(cache_path) do |p|
        FileUtils.mkdir_p(p)
      end unless File.exist?(cache_path)

      Bundler.ui.info "Updating files in #{Bundler.settings.app_cache_path}"

      specs_to_cache = if Bundler.settings[:cache_all_platforms]
        @definition.resolve.materialized_for_all_platforms
      else
        begin
          specs
        rescue GemNotFound
          if local
            Bundler.ui.warn "Some gems seem to be missing from your #{Bundler.settings.app_cache_path} directory."
          end

          raise
        end
      end

      specs_to_cache.each do |spec|
        next if spec.name == "bundler"
        next if spec.source.is_a?(Source::Gemspec)
        spec.source.cache(spec, custom_path) if spec.source.respond_to?(:cache)
      end

      Dir[cache_path.join("*/.git")].each do |git_dir|
        FileUtils.rm_rf(git_dir)
        FileUtils.touch(File.expand_path("../.bundlecache", git_dir))
      end

      prune_cache(cache_path) unless Bundler.settings[:no_prune]
    end

    def prune_cache(cache_path)
      SharedHelpers.filesystem_access(cache_path) do |p|
        FileUtils.mkdir_p(p)
      end unless File.exist?(cache_path)
      resolve = @definition.resolve
      prune_gem_cache(resolve, cache_path)
      prune_git_and_path_cache(resolve, cache_path)
    end

    def clean(dry_run = false)
      gem_bins             = Dir["#{Gem.dir}/bin/*"]
      git_dirs             = Dir["#{Gem.dir}/bundler/gems/*"]
      git_cache_dirs       = Dir["#{Gem.dir}/cache/bundler/git/*"]
      gem_dirs             = Dir["#{Gem.dir}/gems/*"]
      gem_files            = Dir["#{Gem.dir}/cache/*.gem"]
      gemspec_files        = Dir["#{Gem.dir}/specifications/*.gemspec"]
      extension_dirs       = Dir["#{Gem.dir}/extensions/*/*/*"] + Dir["#{Gem.dir}/bundler/gems/extensions/*/*/*"]
      spec_gem_paths       = []
      # need to keep git sources around
      spec_git_paths       = @definition.spec_git_paths
      spec_git_cache_dirs  = []
      spec_gem_executables = []
      spec_cache_paths     = []
      spec_gemspec_paths   = []
      spec_extension_paths = []
      Bundler.rubygems.add_default_gems_to(specs).values.each do |spec|
        spec_gem_paths << spec.full_gem_path
        # need to check here in case gems are nested like for the rails git repo
        md = %r{(.+bundler/gems/.+-[a-f0-9]{7,12})}.match(spec.full_gem_path)
        spec_git_paths << md[1] if md
        spec_gem_executables << spec.executables.collect do |executable|
          e = "#{Bundler.rubygems.gem_bindir}/#{executable}"
          [e, "#{e}.bat"]
        end
        spec_cache_paths << spec.cache_file
        spec_gemspec_paths << spec.spec_file
        spec_extension_paths << spec.extension_dir if spec.respond_to?(:extension_dir)
        spec_git_cache_dirs << spec.source.cache_path.to_s if spec.source.is_a?(Bundler::Source::Git)
      end
      spec_gem_paths.uniq!
      spec_gem_executables.flatten!

      stale_gem_bins       = gem_bins - spec_gem_executables
      stale_git_dirs       = git_dirs - spec_git_paths - ["#{Gem.dir}/bundler/gems/extensions"]
      stale_git_cache_dirs = git_cache_dirs - spec_git_cache_dirs
      stale_gem_dirs       = gem_dirs - spec_gem_paths
      stale_gem_files      = gem_files - spec_cache_paths
      stale_gemspec_files  = gemspec_files - spec_gemspec_paths
      stale_extension_dirs = extension_dirs - spec_extension_paths

      removed_stale_gem_dirs = stale_gem_dirs.collect {|dir| remove_dir(dir, dry_run) }
      removed_stale_git_dirs = stale_git_dirs.collect {|dir| remove_dir(dir, dry_run) }
      output = removed_stale_gem_dirs + removed_stale_git_dirs

      unless dry_run
        stale_files = stale_gem_bins + stale_gem_files + stale_gemspec_files
        stale_files.each do |file|
          SharedHelpers.filesystem_access(File.dirname(file)) do |_p|
            FileUtils.rm(file) if File.exist?(file)
          end
        end

        stale_dirs = stale_git_cache_dirs + stale_extension_dirs
        stale_dirs.each do |stale_dir|
          SharedHelpers.filesystem_access(stale_dir) do |dir|
            FileUtils.rm_rf(dir) if File.exist?(dir)
          end
        end
      end

      output
    end

    private

    def prune_gem_cache(resolve, cache_path)
      cached = Dir["#{cache_path}/*.gem"]

      cached = cached.delete_if do |path|
        spec = Bundler.rubygems.spec_from_gem path

        resolve.any? do |s|
          s.name == spec.name && s.version == spec.version && !s.source.is_a?(Bundler::Source::Git)
        end
      end

      if cached.any?
        Bundler.ui.info "Removing outdated .gem files from #{Bundler.settings.app_cache_path}"

        cached.each do |path|
          Bundler.ui.info "  * #{File.basename(path)}"
          File.delete(path)
        end
      end
    end

    def prune_git_and_path_cache(resolve, cache_path)
      cached = Dir["#{cache_path}/*/.bundlecache"]

      cached = cached.delete_if do |path|
        name = File.basename(File.dirname(path))

        resolve.any? do |s|
          source = s.source
          source.respond_to?(:app_cache_dirname) && source.app_cache_dirname == name
        end
      end

      if cached.any?
        Bundler.ui.info "Removing outdated git and path gems from #{Bundler.settings.app_cache_path}"

        cached.each do |path|
          path = File.dirname(path)
          Bundler.ui.info "  * #{File.basename(path)}"
          FileUtils.rm_rf(path)
        end
      end
    end

    def setup_manpath
      # Add man/ subdirectories from activated bundles to MANPATH for man(1)
      manuals = $LOAD_PATH.map do |path|
        man_subdir = path.sub(/lib$/, "man")
        man_subdir unless Dir[man_subdir + "/man?/"].empty?
      end.compact

      return if manuals.empty?
      Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
        ENV["MANPATH"] ? ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR) : [""]
      ).uniq.join(File::PATH_SEPARATOR)
    end

    def remove_dir(dir, dry_run)
      full_name = Pathname.new(dir).basename.to_s

      parts    = full_name.split("-")
      name     = parts[0..-2].join("-")
      version  = parts.last
      output   = "#{name} (#{version})"

      if dry_run
        Bundler.ui.info "Would have removed #{output}"
      else
        Bundler.ui.info "Removing #{output}"
        FileUtils.rm_rf(dir)
      end

      output
    end

    def check_for_activated_spec!(spec)
      return unless activated_spec = Bundler.rubygems.loaded_specs(spec.name)
      return if activated_spec.version == spec.version

      suggestion = if activated_spec.default_gem?
        "Since #{spec.name} is a default gem, you can either remove your dependency on it" \
        " or try updating to a newer version of bundler that supports #{spec.name} as a default gem."
      else
        "Prepending `bundle exec` to your command may solve this."
      end

      e = Gem::LoadError.new "You have already activated #{activated_spec.name} #{activated_spec.version}, " \
                             "but your Gemfile requires #{spec.name} #{spec.version}. #{suggestion}"
      e.name = spec.name
      if e.respond_to?(:requirement=)
        e.requirement = Gem::Requirement.new(spec.version.to_s)
      else
        e.version_requirement = Gem::Requirement.new(spec.version.to_s)
      end
      raise e
    end
  end
end
PK)"#[�0<[�O�O&gems/bundler-2.3.27/lib/bundler/dsl.rbnu�[���# frozen_string_literal: true

require_relative "dependency"
require_relative "ruby_dsl"

module Bundler
  class Dsl
    include RubyDsl

    def self.evaluate(gemfile, lockfile, unlock)
      builder = new
      builder.eval_gemfile(gemfile)
      builder.to_definition(lockfile, unlock)
    end

    VALID_PLATFORMS = Bundler::Dependency::PLATFORM_MAP.keys.freeze

    VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
                    platform platforms type source install_if gemfile force_ruby_platform].freeze

    GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}.freeze

    attr_reader :gemspecs
    attr_accessor :dependencies

    def initialize
      @source               = nil
      @sources              = SourceList.new
      @git_sources          = {}
      @dependencies         = []
      @groups               = []
      @install_conditionals = []
      @optional_groups      = []
      @platforms            = []
      @env                  = nil
      @ruby_version         = nil
      @gemspecs             = []
      @gemfile              = nil
      @gemfiles             = []
      add_git_sources
    end

    def eval_gemfile(gemfile, contents = nil)
      expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile && @gemfile.parent)
      original_gemfile = @gemfile
      @gemfile = expanded_gemfile_path
      @gemfiles << expanded_gemfile_path
      contents ||= Bundler.read_file(@gemfile.to_s)
      instance_eval(contents.dup.tap {|x| x.untaint if RUBY_VERSION < "2.7" }, gemfile.to_s, 1)
    rescue Exception => e # rubocop:disable Lint/RescueException
      message = "There was an error " \
        "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
        "`#{File.basename gemfile.to_s}`: #{e.message}"

      raise DSLError.new(message, gemfile, e.backtrace, contents)
    ensure
      @gemfile = original_gemfile
    end

    def gemspec(opts = nil)
      opts ||= {}
      path              = opts[:path] || "."
      glob              = opts[:glob]
      name              = opts[:name]
      development_group = opts[:development_group] || :development
      expanded_path     = gemfile_root.join(path)

      gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
      gemspecs.reject! {|s| s.name != name } if name
      specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }

      case specs_by_name_and_version.size
      when 1
        specs = specs_by_name_and_version.values.first
        spec = specs.find {|s| s.match_platform(Bundler.local_platform) } || specs.first

        @gemspecs << spec

        gem spec.name, :name => spec.name, :path => path, :glob => glob

        group(development_group) do
          spec.development_dependencies.each do |dep|
            gem dep.name, *(dep.requirement.as_list + [:type => :development])
          end
        end
      when 0
        raise InvalidOption, "There are no gemspecs at #{expanded_path}"
      else
        raise InvalidOption, "There are multiple gemspecs at #{expanded_path}. " \
          "Please use the :name option to specify which one should be used"
      end
    end

    def gem(name, *args)
      options = args.last.is_a?(Hash) ? args.pop.dup : {}
      options["gemfile"] = @gemfile
      version = args || [">= 0"]

      normalize_options(name, version, options)

      dep = Dependency.new(name, version, options)

      # if there's already a dependency with this name we try to prefer one
      if current = @dependencies.find {|d| d.name == dep.name }
        deleted_dep = @dependencies.delete(current) if current.type == :development

        unless deleted_dep
          if current.requirement != dep.requirement
            return if dep.type == :development

            update_prompt = ""

            if File.basename(@gemfile) == Injector::INJECTED_GEMS
              if dep.requirements_list.include?(">= 0") && !current.requirements_list.include?(">= 0")
                update_prompt = ". Gem already added"
              else
                update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"

                update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current.requirements_list.include?(">= 0")
              end
            end

            raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
                            "You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
                             "#{update_prompt}"
          elsif current.source != dep.source
            return if dep.type == :development
            raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
                            "You specified that #{dep.name} (#{dep.requirement}) should come from " \
                            "#{current.source || "an unspecified source"} and #{dep.source}\n"
          else
            Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
                            "You should probably keep only one of them.\n" \
                            "Remove any duplicate entries and specify the gem only once.\n" \
                            "While it's not a problem now, it could cause errors if you change the version of one of them later."
          end
        end
      end

      @dependencies << dep
    end

    def source(source, *args, &blk)
      options = args.last.is_a?(Hash) ? args.pop.dup : {}
      options = normalize_hash(options)
      source = normalize_source(source)

      if options.key?("type")
        options["type"] = options["type"].to_s
        unless Plugin.source?(options["type"])
          raise InvalidOption, "No plugin sources available for #{options["type"]}"
        end

        unless block_given?
          raise InvalidOption, "You need to pass a block to #source with :type option"
        end

        source_opts = options.merge("uri" => source)
        with_source(@sources.add_plugin_source(options["type"], source_opts), &blk)
      elsif block_given?
        with_source(@sources.add_rubygems_source("remotes" => source), &blk)
      else
        @sources.add_global_rubygems_remote(source)
      end
    end

    def git_source(name, &block)
      unless block_given?
        raise InvalidOption, "You need to pass a block to #git_source"
      end

      if valid_keys.include?(name.to_s)
        raise InvalidOption, "You cannot use #{name} as a git source. It " \
          "is a reserved key. Reserved keys are: #{valid_keys.join(", ")}"
      end

      @git_sources[name.to_s] = block
    end

    def path(path, options = {}, &blk)
      source_options = normalize_hash(options).merge(
        "path" => Pathname.new(path),
        "root_path" => gemfile_root,
        "gemspec" => gemspecs.find {|g| g.name == options["name"] }
      )

      source_options["global"] = true unless block_given?

      source = @sources.add_path_source(source_options)
      with_source(source, &blk)
    end

    def git(uri, options = {}, &blk)
      unless block_given?
        msg = "You can no longer specify a git source by itself. Instead, \n" \
              "either use the :git option on a gem, or specify the gems that \n" \
              "bundler should find in the git source by passing a block to \n" \
              "the git method, like: \n\n" \
              "  git 'git://github.com/rails/rails.git' do\n" \
              "    gem 'rails'\n" \
              "  end"
        raise DeprecatedError, msg
      end

      with_source(@sources.add_git_source(normalize_hash(options).merge("uri" => uri)), &blk)
    end

    def github(repo, options = {})
      raise ArgumentError, "GitHub sources require a block" unless block_given?
      github_uri  = @git_sources["github"].call(repo)
      git_options = normalize_hash(options).merge("uri" => github_uri)
      git_source  = @sources.add_git_source(git_options)
      with_source(git_source) { yield }
    end

    def to_definition(lockfile, unlock)
      check_primary_source_safety
      Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, @optional_groups, @gemfiles)
    end

    def group(*args, &blk)
      options = args.last.is_a?(Hash) ? args.pop.dup : {}
      normalize_group_options(options, args)

      @groups.concat args

      if options["optional"]
        optional_groups = args - @optional_groups
        @optional_groups.concat optional_groups
      end

      yield
    ensure
      args.each { @groups.pop }
    end

    def install_if(*args)
      @install_conditionals.concat args
      yield
    ensure
      args.each { @install_conditionals.pop }
    end

    def platforms(*platforms)
      @platforms.concat platforms
      yield
    ensure
      platforms.each { @platforms.pop }
    end
    alias_method :platform, :platforms

    def env(name)
      old = @env
      @env = name
      yield
    ensure
      @env = old
    end

    def plugin(*args)
      # Pass on
    end

    def method_missing(name, *args)
      raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile"
    end

    def check_primary_source_safety
      check_path_source_safety
      check_rubygems_source_safety
    end

    private

    def add_git_sources
      git_source(:github) do |repo_name|
        if repo_name =~ GITHUB_PULL_REQUEST_URL
          {
            "git" => "https://github.com/#{$1}.git",
            "branch" => "refs/pull/#{$2}/head",
            "ref" => nil,
            "tag" => nil,
          }
        else
          repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
          "https://github.com/#{repo_name}.git"
        end
      end

      git_source(:gist) do |repo_name|
        "https://gist.github.com/#{repo_name}.git"
      end

      git_source(:bitbucket) do |repo_name|
        user_name, repo_name = repo_name.split("/")
        repo_name ||= user_name
        "https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
      end
    end

    def with_source(source)
      old_source = @source
      if block_given?
        @source = source
        yield
      end
      source
    ensure
      @source = old_source
    end

    def normalize_hash(opts)
      opts.keys.each do |k|
        opts[k.to_s] = opts.delete(k) unless k.is_a?(String)
      end
      opts
    end

    def valid_keys
      @valid_keys ||= VALID_KEYS
    end

    def normalize_options(name, version, opts)
      if name.is_a?(Symbol)
        raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
      end
      if name =~ /\s/
        raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
      end
      raise GemfileError, %(an empty gem name is not valid) if name.empty?

      normalize_hash(opts)

      git_names = @git_sources.keys.map(&:to_s)
      validate_keys("gem '#{name}'", opts, valid_keys + git_names)

      groups = @groups.dup
      opts["group"] = opts.delete("groups") || opts["group"]
      groups.concat Array(opts.delete("group"))
      groups = [:default] if groups.empty?

      install_if = @install_conditionals.dup
      install_if.concat Array(opts.delete("install_if"))
      install_if = install_if.reduce(true) do |memo, val|
        memo && (val.respond_to?(:call) ? val.call : val)
      end

      platforms = @platforms.dup
      opts["platforms"] = opts["platform"] || opts["platforms"]
      platforms.concat Array(opts.delete("platforms"))
      platforms.map!(&:to_sym)
      platforms.each do |p|
        next if VALID_PLATFORMS.include?(p)
        raise GemfileError, "`#{p}` is not a valid platform. The available options are: #{VALID_PLATFORMS.inspect}"
      end

      # Save sources passed in a key
      if opts.key?("source")
        source = normalize_source(opts["source"])
        opts["source"] = @sources.add_rubygems_source("remotes" => source)
      end

      git_name = (git_names & opts.keys).last
      if @git_sources[git_name]
        git_opts = @git_sources[git_name].call(opts[git_name])
        git_opts = { "git" => git_opts } if git_opts.is_a?(String)
        opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
          raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
        end
      end

      %w[git path].each do |type|
        next unless param = opts[type]
        if version.first && version.first =~ /^\s*=?\s*(\d[^\s]*)\s*$/
          options = opts.merge("name" => name, "version" => $1)
        else
          options = opts.dup
        end
        source = send(type, param, options) {}
        opts["source"] = source
      end

      opts["source"]         ||= @source
      opts["env"]            ||= @env
      opts["platforms"]      = platforms.dup
      opts["group"]          = groups
      opts["should_include"] = install_if
    end

    def normalize_group_options(opts, groups)
      normalize_hash(opts)

      groups = groups.map {|group| ":#{group}" }.join(", ")
      validate_keys("group #{groups}", opts, %w[optional])

      opts["optional"] ||= false
    end

    def validate_keys(command, opts, valid_keys)
      invalid_keys = opts.keys - valid_keys

      git_source = opts.keys & @git_sources.keys.map(&:to_s)
      if opts["branch"] && !(opts["git"] || opts["github"] || git_source.any?)
        raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
      end

      return true unless invalid_keys.any?

      message = String.new
      message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
      message << if invalid_keys.size > 1
        "as options for #{command}, but they are invalid."
      else
        "as an option for #{command}, but it is invalid."
      end

      message << " Valid options are: #{valid_keys.join(", ")}."
      message << " You may be able to resolve this by upgrading Bundler to the newest version."
      raise InvalidOption, message
    end

    def normalize_source(source)
      case source
      when :gemcutter, :rubygems, :rubyforge
        Bundler::SharedHelpers.major_deprecation 2, "The source :#{source} is deprecated because HTTP " \
          "requests are insecure.\nPlease change your source to 'https://" \
          "rubygems.org' if possible, or 'http://rubygems.org' if not."
        "http://rubygems.org"
      when String
        source
      else
        raise GemfileError, "Unknown source '#{source}'"
      end
    end

    def check_path_source_safety
      return if @sources.global_path_source.nil?

      msg = "You can no longer specify a path source by itself. Instead, \n" \
              "either use the :path option on a gem, or specify the gems that \n" \
              "bundler should find in the path source by passing a block to \n" \
              "the path method, like: \n\n" \
              "    path 'dir/containing/rails' do\n" \
              "      gem 'rails'\n" \
              "    end\n\n"

      SharedHelpers.major_deprecation(2, msg.strip)
    end

    def check_rubygems_source_safety
      if @sources.implicit_global_source?
        implicit_global_source_warning
      elsif @sources.aggregate_global_source?
        multiple_global_source_warning
      end
    end

    def implicit_global_source_warning
      Bundler::SharedHelpers.major_deprecation 2, "This Gemfile does not include an explicit global source. " \
        "Not using an explicit global source may result in a different lockfile being generated depending on " \
        "the gems you have installed locally before bundler is run. " \
        "Instead, define a global source in your Gemfile like this: source \"https://rubygems.org\"."
    end

    def multiple_global_source_warning
      if Bundler.feature_flag.bundler_3_mode?
        msg = "This Gemfile contains multiple global sources. " \
          "Each source after the first must include a block to indicate which gems " \
          "should come from that source"
        raise GemfileEvalError, msg
      else
        Bundler::SharedHelpers.major_deprecation 2, "Your Gemfile contains multiple global sources. " \
          "Using `source` more than once without a block is a security risk, and " \
          "may result in installing unexpected gems. To resolve this warning, use " \
          "a block to indicate which gems should come from the secondary source."
      end
    end

    class DSLError < GemfileError
      # @return [String] the description that should be presented to the user.
      #
      attr_reader :description

      # @return [String] the path of the dsl file that raised the exception.
      #
      attr_reader :dsl_path

      # @return [Exception] the backtrace of the exception raised by the
      #         evaluation of the dsl file.
      #
      attr_reader :backtrace

      # @param [Exception] backtrace @see backtrace
      # @param [String]    dsl_path  @see dsl_path
      #
      def initialize(description, dsl_path, backtrace, contents = nil)
        @status_code = $!.respond_to?(:status_code) && $!.status_code

        @description = description
        @dsl_path    = dsl_path
        @backtrace   = backtrace
        @contents    = contents
      end

      def status_code
        @status_code || super
      end

      # @return [String] the contents of the DSL that cause the exception to
      #         be raised.
      #
      def contents
        @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
      end

      # The message of the exception reports the content of podspec for the
      # line that generated the original exception.
      #
      # @example Output
      #
      #   Invalid podspec at `RestKit.podspec` - undefined method
      #   `exclude_header_search_paths=' for #<Pod::Specification for
      #   `RestKit/Network (0.9.3)`>
      #
      #       from spec-repos/master/RestKit/0.9.3/RestKit.podspec:36
      #       -------------------------------------------
      #           # because it would break: #import <CoreData/CoreData.h>
      #    >      ns.exclude_header_search_paths = 'Code/RestKit.h'
      #         end
      #       -------------------------------------------
      #
      # @return [String] the message of the exception.
      #
      def to_s
        @to_s ||= begin
          trace_line, description = parse_line_number_from_description

          m = String.new("\n[!] ")
          m << description
          m << ". Bundler cannot continue.\n"

          return m unless backtrace && dsl_path && contents

          trace_line = backtrace.find {|l| l.include?(dsl_path.to_s) } || trace_line
          return m unless trace_line
          line_numer = trace_line.split(":")[1].to_i - 1
          return m unless line_numer

          lines      = contents.lines.to_a
          indent     = " #  "
          indicator  = indent.tr("#", ">")
          first_line = line_numer.zero?
          last_line  = (line_numer == (lines.count - 1))

          m << "\n"
          m << "#{indent}from #{trace_line.gsub(/:in.*$/, "")}\n"
          m << "#{indent}-------------------------------------------\n"
          m << "#{indent}#{lines[line_numer - 1]}" unless first_line
          m << "#{indicator}#{lines[line_numer]}"
          m << "#{indent}#{lines[line_numer + 1]}" unless last_line
          m << "\n" unless m.end_with?("\n")
          m << "#{indent}-------------------------------------------\n"
        end
      end

      private

      def parse_line_number_from_description
        description = self.description
        if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/
          trace_line = Regexp.last_match[1]
          description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
        end
        [trace_line, description]
      end
    end

    def gemfile_root
      @gemfile ||= Bundler.default_gemfile
      @gemfile.dirname
    end
  end
end
PK)"#[6�e$ll,gems/bundler-2.3.27/lib/bundler/deprecate.rbnu�[���# frozen_string_literal: true

begin
  require "rubygems/deprecate"
rescue LoadError
  # it's fine if it doesn't exist on the current RubyGems...
  nil
end

module Bundler
  # If Bundler::Deprecate is an autoload constant, we need to define it
  if defined?(Bundler::Deprecate) && !autoload?(:Deprecate)
    # nothing to do!
  elsif defined? ::Deprecate
    Deprecate = ::Deprecate
  elsif defined? Gem::Deprecate
    Deprecate = Gem::Deprecate
  else
    class Deprecate
    end
  end

  unless Deprecate.respond_to?(:skip_during)
    def Deprecate.skip_during
      original = skip
      self.skip = true
      yield
    ensure
      self.skip = original
    end
  end

  unless Deprecate.respond_to?(:skip)
    def Deprecate.skip
      @skip ||= false
    end
  end

  unless Deprecate.respond_to?(:skip=)
    def Deprecate.skip=(skip)
      @skip = skip
    end
  end
end
PK)"#[7�1�GG1gems/bundler-2.3.27/lib/bundler/match_platform.rbnu�[���# frozen_string_literal: true

require_relative "gem_helpers"

module Bundler
  module MatchPlatform
    include GemHelpers

    def match_platform(p)
      MatchPlatform.platforms_match?(platform, p)
    end

    def self.platforms_match?(gemspec_platform, local_platform)
      return true if gemspec_platform.nil?
      return true if Gem::Platform::RUBY == gemspec_platform
      return true if local_platform == gemspec_platform
      gemspec_platform = Gem::Platform.new(gemspec_platform)
      return true if gemspec_platform === local_platform

      false
    end
  end
end
PK)"#[/k��*�*1gems/bundler-2.3.27/lib/bundler/shared_helpers.rbnu�[���# frozen_string_literal: true

require "pathname"
require "rbconfig"

require_relative "version"
require_relative "constants"
require_relative "rubygems_integration"
require_relative "current_ruby"

module Bundler
  module SharedHelpers
    def root
      gemfile = find_gemfile
      raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
      Pathname.new(gemfile).tap {|x| x.untaint if RUBY_VERSION < "2.7" }.expand_path.parent
    end

    def default_gemfile
      gemfile = find_gemfile
      raise GemfileNotFound, "Could not locate Gemfile" unless gemfile
      Pathname.new(gemfile).tap {|x| x.untaint if RUBY_VERSION < "2.7" }.expand_path
    end

    def default_lockfile
      gemfile = default_gemfile

      case gemfile.basename.to_s
      when "gems.rb" then Pathname.new(gemfile.sub(/.rb$/, ".locked"))
      else Pathname.new("#{gemfile}.lock")
      end.tap {|x| x.untaint if RUBY_VERSION < "2.7" }
    end

    def default_bundle_dir
      bundle_dir = find_directory(".bundle")
      return nil unless bundle_dir

      bundle_dir = Pathname.new(bundle_dir)

      global_bundle_dir = Bundler.user_home.join(".bundle")
      return nil if bundle_dir == global_bundle_dir

      bundle_dir
    end

    def in_bundle?
      find_gemfile
    end

    def chdir(dir, &blk)
      Bundler.rubygems.ext_lock.synchronize do
        Dir.chdir dir, &blk
      end
    end

    def pwd
      Bundler.rubygems.ext_lock.synchronize do
        Pathname.pwd
      end
    end

    def with_clean_git_env(&block)
      keys    = %w[GIT_DIR GIT_WORK_TREE]
      old_env = keys.inject({}) do |h, k|
        h.update(k => ENV[k])
      end

      keys.each {|key| ENV.delete(key) }

      block.call
    ensure
      keys.each {|key| ENV[key] = old_env[key] }
    end

    def set_bundle_environment
      set_bundle_variables
      set_path
      set_rubyopt
      set_rubylib
    end

    # Rescues permissions errors raised by file system operations
    # (ie. Errno:EACCESS, Errno::EAGAIN) and raises more friendly errors instead.
    #
    # @param path [String] the path that the action will be attempted to
    # @param action [Symbol, #to_s] the type of operation that will be
    #   performed. For example: :write, :read, :exec
    #
    # @yield path
    #
    # @raise [Bundler::PermissionError] if Errno:EACCES is raised in the
    #   given block
    # @raise [Bundler::TemporaryResourceError] if Errno:EAGAIN is raised in the
    #   given block
    #
    # @example
    #   filesystem_access("vendor/cache", :write) do
    #     FileUtils.mkdir_p("vendor/cache")
    #   end
    #
    # @see {Bundler::PermissionError}
    def filesystem_access(path, action = :write, &block)
      yield(path.dup.tap {|x| x.untaint if RUBY_VERSION < "2.7" })
    rescue Errno::EACCES
      raise PermissionError.new(path, action)
    rescue Errno::EAGAIN
      raise TemporaryResourceError.new(path, action)
    rescue Errno::EPROTO
      raise VirtualProtocolError.new
    rescue Errno::ENOSPC
      raise NoSpaceOnDeviceError.new(path, action)
    rescue Errno::ENOTSUP
      raise OperationNotSupportedError.new(path, action)
    rescue Errno::EEXIST, Errno::ENOENT
      raise
    rescue SystemCallError => e
      raise GenericSystemCallError.new(e, "There was an error accessing `#{path}`.")
    end

    def major_deprecation(major_version, message, print_caller_location: false)
      if print_caller_location
        caller_location = caller_locations(2, 2).first
        message = "#{message} (called at #{caller_location.path}:#{caller_location.lineno})"
      end

      bundler_major_version = Bundler.bundler_major_version
      if bundler_major_version > major_version
        require_relative "errors"
        raise DeprecatedError, "[REMOVED] #{message}"
      end

      return unless bundler_major_version >= major_version && prints_major_deprecations?
      Bundler.ui.warn("[DEPRECATED] #{message}")
    end

    def print_major_deprecations!
      multiple_gemfiles = search_up(".") do |dir|
        gemfiles = gemfile_names.select {|gf| File.file? File.expand_path(gf, dir) }
        next if gemfiles.empty?
        break gemfiles.size != 1
      end
      return unless multiple_gemfiles
      message = "Multiple gemfiles (gems.rb and Gemfile) detected. " \
                "Make sure you remove Gemfile and Gemfile.lock since bundler is ignoring them in favor of gems.rb and gems.locked."
      Bundler.ui.warn message
    end

    def ensure_same_dependencies(spec, old_deps, new_deps)
      new_deps = new_deps.reject {|d| d.type == :development }
      old_deps = old_deps.reject {|d| d.type == :development }

      without_type = proc {|d| Gem::Dependency.new(d.name, d.requirements_list.sort) }
      new_deps.map!(&without_type)
      old_deps.map!(&without_type)

      extra_deps = new_deps - old_deps
      return if extra_deps.empty?

      Bundler.ui.debug "#{spec.full_name} from #{spec.remote} has either corrupted API or lockfile dependencies" \
        " (was expecting #{old_deps.map(&:to_s)}, but the real spec has #{new_deps.map(&:to_s)})"
      raise APIResponseMismatchError,
        "Downloading #{spec.full_name} revealed dependencies not in the API or the lockfile (#{extra_deps.join(", ")})." \
        "\nEither installing with `--full-index` or running `bundle update #{spec.name}` should fix the problem."
    end

    def pretty_dependency(dep)
      msg = String.new(dep.name)
      msg << " (#{dep.requirement})" unless dep.requirement == Gem::Requirement.default

      if dep.is_a?(Bundler::Dependency)
        platform_string = dep.platforms.join(", ")
        msg << " " << platform_string if !platform_string.empty? && platform_string != Gem::Platform::RUBY
      end

      msg
    end

    def md5_available?
      return @md5_available if defined?(@md5_available)
      @md5_available = begin
        require "openssl"
        ::OpenSSL::Digest.digest("MD5", "")
        true
      rescue LoadError
        true
      rescue ::OpenSSL::Digest::DigestError
        false
      end
    end

    def digest(name)
      require "digest"
      Digest(name)
    end

    def write_to_gemfile(gemfile_path, contents)
      filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
    end

    private

    def validate_bundle_path
      path_separator = Bundler.rubygems.path_separator
      return unless Bundler.bundle_path.to_s.split(path_separator).size > 1
      message = "Your bundle path contains text matching #{path_separator.inspect}, " \
                "which is the path separator for your system. Bundler cannot " \
                "function correctly when the Bundle path contains the " \
                "system's PATH separator. Please change your " \
                "bundle path to not match #{path_separator.inspect}." \
                "\nYour current bundle path is '#{Bundler.bundle_path}'."
      raise Bundler::PathError, message
    end

    def find_gemfile
      given = ENV["BUNDLE_GEMFILE"]
      return given if given && !given.empty?
      find_file(*gemfile_names)
    end

    def gemfile_names
      ["gems.rb", "Gemfile"]
    end

    def find_file(*names)
      search_up(*names) do |filename|
        return filename if File.file?(filename)
      end
    end

    def find_directory(*names)
      search_up(*names) do |dirname|
        return dirname if File.directory?(dirname)
      end
    end

    def search_up(*names)
      previous = nil
      current  = File.expand_path(SharedHelpers.pwd).tap {|x| x.untaint if RUBY_VERSION < "2.7" }

      until !File.directory?(current) || current == previous
        if ENV["BUNDLER_SPEC_RUN"]
          # avoid stepping above the tmp directory when testing
          gemspec = if ENV["GEM_COMMAND"]
            # for Ruby Core
            "lib/bundler/bundler.gemspec"
          else
            "bundler.gemspec"
          end

          # avoid stepping above the tmp directory when testing
          return nil if File.file?(File.join(current, gemspec))
        end

        names.each do |name|
          filename = File.join(current, name)
          yield filename
        end
        previous = current
        current = File.expand_path("..", current)
      end
    end

    def set_env(key, value)
      raise ArgumentError, "new key #{key}" unless EnvironmentPreserver::BUNDLER_KEYS.include?(key)
      orig_key = "#{EnvironmentPreserver::BUNDLER_PREFIX}#{key}"
      orig = ENV[key]
      orig ||= EnvironmentPreserver::INTENTIONALLY_NIL
      ENV[orig_key] ||= orig

      ENV[key] = value
    end
    public :set_env

    def set_bundle_variables
      # bundler exe & lib folders have same root folder, typical gem installation
      exe_file = File.expand_path("../../exe/bundle", __dir__)

      # for Ruby core repository testing
      exe_file = File.expand_path("../../libexec/bundle", __dir__) unless File.exist?(exe_file)

      # bundler is a default gem, exe path is separate
      exe_file = Bundler.rubygems.bin_path("bundler", "bundle", VERSION) unless File.exist?(exe_file)

      Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
      Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile.to_s
      Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
    end

    def set_path
      validate_bundle_path
      paths = (ENV["PATH"] || "").split(File::PATH_SEPARATOR)
      paths.unshift "#{Bundler.bundle_path}/bin"
      Bundler::SharedHelpers.set_env "PATH", paths.uniq.join(File::PATH_SEPARATOR)
    end

    def set_rubyopt
      rubyopt = [ENV["RUBYOPT"]].compact
      setup_require = "-r#{File.expand_path("setup", __dir__)}"
      return if !rubyopt.empty? && rubyopt.first =~ /#{setup_require}/
      rubyopt.unshift setup_require
      Bundler::SharedHelpers.set_env "RUBYOPT", rubyopt.join(" ")
    end

    def set_rubylib
      rubylib = (ENV["RUBYLIB"] || "").split(File::PATH_SEPARATOR)
      rubylib.unshift bundler_ruby_lib unless RbConfig::CONFIG["rubylibdir"] == bundler_ruby_lib
      Bundler::SharedHelpers.set_env "RUBYLIB", rubylib.uniq.join(File::PATH_SEPARATOR)
    end

    def bundler_ruby_lib
      File.expand_path("..", __dir__)
    end

    def clean_load_path
      loaded_gem_paths = Bundler.rubygems.loaded_gem_paths

      $LOAD_PATH.reject! do |p|
        resolved_path = resolve_path(p)
        next if $LOADED_FEATURES.any? {|lf| lf.start_with?(resolved_path) }
        loaded_gem_paths.delete(p)
      end
      $LOAD_PATH.uniq!
    end

    def resolve_path(path)
      expanded = File.expand_path(path)
      return expanded unless File.exist?(expanded)

      File.realpath(expanded)
    end

    def prints_major_deprecations?
      require_relative "../bundler"
      return false if Bundler.settings[:silence_deprecations]
      require_relative "deprecate"
      return false if Bundler::Deprecate.skip
      true
    end

    extend self
  end
end
PK)"#[�����+gems/bundler-2.3.27/lib/bundler/ruby_dsl.rbnu�[���# frozen_string_literal: true

module Bundler
  module RubyDsl
    def ruby(*ruby_version)
      options = ruby_version.last.is_a?(Hash) ? ruby_version.pop : {}
      ruby_version.flatten!
      raise GemfileError, "Please define :engine_version" if options[:engine] && options[:engine_version].nil?
      raise GemfileError, "Please define :engine" if options[:engine_version] && options[:engine].nil?

      if options[:engine] == "ruby" && options[:engine_version] &&
         ruby_version != Array(options[:engine_version])
        raise GemfileEvalError, "ruby_version must match the :engine_version for MRI"
      end
      @ruby_version = RubyVersion.new(ruby_version, options[:patchlevel], options[:engine], options[:engine_version])
    end
  end
end
PK)"#[��-
-
6gems/bundler-2.3.27/lib/bundler/resolver/spec_group.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    class SpecGroup
      attr_accessor :name, :version, :source
      attr_accessor :activated_platforms, :force_ruby_platform

      def initialize(specs, relevant_platforms)
        @exemplary_spec = specs.first
        @name = @exemplary_spec.name
        @version = @exemplary_spec.version
        @source = @exemplary_spec.source

        @activated_platforms = relevant_platforms
        @specs = specs
      end

      def to_specs
        @specs.map do |s|
          lazy_spec = LazySpecification.new(name, version, s.platform, source)
          lazy_spec.force_ruby_platform = force_ruby_platform
          lazy_spec.dependencies.replace s.dependencies
          lazy_spec
        end
      end

      def to_s
        activated_platforms_string = sorted_activated_platforms.join(", ")
        "#{name} (#{version}) (#{activated_platforms_string})"
      end

      def dependencies_for_activated_platforms
        @dependencies_for_activated_platforms ||= @specs.map do |spec|
          __dependencies(spec) + metadata_dependencies(spec)
        end.flatten.uniq
      end

      def ==(other)
        return unless other.is_a?(SpecGroup)
        name == other.name &&
          version == other.version &&
          sorted_activated_platforms == other.sorted_activated_platforms &&
          source == other.source
      end

      def eql?(other)
        return unless other.is_a?(SpecGroup)
        name.eql?(other.name) &&
          version.eql?(other.version) &&
          sorted_activated_platforms.eql?(other.sorted_activated_platforms) &&
          source.eql?(other.source)
      end

      def hash
        name.hash ^ version.hash ^ sorted_activated_platforms.hash ^ source.hash
      end

      protected

      def sorted_activated_platforms
        activated_platforms.sort_by(&:to_s)
      end

      private

      def __dependencies(spec)
        dependencies = []
        spec.dependencies.each do |dep|
          next if dep.type == :development
          dependencies << Dependency.new(dep.name, dep.requirement)
        end
        dependencies
      end

      def metadata_dependencies(spec)
        return [] if spec.is_a?(LazySpecification)

        [
          metadata_dependency("Ruby", spec.required_ruby_version),
          metadata_dependency("RubyGems", spec.required_rubygems_version),
        ].compact
      end

      def metadata_dependency(name, requirement)
        return if requirement.nil? || requirement.none?

        Dependency.new("#{name}\0", requirement)
      end
    end
  end
end
PK)"#[>��T��0gems/bundler-2.3.27/lib/bundler/resolver/base.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    class Base
      def initialize(base, additional_base_requirements)
        @base = base
        @additional_base_requirements = additional_base_requirements
      end

      def [](name)
        @base[name]
      end

      def delete(spec)
        @base.delete(spec)
      end

      def base_requirements
        @base_requirements ||= build_base_requirements
      end

      def unlock_deps(deps)
        exact, lower_bound = deps.partition(&:specific?)

        exact.each do |exact_dep|
          @base.delete_by_name_and_version(exact_dep.name, exact_dep.requirement.requirements.first.last)
        end

        lower_bound.each do |lower_bound_dep|
          @additional_base_requirements.delete(lower_bound_dep)
        end

        @base_requirements = nil
      end

      private

      def build_base_requirements
        base_requirements = {}
        @base.each do |ls|
          dep = Dependency.new(ls.name, ls.version)
          base_requirements[ls.name] = dep
        end
        @additional_base_requirements.each {|d| base_requirements[d.name] = d }
        base_requirements
      end
    end
  end
end
PK)"#[����5�5+gems/bundler-2.3.27/lib/bundler/settings.rbnu�[���# frozen_string_literal: true

module Bundler
  class Settings
    autoload :Mirror,  File.expand_path("mirror", __dir__)
    autoload :Mirrors, File.expand_path("mirror", __dir__)
    autoload :Validator, File.expand_path("settings/validator", __dir__)

    BOOL_KEYS = %w[
      allow_deployment_source_credential_changes
      allow_offline_install
      auto_clean_without_path
      auto_install
      cache_all
      cache_all_platforms
      clean
      default_install_uses_path
      deployment
      disable_checksum_validation
      disable_exec_load
      disable_local_branch_check
      disable_local_revision_check
      disable_shared_gems
      disable_version_check
      force_ruby_platform
      forget_cli_options
      frozen
      gem.changelog
      gem.coc
      gem.mit
      git.allow_insecure
      global_gem_cache
      ignore_messages
      init_gems_rb
      inline
      no_install
      no_prune
      path_relative_to_cwd
      path.system
      plugins
      prefer_patch
      print_only_version_number
      setup_makes_kernel_gem_public
      silence_deprecations
      silence_root_warning
      suppress_install_using_messages
      update_requires_all_flag
    ].freeze

    NUMBER_KEYS = %w[
      jobs
      redirect
      retry
      ssl_verify_mode
      timeout
    ].freeze

    ARRAY_KEYS = %w[
      only
      with
      without
    ].freeze

    STRING_KEYS = %w[
      bin
      cache_path
      console
      gem.ci
      gem.github_username
      gem.linter
      gem.rubocop
      gem.test
      gemfile
      path
      shebang
      system_bindir
      trust-policy
    ].freeze

    DEFAULT_CONFIG = {
      "BUNDLE_SILENCE_DEPRECATIONS" => false,
      "BUNDLE_DISABLE_VERSION_CHECK" => true,
      "BUNDLE_PREFER_PATCH" => false,
      "BUNDLE_REDIRECT" => 5,
      "BUNDLE_RETRY" => 3,
      "BUNDLE_TIMEOUT" => 10,
    }.freeze

    def initialize(root = nil)
      @root            = root
      @local_config    = load_config(local_config_file)
      @env_config      = ENV.to_h.select {|key, _value| key =~ /\ABUNDLE_.+/ }
      @global_config   = load_config(global_config_file)
      @temporary       = {}
    end

    def [](name)
      key = key_for(name)
      value = configs.values.map {|config| config[key] }.compact.first

      converted_value(value, name)
    end

    def set_command_option(key, value)
      if Bundler.feature_flag.forget_cli_options?
        temporary(key => value)
        value
      else
        set_local(key, value)
      end
    end

    def set_command_option_if_given(key, value)
      return if value.nil?
      set_command_option(key, value)
    end

    def set_local(key, value)
      local_config_file || raise(GemfileNotFound, "Could not locate Gemfile")

      set_key(key, value, @local_config, local_config_file)
    end

    def temporary(update)
      existing = Hash[update.map {|k, _| [k, @temporary[key_for(k)]] }]
      update.each do |k, v|
        set_key(k, v, @temporary, nil)
      end
      return unless block_given?
      begin
        yield
      ensure
        existing.each {|k, v| set_key(k, v, @temporary, nil) }
      end
    end

    def set_global(key, value)
      set_key(key, value, @global_config, global_config_file)
    end

    def all
      keys = @temporary.keys | @global_config.keys | @local_config.keys | @env_config.keys

      keys.map do |key|
        key.sub(/^BUNDLE_/, "").gsub(/___/, "-").gsub(/__/, ".").downcase
      end.sort
    end

    def local_overrides
      repos = {}
      all.each do |k|
        repos[$'] = self[k] if k =~ /^local\./
      end
      repos
    end

    def mirror_for(uri)
      if uri.is_a?(String)
        require_relative "vendored_uri"
        uri = Bundler::URI(uri)
      end

      gem_mirrors.for(uri.to_s).uri
    end

    def credentials_for(uri)
      self[uri.to_s] || self[uri.host]
    end

    def gem_mirrors
      all.inject(Mirrors.new) do |mirrors, k|
        mirrors.parse(k, self[k]) if k.start_with?("mirror.")
        mirrors
      end
    end

    def locations(key)
      key = key_for(key)
      configs.keys.inject({}) do |partial_locations, level|
        value_on_level = configs[level][key]
        partial_locations[level] = value_on_level unless value_on_level.nil?
        partial_locations
      end
    end

    def pretty_values_for(exposed_key)
      key = key_for(exposed_key)

      locations = []

      if value = @temporary[key]
        locations << "Set for the current command: #{printable_value(value, exposed_key).inspect}"
      end

      if value = @local_config[key]
        locations << "Set for your local app (#{local_config_file}): #{printable_value(value, exposed_key).inspect}"
      end

      if value = @env_config[key]
        locations << "Set via #{key}: #{printable_value(value, exposed_key).inspect}"
      end

      if value = @global_config[key]
        locations << "Set for the current user (#{global_config_file}): #{printable_value(value, exposed_key).inspect}"
      end

      return ["You have not configured a value for `#{exposed_key}`"] if locations.empty?
      locations
    end

    def processor_count
      require "etc"
      Etc.nprocessors
    rescue StandardError
      1
    end

    # for legacy reasons, in Bundler 2, we do not respect :disable_shared_gems
    def path
      configs.each do |_level, settings|
        path = value_for("path", settings)
        path = "vendor/bundle" if value_for("deployment", settings) && path.nil?
        path_system = value_for("path.system", settings)
        disabled_shared_gems = value_for("disable_shared_gems", settings)
        next if path.nil? && path_system.nil? && disabled_shared_gems.nil?
        system_path = path_system || (disabled_shared_gems == false)
        return Path.new(path, system_path)
      end

      Path.new(nil, false)
    end

    Path = Struct.new(:explicit_path, :system_path) do
      def path
        path = base_path
        path = File.join(path, Bundler.ruby_scope) unless use_system_gems?
        path
      end

      def use_system_gems?
        return true if system_path
        return false if explicit_path
        !Bundler.feature_flag.default_install_uses_path?
      end

      def base_path
        path = explicit_path
        path ||= ".bundle" unless use_system_gems?
        path ||= Bundler.rubygems.gem_dir
        path
      end

      def base_path_relative_to_pwd
        base_path = Pathname.new(self.base_path)
        expanded_base_path = base_path.expand_path(Bundler.root)
        relative_path = expanded_base_path.relative_path_from(Pathname.pwd)
        if relative_path.to_s.start_with?("..")
          relative_path = base_path if base_path.absolute?
        else
          relative_path = Pathname.new(File.join(".", relative_path))
        end
        relative_path
      rescue ArgumentError
        expanded_base_path
      end

      def validate!
        return unless explicit_path && system_path
        path = Bundler.settings.pretty_values_for(:path)
        path.unshift(nil, "path:") unless path.empty?
        system_path = Bundler.settings.pretty_values_for("path.system")
        system_path.unshift(nil, "path.system:") unless system_path.empty?
        disable_shared_gems = Bundler.settings.pretty_values_for(:disable_shared_gems)
        disable_shared_gems.unshift(nil, "disable_shared_gems:") unless disable_shared_gems.empty?
        raise InvalidOption,
          "Using a custom path while using system gems is unsupported.\n#{path.join("\n")}\n#{system_path.join("\n")}\n#{disable_shared_gems.join("\n")}"
      end
    end

    def allow_sudo?
      key = key_for(:path)
      path_configured = @temporary.key?(key) || @local_config.key?(key)
      !path_configured
    end

    def ignore_config?
      ENV["BUNDLE_IGNORE_CONFIG"]
    end

    def app_cache_path
      @app_cache_path ||= self[:cache_path] || "vendor/cache"
    end

    def validate!
      all.each do |raw_key|
        [@local_config, @env_config, @global_config].each do |settings|
          value = value_for(raw_key, settings)
          Validator.validate!(raw_key, value, settings.dup)
        end
      end
    end

    def key_for(key)
      self.class.key_for(key)
    end

    private

    def configs
      {
        :temporary => @temporary,
        :local => @local_config,
        :env => @env_config,
        :global => @global_config,
        :default => DEFAULT_CONFIG,
      }
    end

    def value_for(name, config)
      converted_value(config[key_for(name)], name)
    end

    def parent_setting_for(name)
      split_specific_setting_for(name)[0]
    end

    def specific_gem_for(name)
      split_specific_setting_for(name)[1]
    end

    def split_specific_setting_for(name)
      name.split(".")
    end

    def is_bool(name)
      BOOL_KEYS.include?(name.to_s) || BOOL_KEYS.include?(parent_setting_for(name.to_s))
    end

    def is_string(name)
      STRING_KEYS.include?(name.to_s) || name.to_s.start_with?("local.") || name.to_s.start_with?("mirror.") || name.to_s.start_with?("build.")
    end

    def to_bool(value)
      case value
      when nil, /\A(false|f|no|n|0|)\z/i, false
        false
      else
        true
      end
    end

    def is_num(key)
      NUMBER_KEYS.include?(key.to_s)
    end

    def is_array(key)
      ARRAY_KEYS.include?(key.to_s)
    end

    def is_credential(key)
      key == "gem.push_key"
    end

    def is_userinfo(value)
      value.include?(":")
    end

    def to_array(value)
      return [] unless value
      value.tr(" ", ":").split(":").map(&:to_sym)
    end

    def array_to_s(array)
      array = Array(array)
      return nil if array.empty?
      array.join(":").tr(" ", ":")
    end

    def set_key(raw_key, value, hash, file)
      raw_key = raw_key.to_s
      value = array_to_s(value) if is_array(raw_key)

      key = key_for(raw_key)

      return if hash[key] == value

      hash[key] = value
      hash.delete(key) if value.nil?

      Validator.validate!(raw_key, converted_value(value, raw_key), hash)

      return unless file
      SharedHelpers.filesystem_access(file) do |p|
        FileUtils.mkdir_p(p.dirname)
        require_relative "yaml_serializer"
        p.open("w") {|f| f.write(YAMLSerializer.dump(hash)) }
      end
    end

    def converted_value(value, key)
      if is_array(key)
        to_array(value)
      elsif value.nil?
        nil
      elsif is_bool(key) || value == "false"
        to_bool(value)
      elsif is_num(key)
        value.to_i
      else
        value.to_s
      end
    end

    def printable_value(value, key)
      converted = converted_value(value, key)
      return converted unless converted.is_a?(String)

      if is_string(key)
        converted
      elsif is_credential(key)
        "[REDACTED]"
      elsif is_userinfo(converted)
        username, pass = converted.split(":", 2)

        if pass == "x-oauth-basic"
          username = "[REDACTED]"
        else
          pass = "[REDACTED]"
        end

        [username, pass].join(":")
      else
        converted
      end
    end

    def global_config_file
      if ENV["BUNDLE_CONFIG"] && !ENV["BUNDLE_CONFIG"].empty?
        Pathname.new(ENV["BUNDLE_CONFIG"])
      elsif ENV["BUNDLE_USER_CONFIG"] && !ENV["BUNDLE_USER_CONFIG"].empty?
        Pathname.new(ENV["BUNDLE_USER_CONFIG"])
      elsif ENV["BUNDLE_USER_HOME"] && !ENV["BUNDLE_USER_HOME"].empty?
        Pathname.new(ENV["BUNDLE_USER_HOME"]).join("config")
      elsif Bundler.rubygems.user_home && !Bundler.rubygems.user_home.empty?
        Pathname.new(Bundler.rubygems.user_home).join(".bundle/config")
      end
    end

    def local_config_file
      Pathname.new(@root).join("config") if @root
    end

    def load_config(config_file)
      return {} if !config_file || ignore_config?
      SharedHelpers.filesystem_access(config_file, :read) do |file|
        valid_file = file.exist? && !file.size.zero?
        return {} unless valid_file
        require_relative "yaml_serializer"
        YAMLSerializer.load(file.read).inject({}) do |config, (k, v)|
          new_k = k

          if k.include?("-")
            Bundler.ui.warn "Your #{file} config includes `#{k}`, which contains the dash character (`-`).\n" \
              "This is deprecated, because configuration through `ENV` should be possible, but `ENV` keys cannot include dashes.\n" \
              "Please edit #{file} and replace any dashes in configuration keys with a triple underscore (`___`)."

            new_k = k.gsub("-", "___")
          end

          config[new_k] = v
          config
        end
      end
    end

    PER_URI_OPTIONS = %w[
      fallback_timeout
    ].freeze

    NORMALIZE_URI_OPTIONS_PATTERN =
      /
        \A
        (\w+\.)? # optional prefix key
        (https?.*?) # URI
        (\.#{Regexp.union(PER_URI_OPTIONS)})? # optional suffix key
        \z
      /ix.freeze

    def self.key_for(key)
      key = normalize_uri(key).to_s if key.is_a?(String) && key.start_with?("http", "mirror.http")
      key = key.to_s.gsub(".", "__").gsub("-", "___").upcase
      "BUNDLE_#{key}"
    end

    # TODO: duplicates Rubygems#normalize_uri
    # TODO: is this the correct place to validate mirror URIs?
    def self.normalize_uri(uri)
      uri = uri.to_s
      if uri =~ NORMALIZE_URI_OPTIONS_PATTERN
        prefix = $1
        uri = $2
        suffix = $3
      end
      uri = "#{uri}/" unless uri.end_with?("/")
      require_relative "vendored_uri"
      uri = Bundler::URI(uri)
      unless uri.absolute?
        raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
      end
      "#{prefix}#{uri}#{suffix}"
    end
  end
end
PK)"#[��K66.gems/bundler-2.3.27/lib/bundler/ui/rg_proxy.rbnu�[���# frozen_string_literal: true

require_relative "../ui"
require "rubygems/user_interaction"

module Bundler
  module UI
    class RGProxy < ::Gem::SilentUI
      def initialize(ui)
        @ui = ui
        super()
      end

      def say(message)
        @ui && @ui.debug(message)
      end
    end
  end
end
PK)"#[�N�s
s
+gems/bundler-2.3.27/lib/bundler/ui/shell.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_thor"

module Bundler
  module UI
    class Shell
      LEVELS = %w[silent error warn confirm info debug].freeze

      attr_writer :shell

      def initialize(options = {})
        Thor::Base.shell = options["no-color"] ? Thor::Shell::Basic : nil
        @shell = Thor::Base.shell.new
        @level = ENV["DEBUG"] ? "debug" : "info"
        @warning_history = []
      end

      def add_color(string, *color)
        @shell.set_color(string, *color)
      end

      def info(msg, newline = nil)
        tell_me(msg, nil, newline) if level("info")
      end

      def confirm(msg, newline = nil)
        tell_me(msg, :green, newline) if level("confirm")
      end

      def warn(msg, newline = nil, color = :yellow)
        return unless level("warn")
        return if @warning_history.include? msg
        @warning_history << msg

        tell_err(msg, color, newline)
      end

      def error(msg, newline = nil, color = :red)
        return unless level("error")
        tell_err(msg, color, newline)
      end

      def debug(msg, newline = nil)
        tell_me(msg, nil, newline) if debug?
      end

      def debug?
        level("debug")
      end

      def quiet?
        level("quiet")
      end

      def ask(msg)
        @shell.ask(msg)
      end

      def yes?(msg)
        @shell.yes?(msg)
      end

      def no?
        @shell.no?(msg)
      end

      def level=(level)
        raise ArgumentError unless LEVELS.include?(level.to_s)
        @level = level.to_s
      end

      def level(name = nil)
        return @level unless name
        unless index = LEVELS.index(name)
          raise "#{name.inspect} is not a valid level"
        end
        index <= LEVELS.index(@level)
      end

      def trace(e, newline = nil, force = false)
        return unless debug? || force
        msg = "#{e.class}: #{e.message}\n#{e.backtrace.join("\n  ")}"
        tell_err(msg, nil, newline)
      end

      def silence(&blk)
        with_level("silent", &blk)
      end

      def unprinted_warnings
        []
      end

      private

      # valimism
      def tell_me(msg, color = nil, newline = nil)
        msg = word_wrap(msg) if newline.is_a?(Hash) && newline[:wrap]
        if newline.nil?
          @shell.say(msg, color)
        else
          @shell.say(msg, color, newline)
        end
      end

      def tell_err(message, color = nil, newline = nil)
        return if @shell.send(:stderr).closed?

        newline ||= message.to_s !~ /( |\t)\Z/
        message = word_wrap(message) if newline.is_a?(Hash) && newline[:wrap]

        color = nil if color && !$stderr.tty?

        buffer = @shell.send(:prepare_message, message, *color)
        buffer << "\n" if newline && !message.to_s.end_with?("\n")

        @shell.send(:stderr).print(buffer)
        @shell.send(:stderr).flush
      end

      def strip_leading_spaces(text)
        spaces = text[/\A\s+/, 0]
        spaces ? text.gsub(/#{spaces}/, "") : text
      end

      def word_wrap(text, line_width = @shell.terminal_width)
        strip_leading_spaces(text).split("\n").collect do |line|
          line.length > line_width ? line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip : line
        end * "\n"
      end

      def with_level(level)
        original = @level
        @level = level
        yield
      ensure
        @level = original
      end
    end
  end
end
PK)"#[��[

,gems/bundler-2.3.27/lib/bundler/ui/silent.rbnu�[���# frozen_string_literal: true

module Bundler
  module UI
    class Silent
      attr_writer :shell

      def initialize
        @warnings = []
      end

      def add_color(string, color)
        string
      end

      def info(message, newline = nil)
      end

      def confirm(message, newline = nil)
      end

      def warn(message, newline = nil)
        @warnings |= [message]
      end

      def error(message, newline = nil)
      end

      def debug(message, newline = nil)
      end

      def debug?
        false
      end

      def quiet?
        false
      end

      def ask(message)
      end

      def yes?(msg)
        raise "Cannot ask yes? with a silent shell"
      end

      def no?
        raise "Cannot ask no? with a silent shell"
      end

      def level=(name)
      end

      def level(name = nil)
      end

      def trace(message, newline = nil, force = false)
      end

      def silence
        yield
      end

      def unprinted_warnings
        @warnings
      end
    end
  end
end
PK)"#[3��,��(gems/bundler-2.3.27/lib/bundler/graph.rbnu�[���# frozen_string_literal: true

require "set"
module Bundler
  class Graph
    GRAPH_NAME = :Gemfile

    def initialize(env, output_file, show_version = false, show_requirements = false, output_format = "png", without = [])
      @env               = env
      @output_file       = output_file
      @show_version      = show_version
      @show_requirements = show_requirements
      @output_format     = output_format
      @without_groups    = without.map(&:to_sym)

      @groups            = []
      @relations         = Hash.new {|h, k| h[k] = Set.new }
      @node_options      = {}
      @edge_options      = {}

      _populate_relations
    end

    attr_reader :groups, :relations, :node_options, :edge_options, :output_file, :output_format

    def viz
      GraphVizClient.new(self).run
    end

    private

    def _populate_relations
      parent_dependencies = _groups.values.to_set.flatten
      loop do
        break if parent_dependencies.empty?

        tmp = Set.new
        parent_dependencies.each do |dependency|
          child_dependencies = spec_for_dependency(dependency).runtime_dependencies.to_set
          @relations[dependency.name] += child_dependencies.map(&:name).to_set
          tmp += child_dependencies

          @node_options[dependency.name] = _make_label(dependency, :node)
          child_dependencies.each do |c_dependency|
            @edge_options["#{dependency.name}_#{c_dependency.name}"] = _make_label(c_dependency, :edge)
          end
        end
        parent_dependencies = tmp
      end
    end

    def _groups
      relations = Hash.new {|h, k| h[k] = Set.new }
      @env.current_dependencies.each do |dependency|
        dependency.groups.each do |group|
          next if @without_groups.include?(group)

          relations[group.to_s].add(dependency)
          @relations[group.to_s].add(dependency.name)

          @node_options[group.to_s] ||= _make_label(group, :node)
          @edge_options["#{group}_#{dependency.name}"] = _make_label(dependency, :edge)
        end
      end
      @groups = relations.keys
      relations
    end

    def _make_label(symbol_or_string_or_dependency, element_type)
      case element_type.to_sym
      when :node
        if symbol_or_string_or_dependency.is_a?(Gem::Dependency)
          label = symbol_or_string_or_dependency.name.dup
          label << "\n#{spec_for_dependency(symbol_or_string_or_dependency).version}" if @show_version
        else
          label = symbol_or_string_or_dependency.to_s
        end
      when :edge
        label = nil
        if symbol_or_string_or_dependency.respond_to?(:requirements_list) && @show_requirements
          tmp = symbol_or_string_or_dependency.requirements_list.join(", ")
          label = tmp if tmp != ">= 0"
        end
      else
        raise ArgumentError, "2nd argument is invalid"
      end
      label.nil? ? {} : { :label => label }
    end

    def spec_for_dependency(dependency)
      @env.requested_specs.find {|s| s.name == dependency.name }
    end

    class GraphVizClient
      def initialize(graph_instance)
        @graph_name    = graph_instance.class::GRAPH_NAME
        @groups        = graph_instance.groups
        @relations     = graph_instance.relations
        @node_options  = graph_instance.node_options
        @edge_options  = graph_instance.edge_options
        @output_file   = graph_instance.output_file
        @output_format = graph_instance.output_format
      end

      def g
        @g ||= ::GraphViz.digraph(@graph_name, :concentrate => true, :normalize => true, :nodesep => 0.55) do |g|
          g.edge[:weight]   = 2
          g.edge[:fontname] = g.node[:fontname] = "Arial, Helvetica, SansSerif"
          g.edge[:fontsize] = 12
        end
      end

      def run
        @groups.each do |group|
          g.add_nodes(
            group, {
              :style     => "filled",
              :fillcolor => "#B9B9D5",
              :shape     => "box3d",
              :fontsize  => 16,
            }.merge(@node_options[group])
          )
        end

        @relations.each do |parent, children|
          children.each do |child|
            if @groups.include?(parent)
              g.add_nodes(child, { :style => "filled", :fillcolor => "#B9B9D5" }.merge(@node_options[child]))
              g.add_edges(parent, child, { :constraint => false }.merge(@edge_options["#{parent}_#{child}"]))
            else
              g.add_nodes(child, @node_options[child])
              g.add_edges(parent, child, @edge_options["#{parent}_#{child}"])
            end
          end
        end

        if @output_format.to_s == "debug"
          $stdout.puts g.output :none => String
          Bundler.ui.info "debugging bundle viz..."
        else
          begin
            g.output @output_format.to_sym => "#{@output_file}.#{@output_format}"
            Bundler.ui.info "#{@output_file}.#{@output_format}"
          rescue ArgumentError => e
            warn "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
            raise e
          end
        end
      end
    end
  end
end
PK)"#[f)q
q
7gems/bundler-2.3.27/lib/bundler/compact_index_client.rbnu�[���# frozen_string_literal: true

require "pathname"
require "set"

module Bundler
  class CompactIndexClient
    DEBUG_MUTEX = Thread::Mutex.new
    def self.debug
      return unless ENV["DEBUG_COMPACT_INDEX"]
      DEBUG_MUTEX.synchronize { warn("[#{self}] #{yield}") }
    end

    class Error < StandardError; end

    require_relative "compact_index_client/cache"
    require_relative "compact_index_client/updater"

    attr_reader :directory

    def initialize(directory, fetcher)
      @directory = Pathname.new(directory)
      @updater = Updater.new(fetcher)
      @cache = Cache.new(@directory)
      @endpoints = Set.new
      @info_checksums_by_name = {}
      @parsed_checksums = false
      @mutex = Thread::Mutex.new
    end

    def execution_mode=(block)
      Bundler::CompactIndexClient.debug { "execution_mode=" }
      @endpoints = Set.new

      @execution_mode = block
    end

    # @return [Lambda] A lambda that takes an array of inputs and a block, and
    #         maps the inputs with the block in parallel.
    #
    def execution_mode
      @execution_mode || sequentially
    end

    def sequential_execution_mode!
      self.execution_mode = sequentially
    end

    def sequentially
      @sequentially ||= lambda do |inputs, &blk|
        inputs.map(&blk)
      end
    end

    def names
      Bundler::CompactIndexClient.debug { "/names" }
      update(@cache.names_path, "names")
      @cache.names
    end

    def versions
      Bundler::CompactIndexClient.debug { "/versions" }
      update(@cache.versions_path, "versions")
      versions, @info_checksums_by_name = @cache.versions
      versions
    end

    def dependencies(names)
      Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
      execution_mode.call(names) do |name|
        update_info(name)
        @cache.dependencies(name).map {|d| d.unshift(name) }
      end.flatten(1)
    end

    def update_and_parse_checksums!
      Bundler::CompactIndexClient.debug { "update_and_parse_checksums!" }
      return @info_checksums_by_name if @parsed_checksums
      update(@cache.versions_path, "versions")
      @info_checksums_by_name = @cache.checksums
      @parsed_checksums = true
    end

    private

    def update(local_path, remote_path)
      Bundler::CompactIndexClient.debug { "update(#{local_path}, #{remote_path})" }
      unless synchronize { @endpoints.add?(remote_path) }
        Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" }
        return
      end
      @updater.update(local_path, url(remote_path))
    end

    def update_info(name)
      Bundler::CompactIndexClient.debug { "update_info(#{name})" }
      path = @cache.info_path(name)
      checksum = @updater.checksum_for_file(path)
      unless existing = @info_checksums_by_name[name]
        Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since it is missing from versions" }
        return
      end
      if checksum == existing
        Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since the versions checksum matches the local checksum" }
        return
      end
      Bundler::CompactIndexClient.debug { "updating info for #{name} since the versions checksum #{existing} != the local checksum #{checksum}" }
      update(path, "info/#{name}")
    end

    def url(path)
      path
    end

    def synchronize
      @mutex.synchronize { yield }
    end
  end
end
PK)"#[�]�YY5gems/bundler-2.3.27/lib/bundler/fetcher/downloader.rbnu�[���# frozen_string_literal: true

module Bundler
  class Fetcher
    class Downloader
      attr_reader :connection
      attr_reader :redirect_limit

      def initialize(connection, redirect_limit)
        @connection = connection
        @redirect_limit = redirect_limit
      end

      def fetch(uri, headers = {}, counter = 0)
        raise HTTPError, "Too many redirects" if counter >= redirect_limit

        filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)

        response = request(uri, headers)
        Bundler.ui.debug("HTTP #{response.code} #{response.message} #{filtered_uri}")

        case response
        when Net::HTTPSuccess, Net::HTTPNotModified
          response
        when Net::HTTPRedirection
          new_uri = Bundler::URI.parse(response["location"])
          if new_uri.host == uri.host
            new_uri.user = uri.user
            new_uri.password = uri.password
          end
          fetch(new_uri, headers, counter + 1)
        when Net::HTTPRequestedRangeNotSatisfiable
          new_headers = headers.dup
          new_headers.delete("Range")
          new_headers["Accept-Encoding"] = "gzip"
          fetch(uri, new_headers)
        when Net::HTTPRequestEntityTooLarge
          raise FallbackError, response.body
        when Net::HTTPTooManyRequests
          raise TooManyRequestsError, response.body
        when Net::HTTPUnauthorized
          raise BadAuthenticationError, uri.host if uri.userinfo
          raise AuthenticationRequiredError, uri.host
        when Net::HTTPNotFound
          raise FallbackError, "Net::HTTPNotFound: #{filtered_uri}"
        else
          raise HTTPError, "#{response.class}#{": #{response.body}" unless response.body.empty?}"
        end
      end

      def request(uri, headers)
        validate_uri_scheme!(uri)

        filtered_uri = URICredentialsFilter.credential_filtered_uri(uri)

        Bundler.ui.debug "HTTP GET #{filtered_uri}"
        req = Net::HTTP::Get.new uri.request_uri, headers
        if uri.user
          user = CGI.unescape(uri.user)
          password = uri.password ? CGI.unescape(uri.password) : nil
          req.basic_auth(user, password)
        end
        connection.request(uri, req)
      rescue NoMethodError => e
        raise unless ["undefined method", "use_ssl="].all? {|snippet| e.message.include? snippet }
        raise LoadError.new("cannot load such file -- openssl")
      rescue OpenSSL::SSL::SSLError
        raise CertificateFailureError.new(uri)
      rescue *HTTP_ERRORS => e
        Bundler.ui.trace e
        if e.is_a?(SocketError) || e.message =~ /host down:/
          raise NetworkDownError, "Could not reach host #{uri.host}. Check your network " \
            "connection and try again."
        else
          raise HTTPError, "Network error while fetching #{filtered_uri}" \
            " (#{e})"
        end
      end

      private

      def validate_uri_scheme!(uri)
        return if uri.scheme =~ /\Ahttps?\z/
        raise InvalidOption,
          "The request uri `#{uri}` has an invalid scheme (`#{uri.scheme}`). " \
          "Did you mean `http` or `https`?"
      end
    end
  end
end
PK)"#[��
N��/gems/bundler-2.3.27/lib/bundler/fetcher/base.rbnu�[���# frozen_string_literal: true

module Bundler
  class Fetcher
    class Base
      attr_reader :downloader
      attr_reader :display_uri
      attr_reader :remote

      def initialize(downloader, remote, display_uri)
        raise "Abstract class" if self.class == Base
        @downloader = downloader
        @remote = remote
        @display_uri = display_uri
      end

      def remote_uri
        @remote.uri
      end

      def fetch_uri
        @fetch_uri ||= if remote_uri.host == "rubygems.org"
          uri = remote_uri.dup
          uri.host = "index.rubygems.org"
          uri
        else
          remote_uri
        end
      end

      def available?
        true
      end

      def api_fetcher?
        false
      end

      private

      def log_specs(debug_msg)
        if Bundler.ui.debug?
          Bundler.ui.debug debug_msg
        else
          Bundler.ui.info ".", false
        end
      end
    end
  end
end
PK)"#[�q8gems/bundler-2.3.27/lib/bundler/fetcher/compact_index.rbnu�[���# frozen_string_literal: true

require_relative "base"
require_relative "../worker"

module Bundler
  autoload :CompactIndexClient, File.expand_path("../compact_index_client", __dir__)

  class Fetcher
    class CompactIndex < Base
      def self.compact_index_request(method_name)
        method = instance_method(method_name)
        undef_method(method_name)
        define_method(method_name) do |*args, &blk|
          begin
            method.bind(self).call(*args, &blk)
          rescue NetworkDownError, CompactIndexClient::Updater::MisMatchedChecksumError => e
            raise HTTPError, e.message
          rescue AuthenticationRequiredError
            # Fail since we got a 401 from the server.
            raise
          rescue HTTPError => e
            Bundler.ui.trace(e)
            nil
          end
        end
      end

      def specs(gem_names)
        specs_for_names(gem_names)
      end
      compact_index_request :specs

      def specs_for_names(gem_names)
        gem_info = []
        complete_gems = []
        remaining_gems = gem_names.dup

        until remaining_gems.empty?
          log_specs "Looking up gems #{remaining_gems.inspect}"

          deps = begin
                   parallel_compact_index_client.dependencies(remaining_gems)
                 rescue TooManyRequestsError
                   @bundle_worker.stop if @bundle_worker
                   @bundle_worker = nil # reset it.  Not sure if necessary
                   serial_compact_index_client.dependencies(remaining_gems)
                 end
          next_gems = deps.map {|d| d[3].map(&:first).flatten(1) }.flatten(1).uniq
          deps.each {|dep| gem_info << dep }
          complete_gems.concat(deps.map(&:first)).uniq!
          remaining_gems = next_gems - complete_gems
        end
        @bundle_worker.stop if @bundle_worker
        @bundle_worker = nil # reset it.  Not sure if necessary

        gem_info
      end

      def available?
        unless SharedHelpers.md5_available?
          Bundler.ui.debug("FIPS mode is enabled, bundler can't use the CompactIndex API")
          return nil
        end
        if fetch_uri.scheme == "file"
          Bundler.ui.debug("Using a local server, bundler won't use the CompactIndex API")
          return false
        end
        # Read info file checksums out of /versions, so we can know if gems are up to date
        compact_index_client.update_and_parse_checksums!
      rescue CompactIndexClient::Updater::MisMatchedChecksumError => e
        Bundler.ui.debug(e.message)
        nil
      end
      compact_index_request :available?

      def api_fetcher?
        true
      end

      private

      def compact_index_client
        @compact_index_client ||=
          SharedHelpers.filesystem_access(cache_path) do
            CompactIndexClient.new(cache_path, client_fetcher)
          end
      end

      def parallel_compact_index_client
        compact_index_client.execution_mode = lambda do |inputs, &blk|
          func = lambda {|object, _index| blk.call(object) }
          worker = bundle_worker(func)
          inputs.each {|input| worker.enq(input) }
          inputs.map { worker.deq }
        end

        compact_index_client
      end

      def serial_compact_index_client
        compact_index_client.sequential_execution_mode!
        compact_index_client
      end

      def bundle_worker(func = nil)
        @bundle_worker ||= begin
          worker_name = "Compact Index (#{display_uri.host})"
          Bundler::Worker.new(Bundler.settings.processor_count, worker_name, func)
        end
        @bundle_worker.tap do |worker|
          worker.instance_variable_set(:@func, func) if func
        end
      end

      def cache_path
        Bundler.user_cache.join("compact_index", remote.cache_slug)
      end

      def client_fetcher
        ClientFetcher.new(self, Bundler.ui)
      end

      ClientFetcher = Struct.new(:fetcher, :ui) do
        def call(path, headers)
          fetcher.downloader.fetch(fetcher.fetch_uri + path, headers)
        rescue NetworkDownError => e
          raise unless Bundler.feature_flag.allow_offline_install? && headers["If-None-Match"]
          ui.warn "Using the cached data for the new index because of a network error: #{e}"
          Net::HTTPNotModified.new(nil, nil, nil)
        end
      end
    end
  end
end
PK)"#[��is990gems/bundler-2.3.27/lib/bundler/fetcher/index.rbnu�[���# frozen_string_literal: true

require_relative "base"

module Bundler
  class Fetcher
    class Index < Base
      def specs(_gem_names)
        Bundler.rubygems.fetch_all_remote_specs(remote)
      rescue Gem::RemoteFetcher::FetchError => e
        case e.message
        when /certificate verify failed/
          raise CertificateFailureError.new(display_uri)
        when /401/
          raise BadAuthenticationError, remote_uri if remote_uri.userinfo
          raise AuthenticationRequiredError, remote_uri
        when /403/
          raise BadAuthenticationError, remote_uri if remote_uri.userinfo
          raise AuthenticationRequiredError, remote_uri
        else
          raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
        end
      end
    end
  end
end
PK)"#[L�;8�
�
5gems/bundler-2.3.27/lib/bundler/fetcher/dependency.rbnu�[���# frozen_string_literal: true

require_relative "base"
require "cgi"

module Bundler
  class Fetcher
    class Dependency < Base
      def available?
        @available ||= fetch_uri.scheme != "file" && downloader.fetch(dependency_api_uri)
      rescue NetworkDownError => e
        raise HTTPError, e.message
      rescue AuthenticationRequiredError
        # Fail since we got a 401 from the server.
        raise
      rescue HTTPError
        false
      end

      def api_fetcher?
        true
      end

      def specs(gem_names, full_dependency_list = [], last_spec_list = [])
        query_list = gem_names.uniq - full_dependency_list

        log_specs "Query List: #{query_list.inspect}"

        return last_spec_list if query_list.empty?

        spec_list, deps_list = Bundler::Retry.new("dependency api", FAIL_ERRORS).attempts do
          dependency_specs(query_list)
        end

        returned_gems = spec_list.map(&:first).uniq
        specs(deps_list, full_dependency_list + returned_gems, spec_list + last_spec_list)
      rescue MarshalError
        Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
        Bundler.ui.debug "could not fetch from the dependency API, trying the full index"
        nil
      rescue HTTPError, GemspecError
        Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
        Bundler.ui.debug "could not fetch from the dependency API\nit's suggested to retry using the full index via `bundle install --full-index`"
        nil
      end

      def dependency_specs(gem_names)
        Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(",")}"

        gem_list = unmarshalled_dep_gems(gem_names)
        get_formatted_specs_and_deps(gem_list)
      end

      def unmarshalled_dep_gems(gem_names)
        gem_list = []
        gem_names.each_slice(Source::Rubygems::API_REQUEST_SIZE) do |names|
          marshalled_deps = downloader.fetch(dependency_api_uri(names)).body
          gem_list.concat(Bundler.load_marshal(marshalled_deps))
        end
        gem_list
      end

      def get_formatted_specs_and_deps(gem_list)
        deps_list = []
        spec_list = []

        gem_list.each do |s|
          deps_list.concat(s[:dependencies].map(&:first))
          deps = s[:dependencies].map {|n, d| [n, d.split(", ")] }
          spec_list.push([s[:name], s[:number], s[:platform], deps])
        end
        [spec_list, deps_list]
      end

      def dependency_api_uri(gem_names = [])
        uri = fetch_uri + "api/v1/dependencies"
        uri.query = "gems=#{CGI.escape(gem_names.sort.join(","))}" if gem_names.any?
        uri
      end
    end
  end
end
PK)"#[
�>��5gems/bundler-2.3.27/lib/bundler/lockfile_generator.rbnu�[���# frozen_string_literal: true

module Bundler
  class LockfileGenerator
    attr_reader :definition
    attr_reader :out

    # @private
    def initialize(definition)
      @definition = definition
      @out = String.new
    end

    def self.generate(definition)
      new(definition).generate!
    end

    def generate!
      add_sources
      add_platforms
      add_dependencies
      add_locked_ruby_version
      add_bundled_with

      out
    end

    private

    def add_sources
      definition.send(:sources).lock_sources.each_with_index do |source, idx|
        out << "\n" unless idx.zero?

        # Add the source header
        out << source.to_lock

        # Find all specs for this source
        specs = definition.resolve.select {|s| source.can_lock?(s) }
        add_specs(specs)
      end
    end

    def add_specs(specs)
      # This needs to be sorted by full name so that
      # gems with the same name, but different platform
      # are ordered consistently
      specs.sort_by(&:full_name).each do |spec|
        next if spec.name == "bundler".freeze
        out << spec.to_lock
      end
    end

    def add_platforms
      add_section("PLATFORMS", definition.platforms)
    end

    def add_dependencies
      out << "\nDEPENDENCIES\n"

      handled = []
      definition.dependencies.sort_by(&:to_s).each do |dep|
        next if handled.include?(dep.name)
        out << dep.to_lock << "\n"
        handled << dep.name
      end
    end

    def add_locked_ruby_version
      return unless locked_ruby_version = definition.locked_ruby_version
      add_section("RUBY VERSION", locked_ruby_version.to_s)
    end

    def add_bundled_with
      add_section("BUNDLED WITH", Bundler::VERSION)
    end

    def add_section(name, value)
      out << "\n#{name}\n"
      case value
      when Array
        value.map(&:to_s).sort.each do |val|
          out << "  #{val}\n"
        end
      when Hash
        value.to_a.sort_by {|k, _| k.to_s }.each do |key, val|
          out << "  #{key}: #{val}\n"
        end
      when String
        out << "   #{value}\n"
      else
        raise ArgumentError, "#{value.inspect} can't be serialized in a lockfile"
      end
    end
  end
end
PK)"#[�H��)gems/bundler-2.3.27/lib/bundler/digest.rbnu�[���# frozen_string_literal: true

# This code was extracted from https://github.com/Solistra/ruby-digest which is under public domain
module Bundler
  module Digest
    # The initial constant values for the 32-bit constant words A, B, C, D, and
    # E, respectively.
    SHA1_WORDS = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0].freeze

    # The 8-bit field used for bitwise `AND` masking. Defaults to `0xFFFFFFFF`.
    SHA1_MASK = 0xFFFFFFFF

    class << self
      def sha1(string)
        unless string.is_a?(String)
          raise TypeError, "can't convert #{string.class.inspect} into String"
        end

        buffer = string.b

        words = SHA1_WORDS.dup
        generate_split_buffer(buffer) do |chunk|
          w = []
          chunk.each_slice(4) do |a, b, c, d|
            w << (((a << 8 | b) << 8 | c) << 8 | d)
          end
          a, b, c, d, e = *words
          (16..79).each do |i|
            w[i] = SHA1_MASK & rotate((w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]), 1)
          end
          0.upto(79) do |i|
            case i
            when  0..19
              f = ((b & c) | (~b & d))
              k = 0x5A827999
            when 20..39
              f = (b ^ c ^ d)
              k = 0x6ED9EBA1
            when 40..59
              f = ((b & c) | (b & d) | (c & d))
              k = 0x8F1BBCDC
            when 60..79
              f = (b ^ c ^ d)
              k = 0xCA62C1D6
            end
            t = SHA1_MASK & (SHA1_MASK & rotate(a, 5) + f + e + k + w[i])
            a, b, c, d, e = t, a, SHA1_MASK & rotate(b, 30), c, d # rubocop:disable Style/ParallelAssignment
          end
          mutated = [a, b, c, d, e]
          words.map!.with_index {|word, index| SHA1_MASK & (word + mutated[index]) }
        end

        words.pack("N*").unpack("H*").first
      end

      private

      def generate_split_buffer(string, &block)
        size   = string.bytesize * 8
        buffer = string.bytes << 128
        buffer << 0 while buffer.size % 64 != 56
        buffer.concat([size].pack("Q>").bytes)
        buffer.each_slice(64, &block)
      end

      def rotate(value, spaces)
        value << spaces | value >> (32 - spaces)
      end
    end
  end
end
PK)"#[�CW(W(+gems/bundler-2.3.27/lib/bundler/injector.rbnu�[���# frozen_string_literal: true

module Bundler
  class Injector
    INJECTED_GEMS = "injected gems".freeze

    def self.inject(new_deps, options = {})
      injector = new(new_deps, options)
      injector.inject(Bundler.default_gemfile, Bundler.default_lockfile)
    end

    def self.remove(gems, options = {})
      injector = new(gems, options)
      injector.remove(Bundler.default_gemfile, Bundler.default_lockfile)
    end

    def initialize(deps, options = {})
      @deps = deps
      @options = options
    end

    # @param [Pathname] gemfile_path The Gemfile in which to inject the new dependency.
    # @param [Pathname] lockfile_path The lockfile in which to inject the new dependency.
    # @return [Array]
    def inject(gemfile_path, lockfile_path)
      if Bundler.frozen_bundle?
        # ensure the lock and Gemfile are synced
        Bundler.definition.ensure_equivalent_gemfile_and_lockfile(true)
      end

      # temporarily unfreeze
      Bundler.settings.temporary(:deployment => false, :frozen => false) do
        # evaluate the Gemfile we have now
        builder = Dsl.new
        builder.eval_gemfile(gemfile_path)

        # don't inject any gems that are already in the Gemfile
        @deps -= builder.dependencies

        # add new deps to the end of the in-memory Gemfile
        # Set conservative versioning to false because
        # we want to let the resolver resolve the version first
        builder.eval_gemfile(INJECTED_GEMS, build_gem_lines(false)) if @deps.any?

        # resolve to see if the new deps broke anything
        @definition = builder.to_definition(lockfile_path, {})
        @definition.resolve_remotely!

        # since nothing broke, we can add those gems to the gemfile
        append_to(gemfile_path, build_gem_lines(@options[:conservative_versioning])) if @deps.any?

        # since we resolved successfully, write out the lockfile
        @definition.lock(Bundler.default_lockfile)

        # invalidate the cached Bundler.definition
        Bundler.reset_paths!

        # return an array of the deps that we added
        @deps
      end
    end

    # @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
    # @param [Pathname] lockfile_path The lockfile from which to remove dependencies.
    # @return [Array]
    def remove(gemfile_path, lockfile_path)
      # remove gems from each gemfiles we have
      Bundler.definition.gemfiles.each do |path|
        deps = remove_deps(path)

        show_warning("No gems were removed from the gemfile.") if deps.empty?

        deps.each {|dep| Bundler.ui.confirm "#{SharedHelpers.pretty_dependency(dep)} was removed." }
      end

      # Invalidate the cached Bundler.definition.
      # This prevents e.g. `bundle remove ...` from using outdated information.
      Bundler.reset_paths!
    end

    private

    def conservative_version(spec)
      version = spec.version
      return ">= 0" if version.nil?
      segments = version.segments
      seg_end_index = version >= Gem::Version.new("1.0") ? 1 : 2

      prerelease_suffix = version.to_s.gsub(version.release.to_s, "") if version.prerelease?
      "#{version_prefix}#{segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
    end

    def version_prefix
      if @options[:strict]
        "= "
      elsif @options[:optimistic]
        ">= "
      else
        "~> "
      end
    end

    def build_gem_lines(conservative_versioning)
      @deps.map do |d|
        name = d.name.dump

        requirement = if conservative_versioning
          ", \"#{conservative_version(@definition.specs[d.name][0])}\""
        else
          ", #{d.requirement.as_list.map(&:dump).join(", ")}"
        end

        if d.groups != Array(:default)
          group = d.groups.size == 1 ? ", :group => #{d.groups.first.inspect}" : ", :groups => #{d.groups.inspect}"
        end

        source = ", :source => \"#{d.source}\"" unless d.source.nil?
        path = ", :path => \"#{d.path}\"" unless d.path.nil?
        git = ", :git => \"#{d.git}\"" unless d.git.nil?
        github = ", :github => \"#{d.github}\"" unless d.github.nil?
        branch = ", :branch => \"#{d.branch}\"" unless d.branch.nil?
        ref = ", :ref => \"#{d.ref}\"" unless d.ref.nil?
        require_path = ", :require => #{convert_autorequire(d.autorequire)}" unless d.autorequire.nil?

        %(gem #{name}#{requirement}#{group}#{source}#{path}#{git}#{github}#{branch}#{ref}#{require_path})
      end.join("\n")
    end

    def append_to(gemfile_path, new_gem_lines)
      gemfile_path.open("a") do |f|
        f.puts
        f.puts new_gem_lines
      end
    end

    # evaluates a gemfile to remove the specified gem
    # from it.
    def remove_deps(gemfile_path)
      initial_gemfile = File.readlines(gemfile_path)

      Bundler.ui.info "Removing gems from #{gemfile_path}"

      # evaluate the Gemfile we have
      builder = Dsl.new
      builder.eval_gemfile(gemfile_path)

      removed_deps = remove_gems_from_dependencies(builder, @deps, gemfile_path)

      # abort the operation if no gems were removed
      # no need to operate on gemfile further
      return [] if removed_deps.empty?

      cleaned_gemfile = remove_gems_from_gemfile(@deps, gemfile_path)

      SharedHelpers.write_to_gemfile(gemfile_path, cleaned_gemfile)

      # check for errors
      # including extra gems being removed
      # or some gems not being removed
      # and return the actual removed deps
      cross_check_for_errors(gemfile_path, builder.dependencies, removed_deps, initial_gemfile)
    end

    # @param [Dsl]      builder Dsl object of current Gemfile.
    # @param [Array]    gems Array of names of gems to be removed.
    # @param [Pathname] gemfile_path Path of the Gemfile.
    # @return [Array]   Array of removed dependencies.
    def remove_gems_from_dependencies(builder, gems, gemfile_path)
      removed_deps = []

      gems.each do |gem_name|
        deleted_dep = builder.dependencies.find {|d| d.name == gem_name }

        if deleted_dep.nil?
          raise GemfileError, "`#{gem_name}` is not specified in #{gemfile_path} so it could not be removed."
        end

        builder.dependencies.delete(deleted_dep)

        removed_deps << deleted_dep
      end

      removed_deps
    end

    # @param [Array] gems            Array of names of gems to be removed.
    # @param [Pathname] gemfile_path The Gemfile from which to remove dependencies.
    def remove_gems_from_gemfile(gems, gemfile_path)
      patterns = /gem\s+(['"])#{Regexp.union(gems)}\1|gem\s*\((['"])#{Regexp.union(gems)}\2\)/
      new_gemfile = []
      multiline_removal = false
      File.readlines(gemfile_path).each do |line|
        match_data = line.match(patterns)
        if match_data && is_not_within_comment?(line, match_data)
          multiline_removal = line.rstrip.end_with?(",")
          # skip lines which match the regex
          next
        end

        # skip followup lines until line does not end with ','
        new_gemfile << line unless multiline_removal
        multiline_removal = line.rstrip.end_with?(",") if multiline_removal
      end

      # remove line \n and append them with other strings
      new_gemfile.each_with_index do |_line, index|
        if new_gemfile[index + 1] == "\n"
          new_gemfile[index] += new_gemfile[index + 1]
          new_gemfile.delete_at(index + 1)
        end
      end

      %w[group source env install_if].each {|block| remove_nested_blocks(new_gemfile, block) }

      new_gemfile.join.chomp
    end

    # @param [String] line          Individual line of gemfile content.
    # @param [MatchData] match_data Data about Regex match.
    def is_not_within_comment?(line, match_data)
      match_start_index = match_data.offset(0).first
      !line[0..match_start_index].include?("#")
    end

    # @param [Array] gemfile       Array of gemfile contents.
    # @param [String] block_name   Name of block name to look for.
    def remove_nested_blocks(gemfile, block_name)
      nested_blocks = 0

      # count number of nested blocks
      gemfile.each_with_index {|line, index| nested_blocks += 1 if !gemfile[index + 1].nil? && gemfile[index + 1].include?(block_name) && line.include?(block_name) }

      while nested_blocks >= 0
        nested_blocks -= 1

        gemfile.each_with_index do |line, index|
          next unless !line.nil? && line.strip.start_with?(block_name)
          if gemfile[index + 1] =~ /^\s*end\s*$/
            gemfile[index] = nil
            gemfile[index + 1] = nil
          end
        end

        gemfile.compact!
      end
    end

    # @param [Pathname] gemfile_path   The Gemfile from which to remove dependencies.
    # @param [Array] original_deps     Array of original dependencies.
    # @param [Array] removed_deps      Array of removed dependencies.
    # @param [Array] initial_gemfile   Contents of original Gemfile before any operation.
    def cross_check_for_errors(gemfile_path, original_deps, removed_deps, initial_gemfile)
      # evaluate the new gemfile to look for any failure cases
      builder = Dsl.new
      builder.eval_gemfile(gemfile_path)

      # record gems which were removed but not requested
      extra_removed_gems = original_deps - builder.dependencies

      # if some extra gems were removed then raise error
      # and revert Gemfile to original
      unless extra_removed_gems.empty?
        SharedHelpers.write_to_gemfile(gemfile_path, initial_gemfile.join)

        raise InvalidOption, "Gems could not be removed. #{extra_removed_gems.join(", ")} would also have been removed. Bundler cannot continue."
      end

      # record gems which could not be removed due to some reasons
      errored_deps = builder.dependencies.select {|d| d.gemfile == gemfile_path } & removed_deps.select {|d| d.gemfile == gemfile_path }

      show_warning "#{errored_deps.map(&:name).join(", ")} could not be removed." unless errored_deps.empty?

      # return actual removed dependencies
      removed_deps - errored_deps
    end

    def show_warning(message)
      Bundler.ui.info Bundler.ui.add_color(message, :yellow)
    end

    def convert_autorequire(autorequire)
      autorequire = autorequire.first
      return autorequire if autorequire == "false"
      autorequire.inspect
    end
  end
end
PK)"#[���-gems/bundler-2.3.27/lib/bundler/source_map.rbnu�[���# frozen_string_literal: true

module Bundler
  class SourceMap
    attr_reader :sources, :dependencies, :locked_specs

    def initialize(sources, dependencies, locked_specs)
      @sources = sources
      @dependencies = dependencies
      @locked_specs = locked_specs
    end

    def pinned_spec_names(skip = nil)
      direct_requirements.reject {|_, source| source == skip }.keys
    end

    def all_requirements
      requirements = direct_requirements.dup

      unmet_deps = sources.non_default_explicit_sources.map do |source|
        (source.spec_names - pinned_spec_names).each do |indirect_dependency_name|
          previous_source = requirements[indirect_dependency_name]
          if previous_source.nil?
            requirements[indirect_dependency_name] = source
          else
            no_ambiguous_sources = Bundler.feature_flag.bundler_3_mode?

            msg = ["The gem '#{indirect_dependency_name}' was found in multiple relevant sources."]
            msg.concat [previous_source, source].map {|s| "  * #{s}" }.sort
            msg << "You #{no_ambiguous_sources ? :must : :should} add this gem to the source block for the source you wish it to be installed from."
            msg = msg.join("\n")

            raise SecurityError, msg if no_ambiguous_sources
            Bundler.ui.warn "Warning: #{msg}"
          end
        end

        source.unmet_deps
      end

      sources.default_source.add_dependency_names(unmet_deps.flatten - requirements.keys)

      requirements
    end

    def direct_requirements
      @direct_requirements ||= begin
        requirements = {}
        default = sources.default_source
        dependencies.each do |dep|
          dep_source = dep.source || default
          dep_source.add_dependency_names(dep.name)
          requirements[dep.name] = dep_source
        end
        requirements
      end
    end

    def locked_requirements
      @locked_requirements ||= begin
        requirements = {}
        locked_specs.each do |locked_spec|
          source = locked_spec.source
          source.add_dependency_names(locked_spec.name)
          requirements[locked_spec.name] = source
        end
        requirements
      end
    end
  end
end
PK)"#[�x)��-gems/bundler-2.3.27/lib/bundler/gem_helper.rbnu�[���# frozen_string_literal: true

require_relative "../bundler"
require "shellwords"

module Bundler
  class GemHelper
    include Rake::DSL if defined? Rake::DSL

    class << self
      # set when install'd.
      attr_accessor :instance

      def install_tasks(opts = {})
        new(opts[:dir], opts[:name]).install
      end

      def tag_prefix=(prefix)
        instance.tag_prefix = prefix
      end

      def gemspec(&block)
        gemspec = instance.gemspec
        block.call(gemspec) if block
        gemspec
      end
    end

    attr_reader :spec_path, :base, :gemspec

    attr_writer :tag_prefix

    def initialize(base = nil, name = nil)
      @base = File.expand_path(base || SharedHelpers.pwd)
      gemspecs = name ? [File.join(@base, "#{name}.gemspec")] : Gem::Util.glob_files_in_dir("{,*}.gemspec", @base)
      raise "Unable to determine name from existing gemspec. Use :name => 'gemname' in #install_tasks to manually set it." unless gemspecs.size == 1
      @spec_path = gemspecs.first
      @gemspec = Bundler.load_gemspec(@spec_path)
      @tag_prefix = ""
    end

    def install
      built_gem_path = nil

      desc "Build #{name}-#{version}.gem into the pkg directory."
      task "build" do
        built_gem_path = build_gem
      end

      desc "Generate SHA512 checksum if #{name}-#{version}.gem into the checksums directory."
      task "build:checksum" => "build" do
        build_checksum(built_gem_path)
      end

      desc "Build and install #{name}-#{version}.gem into system gems."
      task "install" => "build" do
        install_gem(built_gem_path)
      end

      desc "Build and install #{name}-#{version}.gem into system gems without network access."
      task "install:local" => "build" do
        install_gem(built_gem_path, :local)
      end

      desc "Create tag #{version_tag} and build and push #{name}-#{version}.gem to #{gem_push_host}\n" \
           "To prevent publishing in RubyGems use `gem_push=no rake release`"
      task "release", [:remote] => ["build", "release:guard_clean",
                                    "release:source_control_push", "release:rubygem_push"] do
      end

      task "release:guard_clean" do
        guard_clean
      end

      task "release:source_control_push", [:remote] do |_, args|
        tag_version { git_push(args[:remote]) } unless already_tagged?
      end

      task "release:rubygem_push" => "build" do
        rubygem_push(built_gem_path) if gem_push?
      end

      GemHelper.instance = self
    end

    def build_gem
      file_name = nil
      sh([*gem_command, "build", "-V", spec_path]) do
        file_name = File.basename(built_gem_path)
        SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
        FileUtils.mv(built_gem_path, "pkg")
        Bundler.ui.confirm "#{name} #{version} built to pkg/#{file_name}."
      end
      File.join(base, "pkg", file_name)
    end

    def install_gem(built_gem_path = nil, local = false)
      built_gem_path ||= build_gem
      cmd = [*gem_command, "install", built_gem_path.to_s]
      cmd << "--local" if local
      sh(cmd)
      Bundler.ui.confirm "#{name} (#{version}) installed."
    end

    def build_checksum(built_gem_path = nil)
      built_gem_path ||= build_gem
      SharedHelpers.filesystem_access(File.join(base, "checksums")) {|p| FileUtils.mkdir_p(p) }
      file_name = "#{File.basename(built_gem_path)}.sha512"
      require "digest/sha2"
      checksum = ::Digest::SHA512.file(built_gem_path).hexdigest
      target = File.join(base, "checksums", file_name)
      File.write(target, checksum + "\n")
      Bundler.ui.confirm "#{name} #{version} checksum written to checksums/#{file_name}."
    end

    protected

    def rubygem_push(path)
      cmd = [*gem_command, "push", path]
      cmd << "--key" << gem_key if gem_key
      cmd << "--host" << allowed_push_host if allowed_push_host
      sh_with_input(cmd)
      Bundler.ui.confirm "Pushed #{name} #{version} to #{gem_push_host}"
    end

    def built_gem_path
      Gem::Util.glob_files_in_dir("#{name}-*.gem", base).sort_by {|f| File.mtime(f) }.last
    end

    def git_push(remote = nil)
      remote ||= default_remote
      sh("git push #{remote} refs/heads/#{current_branch}".shellsplit)
      sh("git push #{remote} refs/tags/#{version_tag}".shellsplit)
      Bundler.ui.confirm "Pushed git commits and release tag."
    end

    def default_remote
      remote_for_branch, status = sh_with_status(%W[git config --get branch.#{current_branch}.remote])
      return "origin" unless status.success?

      remote_for_branch.strip
    end

    def current_branch
      # We can replace this with `git branch --show-current` once we drop support for git < 2.22.0
      sh(%w[git rev-parse --abbrev-ref HEAD]).gsub(%r{\Aheads/}, "").strip
    end

    def allowed_push_host
      @gemspec.metadata["allowed_push_host"] if @gemspec.respond_to?(:metadata)
    end

    def gem_push_host
      env_rubygems_host = ENV["RUBYGEMS_HOST"]
      env_rubygems_host = nil if
        env_rubygems_host && env_rubygems_host.empty?

      allowed_push_host || env_rubygems_host || "rubygems.org"
    end

    def already_tagged?
      return false unless sh(%w[git tag]).split(/\n/).include?(version_tag)
      Bundler.ui.confirm "Tag #{version_tag} has already been created."
      true
    end

    def guard_clean
      clean? && committed? || raise("There are files that need to be committed first.")
    end

    def clean?
      sh_with_status(%w[git diff --exit-code])[1].success?
    end

    def committed?
      sh_with_status(%w[git diff-index --quiet --cached HEAD])[1].success?
    end

    def tag_version
      sh %W[git tag -m Version\ #{version} #{version_tag}]
      Bundler.ui.confirm "Tagged #{version_tag}."
      yield if block_given?
    rescue RuntimeError
      Bundler.ui.error "Untagging #{version_tag} due to error."
      sh_with_status %W[git tag -d #{version_tag}]
      raise
    end

    def version
      gemspec.version
    end

    def version_tag
      "#{@tag_prefix}v#{version}"
    end

    def name
      gemspec.name
    end

    def sh_with_input(cmd)
      Bundler.ui.debug(cmd)
      SharedHelpers.chdir(base) do
        abort unless Kernel.system(*cmd)
      end
    end

    def sh(cmd, &block)
      out, status = sh_with_status(cmd, &block)
      unless status.success?
        raise("Running `#{cmd.shelljoin}` failed with the following output:\n\n#{out}\n")
      end
      out
    end

    def sh_with_status(cmd, &block)
      Bundler.ui.debug(cmd)
      SharedHelpers.chdir(base) do
        outbuf = IO.popen(cmd, :err => [:child, :out], &:read)
        status = $?
        block.call(outbuf) if status.success? && block
        [outbuf, status]
      end
    end

    def gem_key
      Bundler.settings["gem.push_key"].to_s.downcase if Bundler.settings["gem.push_key"]
    end

    def gem_push?
      !%w[n no nil false off 0].include?(ENV["gem_push"].to_s.downcase)
    end

    def gem_command
      ENV["GEM_COMMAND"]&.shellsplit || ["gem"]
    end
  end
end
PK)"#[�9l5,5,*gems/bundler-2.3.27/lib/bundler/fetcher.rbnu�[���# frozen_string_literal: true

require_relative "vendored_persistent"
require "cgi"
require "securerandom"
require "zlib"
require "rubygems/request"

module Bundler
  # Handles all the fetching with the rubygems server
  class Fetcher
    autoload :CompactIndex, File.expand_path("fetcher/compact_index", __dir__)
    autoload :Downloader, File.expand_path("fetcher/downloader", __dir__)
    autoload :Dependency, File.expand_path("fetcher/dependency", __dir__)
    autoload :Index, File.expand_path("fetcher/index", __dir__)

    # This error is raised when it looks like the network is down
    class NetworkDownError < HTTPError; end
    # This error is raised if we should rate limit our requests to the API
    class TooManyRequestsError < HTTPError; end
    # This error is raised if the API returns a 413 (only printed in verbose)
    class FallbackError < HTTPError; end

    # This is the error raised if OpenSSL fails the cert verification
    class CertificateFailureError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Could not verify the SSL certificate for #{remote_uri}.\nThere" \
          " is a chance you are experiencing a man-in-the-middle attack, but" \
          " most likely your system doesn't have the CA certificates needed" \
          " for verification. For information about OpenSSL certificates, see" \
          " https://railsapps.github.io/openssl-certificate-verify-failed.html." \
          " To connect without using SSL, edit your Gemfile" \
          " sources and change 'https' to 'http'."
      end
    end

    # This is the error raised when a source is HTTPS and OpenSSL didn't load
    class SSLError < HTTPError
      def initialize(msg = nil)
        super msg || "Could not load OpenSSL.\n" \
            "You must recompile Ruby with OpenSSL support or change the sources in your " \
            "Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL " \
            "using RVM are available at rvm.io/packages/openssl."
      end
    end

    # This error is raised if HTTP authentication is required, but not provided.
    class AuthenticationRequiredError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Authentication is required for #{remote_uri}.\n" \
          "Please supply credentials for this source. You can do this by running:\n" \
          "`bundle config set --global #{remote_uri} username:password`\n" \
          "or by storing the credentials in the `#{Settings.key_for(remote_uri)}` environment variable"
      end
    end

    # This error is raised if HTTP authentication is provided, but incorrect.
    class BadAuthenticationError < HTTPError
      def initialize(remote_uri)
        remote_uri = filter_uri(remote_uri)
        super "Bad username or password for #{remote_uri}.\n" \
          "Please double-check your credentials and correct them."
      end
    end

    # Exceptions classes that should bypass retry attempts. If your password didn't work the
    # first time, it's not going to the third time.
    NET_ERRORS = [:HTTPBadGateway, :HTTPBadRequest, :HTTPFailedDependency,
                  :HTTPForbidden, :HTTPInsufficientStorage, :HTTPMethodNotAllowed,
                  :HTTPMovedPermanently, :HTTPNoContent, :HTTPNotFound,
                  :HTTPNotImplemented, :HTTPPreconditionFailed, :HTTPRequestEntityTooLarge,
                  :HTTPRequestURITooLong, :HTTPUnauthorized, :HTTPUnprocessableEntity,
                  :HTTPUnsupportedMediaType, :HTTPVersionNotSupported].freeze
    FAIL_ERRORS = begin
      fail_errors = [AuthenticationRequiredError, BadAuthenticationError, FallbackError]
      fail_errors << Gem::Requirement::BadRequirementError
      fail_errors.concat(NET_ERRORS.map {|e| Net.const_get(e) })
    end.freeze

    class << self
      attr_accessor :disable_endpoint, :api_timeout, :redirect_limit, :max_retries
    end

    self.redirect_limit = Bundler.settings[:redirect] # How many redirects to allow in one request
    self.api_timeout    = Bundler.settings[:timeout] # How long to wait for each API call
    self.max_retries    = Bundler.settings[:retry] # How many retries for the API call

    def initialize(remote)
      @remote = remote

      Socket.do_not_reverse_lookup = true
      connection # create persistent connection
    end

    def uri
      @remote.anonymized_uri
    end

    # fetch a gem specification
    def fetch_spec(spec)
      spec -= [nil, "ruby", ""]
      spec_file_name = "#{spec.join "-"}.gemspec"

      uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
      if uri.scheme == "file"
        path = Bundler.rubygems.correct_for_windows_path(uri.path)
        Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
      elsif cached_spec_path = gemspec_cached_path(spec_file_name)
        Bundler.load_gemspec(cached_spec_path)
      else
        Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
      end
    rescue MarshalError
      raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
        "Your network or your gem server is probably having issues right now."
    end

    # return the specs in the bundler format as an index with retries
    def specs_with_retry(gem_names, source)
      Bundler::Retry.new("fetcher", FAIL_ERRORS).attempts do
        specs(gem_names, source)
      end
    end

    # return the specs in the bundler format as an index
    def specs(gem_names, source)
      index = Bundler::Index.new

      if Bundler::Fetcher.disable_endpoint
        @use_api = false
        specs = fetchers.last.specs(gem_names)
      else
        specs = []
        @fetchers = fetchers.drop_while do |f|
          !f.available? || (f.api_fetcher? && !gem_names) || !specs = f.specs(gem_names)
        end
        @use_api = false if fetchers.none?(&:api_fetcher?)
      end

      specs.each do |name, version, platform, dependencies, metadata|
        spec = if dependencies
          EndpointSpecification.new(name, version, platform, self, dependencies, metadata)
        else
          RemoteSpecification.new(name, version, platform, self)
        end
        spec.source = source
        spec.remote = @remote
        index << spec
      end

      index
    rescue CertificateFailureError
      Bundler.ui.info "" if gem_names && use_api # newline after dots
      raise
    end

    def use_api
      return @use_api if defined?(@use_api)

      fetchers.shift until fetchers.first.available?

      @use_api = if remote_uri.scheme == "file" || Bundler::Fetcher.disable_endpoint
        false
      else
        fetchers.first.api_fetcher?
      end
    end

    def user_agent
      @user_agent ||= begin
        ruby = Bundler::RubyVersion.system

        agent = String.new("bundler/#{Bundler::VERSION}")
        agent << " rubygems/#{Gem::VERSION}"
        agent << " ruby/#{ruby.versions_string(ruby.versions)}"
        agent << " (#{ruby.host})"
        agent << " command/#{ARGV.first}"

        if ruby.engine != "ruby"
          # engine_version raises on unknown engines
          engine_version = begin
                             ruby.engine_versions
                           rescue RuntimeError
                             "???"
                           end
          agent << " #{ruby.engine}/#{ruby.versions_string(engine_version)}"
        end

        agent << " options/#{Bundler.settings.all.join(",")}"

        agent << " ci/#{cis.join(",")}" if cis.any?

        # add a random ID so we can consolidate runs server-side
        agent << " " << SecureRandom.hex(8)

        # add any user agent strings set in the config
        extra_ua = Bundler.settings[:user_agent]
        agent << " " << extra_ua if extra_ua

        agent
      end
    end

    def fetchers
      @fetchers ||= FETCHERS.map {|f| f.new(downloader, @remote, uri) }
    end

    def http_proxy
      return unless uri = connection.proxy_uri
      uri.to_s
    end

    def inspect
      "#<#{self.class}:0x#{object_id} uri=#{uri}>"
    end

    private

    FETCHERS = [CompactIndex, Dependency, Index].freeze

    def cis
      env_cis = {
        "TRAVIS" => "travis",
        "CIRCLECI" => "circle",
        "SEMAPHORE" => "semaphore",
        "JENKINS_URL" => "jenkins",
        "BUILDBOX" => "buildbox",
        "GO_SERVER_URL" => "go",
        "SNAP_CI" => "snap",
        "GITLAB_CI" => "gitlab",
        "GITHUB_ACTIONS" => "github",
        "CI_NAME" => ENV["CI_NAME"],
        "CI" => "ci",
      }
      env_cis.find_all {|env, _| ENV[env] }.map {|_, ci| ci }
    end

    def connection
      @connection ||= begin
        needs_ssl = remote_uri.scheme == "https" ||
                    Bundler.settings[:ssl_verify_mode] ||
                    Bundler.settings[:ssl_client_cert]
        raise SSLError if needs_ssl && !defined?(OpenSSL::SSL)

        con = PersistentHTTP.new :name => "bundler", :proxy => :ENV
        if gem_proxy = Gem.configuration[:http_proxy]
          con.proxy = Bundler::URI.parse(gem_proxy) if gem_proxy != :no_proxy
        end

        if remote_uri.scheme == "https"
          con.verify_mode = (Bundler.settings[:ssl_verify_mode] ||
            OpenSSL::SSL::VERIFY_PEER)
          con.cert_store = bundler_cert_store
        end

        ssl_client_cert = Bundler.settings[:ssl_client_cert] ||
                          (Gem.configuration.ssl_client_cert if
                            Gem.configuration.respond_to?(:ssl_client_cert))
        if ssl_client_cert
          pem = File.read(ssl_client_cert)
          con.cert = OpenSSL::X509::Certificate.new(pem)
          con.key  = OpenSSL::PKey::RSA.new(pem)
        end

        con.read_timeout = Fetcher.api_timeout
        con.open_timeout = Fetcher.api_timeout
        con.override_headers["User-Agent"] = user_agent
        con.override_headers["X-Gemfile-Source"] = @remote.original_uri.to_s if @remote.original_uri
        con
      end
    end

    # cached gem specification path, if one exists
    def gemspec_cached_path(spec_file_name)
      paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
      paths.find {|path| File.file? path }
    end

    HTTP_ERRORS = [
      Timeout::Error, EOFError, SocketError, Errno::ENETDOWN, Errno::ENETUNREACH,
      Errno::EINVAL, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::EAGAIN,
      Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError,
      PersistentHTTP::Error, Zlib::BufError, Errno::EHOSTUNREACH
    ].freeze

    def bundler_cert_store
      store = OpenSSL::X509::Store.new
      ssl_ca_cert = Bundler.settings[:ssl_ca_cert] ||
                    (Gem.configuration.ssl_ca_cert if
                      Gem.configuration.respond_to?(:ssl_ca_cert))
      if ssl_ca_cert
        if File.directory? ssl_ca_cert
          store.add_path ssl_ca_cert
        else
          store.add_file ssl_ca_cert
        end
      else
        store.set_default_paths
        Gem::Request.get_cert_files.each {|c| store.add_file c }
      end
      store
    end

    def remote_uri
      @remote.uri
    end

    def downloader
      @downloader ||= Downloader.new(connection, self.class.redirect_limit)
    end
  end
end
PK)"#[p2Ǥ��,gems/bundler-2.3.27/lib/bundler/constants.rbnu�[���# frozen_string_literal: true

module Bundler
  WINDOWS = RbConfig::CONFIG["host_os"] =~ /(msdos|mswin|djgpp|mingw)/
  FREEBSD = RbConfig::CONFIG["host_os"] =~ /bsd/
  NULL    = WINDOWS ? "NUL" : "/dev/null"
end
PK)"#[K�,�""1gems/bundler-2.3.27/lib/bundler/match_metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  module MatchMetadata
    def matches_current_ruby?
      @required_ruby_version.satisfied_by?(Gem.ruby_version)
    end

    def matches_current_rubygems?
      @required_rubygems_version.satisfied_by?(Gem.rubygems_version)
    end
  end
end
PK)"#[��>--)gems/bundler-2.3.27/lib/bundler/plugin.rbnu�[���# frozen_string_literal: true

require_relative "plugin/api"

module Bundler
  module Plugin
    autoload :DSL,        File.expand_path("plugin/dsl", __dir__)
    autoload :Events,     File.expand_path("plugin/events", __dir__)
    autoload :Index,      File.expand_path("plugin/index", __dir__)
    autoload :Installer,  File.expand_path("plugin/installer", __dir__)
    autoload :SourceList, File.expand_path("plugin/source_list", __dir__)

    class MalformattedPlugin < PluginError; end
    class UndefinedCommandError < PluginError; end
    class UnknownSourceError < PluginError; end
    class PluginInstallError < PluginError; end

    PLUGIN_FILE_NAME = "plugins.rb".freeze

    module_function

    def reset!
      instance_variables.each {|i| remove_instance_variable(i) }

      @sources = {}
      @commands = {}
      @hooks_by_event = Hash.new {|h, k| h[k] = [] }
      @loaded_plugin_names = []
    end

    reset!

    # Installs a new plugin by the given name
    #
    # @param [Array<String>] names the name of plugin to be installed
    # @param [Hash] options various parameters as described in description.
    #               Refer to cli/plugin for available options
    def install(names, options)
      raise InvalidOption, "You cannot specify `--branch` and `--ref` at the same time." if options["branch"] && options["ref"]

      specs = Installer.new.install(names, options)

      save_plugins names, specs
    rescue PluginError
      specs_to_delete = specs.select {|k, _v| names.include?(k) && !index.commands.values.include?(k) }
      specs_to_delete.each_value {|spec| Bundler.rm_rf(spec.full_gem_path) }

      raise
    end

    # Uninstalls plugins by the given names
    #
    # @param [Array<String>] names the names of plugins to be uninstalled
    def uninstall(names, options)
      if names.empty? && !options[:all]
        Bundler.ui.error "No plugins to uninstall. Specify at least 1 plugin to uninstall.\n"\
          "Use --all option to uninstall all the installed plugins."
        return
      end

      names = index.installed_plugins if options[:all]
      if names.any?
        names.each do |name|
          if index.installed?(name)
            Bundler.rm_rf(index.plugin_path(name))
            index.unregister_plugin(name)
            Bundler.ui.info "Uninstalled plugin #{name}"
          else
            Bundler.ui.error "Plugin #{name} is not installed \n"
          end
        end
      else
        Bundler.ui.info "No plugins installed"
      end
    end

    # List installed plugins and commands
    #
    def list
      installed_plugins = index.installed_plugins
      if installed_plugins.any?
        output = String.new
        installed_plugins.each do |plugin|
          output << "#{plugin}\n"
          output << "-----\n"
          index.plugin_commands(plugin).each do |command|
            output << "  #{command}\n"
          end
          output << "\n"
        end
      else
        output = "No plugins installed"
      end
      Bundler.ui.info output
    end

    # Evaluates the Gemfile with a limited DSL and installs the plugins
    # specified by plugin method
    #
    # @param [Pathname] gemfile path
    # @param [Proc] block that can be evaluated for (inline) Gemfile
    def gemfile_install(gemfile = nil, &inline)
      Bundler.settings.temporary(:frozen => false, :deployment => false) do
        builder = DSL.new
        if block_given?
          builder.instance_eval(&inline)
        else
          builder.eval_gemfile(gemfile)
        end
        builder.check_primary_source_safety
        definition = builder.to_definition(nil, true)

        return if definition.dependencies.empty?

        plugins = definition.dependencies.map(&:name).reject {|p| index.installed? p }
        installed_specs = Installer.new.install_definition(definition)

        save_plugins plugins, installed_specs, builder.inferred_plugins
      end
    rescue RuntimeError => e
      unless e.is_a?(GemfileError)
        Bundler.ui.error "Failed to install plugin: #{e.message}\n  #{e.backtrace[0]}"
      end
      raise
    end

    # The index object used to store the details about the plugin
    def index
      @index ||= Index.new
    end

    # The directory root for all plugin related data
    #
    # If run in an app, points to local root, in app_config_path
    # Otherwise, points to global root, in Bundler.user_bundle_path("plugin")
    def root
      @root ||= if SharedHelpers.in_bundle?
        local_root
      else
        global_root
      end
    end

    def local_root
      Bundler.app_config_path.join("plugin")
    end

    # The global directory root for all plugin related data
    def global_root
      Bundler.user_bundle_path("plugin")
    end

    # The cache directory for plugin stuffs
    def cache
      @cache ||= root.join("cache")
    end

    # To be called via the API to register to handle a command
    def add_command(command, cls)
      @commands[command] = cls
    end

    # Checks if any plugin handles the command
    def command?(command)
      !index.command_plugin(command).nil?
    end

    # To be called from Cli class to pass the command and argument to
    # appropriate plugin class
    def exec_command(command, args)
      raise UndefinedCommandError, "Command `#{command}` not found" unless command? command

      load_plugin index.command_plugin(command) unless @commands.key? command

      @commands[command].new.exec(command, args)
    end

    # To be called via the API to register to handle a source plugin
    def add_source(source, cls)
      @sources[source] = cls
    end

    # Checks if any plugin declares the source
    def source?(name)
      !index.source_plugin(name.to_s).nil?
    end

    # @return [Class] that handles the source. The class includes API::Source
    def source(name)
      raise UnknownSourceError, "Source #{name} not found" unless source? name

      load_plugin(index.source_plugin(name)) unless @sources.key? name

      @sources[name]
    end

    # @param [Hash] The options that are present in the lock file
    # @return [API::Source] the instance of the class that handles the source
    #                       type passed in locked_opts
    def source_from_lock(locked_opts)
      src = source(locked_opts["type"])

      src.new(locked_opts.merge("uri" => locked_opts["remote"]))
    end

    # To be called via the API to register a hooks and corresponding block that
    # will be called to handle the hook
    def add_hook(event, &block)
      unless Events.defined_event?(event)
        raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
      end
      @hooks_by_event[event.to_s] << block
    end

    # Runs all the hooks that are registered for the passed event
    #
    # It passes the passed arguments and block to the block registered with
    # the api.
    #
    # @param [String] event
    def hook(event, *args, &arg_blk)
      return unless Bundler.feature_flag.plugins?
      unless Events.defined_event?(event)
        raise ArgumentError, "Event '#{event}' not defined in Bundler::Plugin::Events"
      end

      plugins = index.hook_plugins(event)
      return unless plugins.any?

      (plugins - @loaded_plugin_names).each {|name| load_plugin(name) }

      @hooks_by_event[event].each {|blk| blk.call(*args, &arg_blk) }
    end

    # currently only intended for specs
    #
    # @return [String, nil] installed path
    def installed?(plugin)
      Index.new.installed?(plugin)
    end

    # Post installation processing and registering with index
    #
    # @param [Array<String>] plugins list to be installed
    # @param [Hash] specs of plugins mapped to installation path (currently they
    #               contain all the installed specs, including plugins)
    # @param [Array<String>] names of inferred source plugins that can be ignored
    def save_plugins(plugins, specs, optional_plugins = [])
      plugins.each do |name|
        next if index.installed?(name)

        spec = specs[name]

        save_plugin(name, spec, optional_plugins.include?(name))
      end
    end

    # Checks if the gem is good to be a plugin
    #
    # At present it only checks whether it contains plugins.rb file
    #
    # @param [Pathname] plugin_path the path plugin is installed at
    # @raise [MalformattedPlugin] if plugins.rb file is not found
    def validate_plugin!(plugin_path)
      plugin_file = plugin_path.join(PLUGIN_FILE_NAME)
      raise MalformattedPlugin, "#{PLUGIN_FILE_NAME} was not found in the plugin." unless plugin_file.file?
    end

    # Validates and registers a plugin.
    #
    # @param [String] name the name of the plugin
    # @param [Specification] spec of installed plugin
    # @param [Boolean] optional_plugin, removed if there is conflict with any
    #                     other plugin (used for default source plugins)
    #
    # @raise [PluginInstallError] if validation or registration raises any error
    def save_plugin(name, spec, optional_plugin = false)
      validate_plugin! Pathname.new(spec.full_gem_path)
      installed = register_plugin(name, spec, optional_plugin)
      Bundler.ui.info "Installed plugin #{name}" if installed
    rescue PluginError => e
      raise PluginInstallError, "Failed to install plugin `#{spec.name}`, due to #{e.class} (#{e.message})"
    end

    # Runs the plugins.rb file in an isolated namespace, records the plugin
    # actions it registers for and then passes the data to index to be stored.
    #
    # @param [String] name the name of the plugin
    # @param [Specification] spec of installed plugin
    # @param [Boolean] optional_plugin, removed if there is conflict with any
    #                     other plugin (used for default source plugins)
    #
    # @raise [MalformattedPlugin] if plugins.rb raises any error
    def register_plugin(name, spec, optional_plugin = false)
      commands = @commands
      sources = @sources
      hooks = @hooks_by_event

      @commands = {}
      @sources = {}
      @hooks_by_event = Hash.new {|h, k| h[k] = [] }

      load_paths = spec.load_paths
      Bundler.rubygems.add_to_load_path(load_paths)
      path = Pathname.new spec.full_gem_path

      begin
        load path.join(PLUGIN_FILE_NAME), true
      rescue StandardError => e
        raise MalformattedPlugin, "#{e.class}: #{e.message}"
      end

      if optional_plugin && @sources.keys.any? {|s| source? s }
        Bundler.rm_rf(path)
        false
      else
        index.register_plugin(name, path.to_s, load_paths, @commands.keys,
          @sources.keys, @hooks_by_event.keys)
        true
      end
    ensure
      @commands = commands
      @sources = sources
      @hooks_by_event = hooks
    end

    # Executes the plugins.rb file
    #
    # @param [String] name of the plugin
    def load_plugin(name)
      return unless name && !name.empty?

      # Need to ensure before this that plugin root where the rest of gems
      # are installed to be on load path to support plugin deps. Currently not
      # done to avoid conflicts
      path = index.plugin_path(name)

      Bundler.rubygems.add_to_load_path(index.load_paths(name))

      load path.join(PLUGIN_FILE_NAME)

      @loaded_plugin_names << name
    rescue RuntimeError => e
      Bundler.ui.error "Failed loading plugin #{name}: #{e.message}"
      raise
    end

    class << self
      private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!
    end
  end
end
PK)"#[{�*!'')gems/bundler-2.3.27/lib/bundler/source.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    autoload :Gemspec,  File.expand_path("source/gemspec", __dir__)
    autoload :Git,      File.expand_path("source/git", __dir__)
    autoload :Metadata, File.expand_path("source/metadata", __dir__)
    autoload :Path,     File.expand_path("source/path", __dir__)
    autoload :Rubygems, File.expand_path("source/rubygems", __dir__)
    autoload :RubygemsAggregate, File.expand_path("source/rubygems_aggregate", __dir__)

    attr_accessor :dependency_names

    def unmet_deps
      specs.unmet_dependency_names
    end

    def version_message(spec, locked_spec = nil)
      message = "#{spec.name} #{spec.version}"
      message += " (#{spec.platform})" if spec.platform != Gem::Platform::RUBY && !spec.platform.nil?

      if locked_spec
        locked_spec_version = locked_spec.version
        if locked_spec_version && spec.version != locked_spec_version
          message += Bundler.ui.add_color(" (was #{locked_spec_version})", version_color(spec.version, locked_spec_version))
        end
      end

      message
    end

    def can_lock?(spec)
      spec.source == self
    end

    def local!; end

    def local_only!; end

    def cached!; end

    def remote!; end

    def add_dependency_names(names)
      @dependency_names = Array(dependency_names) | Array(names)
    end

    # it's possible that gems from one source depend on gems from some
    # other source, so now we download gemspecs and iterate over those
    # dependencies, looking for gems we don't have info on yet.
    def double_check_for(*); end

    def dependency_names_to_double_check
      specs.dependency_names
    end

    def spec_names
      specs.spec_names
    end

    def include?(other)
      other == self
    end

    def inspect
      "#<#{self.class}:0x#{object_id} #{self}>"
    end

    def identifier
      to_s
    end

    def path?
      instance_of?(Bundler::Source::Path)
    end

    def extension_cache_path(spec)
      return unless Bundler.feature_flag.global_gem_cache?
      return unless source_slug = extension_cache_slug(spec)
      Bundler.user_cache.join(
        "extensions", Gem::Platform.local.to_s, Bundler.ruby_scope,
        source_slug, spec.full_name
      )
    end

    private

    def version_color(spec_version, locked_spec_version)
      if Gem::Version.correct?(spec_version) && Gem::Version.correct?(locked_spec_version)
        # display yellow if there appears to be a regression
        earlier_version?(spec_version, locked_spec_version) ? :yellow : :green
      else
        # default to green if the versions cannot be directly compared
        :green
      end
    end

    def earlier_version?(spec_version, locked_spec_version)
      Gem::Version.new(spec_version) < Gem::Version.new(locked_spec_version)
    end

    def print_using_message(message)
      if !message.include?("(was ") && Bundler.feature_flag.suppress_install_using_messages?
        Bundler.ui.debug message
      else
        Bundler.ui.info message
      end
    end

    def extension_cache_slug(_)
      nil
    end
  end
end
PK)"#[���''.gems/bundler-2.3.27/lib/bundler/source_list.rbnu�[���# frozen_string_literal: true

module Bundler
  class SourceList
    attr_reader :path_sources,
      :git_sources,
      :plugin_sources,
      :global_path_source,
      :metadata_source

    def global_rubygems_source
      @global_rubygems_source ||= rubygems_aggregate_class.new("allow_local" => true)
    end

    def initialize
      @path_sources           = []
      @git_sources            = []
      @plugin_sources         = []
      @global_rubygems_source = nil
      @global_path_source     = nil
      @rubygems_sources       = []
      @metadata_source        = Source::Metadata.new

      @merged_gem_lockfile_sections = false
    end

    def merged_gem_lockfile_sections?
      @merged_gem_lockfile_sections
    end

    def merged_gem_lockfile_sections!(replacement_source)
      @merged_gem_lockfile_sections = true
      @global_rubygems_source = replacement_source
    end

    def aggregate_global_source?
      global_rubygems_source.multiple_remotes?
    end

    def implicit_global_source?
      global_rubygems_source.no_remotes?
    end

    def add_path_source(options = {})
      if options["gemspec"]
        add_source_to_list Source::Gemspec.new(options), path_sources
      else
        path_source = add_source_to_list Source::Path.new(options), path_sources
        @global_path_source ||= path_source if options["global"]
        path_source
      end
    end

    def add_git_source(options = {})
      add_source_to_list(Source::Git.new(options), git_sources).tap do |source|
        warn_on_git_protocol(source)
      end
    end

    def add_rubygems_source(options = {})
      new_source = Source::Rubygems.new(options)
      return @global_rubygems_source if @global_rubygems_source == new_source

      add_source_to_list new_source, @rubygems_sources
    end

    def add_plugin_source(source, options = {})
      add_source_to_list Plugin.source(source).new(options), @plugin_sources
    end

    def add_global_rubygems_remote(uri)
      global_rubygems_source.add_remote(uri)
      global_rubygems_source
    end

    def default_source
      global_path_source || global_rubygems_source
    end

    def rubygems_sources
      non_global_rubygems_sources + [global_rubygems_source]
    end

    def non_global_rubygems_sources
      @rubygems_sources
    end

    def rubygems_remotes
      rubygems_sources.map(&:remotes).flatten.uniq
    end

    def all_sources
      path_sources + git_sources + plugin_sources + rubygems_sources + [metadata_source]
    end

    def non_default_explicit_sources
      all_sources - [default_source, metadata_source]
    end

    def get(source)
      source_list_for(source).find {|s| equivalent_source?(source, s) }
    end

    def get_with_fallback(source)
      get(source) || default_source
    end

    def lock_sources
      lock_other_sources + lock_rubygems_sources
    end

    def lock_other_sources
      (path_sources + git_sources + plugin_sources).sort_by(&:identifier)
    end

    def lock_rubygems_sources
      if merged_gem_lockfile_sections?
        [combine_rubygems_sources]
      else
        rubygems_sources.sort_by(&:identifier)
      end
    end

    # Returns true if there are changes
    def replace_sources!(replacement_sources)
      return false if replacement_sources.empty?

      @rubygems_sources, @path_sources, @git_sources, @plugin_sources = map_sources(replacement_sources)
      @global_rubygems_source = global_replacement_source(replacement_sources)

      different_sources?(lock_sources, replacement_sources)
    end

    # Returns true if there are changes
    def expired_sources?(replacement_sources)
      return false if replacement_sources.empty?

      lock_sources = dup_with_replaced_sources(replacement_sources).lock_sources

      different_sources?(lock_sources, replacement_sources)
    end

    def local_only!
      all_sources.each(&:local_only!)
    end

    def cached!
      all_sources.each(&:cached!)
    end

    def remote!
      all_sources.each(&:remote!)
    end

    private

    def dup_with_replaced_sources(replacement_sources)
      new_source_list = dup
      new_source_list.replace_sources!(replacement_sources)
      new_source_list
    end

    def map_sources(replacement_sources)
      [@rubygems_sources, @path_sources, @git_sources, @plugin_sources].map do |sources|
        sources.map do |source|
          replacement_sources.find {|s| s == source } || source
        end
      end
    end

    def global_replacement_source(replacement_sources)
      replacement_source = replacement_sources.find {|s| s == global_rubygems_source }
      return global_rubygems_source unless replacement_source

      replacement_source.local!
      replacement_source
    end

    def different_sources?(lock_sources, replacement_sources)
      !equivalent_sources?(lock_sources, replacement_sources)
    end

    def rubygems_aggregate_class
      Source::Rubygems
    end

    def add_source_to_list(source, list)
      list.unshift(source).uniq!
      source
    end

    def source_list_for(source)
      case source
      when Source::Git          then git_sources
      when Source::Path         then path_sources
      when Source::Rubygems     then rubygems_sources
      when Plugin::API::Source  then plugin_sources
      else raise ArgumentError, "Invalid source: #{source.inspect}"
      end
    end

    def combine_rubygems_sources
      Source::Rubygems.new("remotes" => rubygems_remotes)
    end

    def warn_on_git_protocol(source)
      return if Bundler.settings["git.allow_insecure"]

      if source.uri =~ /^git\:/
        Bundler.ui.warn "The git source `#{source.uri}` uses the `git` protocol, " \
          "which transmits data without encryption. Disable this warning with " \
          "`bundle config set --local git.allow_insecure true`, or switch to the `https` " \
          "protocol to keep your data secure."
      end
    end

    def equivalent_sources?(lock_sources, replacement_sources)
      lock_sources.sort_by(&:identifier) == replacement_sources.sort_by(&:identifier)
    end

    def equivalent_source?(source, other_source)
      source == other_source
    end
  end
end
PK)"#[�[F�U5U5+gems/bundler-2.3.27/lib/bundler/resolver.rbnu�[���# frozen_string_literal: true

module Bundler
  class Resolver
    require_relative "vendored_molinillo"
    require_relative "resolver/base"
    require_relative "resolver/spec_group"

    include GemHelpers

    def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
      @source_requirements = source_requirements
      @base = Resolver::Base.new(base, additional_base_requirements)
      @resolver = Molinillo::Resolver.new(self, self)
      @results_for = {}
      @search_for = {}
      @platforms = platforms
      @resolving_only_for_ruby = platforms == [Gem::Platform::RUBY]
      @gem_version_promoter = gem_version_promoter
    end

    def start(requirements, exclude_specs: [])
      @metadata_requirements, regular_requirements = requirements.partition {|dep| dep.name.end_with?("\0") }

      exclude_specs.each do |spec|
        remove_from_candidates(spec)
      end

      requirements.each {|dep| prerelease_specified[dep.name] ||= dep.prerelease? }

      verify_gemfile_dependencies_are_found!(requirements)
      result = @resolver.resolve(requirements).
        map(&:payload).
        reject {|sg| sg.name.end_with?("\0") }.
        map(&:to_specs).
        flatten

      SpecSet.new(SpecSet.new(result).for(regular_requirements, false, @platforms))
    rescue Molinillo::VersionConflict => e
      conflicts = e.conflicts

      deps_to_unlock = conflicts.values.inject([]) do |deps, conflict|
        deps |= conflict.requirement_trees.flatten.map {|req| base_requirements[req.name] }.compact
      end

      if deps_to_unlock.any?
        @base.unlock_deps(deps_to_unlock)
        reset_spec_cache
        retry
      end

      message = version_conflict_message(e)
      raise VersionConflict.new(conflicts.keys.uniq, message)
    rescue Molinillo::CircularDependencyError => e
      names = e.dependencies.sort_by(&:name).map {|d| "gem '#{d.name}'" }
      raise CyclicDependencyError, "Your bundle requires gems that depend" \
        " on each other, creating an infinite loop. Please remove" \
        " #{names.count > 1 ? "either " : ""}#{names.join(" or ")}" \
        " and try again."
    end

    include Molinillo::UI

    # Conveys debug information to the user.
    #
    # @param [Integer] depth the current depth of the resolution process.
    # @return [void]
    def debug(depth = 0)
      return unless debug?
      debug_info = yield
      debug_info = debug_info.inspect unless debug_info.is_a?(String)
      puts debug_info.split("\n").map {|s| depth == 0 ? "BUNDLER: #{s}" : "BUNDLER(#{depth}): #{s}" }
    end

    def debug?
      return @debug_mode if defined?(@debug_mode)
      @debug_mode =
        ENV["BUNDLER_DEBUG_RESOLVER"] ||
        ENV["BUNDLER_DEBUG_RESOLVER_TREE"] ||
        ENV["DEBUG_RESOLVER"] ||
        ENV["DEBUG_RESOLVER_TREE"] ||
        false
    end

    def before_resolution
      Bundler.ui.info "Resolving dependencies...", debug?
    end

    def after_resolution
      Bundler.ui.info ""
    end

    def indicate_progress
      Bundler.ui.info ".", false unless debug?
    end

    include Molinillo::SpecificationProvider

    def dependencies_for(specification)
      specification.dependencies_for_activated_platforms
    end

    def search_for(dependency)
      @search_for[dependency] ||= begin
        name = dependency.name
        locked_results = @base[name].select {|spec| requirement_satisfied_by?(dependency, nil, spec) }
        locked_requirement = base_requirements[name]
        results = results_for(dependency) + locked_results
        results = results.select {|spec| requirement_satisfied_by?(locked_requirement, nil, spec) } if locked_requirement
        dep_platforms = dependency.gem_platforms(@platforms)

        @gem_version_promoter.sort_versions(dependency, results).group_by(&:version).reduce([]) do |groups, (_, specs)|
          relevant_platforms = dep_platforms.select {|platform| specs.any? {|spec| spec.match_platform(platform) } }
          next groups unless relevant_platforms.any?

          ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
          if ruby_specs.any?
            spec_group_ruby = SpecGroup.new(ruby_specs, [Gem::Platform::RUBY])
            spec_group_ruby.force_ruby_platform = dependency.force_ruby_platform
            groups << spec_group_ruby
          end

          next groups if @resolving_only_for_ruby || dependency.force_ruby_platform

          platform_specs = relevant_platforms.flat_map {|platform| select_best_platform_match(specs, platform) }
          next groups if platform_specs == ruby_specs

          spec_group = SpecGroup.new(platform_specs, relevant_platforms)
          groups << spec_group

          groups
        end
      end
    end

    def index_for(dependency)
      source_for(dependency.name).specs
    end

    def source_for(name)
      @source_requirements[name] || @source_requirements[:default]
    end

    def results_for(dependency)
      @results_for[dependency] ||= index_for(dependency).search(dependency)
    end

    def name_for(dependency)
      dependency.name
    end

    def name_for_explicit_dependency_source
      Bundler.default_gemfile.basename.to_s
    rescue StandardError
      "Gemfile"
    end

    def requirement_satisfied_by?(requirement, activated, spec)
      requirement.matches_spec?(spec) || spec.source.is_a?(Source::Gemspec)
    end

    def sort_dependencies(dependencies, activated, conflicts)
      dependencies.sort_by do |dependency|
        name = name_for(dependency)
        vertex = activated.vertex_named(name)
        [
          @base[name].any? ? 0 : 1,
          vertex.payload ? 0 : 1,
          vertex.root? ? 0 : 1,
          amount_constrained(dependency),
          conflicts[name] ? 0 : 1,
          vertex.payload ? 0 : search_for(dependency).count,
        ]
      end
    end

    private

    def base_requirements
      @base.base_requirements
    end

    def prerelease_specified
      @gem_version_promoter.prerelease_specified
    end

    def remove_from_candidates(spec)
      @base.delete(spec)

      @results_for.keys.each do |dep|
        next unless dep.name == spec.name

        @results_for[dep].reject {|s| s.name == spec.name && s.version == spec.version }
      end

      reset_spec_cache
    end

    def reset_spec_cache
      @search_for = {}
      @gem_version_promoter.reset
    end

    # returns an integer \in (-\infty, 0]
    # a number closer to 0 means the dependency is less constraining
    #
    # dependencies w/ 0 or 1 possibilities (ignoring version requirements)
    # are given very negative values, so they _always_ sort first,
    # before dependencies that are unconstrained
    def amount_constrained(dependency)
      @amount_constrained ||= {}
      @amount_constrained[dependency.name] ||= if (base = @base[dependency.name]) && !base.empty?
        dependency.requirement.satisfied_by?(base.first.version) ? 0 : 1
      else
        all = index_for(dependency).search(dependency.name).size

        if all <= 1
          all - 1_000_000
        else
          search = search_for(dependency)
          search = prerelease_specified[dependency.name] ? search.count : search.count {|s| !s.version.prerelease? }
          search - all
        end
      end
    end

    def verify_gemfile_dependencies_are_found!(requirements)
      requirements.map! do |requirement|
        name = requirement.name
        next requirement if name == "bundler"
        next if requirement.gem_platforms(@platforms).empty?
        next requirement unless search_for(requirement).empty?
        next unless requirement.current_platform?

        raise GemNotFound, gem_not_found_message(name, requirement, source_for(name))
      end.compact!
    end

    def gem_not_found_message(name, requirement, source, extra_message = "")
      specs = source.specs.search(name).sort_by {|s| [s.version, s.platform.to_s] }
      matching_part = name
      requirement_label = SharedHelpers.pretty_dependency(requirement)
      cache_message = begin
                          " or in gems cached in #{Bundler.settings.app_cache_path}" if Bundler.app_cache.exist?
                        rescue GemfileNotFound
                          nil
                        end
      specs_matching_requirement = specs.select {| spec| requirement.matches_spec?(spec) }

      if specs_matching_requirement.any?
        specs = specs_matching_requirement
        matching_part = requirement_label
        platforms = requirement.gem_platforms(@platforms)
        platform_label = platforms.size == 1 ? "platform '#{platforms.first}" : "platforms '#{platforms.join("', '")}"
        requirement_label = "#{requirement_label}' with #{platform_label}"
      end

      message = String.new("Could not find gem '#{requirement_label}'#{extra_message} in #{source}#{cache_message}.\n")

      if specs.any?
        message << "\nThe source contains the following gems matching '#{matching_part}':\n"
        message << specs.map {|s| "  * #{s.full_name}" }.join("\n")
      end

      message
    end

    def version_conflict_message(e)
      # only show essential conflicts, if possible
      conflicts = e.conflicts.dup

      if conflicts["bundler"]
        conflicts.replace("bundler" => conflicts["bundler"])
      else
        conflicts.delete_if do |_name, conflict|
          deps = conflict.requirement_trees.map(&:last).flatten(1)
          !Bundler::VersionRanges.empty?(*Bundler::VersionRanges.for_many(deps.map(&:requirement)))
        end
      end

      e = Molinillo::VersionConflict.new(conflicts, e.specification_provider) unless conflicts.empty?

      e.message_with_trees(
        :full_message_for_conflict => lambda do |name, conflict|
          trees = conflict.requirement_trees

          # called first, because we want to reduce the amount of work required to find maximal empty sets
          trees = trees.uniq {|t| t.flatten.map {|dep| [dep.name, dep.requirement] } }

          # bail out if tree size is too big for Array#combination to make any sense
          if trees.size <= 15
            maximal = 1.upto(trees.size).map do |size|
              trees.map(&:last).flatten(1).combination(size).to_a
            end.flatten(1).select do |deps|
              Bundler::VersionRanges.empty?(*Bundler::VersionRanges.for_many(deps.map(&:requirement)))
            end.min_by(&:size)

            trees.reject! {|t| !maximal.include?(t.last) } if maximal

            trees.sort_by! {|t| t.reverse.map(&:name) }
          end

          if trees.size > 1 || name == "bundler"
            o = if name.end_with?("\0")
              String.new("Bundler found conflicting requirements for the #{name} version:")
            else
              String.new("Bundler could not find compatible versions for gem \"#{name}\":")
            end
            o << %(\n)
            o << %(  In #{name_for_explicit_dependency_source}:\n)
            o << trees.map do |tree|
              t = "".dup
              depth = 2

              base_tree = tree.first
              base_tree_name = base_tree.name

              if base_tree_name.end_with?("\0")
                t = nil
              else
                tree.each do |req|
                  t << "  " * depth << SharedHelpers.pretty_dependency(req)
                  unless tree.last == req
                    if spec = conflict.activated_by_name[req.name]
                      t << %( was resolved to #{spec.version}, which)
                    end
                    t << %( depends on)
                  end
                  t << %(\n)
                  depth += 1
                end
              end
              t
            end.compact.join("\n")
          else
            o = String.new
          end

          if name == "bundler"
            o << %(\n  Current Bundler version:\n    bundler (#{Bundler::VERSION}))

            conflict_dependency = conflict.requirement
            conflict_requirement = conflict_dependency.requirement
            other_bundler_required = !conflict_requirement.satisfied_by?(Gem::Version.new(Bundler::VERSION))

            if other_bundler_required
              o << "\n\n"

              candidate_specs = source_for(:default_bundler).specs.search(conflict_dependency)
              if candidate_specs.any?
                target_version = candidate_specs.last.version
                new_command = [File.basename($PROGRAM_NAME), "_#{target_version}_", *ARGV].join(" ")
                o << "Your bundle requires a different version of Bundler than the one you're running.\n"
                o << "Install the necessary version with `gem install bundler:#{target_version}` and rerun bundler using `#{new_command}`\n"
              else
                o << "Your bundle requires a different version of Bundler than the one you're running, and that version could not be found.\n"
              end
            end
          elsif name.end_with?("\0")
            o << %(\n  Current #{name} version:\n    #{SharedHelpers.pretty_dependency(@metadata_requirements.find {|req| req.name == name })}\n\n)
          elsif !conflict.existing
            o << "\n"

            relevant_source = conflict.requirement.source || source_for(name)

            extra_message = if trees.first.size > 1
              ", which is required by gem '#{SharedHelpers.pretty_dependency(trees.first[-2])}',"
            else
              ""
            end

            o << gem_not_found_message(name, conflict.requirement, relevant_source, extra_message)
          end

          o
        end
      )
    end
  end
end
PK)"#[���\\<gems/bundler-2.3.27/lib/bundler/source/rubygems_aggregate.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class RubygemsAggregate
      attr_reader :source_map, :sources

      def initialize(sources, source_map)
        @sources = sources
        @source_map = source_map

        @index = build_index
      end

      def specs
        @index
      end

      def identifier
        to_s
      end

      def to_s
        "any of the sources"
      end

      private

      def build_index
        Index.build do |idx|
          dependency_names = source_map.pinned_spec_names

          sources.all_sources.each do |source|
            source.dependency_names = dependency_names - source_map.pinned_spec_names(source)
            idx.add_source source.specs
            dependency_names.concat(source.unmet_deps).uniq!
          end

          double_check_for_index(idx, dependency_names)
        end
      end

      # Suppose the gem Foo depends on the gem Bar.  Foo exists in Source A.  Bar has some versions that exist in both
      # sources A and B.  At this point, the API request will have found all the versions of Bar in source A,
      # but will not have found any versions of Bar from source B, which is a problem if the requested version
      # of Foo specifically depends on a version of Bar that is only found in source B. This ensures that for
      # each spec we found, we add all possible versions from all sources to the index.
      def double_check_for_index(idx, dependency_names)
        pinned_names = source_map.pinned_spec_names

        names = :names # do this so we only have to traverse to get dependency_names from the index once
        unmet_dependency_names = lambda do
          return names unless names == :names
          new_names = sources.all_sources.map(&:dependency_names_to_double_check)
          return names = nil if new_names.compact!
          names = new_names.flatten(1).concat(dependency_names)
          names.uniq!
          names -= pinned_names
          names
        end

        sources.all_sources.each do |source|
          source.double_check_for(unmet_dependency_names)
        end
      end
    end
  end
end
PK)"#[�ƨ'1gems/bundler-2.3.27/lib/bundler/source/gemspec.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Gemspec < Path
      attr_reader :gemspec

      def initialize(options)
        super
        @gemspec = options["gemspec"]
      end

      def as_path_source
        Path.new(options)
      end
    end
  end
end
PK)"#[6]m�<<.gems/bundler-2.3.27/lib/bundler/source/path.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Path < Source
      autoload :Installer, File.expand_path("path/installer", __dir__)

      attr_reader :path, :options, :root_path, :original_path
      attr_writer :name
      attr_accessor :version

      protected :original_path

      DEFAULT_GLOB = "{,*,*/*}.gemspec".freeze

      def initialize(options)
        @options = options.dup
        @glob = options["glob"] || DEFAULT_GLOB

        @allow_cached = false
        @allow_remote = false

        @root_path = options["root_path"] || root

        if options["path"]
          @path = Pathname.new(options["path"])
          expanded_path = expand(@path)
          @path = if @path.relative?
            expanded_path.relative_path_from(root_path.expand_path)
          else
            expanded_path
          end
        end

        @name    = options["name"]
        @version = options["version"]

        # Stores the original path. If at any point we move to the
        # cached directory, we still have the original path to copy from.
        @original_path = @path
      end

      def remote!
        @local_specs = nil
        @allow_remote = true
      end

      def cached!
        @local_specs = nil
        @allow_cached = true
      end

      def self.from_lock(options)
        new(options.merge("path" => options.delete("remote")))
      end

      def to_lock
        out = String.new("PATH\n")
        out << "  remote: #{lockfile_path}\n"
        out << "  glob: #{@glob}\n" unless @glob == DEFAULT_GLOB
        out << "  specs:\n"
      end

      def to_s
        "source at `#{@path}`"
      end

      def hash
        [self.class, expanded_path, version].hash
      end

      def eql?(other)
        return unless other.class == self.class
        expanded_original_path == other.expanded_original_path &&
          version == other.version
      end

      alias_method :==, :eql?

      def name
        File.basename(expanded_path.to_s)
      end

      def install(spec, options = {})
        using_message = "Using #{version_message(spec, options[:previous_spec])} from #{self}"
        using_message += " and installing its executables" unless spec.executables.empty?
        print_using_message using_message
        generate_bin(spec, :disable_extensions => true)
        nil # no post-install message
      end

      def cache(spec, custom_path = nil)
        app_cache_path = app_cache_path(custom_path)
        return unless Bundler.feature_flag.cache_all?
        return if expand(@original_path).to_s.index(root_path.to_s + "/") == 0

        unless @original_path.exist?
          raise GemNotFound, "Can't cache gem #{version_message(spec)} because #{self} is missing!"
        end

        FileUtils.rm_rf(app_cache_path)
        FileUtils.cp_r("#{@original_path}/.", app_cache_path)
        FileUtils.touch(app_cache_path.join(".bundlecache"))
      end

      def local_specs(*)
        @local_specs ||= load_spec_files
      end

      def specs
        if has_app_cache?
          @path = app_cache_path
          @expanded_path = nil # Invalidate
        end
        local_specs
      end

      def app_cache_dirname
        name
      end

      def root
        Bundler.root
      end

      def expanded_original_path
        @expanded_original_path ||= expand(original_path)
      end

      private

      def expanded_path
        @expanded_path ||= expand(path)
      end

      def expand(somepath)
        if Bundler.current_ruby.jruby? # TODO: Unify when https://github.com/rubygems/bundler/issues/7598 fixed upstream and all supported jrubies include the fix
          somepath.expand_path(root_path).expand_path
        else
          somepath.expand_path(root_path)
        end
      rescue ArgumentError => e
        Bundler.ui.debug(e)
        raise PathError, "There was an error while trying to use the path " \
          "`#{somepath}`.\nThe error message was: #{e.message}."
      end

      def lockfile_path
        return relative_path(original_path) if original_path.absolute?
        expand(original_path).relative_path_from(root)
      end

      def app_cache_path(custom_path = nil)
        @app_cache_path ||= Bundler.app_cache(custom_path).join(app_cache_dirname)
      end

      def has_app_cache?
        SharedHelpers.in_bundle? && app_cache_path.exist?
      end

      def load_gemspec(file)
        return unless spec = Bundler.load_gemspec(file)
        Bundler.rubygems.set_installed_by_version(spec)
        spec
      end

      def validate_spec(spec)
        Bundler.rubygems.validate(spec)
      end

      def load_spec_files
        index = Index.new

        if File.directory?(expanded_path)
          # We sort depth-first since `<<` will override the earlier-found specs
          Gem::Util.glob_files_in_dir(@glob, expanded_path).sort_by {|p| -p.split(File::SEPARATOR).size }.each do |file|
            next unless spec = load_gemspec(file)
            spec.source = self

            # Validation causes extension_dir to be calculated, which depends
            # on #source, so we validate here instead of load_gemspec
            validate_spec(spec)
            index << spec
          end

          if index.empty? && @name && @version
            index << Gem::Specification.new do |s|
              s.name     = @name
              s.source   = self
              s.version  = Gem::Version.new(@version)
              s.platform = Gem::Platform::RUBY
              s.summary  = "Fake gemspec for #{@name}"
              s.relative_loaded_from = "#{@name}.gemspec"
              s.authors = ["no one"]
              if expanded_path.join("bin").exist?
                executables = expanded_path.join("bin").children
                executables.reject! {|p| File.directory?(p) }
                s.executables = executables.map {|c| c.basename.to_s }
              end
            end
          end
        else
          message = String.new("The path `#{expanded_path}` ")
          message << if File.exist?(expanded_path)
            "is not a directory."
          else
            "does not exist."
          end
          raise PathError, message
        end

        index
      end

      def relative_path(path = self.path)
        if path.to_s.start_with?(root_path.to_s)
          return path.relative_path_from(root_path)
        end
        path
      end

      def generate_bin(spec, options = {})
        gem_dir = Pathname.new(spec.full_gem_path)

        # Some gem authors put absolute paths in their gemspec
        # and we have to save them from themselves
        spec.files = spec.files.map do |p|
          next p unless p =~ /\A#{Pathname::SEPARATOR_PAT}/
          next if File.directory?(p)
          begin
            Pathname.new(p).relative_path_from(gem_dir).to_s
          rescue ArgumentError
            p
          end
        end.compact

        installer = Path::Installer.new(
          spec,
          :env_shebang => false,
          :disable_extensions => options[:disable_extensions],
          :build_args => options[:build_args],
          :bundler_extension_cache_path => extension_cache_path(spec)
        )
        installer.post_install
      rescue Gem::InvalidSpecificationException => e
        Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" \
                        "This prevents bundler from installing bins or native extensions, but " \
                        "that may not affect its functionality."

        if !spec.extensions.empty? && !spec.email.empty?
          Bundler.ui.warn "If you need to use this package without installing it from a gem " \
                          "repository, please contact #{spec.email} and ask them " \
                          "to modify their .gemspec so it can work with `gem build`."
        end

        Bundler.ui.warn "The validation message from RubyGems was:\n  #{e.message}"
      end
    end
  end
end
PK)"#[E3��$$7gems/bundler-2.3.27/lib/bundler/source/git/git_proxy.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Git
      class GitNotInstalledError < GitError
        def initialize
          msg = String.new
          msg << "You need to install git to be able to use gems from git repositories. "
          msg << "For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git"
          super msg
        end
      end

      class GitNotAllowedError < GitError
        def initialize(command)
          msg = String.new
          msg << "Bundler is trying to run `#{command}` at runtime. You probably need to run `bundle install`. However, "
          msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md "
          msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
          super msg
        end
      end

      class GitCommandError < GitError
        attr_reader :command

        def initialize(command, path, extra_info = nil)
          @command = command

          msg = String.new
          msg << "Git error: command `#{command}` in directory #{path} has failed."
          msg << "\n#{extra_info}" if extra_info
          msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path.exist?
          super msg
        end
      end

      class MissingGitRevisionError < GitCommandError
        def initialize(command, destination_path, ref, repo)
          msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
          super command, destination_path, msg
        end
      end

      # The GitProxy is responsible to interact with git repositories.
      # All actions required by the Git source is encapsulated in this
      # object.
      class GitProxy
        attr_accessor :path, :uri, :ref
        attr_writer :revision

        def initialize(path, uri, ref, revision = nil, git = nil)
          @path     = path
          @uri      = uri
          @ref      = ref
          @revision = revision
          @git      = git
        end

        def revision
          @revision ||= find_local_revision
        end

        def branch
          @branch ||= allowed_with_path do
            git("rev-parse", "--abbrev-ref", "HEAD", :dir => path).strip
          end
        end

        def contains?(commit)
          allowed_with_path do
            result, status = git_null("branch", "--contains", commit, :dir => path)
            status.success? && result =~ /^\* (.*)$/
          end
        end

        def version
          git("--version").match(/(git version\s*)?((\.?\d+)+).*/)[2]
        end

        def full_version
          git("--version").sub("git version", "").strip
        end

        def checkout
          return if path.exist? && has_revision_cached?
          extra_ref = "#{ref}:#{ref}" if ref && ref.start_with?("refs/")

          Bundler.ui.info "Fetching #{URICredentialsFilter.credential_filtered_uri(uri)}"

          configured_uri = configured_uri_for(uri).to_s

          unless path.exist?
            SharedHelpers.filesystem_access(path.dirname) do |p|
              FileUtils.mkdir_p(p)
            end
            git_retry "clone", "--bare", "--no-hardlinks", "--quiet", "--", configured_uri, path.to_s
            return unless extra_ref
          end

          with_path do
            git_retry(*["fetch", "--force", "--quiet", "--tags", "--", configured_uri, "refs/heads/*:refs/heads/*", extra_ref].compact, :dir => path)
          end
        end

        def copy_to(destination, submodules = false)
          # method 1
          unless File.exist?(destination.join(".git"))
            begin
              SharedHelpers.filesystem_access(destination.dirname) do |p|
                FileUtils.mkdir_p(p)
              end
              SharedHelpers.filesystem_access(destination) do |p|
                FileUtils.rm_rf(p)
              end
              git_retry "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s
              File.chmod(((File.stat(destination).mode | 0o777) & ~File.umask), destination)
            rescue Errno::EEXIST => e
              file_path = e.message[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1]
              raise GitError, "Bundler could not install a gem because it needs to " \
                "create a directory, but a file exists - #{file_path}. Please delete " \
                "this file and try again."
            end
          end
          # method 2
          git_retry "fetch", "--force", "--quiet", "--tags", path.to_s, :dir => destination

          begin
            git "reset", "--hard", @revision, :dir => destination
          rescue GitCommandError => e
            raise MissingGitRevisionError.new(e.command, destination, @revision, URICredentialsFilter.credential_filtered_uri(uri))
          end

          if submodules
            git_retry "submodule", "update", "--init", "--recursive", :dir => destination
          elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
            inner_command = "git -C $toplevel submodule deinit --force $sm_path"
            git_retry "submodule", "foreach", "--quiet", inner_command, :dir => destination
          end
        end

        private

        def git_null(*command, dir: nil)
          check_allowed(command)

          out, status = SharedHelpers.with_clean_git_env do
            capture_and_ignore_stderr(*capture3_args_for(command, dir))
          end

          [URICredentialsFilter.credential_filtered_string(out, uri), status]
        end

        def git_retry(*command, dir: nil)
          command_with_no_credentials = check_allowed(command)

          Bundler::Retry.new("`#{command_with_no_credentials}` at #{dir || SharedHelpers.pwd}").attempts do
            git(*command, :dir => dir)
          end
        end

        def git(*command, dir: nil)
          command_with_no_credentials = check_allowed(command)

          out, status = SharedHelpers.with_clean_git_env do
            capture_and_filter_stderr(*capture3_args_for(command, dir))
          end

          filtered_out = URICredentialsFilter.credential_filtered_string(out, uri)

          raise GitCommandError.new(command_with_no_credentials, dir || SharedHelpers.pwd, filtered_out) unless status.success?

          filtered_out
        end

        def has_revision_cached?
          return unless @revision
          with_path { git("cat-file", "-e", @revision, :dir => path) }
          true
        rescue GitError
          false
        end

        def remove_cache
          FileUtils.rm_rf(path)
        end

        def find_local_revision
          allowed_with_path do
            git("rev-parse", "--verify", ref || "HEAD", :dir => path).strip
          end
        rescue GitCommandError => e
          raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
        end

        # Adds credentials to the URI as Fetcher#configured_uri_for does
        def configured_uri_for(uri)
          if /https?:/ =~ uri
            remote = Bundler::URI(uri)
            config_auth = Bundler.settings[remote.to_s] || Bundler.settings[remote.host]
            remote.userinfo ||= config_auth
            remote.to_s
          else
            uri
          end
        end

        def allow?
          allowed = @git ? @git.allow_git_ops? : true

          raise GitNotInstalledError.new if allowed && !Bundler.git_present?

          allowed
        end

        def with_path(&blk)
          checkout unless path.exist?
          blk.call
        end

        def allowed_with_path
          return with_path { yield } if allow?
          raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
        end

        def check_allowed(command)
          require "shellwords"
          command_with_no_credentials = URICredentialsFilter.credential_filtered_string("git #{command.shelljoin}", uri)
          raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
          command_with_no_credentials
        end

        def capture_and_filter_stderr(*cmd)
          require "open3"
          return_value, captured_err, status = Open3.capture3(*cmd)
          Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) unless captured_err.empty?
          [return_value, status]
        end

        def capture_and_ignore_stderr(*cmd)
          require "open3"
          return_value, _, status = Open3.capture3(*cmd)
          [return_value, status]
        end

        def capture3_args_for(cmd, dir)
          return ["git", *cmd] unless dir

          if Bundler.feature_flag.bundler_3_mode? || supports_minus_c?
            ["git", "-C", dir.to_s, *cmd]
          else
            ["git", *cmd, { :chdir => dir.to_s }]
          end
        end

        def supports_minus_c?
          @supports_minus_c ||= Gem::Version.new(version) >= Gem::Version.new("1.8.5")
        end
      end
    end
  end
end
PK)"#[�k�P*P*-gems/bundler-2.3.27/lib/bundler/source/git.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_fileutils"

module Bundler
  class Source
    class Git < Path
      autoload :GitProxy, File.expand_path("git/git_proxy", __dir__)

      attr_reader :uri, :ref, :branch, :options, :glob, :submodules

      def initialize(options)
        @options = options
        @glob = options["glob"] || DEFAULT_GLOB

        @allow_cached = false
        @allow_remote = false

        # Stringify options that could be set as symbols
        %w[ref branch tag revision].each {|k| options[k] = options[k].to_s if options[k] }

        @uri        = options["uri"] || ""
        @safe_uri   = URICredentialsFilter.credential_filtered_uri(@uri)
        @branch     = options["branch"]
        @ref        = options["ref"] || options["branch"] || options["tag"]
        @submodules = options["submodules"]
        @name       = options["name"]
        @version    = options["version"].to_s.strip.gsub("-", ".pre.")

        @copied     = false
        @local      = false
      end

      def self.from_lock(options)
        new(options.merge("uri" => options.delete("remote")))
      end

      def to_lock
        out = String.new("GIT\n")
        out << "  remote: #{@uri}\n"
        out << "  revision: #{revision}\n"
        %w[ref branch tag submodules].each do |opt|
          out << "  #{opt}: #{options[opt]}\n" if options[opt]
        end
        out << "  glob: #{@glob}\n" unless default_glob?
        out << "  specs:\n"
      end

      def hash
        [self.class, uri, ref, branch, name, version, glob, submodules].hash
      end

      def eql?(other)
        other.is_a?(Git) && uri == other.uri && ref == other.ref &&
          branch == other.branch && name == other.name &&
          version == other.version && glob == other.glob &&
          submodules == other.submodules
      end

      alias_method :==, :eql?

      def to_s
        begin
          at = if local?
            path
          elsif user_ref = options["ref"]
            if ref =~ /\A[a-z0-9]{4,}\z/i
              shortref_for_display(user_ref)
            else
              user_ref
            end
          elsif ref
            ref
          else
            git_proxy.branch
          end

          rev = "at #{at}@#{shortref_for_display(revision)}"
        rescue GitError
          ""
        end

        specifiers = [rev, glob_for_display].compact
        suffix =
          if specifiers.any?
            " (#{specifiers.join(", ")})"
          else
            ""
          end

        "#{@safe_uri}#{suffix}"
      end

      def name
        File.basename(@uri, ".git")
      end

      # This is the path which is going to contain a specific
      # checkout of the git repository. When using local git
      # repos, this is set to the local repo.
      def install_path
        @install_path ||= begin
          git_scope = "#{base_name}-#{shortref_for_path(revision)}"

          path = Bundler.install_path.join(git_scope)

          if !path.exist? && Bundler.requires_sudo?
            Bundler.user_bundle_path.join(Bundler.ruby_scope).join(git_scope)
          else
            path
          end
        end
      end

      alias_method :path, :install_path

      def extension_dir_name
        "#{base_name}-#{shortref_for_path(revision)}"
      end

      def unlock!
        git_proxy.revision = nil
        options["revision"] = nil

        @unlocked = true
      end

      def local_override!(path)
        return false if local?

        original_path = path
        path = Pathname.new(path)
        path = path.expand_path(Bundler.root) unless path.relative?

        unless options["branch"] || Bundler.settings[:disable_local_branch_check]
          raise GitError, "Cannot use local override for #{name} at #{path} because " \
            ":branch is not specified in Gemfile. Specify a branch or run " \
            "`bundle config unset local.#{override_for(original_path)}` to remove the local override"
        end

        unless path.exist?
          raise GitError, "Cannot use local override for #{name} because #{path} " \
            "does not exist. Run `bundle config unset local.#{override_for(original_path)}` to remove the local override"
        end

        set_local!(path)

        # Create a new git proxy without the cached revision
        # so the Gemfile.lock always picks up the new revision.
        @git_proxy = GitProxy.new(path, uri, ref)

        if git_proxy.branch != options["branch"] && !Bundler.settings[:disable_local_branch_check]
          raise GitError, "Local override for #{name} at #{path} is using branch " \
            "#{git_proxy.branch} but Gemfile specifies #{options["branch"]}"
        end

        changed = cached_revision && cached_revision != git_proxy.revision

        if !Bundler.settings[:disable_local_revision_check] && changed && !@unlocked && !git_proxy.contains?(cached_revision)
          raise GitError, "The Gemfile lock is pointing to revision #{shortref_for_display(cached_revision)} " \
            "but the current branch in your local override for #{name} does not contain such commit. " \
            "Please make sure your branch is up to date."
        end

        changed
      end

      def specs(*)
        set_local!(app_cache_path) if has_app_cache? && !local?

        if requires_checkout? && !@copied
          fetch
          git_proxy.copy_to(install_path, submodules)
          serialize_gemspecs_in(install_path)
          @copied = true
        end

        local_specs
      end

      def install(spec, options = {})
        force = options[:force]

        print_using_message "Using #{version_message(spec, options[:previous_spec])} from #{self}"

        if (requires_checkout? && !@copied) || force
          Bundler.ui.debug "  * Checking out revision: #{ref}"
          git_proxy.copy_to(install_path, submodules)
          serialize_gemspecs_in(install_path)
          @copied = true
        end

        generate_bin_options = { :disable_extensions => !Bundler.rubygems.spec_missing_extensions?(spec), :build_args => options[:build_args] }
        generate_bin(spec, generate_bin_options)

        requires_checkout? ? spec.post_install_message : nil
      end

      def cache(spec, custom_path = nil)
        app_cache_path = app_cache_path(custom_path)
        return unless Bundler.feature_flag.cache_all?
        return if path == app_cache_path
        cached!
        FileUtils.rm_rf(app_cache_path)
        git_proxy.checkout if requires_checkout?
        git_proxy.copy_to(app_cache_path, @submodules)
        serialize_gemspecs_in(app_cache_path)
      end

      def load_spec_files
        super
      rescue PathError => e
        Bundler.ui.trace e
        raise GitError, "#{self} is not yet checked out. Run `bundle install` first."
      end

      # This is the path which is going to contain a cache
      # of the git repository. When using the same git repository
      # across different projects, this cache will be shared.
      # When using local git repos, this is set to the local repo.
      def cache_path
        @cache_path ||= if Bundler.requires_sudo? || Bundler.feature_flag.global_gem_cache?
          Bundler.user_cache
        else
          Bundler.bundle_path.join("cache", "bundler")
        end.join("git", git_scope)
      end

      def app_cache_dirname
        "#{base_name}-#{shortref_for_path(cached_revision || revision)}"
      end

      def revision
        git_proxy.revision
      end

      def allow_git_ops?
        @allow_remote || @allow_cached
      end

      def local?
        @local
      end

      private

      def serialize_gemspecs_in(destination)
        destination = destination.expand_path(Bundler.root) if destination.relative?
        Dir["#{destination}/#{@glob}"].each do |spec_path|
          # Evaluate gemspecs and cache the result. Gemspecs
          # in git might require git or other dependencies.
          # The gemspecs we cache should already be evaluated.
          spec = Bundler.load_gemspec(spec_path)
          next unless spec
          Bundler.rubygems.set_installed_by_version(spec)
          Bundler.rubygems.validate(spec)
          File.open(spec_path, "wb") {|file| file.write(spec.to_ruby) }
        end
      end

      def set_local!(path)
        @local       = true
        @local_specs = @git_proxy = nil
        @cache_path  = @install_path = path
      end

      def has_app_cache?
        cached_revision && super
      end

      def requires_checkout?
        allow_git_ops? && !local? && !cached_revision_checked_out?
      end

      def cached_revision_checked_out?
        cached_revision && cached_revision == revision && install_path.exist?
      end

      def base_name
        File.basename(uri.sub(%r{^(\w+://)?([^/:]+:)?(//\w*/)?(\w*/)*}, ""), ".git")
      end

      def shortref_for_display(ref)
        ref[0..6]
      end

      def shortref_for_path(ref)
        ref[0..11]
      end

      def glob_for_display
        default_glob? ? nil : "glob: #{@glob}"
      end

      def default_glob?
        @glob == DEFAULT_GLOB
      end

      def uri_hash
        if uri =~ %r{^\w+://(\w+@)?}
          # Downcase the domain component of the URI
          # and strip off a trailing slash, if one is present
          input = Bundler::URI.parse(uri).normalize.to_s.sub(%r{/$}, "")
        else
          # If there is no URI scheme, assume it is an ssh/git URI
          input = uri
        end
        # We use SHA1 here for historical reason and to preserve backward compatibility.
        # But a transition to a simpler mangling algorithm would be welcome.
        Bundler::Digest.sha1(input)
      end

      def cached_revision
        options["revision"]
      end

      def cached?
        cache_path.exist?
      end

      def git_proxy
        @git_proxy ||= GitProxy.new(cache_path, uri, ref, cached_revision, self)
      end

      def fetch
        git_proxy.checkout
      rescue GitError => e
        raise unless Bundler.feature_flag.allow_offline_install?
        Bundler.ui.warn "Using cached git data because of network errors:\n#{e}"
      end

      # no-op, since we validate when re-serializing the gemspec
      def validate_spec(_spec); end

      def load_gemspec(file)
        stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent)
        stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s.tap {|x| x.untaint if RUBY_VERSION < "2.7" }
        StubSpecification.from_stub(stub)
      end

      def git_scope
        "#{base_name}-#{uri_hash}"
      end

      def extension_cache_slug(_)
        extension_dir_name
      end

      def override_for(path)
        Bundler.settings.local_overrides.key(path)
      end
    end
  end
end
PK)"#[�i�EE2gems/bundler-2.3.27/lib/bundler/source/rubygems.rbnu�[���# frozen_string_literal: true

require "rubygems/user_interaction"

module Bundler
  class Source
    class Rubygems < Source
      autoload :Remote, File.expand_path("rubygems/remote", __dir__)

      # Use the API when installing less than X gems
      API_REQUEST_LIMIT = 500
      # Ask for X gems per API request
      API_REQUEST_SIZE = 50

      attr_reader :remotes, :caches

      def initialize(options = {})
        @options = options
        @remotes = []
        @dependency_names = []
        @allow_remote = false
        @allow_cached = false
        @allow_local = options["allow_local"] || false
        @caches = [cache_path, *Bundler.rubygems.gem_cache]

        Array(options["remotes"]).reverse_each {|r| add_remote(r) }
      end

      def local_only!
        @specs = nil
        @allow_local = true
        @allow_cached = false
        @allow_remote = false
      end

      def local!
        return if @allow_local

        @specs = nil
        @allow_local = true
      end

      def remote!
        return if @allow_remote

        @specs = nil
        @allow_remote = true
      end

      def cached!
        return if @allow_cached

        @specs = nil
        @allow_local = true
        @allow_cached = true
      end

      def hash
        @remotes.hash
      end

      def eql?(other)
        other.is_a?(Rubygems) && other.credless_remotes == credless_remotes
      end

      alias_method :==, :eql?

      def include?(o)
        o.is_a?(Rubygems) && (o.credless_remotes - credless_remotes).empty?
      end

      def multiple_remotes?
        @remotes.size > 1
      end

      def no_remotes?
        @remotes.size == 0
      end

      def can_lock?(spec)
        return super unless multiple_remotes?
        include?(spec.source)
      end

      def options
        { "remotes" => @remotes.map(&:to_s) }
      end

      def self.from_lock(options)
        new(options)
      end

      def to_lock
        out = String.new("GEM\n")
        remotes.reverse_each do |remote|
          out << "  remote: #{suppress_configured_credentials remote}\n"
        end
        out << "  specs:\n"
      end

      def to_s
        if remotes.empty?
          "locally installed gems"
        elsif @allow_remote && @allow_cached && @allow_local
          "rubygems repository #{remote_names}, cached gems or installed locally"
        elsif @allow_remote && @allow_local
          "rubygems repository #{remote_names} or installed locally"
        elsif @allow_remote
          "rubygems repository #{remote_names}"
        elsif @allow_cached && @allow_local
          "cached gems or installed locally"
        else
          "locally installed gems"
        end
      end

      def identifier
        if remotes.empty?
          "locally installed gems"
        else
          "rubygems repository #{remote_names}"
        end
      end
      alias_method :name, :identifier

      def specs
        @specs ||= begin
          # remote_specs usually generates a way larger Index than the other
          # sources, and large_idx.use small_idx is way faster than
          # small_idx.use large_idx.
          idx = @allow_remote ? remote_specs.dup : Index.new
          idx.use(cached_specs, :override_dupes) if @allow_cached || @allow_remote
          idx.use(installed_specs, :override_dupes) if @allow_local
          idx
        end
      end

      def install(spec, options = {})
        force = options[:force]
        ensure_builtin_gems_cached = options[:ensure_builtin_gems_cached]

        if ensure_builtin_gems_cached && spec.default_gem? && !cached_path(spec)
          cached_built_in_gem(spec) unless spec.remote
          force = true
        end

        if installed?(spec) && !force
          print_using_message "Using #{version_message(spec)}"
          return nil # no post-install message
        end

        if spec.remote
          # Check for this spec from other sources
          uris = [spec.remote, *remotes_for_spec(spec)].map(&:anonymized_uri).uniq
          Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
        end

        path = fetch_gem_if_possible(spec, options[:previous_spec])
        raise GemNotFound, "Could not find #{spec.file_name} for installation" unless path

        return if Bundler.settings[:no_install]

        if requires_sudo?
          install_path = Bundler.tmp(spec.full_name)
          bin_path     = install_path.join("bin")
        else
          install_path = rubygems_dir
          bin_path     = Bundler.system_bindir
        end

        Bundler.mkdir_p bin_path, :no_sudo => true unless spec.executables.empty? || Bundler.rubygems.provides?(">= 2.7.5")

        require_relative "../rubygems_gem_installer"

        installer = Bundler::RubyGemsGemInstaller.at(
          path,
          :security_policy     => Bundler.rubygems.security_policies[Bundler.settings["trust-policy"]],
          :install_dir         => install_path.to_s,
          :bin_dir             => bin_path.to_s,
          :ignore_dependencies => true,
          :wrappers            => true,
          :env_shebang         => true,
          :build_args          => options[:build_args],
          :bundler_expected_checksum => spec.respond_to?(:checksum) && spec.checksum,
          :bundler_extension_cache_path => extension_cache_path(spec)
        )

        if spec.remote
          s = begin
            installer.spec
          rescue Gem::Package::FormatError
            Bundler.rm_rf(path)
            raise
          rescue Gem::Security::Exception => e
            raise SecurityError,
             "The gem #{File.basename(path, ".gem")} can't be installed because " \
             "the security policy didn't allow it, with the message: #{e.message}"
          end

          spec.__swap__(s)
        end

        message = "Installing #{version_message(spec, options[:previous_spec])}"
        message += " with native extensions" if spec.extensions.any?
        Bundler.ui.confirm message

        installed_spec = installer.install

        spec.full_gem_path = installed_spec.full_gem_path
        spec.loaded_from = installed_spec.loaded_from

        # SUDO HAX
        if requires_sudo?
          Bundler.rubygems.repository_subdirectories.each do |name|
            src = File.join(install_path, name, "*")
            dst = File.join(rubygems_dir, name)
            if name == "extensions" && Dir.glob(src).any?
              src = File.join(src, "*/*")
              ext_src = Dir.glob(src).first
              ext_src.gsub!(src[0..-6], "")
              dst = File.dirname(File.join(dst, ext_src))
            end
            SharedHelpers.filesystem_access(dst) do |p|
              Bundler.mkdir_p(p)
            end
            Bundler.sudo "cp -R #{src} #{dst}" if Dir[src].any?
          end

          spec.executables.each do |exe|
            SharedHelpers.filesystem_access(Bundler.system_bindir) do |p|
              Bundler.mkdir_p(p)
            end
            Bundler.sudo "cp -R #{install_path}/bin/#{exe} #{Bundler.system_bindir}/"
          end
        end

        spec.post_install_message
      ensure
        Bundler.rm_rf(install_path) if requires_sudo?
      end

      def cache(spec, custom_path = nil)
        cached_path = Bundler.settings[:cache_all_platforms] ? fetch_gem_if_possible(spec) : cached_gem(spec)
        raise GemNotFound, "Missing gem file '#{spec.file_name}'." unless cached_path
        return if File.dirname(cached_path) == Bundler.app_cache.to_s
        Bundler.ui.info "  * #{File.basename(cached_path)}"
        FileUtils.cp(cached_path, Bundler.app_cache(custom_path))
      rescue Errno::EACCES => e
        Bundler.ui.debug(e)
        raise InstallError, e.message
      end

      def cached_built_in_gem(spec)
        cached_path = cached_path(spec)
        if cached_path.nil?
          remote_spec = remote_specs.search(spec).first
          if remote_spec
            cached_path = fetch_gem(remote_spec)
          else
            Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it."
          end
        end
        cached_path
      end

      def add_remote(source)
        uri = normalize_uri(source)
        @remotes.unshift(uri) unless @remotes.include?(uri)
      end

      def spec_names
        if @allow_remote && dependency_api_available?
          remote_specs.spec_names
        else
          []
        end
      end

      def unmet_deps
        if @allow_remote && dependency_api_available?
          remote_specs.unmet_dependency_names
        else
          []
        end
      end

      def fetchers
        @fetchers ||= remotes.map do |uri|
          remote = Source::Rubygems::Remote.new(uri)
          Bundler::Fetcher.new(remote)
        end
      end

      def double_check_for(unmet_dependency_names)
        return unless @allow_remote
        return unless dependency_api_available?

        unmet_dependency_names = unmet_dependency_names.call
        unless unmet_dependency_names.nil?
          if api_fetchers.size <= 1
            # can't do this when there are multiple fetchers because then we might not fetch from _all_
            # of them
            unmet_dependency_names -= remote_specs.spec_names # avoid re-fetching things we've already gotten
          end
          return if unmet_dependency_names.empty?
        end

        Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}"

        fetch_names(api_fetchers, unmet_dependency_names, specs, false)
      end

      def dependency_names_to_double_check
        names = []
        remote_specs.each do |spec|
          case spec
          when EndpointSpecification, Gem::Specification, StubSpecification, LazySpecification
            names.concat(spec.runtime_dependencies.map(&:name))
          when RemoteSpecification # from the full index
            return nil
          else
            raise "unhandled spec type (#{spec.inspect})"
          end
        end
        names
      end

      def dependency_api_available?
        api_fetchers.any?
      end

      protected

      def remote_names
        remotes.map(&:to_s).join(", ")
      end

      def credless_remotes
        if Bundler.settings[:allow_deployment_source_credential_changes]
          remotes.map(&method(:remove_auth))
        else
          remotes.map(&method(:suppress_configured_credentials))
        end
      end

      def remotes_for_spec(spec)
        specs.search_all(spec.name).inject([]) do |uris, s|
          uris << s.remote if s.remote
          uris
        end
      end

      def cached_gem(spec)
        if spec.default_gem?
          cached_built_in_gem(spec)
        else
          cached_path(spec)
        end
      end

      def cached_path(spec)
        global_cache_path = download_cache_path(spec)
        @caches << global_cache_path if global_cache_path

        possibilities = @caches.map {|p| package_path(p, spec) }
        possibilities.find {|p| File.exist?(p) }
      end

      def package_path(cache_path, spec)
        "#{cache_path}/#{spec.file_name}"
      end

      def normalize_uri(uri)
        uri = uri.to_s
        uri = "#{uri}/" unless uri =~ %r{/$}
        require_relative "../vendored_uri"
        uri = Bundler::URI(uri)
        raise ArgumentError, "The source must be an absolute URI. For example:\n" \
          "source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Bundler::URI::HTTP) && uri.host.nil?)
        uri
      end

      def suppress_configured_credentials(remote)
        remote_nouser = remove_auth(remote)
        if remote.userinfo && remote.userinfo == Bundler.settings[remote_nouser]
          remote_nouser
        else
          remote
        end
      end

      def remove_auth(remote)
        if remote.user || remote.password
          remote.dup.tap {|uri| uri.user = uri.password = nil }.to_s
        else
          remote.to_s
        end
      end

      def installed_specs
        @installed_specs ||= Index.build do |idx|
          Bundler.rubygems.all_specs.reverse_each do |spec|
            spec.source = self
            if Bundler.rubygems.spec_missing_extensions?(spec, false)
              Bundler.ui.debug "Source #{self} is ignoring #{spec} because it is missing extensions"
              next
            end
            idx << spec
          end
        end
      end

      def cached_specs
        @cached_specs ||= begin
          idx = @allow_local ? installed_specs.dup : Index.new

          Dir["#{cache_path}/*.gem"].each do |gemfile|
            next if gemfile =~ /^bundler\-[\d\.]+?\.gem/
            s ||= Bundler.rubygems.spec_from_gem(gemfile)
            s.source = self
            idx << s
          end

          idx
        end
      end

      def api_fetchers
        fetchers.select {|f| f.use_api && f.fetchers.first.api_fetcher? }
      end

      def remote_specs
        @remote_specs ||= Index.build do |idx|
          index_fetchers = fetchers - api_fetchers

          # gather lists from non-api sites
          fetch_names(index_fetchers, nil, idx, false)

          # because ensuring we have all the gems we need involves downloading
          # the gemspecs of those gems, if the non-api sites contain more than
          # about 500 gems, we treat all sites as non-api for speed.
          allow_api = idx.size < API_REQUEST_LIMIT && dependency_names.size < API_REQUEST_LIMIT
          Bundler.ui.debug "Need to query more than #{API_REQUEST_LIMIT} gems." \
            " Downloading full index instead..." unless allow_api

          fetch_names(api_fetchers, allow_api && dependency_names, idx, false)
        end
      end

      def fetch_names(fetchers, dependency_names, index, override_dupes)
        fetchers.each do |f|
          if dependency_names
            Bundler.ui.info "Fetching gem metadata from #{URICredentialsFilter.credential_filtered_uri(f.uri)}", Bundler.ui.debug?
            index.use f.specs_with_retry(dependency_names, self), override_dupes
            Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
          else
            Bundler.ui.info "Fetching source index from #{URICredentialsFilter.credential_filtered_uri(f.uri)}"
            index.use f.specs_with_retry(nil, self), override_dupes
          end
        end
      end

      def fetch_gem_if_possible(spec, previous_spec = nil)
        if spec.remote
          fetch_gem(spec, previous_spec)
        else
          cached_gem(spec)
        end
      end

      def fetch_gem(spec, previous_spec = nil)
        spec.fetch_platform

        cache_path = download_cache_path(spec) || default_cache_path_for(rubygems_dir)
        gem_path = package_path(cache_path, spec)
        return gem_path if File.exist?(gem_path)

        if requires_sudo?
          download_path = Bundler.tmp(spec.full_name)
          download_cache_path = default_cache_path_for(download_path)
        else
          download_cache_path = cache_path
        end

        SharedHelpers.filesystem_access(download_cache_path) do |p|
          FileUtils.mkdir_p(p)
        end
        download_gem(spec, download_cache_path, previous_spec)

        if requires_sudo?
          SharedHelpers.filesystem_access(cache_path) do |p|
            Bundler.mkdir_p(p)
          end
          Bundler.sudo "mv #{package_path(download_cache_path, spec)} #{gem_path}"
        end

        gem_path
      ensure
        Bundler.rm_rf(download_path) if requires_sudo?
      end

      def installed?(spec)
        installed_specs[spec].any? && !spec.deleted_gem?
      end

      def requires_sudo?
        Bundler.requires_sudo?
      end

      def rubygems_dir
        Bundler.bundle_path
      end

      def default_cache_path_for(dir)
        "#{dir}/cache"
      end

      def cache_path
        Bundler.app_cache
      end

      private

      # Checks if the requested spec exists in the global cache. If it does,
      # we copy it to the download path, and if it does not, we download it.
      #
      # @param  [Specification] spec
      #         the spec we want to download or retrieve from the cache.
      #
      # @param  [String] download_cache_path
      #         the local directory the .gem will end up in.
      #
      # @param  [Specification] previous_spec
      #         the spec previously locked
      #
      def download_gem(spec, download_cache_path, previous_spec = nil)
        uri = spec.remote.uri
        Bundler.ui.confirm("Fetching #{version_message(spec, previous_spec)}")
        Bundler.rubygems.download_gem(spec, uri, download_cache_path)
      end

      # Returns the global cache path of the calling Rubygems::Source object.
      #
      # Note that the Source determines the path's subdirectory. We use this
      # subdirectory in the global cache path so that gems with the same name
      # -- and possibly different versions -- from different sources are saved
      # to their respective subdirectories and do not override one another.
      #
      # @param  [Gem::Specification] specification
      #
      # @return [Pathname] The global cache path.
      #
      def download_cache_path(spec)
        return unless Bundler.feature_flag.global_gem_cache?
        return unless remote = spec.remote
        return unless cache_slug = remote.cache_slug

        Bundler.user_cache.join("gems", cache_slug)
      end

      def extension_cache_slug(spec)
        return unless remote = spec.remote
        remote.cache_slug
      end
    end
  end
end
PK)"#[�:U''9gems/bundler-2.3.27/lib/bundler/source/rubygems/remote.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Rubygems
      class Remote
        attr_reader :uri, :anonymized_uri, :original_uri

        def initialize(uri)
          orig_uri = uri
          uri = Bundler.settings.mirror_for(uri)
          @original_uri = orig_uri if orig_uri != uri
          fallback_auth = Bundler.settings.credentials_for(uri)

          @uri = apply_auth(uri, fallback_auth).freeze
          @anonymized_uri = remove_auth(@uri).freeze
        end

        # @return [String] A slug suitable for use as a cache key for this
        #         remote.
        #
        def cache_slug
          @cache_slug ||= begin
            return nil unless SharedHelpers.md5_available?

            cache_uri = original_uri || uri

            host = cache_uri.to_s.start_with?("file://") ? nil : cache_uri.host

            uri_parts = [host, cache_uri.user, cache_uri.port, cache_uri.path]
            uri_digest = SharedHelpers.digest(:MD5).hexdigest(uri_parts.compact.join("."))

            uri_parts[-1] = uri_digest
            uri_parts.compact.join(".")
          end
        end

        def to_s
          "rubygems remote at #{anonymized_uri}"
        end

        private

        def apply_auth(uri, auth)
          if auth && uri.userinfo.nil?
            uri = uri.dup
            uri.userinfo = auth
          end

          uri
        rescue Bundler::URI::InvalidComponentError
          error_message = "Please CGI escape your usernames and passwords before " \
                          "setting them for authentication."
          raise HTTPError.new(error_message)
        end

        def remove_auth(uri)
          if uri.userinfo
            uri = uri.dup
            uri.user = uri.password = nil
          end

          uri
        end
      end
    end
  end
end
PK)"#[M9��MM2gems/bundler-2.3.27/lib/bundler/source/metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  class Source
    class Metadata < Source
      def specs
        @specs ||= Index.build do |idx|
          idx << Gem::Specification.new("Ruby\0", Gem.ruby_version)
          idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
            s.required_rubygems_version = Gem::Requirement.default
          end

          idx << Gem::Specification.new do |s|
            s.name     = "bundler"
            s.version  = VERSION
            s.license  = "MIT"
            s.platform = Gem::Platform::RUBY
            s.source   = self
            s.authors  = ["bundler team"]
            s.bindir   = "exe"
            s.homepage = "https://bundler.io"
            s.summary  = "The best way to manage your application's dependencies"
            s.executables = %w[bundle]
            # can't point to the actual gemspec or else the require paths will be wrong
            s.loaded_from = __dir__
          end

          if local_spec = Bundler.rubygems.find_bundler(VERSION)
            idx << local_spec
          end

          idx.each {|s| s.source = self }
        end
      end

      def options
        {}
      end

      def install(spec, _opts = {})
        print_using_message "Using #{version_message(spec)}"
        nil
      end

      def to_s
        "the local ruby installation"
      end

      def ==(other)
        self.class == other.class
      end
      alias_method :eql?, :==

      def hash
        self.class.hash
      end

      def version_message(spec)
        "#{spec.name} #{spec.version}"
      end
    end
  end
end
PK)"#[u�R!xx8gems/bundler-2.3.27/lib/bundler/source/path/installer.rbnu�[���# frozen_string_literal: true

require_relative "../../rubygems_gem_installer"

module Bundler
  class Source
    class Path
      class Installer < Bundler::RubyGemsGemInstaller
        attr_reader :spec

        def initialize(spec, options = {})
          @options            = options
          @spec               = spec
          @gem_dir            = Bundler.rubygems.path(spec.full_gem_path)
          @wrappers           = true
          @env_shebang        = true
          @format_executable  = options[:format_executable] || false
          @build_args         = options[:build_args] || Bundler.rubygems.build_args
          @gem_bin_dir        = "#{Bundler.rubygems.gem_dir}/bin"
          @disable_extensions = options[:disable_extensions]

          if Bundler.requires_sudo?
            @tmp_dir = Bundler.tmp(spec.full_name).to_s
            @bin_dir = "#{@tmp_dir}/bin"
          else
            @bin_dir = @gem_bin_dir
          end
        end

        def post_install
          run_hooks(:pre_install)

          unless @disable_extensions
            build_extensions
            run_hooks(:post_build)
          end

          generate_bin unless spec.executables.empty?

          run_hooks(:post_install)
        ensure
          Bundler.rm_rf(@tmp_dir) if Bundler.requires_sudo?
        end

        private

        def generate_bin
          super

          if Bundler.requires_sudo?
            SharedHelpers.filesystem_access(@gem_bin_dir) do |p|
              Bundler.mkdir_p(p)
            end
            spec.executables.each do |exe|
              Bundler.sudo "cp -R #{@bin_dir}/#{exe} #{@gem_bin_dir}"
            end
          end
        end

        def run_hooks(type)
          hooks_meth = "#{type}_hooks"
          return unless Gem.respond_to?(hooks_meth)
          Gem.send(hooks_meth).each do |hook|
            result = hook.call(self)
            next unless result == false
            location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
            message = "#{type} hook#{location} failed for #{spec.full_name}"
            raise InstallHookError, message
          end
        end
      end
    end
  end
end
PK)"#[un�uu(gems/bundler-2.3.27/lib/bundler/retry.rbnu�[���# frozen_string_literal: true

module Bundler
  # General purpose class for retrying code that may fail
  class Retry
    attr_accessor :name, :total_runs, :current_run

    class << self
      def default_attempts
        default_retries + 1
      end
      alias_method :attempts, :default_attempts

      def default_retries
        Bundler.settings[:retry]
      end
    end

    def initialize(name, exceptions = nil, retries = self.class.default_retries)
      @name = name
      @retries = retries
      @exceptions = Array(exceptions) || []
      @total_runs = @retries + 1 # will run once, then upto attempts.times
    end

    def attempt(&block)
      @current_run = 0
      @failed      = false
      @error       = nil
      run(&block) while keep_trying?
      @result
    end
    alias_method :attempts, :attempt

    private

    def run(&block)
      @failed = false
      @current_run += 1
      @result = block.call
    rescue StandardError => e
      fail_attempt(e)
    end

    def fail_attempt(e)
      @failed = true
      if last_attempt? || @exceptions.any? {|k| e.is_a?(k) }
        Bundler.ui.info "" unless Bundler.ui.debug?
        raise e
      end
      return true unless name
      Bundler.ui.info "" unless Bundler.ui.debug? # Add new line in case dots preceded this
      Bundler.ui.warn "Retrying #{name} due to error (#{current_run.next}/#{total_runs}): #{e.class} #{e.message}", Bundler.ui.debug?
    end

    def keep_trying?
      return true  if current_run.zero?
      return false if last_attempt?
      return true  if @failed
    end

    def last_attempt?
      current_run >= total_runs
    end
  end
end
PK)"#[�_���/gems/bundler-2.3.27/lib/bundler/process_lock.rbnu�[���# frozen_string_literal: true

module Bundler
  class ProcessLock
    def self.lock(bundle_path = Bundler.bundle_path)
      lock_file_path = File.join(bundle_path, "bundler.lock")
      has_lock = false

      File.open(lock_file_path, "w") do |f|
        f.flock(File::LOCK_EX)
        has_lock = true
        yield
        f.flock(File::LOCK_UN)
      end
    rescue Errno::EACCES, Errno::ENOLCK, Errno::ENOTSUP, Errno::EPERM, Errno::EROFS
      # In the case the user does not have access to
      # create the lock file or is using NFS where
      # locks are not available we skip locking.
      yield
    ensure
      FileUtils.rm_f(lock_file_path) if has_lock
    end
  end
end
PK)"#[��9gems/bundler-2.3.27/lib/bundler/rubygems_gem_installer.rbnu�[���# frozen_string_literal: true

require "rubygems/installer"

module Bundler
  class RubyGemsGemInstaller < Gem::Installer
    def check_executable_overwrite(filename)
      # Bundler needs to install gems regardless of binstub overwriting
    end

    def install
      pre_install_checks

      run_pre_install_hooks

      spec.loaded_from = spec_file

      # Completely remove any previous gem files
      strict_rm_rf gem_dir
      strict_rm_rf spec.extension_dir

      SharedHelpers.filesystem_access(gem_dir, :create) do
        FileUtils.mkdir_p gem_dir, :mode => 0o755
      end

      extract_files

      build_extensions if spec.extensions.any?
      write_build_info_file
      run_post_build_hooks

      generate_bin
      generate_plugins

      write_spec

      SharedHelpers.filesystem_access("#{gem_home}/cache", :write) do
        write_cache_file
      end

      say spec.post_install_message unless spec.post_install_message.nil?

      run_post_install_hooks

      spec
    end

    def generate_plugins
      return unless Gem::Installer.instance_methods(false).include?(:generate_plugins)

      latest = Gem::Specification.stubs_for(spec.name).first
      return if latest && latest.version > spec.version

      ensure_writable_dir @plugins_dir

      if spec.plugins.empty?
        remove_plugins_for(spec, @plugins_dir)
      else
        regenerate_plugins_for(spec, @plugins_dir)
      end
    end

    def pre_install_checks
      super && validate_bundler_checksum(options[:bundler_expected_checksum])
    end

    def build_extensions
      extension_cache_path = options[:bundler_extension_cache_path]
      extension_dir = spec.extension_dir
      unless extension_cache_path && extension_dir
        prepare_extension_build(extension_dir)
        return super
      end

      build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
      if build_complete && !options[:force]
        SharedHelpers.filesystem_access(File.dirname(extension_dir)) do |p|
          FileUtils.mkpath p
        end
        SharedHelpers.filesystem_access(extension_cache_path) do
          FileUtils.cp_r extension_cache_path, extension_dir
        end
      else
        prepare_extension_build(extension_dir)
        super
        SharedHelpers.filesystem_access(extension_cache_path.parent, &:mkpath)
        SharedHelpers.filesystem_access(extension_cache_path) do
          FileUtils.cp_r extension_dir, extension_cache_path
        end
      end
    end

    def spec
      if Bundler.rubygems.provides?("< 3.3.12") # RubyGems implementation rescues and re-raises errors before 3.3.12 and we don't want that
        @package.spec
      else
        super
      end
    end

    private

    def prepare_extension_build(extension_dir)
      SharedHelpers.filesystem_access(extension_dir, :create) do
        FileUtils.mkdir_p extension_dir
      end
      require "shellwords" unless Bundler.rubygems.provides?(">= 3.2.25")
    end

    def strict_rm_rf(dir)
      Bundler.rm_rf dir
    rescue Errno::ENOTEMPTY => e
      raise DirectoryRemovalError.new(e.cause, "Could not delete previous installation of `#{dir}`")
    end

    def validate_bundler_checksum(checksum)
      return true if Bundler.settings[:disable_checksum_validation]
      return true unless checksum
      return true unless source = @package.instance_variable_get(:@gem)
      return true unless source.respond_to?(:with_read_io)
      digest = source.with_read_io do |io|
        digest = SharedHelpers.digest(:SHA256).new
        digest << io.read(16_384) until io.eof?
        io.rewind
        send(checksum_type(checksum), digest)
      end
      unless digest == checksum
        raise SecurityError, <<-MESSAGE
          Bundler cannot continue installing #{spec.name} (#{spec.version}).
          The checksum for the downloaded `#{spec.full_name}.gem` does not match \
          the checksum given by the server. This means the contents of the downloaded \
          gem is different from what was uploaded to the server, and could be a potential security issue.

          To resolve this issue:
          1. delete the downloaded gem located at: `#{spec.gem_dir}/#{spec.full_name}.gem`
          2. run `bundle install`

          If you wish to continue installing the downloaded gem, and are certain it does not pose a \
          security issue despite the mismatching checksum, do the following:
          1. run `bundle config set --local disable_checksum_validation true` to turn off checksum verification
          2. run `bundle install`

          (More info: The expected SHA256 checksum was #{checksum.inspect}, but the \
          checksum for the downloaded gem was #{digest.inspect}.)
          MESSAGE
      end
      true
    end

    def checksum_type(checksum)
      case checksum.length
      when 64 then :hexdigest!
      when 44 then :base64digest!
      else raise InstallError, "The given checksum for #{spec.full_name} (#{checksum.inspect}) is not a valid SHA256 hexdigest nor base64digest"
      end
    end

    def hexdigest!(digest)
      digest.hexdigest!
    end

    def base64digest!(digest)
      if digest.respond_to?(:base64digest!)
        digest.base64digest!
      else
        [digest.digest!].pack("m0")
      end
    end
  end
end
PK)"#[�eA�ss-gems/bundler-2.3.27/lib/bundler/capistrano.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2,
  "The Bundler task for Capistrano. Please use https://github.com/capistrano/bundler"

# Capistrano task for Bundler.
#
# Add "require 'bundler/capistrano'" in your Capistrano deploy.rb, and
# Bundler will be activated after each new deployment.
require_relative "deployment"
require "capistrano/version"

if defined?(Capistrano::Version) && Gem::Version.new(Capistrano::Version).release >= Gem::Version.new("3.0")
  raise "For Capistrano 3.x integration, please use https://github.com/capistrano/bundler"
end

Capistrano::Configuration.instance(:must_exist).load do
  before "deploy:finalize_update", "bundle:install"
  Bundler::Deployment.define_task(self, :task, :except => { :no_release => true })
  set :rake, lambda { "#{fetch(:bundle_cmd, "bundle")} exec rake" }
end
PK*"#[��IVV.gems/bundler-2.3.27/lib/bundler/gem_helpers.rbnu�[���# frozen_string_literal: true

module Bundler
  module GemHelpers
    GENERIC_CACHE = { Gem::Platform::RUBY => Gem::Platform::RUBY } # rubocop:disable Style/MutableConstant
    GENERICS = [
      [Gem::Platform.new("java"), Gem::Platform.new("java")],
      [Gem::Platform.new("mswin32"), Gem::Platform.new("mswin32")],
      [Gem::Platform.new("mswin64"), Gem::Platform.new("mswin64")],
      [Gem::Platform.new("universal-mingw32"), Gem::Platform.new("universal-mingw32")],
      [Gem::Platform.new("x64-mingw32"), Gem::Platform.new("x64-mingw32")],
      [Gem::Platform.new("x86_64-mingw32"), Gem::Platform.new("x64-mingw32")],
      [Gem::Platform.new("x64-mingw-ucrt"), Gem::Platform.new("x64-mingw-ucrt")],
      [Gem::Platform.new("mingw32"), Gem::Platform.new("x86-mingw32")],
    ].freeze

    def generic(p)
      GENERIC_CACHE[p] ||= begin
        _, found = GENERICS.find do |match, _generic|
          p.os == match.os && (!match.cpu || p.cpu == match.cpu)
        end
        found || Gem::Platform::RUBY
      end
    end
    module_function :generic

    def generic_local_platform
      generic(local_platform)
    end
    module_function :generic_local_platform

    def local_platform
      Bundler.local_platform
    end
    module_function :local_platform

    def platform_specificity_match(spec_platform, user_platform)
      spec_platform = Gem::Platform.new(spec_platform)

      PlatformMatch.specificity_score(spec_platform, user_platform)
    end
    module_function :platform_specificity_match

    def select_best_platform_match(specs, platform)
      matching = specs.select {|spec| spec.match_platform(platform) }

      sort_best_platform_match(matching, platform)
    end
    module_function :select_best_platform_match

    def sort_best_platform_match(matching, platform)
      exact = matching.select {|spec| spec.platform == platform }
      return exact if exact.any?

      sorted_matching = matching.sort_by {|spec| platform_specificity_match(spec.platform, platform) }
      exemplary_spec = sorted_matching.first

      sorted_matching.take_while {|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) }
    end
    module_function :sort_best_platform_match

    class PlatformMatch
      def self.specificity_score(spec_platform, user_platform)
        return -1 if spec_platform == user_platform
        return 1_000_000 if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY

        os_match(spec_platform, user_platform) +
          cpu_match(spec_platform, user_platform) * 10 +
          platform_version_match(spec_platform, user_platform) * 100
      end

      def self.os_match(spec_platform, user_platform)
        if spec_platform.os == user_platform.os
          0
        else
          1
        end
      end

      def self.cpu_match(spec_platform, user_platform)
        if spec_platform.cpu == user_platform.cpu
          0
        elsif spec_platform.cpu == "arm" && user_platform.cpu.to_s.start_with?("arm")
          0
        elsif spec_platform.cpu.nil? || spec_platform.cpu == "universal"
          1
        else
          2
        end
      end

      def self.platform_version_match(spec_platform, user_platform)
        if spec_platform.version == user_platform.version
          0
        elsif spec_platform.version.nil?
          1
        else
          2
        end
      end
    end

    def same_specificity(platform, spec, exemplary_spec)
      platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform)
    end
    module_function :same_specificity

    def same_deps(spec, exemplary_spec)
      same_runtime_deps = spec.dependencies.sort == exemplary_spec.dependencies.sort
      return same_runtime_deps unless spec.is_a?(Gem::Specification) && exemplary_spec.is_a?(Gem::Specification)

      same_metadata_deps = spec.required_ruby_version == exemplary_spec.required_ruby_version && spec.required_rubygems_version == exemplary_spec.required_rubygems_version
      same_runtime_deps && same_metadata_deps
    end
    module_function :same_deps
  end
end
PK*"#[��[5��6gems/bundler-2.3.27/lib/bundler/vendored_persistent.rbnu�[���# frozen_string_literal: true

module Bundler
  module Persistent
    module Net
      module HTTP
      end
    end
  end
end
require_relative "vendor/net-http-persistent/lib/net/http/persistent"

module Bundler
  class PersistentHTTP < Persistent::Net::HTTP::Persistent
    def connection_for(uri)
      super(uri) do |connection|
        result = yield connection
        warn_old_tls_version_rubygems_connection(uri, connection)
        result
      end
    end

    def warn_old_tls_version_rubygems_connection(uri, connection)
      return unless connection.http.use_ssl?
      return unless (uri.host || "").end_with?("rubygems.org")

      socket = connection.instance_variable_get(:@socket)
      return unless socket
      socket_io = socket.io
      return unless socket_io.respond_to?(:ssl_version)
      ssl_version = socket_io.ssl_version

      case ssl_version
      when /TLSv([\d\.]+)/
        version = Gem::Version.new($1)
        if version < Gem::Version.new("1.2")
          Bundler.ui.warn \
            "Warning: Your Ruby version is compiled against a copy of OpenSSL that is very old. " \
            "Starting in January 2018, RubyGems.org will refuse connection requests from these " \
            "very old versions of OpenSSL. If you will need to continue installing gems after " \
            "January 2018, please follow this guide to upgrade: http://ruby.to/tls-outdated.",
            :wrap => true
        end
      end
    end
  end
end
PK*"#[Htd]]1gems/bundler-2.3.27/lib/bundler/vendored_tsort.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/tsort/lib/tsort"
PK*"#[�_����1gems/bundler-2.3.27/lib/bundler/build_metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  # Represents metadata from when the Bundler gem was built.
  module BuildMetadata
    # begin ivars
    @release = false
    # end ivars

    # A hash representation of the build metadata.
    def self.to_h
      {
        "Built At" => built_at,
        "Git SHA" => git_commit_sha,
        "Released Version" => release?,
      }
    end

    # A string representing the date the bundler gem was built.
    def self.built_at
      @built_at ||= Time.now.utc.strftime("%Y-%m-%d").freeze
    end

    # The SHA for the git commit the bundler gem was built from.
    def self.git_commit_sha
      return @git_commit_sha if instance_variable_defined? :@git_commit_sha

      # If Bundler has been installed without its .git directory and without a
      # commit instance variable then we can't determine its commits SHA.
      git_dir = File.expand_path("../../../.git", __dir__)
      if File.directory?(git_dir)
        return @git_commit_sha = Dir.chdir(git_dir) { `git rev-parse --short HEAD`.strip.freeze }
      end

      @git_commit_sha ||= "unknown"
    end

    # Whether this is an official release build of Bundler.
    def self.release?
      @release
    end
  end
end
PK*"#[}X���,gems/bundler-2.3.27/lib/bundler/gem_tasks.rbnu�[���# frozen_string_literal: true

require "rake/clean"
CLOBBER.include "pkg"

require_relative "gem_helper"
Bundler::GemHelper.install_tasks
PK*"#[�`��	�	/gems/bundler-2.3.27/lib/bundler/current_ruby.rbnu�[���# frozen_string_literal: true

module Bundler
  # Returns current version of Ruby
  #
  # @return [CurrentRuby] Current version of Ruby
  def self.current_ruby
    @current_ruby ||= CurrentRuby.new
  end

  class CurrentRuby
    KNOWN_MINOR_VERSIONS = %w[
      1.8
      1.9
      2.0
      2.1
      2.2
      2.3
      2.4
      2.5
      2.6
      2.7
      3.0
      3.1
    ].freeze

    KNOWN_MAJOR_VERSIONS = KNOWN_MINOR_VERSIONS.map {|v| v.split(".", 2).first }.uniq.freeze

    KNOWN_PLATFORMS = %w[
      jruby
      maglev
      mingw
      mri
      mswin
      mswin64
      rbx
      ruby
      truffleruby
      windows
      x64_mingw
    ].freeze

    def ruby?
      return true if Bundler::GemHelpers.generic_local_platform == Gem::Platform::RUBY

      !windows? && (RUBY_ENGINE == "ruby" || RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
    end

    def mri?
      !windows? && RUBY_ENGINE == "ruby"
    end

    def rbx?
      ruby? && RUBY_ENGINE == "rbx"
    end

    def jruby?
      RUBY_ENGINE == "jruby"
    end

    def maglev?
      RUBY_ENGINE == "maglev"
    end

    def truffleruby?
      RUBY_ENGINE == "truffleruby"
    end

    def windows?
      Gem.win_platform?
    end

    def mswin?
      # For backwards compatibility
      windows?

      # TODO: This should correctly be:
      # windows? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os == "mswin32" && Bundler.local_platform.cpu == "x86"
    end

    def mswin64?
      windows? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os == "mswin64" && Bundler.local_platform.cpu == "x64"
    end

    def mingw?
      windows? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu != "x64"
    end

    def x64_mingw?
      Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && Bundler.local_platform.os.start_with?("mingw") && Bundler.local_platform.cpu == "x64"
    end

    (KNOWN_MINOR_VERSIONS + KNOWN_MAJOR_VERSIONS).each do |version|
      trimmed_version = version.tr(".", "")
      define_method(:"on_#{trimmed_version}?") do
        RUBY_VERSION.start_with?("#{version}.")
      end

      KNOWN_PLATFORMS.each do |platform|
        define_method(:"#{platform}_#{trimmed_version}?") do
          send(:"#{platform}?") && send(:"on_#{trimmed_version}?")
        end
      end
    end
  end
end
PK*"#[B$h�HH)gems/bundler-2.3.27/lib/bundler/mirror.rbnu�[���# frozen_string_literal: true

require "socket"

module Bundler
  class Settings
    # Class used to build the mirror set and then find a mirror for a given URI
    #
    # @param prober [Prober object, nil] by default a TCPSocketProbe, this object
    #   will be used to probe the mirror address to validate that the mirror replies.
    class Mirrors
      def initialize(prober = nil)
        @all = Mirror.new
        @prober = prober || TCPSocketProbe.new
        @mirrors = {}
      end

      # Returns a mirror for the given uri.
      #
      # Depending on the uri having a valid mirror or not, it may be a
      #   mirror that points to the provided uri
      def for(uri)
        if @all.validate!(@prober).valid?
          @all
        else
          fetch_valid_mirror_for(Settings.normalize_uri(uri))
        end
      end

      def each
        @mirrors.each do |k, v|
          yield k, v.uri.to_s
        end
      end

      def parse(key, value)
        config = MirrorConfig.new(key, value)
        mirror = if config.all?
          @all
        else
          @mirrors[config.uri] ||= Mirror.new
        end
        config.update_mirror(mirror)
      end

      private

      def fetch_valid_mirror_for(uri)
        downcased = uri.to_s.downcase
        mirror = @mirrors[downcased] || @mirrors[Bundler::URI(downcased).host] || Mirror.new(uri)
        mirror.validate!(@prober)
        mirror = Mirror.new(uri) unless mirror.valid?
        mirror
      end
    end

    # A mirror
    #
    # Contains both the uri that should be used as a mirror and the
    #   fallback timeout which will be used for probing if the mirror
    #   replies on time or not.
    class Mirror
      DEFAULT_FALLBACK_TIMEOUT = 0.1

      attr_reader :uri, :fallback_timeout

      def initialize(uri = nil, fallback_timeout = 0)
        self.uri = uri
        self.fallback_timeout = fallback_timeout
        @valid = nil
      end

      def uri=(uri)
        @uri = if uri.nil?
          nil
        else
          Bundler::URI(uri.to_s)
        end
        @valid = nil
      end

      def fallback_timeout=(timeout)
        case timeout
        when true, "true"
          @fallback_timeout = DEFAULT_FALLBACK_TIMEOUT
        when false, "false"
          @fallback_timeout = 0
        else
          @fallback_timeout = timeout.to_i
        end
        @valid = nil
      end

      def ==(other)
        !other.nil? && uri == other.uri && fallback_timeout == other.fallback_timeout
      end

      def valid?
        return false if @uri.nil?
        return @valid unless @valid.nil?
        false
      end

      def validate!(probe = nil)
        @valid = false if uri.nil?
        if @valid.nil?
          @valid = fallback_timeout == 0 || (probe || TCPSocketProbe.new).replies?(self)
        end
        self
      end
    end

    # Class used to parse one configuration line
    #
    # Gets the configuration line and the value.
    #   This object provides a `update_mirror` method
    #   used to setup the given mirror value.
    class MirrorConfig
      attr_accessor :uri, :value

      def initialize(config_line, value)
        uri, fallback =
          config_line.match(%r{\Amirror\.(all|.+?)(\.fallback_timeout)?\/?\z}).captures
        @fallback = !fallback.nil?
        @all = false
        if uri == "all"
          @all = true
        else
          @uri = Bundler::URI(uri).absolute? ? Settings.normalize_uri(uri) : uri
        end
        @value = value
      end

      def all?
        @all
      end

      def update_mirror(mirror)
        if @fallback
          mirror.fallback_timeout = @value
        else
          mirror.uri = Settings.normalize_uri(@value)
        end
      end
    end

    # Class used for probing TCP availability for a given mirror.
    class TCPSocketProbe
      def replies?(mirror)
        MirrorSockets.new(mirror).any? do |socket, address, timeout|
          begin
            socket.connect_nonblock(address)
          rescue Errno::EINPROGRESS
            wait_for_writtable_socket(socket, address, timeout)
          rescue RuntimeError # Connection failed somehow, again
            false
          end
        end
      end

      private

      def wait_for_writtable_socket(socket, address, timeout)
        if IO.select(nil, [socket], nil, timeout)
          probe_writtable_socket(socket, address)
        else # TCP Handshake timed out, or there is something dropping packets
          false
        end
      end

      def probe_writtable_socket(socket, address)
        socket.connect_nonblock(address)
      rescue Errno::EISCONN
        true
      rescue StandardError # Connection failed
        false
      end
    end
  end

  # Class used to build the list of sockets that correspond to
  #   a given mirror.
  #
  # One mirror may correspond to many different addresses, both
  #   because of it having many dns entries or because
  #   the network interface is both ipv4 and ipv5
  class MirrorSockets
    def initialize(mirror)
      @timeout = mirror.fallback_timeout
      @addresses = Socket.getaddrinfo(mirror.uri.host, mirror.uri.port).map do |address|
        SocketAddress.new(address[0], address[3], address[1])
      end
    end

    def any?
      @addresses.any? do |address|
        socket = Socket.new(Socket.const_get(address.type), Socket::SOCK_STREAM, 0)
        socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
        value = yield socket, address.to_socket_address, @timeout
        socket.close unless socket.closed?
        value
      end
    end
  end

  # Socket address builder.
  #
  # Given a socket type, a host and a port,
  #   provides a method to build sockaddr string
  class SocketAddress
    attr_reader :type, :host, :port

    def initialize(type, host, port)
      @type = type
      @host = host
      @port = port
    end

    def to_socket_address
      Socket.pack_sockaddr_in(@port, @host)
    end
  end
end
PK*"#[��!6n	n	2gems/bundler-2.3.27/lib/bundler/yaml_serializer.rbnu�[���# frozen_string_literal: true

module Bundler
  # A stub yaml serializer that can handle only hashes and strings (as of now).
  module YAMLSerializer
    module_function

    def dump(hash)
      yaml = String.new("---")
      yaml << dump_hash(hash)
    end

    def dump_hash(hash)
      yaml = String.new("\n")
      hash.each do |k, v|
        yaml << k << ":"
        if v.is_a?(Hash)
          yaml << dump_hash(v).gsub(/^(?!$)/, "  ") # indent all non-empty lines
        elsif v.is_a?(Array) # Expected to be array of strings
          yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
        else
          yaml << " " << v.to_s.gsub(/\s+/, " ").inspect << "\n"
        end
      end
      yaml
    end

    ARRAY_REGEX = /
      ^
      (?:[ ]*-[ ]) # '- ' before array items
      (['"]?) # optional opening quote
      (.*) # value
      \1 # matching closing quote
      $
    /xo.freeze

    HASH_REGEX = /
      ^
      ([ ]*) # indentations
      (.+) # key
      (?::(?=(?:\s|$))) # :  (without the lookahead the #key includes this when : is present in value)
      [ ]?
      (['"]?) # optional opening quote
      (.*) # value
      \3 # matching closing quote
      $
    /xo.freeze

    def load(str)
      res = {}
      stack = [res]
      last_hash = nil
      last_empty_key = nil
      str.split(/\r?\n/).each do |line|
        if match = HASH_REGEX.match(line)
          indent, key, quote, val = match.captures
          key = convert_to_backward_compatible_key(key)
          depth = indent.scan(/  /).length
          if quote.empty? && val.empty?
            new_hash = {}
            stack[depth][key] = new_hash
            stack[depth + 1] = new_hash
            last_empty_key = key
            last_hash = stack[depth]
          else
            stack[depth][key] = val
          end
        elsif match = ARRAY_REGEX.match(line)
          _, val = match.captures
          last_hash[last_empty_key] = [] unless last_hash[last_empty_key].is_a?(Array)

          last_hash[last_empty_key].push(val)
        end
      end
      res
    end

    # for settings' keys
    def convert_to_backward_compatible_key(key)
      key = "#{key}/" if key =~ /https?:/i && key !~ %r{/\Z}
      key = key.gsub(".", "__") if key.include?(".")
      key
    end

    class << self
      private :dump_hash, :convert_to_backward_compatible_key
    end
  end
end
PK*"#[�.pE2
2
)gems/bundler-2.3.27/lib/bundler/inline.rbnu�[���# frozen_string_literal: true

# Allows for declaring a Gemfile inline in a ruby script, optionally installing
# any gems that aren't already installed on the user's system.
#
# @note Every gem that is specified in this 'Gemfile' will be `require`d, as if
#       the user had manually called `Bundler.require`. To avoid a requested gem
#       being automatically required, add the `:require => false` option to the
#       `gem` dependency declaration.
#
# @param install [Boolean] whether gems that aren't already installed on the
#                          user's system should be installed.
#                          Defaults to `false`.
#
# @param gemfile [Proc]    a block that is evaluated as a `Gemfile`.
#
# @example Using an inline Gemfile
#
#          #!/opt/alt/ruby31/bin/ruby
#
#          require 'bundler/inline'
#
#          gemfile do
#            source 'https://rubygems.org'
#            gem 'json', require: false
#            gem 'nap', require: 'rest'
#            gem 'cocoapods', '~> 0.34.1'
#          end
#
#          puts Pod::VERSION # => "0.34.4"
#
def gemfile(install = false, options = {}, &gemfile)
  require_relative "../bundler"

  opts = options.dup
  ui = opts.delete(:ui) { Bundler::UI::Shell.new }
  ui.level = "silent" if opts.delete(:quiet)
  raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?

  begin
    Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir))
    old_gemfile = ENV["BUNDLE_GEMFILE"]
    Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"

    Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins?
    builder = Bundler::Dsl.new
    builder.instance_eval(&gemfile)
    builder.check_primary_source_safety

    Bundler.settings.temporary(:deployment => false, :frozen => false) do
      definition = builder.to_definition(nil, true)
      def definition.lock(*); end
      definition.validate_runtime!

      Bundler.ui = install ? ui : Bundler::UI::Silent.new
      if install || definition.missing_specs?
        Bundler.settings.temporary(:inline => true, :no_install => false) do
          installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
          installer.post_install_messages.each do |name, message|
            Bundler.ui.info "Post-install message from #{name}:\n#{message}"
          end
        end
      end

      runtime = Bundler::Runtime.new(nil, definition)
      runtime.setup.require
    end
  ensure
    if old_gemfile
      ENV["BUNDLE_GEMFILE"] = old_gemfile
    else
      ENV["BUNDLE_GEMFILE"] = ""
    end
  end
end
PK*"#[CX�j��Bgems/bundler-2.3.27/lib/bundler/compact_index_client/gem_parser.rbnu�[���# frozen_string_literal: true

module Bundler
  class CompactIndexClient
    if defined?(Gem::Resolver::APISet::GemParser)
      GemParser = Gem::Resolver::APISet::GemParser
    else
      class GemParser
        def parse(line)
          version_and_platform, rest = line.split(" ", 2)
          version, platform = version_and_platform.split("-", 2)
          dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
          dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
          requirements = requirements ? requirements.map {|d| parse_dependency(d) } : []
          [version, platform, dependencies, requirements]
        end

        private

        def parse_dependency(string)
          dependency = string.split(":")
          dependency[-1] = dependency[-1].split("&") if dependency.size > 1
          dependency
        end
      end
    end
  end
end
PK*"#[n�5�	�	=gems/bundler-2.3.27/lib/bundler/compact_index_client/cache.rbnu�[���# frozen_string_literal: true

require_relative "gem_parser"

module Bundler
  class CompactIndexClient
    class Cache
      attr_reader :directory

      def initialize(directory)
        @directory = Pathname.new(directory).expand_path
        info_roots.each do |dir|
          SharedHelpers.filesystem_access(dir) do
            FileUtils.mkdir_p(dir)
          end
        end
      end

      def names
        lines(names_path)
      end

      def names_path
        directory.join("names")
      end

      def versions
        versions_by_name = Hash.new {|hash, key| hash[key] = [] }
        info_checksums_by_name = {}

        lines(versions_path).each do |line|
          name, versions_string, info_checksum = line.split(" ", 3)
          info_checksums_by_name[name] = info_checksum || ""
          versions_string.split(",").each do |version|
            if version.start_with?("-")
              version = version[1..-1].split("-", 2).unshift(name)
              versions_by_name[name].delete(version)
            else
              version = version.split("-", 2).unshift(name)
              versions_by_name[name] << version
            end
          end
        end

        [versions_by_name, info_checksums_by_name]
      end

      def versions_path
        directory.join("versions")
      end

      def checksums
        checksums = {}

        lines(versions_path).each do |line|
          name, _, checksum = line.split(" ", 3)
          checksums[name] = checksum
        end

        checksums
      end

      def dependencies(name)
        lines(info_path(name)).map do |line|
          parse_gem(line)
        end
      end

      def info_path(name)
        name = name.to_s
        if name =~ /[^a-z0-9_-]/
          name += "-#{SharedHelpers.digest(:MD5).hexdigest(name).downcase}"
          info_roots.last.join(name)
        else
          info_roots.first.join(name)
        end
      end

      private

      def lines(path)
        return [] unless path.file?
        lines = SharedHelpers.filesystem_access(path, :read, &:read).split("\n")
        header = lines.index("---")
        header ? lines[header + 1..-1] : lines
      end

      def parse_gem(line)
        @dependency_parser ||= GemParser.new
        @dependency_parser.parse(line)
      end

      def info_roots
        [
          directory.join("info"),
          directory.join("info-special-characters"),
        ]
      end
    end
  end
end
PK*"#[@��ymm?gems/bundler-2.3.27/lib/bundler/compact_index_client/updater.rbnu�[���# frozen_string_literal: true

require_relative "../vendored_fileutils"

module Bundler
  class CompactIndexClient
    class Updater
      class MisMatchedChecksumError < Error
        def initialize(path, server_checksum, local_checksum)
          @path = path
          @server_checksum = server_checksum
          @local_checksum = local_checksum
        end

        def message
          "The checksum of /#{@path} does not match the checksum provided by the server! Something is wrong " \
            "(local checksum is #{@local_checksum.inspect}, was expecting #{@server_checksum.inspect})."
        end
      end

      def initialize(fetcher)
        @fetcher = fetcher
        require_relative "../vendored_tmpdir"
      end

      def update(local_path, remote_path, retrying = nil)
        headers = {}

        Bundler::Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
          local_temp_path = Pathname.new(local_temp_dir).join(local_path.basename)

          # first try to fetch any new bytes on the existing file
          if retrying.nil? && local_path.file?
            copy_file local_path, local_temp_path

            headers["If-None-Match"] = etag_for(local_temp_path)
            headers["Range"] =
              if local_temp_path.size.nonzero?
                # Subtract a byte to ensure the range won't be empty.
                # Avoids 416 (Range Not Satisfiable) responses.
                "bytes=#{local_temp_path.size - 1}-"
              else
                "bytes=#{local_temp_path.size}-"
              end
          end

          response = @fetcher.call(remote_path, headers)
          return nil if response.is_a?(Net::HTTPNotModified)

          content = response.body

          etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
          correct_response = SharedHelpers.filesystem_access(local_temp_path) do
            if response.is_a?(Net::HTTPPartialContent) && local_temp_path.size.nonzero?
              local_temp_path.open("a") {|f| f << slice_body(content, 1..-1) }

              etag_for(local_temp_path) == etag
            else
              local_temp_path.open("wb") {|f| f << content }

              etag.length.zero? || etag_for(local_temp_path) == etag
            end
          end

          if correct_response
            SharedHelpers.filesystem_access(local_path) do
              FileUtils.mv(local_temp_path, local_path)
            end
            return nil
          end

          if retrying
            raise MisMatchedChecksumError.new(remote_path, etag, etag_for(local_temp_path))
          end

          update(local_path, remote_path, :retrying)
        end
      rescue Zlib::GzipFile::Error
        raise Bundler::HTTPError
      end

      def etag_for(path)
        sum = checksum_for_file(path)
        sum ? %("#{sum}") : nil
      end

      def slice_body(body, range)
        body.byteslice(range)
      end

      def checksum_for_file(path)
        return nil unless path.file?
        # This must use File.read instead of Digest.file().hexdigest
        # because we need to preserve \n line endings on windows when calculating
        # the checksum
        SharedHelpers.filesystem_access(path, :read) do
          SharedHelpers.digest(:MD5).hexdigest(File.read(path))
        end
      end

      private

      def copy_file(source, dest)
        SharedHelpers.filesystem_access(source, :read) do
          File.open(source, "r") do |s|
            SharedHelpers.filesystem_access(dest, :write) do
              File.open(dest, "wb", s.stat.mode) do |f|
                IO.copy_stream(s, f)
              end
            end
          end
        end
      end
    end
  end
end
PK*"#[_l�__2gems/bundler-2.3.27/lib/bundler/vendored_tmpdir.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/tmpdir/lib/tmpdir"
PK*"#[0�ee5gems/bundler-2.3.27/lib/bundler/vendored_fileutils.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/fileutils/lib/fileutils"
PK*"#[��x9gems/bundler-2.3.27/lib/bundler/uri_credentials_filter.rbnu�[���# frozen_string_literal: true

module Bundler
  module URICredentialsFilter
    module_function

    def credential_filtered_uri(uri_to_anonymize)
      return uri_to_anonymize if uri_to_anonymize.nil?
      uri = uri_to_anonymize.dup
      if uri.is_a?(String)
        return uri if File.exist?(uri)

        require_relative "vendored_uri"
        uri = Bundler::URI(uri)
      end

      if uri.userinfo
        # oauth authentication
        if uri.password == "x-oauth-basic" || uri.password == "x"
          # URI as string does not display with password if no user is set
          oauth_designation = uri.password
          uri.user = oauth_designation
        end
        uri.password = nil
      end
      return uri.to_s if uri_to_anonymize.is_a?(String)
      uri
    rescue Bundler::URI::InvalidURIError # uri is not canonical uri scheme
      uri
    end

    def credential_filtered_string(str_to_filter, uri)
      return str_to_filter if uri.nil? || str_to_filter.nil?
      str_with_no_credentials = str_to_filter.dup
      anonymous_uri_str = credential_filtered_uri(uri).to_s
      uri_str = uri.to_s
      if anonymous_uri_str != uri_str
        str_with_no_credentials = str_with_no_credentials.gsub(uri_str, anonymous_uri_str)
      end
      str_with_no_credentials
    end
  end
end
PK*"#[��lՕ*�*,gems/bundler-2.3.27/lib/bundler/installer.rbnu�[���# frozen_string_literal: true

require_relative "worker"
require_relative "installer/parallel_installer"
require_relative "installer/standalone"
require_relative "installer/gem_installer"

module Bundler
  class Installer
    class << self
      attr_accessor :ambiguous_gems

      Installer.ambiguous_gems = []
    end

    attr_reader :post_install_messages, :definition

    # Begins the installation process for Bundler.
    # For more information see the #run method on this class.
    def self.install(root, definition, options = {})
      installer = new(root, definition)
      Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL_ALL, definition.dependencies)
      installer.run(options)
      Plugin.hook(Plugin::Events::GEM_AFTER_INSTALL_ALL, definition.dependencies)
      installer
    end

    def initialize(root, definition)
      @root = root
      @definition = definition
      @post_install_messages = {}
    end

    # Runs the install procedures for a specific Gemfile.
    #
    # Firstly, this method will check to see if `Bundler.bundle_path` exists
    # and if not then Bundler will create the directory. This is usually the same
    # location as RubyGems which typically is the `~/.gem` directory
    # unless other specified.
    #
    # Secondly, it checks if Bundler has been configured to be "frozen".
    # Frozen ensures that the Gemfile and the Gemfile.lock file are matching.
    # This stops a situation where a developer may update the Gemfile but may not run
    # `bundle install`, which leads to the Gemfile.lock file not being correctly updated.
    # If this file is not correctly updated then any other developer running
    # `bundle install` will potentially not install the correct gems.
    #
    # Thirdly, Bundler checks if there are any dependencies specified in the Gemfile.
    # If there are no dependencies specified then Bundler returns a warning message stating
    # so and this method returns.
    #
    # Fourthly, Bundler checks if the Gemfile.lock exists, and if so
    # then proceeds to set up a definition based on the Gemfile and the Gemfile.lock.
    # During this step Bundler will also download information about any new gems
    # that are not in the Gemfile.lock and resolve any dependencies if needed.
    #
    # Fifthly, Bundler resolves the dependencies either through a cache of gems or by remote.
    # This then leads into the gems being installed, along with stubs for their executables,
    # but only if the --binstubs option has been passed or Bundler.options[:bin] has been set
    # earlier.
    #
    # Sixthly, a new Gemfile.lock is created from the installed gems to ensure that the next time
    # that a user runs `bundle install` they will receive any updates from this process.
    #
    # Finally, if the user has specified the standalone flag, Bundler will generate the needed
    # require paths and save them in a `setup.rb` file. See `bundle standalone --help` for more
    # information.
    def run(options)
      Bundler.create_bundle_path

      ProcessLock.lock do
        if Bundler.frozen_bundle?
          @definition.ensure_equivalent_gemfile_and_lockfile(options[:deployment])
        end

        if @definition.dependencies.empty?
          Bundler.ui.warn "The Gemfile specifies no dependencies"
          lock
          return
        end

        if resolve_if_needed(options)
          ensure_specs_are_compatible!
          load_plugins
          options.delete(:jobs)
        else
          options[:jobs] = 1 # to avoid the overhead of Bundler::Worker
        end
        install(options)

        Gem::Specification.reset # invalidate gem specification cache so that installed gems are immediately available

        lock unless Bundler.frozen_bundle?
        Standalone.new(options[:standalone], @definition).generate if options[:standalone]
      end
    end

    def generate_bundler_executable_stubs(spec, options = {})
      if options[:binstubs_cmd] && spec.executables.empty?
        options = {}
        spec.runtime_dependencies.each do |dep|
          bins = @definition.specs[dep].first.executables
          options[dep.name] = bins unless bins.empty?
        end
        if options.any?
          Bundler.ui.warn "#{spec.name} has no executables, but you may want " \
            "one from a gem it depends on."
          options.each {|name, bins| Bundler.ui.warn "  #{name} has: #{bins.join(", ")}" }
        else
          Bundler.ui.warn "There are no executables for the gem #{spec.name}."
        end
        return
      end

      # double-assignment to avoid warnings about variables that will be used by ERB
      bin_path = Bundler.bin_path
      bin_path = bin_path
      relative_gemfile_path = Bundler.default_gemfile.relative_path_from(bin_path)
      relative_gemfile_path = relative_gemfile_path
      ruby_command = Thor::Util.ruby_command
      ruby_command = ruby_command
      template_path = File.expand_path("templates/Executable", __dir__)
      if spec.name == "bundler"
        template_path += ".bundler"
        spec.executables = %(bundle)
      end
      template = File.read(template_path)

      exists = []
      spec.executables.each do |executable|
        binstub_path = "#{bin_path}/#{executable}"
        if File.exist?(binstub_path) && !options[:force]
          exists << executable
          next
        end

        mode = Gem.win_platform? ? "wb:UTF-8" : "w"
        require "erb"
        content = if RUBY_VERSION >= "2.6"
          ERB.new(template, :trim_mode => "-").result(binding)
        else
          ERB.new(template, nil, "-").result(binding)
        end

        File.write(binstub_path, content, :mode => mode, :perm => 0o777 & ~File.umask)
        if Gem.win_platform? || options[:all_platforms]
          prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
          File.write("#{binstub_path}.cmd", prefix + content, :mode => mode)
        end
      end

      if options[:binstubs_cmd] && exists.any?
        case exists.size
        when 1
          Bundler.ui.warn "Skipped #{exists[0]} since it already exists."
        when 2
          Bundler.ui.warn "Skipped #{exists.join(" and ")} since they already exist."
        else
          items = exists[0...-1].empty? ? nil : exists[0...-1].join(", ")
          skipped = [items, exists[-1]].compact.join(" and ")
          Bundler.ui.warn "Skipped #{skipped} since they already exist."
        end
        Bundler.ui.warn "If you want to overwrite skipped stubs, use --force."
      end
    end

    def generate_standalone_bundler_executable_stubs(spec, options = {})
      # double-assignment to avoid warnings about variables that will be used by ERB
      bin_path = Bundler.bin_path
      unless path = Bundler.settings[:path]
        raise "Can't standalone without an explicit path set"
      end
      standalone_path = Bundler.root.join(path).relative_path_from(bin_path)
      standalone_path = standalone_path
      template = File.read(File.expand_path("templates/Executable.standalone", __dir__))
      ruby_command = Thor::Util.ruby_command
      ruby_command = ruby_command

      spec.executables.each do |executable|
        next if executable == "bundle"
        executable_path = Pathname(spec.full_gem_path).join(spec.bindir, executable).relative_path_from(bin_path)
        executable_path = executable_path

        mode = Gem.win_platform? ? "wb:UTF-8" : "w"
        require "erb"
        content = if RUBY_VERSION >= "2.6"
          ERB.new(template, :trim_mode => "-").result(binding)
        else
          ERB.new(template, nil, "-").result(binding)
        end

        File.write("#{bin_path}/#{executable}", content, :mode => mode, :perm => 0o755)
        if Gem.win_platform? || options[:all_platforms]
          prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
          File.write("#{bin_path}/#{executable}.cmd", prefix + content, :mode => mode)
        end
      end
    end

    private

    # the order that the resolver provides is significant, since
    # dependencies might affect the installation of a gem.
    # that said, it's a rare situation (other than rake), and parallel
    # installation is SO MUCH FASTER. so we let people opt in.
    def install(options)
      force = options["force"]
      jobs = installation_parallelization(options)
      install_in_parallel jobs, options[:standalone], force
    end

    def installation_parallelization(options)
      if jobs = options.delete(:jobs)
        return jobs
      end

      if jobs = Bundler.settings[:jobs]
        return jobs
      end

      Bundler.settings.processor_count
    end

    def load_plugins
      Bundler.rubygems.load_plugins

      requested_path_gems = @definition.requested_specs.select {|s| s.source.is_a?(Source::Path) }
      path_plugin_files = requested_path_gems.map do |spec|
        begin
          Bundler.rubygems.spec_matches_for_glob(spec, "rubygems_plugin#{Bundler.rubygems.suffix_pattern}")
        rescue TypeError
          error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
          raise Gem::InvalidSpecificationException, error_message
        end
      end.flatten
      Bundler.rubygems.load_plugin_files(path_plugin_files)
      Bundler.rubygems.load_env_plugins
    end

    def ensure_specs_are_compatible!
      @definition.specs.each do |spec|
        unless spec.matches_current_ruby?
          raise InstallError, "#{spec.full_name} requires ruby version #{spec.required_ruby_version}, " \
            "which is incompatible with the current version, #{Gem.ruby_version}"
        end
        unless spec.matches_current_rubygems?
          raise InstallError, "#{spec.full_name} requires rubygems version #{spec.required_rubygems_version}, " \
            "which is incompatible with the current version, #{Gem.rubygems_version}"
        end
      end
    end

    def install_in_parallel(size, standalone, force = false)
      spec_installations = ParallelInstaller.call(self, @definition.specs, size, standalone, force)
      spec_installations.each do |installation|
        post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message?
      end
    end

    # returns whether or not a re-resolve was needed
    def resolve_if_needed(options)
      if !@definition.unlocking? && !options["force"] && !Bundler.settings[:inline] && Bundler.default_lockfile.file?
        return false if @definition.nothing_changed? && !@definition.missing_specs?
      end

      if options["local"]
        @definition.resolve_with_cache!
      elsif options["prefer-local"]
        @definition.resolve_prefering_local!
      else
        @definition.resolve_remotely!
      end

      true
    end

    def lock(opts = {})
      @definition.lock(Bundler.default_lockfile, opts[:preserve_unknown_sections])
    end
  end
end
PK*"#[�-L001gems/bundler-2.3.27/lib/bundler/version_ranges.rbnu�[���# frozen_string_literal: true

module Bundler
  module VersionRanges
    NEq = Struct.new(:version)
    ReqR = Struct.new(:left, :right)
    class ReqR
      Endpoint = Struct.new(:version, :inclusive) do
        def <=>(other)
          if version.equal?(INFINITY)
            return 0 if other.version.equal?(INFINITY)
            return 1
          elsif other.version.equal?(INFINITY)
            return -1
          end

          comp = version <=> other.version
          return comp unless comp.zero?

          if inclusive && !other.inclusive
            1
          elsif !inclusive && other.inclusive
            -1
          else
            0
          end
        end
      end

      def to_s
        "#{left.inclusive ? "[" : "("}#{left.version}, #{right.version}#{right.inclusive ? "]" : ")"}"
      end
      INFINITY = begin
        inf = Object.new
        def inf.to_s
          "∞"
        end
        def inf.<=>(other)
          return 0 if other.equal?(self)
          1
        end
        inf.freeze
      end
      ZERO = Gem::Version.new("0.a")

      def cover?(v)
        return false if left.inclusive && left.version > v
        return false if !left.inclusive && left.version >= v

        if right.version != INFINITY
          return false if right.inclusive && right.version < v
          return false if !right.inclusive && right.version <= v
        end

        true
      end

      def empty?
        left.version == right.version && !(left.inclusive && right.inclusive)
      end

      def single?
        left.version == right.version
      end

      def <=>(other)
        return -1 if other.equal?(INFINITY)

        comp = left <=> other.left
        return comp unless comp.zero?

        right <=> other.right
      end

      UNIVERSAL = ReqR.new(ReqR::Endpoint.new(Gem::Version.new("0.a"), true), ReqR::Endpoint.new(ReqR::INFINITY, false)).freeze
    end

    def self.for_many(requirements)
      requirements = requirements.map(&:requirements).flatten(1).map {|r| r.join(" ") }
      requirements << ">= 0.a" if requirements.empty?
      requirement = Gem::Requirement.new(requirements)
      self.for(requirement)
    end

    def self.for(requirement)
      ranges = requirement.requirements.map do |op, v|
        case op
        when "=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v, true))
        when "!=" then NEq.new(v)
        when ">=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(ReqR::INFINITY, false))
        when ">" then ReqR.new(ReqR::Endpoint.new(v, false), ReqR::Endpoint.new(ReqR::INFINITY, false))
        when "<" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, false))
        when "<=" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, true))
        when "~>" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v.bump, false))
        else raise "unknown version op #{op} in requirement #{requirement}"
        end
      end.uniq
      ranges, neqs = ranges.partition {|r| !r.is_a?(NEq) }

      [ranges.sort, neqs.map(&:version)]
    end

    def self.empty?(ranges, neqs)
      !ranges.reduce(ReqR::UNIVERSAL) do |last_range, curr_range|
        next false unless last_range
        next false if curr_range.single? && neqs.include?(curr_range.left.version)
        next curr_range if last_range.right.version == ReqR::INFINITY
        case last_range.right.version <=> curr_range.left.version
        # higher
        when 1 then next ReqR.new(curr_range.left, last_range.right)
        # equal
        when 0
          if last_range.right.inclusive && curr_range.left.inclusive && !neqs.include?(curr_range.left.version)
            ReqR.new(curr_range.left, [curr_range.right, last_range.right].max)
          end
        # lower
        when -1 then next false
        end
      end
    end
  end
end
PK*"#[�SJLL1gems/bundler-2.3.27/lib/bundler/templates/Gemfilenu�[���# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"
PK*"#[���J��?gems/bundler-2.3.27/lib/bundler/templates/Executable.standalonenu�[���#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
#
# This file was generated by Bundler.
#
# The application '<%= executable %>' is installed as part of a gem, and
# this file is here to facilitate running it.
#

$:.unshift File.expand_path "<%= standalone_path %>", __dir__

require "bundler/setup"
load File.expand_path "<%= executable_path %>", __dir__
PK*"#[�X'j]]4gems/bundler-2.3.27/lib/bundler/templates/Executablenu�[���#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
# frozen_string_literal: true

#
# This file was generated by Bundler.
#
# The application '<%= executable %>' is installed as part of a gem, and
# this file is here to facilitate running it.
#

ENV["BUNDLE_GEMFILE"] ||= File.expand_path("<%= relative_gemfile_path %>", __dir__)

bundle_binstub = File.expand_path("bundle", __dir__)

if File.file?(bundle_binstub)
  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
    load(bundle_binstub)
  else
    abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
  end
end

require "rubygems"
require "bundler/setup"

load Gem.bin_path("<%= spec.name %>", "<%= executable %>")
PK*"#[�SJLL1gems/bundler-2.3.27/lib/bundler/templates/gems.rbnu�[���# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"
PK*"#[^6)g&&Ggems/bundler-2.3.27/lib/bundler/templates/newgem/circleci/config.yml.ttnu�[���version: 2.1
jobs:
  build:
    docker:
      - image: ruby:<%= RUBY_VERSION %>
    steps:
      - checkout
      - run:
          name: Run the default task
          command: |
            gem install bundler -v <%= Bundler::VERSION %>
            bundle install
            bundle exec rake
PK*"#[�5B��?gems/bundler-2.3.27/lib/bundler/templates/newgem/bin/console.ttnu�[���#!/opt/alt/ruby31/bin/ruby
# frozen_string_literal: true

require "bundler/setup"
require "<%= config[:namespaced_path] %>"

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start

require "irb"
IRB.start(__FILE__)
PK*"#[����=gems/bundler-2.3.27/lib/bundler/templates/newgem/bin/setup.ttnu�[���#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
set -vx

bundle install

# Do any other automated setup that you need to do here
PK*"#[���QQ?gems/bundler-2.3.27/lib/bundler/templates/newgem/LICENSE.txt.ttnu�[���The MIT License (MIT)

Copyright (c) <%= Time.now.year %> <%= config[:author] %>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PK*"#[z���FF>gems/bundler-2.3.27/lib/bundler/templates/newgem/exe/newgem.ttnu�[���#!/opt/alt/ruby31/bin/ruby

require "<%= config[:namespaced_path] %>"
PK*"#[��M��Ggems/bundler-2.3.27/lib/bundler/templates/newgem/ext/newgem/newgem.c.ttnu�[���#include "<%= config[:underscored_name] %>.h"

VALUE rb_m<%= config[:constant_array].join %>;

void
Init_<%= config[:underscored_name] %>(void)
{
  rb_m<%= config[:constant_array].join %> = rb_define_module(<%= config[:constant_name].inspect %>);
}
PK*"#[9��5ffIgems/bundler-2.3.27/lib/bundler/templates/newgem/ext/newgem/extconf.rb.ttnu�[���# frozen_string_literal: true

require "mkmf"

create_makefile(<%= config[:makefile_path].inspect %>)
PK*"#[�?����Ggems/bundler-2.3.27/lib/bundler/templates/newgem/ext/newgem/newgem.h.ttnu�[���#ifndef <%= config[:underscored_name].upcase %>_H
#define <%= config[:underscored_name].upcase %>_H 1

#include "ruby.h"

#endif /* <%= config[:underscored_name].upcase %>_H */
PK*"#[/���++?gems/bundler-2.3.27/lib/bundler/templates/newgem/rubocop.yml.ttnu�[���AllCops:
  TargetRubyVersion: <%= ::Gem::Version.new(config[:required_ruby_version]).segments[0..1].join(".") %>

Style/StringLiterals:
  Enabled: true
  EnforcedStyle: double_quotes

Style/StringLiteralsInInterpolation:
  Enabled: true
  EnforcedStyle: double_quotes

Layout/LineLength:
  Max: 120
PK*"#[Ӟ�G��@gems/bundler-2.3.27/lib/bundler/templates/newgem/standard.yml.ttnu�[���# For available configuration options, see:
#   https://github.com/testdouble/standard
ruby_version: <%= ::Gem::Version.new(config[:required_ruby_version]).segments[0..1].join(".") %>
PK*"#[�]���Mgems/bundler-2.3.27/lib/bundler/templates/newgem/github/workflows/main.yml.ttnu�[���name: Ruby

on:
  push:
    branches:
      - <%= config[:git_default_branch] %>

  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    name: Ruby ${{ matrix.ruby }}
    strategy:
      matrix:
        ruby:
          - '<%= RUBY_VERSION %>'

    steps:
    - uses: actions/checkout@v3
    - name: Set up Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler-cache: true
    - name: Run the default task
      run: bundle exec rake
PK*"#[
z�^�	�	=gems/bundler-2.3.27/lib/bundler/templates/newgem/README.md.ttnu�[���# <%= config[:constant_name] %>

Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/<%= config[:namespaced_path] %>`. To experiment with that code, run `bin/console` for an interactive prompt.

TODO: Delete this and the text above, and describe your gem

## Installation

Install the gem and add to the application's Gemfile by executing:

    $ bundle add <%= config[:name] %>

If bundler is not being used to manage dependencies, install the gem by executing:

    $ gem install <%= config[:name] %>

## Usage

TODO: Write usage instructions here

## Development

After checking out the repo, run `bin/setup` to install dependencies.<% if config[:test] %> Then, run `rake <%= config[:test].sub('mini', '').sub('rspec', 'spec') %>` to run the tests.<% end %> You can also run `bin/console` for an interactive prompt that will allow you to experiment.<% if config[:bin] %> Run `bundle exec <%= config[:name] %>` to use the gem in this directory, ignoring other installed copies of this gem.<% end %>

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
<% if config[:git] -%>

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/<%= config[:github_username] %>/<%= config[:name] %>.<% if config[:coc] %> This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob/<%= config[:git_default_branch] %>/CODE_OF_CONDUCT.md).<% end %>
<% end -%>
<% if config[:mit] -%>

## License

The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
<% end -%>
<% if config[:git] && config[:coc] -%>

## Code of Conduct

Everyone interacting in the <%= config[:constant_name] %> project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/<%= config[:github_username] %>/<%= config[:name] %>/blob/<%= config[:git_default_branch] %>/CODE_OF_CONDUCT.md).
<% end -%>
PK*"#[�lq559gems/bundler-2.3.27/lib/bundler/templates/newgem/rspec.ttnu�[���--format documentation
--color
--require spec_helper
PK*"#[؊s�;gems/bundler-2.3.27/lib/bundler/templates/newgem/Gemfile.ttnu�[���# frozen_string_literal: true

source "https://rubygems.org"

# Specify your gem's dependencies in <%= config[:name] %>.gemspec
gemspec

gem "rake", "~> 13.0"
<%- if config[:ext] -%>

gem "rake-compiler"
<%- end -%>
<%- if config[:test] -%>

gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
<%- end -%>
<%- if config[:linter] == "rubocop" -%>

gem "rubocop", "~> <%= config[:linter_version] %>"
<%- elsif config[:linter] == "standard" -%>

gem "standard", "~> <%= config[:linter_version] %>"
<%- end -%>
PK*"#[,��
Pgems/bundler-2.3.27/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.ttnu�[���# frozen_string_literal: true

require "test_helper"

class <%= config[:minitest_constant_name] %> < Minitest::Test
  def test_that_it_has_a_version_number
    refute_nil ::<%= config[:constant_name] %>::VERSION
  end

  def test_it_does_something_useful
    assert false
  end
end
PK*"#[�M-n��Pgems/bundler-2.3.27/lib/bundler/templates/newgem/test/minitest/test_helper.rb.ttnu�[���# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "<%= config[:namespaced_path] %>"

require "minitest/autorun"
PK*"#[q��{33Qgems/bundler-2.3.27/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.ttnu�[���# frozen_string_literal: true

require "test_helper"

class <%= config[:constant_name] %>Test < Test::Unit::TestCase
  test "VERSION" do
    assert do
      ::<%= config[:constant_name] %>.const_defined?(:VERSION)
    end
  end

  test "something useful" do
    assert_equal("expected", "actual")
  end
end
PK*"#[G�>J��Qgems/bundler-2.3.27/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.ttnu�[���# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "<%= config[:namespaced_path] %>"

require "test-unit"
PK*"#[���_ccFgems/bundler-2.3.27/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.ttnu�[���# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.

Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at <%= config[:email] %>. All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series of actions.

**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior,  harassment of an individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0,
available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations.
PK*"#[��~~>gems/bundler-2.3.27/lib/bundler/templates/newgem/travis.yml.ttnu�[���---
language: ruby
cache: bundler
rvm:
  - <%= RUBY_VERSION %>
before_install: gem install bundler -v <%= Bundler::VERSION %>
PK*"#[!5��PP@gems/bundler-2.3.27/lib/bundler/templates/newgem/CHANGELOG.md.ttnu�[���## [Unreleased]

## [0.1.0] - <%= Time.now.strftime('%F') %>

- Initial release
PK*"#[Ҧ+���Ggems/bundler-2.3.27/lib/bundler/templates/newgem/spec/spec_helper.rb.ttnu�[���# frozen_string_literal: true

require "<%= config[:namespaced_path] %>"

RSpec.configure do |config|
  # Enable flags like --only-failures and --next-failure
  config.example_status_persistence_file_path = ".rspec_status"

  # Disable RSpec exposing methods globally on `Module` and `main`
  config.disable_monkey_patching!

  config.expect_with :rspec do |c|
    c.syntax = :expect
  end
end
PK*"#[32
���Ggems/bundler-2.3.27/lib/bundler/templates/newgem/spec/newgem_spec.rb.ttnu�[���# frozen_string_literal: true

RSpec.describe <%= config[:constant_name] %> do
  it "has a version number" do
    expect(<%= config[:constant_name] %>::VERSION).not_to be nil
  end

  it "does something useful" do
    expect(false).to eq(true)
  end
end
PK*"#[A�ܶ�Agems/bundler-2.3.27/lib/bundler/templates/newgem/gitlab-ci.yml.ttnu�[���default:
  image: ruby:<%= RUBY_VERSION %>

  before_script:
    - gem install bundler -v <%= Bundler::VERSION %>
    - bundle install

example_job:
  script:
    - bundle exec rake
PK*"#[z�y��<gems/bundler-2.3.27/lib/bundler/templates/newgem/Rakefile.ttnu�[���# frozen_string_literal: true

require "bundler/gem_tasks"
<% default_task_names = [config[:test_task]].compact -%>
<% case config[:test] -%>
<% when "minitest" -%>
require "rake/testtask"

Rake::TestTask.new(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.test_files = FileList["test/**/test_*.rb"]
end

<% when "test-unit" -%>
require "rake/testtask"

Rake::TestTask.new(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.test_files = FileList["test/**/*_test.rb"]
end

<% when "rspec" -%>
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

<% end -%>
<% if config[:linter] == "rubocop" -%>
<% default_task_names << :rubocop -%>
require "rubocop/rake_task"

RuboCop::RakeTask.new

<% elsif config[:linter] == "standard" -%>
<% default_task_names << :standard -%>
require "standard/rake"

<% end -%>
<% if config[:ext] -%>
<% default_task_names.unshift(:clobber, :compile) -%>
require "rake/extensiontask"

task build: :compile

Rake::ExtensionTask.new("<%= config[:underscored_name] %>") do |ext|
  ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
end

<% end -%>
<% if default_task_names.size == 1 -%>
task default: <%= default_task_names.first.inspect %>
<% else -%>
task default: %i[<%= default_task_names.join(" ") %>]
<% end -%>
PK*"#[��Br==Agems/bundler-2.3.27/lib/bundler/templates/newgem/lib/newgem.rb.ttnu�[���# frozen_string_literal: true

require_relative "<%= File.basename(config[:namespaced_path]) %>/version"
<%- if config[:ext] -%>
require_relative "<%= File.basename(config[:namespaced_path]) %>/<%= config[:underscored_name] %>"
<%- end -%>

<%- config[:constant_array].each_with_index do |c, i| -%>
<%= "  " * i %>module <%= c %>
<%- end -%>
<%= "  " * config[:constant_array].size %>class Error < StandardError; end
<%= "  " * config[:constant_array].size %># Your code goes here...
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
<%= "  " * i %>end
<%- end -%>
PK*"#[��Igems/bundler-2.3.27/lib/bundler/templates/newgem/lib/newgem/version.rb.ttnu�[���# frozen_string_literal: true

<%- config[:constant_array].each_with_index do |c, i| -%>
<%= "  " * i %>module <%= c %>
<%- end -%>
<%= "  " * config[:constant_array].size %>VERSION = "0.1.0"
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
<%= "  " * i %>end
<%- end -%>
PK*"#[!�b--Bgems/bundler-2.3.27/lib/bundler/templates/newgem/newgem.gemspec.ttnu�[���# frozen_string_literal: true

require_relative "lib/<%=config[:namespaced_path]%>/version"

Gem::Specification.new do |spec|
  spec.name = <%= config[:name].inspect %>
  spec.version = <%= config[:constant_name] %>::VERSION
  spec.authors = [<%= config[:author].inspect %>]
  spec.email = [<%= config[:email].inspect %>]

  spec.summary = "TODO: Write a short summary, because RubyGems requires one."
  spec.description = "TODO: Write a longer description or delete this line."
  spec.homepage = "TODO: Put your gem's website or public repo URL here."
<%- if config[:mit] -%>
  spec.license = "MIT"
<%- end -%>
  spec.required_ruby_version = ">= <%= config[:required_ruby_version] %>"

  spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"

  spec.metadata["homepage_uri"] = spec.homepage
  spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
  spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."

  # Specify which files should be added to the gem when it is released.
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
  spec.files = Dir.chdir(__dir__) do
    `git ls-files -z`.split("\x0").reject do |f|
      (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
    end
  end
  spec.bindir = "exe"
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]
<%- if config[:ext] -%>
  spec.extensions = ["ext/<%= config[:underscored_name] %>/extconf.rb"]
<%- end -%>

  # Uncomment to register a new dependency of your gem
  # spec.add_dependency "example-gem", "~> 1.0"

  # For more information and examples about making a new gem, check out our
  # guide at: https://bundler.io/guides/creating_gem.html
end
PK*"#[N��meeBgems/bundler-2.3.27/lib/bundler/templates/newgem/sig/newgem.rbs.ttnu�[���<%- config[:constant_array].each_with_index do |c, i| -%>
<%= "  " * i %>module <%= c %>
<%- end -%>
<%= "  " * config[:constant_array].size %>VERSION: String
<%= "  " * config[:constant_array].size %># See the writing guide of rbs: https://github.com/ruby/rbs#guides
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
<%= "  " * i %>end
<%- end -%>
PK*"#[g2����=gems/bundler-2.3.27/lib/bundler/templates/newgem/gitignore.ttnu�[���/.bundle/
/.yardoc
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
<%- if config[:ext] -%>
*.bundle
*.so
*.o
*.a
mkmf.log
<%- end -%>
<%- if config[:test] == "rspec" -%>

# rspec failure tracking
.rspec_status
<%- end -%>
PK*"#[]�y<gems/bundler-2.3.27/lib/bundler/templates/Executable.bundlernu�[���#!/usr/bin/env <%= Bundler.settings[:shebang] || RbConfig::CONFIG["ruby_install_name"] %>
# frozen_string_literal: true

#
# This file was generated by Bundler.
#
# The application '<%= executable %>' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require "rubygems"

m = Module.new do
  module_function

  def invoked_as_script?
    File.expand_path($0) == File.expand_path(__FILE__)
  end

  def env_var_version
    ENV["BUNDLER_VERSION"]
  end

  def cli_arg_version
    return unless invoked_as_script? # don't want to hijack other binstubs
    return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update`
    bundler_version = nil
    update_index = nil
    ARGV.each_with_index do |a, i|
      if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
        bundler_version = a
      end
      next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
      bundler_version = $1
      update_index = i
    end
    bundler_version
  end

  def gemfile
    gemfile = ENV["BUNDLE_GEMFILE"]
    return gemfile if gemfile && !gemfile.empty?

    File.expand_path("<%= relative_gemfile_path %>", __dir__)
  end

  def lockfile
    lockfile =
      case File.basename(gemfile)
      when "gems.rb" then gemfile.sub(/\.rb$/, gemfile)
      else "#{gemfile}.lock"
      end
    File.expand_path(lockfile)
  end

  def lockfile_version
    return unless File.file?(lockfile)
    lockfile_contents = File.read(lockfile)
    return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
    Regexp.last_match(1)
  end

  def bundler_requirement
    @bundler_requirement ||=
      env_var_version || cli_arg_version ||
        bundler_requirement_for(lockfile_version)
  end

  def bundler_requirement_for(version)
    return "#{Gem::Requirement.default}.a" unless version

    bundler_gem_version = Gem::Version.new(version)

    requirement = bundler_gem_version.approximate_recommendation

    return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")

    requirement += ".a" if bundler_gem_version.prerelease?

    requirement
  end

  def load_bundler!
    ENV["BUNDLE_GEMFILE"] ||= gemfile

    activate_bundler
  end

  def activate_bundler
    gem_error = activation_error_handling do
      gem "bundler", bundler_requirement
    end
    return if gem_error.nil?
    require_error = activation_error_handling do
      require "bundler/version"
    end
    return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION))
    warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`"
    exit 42
  end

  def activation_error_handling
    yield
    nil
  rescue StandardError, LoadError => e
    e
  end
end

m.load_bundler!

if m.invoked_as_script?
  load Gem.bin_path("<%= spec.name %>", "<%= executable %>")
end
PK*"#[�!
!
:gems/bundler-2.3.27/lib/bundler/installer/gem_installer.rbnu�[���# frozen_string_literal: true

module Bundler
  class GemInstaller
    attr_reader :spec, :standalone, :worker, :force, :installer

    def initialize(spec, installer, standalone = false, worker = 0, force = false)
      @spec = spec
      @installer = installer
      @standalone = standalone
      @worker = worker
      @force = force
    end

    def install_from_spec
      post_install_message = install
      Bundler.ui.debug "#{worker}:  #{spec.name} (#{spec.version}) from #{spec.loaded_from}"
      generate_executable_stubs
      return true, post_install_message
    rescue Bundler::InstallHookError, Bundler::SecurityError, Bundler::APIResponseMismatchError
      raise
    rescue Errno::ENOSPC
      return false, out_of_space_message
    rescue Bundler::BundlerError, Gem::InstallError, Bundler::APIResponseInvalidDependenciesError => e
      return false, specific_failure_message(e)
    end

    private

    def specific_failure_message(e)
      message = "#{e.class}: #{e.message}\n"
      message += "  " + e.backtrace.join("\n  ") + "\n\n"
      message = message.lines.first + Bundler.ui.add_color(message.lines.drop(1).join, :clear)
      message + Bundler.ui.add_color(failure_message, :red)
    end

    def failure_message
      install_error_message
    end

    def install_error_message
      "An error occurred while installing #{spec.name} (#{spec.version}), and Bundler cannot continue."
    end

    def spec_settings
      # Fetch the build settings, if there are any
      if settings = Bundler.settings["build.#{spec.name}"]
        require "shellwords"
        Shellwords.shellsplit(settings)
      end
    end

    def install
      spec.source.install(
        spec,
        :force => force,
        :ensure_builtin_gems_cached => standalone,
        :build_args => Array(spec_settings),
        :previous_spec => previous_spec,
      )
    end

    def previous_spec
      locked_gems = installer.definition.locked_gems
      return unless locked_gems

      locked_gems.specs.find {|s| s.name == spec.name }
    end

    def out_of_space_message
      "#{install_error_message}\nYour disk is out of space. Free some space to be able to install your bundle."
    end

    def generate_executable_stubs
      return if Bundler.feature_flag.forget_cli_options?
      return if Bundler.settings[:inline]
      if Bundler.settings[:bin] && standalone
        installer.generate_standalone_bundler_executable_stubs(spec)
      elsif Bundler.settings[:bin]
        installer.generate_bundler_executable_stubs(spec, :force => true)
      end
    end
  end
end
PK*"#[��y��?gems/bundler-2.3.27/lib/bundler/installer/parallel_installer.rbnu�[���# frozen_string_literal: true

require_relative "../worker"
require_relative "gem_installer"

module Bundler
  class ParallelInstaller
    class SpecInstallation
      attr_accessor :spec, :name, :full_name, :post_install_message, :state, :error
      def initialize(spec)
        @spec = spec
        @name = spec.name
        @full_name = spec.full_name
        @state = :none
        @post_install_message = ""
        @error = nil
      end

      def installed?
        state == :installed
      end

      def enqueued?
        state == :enqueued
      end

      def failed?
        state == :failed
      end

      def ready_to_enqueue?
        state == :none
      end

      def has_post_install_message?
        !post_install_message.empty?
      end

      def ignorable_dependency?(dep)
        dep.type == :development || dep.name == @name
      end

      # Checks installed dependencies against spec's dependencies to make
      # sure needed dependencies have been installed.
      def dependencies_installed?(all_specs)
        installed_specs = all_specs.select(&:installed?).map(&:name)
        dependencies.all? {|d| installed_specs.include? d.name }
      end

      # Represents only the non-development dependencies, the ones that are
      # itself and are in the total list.
      def dependencies
        @dependencies ||= all_dependencies.reject {|dep| ignorable_dependency? dep }
      end

      def missing_lockfile_dependencies(all_spec_names)
        dependencies.reject {|dep| all_spec_names.include? dep.name }
      end

      # Represents all dependencies
      def all_dependencies
        @spec.dependencies
      end

      def to_s
        "#<#{self.class} #{full_name} (#{state})>"
      end
    end

    def self.call(*args)
      new(*args).call
    end

    attr_reader :size

    def initialize(installer, all_specs, size, standalone, force)
      @installer = installer
      @size = size
      @standalone = standalone
      @force = force
      @specs = all_specs.map {|s| SpecInstallation.new(s) }
      @spec_set = all_specs
      @rake = @specs.find {|s| s.name == "rake" }
    end

    def call
      check_for_corrupt_lockfile

      if @rake
        do_install(@rake, 0)
        Gem::Specification.reset
      end

      if @size > 1
        install_with_worker
      else
        install_serially
      end

      check_for_unmet_dependencies

      handle_error if failed_specs.any?
      @specs
    ensure
      worker_pool && worker_pool.stop
    end

    def check_for_unmet_dependencies
      unmet_dependencies = @specs.map do |s|
        [
          s,
          s.dependencies.reject {|dep| @specs.any? {|spec| dep.matches_spec?(spec.spec) } },
        ]
      end.reject {|a| a.last.empty? }
      return if unmet_dependencies.empty?

      warning = []
      warning << "Your lockfile doesn't include a valid resolution."
      warning << "You can fix this by regenerating your lockfile or trying to manually editing the bad locked gems to a version that satisfies all dependencies."
      warning << "The unmet dependencies are:"

      unmet_dependencies.each do |spec, unmet_spec_dependencies|
        unmet_spec_dependencies.each do |unmet_spec_dependency|
          warning << "* #{unmet_spec_dependency}, depended upon #{spec.full_name}, unsatisfied by #{@specs.find {|s| s.name == unmet_spec_dependency.name && !unmet_spec_dependency.matches_spec?(s.spec) }.full_name}"
        end
      end

      Bundler.ui.warn(warning.join("\n"))
    end

    def check_for_corrupt_lockfile
      missing_dependencies = @specs.map do |s|
        [
          s,
          s.missing_lockfile_dependencies(@specs.map(&:name)),
        ]
      end.reject {|a| a.last.empty? }
      return if missing_dependencies.empty?

      warning = []
      warning << "Your lockfile was created by an old Bundler that left some things out."
      if @size != 1
        warning << "Because of the missing DEPENDENCIES, we can only install gems one at a time, instead of installing #{@size} at a time."
        @size = 1
      end
      warning << "You can fix this by adding the missing gems to your Gemfile, running bundle install, and then removing the gems from your Gemfile."
      warning << "The missing gems are:"

      missing_dependencies.each do |spec, missing|
        warning << "* #{missing.map(&:name).join(", ")} depended upon by #{spec.name}"
      end

      Bundler.ui.warn(warning.join("\n"))
    end

    private

    def failed_specs
      @specs.select(&:failed?)
    end

    def install_with_worker
      enqueue_specs
      process_specs until finished_installing?
    end

    def install_serially
      until finished_installing?
        raise "failed to find a spec to enqueue while installing serially" unless spec_install = @specs.find(&:ready_to_enqueue?)
        spec_install.state = :enqueued
        do_install(spec_install, 0)
      end
    end

    def worker_pool
      @worker_pool ||= Bundler::Worker.new @size, "Parallel Installer", lambda {|spec_install, worker_num|
        do_install(spec_install, worker_num)
      }
    end

    def do_install(spec_install, worker_num)
      Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL, spec_install)
      gem_installer = Bundler::GemInstaller.new(
        spec_install.spec, @installer, @standalone, worker_num, @force
      )
      success, message = gem_installer.install_from_spec
      if success
        spec_install.state = :installed
        spec_install.post_install_message = message unless message.nil?
      else
        spec_install.error = "#{message}\n\n#{require_tree_for_spec(spec_install.spec)}"
        spec_install.state = :failed
      end
      Plugin.hook(Plugin::Events::GEM_AFTER_INSTALL, spec_install)
      spec_install
    end

    # Dequeue a spec and save its post-install message and then enqueue the
    # remaining specs.
    # Some specs might've had to wait til this spec was installed to be
    # processed so the call to `enqueue_specs` is important after every
    # dequeue.
    def process_specs
      worker_pool.deq
      enqueue_specs
    end

    def finished_installing?
      @specs.all? do |spec|
        return true if spec.failed?
        spec.installed?
      end
    end

    def handle_error
      errors = failed_specs.map(&:error)
      if exception = errors.find {|e| e.is_a?(Bundler::BundlerError) }
        raise exception
      end
      raise Bundler::InstallError, errors.join("\n\n")
    end

    def require_tree_for_spec(spec)
      tree = @spec_set.what_required(spec)
      t = String.new("In #{File.basename(SharedHelpers.default_gemfile)}:\n")
      tree.each_with_index do |s, depth|
        t << "  " * depth.succ << s.name
        unless tree.last == s
          t << %( was resolved to #{s.version}, which depends on)
        end
        t << %(\n)
      end
      t
    end

    # Keys in the remains hash represent uninstalled gems specs.
    # We enqueue all gem specs that do not have any dependencies.
    # Later we call this lambda again to install specs that depended on
    # previously installed specifications. We continue until all specs
    # are installed.
    def enqueue_specs
      @specs.select(&:ready_to_enqueue?).each do |spec|
        if spec.dependencies_installed? @specs
          spec.state = :enqueued
          worker_pool.enq spec
        end
      end
    end
  end
end
PK*"#[�aboXX7gems/bundler-2.3.27/lib/bundler/installer/standalone.rbnu�[���# frozen_string_literal: true

module Bundler
  class Standalone
    def initialize(groups, definition)
      @specs = definition.specs_for(groups)
    end

    def generate
      SharedHelpers.filesystem_access(bundler_path) do |p|
        FileUtils.mkdir_p(p)
      end
      File.open File.join(bundler_path, "setup.rb"), "w" do |file|
        file.puts "require 'rbconfig'"
        file.puts define_path_helpers
        file.puts reverse_rubygems_kernel_mixin
        paths.each do |path|
          if Pathname.new(path).absolute?
            file.puts %($:.unshift "#{path}")
          else
            file.puts %($:.unshift File.expand_path("\#{__dir__}/#{path}"))
          end
        end
      end
    end

    private

    def paths
      @specs.map do |spec|
        next if spec.name == "bundler"
        Array(spec.require_paths).map do |path|
          gem_path(path, spec).
            sub(version_dir, '#{RUBY_ENGINE}/#{Gem.ruby_api_version}').
            sub(extensions_dir, 'extensions/\k<platform>/#{Gem.extension_api_version}')
          # This is a static string intentionally. It's interpolated at a later time.
        end
      end.flatten.compact
    end

    def version_dir
      "#{RUBY_ENGINE}/#{Gem.ruby_api_version}"
    end

    def extensions_dir
      %r{extensions/(?<platform>[^/]+)/#{Regexp.escape(Gem.extension_api_version)}}
    end

    def bundler_path
      Bundler.root.join(Bundler.settings[:path].to_s, "bundler")
    end

    def gem_path(path, spec)
      full_path = Pathname.new(path).absolute? ? path : File.join(spec.full_gem_path, path)
      if spec.source.instance_of?(Source::Path)
        full_path
      else
        Pathname.new(full_path).relative_path_from(Bundler.root.join(bundler_path)).to_s
      end
    rescue TypeError
      error_message = "#{spec.name} #{spec.version} has an invalid gemspec"
      raise Gem::InvalidSpecificationException.new(error_message)
    end

    def define_path_helpers
      <<~'END'
        unless defined?(Gem)
          module Gem
            def self.ruby_api_version
              RbConfig::CONFIG["ruby_version"]
            end

            def self.extension_api_version
              if 'no' == RbConfig::CONFIG['ENABLE_SHARED']
                "#{ruby_api_version}-static"
              else
                ruby_api_version
              end
            end
          end
        end
      END
    end

    def reverse_rubygems_kernel_mixin
      <<~END
      kernel = (class << ::Kernel; self; end)
      [kernel, ::Kernel].each do |k|
        if k.private_method_defined?(:gem_original_require)
          private_require = k.private_method_defined?(:require)
          k.send(:remove_method, :require)
          k.send(:define_method, :require, k.instance_method(:gem_original_require))
          k.send(:private, :require) if private_require
        end
      end
      END
    end
  end
end
PK*"#[|��YY/gems/bundler-2.3.27/lib/bundler/vendored_uri.rbnu�[���# frozen_string_literal: true

module Bundler; end
require_relative "vendor/uri/lib/uri"
PK*"#[)PY�\\6gems/bundler-2.3.27/lib/bundler/similarity_detector.rbnu�[���# frozen_string_literal: true

module Bundler
  class SimilarityDetector
    SimilarityScore = Struct.new(:string, :distance)

    # initialize with an array of words to be matched against
    def initialize(corpus)
      @corpus = corpus
    end

    # return an array of words similar to 'word' from the corpus
    def similar_words(word, limit = 3)
      words_by_similarity = @corpus.map {|w| SimilarityScore.new(w, levenshtein_distance(word, w)) }
      words_by_similarity.select {|s| s.distance <= limit }.sort_by(&:distance).map(&:string)
    end

    # return the result of 'similar_words', concatenated into a list
    # (eg "a, b, or c")
    def similar_word_list(word, limit = 3)
      words = similar_words(word, limit)
      if words.length == 1
        words[0]
      elsif words.length > 1
        [words[0..-2].join(", "), words[-1]].join(" or ")
      end
    end

    protected

    # https://www.informit.com/articles/article.aspx?p=683059&seqNum=36
    def levenshtein_distance(this, that, ins = 2, del = 2, sub = 1)
      # ins, del, sub are weighted costs
      return nil if this.nil?
      return nil if that.nil?
      dm = [] # distance matrix

      # Initialize first row values
      dm[0] = (0..this.length).collect {|i| i * ins }
      fill = [0] * (this.length - 1)

      # Initialize first column values
      (1..that.length).each do |i|
        dm[i] = [i * del, fill.flatten]
      end

      # populate matrix
      (1..that.length).each do |i|
        (1..this.length).each do |j|
          # critical comparison
          dm[i][j] = [
            dm[i - 1][j - 1] + (this[j - 1] == that[i - 1] ? 0 : sub),
            dm[i][j - 1] + ins,
            dm[i - 1][j] + del,
          ].min
        end
      end

      # The last value in matrix is the Levenshtein distance between the strings
      dm[that.length][this.length]
    end
  end
end
PK*"#[�� �7gems/bundler-2.3.27/lib/bundler/gem_version_promoter.rbnu�[���# frozen_string_literal: true

module Bundler
  # This class contains all of the logic for determining the next version of a
  # Gem to update to based on the requested level (patch, minor, major).
  # Primarily designed to work with Resolver which will provide it the list of
  # available dependency versions as found in its index, before returning it to
  # to the resolution engine to select the best version.
  class GemVersionPromoter
    DEBUG = ENV["BUNDLER_DEBUG_RESOLVER"] || ENV["DEBUG_RESOLVER"]

    attr_reader :level, :locked_specs, :unlock_gems

    # By default, strict is false, meaning every available version of a gem
    # is returned from sort_versions. The order gives preference to the
    # requested level (:patch, :minor, :major) but in complicated requirement
    # cases some gems will by necessity by promoted past the requested level,
    # or even reverted to older versions.
    #
    # If strict is set to true, the results from sort_versions will be
    # truncated, eliminating any version outside the current level scope.
    # This can lead to unexpected outcomes or even VersionConflict exceptions
    # that report a version of a gem not existing for versions that indeed do
    # existing in the referenced source.
    attr_accessor :strict

    attr_accessor :prerelease_specified

    # Given a list of locked_specs and a list of gems to unlock creates a
    # GemVersionPromoter instance.
    #
    # @param locked_specs [SpecSet] All current locked specs. Unlike Definition
    #   where this list is empty if all gems are being updated, this should
    #   always be populated for all gems so this class can properly function.
    # @param unlock_gems [String] List of gem names being unlocked. If empty,
    #   all gems will be considered unlocked.
    # @return [GemVersionPromoter]
    def initialize(locked_specs = SpecSet.new([]), unlock_gems = [])
      @level = :major
      @strict = false
      @locked_specs = locked_specs
      @unlock_gems = unlock_gems
      @sort_versions = {}
      @prerelease_specified = {}
    end

    # @param value [Symbol] One of three Symbols: :major, :minor or :patch.
    def level=(value)
      v = case value
          when String, Symbol
            value.to_sym
      end

      raise ArgumentError, "Unexpected level #{v}. Must be :major, :minor or :patch" unless [:major, :minor, :patch].include?(v)
      @level = v
    end

    # Given a Dependency and an Array of Specifications of available versions for a
    # gem, this method will return the Array of Specifications sorted (and possibly
    # truncated if strict is true) in an order to give preference to the current
    # level (:major, :minor or :patch) when resolution is deciding what versions
    # best resolve all dependencies in the bundle.
    # @param dep [Dependency] The Dependency of the gem.
    # @param spec_groups [Specification] An array of Specifications for the same gem
    #    named in the @dep param.
    # @return [Specification] A new instance of the Specification Array sorted and
    #    possibly filtered.
    def sort_versions(dep, spec_groups)
      @sort_versions[dep] ||= begin
        gem_name = dep.name

        # An Array per version returned, different entries for different platforms.
        # We only need the version here so it's ok to hard code this to the first instance.
        locked_spec = locked_specs[gem_name].first

        if strict
          filter_dep_specs(spec_groups, locked_spec)
        else
          sort_dep_specs(spec_groups, locked_spec)
        end
      end
    end

    def reset
      @sort_versions = {}
    end

    # @return [bool] Convenience method for testing value of level variable.
    def major?
      level == :major
    end

    # @return [bool] Convenience method for testing value of level variable.
    def minor?
      level == :minor
    end

    private

    def filter_dep_specs(spec_groups, locked_spec)
      res = spec_groups.select do |spec_group|
        if locked_spec && !major?
          gsv = spec_group.version
          lsv = locked_spec.version

          must_match = minor? ? [0] : [0, 1]

          matches = must_match.map {|idx| gsv.segments[idx] == lsv.segments[idx] }
          matches.uniq == [true] ? (gsv >= lsv) : false
        else
          true
        end
      end

      sort_dep_specs(res, locked_spec)
    end

    def sort_dep_specs(spec_groups, locked_spec)
      @locked_version = locked_spec&.version
      @gem_name = locked_spec&.name

      result = spec_groups.sort do |a, b|
        @a_ver = a.version
        @b_ver = b.version

        unless @gem_name && @prerelease_specified[@gem_name]
          a_pre = @a_ver.prerelease?
          b_pre = @b_ver.prerelease?

          next -1 if a_pre && !b_pre
          next  1 if b_pre && !a_pre
        end

        if major?
          @a_ver <=> @b_ver
        elsif either_version_older_than_locked
          @a_ver <=> @b_ver
        elsif segments_do_not_match(:major)
          @b_ver <=> @a_ver
        elsif !minor? && segments_do_not_match(:minor)
          @b_ver <=> @a_ver
        else
          @a_ver <=> @b_ver
        end
      end
      post_sort(result)
    end

    def either_version_older_than_locked
      @locked_version && (@a_ver < @locked_version || @b_ver < @locked_version)
    end

    def segments_do_not_match(level)
      index = [:major, :minor].index(level)
      @a_ver.segments[index] != @b_ver.segments[index]
    end

    def unlocking_gem?
      unlock_gems.empty? || (@gem_name && unlock_gems.include?(@gem_name))
    end

    # Specific version moves can't always reliably be done during sorting
    # as not all elements are compared against each other.
    def post_sort(result)
      # default :major behavior in Bundler does not do this
      return result if major?
      if unlocking_gem? || @locked_version.nil?
        result
      else
        move_version_to_end(result, @locked_version)
      end
    end

    def move_version_to_end(result, version)
      move, keep = result.partition {|s| s.version.to_s == version.to_s }
      keep.concat(move)
    end
  end
end
PK*"#[jIUKxx+gems/bundler-2.3.27/lib/bundler/spec_set.rbnu�[���# frozen_string_literal: true

require_relative "vendored_tsort"

module Bundler
  class SpecSet
    include Enumerable
    include TSort

    attr_reader :incomplete_specs

    def initialize(specs, incomplete_specs = [])
      @specs = specs
      @incomplete_specs = incomplete_specs
    end

    def for(dependencies, check = false, platforms = [nil])
      handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
      deps = dependencies.product(platforms)
      specs = []

      loop do
        break unless dep = deps.shift

        name = dep[0].name
        platform = dep[1]

        key = [name, platform]
        next if handled.key?(key)

        handled[key] = true

        specs_for_dep = specs_for_dependency(*dep)
        if specs_for_dep.any?
          specs.concat(specs_for_dep)

          specs_for_dep.first.dependencies.each do |d|
            next if d.type == :development
            deps << [d, dep[1]]
          end
        elsif check
          @incomplete_specs += lookup[name]
        end
      end

      specs
    end

    def [](key)
      key = key.name if key.respond_to?(:name)
      lookup[key].reverse
    end

    def []=(key, value)
      @specs << value
      @lookup = nil
      @sorted = nil
    end

    def delete(spec)
      @specs.delete(spec)
      @lookup = nil
      @sorted = nil
    end

    def sort!
      self
    end

    def to_a
      sorted.dup
    end

    def to_hash
      lookup.dup
    end

    def materialize(deps)
      materialized = self.for(deps, true)

      SpecSet.new(materialized, incomplete_specs)
    end

    # Materialize for all the specs in the spec set, regardless of what platform they're for
    # This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform)
    # @return [Array<Gem::Specification>]
    def materialized_for_all_platforms
      @specs.map do |s|
        next s unless s.is_a?(LazySpecification)
        s.source.remote!
        spec = s.materialize_for_installation
        raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
        spec
      end
    end

    def incomplete_ruby_specs?(deps)
      self.for(deps, true, [Gem::Platform::RUBY])

      @incomplete_specs.any?
    end

    def missing_specs
      @specs.select {|s| s.is_a?(LazySpecification) }
    end

    def merge(set)
      arr = sorted.dup
      set.each do |set_spec|
        full_name = set_spec.full_name
        next if arr.any? {|spec| spec.full_name == full_name }
        arr << set_spec
      end
      SpecSet.new(arr)
    end

    def -(other)
      SpecSet.new(to_a - other.to_a)
    end

    def find_by_name_and_platform(name, platform)
      @specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
    end

    def delete_by_name_and_version(name, version)
      @specs.reject! {|spec| spec.name == name && spec.version == version }
      @lookup = nil
      @sorted = nil
    end

    def what_required(spec)
      unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
        return [spec]
      end
      what_required(req) << spec
    end

    def <<(spec)
      @specs << spec
    end

    def length
      @specs.length
    end

    def size
      @specs.size
    end

    def empty?
      @specs.empty?
    end

    def each(&b)
      sorted.each(&b)
    end

    private

    def sorted
      rake = @specs.find {|s| s.name == "rake" }
      begin
        @sorted ||= ([rake] + tsort).compact.uniq
      rescue TSort::Cyclic => error
        cgems = extract_circular_gems(error)
        raise CyclicDependencyError, "Your bundle requires gems that depend" \
          " on each other, creating an infinite loop. Please remove either" \
          " gem '#{cgems[1]}' or gem '#{cgems[0]}' and try again."
      end
    end

    def extract_circular_gems(error)
      error.message.scan(/@name="(.*?)"/).flatten
    end

    def lookup
      @lookup ||= begin
        lookup = Hash.new {|h, k| h[k] = [] }
        @specs.each do |s|
          lookup[s.name] << s
        end
        lookup
      end
    end

    def tsort_each_node
      # MUST sort by name for backwards compatibility
      @specs.sort_by(&:name).each {|s| yield s }
    end

    def specs_for_dependency(dep, platform)
      specs_for_name = lookup[dep.name]
      if platform.nil?
        matching_specs = specs_for_name.map {|s| s.materialize_for_installation if Gem::Platform.match_spec?(s) }.compact
        GemHelpers.sort_best_platform_match(matching_specs, Bundler.local_platform)
      else
        GemHelpers.select_best_platform_match(specs_for_name, dep.force_ruby_platform ? Gem::Platform::RUBY : platform)
      end
    end

    def tsort_each_child(s)
      s.dependencies.sort_by(&:name).each do |d|
        next if d.type == :development
        lookup[d.name].each {|s2| yield s2 }
      end
    end
  end
end
PK*"#[a�#Y(gems/bundler-2.3.27/lib/bundler/index.rbnu�[���# frozen_string_literal: true

module Bundler
  class Index
    include Enumerable

    def self.build
      i = new
      yield i
      i
    end

    attr_reader :specs, :all_specs, :sources
    protected :specs, :all_specs

    RUBY = "ruby".freeze
    NULL = "\0".freeze

    def initialize
      @sources = []
      @cache = {}
      @specs = Hash.new {|h, k| h[k] = {} }
      @all_specs = Hash.new {|h, k| h[k] = EMPTY_SEARCH }
    end

    def initialize_copy(o)
      @sources = o.sources.dup
      @cache = {}
      @specs = Hash.new {|h, k| h[k] = {} }
      @all_specs = Hash.new {|h, k| h[k] = EMPTY_SEARCH }

      o.specs.each do |name, hash|
        @specs[name] = hash.dup
      end
      o.all_specs.each do |name, array|
        @all_specs[name] = array.dup
      end
    end

    def inspect
      "#<#{self.class}:0x#{object_id} sources=#{sources.map(&:inspect)} specs.size=#{specs.size}>"
    end

    def empty?
      each { return false }
      true
    end

    def search_all(name)
      all_matches = local_search(name) + @all_specs[name]
      @sources.each do |source|
        all_matches.concat(source.search_all(name))
      end
      all_matches
    end

    # Search this index's specs, and any source indexes that this index knows
    # about, returning all of the results.
    def search(query)
      results = local_search(query)
      return results unless @sources.any?

      @sources.each do |source|
        results.concat(source.search(query))
      end
      results.uniq(&:full_name)
    end

    def local_search(query)
      case query
      when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query)
      when String then specs_by_name(query)
      when Gem::Dependency then search_by_dependency(query)
      when Array then search_by_name_and_version(*query)
      else
        raise "You can't search for a #{query.inspect}."
      end
    end

    alias_method :[], :search

    def <<(spec)
      @specs[spec.name][spec.full_name] = spec
      spec
    end

    def each(&blk)
      return enum_for(:each) unless blk
      specs.values.each do |spec_sets|
        spec_sets.values.each(&blk)
      end
      sources.each {|s| s.each(&blk) }
      self
    end

    def spec_names
      names = specs.keys + sources.map(&:spec_names)
      names.uniq!
      names
    end

    def unmet_dependency_names
      dependency_names.select do |name|
        search(name).empty?
      end
    end

    def dependency_names
      names = []
      each do |spec|
        spec.dependencies.each do |dep|
          next if dep.type == :development
          names << dep.name
        end
      end
      names.uniq
    end

    def use(other, override_dupes = false)
      return unless other
      other.each do |s|
        if (dupes = search_by_spec(s)) && !dupes.empty?
          # safe to << since it's a new array when it has contents
          @all_specs[s.name] = dupes << s
          next unless override_dupes
        end
        self << s
      end
      self
    end

    def size
      @sources.inject(@specs.size) do |size, source|
        size += source.size
      end
    end

    # Whether all the specs in self are in other
    # TODO: rename to #include?
    def ==(other)
      all? do |spec|
        other_spec = other[spec].first
        other_spec && dependencies_eql?(spec, other_spec) && spec.source == other_spec.source
      end
    end

    def dependencies_eql?(spec, other_spec)
      deps       = spec.dependencies.select {|d| d.type != :development }
      other_deps = other_spec.dependencies.select {|d| d.type != :development }
      deps.sort == other_deps.sort
    end

    def add_source(index)
      raise ArgumentError, "Source must be an index, not #{index.class}" unless index.is_a?(Index)
      @sources << index
      @sources.uniq! # need to use uniq! here instead of checking for the item before adding
    end

    private

    def specs_by_name(name)
      @specs[name].values
    end

    def search_by_dependency(dependency)
      @cache[dependency] ||= begin
        specs = specs_by_name(dependency.name)
        found = specs.select do |spec|
          next true if spec.source.is_a?(Source::Gemspec)
          dependency.matches_spec?(spec)
        end

        found
      end
    end

    def search_by_name_and_version(name, version)
      specs_by_name(name).select {|spec| spec.version == version }
    end

    EMPTY_SEARCH = [].freeze

    def search_by_spec(spec)
      spec = @specs[spec.name][spec.full_name]
      spec ? [spec] : EMPTY_SEARCH
    end
  end
end
PK*"#[x�7��)gems/bundler-2.3.27/lib/bundler/worker.rbnu�[���# frozen_string_literal: true

module Bundler
  class Worker
    POISON = Object.new

    class WrappedException < StandardError
      attr_reader :exception
      def initialize(exn)
        @exception = exn
      end
    end

    # @return [String] the name of the worker
    attr_reader :name

    # Creates a worker pool of specified size
    #
    # @param size [Integer] Size of pool
    # @param name [String] name the name of the worker
    # @param func [Proc] job to run in inside the worker pool
    def initialize(size, name, func)
      @name = name
      @request_queue = Thread::Queue.new
      @response_queue = Thread::Queue.new
      @func = func
      @size = size
      @threads = nil
      @previous_interrupt_handler = nil
    end

    # Enqueue a request to be executed in the worker pool
    #
    # @param obj [String] mostly it is name of spec that should be downloaded
    def enq(obj)
      create_threads unless @threads
      @request_queue.enq obj
    end

    # Retrieves results of job function being executed in worker pool
    def deq
      result = @response_queue.deq
      raise result.exception if result.is_a?(WrappedException)
      result
    end

    def stop
      stop_threads
    end

    private

    def process_queue(i)
      loop do
        obj = @request_queue.deq
        break if obj.equal? POISON
        @response_queue.enq apply_func(obj, i)
      end
    end

    def apply_func(obj, i)
      @func.call(obj, i)
    rescue Exception => e # rubocop:disable Lint/RescueException
      WrappedException.new(e)
    end

    # Stop the worker threads by sending a poison object down the request queue
    # so as worker threads after retrieving it, shut themselves down
    def stop_threads
      return unless @threads

      @threads.each { @request_queue.enq POISON }
      @threads.each(&:join)

      remove_interrupt_handler

      @threads = nil
    end

    def abort_threads
      Bundler.ui.debug("\n#{caller.join("\n")}")
      @threads.each(&:exit)
      exit 1
    end

    def create_threads
      creation_errors = []

      @threads = Array.new(@size) do |i|
        begin
          Thread.start { process_queue(i) }.tap do |thread|
            thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
          end
        rescue ThreadError => e
          creation_errors << e
          nil
        end
      end.compact

      add_interrupt_handler unless @threads.empty?

      return if creation_errors.empty?

      message = "Failed to create threads for the #{name} worker: #{creation_errors.map(&:to_s).uniq.join(", ")}"
      raise ThreadCreationError, message if @threads.empty?
      Bundler.ui.info message
    end

    def add_interrupt_handler
      @previous_interrupt_handler = trap("INT") { abort_threads }
    end

    def remove_interrupt_handler
      return unless @previous_interrupt_handler

      trap "INT", @previous_interrupt_handler
    end
  end
end
PK*"#[h����-gems/bundler-2.3.27/lib/bundler/deployment.rbnu�[���# frozen_string_literal: true

require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2, "Bundler no longer integrates with " \
  "Capistrano, but Capistrano provides its own integration with " \
  "Bundler via the capistrano-bundler gem. Use it instead."

module Bundler
  class Deployment
    def self.define_task(context, task_method = :task, opts = {})
      if defined?(Capistrano) && context.is_a?(Capistrano::Configuration)
        context_name = "capistrano"
        role_default = "{:except => {:no_release => true}}"
        error_type = ::Capistrano::CommandError
      else
        context_name = "vlad"
        role_default = "[:app]"
        error_type = ::Rake::CommandFailedError
      end

      roles = context.fetch(:bundle_roles, false)
      opts[:roles] = roles if roles

      context.send :namespace, :bundle do
        send :desc, <<-DESC
          Install the current Bundler environment. By default, gems will be \
          installed to the shared/bundle path. Gems in the development and \
          test group will not be installed. The install command is executed \
          with the --deployment and --quiet flags. If the bundle cmd cannot \
          be found then you can override the bundle_cmd variable to specify \
          which one it should use. The base path to the app is fetched from \
          the :latest_release variable. Set it for custom deploy layouts.

          You can override any of these defaults by setting the variables shown below.

          N.B. bundle_roles must be defined before you require 'bundler/#{context_name}' \
          in your deploy.rb file.

            set :bundle_gemfile,  "Gemfile"
            set :bundle_dir,      File.join(fetch(:shared_path), 'bundle')
            set :bundle_flags,    "--deployment --quiet"
            set :bundle_without,  [:development, :test]
            set :bundle_with,     [:mysql]
            set :bundle_cmd,      "bundle" # e.g. "/opt/ruby/bin/bundle"
            set :bundle_roles,    #{role_default} # e.g. [:app, :batch]
        DESC
        send task_method, :install, opts do
          bundle_cmd     = context.fetch(:bundle_cmd, "bundle")
          bundle_flags   = context.fetch(:bundle_flags, "--deployment --quiet")
          bundle_dir     = context.fetch(:bundle_dir, File.join(context.fetch(:shared_path), "bundle"))
          bundle_gemfile = context.fetch(:bundle_gemfile, "Gemfile")
          bundle_without = [*context.fetch(:bundle_without, [:development, :test])].compact
          bundle_with    = [*context.fetch(:bundle_with, [])].compact
          app_path = context.fetch(:latest_release)
          if app_path.to_s.empty?
            raise error_type.new("Cannot detect current release path - make sure you have deployed at least once.")
          end
          args = ["--gemfile #{File.join(app_path, bundle_gemfile)}"]
          args << "--path #{bundle_dir}" unless bundle_dir.to_s.empty?
          args << bundle_flags.to_s
          args << "--without #{bundle_without.join(" ")}" unless bundle_without.empty?
          args << "--with #{bundle_with.join(" ")}" unless bundle_with.empty?

          run "cd #{app_path} && #{bundle_cmd} install #{args.join(" ")}"
        end
      end
    end
  end
end
PK*"#[��2885gems/bundler-2.3.27/lib/bundler/lazy_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  class LazySpecification
    include MatchPlatform

    attr_reader :name, :version, :dependencies, :platform
    attr_accessor :source, :remote, :force_ruby_platform

    def initialize(name, version, platform, source = nil)
      @name          = name
      @version       = version
      @dependencies  = []
      @platform      = platform || Gem::Platform::RUBY
      @source        = source
    end

    def full_name
      if platform == Gem::Platform::RUBY
        "#{@name}-#{@version}"
      else
        "#{@name}-#{@version}-#{platform}"
      end
    end

    def ==(other)
      identifier == other.identifier
    end

    def eql?(other)
      identifier.eql?(other.identifier)
    end

    def hash
      identifier.hash
    end

    ##
    # Does this locked specification satisfy +dependency+?
    #
    # NOTE: Rubygems default requirement is ">= 0", which doesn't match
    # prereleases of 0 versions, like "0.0.0.dev" or "0.0.0.SNAPSHOT". However,
    # bundler users expect those to work. We need to make sure that Gemfile
    # dependencies without explicit requirements (which use ">= 0" under the
    # hood by default) are still valid for locked specs using this kind of
    # versions. The method implements an ad-hoc fix for that. A better solution
    # might be to change default rubygems requirement of dependencies to be ">=
    # 0.A" but that's a major refactoring likely to break things. Hopefully we
    # can attempt it in the future.
    #

    def satisfies?(dependency)
      effective_requirement = dependency.requirement == Gem::Requirement.default ? Gem::Requirement.new(">= 0.A") : dependency.requirement

      @name == dependency.name && effective_requirement.satisfied_by?(Gem::Version.new(@version))
    end

    def to_lock
      out = String.new

      if platform == Gem::Platform::RUBY
        out << "    #{name} (#{version})\n"
      else
        out << "    #{name} (#{version}-#{platform})\n"
      end

      dependencies.sort_by(&:to_s).uniq.each do |dep|
        next if dep.type == :development
        out << "    #{dep.to_lock}\n"
      end

      out
    end

    def materialize_for_installation
      source.local!

      matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
      return self if matching_specs.empty?

      candidates = if use_exact_resolved_specifications?
        matching_specs
      else
        target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform

        installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)

        specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
        return specification unless specification.nil?

        if target_platform != platform
          installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform)
        end

        installable_candidates
      end

      __materialize__(candidates)
    end

    # If in frozen mode, we fallback to a non-installable candidate because by
    # doing this we avoid re-resolving and potentially end up changing the
    # lock file, which is not allowed. In that case, we will give a proper error
    # about the mismatch higher up the stack, right before trying to install the
    # bad gem.
    def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
      search = candidates.reverse.find do |spec|
        spec.is_a?(StubSpecification) ||
          (spec.matches_current_ruby? &&
           spec.matches_current_rubygems?)
      end
      if search.nil? && fallback_to_non_installable
        search = candidates.last
      else
        search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
      end
      search
    end

    def to_s
      @__to_s ||= if platform == Gem::Platform::RUBY
        "#{name} (#{version})"
      else
        "#{name} (#{version}-#{platform})"
      end
    end

    def identifier
      @__identifier ||= [name, version, platform.to_s]
    end

    def git_version
      return unless source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

    private

    def use_exact_resolved_specifications?
      @use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
    end

    #
    # For backwards compatibility with existing lockfiles, if the most specific
    # locked platform is not a specific platform like x86_64-linux or
    # universal-java-11, then we keep the previous behaviour of resolving the
    # best platform variant at materiliazation time. For previous bundler
    # versions (before 2.2.0) this was always the case (except when the lockfile
    # only included non-ruby platforms), but we're also keeping this behaviour
    # on newer bundlers unless users generate the lockfile from scratch or
    # explicitly add a more specific platform.
    #
    def ruby_platform_materializes_to_ruby_platform?
      generic_platform = generic_local_platform == Gem::Platform::JAVA ? Gem::Platform::JAVA : Gem::Platform::RUBY

      !Bundler.most_specific_locked_platform?(generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
    end
  end
end
PK*"#[�Q���)�)/gems/bundler-2.3.27/lib/bundler/rubygems_ext.rbnu�[���# frozen_string_literal: true

require "pathname"

require "rubygems/specification"

# We can't let `Gem::Source` be autoloaded in the `Gem::Specification#source`
# redefinition below, so we need to load it upfront. The reason is that if
# Bundler monkeypatches are loaded before RubyGems activates an executable (for
# example, through `ruby -rbundler -S irb`), gem activation might end up calling
# the redefined `Gem::Specification#source` and triggering the `Gem::Source`
# autoload. That would result in requiring "rubygems/source" inside another
# require, which would trigger a monitor error and cause the `autoload` to
# eventually fail. A better solution is probably to completely avoid autoloading
# `Gem::Source` from the redefined `Gem::Specification#source`.
require "rubygems/source"

require_relative "match_metadata"
require_relative "match_platform"

# Cherry-pick fixes to `Gem.ruby_version` to be useful for modern Bundler
# versions and ignore patchlevels
# (https://github.com/rubygems/rubygems/pull/5472,
# https://github.com/rubygems/rubygems/pull/5486). May be removed once RubyGems
# 3.3.12 support is dropped.
unless Gem.ruby_version.to_s == RUBY_VERSION || RUBY_PATCHLEVEL == -1
  Gem.instance_variable_set(:@ruby_version, Gem::Version.new(RUBY_VERSION))
end

module Gem
  class Specification
    include ::Bundler::MatchMetadata
    include ::Bundler::MatchPlatform

    attr_accessor :remote, :location, :relative_loaded_from

    remove_method :source
    attr_writer :source
    def source
      (defined?(@source) && @source) || Gem::Source::Installed.new
    end

    alias_method :rg_full_gem_path, :full_gem_path
    alias_method :rg_loaded_from,   :loaded_from

    def full_gem_path
      if source.respond_to?(:root)
        Pathname.new(loaded_from).dirname.expand_path(source.root).to_s.tap {|x| x.untaint if RUBY_VERSION < "2.7" }
      else
        rg_full_gem_path
      end
    end

    def loaded_from
      if relative_loaded_from
        source.path.join(relative_loaded_from).to_s
      else
        rg_loaded_from
      end
    end

    def load_paths
      full_require_paths
    end

    alias_method :rg_extension_dir, :extension_dir
    def extension_dir
      @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name)
        unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
        File.expand_path(File.join(extensions_dir, unique_extension_dir))
      else
        rg_extension_dir
      end
    end

    remove_method :gem_dir if instance_methods(false).include?(:gem_dir)
    def gem_dir
      full_gem_path
    end

    unless const_defined?(:LATEST_RUBY_WITHOUT_PATCH_VERSIONS)
      LATEST_RUBY_WITHOUT_PATCH_VERSIONS = Gem::Version.new("2.1")

      alias_method :rg_required_ruby_version=, :required_ruby_version=
      def required_ruby_version=(req)
        self.rg_required_ruby_version = req

        @required_ruby_version.requirements.map! do |op, v|
          if v >= LATEST_RUBY_WITHOUT_PATCH_VERSIONS && v.release.segments.size == 4
            [op == "~>" ? "=" : op, Gem::Version.new(v.segments.tap {|s| s.delete_at(3) }.join("."))]
          else
            [op, v]
          end
        end
      end
    end

    def groups
      @groups ||= []
    end

    def git_version
      return unless loaded_from && source.is_a?(Bundler::Source::Git)
      " #{source.revision[0..6]}"
    end

    def to_gemfile(path = nil)
      gemfile = String.new("source 'https://rubygems.org'\n")
      gemfile << dependencies_to_gemfile(nondevelopment_dependencies)
      unless development_dependencies.empty?
        gemfile << "\n"
        gemfile << dependencies_to_gemfile(development_dependencies, :development)
      end
      gemfile
    end

    # Backfill missing YAML require when not defined. Fixed since 3.1.0.pre1.
    module YamlBackfiller
      def to_yaml(opts = {})
        Gem.load_yaml unless defined?(::YAML)

        super(opts)
      end
    end

    prepend YamlBackfiller

    def nondevelopment_dependencies
      dependencies - development_dependencies
    end

    def deleted_gem?
      !default_gem? && !File.directory?(full_gem_path)
    end

    private

    def dependencies_to_gemfile(dependencies, group = nil)
      gemfile = String.new
      if dependencies.any?
        gemfile << "group :#{group} do\n" if group
        dependencies.each do |dependency|
          gemfile << "  " if group
          gemfile << %(gem "#{dependency.name}")
          req = dependency.requirements_list.first
          gemfile << %(, "#{req}") if req
          gemfile << "\n"
        end
        gemfile << "end\n" if group
      end
      gemfile
    end
  end

  class Dependency
    attr_accessor :source, :groups

    alias_method :eql?, :==

    def force_ruby_platform
      false
    end

    def encode_with(coder)
      to_yaml_properties.each do |ivar|
        coder[ivar.to_s.sub(/^@/, "")] = instance_variable_get(ivar)
      end
    end

    def to_yaml_properties
      instance_variables.reject {|p| ["@source", "@groups"].include?(p.to_s) }
    end

    def to_lock
      out = String.new("  #{name}")
      unless requirement.none?
        reqs = requirement.requirements.map {|o, v| "#{o} #{v}" }.sort.reverse
        out << " (#{reqs.join(", ")})"
      end
      out
    end
  end

  # comparison is done order independently since rubygems 3.2.0.rc.2
  unless Gem::Requirement.new("> 1", "< 2") == Gem::Requirement.new("< 2", "> 1")
    class Requirement
      module OrderIndependentComparison
        def ==(other)
          return unless Gem::Requirement === other

          if _requirements_sorted? && other._requirements_sorted?
            super
          else
            _with_sorted_requirements == other._with_sorted_requirements
          end
        end

        protected

        def _requirements_sorted?
          return @_are_requirements_sorted if defined?(@_are_requirements_sorted)
          strings = as_list
          @_are_requirements_sorted = strings == strings.sort
        end

        def _with_sorted_requirements
          @_with_sorted_requirements ||= _requirements_sorted? ? self : self.class.new(as_list.sort)
        end
      end

      prepend OrderIndependentComparison
    end
  end

  if Gem::Requirement.new("~> 2.0").hash == Gem::Requirement.new("~> 2.0.0").hash
    class Requirement
      module CorrectHashForLambdaOperator
        def hash
          if requirements.any? {|r| r.first == "~>" }
            requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
          else
            super
          end
        end
      end

      prepend CorrectHashForLambdaOperator
    end
  end

  require "rubygems/platform"

  class Platform
    JAVA  = Gem::Platform.new("java")
    MSWIN = Gem::Platform.new("mswin32")
    MSWIN64 = Gem::Platform.new("mswin64")
    MINGW = Gem::Platform.new("x86-mingw32")
    X64_MINGW = [Gem::Platform.new("x64-mingw32"),
                 Gem::Platform.new("x64-mingw-ucrt")].freeze
    WINDOWS = [MSWIN, MSWIN64, MINGW, X64_MINGW].flatten.freeze
    X64_LINUX = Gem::Platform.new("x86_64-linux")
    X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl")

    if X64_LINUX === X64_LINUX_MUSL
      remove_method :===

      def ===(other)
        return nil unless Gem::Platform === other

        # universal-mingw32 matches x64-mingw-ucrt
        return true if (@cpu == "universal" || other.cpu == "universal") &&
                       @os.start_with?("mingw") && other.os.start_with?("mingw")

        # cpu
        ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
        (@cpu == "arm" && other.cpu.start_with?("arm"))) &&

          # os
          @os == other.os &&

          # version
          (
            (@os != "linux" && (@version.nil? || other.version.nil?)) ||
            (@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
            @version == other.version
          )
      end

      # This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`.
      # Once only 3.3.23 is supported, we can use the method in RubyGems.
      def normalized_linux_version_ext
        return nil unless @version

        without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
        return nil if without_gnu_nor_abi_modifiers.empty?

        without_gnu_nor_abi_modifiers
      end
    end
  end

  Platform.singleton_class.module_eval do
    unless Platform.singleton_methods.include?(:match_spec?)
      def match_spec?(spec)
        match_gem?(spec.platform, spec.name)
      end

      def match_gem?(platform, gem_name)
        match_platforms?(platform, Gem.platforms)
      end
    end

    match_platforms_defined = Gem::Platform.respond_to?(:match_platforms?, true)

    if !match_platforms_defined || Gem::Platform.send(:match_platforms?, Gem::Platform::X64_LINUX_MUSL, [Gem::Platform::X64_LINUX])

      private

      remove_method :match_platforms? if match_platforms_defined

      def match_platforms?(platform, platforms)
        platforms.any? do |local_platform|
          platform.nil? ||
            local_platform == platform ||
            (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
        end
      end
    end
  end

  # On universal Rubies, resolve the "universal" arch to the real CPU arch, without changing the extension directory.
  class Specification
    if /^universal\.(?<arch>.*?)-/ =~ (CROSS_COMPILING || RUBY_PLATFORM)
      local_platform = Platform.local
      if local_platform.cpu == "universal"
        ORIGINAL_LOCAL_PLATFORM = local_platform.to_s.freeze

        local_platform.cpu = if arch == "arm64e" # arm64e is only permitted for Apple system binaries
          "arm64"
        else
          arch
        end

        def extensions_dir
          Gem.default_ext_dir_for(base_dir) ||
            File.join(base_dir, "extensions", ORIGINAL_LOCAL_PLATFORM,
                      Gem.extension_api_version)
        end
      end
    end
  end

  require "rubygems/util"

  Util.singleton_class.module_eval do
    if Util.singleton_methods.include?(:glob_files_in_dir) # since 3.0.0.beta.2
      remove_method :glob_files_in_dir
    end

    def glob_files_in_dir(glob, base_path)
      if RUBY_VERSION >= "2.5"
        Dir.glob(glob, :base => base_path).map! {|f| File.expand_path(f, base_path) }
      else
        Dir.glob(File.join(base_path.to_s.gsub(/[\[\]]/, '\\\\\\&'), glob)).map! {|f| File.expand_path(f) }
      end
    end
  end
end
PK*"#[ZP��((5gems/bundler-2.3.27/lib/bundler/stub_specification.rbnu�[���# frozen_string_literal: true

module Bundler
  class StubSpecification < RemoteSpecification
    def self.from_stub(stub)
      return stub if stub.is_a?(Bundler::StubSpecification)
      spec = new(stub.name, stub.version, stub.platform, nil)
      spec.stub = stub
      spec
    end

    attr_accessor :stub, :ignored

    def source=(source)
      super
      # Stub has no concept of source, which means that extension_dir may be wrong
      # This is the case for git-based gems. So, instead manually assign the extension dir
      return unless source.respond_to?(:extension_dir_name)
      path = File.join(stub.extensions_dir, source.extension_dir_name)
      stub.extension_dir = File.expand_path(path)
    end

    def to_yaml
      _remote_specification.to_yaml
    end

    # @!group Stub Delegates

    def manually_installed?
      # This is for manually installed gems which are gems that were fixed in place after a
      # failed installation. Once the issue was resolved, the user then manually created
      # the gem specification using the instructions provided by `gem help install`
      installed_by_version == Gem::Version.new(0)
    end

    # This is defined directly to avoid having to loading the full spec
    def missing_extensions?
      return false if default_gem?
      return false if extensions.empty?
      return false if File.exist? gem_build_complete_path
      return false if manually_installed?

      true
    end

    def activated
      stub.activated
    end

    def activated=(activated)
      stub.instance_variable_set(:@activated, activated)
    end

    def extensions
      stub.extensions
    end

    def gem_build_complete_path
      File.join(extension_dir, "gem.build_complete")
    end

    def default_gem?
      stub.default_gem?
    end

    def full_gem_path
      stub.full_gem_path
    end

    def full_gem_path=(path)
      stub.full_gem_path = path
    end

    def full_require_paths
      stub.full_require_paths
    end

    def load_paths
      full_require_paths
    end

    def loaded_from
      stub.loaded_from
    end

    def matches_for_glob(glob)
      stub.matches_for_glob(glob)
    end

    def raw_require_paths
      stub.raw_require_paths
    end

    private

    def _remote_specification
      @_remote_specification ||= begin
        rs = stub.to_spec
        if rs.equal?(self) # happens when to_spec gets the spec from Gem.loaded_specs
          rs = Gem::Specification.load(loaded_from)
          Bundler.rubygems.stub_set_spec(stub, rs)
        end

        unless rs
          raise GemspecError, "The gemspec for #{full_name} at #{loaded_from}" \
            " was missing or broken. Try running `gem pristine #{name} -v #{version}`" \
            " to fix the cached spec."
        end

        rs.source = source

        rs
      end
    end
  end
end
PK*"#[���__8gems/bundler-2.3.27/lib/bundler/match_remote_metadata.rbnu�[���# frozen_string_literal: true

module Bundler
  module FetchMetadata
    # A fallback is included because the original version of the specification
    # API didn't include that field, so some marshalled specs in the index have it
    # set to +nil+.
    def matches_current_ruby?
      @required_ruby_version ||= _remote_specification.required_ruby_version || Gem::Requirement.default

      super
    end

    def matches_current_rubygems?
      # A fallback is included because the original version of the specification
      # API didn't include that field, so some marshalled specs in the index have it
      # set to +nil+.
      @required_rubygems_version ||= _remote_specification.required_rubygems_version || Gem::Requirement.default

      super
    end
  end

  module MatchRemoteMetadata
    include MatchMetadata

    prepend FetchMetadata
  end
end
PK*"#[���t/�/�Agems/bundler-2.3.27/lib/bundler/vendor/fileutils/lib/fileutils.rbnu�[���# frozen_string_literal: true

begin
  require 'rbconfig'
rescue LoadError
  # for make mjit-headers
end

#
# = fileutils.rb
#
# Copyright (c) 2000-2007 Minero Aoki
#
# This program is free software.
# You can distribute/modify this program under the same terms of ruby.
#
# == module Bundler::FileUtils
#
# Namespace for several file utility methods for copying, moving, removing, etc.
#
# === Module Functions
#
#   require 'bundler/vendor/fileutils/lib/fileutils'
#
#   Bundler::FileUtils.cd(dir, **options)
#   Bundler::FileUtils.cd(dir, **options) {|dir| block }
#   Bundler::FileUtils.pwd()
#   Bundler::FileUtils.mkdir(dir, **options)
#   Bundler::FileUtils.mkdir(list, **options)
#   Bundler::FileUtils.mkdir_p(dir, **options)
#   Bundler::FileUtils.mkdir_p(list, **options)
#   Bundler::FileUtils.rmdir(dir, **options)
#   Bundler::FileUtils.rmdir(list, **options)
#   Bundler::FileUtils.ln(target, link, **options)
#   Bundler::FileUtils.ln(targets, dir, **options)
#   Bundler::FileUtils.ln_s(target, link, **options)
#   Bundler::FileUtils.ln_s(targets, dir, **options)
#   Bundler::FileUtils.ln_sf(target, link, **options)
#   Bundler::FileUtils.cp(src, dest, **options)
#   Bundler::FileUtils.cp(list, dir, **options)
#   Bundler::FileUtils.cp_r(src, dest, **options)
#   Bundler::FileUtils.cp_r(list, dir, **options)
#   Bundler::FileUtils.mv(src, dest, **options)
#   Bundler::FileUtils.mv(list, dir, **options)
#   Bundler::FileUtils.rm(list, **options)
#   Bundler::FileUtils.rm_r(list, **options)
#   Bundler::FileUtils.rm_rf(list, **options)
#   Bundler::FileUtils.install(src, dest, **options)
#   Bundler::FileUtils.chmod(mode, list, **options)
#   Bundler::FileUtils.chmod_R(mode, list, **options)
#   Bundler::FileUtils.chown(user, group, list, **options)
#   Bundler::FileUtils.chown_R(user, group, list, **options)
#   Bundler::FileUtils.touch(list, **options)
#
# Possible <tt>options</tt> are:
#
# <tt>:force</tt> :: forced operation (rewrite files if exist, remove
#                    directories if not empty, etc.);
# <tt>:verbose</tt> :: print command to be run, in bash syntax, before
#                      performing it;
# <tt>:preserve</tt> :: preserve object's group, user and modification
#                       time on copying;
# <tt>:noop</tt> :: no changes are made (usable in combination with
#                   <tt>:verbose</tt> which will print the command to run)
#
# Each method documents the options that it honours. See also ::commands,
# ::options and ::options_of methods to introspect which command have which
# options.
#
# All methods that have the concept of a "source" file or directory can take
# either one file or a list of files in that argument.  See the method
# documentation for examples.
#
# There are some `low level' methods, which do not accept keyword arguments:
#
#   Bundler::FileUtils.copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
#   Bundler::FileUtils.copy_file(src, dest, preserve = false, dereference = true)
#   Bundler::FileUtils.copy_stream(srcstream, deststream)
#   Bundler::FileUtils.remove_entry(path, force = false)
#   Bundler::FileUtils.remove_entry_secure(path, force = false)
#   Bundler::FileUtils.remove_file(path, force = false)
#   Bundler::FileUtils.compare_file(path_a, path_b)
#   Bundler::FileUtils.compare_stream(stream_a, stream_b)
#   Bundler::FileUtils.uptodate?(file, cmp_list)
#
# == module Bundler::FileUtils::Verbose
#
# This module has all methods of Bundler::FileUtils module, but it outputs messages
# before acting.  This equates to passing the <tt>:verbose</tt> flag to methods
# in Bundler::FileUtils.
#
# == module Bundler::FileUtils::NoWrite
#
# This module has all methods of Bundler::FileUtils module, but never changes
# files/directories.  This equates to passing the <tt>:noop</tt> flag to methods
# in Bundler::FileUtils.
#
# == module Bundler::FileUtils::DryRun
#
# This module has all methods of Bundler::FileUtils module, but never changes
# files/directories.  This equates to passing the <tt>:noop</tt> and
# <tt>:verbose</tt> flags to methods in Bundler::FileUtils.
#
module Bundler::FileUtils
  VERSION = "1.4.1"

  def self.private_module_function(name)   #:nodoc:
    module_function name
    private_class_method name
  end

  #
  # Returns the name of the current directory.
  #
  def pwd
    Dir.pwd
  end
  module_function :pwd

  alias getwd pwd
  module_function :getwd

  #
  # Changes the current directory to the directory +dir+.
  #
  # If this method is called with block, resumes to the previous
  # working directory after the block execution has finished.
  #
  #   Bundler::FileUtils.cd('/')  # change directory
  #
  #   Bundler::FileUtils.cd('/', verbose: true)   # change directory and report it
  #
  #   Bundler::FileUtils.cd('/') do  # change directory
  #     # ...               # do something
  #   end                   # return to original directory
  #
  def cd(dir, verbose: nil, &block) # :yield: dir
    fu_output_message "cd #{dir}" if verbose
    result = Dir.chdir(dir, &block)
    fu_output_message 'cd -' if verbose and block
    result
  end
  module_function :cd

  alias chdir cd
  module_function :chdir

  #
  # Returns true if +new+ is newer than all +old_list+.
  # Non-existent files are older than any file.
  #
  #   Bundler::FileUtils.uptodate?('hello.o', %w(hello.c hello.h)) or \
  #       system 'make hello.o'
  #
  def uptodate?(new, old_list)
    return false unless File.exist?(new)
    new_time = File.mtime(new)
    old_list.each do |old|
      if File.exist?(old)
        return false unless new_time > File.mtime(old)
      end
    end
    true
  end
  module_function :uptodate?

  def remove_trailing_slash(dir)   #:nodoc:
    dir == '/' ? dir : dir.chomp(?/)
  end
  private_module_function :remove_trailing_slash

  #
  # Creates one or more directories.
  #
  #   Bundler::FileUtils.mkdir 'test'
  #   Bundler::FileUtils.mkdir %w(tmp data)
  #   Bundler::FileUtils.mkdir 'notexist', noop: true  # Does not really create.
  #   Bundler::FileUtils.mkdir 'tmp', mode: 0700
  #
  def mkdir(list, mode: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "mkdir #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
    return if noop

    list.each do |dir|
      fu_mkdir dir, mode
    end
  end
  module_function :mkdir

  #
  # Creates a directory and all its parent directories.
  # For example,
  #
  #   Bundler::FileUtils.mkdir_p '/usr/local/lib/ruby'
  #
  # causes to make following directories, if they do not exist.
  #
  # * /usr
  # * /usr/local
  # * /usr/local/lib
  # * /usr/local/lib/ruby
  #
  # You can pass several directories at a time in a list.
  #
  def mkdir_p(list, mode: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "mkdir -p #{mode ? ('-m %03o ' % mode) : ''}#{list.join ' '}" if verbose
    return *list if noop

    list.map {|path| remove_trailing_slash(path)}.each do |path|
      # optimize for the most common case
      begin
        fu_mkdir path, mode
        next
      rescue SystemCallError
        next if File.directory?(path)
      end

      stack = []
      until path == stack.last   # dirname("/")=="/", dirname("C:/")=="C:/"
        stack.push path
        path = File.dirname(path)
      end
      stack.pop                 # root directory should exist
      stack.reverse_each do |dir|
        begin
          fu_mkdir dir, mode
        rescue SystemCallError
          raise unless File.directory?(dir)
        end
      end
    end

    return *list
  end
  module_function :mkdir_p

  alias mkpath    mkdir_p
  alias makedirs  mkdir_p
  module_function :mkpath
  module_function :makedirs

  def fu_mkdir(path, mode)   #:nodoc:
    path = remove_trailing_slash(path)
    if mode
      Dir.mkdir path, mode
      File.chmod mode, path
    else
      Dir.mkdir path
    end
  end
  private_module_function :fu_mkdir

  #
  # Removes one or more directories.
  #
  #   Bundler::FileUtils.rmdir 'somedir'
  #   Bundler::FileUtils.rmdir %w(somedir anydir otherdir)
  #   # Does not really remove directory; outputs message.
  #   Bundler::FileUtils.rmdir 'somedir', verbose: true, noop: true
  #
  def rmdir(list, parents: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if verbose
    return if noop
    list.each do |dir|
      Dir.rmdir(dir = remove_trailing_slash(dir))
      if parents
        begin
          until (parent = File.dirname(dir)) == '.' or parent == dir
            dir = parent
            Dir.rmdir(dir)
          end
        rescue Errno::ENOTEMPTY, Errno::EEXIST, Errno::ENOENT
        end
      end
    end
  end
  module_function :rmdir

  #
  # :call-seq:
  #   Bundler::FileUtils.ln(target, link, force: nil, noop: nil, verbose: nil)
  #   Bundler::FileUtils.ln(target,  dir, force: nil, noop: nil, verbose: nil)
  #   Bundler::FileUtils.ln(targets, dir, force: nil, noop: nil, verbose: nil)
  #
  # In the first form, creates a hard link +link+ which points to +target+.
  # If +link+ already exists, raises Errno::EEXIST.
  # But if the +force+ option is set, overwrites +link+.
  #
  #   Bundler::FileUtils.ln 'gcc', 'cc', verbose: true
  #   Bundler::FileUtils.ln '/usr/bin/emacs21', '/usr/bin/emacs'
  #
  # In the second form, creates a link +dir/target+ pointing to +target+.
  # In the third form, creates several hard links in the directory +dir+,
  # pointing to each item in +targets+.
  # If +dir+ is not a directory, raises Errno::ENOTDIR.
  #
  #   Bundler::FileUtils.cd '/sbin'
  #   Bundler::FileUtils.ln %w(cp mv mkdir), '/bin'   # Now /sbin/cp and /bin/cp are linked.
  #
  def ln(src, dest, force: nil, noop: nil, verbose: nil)
    fu_output_message "ln#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if force
      File.link s, d
    end
  end
  module_function :ln

  alias link ln
  module_function :link

  #
  # Hard link +src+ to +dest+. If +src+ is a directory, this method links
  # all its contents recursively. If +dest+ is a directory, links
  # +src+ to +dest/src+.
  #
  # +src+ can be a list of files.
  #
  # If +dereference_root+ is true, this method dereference tree root.
  #
  # If +remove_destination+ is true, this method removes each destination file before copy.
  #
  #   Bundler::FileUtils.rm_r site_ruby + '/mylib', force: true
  #   Bundler::FileUtils.cp_lr 'lib/', site_ruby + '/mylib'
  #
  #   # Examples of linking several files to target directory.
  #   Bundler::FileUtils.cp_lr %w(mail.rb field.rb debug/), site_ruby + '/tmail'
  #   Bundler::FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', noop: true, verbose: true
  #
  #   # If you want to link all contents of a directory instead of the
  #   # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
  #   # use the following code.
  #   Bundler::FileUtils.cp_lr 'src/.', 'dest'  # cp_lr('src', 'dest') makes dest/src, but this doesn't.
  #
  def cp_lr(src, dest, noop: nil, verbose: nil,
            dereference_root: true, remove_destination: false)
    fu_output_message "cp -lr#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      link_entry s, d, dereference_root, remove_destination
    end
  end
  module_function :cp_lr

  #
  # :call-seq:
  #   Bundler::FileUtils.ln_s(target, link, force: nil, noop: nil, verbose: nil)
  #   Bundler::FileUtils.ln_s(target,  dir, force: nil, noop: nil, verbose: nil)
  #   Bundler::FileUtils.ln_s(targets, dir, force: nil, noop: nil, verbose: nil)
  #
  # In the first form, creates a symbolic link +link+ which points to +target+.
  # If +link+ already exists, raises Errno::EEXIST.
  # But if the <tt>force</tt> option is set, overwrites +link+.
  #
  #   Bundler::FileUtils.ln_s '/usr/bin/ruby', '/usr/local/bin/ruby'
  #   Bundler::FileUtils.ln_s 'verylongsourcefilename.c', 'c', force: true
  #
  # In the second form, creates a link +dir/target+ pointing to +target+.
  # In the third form, creates several symbolic links in the directory +dir+,
  # pointing to each item in +targets+.
  # If +dir+ is not a directory, raises Errno::ENOTDIR.
  #
  #   Bundler::FileUtils.ln_s Dir.glob('/bin/*.rb'), '/home/foo/bin'
  #
  def ln_s(src, dest, force: nil, noop: nil, verbose: nil)
    fu_output_message "ln -s#{force ? 'f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest0(src, dest) do |s,d|
      remove_file d, true if force
      File.symlink s, d
    end
  end
  module_function :ln_s

  alias symlink ln_s
  module_function :symlink

  #
  # :call-seq:
  #   Bundler::FileUtils.ln_sf(*args)
  #
  # Same as
  #
  #   Bundler::FileUtils.ln_s(*args, force: true)
  #
  def ln_sf(src, dest, noop: nil, verbose: nil)
    ln_s src, dest, force: true, noop: noop, verbose: verbose
  end
  module_function :ln_sf

  #
  # Hard links a file system entry +src+ to +dest+.
  # If +src+ is a directory, this method links its contents recursively.
  #
  # Both of +src+ and +dest+ must be a path name.
  # +src+ must exist, +dest+ must not exist.
  #
  # If +dereference_root+ is true, this method dereferences the tree root.
  #
  # If +remove_destination+ is true, this method removes each destination file before copy.
  #
  def link_entry(src, dest, dereference_root = false, remove_destination = false)
    Entry_.new(src, nil, dereference_root).traverse do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && File.file?(destent.path)
      ent.link destent.path
    end
  end
  module_function :link_entry

  #
  # Copies a file content +src+ to +dest+.  If +dest+ is a directory,
  # copies +src+ to +dest/src+.
  #
  # If +src+ is a list of files, then +dest+ must be a directory.
  #
  #   Bundler::FileUtils.cp 'eval.c', 'eval.c.org'
  #   Bundler::FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6'
  #   Bundler::FileUtils.cp %w(cgi.rb complex.rb date.rb), '/usr/lib/ruby/1.6', verbose: true
  #   Bundler::FileUtils.cp 'symlink', 'dest'   # copy content, "dest" is not a symlink
  #
  def cp(src, dest, preserve: nil, noop: nil, verbose: nil)
    fu_output_message "cp#{preserve ? ' -p' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      copy_file s, d, preserve
    end
  end
  module_function :cp

  alias copy cp
  module_function :copy

  #
  # Copies +src+ to +dest+. If +src+ is a directory, this method copies
  # all its contents recursively. If +dest+ is a directory, copies
  # +src+ to +dest/src+.
  #
  # +src+ can be a list of files.
  #
  # If +dereference_root+ is true, this method dereference tree root.
  #
  # If +remove_destination+ is true, this method removes each destination file before copy.
  #
  #   # Installing Ruby library "mylib" under the site_ruby
  #   Bundler::FileUtils.rm_r site_ruby + '/mylib', force: true
  #   Bundler::FileUtils.cp_r 'lib/', site_ruby + '/mylib'
  #
  #   # Examples of copying several files to target directory.
  #   Bundler::FileUtils.cp_r %w(mail.rb field.rb debug/), site_ruby + '/tmail'
  #   Bundler::FileUtils.cp_r Dir.glob('*.rb'), '/home/foo/lib/ruby', noop: true, verbose: true
  #
  #   # If you want to copy all contents of a directory instead of the
  #   # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
  #   # use following code.
  #   Bundler::FileUtils.cp_r 'src/.', 'dest'     # cp_r('src', 'dest') makes dest/src,
  #                                      # but this doesn't.
  #
  def cp_r(src, dest, preserve: nil, noop: nil, verbose: nil,
           dereference_root: true, remove_destination: nil)
    fu_output_message "cp -r#{preserve ? 'p' : ''}#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      copy_entry s, d, preserve, dereference_root, remove_destination
    end
  end
  module_function :cp_r

  #
  # Copies a file system entry +src+ to +dest+.
  # If +src+ is a directory, this method copies its contents recursively.
  # This method preserves file types, c.f. symlink, directory...
  # (FIFO, device files and etc. are not supported yet)
  #
  # Both of +src+ and +dest+ must be a path name.
  # +src+ must exist, +dest+ must not exist.
  #
  # If +preserve+ is true, this method preserves owner, group, and
  # modified time.  Permissions are copied regardless +preserve+.
  #
  # If +dereference_root+ is true, this method dereference tree root.
  #
  # If +remove_destination+ is true, this method removes each destination file before copy.
  #
  def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
    if dereference_root
      src = File.realpath(src)
    end

    Entry_.new(src, nil, false).wrap_traverse(proc do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
      ent.copy destent.path
    end, proc do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      ent.copy_metadata destent.path if preserve
    end)
  end
  module_function :copy_entry

  #
  # Copies file contents of +src+ to +dest+.
  # Both of +src+ and +dest+ must be a path name.
  #
  def copy_file(src, dest, preserve = false, dereference = true)
    ent = Entry_.new(src, nil, dereference)
    ent.copy_file dest
    ent.copy_metadata dest if preserve
  end
  module_function :copy_file

  #
  # Copies stream +src+ to +dest+.
  # +src+ must respond to #read(n) and
  # +dest+ must respond to #write(str).
  #
  def copy_stream(src, dest)
    IO.copy_stream(src, dest)
  end
  module_function :copy_stream

  #
  # Moves file(s) +src+ to +dest+.  If +file+ and +dest+ exist on the different
  # disk partition, the file is copied then the original file is removed.
  #
  #   Bundler::FileUtils.mv 'badname.rb', 'goodname.rb'
  #   Bundler::FileUtils.mv 'stuff.rb', '/notexist/lib/ruby', force: true  # no error
  #
  #   Bundler::FileUtils.mv %w(junk.txt dust.txt), '/home/foo/.trash/'
  #   Bundler::FileUtils.mv Dir.glob('test*.rb'), 'test', noop: true, verbose: true
  #
  def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
    fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      destent = Entry_.new(d, nil, true)
      begin
        if destent.exist?
          if destent.directory?
            raise Errno::EEXIST, d
          end
        end
        begin
          File.rename s, d
        rescue Errno::EXDEV,
               Errno::EPERM # move from unencrypted to encrypted dir (ext4)
          copy_entry s, d, true
          if secure
            remove_entry_secure s, force
          else
            remove_entry s, force
          end
        end
      rescue SystemCallError
        raise unless force
      end
    end
  end
  module_function :mv

  alias move mv
  module_function :move

  #
  # Remove file(s) specified in +list+.  This method cannot remove directories.
  # All StandardErrors are ignored when the :force option is set.
  #
  #   Bundler::FileUtils.rm %w( junk.txt dust.txt )
  #   Bundler::FileUtils.rm Dir.glob('*.so')
  #   Bundler::FileUtils.rm 'NotExistFile', force: true   # never raises exception
  #
  def rm(list, force: nil, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message "rm#{force ? ' -f' : ''} #{list.join ' '}" if verbose
    return if noop

    list.each do |path|
      remove_file path, force
    end
  end
  module_function :rm

  alias remove rm
  module_function :remove

  #
  # Equivalent to
  #
  #   Bundler::FileUtils.rm(list, force: true)
  #
  def rm_f(list, noop: nil, verbose: nil)
    rm list, force: true, noop: noop, verbose: verbose
  end
  module_function :rm_f

  alias safe_unlink rm_f
  module_function :safe_unlink

  #
  # remove files +list+[0] +list+[1]... If +list+[n] is a directory,
  # removes its all contents recursively. This method ignores
  # StandardError when :force option is set.
  #
  #   Bundler::FileUtils.rm_r Dir.glob('/tmp/*')
  #   Bundler::FileUtils.rm_r 'some_dir', force: true
  #
  # WARNING: This method causes local vulnerability
  # if one of parent directories or removing directory tree are world
  # writable (including /tmp, whose permission is 1777), and the current
  # process has strong privilege such as Unix super user (root), and the
  # system has symbolic link.  For secure removing, read the documentation
  # of remove_entry_secure carefully, and set :secure option to true.
  # Default is <tt>secure: false</tt>.
  #
  # NOTE: This method calls remove_entry_secure if :secure option is set.
  # See also remove_entry_secure.
  #
  def rm_r(list, force: nil, noop: nil, verbose: nil, secure: nil)
    list = fu_list(list)
    fu_output_message "rm -r#{force ? 'f' : ''} #{list.join ' '}" if verbose
    return if noop
    list.each do |path|
      if secure
        remove_entry_secure path, force
      else
        remove_entry path, force
      end
    end
  end
  module_function :rm_r

  #
  # Equivalent to
  #
  #   Bundler::FileUtils.rm_r(list, force: true)
  #
  # WARNING: This method causes local vulnerability.
  # Read the documentation of rm_r first.
  #
  def rm_rf(list, noop: nil, verbose: nil, secure: nil)
    rm_r list, force: true, noop: noop, verbose: verbose, secure: secure
  end
  module_function :rm_rf

  alias rmtree rm_rf
  module_function :rmtree

  #
  # This method removes a file system entry +path+.  +path+ shall be a
  # regular file, a directory, or something.  If +path+ is a directory,
  # remove it recursively.  This method is required to avoid TOCTTOU
  # (time-of-check-to-time-of-use) local security vulnerability of rm_r.
  # #rm_r causes security hole when:
  #
  # * Parent directory is world writable (including /tmp).
  # * Removing directory tree includes world writable directory.
  # * The system has symbolic link.
  #
  # To avoid this security hole, this method applies special preprocess.
  # If +path+ is a directory, this method chown(2) and chmod(2) all
  # removing directories.  This requires the current process is the
  # owner of the removing whole directory tree, or is the super user (root).
  #
  # WARNING: You must ensure that *ALL* parent directories cannot be
  # moved by other untrusted users.  For example, parent directories
  # should not be owned by untrusted users, and should not be world
  # writable except when the sticky bit set.
  #
  # WARNING: Only the owner of the removing directory tree, or Unix super
  # user (root) should invoke this method.  Otherwise this method does not
  # work.
  #
  # For details of this security vulnerability, see Perl's case:
  #
  # * https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448
  # * https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452
  #
  # For fileutils.rb, this vulnerability is reported in [ruby-dev:26100].
  #
  def remove_entry_secure(path, force = false)
    unless fu_have_symlink?
      remove_entry path, force
      return
    end
    fullpath = File.expand_path(path)
    st = File.lstat(fullpath)
    unless st.directory?
      File.unlink fullpath
      return
    end
    # is a directory.
    parent_st = File.stat(File.dirname(fullpath))
    unless parent_st.world_writable?
      remove_entry path, force
      return
    end
    unless parent_st.sticky?
      raise ArgumentError, "parent directory is world writable, Bundler::FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"
    end

    # freeze tree root
    euid = Process.euid
    dot_file = fullpath + "/."
    begin
      File.open(dot_file) {|f|
        unless fu_stat_identical_entry?(st, f.stat)
          # symlink (TOC-to-TOU attack?)
          File.unlink fullpath
          return
        end
        f.chown euid, -1
        f.chmod 0700
      }
    rescue Errno::EISDIR # JRuby in non-native mode can't open files as dirs
      File.lstat(dot_file).tap {|fstat|
        unless fu_stat_identical_entry?(st, fstat)
          # symlink (TOC-to-TOU attack?)
          File.unlink fullpath
          return
        end
        File.chown euid, -1, dot_file
        File.chmod 0700, dot_file
      }
    end

    unless fu_stat_identical_entry?(st, File.lstat(fullpath))
      # TOC-to-TOU attack?
      File.unlink fullpath
      return
    end

    # ---- tree root is frozen ----
    root = Entry_.new(path)
    root.preorder_traverse do |ent|
      if ent.directory?
        ent.chown euid, -1
        ent.chmod 0700
      end
    end
    root.postorder_traverse do |ent|
      begin
        ent.remove
      rescue
        raise unless force
      end
    end
  rescue
    raise unless force
  end
  module_function :remove_entry_secure

  def fu_have_symlink?   #:nodoc:
    File.symlink nil, nil
  rescue NotImplementedError
    return false
  rescue TypeError
    return true
  end
  private_module_function :fu_have_symlink?

  def fu_stat_identical_entry?(a, b)   #:nodoc:
    a.dev == b.dev and a.ino == b.ino
  end
  private_module_function :fu_stat_identical_entry?

  #
  # This method removes a file system entry +path+.
  # +path+ might be a regular file, a directory, or something.
  # If +path+ is a directory, remove it recursively.
  #
  # See also remove_entry_secure.
  #
  def remove_entry(path, force = false)
    Entry_.new(path).postorder_traverse do |ent|
      begin
        ent.remove
      rescue
        raise unless force
      end
    end
  rescue
    raise unless force
  end
  module_function :remove_entry

  #
  # Removes a file +path+.
  # This method ignores StandardError if +force+ is true.
  #
  def remove_file(path, force = false)
    Entry_.new(path).remove_file
  rescue
    raise unless force
  end
  module_function :remove_file

  #
  # Removes a directory +dir+ and its contents recursively.
  # This method ignores StandardError if +force+ is true.
  #
  def remove_dir(path, force = false)
    remove_entry path, force   # FIXME?? check if it is a directory
  end
  module_function :remove_dir

  #
  # Returns true if the contents of a file +a+ and a file +b+ are identical.
  #
  #   Bundler::FileUtils.compare_file('somefile', 'somefile')       #=> true
  #   Bundler::FileUtils.compare_file('/dev/null', '/dev/urandom')  #=> false
  #
  def compare_file(a, b)
    return false unless File.size(a) == File.size(b)
    File.open(a, 'rb') {|fa|
      File.open(b, 'rb') {|fb|
        return compare_stream(fa, fb)
      }
    }
  end
  module_function :compare_file

  alias identical? compare_file
  alias cmp compare_file
  module_function :identical?
  module_function :cmp

  #
  # Returns true if the contents of a stream +a+ and +b+ are identical.
  #
  def compare_stream(a, b)
    bsize = fu_stream_blksize(a, b)

    if RUBY_VERSION > "2.4"
      sa = String.new(capacity: bsize)
      sb = String.new(capacity: bsize)
    else
      sa = String.new
      sb = String.new
    end

    begin
      a.read(bsize, sa)
      b.read(bsize, sb)
      return true if sa.empty? && sb.empty?
    end while sa == sb
    false
  end
  module_function :compare_stream

  #
  # If +src+ is not same as +dest+, copies it and changes the permission
  # mode to +mode+.  If +dest+ is a directory, destination is +dest+/+src+.
  # This method removes destination before copy.
  #
  #   Bundler::FileUtils.install 'ruby', '/usr/local/bin/ruby', mode: 0755, verbose: true
  #   Bundler::FileUtils.install 'lib.rb', '/usr/local/lib/ruby/site_ruby', verbose: true
  #
  def install(src, dest, mode: nil, owner: nil, group: nil, preserve: nil,
              noop: nil, verbose: nil)
    if verbose
      msg = +"install -c"
      msg << ' -p' if preserve
      msg << ' -m ' << mode_to_s(mode) if mode
      msg << " -o #{owner}" if owner
      msg << " -g #{group}" if group
      msg << ' ' << [src,dest].flatten.join(' ')
      fu_output_message msg
    end
    return if noop
    uid = fu_get_uid(owner)
    gid = fu_get_gid(group)
    fu_each_src_dest(src, dest) do |s, d|
      st = File.stat(s)
      unless File.exist?(d) and compare_file(s, d)
        remove_file d, true
        copy_file s, d
        File.utime st.atime, st.mtime, d if preserve
        File.chmod fu_mode(mode, st), d if mode
        File.chown uid, gid, d if uid or gid
      end
    end
  end
  module_function :install

  def user_mask(target)  #:nodoc:
    target.each_char.inject(0) do |mask, chr|
      case chr
      when "u"
        mask | 04700
      when "g"
        mask | 02070
      when "o"
        mask | 01007
      when "a"
        mask | 07777
      else
        raise ArgumentError, "invalid `who' symbol in file mode: #{chr}"
      end
    end
  end
  private_module_function :user_mask

  def apply_mask(mode, user_mask, op, mode_mask)   #:nodoc:
    case op
    when '='
      (mode & ~user_mask) | (user_mask & mode_mask)
    when '+'
      mode | (user_mask & mode_mask)
    when '-'
      mode & ~(user_mask & mode_mask)
    end
  end
  private_module_function :apply_mask

  def symbolic_modes_to_i(mode_sym, path)  #:nodoc:
    mode = if File::Stat === path
             path.mode
           else
             File.stat(path).mode
           end
    mode_sym.split(/,/).inject(mode & 07777) do |current_mode, clause|
      target, *actions = clause.split(/([=+-])/)
      raise ArgumentError, "invalid file mode: #{mode_sym}" if actions.empty?
      target = 'a' if target.empty?
      user_mask = user_mask(target)
      actions.each_slice(2) do |op, perm|
        need_apply = op == '='
        mode_mask = (perm || '').each_char.inject(0) do |mask, chr|
          case chr
          when "r"
            mask | 0444
          when "w"
            mask | 0222
          when "x"
            mask | 0111
          when "X"
            if FileTest.directory? path
              mask | 0111
            else
              mask
            end
          when "s"
            mask | 06000
          when "t"
            mask | 01000
          when "u", "g", "o"
            if mask.nonzero?
              current_mode = apply_mask(current_mode, user_mask, op, mask)
            end
            need_apply = false
            copy_mask = user_mask(chr)
            (current_mode & copy_mask) / (copy_mask & 0111) * (user_mask & 0111)
          else
            raise ArgumentError, "invalid `perm' symbol in file mode: #{chr}"
          end
        end

        if mode_mask.nonzero? || need_apply
          current_mode = apply_mask(current_mode, user_mask, op, mode_mask)
        end
      end
      current_mode
    end
  end
  private_module_function :symbolic_modes_to_i

  def fu_mode(mode, path)  #:nodoc:
    mode.is_a?(String) ? symbolic_modes_to_i(mode, path) : mode
  end
  private_module_function :fu_mode

  def mode_to_s(mode)  #:nodoc:
    mode.is_a?(String) ? mode : "%o" % mode
  end
  private_module_function :mode_to_s

  #
  # Changes permission bits on the named files (in +list+) to the bit pattern
  # represented by +mode+.
  #
  # +mode+ is the symbolic and absolute mode can be used.
  #
  # Absolute mode is
  #   Bundler::FileUtils.chmod 0755, 'somecommand'
  #   Bundler::FileUtils.chmod 0644, %w(my.rb your.rb his.rb her.rb)
  #   Bundler::FileUtils.chmod 0755, '/usr/bin/ruby', verbose: true
  #
  # Symbolic mode is
  #   Bundler::FileUtils.chmod "u=wrx,go=rx", 'somecommand'
  #   Bundler::FileUtils.chmod "u=wr,go=rr", %w(my.rb your.rb his.rb her.rb)
  #   Bundler::FileUtils.chmod "u=wrx,go=rx", '/usr/bin/ruby', verbose: true
  #
  # "a" :: is user, group, other mask.
  # "u" :: is user's mask.
  # "g" :: is group's mask.
  # "o" :: is other's mask.
  # "w" :: is write permission.
  # "r" :: is read permission.
  # "x" :: is execute permission.
  # "X" ::
  #   is execute permission for directories only, must be used in conjunction with "+"
  # "s" :: is uid, gid.
  # "t" :: is sticky bit.
  # "+" :: is added to a class given the specified mode.
  # "-" :: Is removed from a given class given mode.
  # "=" :: Is the exact nature of the class will be given a specified mode.

  def chmod(mode, list, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message sprintf('chmod %s %s', mode_to_s(mode), list.join(' ')) if verbose
    return if noop
    list.each do |path|
      Entry_.new(path).chmod(fu_mode(mode, path))
    end
  end
  module_function :chmod

  #
  # Changes permission bits on the named files (in +list+)
  # to the bit pattern represented by +mode+.
  #
  #   Bundler::FileUtils.chmod_R 0700, "/tmp/app.#{$$}"
  #   Bundler::FileUtils.chmod_R "u=wrx", "/tmp/app.#{$$}"
  #
  def chmod_R(mode, list, noop: nil, verbose: nil, force: nil)
    list = fu_list(list)
    fu_output_message sprintf('chmod -R%s %s %s',
                              (force ? 'f' : ''),
                              mode_to_s(mode), list.join(' ')) if verbose
    return if noop
    list.each do |root|
      Entry_.new(root).traverse do |ent|
        begin
          ent.chmod(fu_mode(mode, ent.path))
        rescue
          raise unless force
        end
      end
    end
  end
  module_function :chmod_R

  #
  # Changes owner and group on the named files (in +list+)
  # to the user +user+ and the group +group+.  +user+ and +group+
  # may be an ID (Integer/String) or a name (String).
  # If +user+ or +group+ is nil, this method does not change
  # the attribute.
  #
  #   Bundler::FileUtils.chown 'root', 'staff', '/usr/local/bin/ruby'
  #   Bundler::FileUtils.chown nil, 'bin', Dir.glob('/usr/bin/*'), verbose: true
  #
  def chown(user, group, list, noop: nil, verbose: nil)
    list = fu_list(list)
    fu_output_message sprintf('chown %s %s',
                              (group ? "#{user}:#{group}" : user || ':'),
                              list.join(' ')) if verbose
    return if noop
    uid = fu_get_uid(user)
    gid = fu_get_gid(group)
    list.each do |path|
      Entry_.new(path).chown uid, gid
    end
  end
  module_function :chown

  #
  # Changes owner and group on the named files (in +list+)
  # to the user +user+ and the group +group+ recursively.
  # +user+ and +group+ may be an ID (Integer/String) or
  # a name (String).  If +user+ or +group+ is nil, this
  # method does not change the attribute.
  #
  #   Bundler::FileUtils.chown_R 'www', 'www', '/var/www/htdocs'
  #   Bundler::FileUtils.chown_R 'cvs', 'cvs', '/var/cvs', verbose: true
  #
  def chown_R(user, group, list, noop: nil, verbose: nil, force: nil)
    list = fu_list(list)
    fu_output_message sprintf('chown -R%s %s %s',
                              (force ? 'f' : ''),
                              (group ? "#{user}:#{group}" : user || ':'),
                              list.join(' ')) if verbose
    return if noop
    uid = fu_get_uid(user)
    gid = fu_get_gid(group)
    list.each do |root|
      Entry_.new(root).traverse do |ent|
        begin
          ent.chown uid, gid
        rescue
          raise unless force
        end
      end
    end
  end
  module_function :chown_R

  def fu_get_uid(user)   #:nodoc:
    return nil unless user
    case user
    when Integer
      user
    when /\A\d+\z/
      user.to_i
    else
      require 'etc'
      Etc.getpwnam(user) ? Etc.getpwnam(user).uid : nil
    end
  end
  private_module_function :fu_get_uid

  def fu_get_gid(group)   #:nodoc:
    return nil unless group
    case group
    when Integer
      group
    when /\A\d+\z/
      group.to_i
    else
      require 'etc'
      Etc.getgrnam(group) ? Etc.getgrnam(group).gid : nil
    end
  end
  private_module_function :fu_get_gid

  #
  # Updates modification time (mtime) and access time (atime) of file(s) in
  # +list+.  Files are created if they don't exist.
  #
  #   Bundler::FileUtils.touch 'timestamp'
  #   Bundler::FileUtils.touch Dir.glob('*.c');  system 'make'
  #
  def touch(list, noop: nil, verbose: nil, mtime: nil, nocreate: nil)
    list = fu_list(list)
    t = mtime
    if verbose
      fu_output_message "touch #{nocreate ? '-c ' : ''}#{t ? t.strftime('-t %Y%m%d%H%M.%S ') : ''}#{list.join ' '}"
    end
    return if noop
    list.each do |path|
      created = nocreate
      begin
        File.utime(t, t, path)
      rescue Errno::ENOENT
        raise if created
        File.open(path, 'a') {
          ;
        }
        created = true
        retry if t
      end
    end
  end
  module_function :touch

  private

  module StreamUtils_
    private

    case (defined?(::RbConfig) ? ::RbConfig::CONFIG['host_os'] : ::RUBY_PLATFORM)
    when /mswin|mingw/
      def fu_windows?; true end
    else
      def fu_windows?; false end
    end

    def fu_copy_stream0(src, dest, blksize = nil)   #:nodoc:
      IO.copy_stream(src, dest)
    end

    def fu_stream_blksize(*streams)
      streams.each do |s|
        next unless s.respond_to?(:stat)
        size = fu_blksize(s.stat)
        return size if size
      end
      fu_default_blksize()
    end

    def fu_blksize(st)
      s = st.blksize
      return nil unless s
      return nil if s == 0
      s
    end

    def fu_default_blksize
      1024
    end
  end

  include StreamUtils_
  extend StreamUtils_

  class Entry_   #:nodoc: internal use only
    include StreamUtils_

    def initialize(a, b = nil, deref = false)
      @prefix = @rel = @path = nil
      if b
        @prefix = a
        @rel = b
      else
        @path = a
      end
      @deref = deref
      @stat = nil
      @lstat = nil
    end

    def inspect
      "\#<#{self.class} #{path()}>"
    end

    def path
      if @path
        File.path(@path)
      else
        join(@prefix, @rel)
      end
    end

    def prefix
      @prefix || @path
    end

    def rel
      @rel
    end

    def dereference?
      @deref
    end

    def exist?
      begin
        lstat
        true
      rescue Errno::ENOENT
        false
      end
    end

    def file?
      s = lstat!
      s and s.file?
    end

    def directory?
      s = lstat!
      s and s.directory?
    end

    def symlink?
      s = lstat!
      s and s.symlink?
    end

    def chardev?
      s = lstat!
      s and s.chardev?
    end

    def blockdev?
      s = lstat!
      s and s.blockdev?
    end

    def socket?
      s = lstat!
      s and s.socket?
    end

    def pipe?
      s = lstat!
      s and s.pipe?
    end

    S_IF_DOOR = 0xD000

    def door?
      s = lstat!
      s and (s.mode & 0xF000 == S_IF_DOOR)
    end

    def entries
      opts = {}
      opts[:encoding] = ::Encoding::UTF_8 if fu_windows?

      files = if Dir.respond_to?(:children)
        Dir.children(path, **opts)
      else
        Dir.entries(path(), **opts)
           .reject {|n| n == '.' or n == '..' }
      end

      untaint = RUBY_VERSION < '2.7'
      files.map {|n| Entry_.new(prefix(), join(rel(), untaint ? n.untaint : n)) }
    end

    def stat
      return @stat if @stat
      if lstat() and lstat().symlink?
        @stat = File.stat(path())
      else
        @stat = lstat()
      end
      @stat
    end

    def stat!
      return @stat if @stat
      if lstat! and lstat!.symlink?
        @stat = File.stat(path())
      else
        @stat = lstat!
      end
      @stat
    rescue SystemCallError
      nil
    end

    def lstat
      if dereference?
        @lstat ||= File.stat(path())
      else
        @lstat ||= File.lstat(path())
      end
    end

    def lstat!
      lstat()
    rescue SystemCallError
      nil
    end

    def chmod(mode)
      if symlink?
        File.lchmod mode, path() if have_lchmod?
      else
        File.chmod mode, path()
      end
    end

    def chown(uid, gid)
      if symlink?
        File.lchown uid, gid, path() if have_lchown?
      else
        File.chown uid, gid, path()
      end
    end

    def link(dest)
      case
      when directory?
        if !File.exist?(dest) and descendant_directory?(dest, path)
          raise ArgumentError, "cannot link directory %s to itself %s" % [path, dest]
        end
        begin
          Dir.mkdir dest
        rescue
          raise unless File.directory?(dest)
        end
      else
        File.link path(), dest
      end
    end

    def copy(dest)
      lstat
      case
      when file?
        copy_file dest
      when directory?
        if !File.exist?(dest) and descendant_directory?(dest, path)
          raise ArgumentError, "cannot copy directory %s to itself %s" % [path, dest]
        end
        begin
          Dir.mkdir dest
        rescue
          raise unless File.directory?(dest)
        end
      when symlink?
        File.symlink File.readlink(path()), dest
      when chardev?, blockdev?
        raise "cannot handle device file"
      when socket?
        begin
          require 'socket'
        rescue LoadError
          raise "cannot handle socket"
        else
          raise "cannot handle socket" unless defined?(UNIXServer)
        end
        UNIXServer.new(dest).close
        File.chmod lstat().mode, dest
      when pipe?
        raise "cannot handle FIFO" unless File.respond_to?(:mkfifo)
        File.mkfifo dest, lstat().mode
      when door?
        raise "cannot handle door: #{path()}"
      else
        raise "unknown file type: #{path()}"
      end
    end

    def copy_file(dest)
      File.open(path()) do |s|
        File.open(dest, 'wb', s.stat.mode) do |f|
          IO.copy_stream(s, f)
        end
      end
    end

    def copy_metadata(path)
      st = lstat()
      if !st.symlink?
        File.utime st.atime, st.mtime, path
      end
      mode = st.mode
      begin
        if st.symlink?
          begin
            File.lchown st.uid, st.gid, path
          rescue NotImplementedError
          end
        else
          File.chown st.uid, st.gid, path
        end
      rescue Errno::EPERM, Errno::EACCES
        # clear setuid/setgid
        mode &= 01777
      end
      if st.symlink?
        begin
          File.lchmod mode, path
        rescue NotImplementedError
        end
      else
        File.chmod mode, path
      end
    end

    def remove
      if directory?
        remove_dir1
      else
        remove_file
      end
    end

    def remove_dir1
      platform_support {
        Dir.rmdir path().chomp(?/)
      }
    end

    def remove_file
      platform_support {
        File.unlink path
      }
    end

    def platform_support
      return yield unless fu_windows?
      first_time_p = true
      begin
        yield
      rescue Errno::ENOENT
        raise
      rescue => err
        if first_time_p
          first_time_p = false
          begin
            File.chmod 0700, path()   # Windows does not have symlink
            retry
          rescue SystemCallError
          end
        end
        raise err
      end
    end

    def preorder_traverse
      stack = [self]
      while ent = stack.pop
        yield ent
        stack.concat ent.entries.reverse if ent.directory?
      end
    end

    alias traverse preorder_traverse

    def postorder_traverse
      if directory?
        entries().each do |ent|
          ent.postorder_traverse do |e|
            yield e
          end
        end
      end
    ensure
      yield self
    end

    def wrap_traverse(pre, post)
      pre.call self
      if directory?
        entries.each do |ent|
          ent.wrap_traverse pre, post
        end
      end
      post.call self
    end

    private

    @@fileutils_rb_have_lchmod = nil

    def have_lchmod?
      # This is not MT-safe, but it does not matter.
      if @@fileutils_rb_have_lchmod == nil
        @@fileutils_rb_have_lchmod = check_have_lchmod?
      end
      @@fileutils_rb_have_lchmod
    end

    def check_have_lchmod?
      return false unless File.respond_to?(:lchmod)
      File.lchmod 0
      return true
    rescue NotImplementedError
      return false
    end

    @@fileutils_rb_have_lchown = nil

    def have_lchown?
      # This is not MT-safe, but it does not matter.
      if @@fileutils_rb_have_lchown == nil
        @@fileutils_rb_have_lchown = check_have_lchown?
      end
      @@fileutils_rb_have_lchown
    end

    def check_have_lchown?
      return false unless File.respond_to?(:lchown)
      File.lchown nil, nil
      return true
    rescue NotImplementedError
      return false
    end

    def join(dir, base)
      return File.path(dir) if not base or base == '.'
      return File.path(base) if not dir or dir == '.'
      File.join(dir, base)
    end

    if File::ALT_SEPARATOR
      DIRECTORY_TERM = "(?=[/#{Regexp.quote(File::ALT_SEPARATOR)}]|\\z)"
    else
      DIRECTORY_TERM = "(?=/|\\z)"
    end

    def descendant_directory?(descendant, ascendant)
      if File::FNM_SYSCASE.nonzero?
        File.expand_path(File.dirname(descendant)).casecmp(File.expand_path(ascendant)) == 0
      else
        File.expand_path(File.dirname(descendant)) == File.expand_path(ascendant)
      end
    end
  end   # class Entry_

  def fu_list(arg)   #:nodoc:
    [arg].flatten.map {|path| File.path(path) }
  end
  private_module_function :fu_list

  def fu_each_src_dest(src, dest)   #:nodoc:
    fu_each_src_dest0(src, dest) do |s, d|
      raise ArgumentError, "same file: #{s} and #{d}" if fu_same?(s, d)
      yield s, d
    end
  end
  private_module_function :fu_each_src_dest

  def fu_each_src_dest0(src, dest)   #:nodoc:
    if tmp = Array.try_convert(src)
      tmp.each do |s|
        s = File.path(s)
        yield s, File.join(dest, File.basename(s))
      end
    else
      src = File.path(src)
      if File.directory?(dest)
        yield src, File.join(dest, File.basename(src))
      else
        yield src, File.path(dest)
      end
    end
  end
  private_module_function :fu_each_src_dest0

  def fu_same?(a, b)   #:nodoc:
    File.identical?(a, b)
  end
  private_module_function :fu_same?

  def fu_output_message(msg)   #:nodoc:
    output = @fileutils_output if defined?(@fileutils_output)
    output ||= $stderr
    if defined?(@fileutils_label)
      msg = @fileutils_label + msg
    end
    output.puts msg
  end
  private_module_function :fu_output_message

  # This hash table holds command options.
  OPT_TABLE = {}    #:nodoc: internal use only
  (private_instance_methods & methods(false)).inject(OPT_TABLE) {|tbl, name|
    (tbl[name.to_s] = instance_method(name).parameters).map! {|t, n| n if t == :key}.compact!
    tbl
  }

  public

  #
  # Returns an Array of names of high-level methods that accept any keyword
  # arguments.
  #
  #   p Bundler::FileUtils.commands  #=> ["chmod", "cp", "cp_r", "install", ...]
  #
  def self.commands
    OPT_TABLE.keys
  end

  #
  # Returns an Array of option names.
  #
  #   p Bundler::FileUtils.options  #=> ["noop", "force", "verbose", "preserve", "mode"]
  #
  def self.options
    OPT_TABLE.values.flatten.uniq.map {|sym| sym.to_s }
  end

  #
  # Returns true if the method +mid+ have an option +opt+.
  #
  #   p Bundler::FileUtils.have_option?(:cp, :noop)     #=> true
  #   p Bundler::FileUtils.have_option?(:rm, :force)    #=> true
  #   p Bundler::FileUtils.have_option?(:rm, :preserve) #=> false
  #
  def self.have_option?(mid, opt)
    li = OPT_TABLE[mid.to_s] or raise ArgumentError, "no such method: #{mid}"
    li.include?(opt)
  end

  #
  # Returns an Array of option names of the method +mid+.
  #
  #   p Bundler::FileUtils.options_of(:rm)  #=> ["noop", "verbose", "force"]
  #
  def self.options_of(mid)
    OPT_TABLE[mid.to_s].map {|sym| sym.to_s }
  end

  #
  # Returns an Array of methods names which have the option +opt+.
  #
  #   p Bundler::FileUtils.collect_method(:preserve) #=> ["cp", "cp_r", "copy", "install"]
  #
  def self.collect_method(opt)
    OPT_TABLE.keys.select {|m| OPT_TABLE[m].include?(opt) }
  end

  private

  LOW_METHODS = singleton_methods(false) - collect_method(:noop).map(&:intern) # :nodoc:
  module LowMethods # :nodoc: internal use only
    private
    def _do_nothing(*)end
    ::Bundler::FileUtils::LOW_METHODS.map {|name| alias_method name, :_do_nothing}
  end

  METHODS = singleton_methods() - [:private_module_function,                  # :nodoc:
      :commands, :options, :have_option?, :options_of, :collect_method]

  #
  # This module has all methods of Bundler::FileUtils module, but it outputs messages
  # before acting.  This equates to passing the <tt>:verbose</tt> flag to
  # methods in Bundler::FileUtils.
  #
  module Verbose
    include Bundler::FileUtils
    names = ::Bundler::FileUtils.collect_method(:verbose)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, verbose: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::Bundler::FileUtils::METHODS)
    end
  end

  #
  # This module has all methods of Bundler::FileUtils module, but never changes
  # files/directories.  This equates to passing the <tt>:noop</tt> flag
  # to methods in Bundler::FileUtils.
  #
  module NoWrite
    include Bundler::FileUtils
    include LowMethods
    names = ::Bundler::FileUtils.collect_method(:noop)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, noop: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::Bundler::FileUtils::METHODS)
    end
  end

  #
  # This module has all methods of Bundler::FileUtils module, but never changes
  # files/directories, with printing message before acting.
  # This equates to passing the <tt>:noop</tt> and <tt>:verbose</tt> flag
  # to methods in Bundler::FileUtils.
  #
  module DryRun
    include Bundler::FileUtils
    include LowMethods
    names = ::Bundler::FileUtils.collect_method(:noop)
    names.each do |name|
      module_eval(<<-EOS, __FILE__, __LINE__ + 1)
        def #{name}(*args, **options)
          super(*args, **options, noop: true, verbose: true)
        end
      EOS
    end
    private(*names)
    extend self
    class << self
      public(*::Bundler::FileUtils::METHODS)
    end
  end

end
PK*"#[l��HYYAgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo.rbnu�[���# frozen_string_literal: true

require_relative 'molinillo/gem_metadata'
require_relative 'molinillo/errors'
require_relative 'molinillo/resolver'
require_relative 'molinillo/modules/ui'
require_relative 'molinillo/modules/specification_provider'

# Bundler::Molinillo is a generic dependency resolution algorithm.
module Bundler::Molinillo
end
PK*"#[��Ngems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  # The version of Bundler::Molinillo.
  VERSION = '0.8.0'.freeze
end
PK*"#[��޳ttHgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/errors.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  # An error that occurred during the resolution process
  class ResolverError < StandardError; end

  # An error caused by searching for a dependency that is completely unknown,
  # i.e. has no versions available whatsoever.
  class NoSuchDependencyError < ResolverError
    # @return [Object] the dependency that could not be found
    attr_accessor :dependency

    # @return [Array<Object>] the specifications that depended upon {#dependency}
    attr_accessor :required_by

    # Initializes a new error with the given missing dependency.
    # @param [Object] dependency @see {#dependency}
    # @param [Array<Object>] required_by @see {#required_by}
    def initialize(dependency, required_by = [])
      @dependency = dependency
      @required_by = required_by.uniq
      super()
    end

    # The error message for the missing dependency, including the specifications
    # that had this dependency.
    def message
      sources = required_by.map { |r| "`#{r}`" }.join(' and ')
      message = "Unable to find a specification for `#{dependency}`"
      message += " depended upon by #{sources}" unless sources.empty?
      message
    end
  end

  # An error caused by attempting to fulfil a dependency that was circular
  #
  # @note This exception will be thrown if and only if a {Vertex} is added to a
  #   {DependencyGraph} that has a {DependencyGraph::Vertex#path_to?} an
  #   existing {DependencyGraph::Vertex}
  class CircularDependencyError < ResolverError
    # [Set<Object>] the dependencies responsible for causing the error
    attr_reader :dependencies

    # Initializes a new error with the given circular vertices.
    # @param [Array<DependencyGraph::Vertex>] vertices the vertices in the dependency
    #   that caused the error
    def initialize(vertices)
      super "There is a circular dependency between #{vertices.map(&:name).join(' and ')}"
      @dependencies = vertices.map { |vertex| vertex.payload.possibilities.last }.to_set
    end
  end

  # An error caused by conflicts in version
  class VersionConflict < ResolverError
    # @return [{String => Resolution::Conflict}] the conflicts that caused
    #   resolution to fail
    attr_reader :conflicts

    # @return [SpecificationProvider] the specification provider used during
    #   resolution
    attr_reader :specification_provider

    # Initializes a new error with the given version conflicts.
    # @param [{String => Resolution::Conflict}] conflicts see {#conflicts}
    # @param [SpecificationProvider] specification_provider see {#specification_provider}
    def initialize(conflicts, specification_provider)
      pairs = []
      conflicts.values.flat_map(&:requirements).each do |conflicting|
        conflicting.each do |source, conflict_requirements|
          conflict_requirements.each do |c|
            pairs << [c, source]
          end
        end
      end

      super "Unable to satisfy the following requirements:\n\n" \
        "#{pairs.map { |r, d| "- `#{r}` required by `#{d}`" }.join("\n")}"

      @conflicts = conflicts
      @specification_provider = specification_provider
    end

    require_relative 'delegates/specification_provider'
    include Delegates::SpecificationProvider

    # @return [String] An error message that includes requirement trees,
    #   which is much more detailed & customizable than the default message
    # @param [Hash] opts the options to create a message with.
    # @option opts [String] :solver_name The user-facing name of the solver
    # @option opts [String] :possibility_type The generic name of a possibility
    # @option opts [Proc] :reduce_trees A proc that reduced the list of requirement trees
    # @option opts [Proc] :printable_requirement A proc that pretty-prints requirements
    # @option opts [Proc] :additional_message_for_conflict A proc that appends additional
    #   messages for each conflict
    # @option opts [Proc] :version_for_spec A proc that returns the version number for a
    #   possibility
    def message_with_trees(opts = {})
      solver_name = opts.delete(:solver_name) { self.class.name.split('::').first }
      possibility_type = opts.delete(:possibility_type) { 'possibility named' }
      reduce_trees = opts.delete(:reduce_trees) { proc { |trees| trees.uniq.sort_by(&:to_s) } }
      printable_requirement = opts.delete(:printable_requirement) { proc { |req| req.to_s } }
      additional_message_for_conflict = opts.delete(:additional_message_for_conflict) { proc {} }
      version_for_spec = opts.delete(:version_for_spec) { proc(&:to_s) }
      incompatible_version_message_for_conflict = opts.delete(:incompatible_version_message_for_conflict) do
        proc do |name, _conflict|
          %(#{solver_name} could not find compatible versions for #{possibility_type} "#{name}":)
        end
      end

      full_message_for_conflict = opts.delete(:full_message_for_conflict) do
        proc do |name, conflict|
          o = "\n".dup << incompatible_version_message_for_conflict.call(name, conflict) << "\n"
          if conflict.locked_requirement
            o << %(  In snapshot (#{name_for_locking_dependency_source}):\n)
            o << %(    #{printable_requirement.call(conflict.locked_requirement)}\n)
            o << %(\n)
          end
          o << %(  In #{name_for_explicit_dependency_source}:\n)
          trees = reduce_trees.call(conflict.requirement_trees)

          o << trees.map do |tree|
            t = ''.dup
            depth = 2
            tree.each do |req|
              t << '  ' * depth << printable_requirement.call(req)
              unless tree.last == req
                if spec = conflict.activated_by_name[name_for(req)]
                  t << %( was resolved to #{version_for_spec.call(spec)}, which)
                end
                t << %( depends on)
              end
              t << %(\n)
              depth += 1
            end
            t
          end.join("\n")

          additional_message_for_conflict.call(o, name, conflict)

          o
        end
      end

      conflicts.sort.reduce(''.dup) do |o, (name, conflict)|
        o << full_message_for_conflict.call(name, conflict)
      end.strip
    end
  end
end
PK*"#[�.mV��Vgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Bundler::Molinillo
  class DependencyGraph
    # @!visibility private
    # @see DependencyGraph#tag
    class Tag < Action
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :tag
      end

      # (see Action#up)
      def up(graph)
      end

      # (see Action#down)
      def down(graph)
      end

      # @!group Tag

      # @return [Object] An opaque tag
      attr_reader :tag

      # Initialize an action to tag a state of a dependency graph
      # @param [Object] tag an opaque tag
      def initialize(tag)
        @tag = tag
      end
    end
  end
end
PK*"#[Ի�HHYgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  class DependencyGraph
    # A vertex in a {DependencyGraph} that encapsulates a {#name} and a
    # {#payload}
    class Vertex
      # @return [String] the name of the vertex
      attr_accessor :name

      # @return [Object] the payload the vertex holds
      attr_accessor :payload

      # @return [Array<Object>] the explicit requirements that required
      #   this vertex
      attr_reader :explicit_requirements

      # @return [Boolean] whether the vertex is considered a root vertex
      attr_accessor :root
      alias root? root

      # Initializes a vertex with the given name and payload.
      # @param [String] name see {#name}
      # @param [Object] payload see {#payload}
      def initialize(name, payload)
        @name = name.frozen? ? name : name.dup.freeze
        @payload = payload
        @explicit_requirements = []
        @outgoing_edges = []
        @incoming_edges = []
      end

      # @return [Array<Object>] all of the requirements that required
      #   this vertex
      def requirements
        (incoming_edges.map(&:requirement) + explicit_requirements).uniq
      end

      # @return [Array<Edge>] the edges of {#graph} that have `self` as their
      #   {Edge#origin}
      attr_accessor :outgoing_edges

      # @return [Array<Edge>] the edges of {#graph} that have `self` as their
      #   {Edge#destination}
      attr_accessor :incoming_edges

      # @return [Array<Vertex>] the vertices of {#graph} that have an edge with
      #   `self` as their {Edge#destination}
      def predecessors
        incoming_edges.map(&:origin)
      end

      # @return [Set<Vertex>] the vertices of {#graph} where `self` is a
      #   {#descendent?}
      def recursive_predecessors
        _recursive_predecessors
      end

      # @param [Set<Vertex>] vertices the set to add the predecessors to
      # @return [Set<Vertex>] the vertices of {#graph} where `self` is a
      #   {#descendent?}
      def _recursive_predecessors(vertices = new_vertex_set)
        incoming_edges.each do |edge|
          vertex = edge.origin
          next unless vertices.add?(vertex)
          vertex._recursive_predecessors(vertices)
        end

        vertices
      end
      protected :_recursive_predecessors

      # @return [Array<Vertex>] the vertices of {#graph} that have an edge with
      #   `self` as their {Edge#origin}
      def successors
        outgoing_edges.map(&:destination)
      end

      # @return [Set<Vertex>] the vertices of {#graph} where `self` is an
      #   {#ancestor?}
      def recursive_successors
        _recursive_successors
      end

      # @param [Set<Vertex>] vertices the set to add the successors to
      # @return [Set<Vertex>] the vertices of {#graph} where `self` is an
      #   {#ancestor?}
      def _recursive_successors(vertices = new_vertex_set)
        outgoing_edges.each do |edge|
          vertex = edge.destination
          next unless vertices.add?(vertex)
          vertex._recursive_successors(vertices)
        end

        vertices
      end
      protected :_recursive_successors

      # @return [String] a string suitable for debugging
      def inspect
        "#{self.class}:#{name}(#{payload.inspect})"
      end

      # @return [Boolean] whether the two vertices are equal, determined
      #   by a recursive traversal of each {Vertex#successors}
      def ==(other)
        return true if equal?(other)
        shallow_eql?(other) &&
          successors.to_set == other.successors.to_set
      end

      # @param  [Vertex] other the other vertex to compare to
      # @return [Boolean] whether the two vertices are equal, determined
      #   solely by {#name} and {#payload} equality
      def shallow_eql?(other)
        return true if equal?(other)
        other &&
          name == other.name &&
          payload == other.payload
      end

      alias eql? ==

      # @return [Fixnum] a hash for the vertex based upon its {#name}
      def hash
        name.hash
      end

      # Is there a path from `self` to `other` following edges in the
      # dependency graph?
      # @return whether there is a path following edges within this {#graph}
      def path_to?(other)
        _path_to?(other)
      end

      alias descendent? path_to?

      # @param [Vertex] other the vertex to check if there's a path to
      # @param [Set<Vertex>] visited the vertices of {#graph} that have been visited
      # @return [Boolean] whether there is a path to `other` from `self`
      def _path_to?(other, visited = new_vertex_set)
        return false unless visited.add?(self)
        return true if equal?(other)
        successors.any? { |v| v._path_to?(other, visited) }
      end
      protected :_path_to?

      # Is there a path from `other` to `self` following edges in the
      # dependency graph?
      # @return whether there is a path following edges within this {#graph}
      def ancestor?(other)
        other.path_to?(self)
      end

      alias is_reachable_from? ancestor?

      def new_vertex_set
        require 'set'
        Set.new
      end
      private :new_vertex_set
    end
  end
end
PK*"#[�X�Acc]gems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Bundler::Molinillo
  class DependencyGraph
    # @!visibility private
    # (see DependencyGraph#add_vertex)
    class AddVertex < Action # :nodoc:
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :add_vertex
      end

      # (see Action#up)
      def up(graph)
        if existing = graph.vertices[name]
          @existing_payload = existing.payload
          @existing_root = existing.root
        end
        vertex = existing || Vertex.new(name, payload)
        graph.vertices[vertex.name] = vertex
        vertex.payload ||= payload
        vertex.root ||= root
        vertex
      end

      # (see Action#down)
      def down(graph)
        if defined?(@existing_payload)
          vertex = graph.vertices[name]
          vertex.payload = @existing_payload
          vertex.root = @existing_root
        else
          graph.vertices.delete(name)
        end
      end

      # @!group AddVertex

      # @return [String] the name of the vertex
      attr_reader :name

      # @return [Object] the payload for the vertex
      attr_reader :payload

      # @return [Boolean] whether the vertex is root or not
      attr_reader :root

      # Initialize an action to add a vertex to a dependency graph
      # @param [String] name the name of the vertex
      # @param [Object] payload the payload for the vertex
      # @param [Boolean] root whether the vertex is root or not
      def initialize(name, payload, root)
        @name = name
        @payload = payload
        @root = root
      end
    end
  end
end
PK*"#[@G�{��Ygems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  class DependencyGraph
    # An action that modifies a {DependencyGraph} that is reversible.
    # @abstract
    class Action
      # rubocop:disable Lint/UnusedMethodArgument

      # @return [Symbol] The name of the action.
      def self.action_name
        raise 'Abstract'
      end

      # Performs the action on the given graph.
      # @param  [DependencyGraph] graph the graph to perform the action on.
      # @return [Void]
      def up(graph)
        raise 'Abstract'
      end

      # Reverses the action on the given graph.
      # @param  [DependencyGraph] graph the graph to reverse the action on.
      # @return [Void]
      def down(graph)
        raise 'Abstract'
      end

      # @return [Action,Nil] The previous action
      attr_accessor :previous

      # @return [Action,Nil] The next action
      attr_accessor :next
    end
  end
end
PK*"#[:ʘ!��fgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Bundler::Molinillo
  class DependencyGraph
    # @!visibility private
    # @see DependencyGraph#detach_vertex_named
    class DetachVertexNamed < Action
      # @!group Action

      # (see Action#name)
      def self.action_name
        :add_vertex
      end

      # (see Action#up)
      def up(graph)
        return [] unless @vertex = graph.vertices.delete(name)

        removed_vertices = [@vertex]
        @vertex.outgoing_edges.each do |e|
          v = e.destination
          v.incoming_edges.delete(e)
          if !v.root? && v.incoming_edges.empty?
            removed_vertices.concat graph.detach_vertex_named(v.name)
          end
        end

        @vertex.incoming_edges.each do |e|
          v = e.origin
          v.outgoing_edges.delete(e)
        end

        removed_vertices
      end

      # (see Action#down)
      def down(graph)
        return unless @vertex
        graph.vertices[@vertex.name] = @vertex
        @vertex.outgoing_edges.each do |e|
          e.destination.incoming_edges << e
        end
        @vertex.incoming_edges.each do |e|
          e.origin.outgoing_edges << e
        end
      end

      # @!group DetachVertexNamed

      # @return [String] the name of the vertex to detach
      attr_reader :name

      # Initialize an action to detach a vertex from a dependency graph
      # @param [String] name the name of the vertex to detach
      def initialize(name)
        @name = name
      end
    end
  end
end
PK*"#[���D""^gems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Bundler::Molinillo
  class DependencyGraph
    # @!visibility private
    # (see DependencyGraph#delete_edge)
    class DeleteEdge < Action
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :delete_edge
      end

      # (see Action#up)
      def up(graph)
        edge = make_edge(graph)
        edge.origin.outgoing_edges.delete(edge)
        edge.destination.incoming_edges.delete(edge)
      end

      # (see Action#down)
      def down(graph)
        edge = make_edge(graph)
        edge.origin.outgoing_edges << edge
        edge.destination.incoming_edges << edge
        edge
      end

      # @!group DeleteEdge

      # @return [String] the name of the origin of the edge
      attr_reader :origin_name

      # @return [String] the name of the destination of the edge
      attr_reader :destination_name

      # @return [Object] the requirement that the edge represents
      attr_reader :requirement

      # @param  [DependencyGraph] graph the graph to find vertices from
      # @return [Edge] The edge this action adds
      def make_edge(graph)
        Edge.new(
          graph.vertex_named(origin_name),
          graph.vertex_named(destination_name),
          requirement
        )
      end

      # Initialize an action to add an edge to a dependency graph
      # @param [String] origin_name the name of the origin of the edge
      # @param [String] destination_name the name of the destination of the edge
      # @param [Object] requirement the requirement that the edge represents
      def initialize(origin_name, destination_name, requirement)
        @origin_name = origin_name
        @destination_name = destination_name
        @requirement = requirement
      end
    end
  end
end
PK*"#[D�Njooggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Bundler::Molinillo
  class DependencyGraph
    # @!visibility private
    # (see DependencyGraph#add_edge_no_circular)
    class AddEdgeNoCircular < Action
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :add_vertex
      end

      # (see Action#up)
      def up(graph)
        edge = make_edge(graph)
        edge.origin.outgoing_edges << edge
        edge.destination.incoming_edges << edge
        edge
      end

      # (see Action#down)
      def down(graph)
        edge = make_edge(graph)
        delete_first(edge.origin.outgoing_edges, edge)
        delete_first(edge.destination.incoming_edges, edge)
      end

      # @!group AddEdgeNoCircular

      # @return [String] the name of the origin of the edge
      attr_reader :origin

      # @return [String] the name of the destination of the edge
      attr_reader :destination

      # @return [Object] the requirement that the edge represents
      attr_reader :requirement

      # @param  [DependencyGraph] graph the graph to find vertices from
      # @return [Edge] The edge this action adds
      def make_edge(graph)
        Edge.new(graph.vertex_named(origin), graph.vertex_named(destination), requirement)
      end

      # Initialize an action to add an edge to a dependency graph
      # @param [String] origin the name of the origin of the edge
      # @param [String] destination the name of the destination of the edge
      # @param [Object] requirement the requirement that the edge represents
      def initialize(origin, destination, requirement)
        @origin = origin
        @destination = destination
        @requirement = requirement
      end

      private

      def delete_first(array, item)
        return unless index = array.index(item)
        array.delete_at(index)
      end
    end
  end
end
PK*"#[5	�Vgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rbnu�[���# frozen_string_literal: true

require_relative 'add_edge_no_circular'
require_relative 'add_vertex'
require_relative 'delete_edge'
require_relative 'detach_vertex_named'
require_relative 'set_payload'
require_relative 'tag'

module Bundler::Molinillo
  class DependencyGraph
    # A log for dependency graph actions
    class Log
      # Initializes an empty log
      def initialize
        @current_action = @first_action = nil
      end

      # @!macro [new] action
      #   {include:DependencyGraph#$0}
      #   @param [Graph] graph the graph to perform the action on
      #   @param (see DependencyGraph#$0)
      #   @return (see DependencyGraph#$0)

      # @macro action
      def tag(graph, tag)
        push_action(graph, Tag.new(tag))
      end

      # @macro action
      def add_vertex(graph, name, payload, root)
        push_action(graph, AddVertex.new(name, payload, root))
      end

      # @macro action
      def detach_vertex_named(graph, name)
        push_action(graph, DetachVertexNamed.new(name))
      end

      # @macro action
      def add_edge_no_circular(graph, origin, destination, requirement)
        push_action(graph, AddEdgeNoCircular.new(origin, destination, requirement))
      end

      # {include:DependencyGraph#delete_edge}
      # @param [Graph] graph the graph to perform the action on
      # @param [String] origin_name
      # @param [String] destination_name
      # @param [Object] requirement
      # @return (see DependencyGraph#delete_edge)
      def delete_edge(graph, origin_name, destination_name, requirement)
        push_action(graph, DeleteEdge.new(origin_name, destination_name, requirement))
      end

      # @macro action
      def set_payload(graph, name, payload)
        push_action(graph, SetPayload.new(name, payload))
      end

      # Pops the most recent action from the log and undoes the action
      # @param [DependencyGraph] graph
      # @return [Action] the action that was popped off the log
      def pop!(graph)
        return unless action = @current_action
        unless @current_action = action.previous
          @first_action = nil
        end
        action.down(graph)
        action
      end

      extend Enumerable

      # @!visibility private
      # Enumerates each action in the log
      # @yield [Action]
      def each
        return enum_for unless block_given?
        action = @first_action
        loop do
          break unless action
          yield action
          action = action.next
        end
        self
      end

      # @!visibility private
      # Enumerates each action in the log in reverse order
      # @yield [Action]
      def reverse_each
        return enum_for(:reverse_each) unless block_given?
        action = @current_action
        loop do
          break unless action
          yield action
          action = action.previous
        end
        self
      end

      # @macro action
      def rewind_to(graph, tag)
        loop do
          action = pop!(graph)
          raise "No tag #{tag.inspect} found" unless action
          break if action.class.action_name == :tag && action.tag == tag
        end
      end

      private

      # Adds the given action to the log, running the action
      # @param [DependencyGraph] graph
      # @param [Action] action
      # @return The value returned by `action.up`
      def push_action(graph, action)
        action.previous = @current_action
        @current_action.next = action if @current_action
        @current_action = action
        @first_action ||= action
        action.up(graph)
      end
    end
  end
end
PK*"#[�	?=WW^gems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rbnu�[���# frozen_string_literal: true

require_relative 'action'
module Bundler::Molinillo
  class DependencyGraph
    # @!visibility private
    # @see DependencyGraph#set_payload
    class SetPayload < Action # :nodoc:
      # @!group Action

      # (see Action.action_name)
      def self.action_name
        :set_payload
      end

      # (see Action#up)
      def up(graph)
        vertex = graph.vertex_named(name)
        @old_payload = vertex.payload
        vertex.payload = payload
      end

      # (see Action#down)
      def down(graph)
        graph.vertex_named(name).payload = @old_payload
      end

      # @!group SetPayload

      # @return [String] the name of the vertex
      attr_reader :name

      # @return [Object] the payload for the vertex
      attr_reader :payload

      # Initialize an action to add set the payload for a vertex in a dependency
      # graph
      # @param [String] name the name of the vertex
      # @param [Object] payload the payload for the vertex
      def initialize(name, payload)
        @name = name
        @payload = payload
      end
    end
  end
end
PK*"#[�ۦ���bgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  module Delegates
    # Delegates all {Bundler::Molinillo::SpecificationProvider} methods to a
    # `#specification_provider` property.
    module SpecificationProvider
      # (see Bundler::Molinillo::SpecificationProvider#search_for)
      def search_for(dependency)
        with_no_such_dependency_error_handling do
          specification_provider.search_for(dependency)
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#dependencies_for)
      def dependencies_for(specification)
        with_no_such_dependency_error_handling do
          specification_provider.dependencies_for(specification)
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#requirement_satisfied_by?)
      def requirement_satisfied_by?(requirement, activated, spec)
        with_no_such_dependency_error_handling do
          specification_provider.requirement_satisfied_by?(requirement, activated, spec)
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#dependencies_equal?)
      def dependencies_equal?(dependencies, other_dependencies)
        with_no_such_dependency_error_handling do
          specification_provider.dependencies_equal?(dependencies, other_dependencies)
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#name_for)
      def name_for(dependency)
        with_no_such_dependency_error_handling do
          specification_provider.name_for(dependency)
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#name_for_explicit_dependency_source)
      def name_for_explicit_dependency_source
        with_no_such_dependency_error_handling do
          specification_provider.name_for_explicit_dependency_source
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#name_for_locking_dependency_source)
      def name_for_locking_dependency_source
        with_no_such_dependency_error_handling do
          specification_provider.name_for_locking_dependency_source
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#sort_dependencies)
      def sort_dependencies(dependencies, activated, conflicts)
        with_no_such_dependency_error_handling do
          specification_provider.sort_dependencies(dependencies, activated, conflicts)
        end
      end

      # (see Bundler::Molinillo::SpecificationProvider#allow_missing?)
      def allow_missing?(dependency)
        with_no_such_dependency_error_handling do
          specification_provider.allow_missing?(dependency)
        end
      end

      private

      # Ensures any raised {NoSuchDependencyError} has its
      # {NoSuchDependencyError#required_by} set.
      # @yield
      def with_no_such_dependency_error_handling
        yield
      rescue NoSuchDependencyError => error
        if state
          vertex = activated.vertex_named(name_for(error.dependency))
          error.required_by += vertex.incoming_edges.map { |e| e.origin.name }
          error.required_by << name_for_explicit_dependency_source unless vertex.explicit_requirements.empty?
        end
        raise
      end
    end
  end
end
PK*"#[9DD�??\gems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  # @!visibility private
  module Delegates
    # Delegates all {Bundler::Molinillo::ResolutionState} methods to a `#state` property.
    module ResolutionState
      # (see Bundler::Molinillo::ResolutionState#name)
      def name
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.name
      end

      # (see Bundler::Molinillo::ResolutionState#requirements)
      def requirements
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.requirements
      end

      # (see Bundler::Molinillo::ResolutionState#activated)
      def activated
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.activated
      end

      # (see Bundler::Molinillo::ResolutionState#requirement)
      def requirement
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.requirement
      end

      # (see Bundler::Molinillo::ResolutionState#possibilities)
      def possibilities
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.possibilities
      end

      # (see Bundler::Molinillo::ResolutionState#depth)
      def depth
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.depth
      end

      # (see Bundler::Molinillo::ResolutionState#conflicts)
      def conflicts
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.conflicts
      end

      # (see Bundler::Molinillo::ResolutionState#unused_unwind_options)
      def unused_unwind_options
        current_state = state || Bundler::Molinillo::ResolutionState.empty
        current_state.unused_unwind_options
      end
    end
  end
end
PK*"#[~��Jgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rbnu�[���# frozen_string_literal: true

require_relative 'dependency_graph'

module Bundler::Molinillo
  # This class encapsulates a dependency resolver.
  # The resolver is responsible for determining which set of dependencies to
  # activate, with feedback from the {#specification_provider}
  #
  #
  class Resolver
    require_relative 'resolution'

    # @return [SpecificationProvider] the specification provider used
    #   in the resolution process
    attr_reader :specification_provider

    # @return [UI] the UI module used to communicate back to the user
    #   during the resolution process
    attr_reader :resolver_ui

    # Initializes a new resolver.
    # @param  [SpecificationProvider] specification_provider
    #   see {#specification_provider}
    # @param  [UI] resolver_ui
    #   see {#resolver_ui}
    def initialize(specification_provider, resolver_ui)
      @specification_provider = specification_provider
      @resolver_ui = resolver_ui
    end

    # Resolves the requested dependencies into a {DependencyGraph},
    # locking to the base dependency graph (if specified)
    # @param [Array] requested an array of 'requested' dependencies that the
    #   {#specification_provider} can understand
    # @param [DependencyGraph,nil] base the base dependency graph to which
    #   dependencies should be 'locked'
    def resolve(requested, base = DependencyGraph.new)
      Resolution.new(specification_provider,
                     resolver_ui,
                     requested,
                     base).
        resolve
    end
  end
end
PK*"#[+��4��Lgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  # Conveys information about the resolution process to a user.
  module UI
    # The {IO} object that should be used to print output. `STDOUT`, by default.
    #
    # @return [IO]
    def output
      STDOUT
    end

    # Called roughly every {#progress_rate}, this method should convey progress
    # to the user.
    #
    # @return [void]
    def indicate_progress
      output.print '.' unless debug?
    end

    # How often progress should be conveyed to the user via
    # {#indicate_progress}, in seconds. A third of a second, by default.
    #
    # @return [Float]
    def progress_rate
      0.33
    end

    # Called before resolution begins.
    #
    # @return [void]
    def before_resolution
      output.print 'Resolving dependencies...'
    end

    # Called after resolution ends (either successfully or with an error).
    # By default, prints a newline.
    #
    # @return [void]
    def after_resolution
      output.puts
    end

    # Conveys debug information to the user.
    #
    # @param [Integer] depth the current depth of the resolution process.
    # @return [void]
    def debug(depth = 0)
      if debug?
        debug_info = yield
        debug_info = debug_info.inspect unless debug_info.is_a?(String)
        debug_info = debug_info.split("\n").map { |s| ":#{depth.to_s.rjust 4}: #{s}" }
        output.puts debug_info
      end
    end

    # Whether or not debug messages should be printed.
    # By default, whether or not the `MOLINILLO_DEBUG` environment variable is
    # set.
    #
    # @return [Boolean]
    def debug?
      return @debug_mode if defined?(@debug_mode)
      @debug_mode = ENV['MOLINILLO_DEBUG']
    end
  end
end
PK*"#[!gpt[[`gems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  # Provides information about specifications and dependencies to the resolver,
  # allowing the {Resolver} class to remain generic while still providing power
  # and flexibility.
  #
  # This module contains the methods that users of Bundler::Molinillo must to implement,
  # using knowledge of their own model classes.
  module SpecificationProvider
    # Search for the specifications that match the given dependency.
    # The specifications in the returned array will be considered in reverse
    # order, so the latest version ought to be last.
    # @note This method should be 'pure', i.e. the return value should depend
    #   only on the `dependency` parameter.
    #
    # @param [Object] dependency
    # @return [Array<Object>] the specifications that satisfy the given
    #   `dependency`.
    def search_for(dependency)
      []
    end

    # Returns the dependencies of `specification`.
    # @note This method should be 'pure', i.e. the return value should depend
    #   only on the `specification` parameter.
    #
    # @param [Object] specification
    # @return [Array<Object>] the dependencies that are required by the given
    #   `specification`.
    def dependencies_for(specification)
      []
    end

    # Determines whether the given `requirement` is satisfied by the given
    # `spec`, in the context of the current `activated` dependency graph.
    #
    # @param [Object] requirement
    # @param [DependencyGraph] activated the current dependency graph in the
    #   resolution process.
    # @param [Object] spec
    # @return [Boolean] whether `requirement` is satisfied by `spec` in the
    #   context of the current `activated` dependency graph.
    def requirement_satisfied_by?(requirement, activated, spec)
      true
    end

    # Determines whether two arrays of dependencies are equal, and thus can be
    # grouped.
    #
    # @param [Array<Object>] dependencies
    # @param [Array<Object>] other_dependencies
    # @return [Boolean] whether `dependencies` and `other_dependencies` should
    #   be considered equal.
    def dependencies_equal?(dependencies, other_dependencies)
      dependencies == other_dependencies
    end

    # Returns the name for the given `dependency`.
    # @note This method should be 'pure', i.e. the return value should depend
    #   only on the `dependency` parameter.
    #
    # @param [Object] dependency
    # @return [String] the name for the given `dependency`.
    def name_for(dependency)
      dependency.to_s
    end

    # @return [String] the name of the source of explicit dependencies, i.e.
    #   those passed to {Resolver#resolve} directly.
    def name_for_explicit_dependency_source
      'user-specified dependency'
    end

    # @return [String] the name of the source of 'locked' dependencies, i.e.
    #   those passed to {Resolver#resolve} directly as the `base`
    def name_for_locking_dependency_source
      'Lockfile'
    end

    # Sort dependencies so that the ones that are easiest to resolve are first.
    # Easiest to resolve is (usually) defined by:
    #   1) Is this dependency already activated?
    #   2) How relaxed are the requirements?
    #   3) Are there any conflicts for this dependency?
    #   4) How many possibilities are there to satisfy this dependency?
    #
    # @param [Array<Object>] dependencies
    # @param [DependencyGraph] activated the current dependency graph in the
    #   resolution process.
    # @param [{String => Array<Conflict>}] conflicts
    # @return [Array<Object>] a sorted copy of `dependencies`.
    def sort_dependencies(dependencies, activated, conflicts)
      dependencies.sort_by do |dependency|
        name = name_for(dependency)
        [
          activated.vertex_named(name).payload ? 0 : 1,
          conflicts[name] ? 0 : 1,
        ]
      end
    end

    # Returns whether this dependency, which has no possible matching
    # specifications, can safely be ignored.
    #
    # @param [Object] dependency
    # @return [Boolean] whether this dependency can safely be skipped.
    def allow_missing?(dependency)
      false
    end
  end
end
PK*"#[��=����Lgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  class Resolver
    # A specific resolution from a given {Resolver}
    class Resolution
      # A conflict that the resolution process encountered
      # @attr [Object] requirement the requirement that immediately led to the conflict
      # @attr [{String,Nil=>[Object]}] requirements the requirements that caused the conflict
      # @attr [Object, nil] existing the existing spec that was in conflict with
      #   the {#possibility}
      # @attr [Object] possibility_set the set of specs that was unable to be
      #   activated due to a conflict.
      # @attr [Object] locked_requirement the relevant locking requirement.
      # @attr [Array<Array<Object>>] requirement_trees the different requirement
      #   trees that led to every requirement for the conflicting name.
      # @attr [{String=>Object}] activated_by_name the already-activated specs.
      # @attr [Object] underlying_error an error that has occurred during resolution, and
      #    will be raised at the end of it if no resolution is found.
      Conflict = Struct.new(
        :requirement,
        :requirements,
        :existing,
        :possibility_set,
        :locked_requirement,
        :requirement_trees,
        :activated_by_name,
        :underlying_error
      )

      class Conflict
        # @return [Object] a spec that was unable to be activated due to a conflict
        def possibility
          possibility_set && possibility_set.latest_version
        end
      end

      # A collection of possibility states that share the same dependencies
      # @attr [Array] dependencies the dependencies for this set of possibilities
      # @attr [Array] possibilities the possibilities
      PossibilitySet = Struct.new(:dependencies, :possibilities)

      class PossibilitySet
        # String representation of the possibility set, for debugging
        def to_s
          "[#{possibilities.join(', ')}]"
        end

        # @return [Object] most up-to-date dependency in the possibility set
        def latest_version
          possibilities.last
        end
      end

      # Details of the state to unwind to when a conflict occurs, and the cause of the unwind
      # @attr [Integer] state_index the index of the state to unwind to
      # @attr [Object] state_requirement the requirement of the state we're unwinding to
      # @attr [Array] requirement_tree for the requirement we're relaxing
      # @attr [Array] conflicting_requirements the requirements that combined to cause the conflict
      # @attr [Array] requirement_trees for the conflict
      # @attr [Array] requirements_unwound_to_instead array of unwind requirements that were chosen over this unwind
      UnwindDetails = Struct.new(
        :state_index,
        :state_requirement,
        :requirement_tree,
        :conflicting_requirements,
        :requirement_trees,
        :requirements_unwound_to_instead
      )

      class UnwindDetails
        include Comparable

        # We compare UnwindDetails when choosing which state to unwind to. If
        # two options have the same state_index we prefer the one most
        # removed from a requirement that caused the conflict. Both options
        # would unwind to the same state, but a `grandparent` option will
        # filter out fewer of its possibilities after doing so - where a state
        # is both a `parent` and a `grandparent` to requirements that have
        # caused a conflict this is the correct behaviour.
        # @param [UnwindDetail] other UnwindDetail to be compared
        # @return [Integer] integer specifying ordering
        def <=>(other)
          if state_index > other.state_index
            1
          elsif state_index == other.state_index
            reversed_requirement_tree_index <=> other.reversed_requirement_tree_index
          else
            -1
          end
        end

        # @return [Integer] index of state requirement in reversed requirement tree
        #    (the conflicting requirement itself will be at position 0)
        def reversed_requirement_tree_index
          @reversed_requirement_tree_index ||=
            if state_requirement
              requirement_tree.reverse.index(state_requirement)
            else
              999_999
            end
        end

        # @return [Boolean] where the requirement of the state we're unwinding
        #    to directly caused the conflict. Note: in this case, it is
        #    impossible for the state we're unwinding to to be a parent of
        #    any of the other conflicting requirements (or we would have
        #    circularity)
        def unwinding_to_primary_requirement?
          requirement_tree.last == state_requirement
        end

        # @return [Array] array of sub-dependencies to avoid when choosing a
        #    new possibility for the state we've unwound to. Only relevant for
        #    non-primary unwinds
        def sub_dependencies_to_avoid
          @requirements_to_avoid ||=
            requirement_trees.map do |tree|
              index = tree.index(state_requirement)
              tree[index + 1] if index
            end.compact
        end

        # @return [Array] array of all the requirements that led to the need for
        #    this unwind
        def all_requirements
          @all_requirements ||= requirement_trees.flatten(1)
        end
      end

      # @return [SpecificationProvider] the provider that knows about
      #   dependencies, requirements, specifications, versions, etc.
      attr_reader :specification_provider

      # @return [UI] the UI that knows how to communicate feedback about the
      #   resolution process back to the user
      attr_reader :resolver_ui

      # @return [DependencyGraph] the base dependency graph to which
      #   dependencies should be 'locked'
      attr_reader :base

      # @return [Array] the dependencies that were explicitly required
      attr_reader :original_requested

      # Initializes a new resolution.
      # @param [SpecificationProvider] specification_provider
      #   see {#specification_provider}
      # @param [UI] resolver_ui see {#resolver_ui}
      # @param [Array] requested see {#original_requested}
      # @param [DependencyGraph] base see {#base}
      def initialize(specification_provider, resolver_ui, requested, base)
        @specification_provider = specification_provider
        @resolver_ui = resolver_ui
        @original_requested = requested
        @base = base
        @states = []
        @iteration_counter = 0
        @parents_of = Hash.new { |h, k| h[k] = [] }
      end

      # Resolves the {#original_requested} dependencies into a full dependency
      #   graph
      # @raise [ResolverError] if successful resolution is impossible
      # @return [DependencyGraph] the dependency graph of successfully resolved
      #   dependencies
      def resolve
        start_resolution

        while state
          break if !state.requirement && state.requirements.empty?
          indicate_progress
          if state.respond_to?(:pop_possibility_state) # DependencyState
            debug(depth) { "Creating possibility state for #{requirement} (#{possibilities.count} remaining)" }
            state.pop_possibility_state.tap do |s|
              if s
                states.push(s)
                activated.tag(s)
              end
            end
          end
          process_topmost_state
        end

        resolve_activated_specs
      ensure
        end_resolution
      end

      # @return [Integer] the number of resolver iterations in between calls to
      #   {#resolver_ui}'s {UI#indicate_progress} method
      attr_accessor :iteration_rate
      private :iteration_rate

      # @return [Time] the time at which resolution began
      attr_accessor :started_at
      private :started_at

      # @return [Array<ResolutionState>] the stack of states for the resolution
      attr_accessor :states
      private :states

      private

      # Sets up the resolution process
      # @return [void]
      def start_resolution
        @started_at = Time.now

        push_initial_state

        debug { "Starting resolution (#{@started_at})\nUser-requested dependencies: #{original_requested}" }
        resolver_ui.before_resolution
      end

      def resolve_activated_specs
        activated.vertices.each do |_, vertex|
          next unless vertex.payload

          latest_version = vertex.payload.possibilities.reverse_each.find do |possibility|
            vertex.requirements.all? { |req| requirement_satisfied_by?(req, activated, possibility) }
          end

          activated.set_payload(vertex.name, latest_version)
        end
        activated.freeze
      end

      # Ends the resolution process
      # @return [void]
      def end_resolution
        resolver_ui.after_resolution
        debug do
          "Finished resolution (#{@iteration_counter} steps) " \
          "(Took #{(ended_at = Time.now) - @started_at} seconds) (#{ended_at})"
        end
        debug { 'Unactivated: ' + Hash[activated.vertices.reject { |_n, v| v.payload }].keys.join(', ') } if state
        debug { 'Activated: ' + Hash[activated.vertices.select { |_n, v| v.payload }].keys.join(', ') } if state
      end

      require_relative 'state'
      require_relative 'modules/specification_provider'

      require_relative 'delegates/resolution_state'
      require_relative 'delegates/specification_provider'

      include Bundler::Molinillo::Delegates::ResolutionState
      include Bundler::Molinillo::Delegates::SpecificationProvider

      # Processes the topmost available {RequirementState} on the stack
      # @return [void]
      def process_topmost_state
        if possibility
          attempt_to_activate
        else
          create_conflict
          unwind_for_conflict
        end
      rescue CircularDependencyError => underlying_error
        create_conflict(underlying_error)
        unwind_for_conflict
      end

      # @return [Object] the current possibility that the resolution is trying
      #   to activate
      def possibility
        possibilities.last
      end

      # @return [RequirementState] the current state the resolution is
      #   operating upon
      def state
        states.last
      end

      # Creates and pushes the initial state for the resolution, based upon the
      # {#requested} dependencies
      # @return [void]
      def push_initial_state
        graph = DependencyGraph.new.tap do |dg|
          original_requested.each do |requested|
            vertex = dg.add_vertex(name_for(requested), nil, true)
            vertex.explicit_requirements << requested
          end
          dg.tag(:initial_state)
        end

        push_state_for_requirements(original_requested, true, graph)
      end

      # Unwinds the states stack because a conflict has been encountered
      # @return [void]
      def unwind_for_conflict
        details_for_unwind = build_details_for_unwind
        unwind_options = unused_unwind_options
        debug(depth) { "Unwinding for conflict: #{requirement} to #{details_for_unwind.state_index / 2}" }
        conflicts.tap do |c|
          sliced_states = states.slice!((details_for_unwind.state_index + 1)..-1)
          raise_error_unless_state(c)
          activated.rewind_to(sliced_states.first || :initial_state) if sliced_states
          state.conflicts = c
          state.unused_unwind_options = unwind_options
          filter_possibilities_after_unwind(details_for_unwind)
          index = states.size - 1
          @parents_of.each { |_, a| a.reject! { |i| i >= index } }
          state.unused_unwind_options.reject! { |uw| uw.state_index >= index }
        end
      end

      # Raises a VersionConflict error, or any underlying error, if there is no
      # current state
      # @return [void]
      def raise_error_unless_state(conflicts)
        return if state

        error = conflicts.values.map(&:underlying_error).compact.first
        raise error || VersionConflict.new(conflicts, specification_provider)
      end

      # @return [UnwindDetails] Details of the nearest index to which we could unwind
      def build_details_for_unwind
        # Get the possible unwinds for the current conflict
        current_conflict = conflicts[name]
        binding_requirements = binding_requirements_for_conflict(current_conflict)
        unwind_details = unwind_options_for_requirements(binding_requirements)

        last_detail_for_current_unwind = unwind_details.sort.last
        current_detail = last_detail_for_current_unwind

        # Look for past conflicts that could be unwound to affect the
        # requirement tree for the current conflict
        all_reqs = last_detail_for_current_unwind.all_requirements
        all_reqs_size = all_reqs.size
        relevant_unused_unwinds = unused_unwind_options.select do |alternative|
          diff_reqs = all_reqs - alternative.requirements_unwound_to_instead
          next if diff_reqs.size == all_reqs_size
          # Find the highest index unwind whilst looping through
          current_detail = alternative if alternative > current_detail
          alternative
        end

        # Add the current unwind options to the `unused_unwind_options` array.
        # The "used" option will be filtered out during `unwind_for_conflict`.
        state.unused_unwind_options += unwind_details.reject { |detail| detail.state_index == -1 }

        # Update the requirements_unwound_to_instead on any relevant unused unwinds
        relevant_unused_unwinds.each do |d|
          (d.requirements_unwound_to_instead << current_detail.state_requirement).uniq!
        end
        unwind_details.each do |d|
          (d.requirements_unwound_to_instead << current_detail.state_requirement).uniq!
        end

        current_detail
      end

      # @param [Array<Object>] binding_requirements array of requirements that combine to create a conflict
      # @return [Array<UnwindDetails>] array of UnwindDetails that have a chance
      #    of resolving the passed requirements
      def unwind_options_for_requirements(binding_requirements)
        unwind_details = []

        trees = []
        binding_requirements.reverse_each do |r|
          partial_tree = [r]
          trees << partial_tree
          unwind_details << UnwindDetails.new(-1, nil, partial_tree, binding_requirements, trees, [])

          # If this requirement has alternative possibilities, check if any would
          # satisfy the other requirements that created this conflict
          requirement_state = find_state_for(r)
          if conflict_fixing_possibilities?(requirement_state, binding_requirements)
            unwind_details << UnwindDetails.new(
              states.index(requirement_state),
              r,
              partial_tree,
              binding_requirements,
              trees,
              []
            )
          end

          # Next, look at the parent of this requirement, and check if the requirement
          # could have been avoided if an alternative PossibilitySet had been chosen
          parent_r = parent_of(r)
          next if parent_r.nil?
          partial_tree.unshift(parent_r)
          requirement_state = find_state_for(parent_r)
          if requirement_state.possibilities.any? { |set| !set.dependencies.include?(r) }
            unwind_details << UnwindDetails.new(
              states.index(requirement_state),
              parent_r,
              partial_tree,
              binding_requirements,
              trees,
              []
            )
          end

          # Finally, look at the grandparent and up of this requirement, looking
          # for any possibilities that wouldn't create their parent requirement
          grandparent_r = parent_of(parent_r)
          until grandparent_r.nil?
            partial_tree.unshift(grandparent_r)
            requirement_state = find_state_for(grandparent_r)
            if requirement_state.possibilities.any? { |set| !set.dependencies.include?(parent_r) }
              unwind_details << UnwindDetails.new(
                states.index(requirement_state),
                grandparent_r,
                partial_tree,
                binding_requirements,
                trees,
                []
              )
            end
            parent_r = grandparent_r
            grandparent_r = parent_of(parent_r)
          end
        end

        unwind_details
      end

      # @param [DependencyState] state
      # @param [Array] binding_requirements array of requirements
      # @return [Boolean] whether or not the given state has any possibilities
      #    that could satisfy the given requirements
      def conflict_fixing_possibilities?(state, binding_requirements)
        return false unless state

        state.possibilities.any? do |possibility_set|
          possibility_set.possibilities.any? do |poss|
            possibility_satisfies_requirements?(poss, binding_requirements)
          end
        end
      end

      # Filter's a state's possibilities to remove any that would not fix the
      # conflict we've just rewound from
      # @param [UnwindDetails] unwind_details details of the conflict just
      #   unwound from
      # @return [void]
      def filter_possibilities_after_unwind(unwind_details)
        return unless state && !state.possibilities.empty?

        if unwind_details.unwinding_to_primary_requirement?
          filter_possibilities_for_primary_unwind(unwind_details)
        else
          filter_possibilities_for_parent_unwind(unwind_details)
        end
      end

      # Filter's a state's possibilities to remove any that would not satisfy
      # the requirements in the conflict we've just rewound from
      # @param [UnwindDetails] unwind_details details of the conflict just unwound from
      # @return [void]
      def filter_possibilities_for_primary_unwind(unwind_details)
        unwinds_to_state = unused_unwind_options.select { |uw| uw.state_index == unwind_details.state_index }
        unwinds_to_state << unwind_details
        unwind_requirement_sets = unwinds_to_state.map(&:conflicting_requirements)

        state.possibilities.reject! do |possibility_set|
          possibility_set.possibilities.none? do |poss|
            unwind_requirement_sets.any? do |requirements|
              possibility_satisfies_requirements?(poss, requirements)
            end
          end
        end
      end

      # @param [Object] possibility a single possibility
      # @param [Array] requirements an array of requirements
      # @return [Boolean] whether the possibility satisfies all of the
      #    given requirements
      def possibility_satisfies_requirements?(possibility, requirements)
        name = name_for(possibility)

        activated.tag(:swap)
        activated.set_payload(name, possibility) if activated.vertex_named(name)
        satisfied = requirements.all? { |r| requirement_satisfied_by?(r, activated, possibility) }
        activated.rewind_to(:swap)

        satisfied
      end

      # Filter's a state's possibilities to remove any that would (eventually)
      # create a requirement in the conflict we've just rewound from
      # @param [UnwindDetails] unwind_details details of the conflict just unwound from
      # @return [void]
      def filter_possibilities_for_parent_unwind(unwind_details)
        unwinds_to_state = unused_unwind_options.select { |uw| uw.state_index == unwind_details.state_index }
        unwinds_to_state << unwind_details

        primary_unwinds = unwinds_to_state.select(&:unwinding_to_primary_requirement?).uniq
        parent_unwinds = unwinds_to_state.uniq - primary_unwinds

        allowed_possibility_sets = primary_unwinds.flat_map do |unwind|
          states[unwind.state_index].possibilities.select do |possibility_set|
            possibility_set.possibilities.any? do |poss|
              possibility_satisfies_requirements?(poss, unwind.conflicting_requirements)
            end
          end
        end

        requirements_to_avoid = parent_unwinds.flat_map(&:sub_dependencies_to_avoid)

        state.possibilities.reject! do |possibility_set|
          !allowed_possibility_sets.include?(possibility_set) &&
            (requirements_to_avoid - possibility_set.dependencies).empty?
        end
      end

      # @param [Conflict] conflict
      # @return [Array] minimal array of requirements that would cause the passed
      #    conflict to occur.
      def binding_requirements_for_conflict(conflict)
        return [conflict.requirement] if conflict.possibility.nil?

        possible_binding_requirements = conflict.requirements.values.flatten(1).uniq

        # When there's a `CircularDependency` error the conflicting requirement
        # (the one causing the circular) won't be `conflict.requirement`
        # (which won't be for the right state, because we won't have created it,
        # because it's circular).
        # We need to make sure we have that requirement in the conflict's list,
        # otherwise we won't be able to unwind properly, so we just return all
        # the requirements for the conflict.
        return possible_binding_requirements if conflict.underlying_error

        possibilities = search_for(conflict.requirement)

        # If all the requirements together don't filter out all possibilities,
        # then the only two requirements we need to consider are the initial one
        # (where the dependency's version was first chosen) and the last
        if binding_requirement_in_set?(nil, possible_binding_requirements, possibilities)
          return [conflict.requirement, requirement_for_existing_name(name_for(conflict.requirement))].compact
        end

        # Loop through the possible binding requirements, removing each one
        # that doesn't bind. Use a `reverse_each` as we want the earliest set of
        # binding requirements, and don't use `reject!` as we wish to refine the
        # array *on each iteration*.
        binding_requirements = possible_binding_requirements.dup
        possible_binding_requirements.reverse_each do |req|
          next if req == conflict.requirement
          unless binding_requirement_in_set?(req, binding_requirements, possibilities)
            binding_requirements -= [req]
          end
        end

        binding_requirements
      end

      # @param [Object] requirement we wish to check
      # @param [Array] possible_binding_requirements array of requirements
      # @param [Array] possibilities array of possibilities the requirements will be used to filter
      # @return [Boolean] whether or not the given requirement is required to filter
      #    out all elements of the array of possibilities.
      def binding_requirement_in_set?(requirement, possible_binding_requirements, possibilities)
        possibilities.any? do |poss|
          possibility_satisfies_requirements?(poss, possible_binding_requirements - [requirement])
        end
      end

      # @param [Object] requirement
      # @return [Object] the requirement that led to `requirement` being added
      #   to the list of requirements.
      def parent_of(requirement)
        return unless requirement
        return unless index = @parents_of[requirement].last
        return unless parent_state = @states[index]
        parent_state.requirement
      end

      # @param [String] name
      # @return [Object] the requirement that led to a version of a possibility
      #   with the given name being activated.
      def requirement_for_existing_name(name)
        return nil unless vertex = activated.vertex_named(name)
        return nil unless vertex.payload
        states.find { |s| s.name == name }.requirement
      end

      # @param [Object] requirement
      # @return [ResolutionState] the state whose `requirement` is the given
      #   `requirement`.
      def find_state_for(requirement)
        return nil unless requirement
        states.find { |i| requirement == i.requirement }
      end

      # @param [Object] underlying_error
      # @return [Conflict] a {Conflict} that reflects the failure to activate
      #   the {#possibility} in conjunction with the current {#state}
      def create_conflict(underlying_error = nil)
        vertex = activated.vertex_named(name)
        locked_requirement = locked_requirement_named(name)

        requirements = {}
        unless vertex.explicit_requirements.empty?
          requirements[name_for_explicit_dependency_source] = vertex.explicit_requirements
        end
        requirements[name_for_locking_dependency_source] = [locked_requirement] if locked_requirement
        vertex.incoming_edges.each do |edge|
          (requirements[edge.origin.payload.latest_version] ||= []).unshift(edge.requirement)
        end

        activated_by_name = {}
        activated.each { |v| activated_by_name[v.name] = v.payload.latest_version if v.payload }
        conflicts[name] = Conflict.new(
          requirement,
          requirements,
          vertex.payload && vertex.payload.latest_version,
          possibility,
          locked_requirement,
          requirement_trees,
          activated_by_name,
          underlying_error
        )
      end

      # @return [Array<Array<Object>>] The different requirement
      #   trees that led to every requirement for the current spec.
      def requirement_trees
        vertex = activated.vertex_named(name)
        vertex.requirements.map { |r| requirement_tree_for(r) }
      end

      # @param [Object] requirement
      # @return [Array<Object>] the list of requirements that led to
      #   `requirement` being required.
      def requirement_tree_for(requirement)
        tree = []
        while requirement
          tree.unshift(requirement)
          requirement = parent_of(requirement)
        end
        tree
      end

      # Indicates progress roughly once every second
      # @return [void]
      def indicate_progress
        @iteration_counter += 1
        @progress_rate ||= resolver_ui.progress_rate
        if iteration_rate.nil?
          if Time.now - started_at >= @progress_rate
            self.iteration_rate = @iteration_counter
          end
        end

        if iteration_rate && (@iteration_counter % iteration_rate) == 0
          resolver_ui.indicate_progress
        end
      end

      # Calls the {#resolver_ui}'s {UI#debug} method
      # @param [Integer] depth the depth of the {#states} stack
      # @param [Proc] block a block that yields a {#to_s}
      # @return [void]
      def debug(depth = 0, &block)
        resolver_ui.debug(depth, &block)
      end

      # Attempts to activate the current {#possibility}
      # @return [void]
      def attempt_to_activate
        debug(depth) { 'Attempting to activate ' + possibility.to_s }
        existing_vertex = activated.vertex_named(name)
        if existing_vertex.payload
          debug(depth) { "Found existing spec (#{existing_vertex.payload})" }
          attempt_to_filter_existing_spec(existing_vertex)
        else
          latest = possibility.latest_version
          possibility.possibilities.select! do |possibility|
            requirement_satisfied_by?(requirement, activated, possibility)
          end
          if possibility.latest_version.nil?
            # ensure there's a possibility for better error messages
            possibility.possibilities << latest if latest
            create_conflict
            unwind_for_conflict
          else
            activate_new_spec
          end
        end
      end

      # Attempts to update the existing vertex's `PossibilitySet` with a filtered version
      # @return [void]
      def attempt_to_filter_existing_spec(vertex)
        filtered_set = filtered_possibility_set(vertex)
        if !filtered_set.possibilities.empty?
          activated.set_payload(name, filtered_set)
          new_requirements = requirements.dup
          push_state_for_requirements(new_requirements, false)
        else
          create_conflict
          debug(depth) { "Unsatisfied by existing spec (#{vertex.payload})" }
          unwind_for_conflict
        end
      end

      # Generates a filtered version of the existing vertex's `PossibilitySet` using the
      # current state's `requirement`
      # @param [Object] vertex existing vertex
      # @return [PossibilitySet] filtered possibility set
      def filtered_possibility_set(vertex)
        PossibilitySet.new(vertex.payload.dependencies, vertex.payload.possibilities & possibility.possibilities)
      end

      # @param [String] requirement_name the spec name to search for
      # @return [Object] the locked spec named `requirement_name`, if one
      #   is found on {#base}
      def locked_requirement_named(requirement_name)
        vertex = base.vertex_named(requirement_name)
        vertex && vertex.payload
      end

      # Add the current {#possibility} to the dependency graph of the current
      # {#state}
      # @return [void]
      def activate_new_spec
        conflicts.delete(name)
        debug(depth) { "Activated #{name} at #{possibility}" }
        activated.set_payload(name, possibility)
        require_nested_dependencies_for(possibility)
      end

      # Requires the dependencies that the recently activated spec has
      # @param [Object] possibility_set the PossibilitySet that has just been
      #   activated
      # @return [void]
      def require_nested_dependencies_for(possibility_set)
        nested_dependencies = dependencies_for(possibility_set.latest_version)
        debug(depth) { "Requiring nested dependencies (#{nested_dependencies.join(', ')})" }
        nested_dependencies.each do |d|
          activated.add_child_vertex(name_for(d), nil, [name_for(possibility_set.latest_version)], d)
          parent_index = states.size - 1
          parents = @parents_of[d]
          parents << parent_index if parents.empty?
        end

        push_state_for_requirements(requirements + nested_dependencies, !nested_dependencies.empty?)
      end

      # Pushes a new {DependencyState} that encapsulates both existing and new
      # requirements
      # @param [Array] new_requirements
      # @param [Boolean] requires_sort
      # @param [Object] new_activated
      # @return [void]
      def push_state_for_requirements(new_requirements, requires_sort = true, new_activated = activated)
        new_requirements = sort_dependencies(new_requirements.uniq, new_activated, conflicts) if requires_sort
        new_requirement = nil
        loop do
          new_requirement = new_requirements.shift
          break if new_requirement.nil? || states.none? { |s| s.requirement == new_requirement }
        end
        new_name = new_requirement ? name_for(new_requirement) : ''.freeze
        possibilities = possibilities_for_requirement(new_requirement)
        handle_missing_or_push_dependency_state DependencyState.new(
          new_name, new_requirements, new_activated,
          new_requirement, possibilities, depth, conflicts.dup, unused_unwind_options.dup
        )
      end

      # Checks a proposed requirement with any existing locked requirement
      # before generating an array of possibilities for it.
      # @param [Object] requirement the proposed requirement
      # @param [Object] activated
      # @return [Array] possibilities
      def possibilities_for_requirement(requirement, activated = self.activated)
        return [] unless requirement
        if locked_requirement_named(name_for(requirement))
          return locked_requirement_possibility_set(requirement, activated)
        end

        group_possibilities(search_for(requirement))
      end

      # @param [Object] requirement the proposed requirement
      # @param [Object] activated
      # @return [Array] possibility set containing only the locked requirement, if any
      def locked_requirement_possibility_set(requirement, activated = self.activated)
        all_possibilities = search_for(requirement)
        locked_requirement = locked_requirement_named(name_for(requirement))

        # Longwinded way to build a possibilities array with either the locked
        # requirement or nothing in it. Required, since the API for
        # locked_requirement isn't guaranteed.
        locked_possibilities = all_possibilities.select do |possibility|
          requirement_satisfied_by?(locked_requirement, activated, possibility)
        end

        group_possibilities(locked_possibilities)
      end

      # Build an array of PossibilitySets, with each element representing a group of
      # dependency versions that all have the same sub-dependency version constraints
      # and are contiguous.
      # @param [Array] possibilities an array of possibilities
      # @return [Array<PossibilitySet>] an array of possibility sets
      def group_possibilities(possibilities)
        possibility_sets = []
        current_possibility_set = nil

        possibilities.reverse_each do |possibility|
          dependencies = dependencies_for(possibility)
          if current_possibility_set && dependencies_equal?(current_possibility_set.dependencies, dependencies)
            current_possibility_set.possibilities.unshift(possibility)
          else
            possibility_sets.unshift(PossibilitySet.new(dependencies, [possibility]))
            current_possibility_set = possibility_sets.first
          end
        end

        possibility_sets
      end

      # Pushes a new {DependencyState}.
      # If the {#specification_provider} says to
      # {SpecificationProvider#allow_missing?} that particular requirement, and
      # there are no possibilities for that requirement, then `state` is not
      # pushed, and the vertex in {#activated} is removed, and we continue
      # resolving the remaining requirements.
      # @param [DependencyState] state
      # @return [void]
      def handle_missing_or_push_dependency_state(state)
        if state.requirement && state.possibilities.empty? && allow_missing?(state.requirement)
          state.activated.detach_vertex_named(state.name)
          push_state_for_requirements(state.requirements.dup, false, state.activated)
        else
          states.push(state).tap { activated.tag(state) }
        end
      end
    end
  end
end
PK*"#[c�Ou((Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/state.rbnu�[���# frozen_string_literal: true

module Bundler::Molinillo
  # A state that a {Resolution} can be in
  # @attr [String] name the name of the current requirement
  # @attr [Array<Object>] requirements currently unsatisfied requirements
  # @attr [DependencyGraph] activated the graph of activated dependencies
  # @attr [Object] requirement the current requirement
  # @attr [Object] possibilities the possibilities to satisfy the current requirement
  # @attr [Integer] depth the depth of the resolution
  # @attr [Hash] conflicts unresolved conflicts, indexed by dependency name
  # @attr [Array<UnwindDetails>] unused_unwind_options unwinds for previous conflicts that weren't explored
  ResolutionState = Struct.new(
    :name,
    :requirements,
    :activated,
    :requirement,
    :possibilities,
    :depth,
    :conflicts,
    :unused_unwind_options
  )

  class ResolutionState
    # Returns an empty resolution state
    # @return [ResolutionState] an empty state
    def self.empty
      new(nil, [], DependencyGraph.new, nil, nil, 0, {}, [])
    end
  end

  # A state that encapsulates a set of {#requirements} with an {Array} of
  # possibilities
  class DependencyState < ResolutionState
    # Removes a possibility from `self`
    # @return [PossibilityState] a state with a single possibility,
    #  the possibility that was removed from `self`
    def pop_possibility_state
      PossibilityState.new(
        name,
        requirements.dup,
        activated,
        requirement,
        [possibilities.pop],
        depth + 1,
        conflicts.dup,
        unused_unwind_options.dup
      ).tap do |state|
        state.activated.tag(state)
      end
    end
  end

  # A state that encapsulates a single possibility to fulfill the given
  # {#requirement}
  class PossibilityState < ResolutionState
  end
end
PK*"#[��/:� � Rgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rbnu�[���# frozen_string_literal: true

require_relative '../../../../vendored_tsort'

require_relative 'dependency_graph/log'
require_relative 'dependency_graph/vertex'

module Bundler::Molinillo
  # A directed acyclic graph that is tuned to hold named dependencies
  class DependencyGraph
    include Enumerable

    # Enumerates through the vertices of the graph.
    # @return [Array<Vertex>] The graph's vertices.
    def each
      return vertices.values.each unless block_given?
      vertices.values.each { |v| yield v }
    end

    include Bundler::TSort

    # @!visibility private
    alias tsort_each_node each

    # @!visibility private
    def tsort_each_child(vertex, &block)
      vertex.successors.each(&block)
    end

    # Topologically sorts the given vertices.
    # @param [Enumerable<Vertex>] vertices the vertices to be sorted, which must
    #   all belong to the same graph.
    # @return [Array<Vertex>] The sorted vertices.
    def self.tsort(vertices)
      Bundler::TSort.tsort(
        lambda { |b| vertices.each(&b) },
        lambda { |v, &b| (v.successors & vertices).each(&b) }
      )
    end

    # A directed edge of a {DependencyGraph}
    # @attr [Vertex] origin The origin of the directed edge
    # @attr [Vertex] destination The destination of the directed edge
    # @attr [Object] requirement The requirement the directed edge represents
    Edge = Struct.new(:origin, :destination, :requirement)

    # @return [{String => Vertex}] the vertices of the dependency graph, keyed
    #   by {Vertex#name}
    attr_reader :vertices

    # @return [Log] the op log for this graph
    attr_reader :log

    # Initializes an empty dependency graph
    def initialize
      @vertices = {}
      @log = Log.new
    end

    # Tags the current state of the dependency as the given tag
    # @param  [Object] tag an opaque tag for the current state of the graph
    # @return [Void]
    def tag(tag)
      log.tag(self, tag)
    end

    # Rewinds the graph to the state tagged as `tag`
    # @param  [Object] tag the tag to rewind to
    # @return [Void]
    def rewind_to(tag)
      log.rewind_to(self, tag)
    end

    # Initializes a copy of a {DependencyGraph}, ensuring that all {#vertices}
    # are properly copied.
    # @param [DependencyGraph] other the graph to copy.
    def initialize_copy(other)
      super
      @vertices = {}
      @log = other.log.dup
      traverse = lambda do |new_v, old_v|
        return if new_v.outgoing_edges.size == old_v.outgoing_edges.size
        old_v.outgoing_edges.each do |edge|
          destination = add_vertex(edge.destination.name, edge.destination.payload)
          add_edge_no_circular(new_v, destination, edge.requirement)
          traverse.call(destination, edge.destination)
        end
      end
      other.vertices.each do |name, vertex|
        new_vertex = add_vertex(name, vertex.payload, vertex.root?)
        new_vertex.explicit_requirements.replace(vertex.explicit_requirements)
        traverse.call(new_vertex, vertex)
      end
    end

    # @return [String] a string suitable for debugging
    def inspect
      "#{self.class}:#{vertices.values.inspect}"
    end

    # @param [Hash] options options for dot output.
    # @return [String] Returns a dot format representation of the graph
    def to_dot(options = {})
      edge_label = options.delete(:edge_label)
      raise ArgumentError, "Unknown options: #{options.keys}" unless options.empty?

      dot_vertices = []
      dot_edges = []
      vertices.each do |n, v|
        dot_vertices << "  #{n} [label=\"{#{n}|#{v.payload}}\"]"
        v.outgoing_edges.each do |e|
          label = edge_label ? edge_label.call(e) : e.requirement
          dot_edges << "  #{e.origin.name} -> #{e.destination.name} [label=#{label.to_s.dump}]"
        end
      end

      dot_vertices.uniq!
      dot_vertices.sort!
      dot_edges.uniq!
      dot_edges.sort!

      dot = dot_vertices.unshift('digraph G {').push('') + dot_edges.push('}')
      dot.join("\n")
    end

    # @param [DependencyGraph] other
    # @return [Boolean] whether the two dependency graphs are equal, determined
    #   by a recursive traversal of each {#root_vertices} and its
    #   {Vertex#successors}
    def ==(other)
      return false unless other
      return true if equal?(other)
      vertices.each do |name, vertex|
        other_vertex = other.vertex_named(name)
        return false unless other_vertex
        return false unless vertex.payload == other_vertex.payload
        return false unless other_vertex.successors.to_set == vertex.successors.to_set
      end
    end

    # @param [String] name
    # @param [Object] payload
    # @param [Array<String>] parent_names
    # @param [Object] requirement the requirement that is requiring the child
    # @return [void]
    def add_child_vertex(name, payload, parent_names, requirement)
      root = !parent_names.delete(nil) { true }
      vertex = add_vertex(name, payload, root)
      vertex.explicit_requirements << requirement if root
      parent_names.each do |parent_name|
        parent_vertex = vertex_named(parent_name)
        add_edge(parent_vertex, vertex, requirement)
      end
      vertex
    end

    # Adds a vertex with the given name, or updates the existing one.
    # @param [String] name
    # @param [Object] payload
    # @return [Vertex] the vertex that was added to `self`
    def add_vertex(name, payload, root = false)
      log.add_vertex(self, name, payload, root)
    end

    # Detaches the {#vertex_named} `name` {Vertex} from the graph, recursively
    # removing any non-root vertices that were orphaned in the process
    # @param [String] name
    # @return [Array<Vertex>] the vertices which have been detached
    def detach_vertex_named(name)
      log.detach_vertex_named(self, name)
    end

    # @param [String] name
    # @return [Vertex,nil] the vertex with the given name
    def vertex_named(name)
      vertices[name]
    end

    # @param [String] name
    # @return [Vertex,nil] the root vertex with the given name
    def root_vertex_named(name)
      vertex = vertex_named(name)
      vertex if vertex && vertex.root?
    end

    # Adds a new {Edge} to the dependency graph
    # @param [Vertex] origin
    # @param [Vertex] destination
    # @param [Object] requirement the requirement that this edge represents
    # @return [Edge] the added edge
    def add_edge(origin, destination, requirement)
      if destination.path_to?(origin)
        raise CircularDependencyError.new(path(destination, origin))
      end
      add_edge_no_circular(origin, destination, requirement)
    end

    # Deletes an {Edge} from the dependency graph
    # @param [Edge] edge
    # @return [Void]
    def delete_edge(edge)
      log.delete_edge(self, edge.origin.name, edge.destination.name, edge.requirement)
    end

    # Sets the payload of the vertex with the given name
    # @param [String] name the name of the vertex
    # @param [Object] payload the payload
    # @return [Void]
    def set_payload(name, payload)
      log.set_payload(self, name, payload)
    end

    private

    # Adds a new {Edge} to the dependency graph without checking for
    # circularity.
    # @param (see #add_edge)
    # @return (see #add_edge)
    def add_edge_no_circular(origin, destination, requirement)
      log.add_edge_no_circular(self, origin.name, destination.name, requirement)
    end

    # Returns the path between two vertices
    # @raise [ArgumentError] if there is no path between the vertices
    # @param [Vertex] from
    # @param [Vertex] to
    # @return [Array<Vertex>] the shortest path from `from` to `to`
    def path(from, to)
      distances = Hash.new(vertices.size + 1)
      distances[from.name] = 0
      predecessors = {}
      each do |vertex|
        vertex.successors.each do |successor|
          if distances[successor.name] > distances[vertex.name] + 1
            distances[successor.name] = distances[vertex.name] + 1
            predecessors[successor] = vertex
          end
        end
      end

      path = [to]
      while before = predecessors[to]
        path << before
        to = before
        break if to == from
      end

      unless path.last.equal?(from)
        raise ArgumentError, "There is no path from #{from.name} to #{to.name}"
      end

      path.reverse
    end
  end
end
PK*"#[`�<�
�
Mgems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool.rbnu�[���require "timeout"
require_relative "connection_pool/version"

class Bundler::ConnectionPool
  class Error < ::RuntimeError; end
  class PoolShuttingDownError < ::Bundler::ConnectionPool::Error; end
  class TimeoutError < ::Timeout::Error; end
end

# Generic connection pool class for sharing a limited number of objects or network connections
# among many threads.  Note: pool elements are lazily created.
#
# Example usage with block (faster):
#
#    @pool = Bundler::ConnectionPool.new { Redis.new }
#    @pool.with do |redis|
#      redis.lpop('my-list') if redis.llen('my-list') > 0
#    end
#
# Using optional timeout override (for that single invocation)
#
#    @pool.with(timeout: 2.0) do |redis|
#      redis.lpop('my-list') if redis.llen('my-list') > 0
#    end
#
# Example usage replacing an existing connection (slower):
#
#    $redis = Bundler::ConnectionPool.wrap { Redis.new }
#
#    def do_work
#      $redis.lpop('my-list') if $redis.llen('my-list') > 0
#    end
#
# Accepts the following options:
# - :size - number of connections to pool, defaults to 5
# - :timeout - amount of time to wait for a connection if none currently available, defaults to 5 seconds
#
class Bundler::ConnectionPool
  DEFAULTS = {size: 5, timeout: 5}

  def self.wrap(options, &block)
    Wrapper.new(options, &block)
  end

  def initialize(options = {}, &block)
    raise ArgumentError, "Connection pool requires a block" unless block

    options = DEFAULTS.merge(options)

    @size = Integer(options.fetch(:size))
    @timeout = options.fetch(:timeout)

    @available = TimedStack.new(@size, &block)
    @key = :"pool-#{@available.object_id}"
    @key_count = :"pool-#{@available.object_id}-count"
  end

  def with(options = {})
    Thread.handle_interrupt(Exception => :never) do
      conn = checkout(options)
      begin
        Thread.handle_interrupt(Exception => :immediate) do
          yield conn
        end
      ensure
        checkin
      end
    end
  end
  alias then with

  def checkout(options = {})
    if ::Thread.current[@key]
      ::Thread.current[@key_count] += 1
      ::Thread.current[@key]
    else
      ::Thread.current[@key_count] = 1
      ::Thread.current[@key] = @available.pop(options[:timeout] || @timeout)
    end
  end

  def checkin
    if ::Thread.current[@key]
      if ::Thread.current[@key_count] == 1
        @available.push(::Thread.current[@key])
        ::Thread.current[@key] = nil
        ::Thread.current[@key_count] = nil
      else
        ::Thread.current[@key_count] -= 1
      end
    else
      raise Bundler::ConnectionPool::Error, "no connections are checked out"
    end

    nil
  end

  ##
  # Shuts down the Bundler::ConnectionPool by passing each connection to +block+ and
  # then removing it from the pool. Attempting to checkout a connection after
  # shutdown will raise +Bundler::ConnectionPool::PoolShuttingDownError+.

  def shutdown(&block)
    @available.shutdown(&block)
  end

  ##
  # Reloads the Bundler::ConnectionPool by passing each connection to +block+ and then
  # removing it the pool. Subsequent checkouts will create new connections as
  # needed.

  def reload(&block)
    @available.shutdown(reload: true, &block)
  end

  # Size of this connection pool
  attr_reader :size

  # Number of pool entries available for checkout at this instant.
  def available
    @available.length
  end
end

require_relative "connection_pool/timed_stack"
require_relative "connection_pool/wrapper"
PK*"#[�Y�r66Ugems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rbnu�[���class Bundler::ConnectionPool
  VERSION = "2.3.0"
end
PK*"#[���ffUgems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rbnu�[���class Bundler::ConnectionPool
  class Wrapper < ::BasicObject
    METHODS = [:with, :pool_shutdown, :wrapped_pool]

    def initialize(options = {}, &block)
      @pool = options.fetch(:pool) { ::Bundler::ConnectionPool.new(options, &block) }
    end

    def wrapped_pool
      @pool
    end

    def with(&block)
      @pool.with(&block)
    end

    def pool_shutdown(&block)
      @pool.shutdown(&block)
    end

    def pool_size
      @pool.size
    end

    def pool_available
      @pool.available
    end

    def respond_to?(id, *args)
      METHODS.include?(id) || with { |c| c.respond_to?(id, *args) }
    end

    # rubocop:disable Style/MethodMissingSuper
    # rubocop:disable Style/MissingRespondToMissing
    if ::RUBY_VERSION >= "3.0.0"
      def method_missing(name, *args, **kwargs, &block)
        with do |connection|
          connection.send(name, *args, **kwargs, &block)
        end
      end
    elsif ::RUBY_VERSION >= "2.7.0"
      ruby2_keywords def method_missing(name, *args, &block)
        with do |connection|
          connection.send(name, *args, &block)
        end
      end
    else
      def method_missing(name, *args, &block)
        with do |connection|
          connection.send(name, *args, &block)
        end
      end
    end
    # rubocop:enable Style/MethodMissingSuper
    # rubocop:enable Style/MissingRespondToMissing
  end
end
PK*"#[r���[[Ygems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rbnu�[���##
# The TimedStack manages a pool of homogeneous connections (or any resource
# you wish to manage).  Connections are created lazily up to a given maximum
# number.

# Examples:
#
#    ts = TimedStack.new(1) { MyConnection.new }
#
#    # fetch a connection
#    conn = ts.pop
#
#    # return a connection
#    ts.push conn
#
#    conn = ts.pop
#    ts.pop timeout: 5
#    #=> raises Bundler::ConnectionPool::TimeoutError after 5 seconds

class Bundler::ConnectionPool::TimedStack
  attr_reader :max

  ##
  # Creates a new pool with +size+ connections that are created from the given
  # +block+.

  def initialize(size = 0, &block)
    @create_block = block
    @created = 0
    @que = []
    @max = size
    @mutex = Thread::Mutex.new
    @resource = Thread::ConditionVariable.new
    @shutdown_block = nil
  end

  ##
  # Returns +obj+ to the stack.  +options+ is ignored in TimedStack but may be
  # used by subclasses that extend TimedStack.

  def push(obj, options = {})
    @mutex.synchronize do
      if @shutdown_block
        @shutdown_block.call(obj)
      else
        store_connection obj, options
      end

      @resource.broadcast
    end
  end
  alias << push

  ##
  # Retrieves a connection from the stack.  If a connection is available it is
  # immediately returned.  If no connection is available within the given
  # timeout a Bundler::ConnectionPool::TimeoutError is raised.
  #
  # +:timeout+ is the only checked entry in +options+ and is preferred over
  # the +timeout+ argument (which will be removed in a future release).  Other
  # options may be used by subclasses that extend TimedStack.

  def pop(timeout = 0.5, options = {})
    options, timeout = timeout, 0.5 if Hash === timeout
    timeout = options.fetch :timeout, timeout

    deadline = current_time + timeout
    @mutex.synchronize do
      loop do
        raise Bundler::ConnectionPool::PoolShuttingDownError if @shutdown_block
        return fetch_connection(options) if connection_stored?(options)

        connection = try_create(options)
        return connection if connection

        to_wait = deadline - current_time
        raise Bundler::ConnectionPool::TimeoutError, "Waited #{timeout} sec" if to_wait <= 0
        @resource.wait(@mutex, to_wait)
      end
    end
  end

  ##
  # Shuts down the TimedStack by passing each connection to +block+ and then
  # removing it from the pool. Attempting to checkout a connection after
  # shutdown will raise +Bundler::ConnectionPool::PoolShuttingDownError+ unless
  # +:reload+ is +true+.

  def shutdown(reload: false, &block)
    raise ArgumentError, "shutdown must receive a block" unless block_given?

    @mutex.synchronize do
      @shutdown_block = block
      @resource.broadcast

      shutdown_connections
      @shutdown_block = nil if reload
    end
  end

  ##
  # Returns +true+ if there are no available connections.

  def empty?
    (@created - @que.length) >= @max
  end

  ##
  # The number of connections available on the stack.

  def length
    @max - @created + @que.length
  end

  private

  def current_time
    Process.clock_gettime(Process::CLOCK_MONOTONIC)
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must returns true if a connection is available on the stack.

  def connection_stored?(options = nil)
    !@que.empty?
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must return a connection from the stack.

  def fetch_connection(options = nil)
    @que.pop
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must shut down all connections on the stack.

  def shutdown_connections(options = nil)
    while connection_stored?(options)
      conn = fetch_connection(options)
      @shutdown_block.call(conn)
    end
    @created = 0
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must return +obj+ to the stack.

  def store_connection(obj, options = nil)
    @que.push obj
  end

  ##
  # This is an extension point for TimedStack and is called with a mutex.
  #
  # This method must create a connection if and only if the total number of
  # connections allowed has not been met.

  def try_create(options = nil)
    unless @created == @max
      object = @create_block.call
      @created += 1
      object
    end
  end
end
PK*"#[�c��
�
5gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri.rbnu�[���# frozen_string_literal: false
# Bundler::URI is a module providing classes to handle Uniform Resource Identifiers
# (RFC2396[http://tools.ietf.org/html/rfc2396]).
#
# == Features
#
# * Uniform way of handling URIs.
# * Flexibility to introduce custom Bundler::URI schemes.
# * Flexibility to have an alternate Bundler::URI::Parser (or just different patterns
#   and regexp's).
#
# == Basic example
#
#   require 'bundler/vendor/uri/lib/uri'
#
#   uri = Bundler::URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
#   #=> #<Bundler::URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
#
#   uri.scheme    #=> "http"
#   uri.host      #=> "foo.com"
#   uri.path      #=> "/posts"
#   uri.query     #=> "id=30&limit=5"
#   uri.fragment  #=> "time=1305298413"
#
#   uri.to_s      #=> "http://foo.com/posts?id=30&limit=5#time=1305298413"
#
# == Adding custom URIs
#
#   module Bundler::URI
#     class RSYNC < Generic
#       DEFAULT_PORT = 873
#     end
#     @@schemes['RSYNC'] = RSYNC
#   end
#   #=> Bundler::URI::RSYNC
#
#   Bundler::URI.scheme_list
#   #=> {"FILE"=>Bundler::URI::File, "FTP"=>Bundler::URI::FTP, "HTTP"=>Bundler::URI::HTTP,
#   #    "HTTPS"=>Bundler::URI::HTTPS, "LDAP"=>Bundler::URI::LDAP, "LDAPS"=>Bundler::URI::LDAPS,
#   #    "MAILTO"=>Bundler::URI::MailTo, "RSYNC"=>Bundler::URI::RSYNC}
#
#   uri = Bundler::URI("rsync://rsync.foo.com")
#   #=> #<Bundler::URI::RSYNC rsync://rsync.foo.com>
#
# == RFC References
#
# A good place to view an RFC spec is http://www.ietf.org/rfc.html.
#
# Here is a list of all related RFC's:
# - RFC822[http://tools.ietf.org/html/rfc822]
# - RFC1738[http://tools.ietf.org/html/rfc1738]
# - RFC2255[http://tools.ietf.org/html/rfc2255]
# - RFC2368[http://tools.ietf.org/html/rfc2368]
# - RFC2373[http://tools.ietf.org/html/rfc2373]
# - RFC2396[http://tools.ietf.org/html/rfc2396]
# - RFC2732[http://tools.ietf.org/html/rfc2732]
# - RFC3986[http://tools.ietf.org/html/rfc3986]
#
# == Class tree
#
# - Bundler::URI::Generic (in uri/generic.rb)
#   - Bundler::URI::File - (in uri/file.rb)
#   - Bundler::URI::FTP - (in uri/ftp.rb)
#   - Bundler::URI::HTTP - (in uri/http.rb)
#     - Bundler::URI::HTTPS - (in uri/https.rb)
#   - Bundler::URI::LDAP - (in uri/ldap.rb)
#     - Bundler::URI::LDAPS - (in uri/ldaps.rb)
#   - Bundler::URI::MailTo - (in uri/mailto.rb)
# - Bundler::URI::Parser - (in uri/common.rb)
# - Bundler::URI::REGEXP - (in uri/common.rb)
#   - Bundler::URI::REGEXP::PATTERN - (in uri/common.rb)
# - Bundler::URI::Util - (in uri/common.rb)
# - Bundler::URI::Escape - (in uri/common.rb)
# - Bundler::URI::Error - (in uri/common.rb)
#   - Bundler::URI::InvalidURIError - (in uri/common.rb)
#   - Bundler::URI::InvalidComponentError - (in uri/common.rb)
#   - Bundler::URI::BadURIError - (in uri/common.rb)
#
# == Copyright Info
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# Documentation::
#   Akira Yamada <akira@ruby-lang.org>
#   Dmitry V. Sabanin <sdmitry@lrn.ru>
#   Vincent Batts <vbatts@hashbangbash.com>
# License::
#  Copyright (c) 2001 akira yamada <akira@ruby-lang.org>
#  You can redistribute it and/or modify it under the same term as Ruby.
#

module Bundler::URI
end

require_relative 'uri/version'
require_relative 'uri/common'
require_relative 'uri/generic'
require_relative 'uri/file'
require_relative 'uri/ftp'
require_relative 'uri/http'
require_relative 'uri/https'
require_relative 'uri/ldap'
require_relative 'uri/ldaps'
require_relative 'uri/mailto'
PK*"#[�M/���=gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/version.rbnu�[���module Bundler::URI
  # :stopdoc:
  VERSION_CODE = '001001'.freeze
  VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
  # :startdoc:
end
PK*"#[c`7MM;gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/https.rbnu�[���# frozen_string_literal: false
# = uri/https.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'http'

module Bundler::URI

  # The default port for HTTPS URIs is 443, and the scheme is 'https:' rather
  # than 'http:'. Other than that, HTTPS URIs are identical to HTTP URIs;
  # see Bundler::URI::HTTP.
  class HTTPS < HTTP
    # A Default port of 443 for Bundler::URI::HTTPS
    DEFAULT_PORT = 443
  end
  @@schemes['HTTPS'] = HTTPS
end
PK*"#[墣.E.EDgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rbnu�[���# frozen_string_literal: false
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

module Bundler::URI
  #
  # Includes Bundler::URI::REGEXP::PATTERN
  #
  module RFC2396_REGEXP
    #
    # Patterns used to parse Bundler::URI's
    #
    module PATTERN
      # :stopdoc:

      # RFC 2396 (Bundler::URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # alpha         = lowalpha | upalpha
      ALPHA = "a-zA-Z"
      # alphanum      = alpha | digit
      ALNUM = "#{ALPHA}\\d"

      # hex           = digit | "A" | "B" | "C" | "D" | "E" | "F" |
      #                         "a" | "b" | "c" | "d" | "e" | "f"
      HEX     = "a-fA-F\\d"
      # escaped       = "%" hex hex
      ESCAPED = "%[#{HEX}]{2}"
      # mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
      #                 "(" | ")"
      # unreserved    = alphanum | mark
      UNRESERVED = "\\-_.!~*'()#{ALNUM}"
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | ","
      # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
      #                 "$" | "," | "[" | "]" (RFC 2732)
      RESERVED = ";/?:@&=+$,\\[\\]"

      # domainlabel   = alphanum | alphanum *( alphanum | "-" ) alphanum
      DOMLABEL = "(?:[#{ALNUM}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # toplabel      = alpha | alpha *( alphanum | "-" ) alphanum
      TOPLABEL = "(?:[#{ALPHA}](?:[-#{ALNUM}]*[#{ALNUM}])?)"
      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      HOSTNAME = "(?:#{DOMLABEL}\\.)*#{TOPLABEL}\\.?"

      # :startdoc:
    end # PATTERN

    # :startdoc:
  end # REGEXP

  # Class that parses String's into Bundler::URI's.
  #
  # It contains a Hash set of patterns and Regexp's that match and validate.
  #
  class RFC2396_Parser
    include RFC2396_REGEXP

    #
    # == Synopsis
    #
    #   Bundler::URI::Parser.new([opts])
    #
    # == Args
    #
    # The constructor accepts a hash as options for parser.
    # Keys of options are pattern names of Bundler::URI components
    # and values of options are pattern strings.
    # The constructor generates set of regexps for parsing URIs.
    #
    # You can use the following keys:
    #
    #   * :ESCAPED (Bundler::URI::PATTERN::ESCAPED in default)
    #   * :UNRESERVED (Bundler::URI::PATTERN::UNRESERVED in default)
    #   * :DOMLABEL (Bundler::URI::PATTERN::DOMLABEL in default)
    #   * :TOPLABEL (Bundler::URI::PATTERN::TOPLABEL in default)
    #   * :HOSTNAME (Bundler::URI::PATTERN::HOSTNAME in default)
    #
    # == Examples
    #
    #   p = Bundler::URI::Parser.new(:ESCAPED => "(?:%[a-fA-F0-9]{2}|%u[a-fA-F0-9]{4})")
    #   u = p.parse("http://example.jp/%uABCD") #=> #<Bundler::URI::HTTP http://example.jp/%uABCD>
    #   Bundler::URI.parse(u.to_s) #=> raises Bundler::URI::InvalidURIError
    #
    #   s = "http://example.com/ABCD"
    #   u1 = p.parse(s) #=> #<Bundler::URI::HTTP http://example.com/ABCD>
    #   u2 = Bundler::URI.parse(s) #=> #<Bundler::URI::HTTP http://example.com/ABCD>
    #   u1 == u2 #=> true
    #   u1.eql?(u2) #=> false
    #
    def initialize(opts = {})
      @pattern = initialize_pattern(opts)
      @pattern.each_value(&:freeze)
      @pattern.freeze

      @regexp = initialize_regexp(@pattern)
      @regexp.each_value(&:freeze)
      @regexp.freeze
    end

    # The Hash of patterns.
    #
    # See also Bundler::URI::Parser.initialize_pattern.
    attr_reader :pattern

    # The Hash of Regexp.
    #
    # See also Bundler::URI::Parser.initialize_regexp.
    attr_reader :regexp

    # Returns a split Bundler::URI against regexp[:ABS_URI].
    def split(uri)
      case uri
      when ''
        # null uri

      when @regexp[:ABS_URI]
        scheme, opaque, userinfo, host, port,
          registry, path, query, fragment = $~[1..-1]

        # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # absoluteURI   = scheme ":" ( hier_part | opaque_part )
        # hier_part     = ( net_path | abs_path ) [ "?" query ]
        # opaque_part   = uric_no_slash *uric

        # abs_path      = "/"  path_segments
        # net_path      = "//" authority [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

        if !scheme
          raise InvalidURIError,
            "bad Bundler::URI(absolute but no scheme): #{uri}"
        end
        if !opaque && (!path && (!host && !registry))
          raise InvalidURIError,
            "bad Bundler::URI(absolute but no path): #{uri}"
        end

      when @regexp[:REL_URI]
        scheme = nil
        opaque = nil

        userinfo, host, port, registry,
          rel_segment, abs_path, query, fragment = $~[1..-1]
        if rel_segment && abs_path
          path = rel_segment + abs_path
        elsif rel_segment
          path = rel_segment
        elsif abs_path
          path = abs_path
        end

        # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]

        # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]

        # net_path      = "//" authority [ abs_path ]
        # abs_path      = "/"  path_segments
        # rel_path      = rel_segment [ abs_path ]

        # authority     = server | reg_name
        # server        = [ [ userinfo "@" ] hostport ]

      else
        raise InvalidURIError, "bad Bundler::URI(is not Bundler::URI?): #{uri}"
      end

      path = '' if !path && !opaque # (see RFC2396 Section 5.2)
      ret = [
        scheme,
        userinfo, host, port,         # X
        registry,                     # X
        path,                         # Y
        opaque,                       # Y
        query,
        fragment
      ]
      return ret
    end

    #
    # == Args
    #
    # +uri+::
    #    String
    #
    # == Description
    #
    # Parses +uri+ and constructs either matching Bundler::URI scheme object
    # (File, FTP, HTTP, HTTPS, LDAP, LDAPS, or MailTo) or Bundler::URI::Generic.
    #
    # == Usage
    #
    #   p = Bundler::URI::Parser.new
    #   p.parse("ldap://ldap.example.com/dc=example?user=john")
    #   #=> #<Bundler::URI::LDAP ldap://ldap.example.com/dc=example?user=john>
    #
    def parse(uri)
      Bundler::URI.for(*self.split(uri), self)
    end

    #
    # == Args
    #
    # +uris+::
    #    an Array of Strings
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    #
    def join(*uris)
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    #
    # :call-seq:
    #   extract( str )
    #   extract( str, schemes )
    #   extract( str, schemes ) {|item| block }
    #
    # == Args
    #
    # +str+::
    #    String to search
    # +schemes+::
    #    Patterns to apply to +str+
    #
    # == Description
    #
    # Attempts to parse and merge a set of URIs.
    # If no +block+ given, then returns the result,
    # else it calls +block+ for each element in result.
    #
    # See also Bundler::URI::Parser.make_regexp.
    #
    def extract(str, schemes = nil)
      if block_given?
        str.scan(make_regexp(schemes)) { yield $& }
        nil
      else
        result = []
        str.scan(make_regexp(schemes)) { result.push $& }
        result
      end
    end

    # Returns Regexp that is default self.regexp[:ABS_URI_REF],
    # unless +schemes+ is provided. Then it is a Regexp.union with self.pattern[:X_ABS_URI].
    def make_regexp(schemes = nil)
      unless schemes
        @regexp[:ABS_URI_REF]
      else
        /(?=#{Regexp.union(*schemes)}:)#{@pattern[:X_ABS_URI]}/x
      end
    end

    #
    # :call-seq:
    #   escape( str )
    #   escape( str, unsafe )
    #
    # == Args
    #
    # +str+::
    #    String to make safe
    # +unsafe+::
    #    Regexp to apply. Defaults to self.regexp[:UNSAFE]
    #
    # == Description
    #
    # Constructs a safe String from +str+, removing unsafe characters,
    # replacing them with codes.
    #
    def escape(str, unsafe = @regexp[:UNSAFE])
      unless unsafe.kind_of?(Regexp)
        # perhaps unsafe is String object
        unsafe = Regexp.new("[#{Regexp.quote(unsafe)}]", false)
      end
      str.gsub(unsafe) do
        us = $&
        tmp = ''
        us.each_byte do |uc|
          tmp << sprintf('%%%02X', uc)
        end
        tmp
      end.force_encoding(Encoding::US_ASCII)
    end

    #
    # :call-seq:
    #   unescape( str )
    #   unescape( str, escaped )
    #
    # == Args
    #
    # +str+::
    #    String to remove escapes from
    # +escaped+::
    #    Regexp to apply. Defaults to self.regexp[:ESCAPED]
    #
    # == Description
    #
    # Removes escapes from +str+.
    #
    def unescape(str, escaped = @regexp[:ESCAPED])
      enc = str.encoding
      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
      str.gsub(escaped) { [$&[1, 2]].pack('H2').force_encoding(enc) }
    end

    @@to_s = Kernel.instance_method(:to_s)
    def inspect
      @@to_s.bind_call(self)
    end

    private

    # Constructs the default Hash of patterns.
    def initialize_pattern(opts = {})
      ret = {}
      ret[:ESCAPED] = escaped = (opts.delete(:ESCAPED) || PATTERN::ESCAPED)
      ret[:UNRESERVED] = unreserved = opts.delete(:UNRESERVED) || PATTERN::UNRESERVED
      ret[:RESERVED] = reserved = opts.delete(:RESERVED) || PATTERN::RESERVED
      ret[:DOMLABEL] = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
      ret[:TOPLABEL] = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
      ret[:HOSTNAME] = hostname = opts.delete(:HOSTNAME)

      # RFC 2396 (Bundler::URI Generic Syntax)
      # RFC 2732 (IPv6 Literal Addresses in URL's)
      # RFC 2373 (IPv6 Addressing Architecture)

      # uric          = reserved | unreserved | escaped
      ret[:URIC] = uric = "(?:[#{unreserved}#{reserved}]|#{escaped})"
      # uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" |
      #                 "&" | "=" | "+" | "$" | ","
      ret[:URIC_NO_SLASH] = uric_no_slash = "(?:[#{unreserved};?:@&=+$,]|#{escaped})"
      # query         = *uric
      ret[:QUERY] = query = "#{uric}*"
      # fragment      = *uric
      ret[:FRAGMENT] = fragment = "#{uric}*"

      # hostname      = *( domainlabel "." ) toplabel [ "." ]
      # reg-name      = *( unreserved / pct-encoded / sub-delims ) # RFC3986
      unless hostname
        ret[:HOSTNAME] = hostname = "(?:[a-zA-Z0-9\\-.]|%\\h\\h)+"
      end

      # RFC 2373, APPENDIX B:
      # IPv6address = hexpart [ ":" IPv4address ]
      # IPv4address   = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      # hexpart = hexseq | hexseq "::" [ hexseq ] | "::" [ hexseq ]
      # hexseq  = hex4 *( ":" hex4)
      # hex4    = 1*4HEXDIG
      #
      # XXX: This definition has a flaw. "::" + IPv4address must be
      # allowed too.  Here is a replacement.
      #
      # IPv4address = 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT "." 1*3DIGIT
      ret[:IPV4ADDR] = ipv4addr = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"
      # hex4     = 1*4HEXDIG
      hex4 = "[#{PATTERN::HEX}]{1,4}"
      # lastpart = hex4 | IPv4address
      lastpart = "(?:#{hex4}|#{ipv4addr})"
      # hexseq1  = *( hex4 ":" ) hex4
      hexseq1 = "(?:#{hex4}:)*#{hex4}"
      # hexseq2  = *( hex4 ":" ) lastpart
      hexseq2 = "(?:#{hex4}:)*#{lastpart}"
      # IPv6address = hexseq2 | [ hexseq1 ] "::" [ hexseq2 ]
      ret[:IPV6ADDR] = ipv6addr = "(?:#{hexseq2}|(?:#{hexseq1})?::(?:#{hexseq2})?)"

      # IPv6prefix  = ( hexseq1 | [ hexseq1 ] "::" [ hexseq1 ] ) "/" 1*2DIGIT
      # unused

      # ipv6reference = "[" IPv6address "]" (RFC 2732)
      ret[:IPV6REF] = ipv6ref = "\\[#{ipv6addr}\\]"

      # host          = hostname | IPv4address
      # host          = hostname | IPv4address | IPv6reference (RFC 2732)
      ret[:HOST] = host = "(?:#{hostname}|#{ipv4addr}|#{ipv6ref})"
      # port          = *digit
      ret[:PORT] = port = '\d*'
      # hostport      = host [ ":" port ]
      ret[:HOSTPORT] = hostport = "#{host}(?::#{port})?"

      # userinfo      = *( unreserved | escaped |
      #                    ";" | ":" | "&" | "=" | "+" | "$" | "," )
      ret[:USERINFO] = userinfo = "(?:[#{unreserved};:&=+$,]|#{escaped})*"

      # pchar         = unreserved | escaped |
      #                 ":" | "@" | "&" | "=" | "+" | "$" | ","
      pchar = "(?:[#{unreserved}:@&=+$,]|#{escaped})"
      # param         = *pchar
      param = "#{pchar}*"
      # segment       = *pchar *( ";" param )
      segment = "#{pchar}*(?:;#{param})*"
      # path_segments = segment *( "/" segment )
      ret[:PATH_SEGMENTS] = path_segments = "#{segment}(?:/#{segment})*"

      # server        = [ [ userinfo "@" ] hostport ]
      server = "(?:#{userinfo}@)?#{hostport}"
      # reg_name      = 1*( unreserved | escaped | "$" | "," |
      #                     ";" | ":" | "@" | "&" | "=" | "+" )
      ret[:REG_NAME] = reg_name = "(?:[#{unreserved}$,;:@&=+]|#{escaped})+"
      # authority     = server | reg_name
      authority = "(?:#{server}|#{reg_name})"

      # rel_segment   = 1*( unreserved | escaped |
      #                     ";" | "@" | "&" | "=" | "+" | "$" | "," )
      ret[:REL_SEGMENT] = rel_segment = "(?:[#{unreserved};@&=+$,]|#{escaped})+"

      # scheme        = alpha *( alpha | digit | "+" | "-" | "." )
      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][\\-+.#{PATTERN::ALPHA}\\d]*"

      # abs_path      = "/"  path_segments
      ret[:ABS_PATH] = abs_path = "/#{path_segments}"
      # rel_path      = rel_segment [ abs_path ]
      ret[:REL_PATH] = rel_path = "#{rel_segment}(?:#{abs_path})?"
      # net_path      = "//" authority [ abs_path ]
      ret[:NET_PATH] = net_path = "//#{authority}(?:#{abs_path})?"

      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      ret[:HIER_PART] = hier_part = "(?:#{net_path}|#{abs_path})(?:\\?(?:#{query}))?"
      # opaque_part   = uric_no_slash *uric
      ret[:OPAQUE_PART] = opaque_part = "#{uric_no_slash}#{uric}*"

      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      ret[:ABS_URI] = abs_uri = "#{scheme}:(?:#{hier_part}|#{opaque_part})"
      # relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
      ret[:REL_URI] = rel_uri = "(?:#{net_path}|#{abs_path}|#{rel_path})(?:\\?#{query})?"

      # Bundler::URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
      ret[:URI_REF] = "(?:#{abs_uri}|#{rel_uri})?(?:##{fragment})?"

      ret[:X_ABS_URI] = "
        (#{scheme}):                           (?# 1: scheme)
        (?:
           (#{opaque_part})                    (?# 2: opaque)
        |
           (?:(?:
             //(?:
                 (?:(?:(#{userinfo})@)?        (?# 3: userinfo)
                   (?:(#{host})(?::(\\d*))?))? (?# 4: host, 5: port)
               |
                 (#{reg_name})                 (?# 6: registry)
               )
             |
             (?!//))                           (?# XXX: '//' is the mark for hostport)
             (#{abs_path})?                    (?# 7: path)
           )(?:\\?(#{query}))?                 (?# 8: query)
        )
        (?:\\#(#{fragment}))?                  (?# 9: fragment)
      "

      ret[:X_REL_URI] = "
        (?:
          (?:
            //
            (?:
              (?:(#{userinfo})@)?       (?# 1: userinfo)
                (#{host})?(?::(\\d*))?  (?# 2: host, 3: port)
            |
              (#{reg_name})             (?# 4: registry)
            )
          )
        |
          (#{rel_segment})              (?# 5: rel_segment)
        )?
        (#{abs_path})?                  (?# 6: abs_path)
        (?:\\?(#{query}))?              (?# 7: query)
        (?:\\#(#{fragment}))?           (?# 8: fragment)
      "

      ret
    end

    # Constructs the default Hash of Regexp's.
    def initialize_regexp(pattern)
      ret = {}

      # for Bundler::URI::split
      ret[:ABS_URI] = Regexp.new('\A\s*' + pattern[:X_ABS_URI] + '\s*\z', Regexp::EXTENDED)
      ret[:REL_URI] = Regexp.new('\A\s*' + pattern[:X_REL_URI] + '\s*\z', Regexp::EXTENDED)

      # for Bundler::URI::extract
      ret[:URI_REF]     = Regexp.new(pattern[:URI_REF])
      ret[:ABS_URI_REF] = Regexp.new(pattern[:X_ABS_URI], Regexp::EXTENDED)
      ret[:REL_URI_REF] = Regexp.new(pattern[:X_REL_URI], Regexp::EXTENDED)

      # for Bundler::URI::escape/unescape
      ret[:ESCAPED] = Regexp.new(pattern[:ESCAPED])
      ret[:UNSAFE]  = Regexp.new("[^#{pattern[:UNRESERVED]}#{pattern[:RESERVED]}]")

      # for Generic#initialize
      ret[:SCHEME]   = Regexp.new("\\A#{pattern[:SCHEME]}\\z")
      ret[:USERINFO] = Regexp.new("\\A#{pattern[:USERINFO]}\\z")
      ret[:HOST]     = Regexp.new("\\A#{pattern[:HOST]}\\z")
      ret[:PORT]     = Regexp.new("\\A#{pattern[:PORT]}\\z")
      ret[:OPAQUE]   = Regexp.new("\\A#{pattern[:OPAQUE_PART]}\\z")
      ret[:REGISTRY] = Regexp.new("\\A#{pattern[:REG_NAME]}\\z")
      ret[:ABS_PATH] = Regexp.new("\\A#{pattern[:ABS_PATH]}\\z")
      ret[:REL_PATH] = Regexp.new("\\A#{pattern[:REL_PATH]}\\z")
      ret[:QUERY]    = Regexp.new("\\A#{pattern[:QUERY]}\\z")
      ret[:FRAGMENT] = Regexp.new("\\A#{pattern[:FRAGMENT]}\\z")

      ret
    end

    def convert_to_uri(uri)
      if uri.is_a?(Bundler::URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected Bundler::URI object or Bundler::URI string)"
      end
    end

  end # class Parser
end # module Bundler::URI
PK*"#[��I;gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ldaps.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'ldap'

module Bundler::URI

  # The default port for LDAPS URIs is 636, and the scheme is 'ldaps:' rather
  # than 'ldap:'. Other than that, LDAPS URIs are identical to LDAP URIs;
  # see Bundler::URI::LDAP.
  class LDAPS < LDAP
    # A Default port of 636 for Bundler::URI::LDAPS
    DEFAULT_PORT = 636
  end
  @@schemes['LDAPS'] = LDAPS
end
PK*"#[q��lrrDgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rbnu�[���# frozen_string_literal: false
module Bundler::URI
  class RFC3986_Parser # :nodoc:
    # Bundler::URI defined in RFC3986
    # this regexp is modified not to host is not empty string
    RFC3986_URI = /\A(?<Bundler::URI>(?<scheme>[A-Za-z][+\-.0-9A-Za-z]*):(?<hier-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*)@)?(?<host>(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h+\.[!$&-.0-;=A-Z_a-z~]+))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])+))?(?::(?<port>\d*))?)(?<path-abempty>(?:\/(?<segment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*))*)|(?<path-absolute>\/(?:(?<segment-nz>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])+)(?:\/\g<segment>)*)?)|(?<path-rootless>\g<segment-nz>(?:\/\g<segment>)*)|(?<path-empty>))(?:\?(?<query>[^#]*))?(?:\#(?<fragment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*))?)\z/
    RFC3986_relative_ref = /\A(?<relative-ref>(?<relative-part>\/\/(?<authority>(?:(?<userinfo>(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*)@)?(?<host>(?<IP-literal>\[(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{1,4}?::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:){,1}\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h+\.[!$&-.0-;=A-Z_a-z~]+)\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])+))?(?::(?<port>\d*))?)(?<path-abempty>(?:\/(?<segment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*))*)|(?<path-absolute>\/(?:(?<segment-nz>(?:%\h\h|[!$&-.0-;=@-Z_a-z~])+)(?:\/\g<segment>)*)?)|(?<path-noscheme>(?<segment-nz-nc>(?:%\h\h|[!$&-.0-9;=@-Z_a-z~])+)(?:\/\g<segment>)*)|(?<path-empty>))(?:\?(?<query>[^#]*))?(?:\#(?<fragment>(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*))?)\z/
    attr_reader :regexp

    def initialize
      @regexp = default_regexp.each_value(&:freeze).freeze
    end

    def split(uri) #:nodoc:
      begin
        uri = uri.to_str
      rescue NoMethodError
        raise InvalidURIError, "bad Bundler::URI(is not Bundler::URI?): #{uri.inspect}"
      end
      uri.ascii_only? or
        raise InvalidURIError, "Bundler::URI must be ascii only #{uri.dump}"
      if m = RFC3986_URI.match(uri)
        query = m["query".freeze]
        scheme = m["scheme".freeze]
        opaque = m["path-rootless".freeze]
        if opaque
          opaque << "?#{query}" if query
          [ scheme,
            nil, # userinfo
            nil, # host
            nil, # port
            nil, # registry
            nil, # path
            opaque,
            nil, # query
            m["fragment".freeze]
          ]
        else # normal
          [ scheme,
            m["userinfo".freeze],
            m["host".freeze],
            m["port".freeze],
            nil, # registry
            (m["path-abempty".freeze] ||
             m["path-absolute".freeze] ||
             m["path-empty".freeze]),
            nil, # opaque
            query,
            m["fragment".freeze]
          ]
        end
      elsif m = RFC3986_relative_ref.match(uri)
        [ nil, # scheme
          m["userinfo".freeze],
          m["host".freeze],
          m["port".freeze],
          nil, # registry,
          (m["path-abempty".freeze] ||
           m["path-absolute".freeze] ||
           m["path-noscheme".freeze] ||
           m["path-empty".freeze]),
          nil, # opaque
          m["query".freeze],
          m["fragment".freeze]
        ]
      else
        raise InvalidURIError, "bad Bundler::URI(is not Bundler::URI?): #{uri.inspect}"
      end
    end

    def parse(uri) # :nodoc:
      Bundler::URI.for(*self.split(uri), self)
    end


    def join(*uris) # :nodoc:
      uris[0] = convert_to_uri(uris[0])
      uris.inject :merge
    end

    @@to_s = Kernel.instance_method(:to_s)
    def inspect
      @@to_s.bind_call(self)
    end

    private

    def default_regexp # :nodoc:
      {
        SCHEME: /\A[A-Za-z][A-Za-z0-9+\-.]*\z/,
        USERINFO: /\A(?:%\h\h|[!$&-.0-;=A-Z_a-z~])*\z/,
        HOST: /\A(?:(?<IP-literal>\[(?:(?<IPv6address>(?:\h{1,4}:){6}(?<ls32>\h{1,4}:\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]|\d)\.\g<dec-octet>\.\g<dec-octet>\.\g<dec-octet>))|::(?:\h{1,4}:){5}\g<ls32>|\h{,4}::(?:\h{1,4}:){4}\g<ls32>|(?:(?:\h{1,4}:)?\h{1,4})?::(?:\h{1,4}:){3}\g<ls32>|(?:(?:\h{1,4}:){,2}\h{1,4})?::(?:\h{1,4}:){2}\g<ls32>|(?:(?:\h{1,4}:){,3}\h{1,4})?::\h{1,4}:\g<ls32>|(?:(?:\h{1,4}:){,4}\h{1,4})?::\g<ls32>|(?:(?:\h{1,4}:){,5}\h{1,4})?::\h{1,4}|(?:(?:\h{1,4}:){,6}\h{1,4})?::)|(?<IPvFuture>v\h+\.[!$&-.0-;=A-Z_a-z~]+))\])|\g<IPv4address>|(?<reg-name>(?:%\h\h|[!$&-.0-9;=A-Z_a-z~])*))\z/,
        ABS_PATH: /\A\/(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*(?:\/(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*)*\z/,
        REL_PATH: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])+(?:\/(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*)*\z/,
        QUERY: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
        FRAGMENT: /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~\/?])*\z/,
        OPAQUE: /\A(?:[^\/].*)?\z/,
        PORT: /\A[\x09\x0a\x0c\x0d ]*\d*[\x09\x0a\x0c\x0d ]*\z/,
      }
    end

    def convert_to_uri(uri)
      if uri.is_a?(Bundler::URI::Generic)
        uri
      elsif uri = String.try_convert(uri)
        parse(uri)
      else
        raise ArgumentError,
          "bad argument (expected Bundler::URI object or Bundler::URI string)"
      end
    end

  end # class Parser
end # module Bundler::URI
PK*"#[�"%i  <gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/mailto.rbnu�[���# frozen_string_literal: false
# = uri/mailto.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # RFC6068, the mailto URL scheme.
  #
  class MailTo < Generic
    include REGEXP

    # A Default port of nil for Bundler::URI::MailTo.
    DEFAULT_PORT = nil

    # An Array of the available components for Bundler::URI::MailTo.
    COMPONENT = [ :scheme, :to, :headers ].freeze

    # :stopdoc:
    #  "hname" and "hvalue" are encodings of an RFC 822 header name and
    #  value, respectively. As with "to", all URL reserved characters must
    #  be encoded.
    #
    #  "#mailbox" is as specified in RFC 822 [RFC822]. This means that it
    #  consists of zero or more comma-separated mail addresses, possibly
    #  including "phrase" and "comment" components. Note that all URL
    #  reserved characters in "to" must be encoded: in particular,
    #  parentheses, commas, and the percent sign ("%"), which commonly occur
    #  in the "mailbox" syntax.
    #
    #  Within mailto URLs, the characters "?", "=", "&" are reserved.

    # ; RFC 6068
    # hfields      = "?" hfield *( "&" hfield )
    # hfield       = hfname "=" hfvalue
    # hfname       = *qchar
    # hfvalue      = *qchar
    # qchar        = unreserved / pct-encoded / some-delims
    # some-delims  = "!" / "$" / "'" / "(" / ")" / "*"
    #              / "+" / "," / ";" / ":" / "@"
    #
    # ; RFC3986
    # unreserved   = ALPHA / DIGIT / "-" / "." / "_" / "~"
    # pct-encoded  = "%" HEXDIG HEXDIG
    HEADER_REGEXP  = /\A(?<hfield>(?:%\h\h|[!$'-.0-;@-Z_a-z~])*=(?:%\h\h|[!$'-.0-;@-Z_a-z~])*)(?:&\g<hfield>)*\z/
    # practical regexp for email address
    # https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address
    EMAIL_REGEXP = /\A[a-zA-Z0-9.!\#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*\z/
    # :startdoc:

    #
    # == Description
    #
    # Creates a new Bundler::URI::MailTo object from components, with syntax checking.
    #
    # Components can be provided as an Array or Hash. If an Array is used,
    # the components must be supplied as <code>[to, headers]</code>.
    #
    # If a Hash is used, the keys are the component names preceded by colons.
    #
    # The headers can be supplied as a pre-encoded string, such as
    # <code>"subject=subscribe&cc=address"</code>, or as an Array of Arrays
    # like <code>[['subject', 'subscribe'], ['cc', 'address']]</code>.
    #
    # Examples:
    #
    #    require 'bundler/vendor/uri/lib/uri'
    #
    #    m1 = Bundler::URI::MailTo.build(['joe@example.com', 'subject=Ruby'])
    #    m1.to_s  # => "mailto:joe@example.com?subject=Ruby"
    #
    #    m2 = Bundler::URI::MailTo.build(['john@example.com', [['Subject', 'Ruby'], ['Cc', 'jack@example.com']]])
    #    m2.to_s  # => "mailto:john@example.com?Subject=Ruby&Cc=jack@example.com"
    #
    #    m3 = Bundler::URI::MailTo.build({:to => 'listman@example.com', :headers => [['subject', 'subscribe']]})
    #    m3.to_s  # => "mailto:listman@example.com?subject=subscribe"
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)

      case tmp[:to]
      when Array
        tmp[:opaque] = tmp[:to].join(',')
      when String
        tmp[:opaque] = tmp[:to].dup
      else
        tmp[:opaque] = ''
      end

      if tmp[:headers]
        query =
          case tmp[:headers]
          when Array
            tmp[:headers].collect { |x|
              if x.kind_of?(Array)
                x[0] + '=' + x[1..-1].join
              else
                x.to_s
              end
            }.join('&')
          when Hash
            tmp[:headers].collect { |h,v|
              h + '=' + v
            }.join('&')
          else
            tmp[:headers].to_s
          end
        unless query.empty?
          tmp[:opaque] << '?' << query
        end
      end

      super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::MailTo object from generic URL components with
    # no syntax checking.
    #
    # This method is usually called from Bundler::URI::parse, which checks
    # the validity of each component.
    #
    def initialize(*arg)
      super(*arg)

      @to = nil
      @headers = []

      # The RFC3986 parser does not normally populate opaque
      @opaque = "?#{@query}" if @query && !@opaque

      unless @opaque
        raise InvalidComponentError,
          "missing opaque part for mailto URL"
      end
      to, header = @opaque.split('?', 2)
      # allow semicolon as a addr-spec separator
      # http://support.microsoft.com/kb/820868
      unless /\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/ =~ to
        raise InvalidComponentError,
          "unrecognised opaque part for mailtoURL: #{@opaque}"
      end

      if arg[10] # arg_check
        self.to = to
        self.headers = header
      else
        set_to(to)
        set_headers(header)
      end
    end

    # The primary e-mail address of the URL, as a String.
    attr_reader :to

    # E-mail headers set by the URL, as an Array of Arrays.
    attr_reader :headers

    # Checks the to +v+ component.
    def check_to(v)
      return true unless v
      return true if v.size == 0

      v.split(/[,;]/).each do |addr|
        # check url safety as path-rootless
        if /\A(?:%\h\h|[!$&-.0-;=@-Z_a-z~])*\z/ !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as Bundler::URI #{addr.dump}"
        end

        # check addr-spec
        # don't s/\+/ /g
        addr.gsub!(/%\h\h/, Bundler::URI::TBLDECWWWCOMP_)
        if EMAIL_REGEXP !~ addr
          raise InvalidComponentError,
            "an address in 'to' is invalid as uri-escaped addr-spec #{addr.dump}"
        end
      end

      true
    end
    private :check_to

    # Private setter for to +v+.
    def set_to(v)
      @to = v
    end
    protected :set_to

    # Setter for to +v+.
    def to=(v)
      check_to(v)
      set_to(v)
      v
    end

    # Checks the headers +v+ component against either
    # * HEADER_REGEXP
    def check_headers(v)
      return true unless v
      return true if v.size == 0
      if HEADER_REGEXP !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      true
    end
    private :check_headers

    # Private setter for headers +v+.
    def set_headers(v)
      @headers = []
      if v
        v.split('&').each do |x|
          @headers << x.split(/=/, 2)
        end
      end
    end
    protected :set_headers

    # Setter for headers +v+.
    def headers=(v)
      check_headers(v)
      set_headers(v)
      v
    end

    # Constructs String from Bundler::URI.
    def to_s
      @scheme + ':' +
        if @to
          @to
        else
          ''
        end +
        if @headers.size > 0
          '?' + @headers.collect{|x| x.join('=')}.join('&')
        else
          ''
        end +
        if @fragment
          '#' + @fragment
        else
          ''
        end
    end

    # Returns the RFC822 e-mail text equivalent of the URL, as a String.
    #
    # Example:
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("mailto:ruby-list@ruby-lang.org?Subject=subscribe&cc=myaddr")
    #   uri.to_mailtext
    #   # => "To: ruby-list@ruby-lang.org\nSubject: subscribe\nCc: myaddr\n\n\n"
    #
    def to_mailtext
      to = Bundler::URI.decode_www_form_component(@to)
      head = ''
      body = ''
      @headers.each do |x|
        case x[0]
        when 'body'
          body = Bundler::URI.decode_www_form_component(x[1])
        when 'to'
          to << ', ' + Bundler::URI.decode_www_form_component(x[1])
        else
          head << Bundler::URI.decode_www_form_component(x[0]).capitalize + ': ' +
            Bundler::URI.decode_www_form_component(x[1])  + "\n"
        end
      end

      "To: #{to}
#{head}
#{body}
"
    end
    alias to_rfc822text to_mailtext
  end

  @@schemes['MAILTO'] = MailTo
end
PK*"#[��qv�	�	:gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/http.rbnu�[���# frozen_string_literal: false
# = uri/http.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # The syntax of HTTP URIs is defined in RFC1738 section 3.3.
  #
  # Note that the Ruby Bundler::URI library allows HTTP URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class HTTP < Generic
    # A Default port of 80 for Bundler::URI::HTTP.
    DEFAULT_PORT = 80

    # An Array of the available components for Bundler::URI::HTTP.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
      fragment
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::HTTP object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, query, and
    # fragment.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query, fragment]</code>.
    #
    # Example:
    #
    #     uri = Bundler::URI::HTTP.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = Bundler::URI::HTTP.build([nil, "www.example.com", nil, "/path",
    #       "query", 'fragment'])
    #
    # Currently, if passed userinfo components this method generates
    # invalid HTTP URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for an HTTP request, as required by Net::HTTP::Get.
    #
    # If the Bundler::URI contains a query, the full path is Bundler::URI#path + '?' + Bundler::URI#query.
    # Otherwise, the path is simply Bundler::URI#path.
    #
    # Example:
    #
    #     uri = Bundler::URI::HTTP.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end
  end

  @@schemes['HTTP'] = HTTP

end
PK*"#[�i/9gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ftp.rbnu�[���# frozen_string_literal: false
# = uri/ftp.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # FTP Bundler::URI syntax is defined by RFC1738 section 3.2.
  #
  # This class will be redesigned because of difference of implementations;
  # the structure of its path. draft-hoffman-ftp-uri-04 is a draft but it
  # is a good summary about the de facto spec.
  # http://tools.ietf.org/html/draft-hoffman-ftp-uri-04
  #
  class FTP < Generic
    # A Default port of 21 for Bundler::URI::FTP.
    DEFAULT_PORT = 21

    #
    # An Array of the available components for Bundler::URI::FTP.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port,
      :path, :typecode
    ].freeze

    #
    # Typecode is "a", "i", or "d".
    #
    # * "a" indicates a text file (the FTP command was ASCII)
    # * "i" indicates a binary file (FTP command IMAGE)
    # * "d" indicates the contents of a directory should be displayed
    #
    TYPECODE = ['a', 'i', 'd'].freeze

    # Typecode prefix ";type=".
    TYPECODE_PREFIX = ';type='.freeze

    def self.new2(user, password, host, port, path,
                  typecode = nil, arg_check = true) # :nodoc:
      # Do not use this method!  Not tested.  [Bug #7301]
      # This methods remains just for compatibility,
      # Keep it undocumented until the active maintainer is assigned.
      typecode = nil if typecode.size == 0
      if typecode && !TYPECODE.include?(typecode)
        raise ArgumentError,
          "bad typecode is specified: #{typecode}"
      end

      # do escape

      self.new('ftp',
               [user, password],
               host, port, nil,
               typecode ? path + TYPECODE_PREFIX + typecode : path,
               nil, nil, nil, arg_check)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::FTP object from components, with syntax checking.
    #
    # The components accepted are +userinfo+, +host+, +port+, +path+, and
    # +typecode+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, typecode]</code>.
    #
    # If the path supplied is absolute, it will be escaped in order to
    # make it absolute in the Bundler::URI.
    #
    # Examples:
    #
    #     require 'bundler/vendor/uri/lib/uri'
    #
    #     uri1 = Bundler::URI::FTP.build(['user:password', 'ftp.example.com', nil,
    #       '/path/file.zip', 'i'])
    #     uri1.to_s  # => "ftp://user:password@ftp.example.com/%2Fpath/file.zip;type=i"
    #
    #     uri2 = Bundler::URI::FTP.build({:host => 'ftp.example.com',
    #       :path => 'ruby/src'})
    #     uri2.to_s  # => "ftp://ftp.example.com/ruby/src"
    #
    def self.build(args)

      # Fix the incoming path to be generic URL syntax
      # FTP path  ->  URL path
      # foo/bar       /foo/bar
      # /foo/bar      /%2Ffoo/bar
      #
      if args.kind_of?(Array)
        args[3] = '/' + args[3].sub(/^\//, '%2F')
      else
        args[:path] = '/' + args[:path].sub(/^\//, '%2F')
      end

      tmp = Util::make_components_hash(self, args)

      if tmp[:typecode]
        if tmp[:typecode].size == 1
          tmp[:typecode] = TYPECODE_PREFIX + tmp[:typecode]
        end
        tmp[:path] << tmp[:typecode]
      end

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::FTP object from generic URL components with no
    # syntax checking.
    #
    # Unlike build(), this method does not escape the path component as
    # required by RFC1738; instead it is treated as per RFC2396.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = nil,
                   arg_check = false)
      raise InvalidURIError unless path
      path = path.sub(/^\//,'')
      path.sub!(/^%2F/,'/')
      super(scheme, userinfo, host, port, registry, path, opaque,
            query, fragment, parser, arg_check)
      @typecode = nil
      if tmp = @path.index(TYPECODE_PREFIX)
        typecode = @path[tmp + TYPECODE_PREFIX.size..-1]
        @path = @path[0..tmp - 1]

        if arg_check
          self.typecode = typecode
        else
          self.set_typecode(typecode)
        end
      end
    end

    # typecode accessor.
    #
    # See Bundler::URI::FTP::COMPONENT.
    attr_reader :typecode

    # Validates typecode +v+,
    # returns +true+ or +false+.
    #
    def check_typecode(v)
      if TYPECODE.include?(v)
        return true
      else
        raise InvalidComponentError,
          "bad typecode(expected #{TYPECODE.join(', ')}): #{v}"
      end
    end
    private :check_typecode

    # Private setter for the typecode +v+.
    #
    # See also Bundler::URI::FTP.typecode=.
    #
    def set_typecode(v)
      @typecode = v
    end
    protected :set_typecode

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the typecode +v+
    # (with validation).
    #
    # See also Bundler::URI::FTP.check_typecode.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("ftp://john@ftp.example.com/my_file.img")
    #   #=> #<Bundler::URI::FTP ftp://john@ftp.example.com/my_file.img>
    #   uri.typecode = "i"
    #   uri
    #   #=> #<Bundler::URI::FTP ftp://john@ftp.example.com/my_file.img;type=i>
    #
    def typecode=(typecode)
      check_typecode(typecode)
      set_typecode(typecode)
      typecode
    end

    def merge(oth) # :nodoc:
      tmp = super(oth)
      if self != tmp
        tmp.set_typecode(oth.typecode)
      end

      return tmp
    end

    # Returns the path from an FTP Bundler::URI.
    #
    # RFC 1738 specifically states that the path for an FTP Bundler::URI does not
    # include the / which separates the Bundler::URI path from the Bundler::URI host. Example:
    #
    # <code>ftp://ftp.example.com/pub/ruby</code>
    #
    # The above Bundler::URI indicates that the client should connect to
    # ftp.example.com then cd to pub/ruby from the initial login directory.
    #
    # If you want to cd to an absolute directory, you must include an
    # escaped / (%2F) in the path. Example:
    #
    # <code>ftp://ftp.example.com/%2Fpub/ruby</code>
    #
    # This method will then return "/pub/ruby".
    #
    def path
      return @path.sub(/^\//,'').sub(/^%2F/,'/')
    end

    # Private setter for the path of the Bundler::URI::FTP.
    def set_path(v)
      super("/" + v.sub(/^\//, "%2F"))
    end
    protected :set_path

    # Returns a String representation of the Bundler::URI::FTP.
    def to_s
      save_path = nil
      if @typecode
        save_path = @path
        @path = @path + TYPECODE_PREFIX + @typecode
      end
      str = super
      if @typecode
        @path = save_path
      end

      return str
    end
  end
  @@schemes['FTP'] = FTP
end
PK*"#[�6��p	p	8gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ws.rbnu�[���# frozen_string_literal: false
# = uri/ws.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # The syntax of WS URIs is defined in RFC6455 section 3.
  #
  # Note that the Ruby Bundler::URI library allows WS URLs containing usernames and
  # passwords. This is not legal as per the RFC, but used to be
  # supported in Internet Explorer 5 and 6, before the MS04-004 security
  # update. See <URL:http://support.microsoft.com/kb/834489>.
  #
  class WS < Generic
    # A Default port of 80 for Bundler::URI::WS.
    DEFAULT_PORT = 80

    # An Array of the available components for Bundler::URI::WS.
    COMPONENT = %i[
      scheme
      userinfo host port
      path
      query
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::WS object from components, with syntax checking.
    #
    # The components accepted are userinfo, host, port, path, and query.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[userinfo, host, port, path, query]</code>.
    #
    # Example:
    #
    #     uri = Bundler::URI::WS.build(host: 'www.example.com', path: '/foo/bar')
    #
    #     uri = Bundler::URI::WS.build([nil, "www.example.com", nil, "/path", "query"])
    #
    # Currently, if passed userinfo components this method generates
    # invalid WS URIs as per RFC 1738.
    #
    def self.build(args)
      tmp = Util.make_components_hash(self, args)
      super(tmp)
    end

    #
    # == Description
    #
    # Returns the full path for a WS Bundler::URI, as required by Net::HTTP::Get.
    #
    # If the Bundler::URI contains a query, the full path is Bundler::URI#path + '?' + Bundler::URI#query.
    # Otherwise, the path is simply Bundler::URI#path.
    #
    # Example:
    #
    #     uri = Bundler::URI::WS.build(path: '/foo/bar', query: 'test=true')
    #     uri.request_uri #  => "/foo/bar?test=true"
    #
    def request_uri
      return unless @path

      url = @query ? "#@path?#@query" : @path.dup
      url.start_with?(?/.freeze) ? url : ?/ + url
    end
  end

  @@schemes['WS'] = WS

end
PK*"#[�*?��J�J<gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/common.rbnu�[���# frozen_string_literal: true
#--
# = uri/common.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License::
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative "rfc2396_parser"
require_relative "rfc3986_parser"

module Bundler::URI
  REGEXP = RFC2396_REGEXP
  Parser = RFC2396_Parser
  RFC3986_PARSER = RFC3986_Parser.new

  # Bundler::URI::Parser.new
  DEFAULT_PARSER = Parser.new
  DEFAULT_PARSER.pattern.each_pair do |sym, str|
    unless REGEXP::PATTERN.const_defined?(sym)
      REGEXP::PATTERN.const_set(sym, str)
    end
  end
  DEFAULT_PARSER.regexp.each_pair do |sym, str|
    const_set(sym, str)
  end

  module Util # :nodoc:
    def make_components_hash(klass, array_hash)
      tmp = {}
      if array_hash.kind_of?(Array) &&
          array_hash.size == klass.component.size - 1
        klass.component[1..-1].each_index do |i|
          begin
            tmp[klass.component[i + 1]] = array_hash[i].clone
          rescue TypeError
            tmp[klass.component[i + 1]] = array_hash[i]
          end
        end

      elsif array_hash.kind_of?(Hash)
        array_hash.each do |key, value|
          begin
            tmp[key] = value.clone
          rescue TypeError
            tmp[key] = value
          end
        end
      else
        raise ArgumentError,
          "expected Array of or Hash of components of #{klass} (#{klass.component[1..-1].join(', ')})"
      end
      tmp[:scheme] = klass.to_s.sub(/\A.*::/, '').downcase

      return tmp
    end
    module_function :make_components_hash
  end

  include REGEXP

  @@schemes = {}
  # Returns a Hash of the defined schemes.
  def self.scheme_list
    @@schemes
  end

  #
  # Construct a Bundler::URI instance, using the scheme to detect the appropriate class
  # from +Bundler::URI.scheme_list+.
  #
  def self.for(scheme, *arguments, default: Generic)
    if scheme
      uri_class = @@schemes[scheme.upcase] || default
    else
      uri_class = default
    end

    return uri_class.new(scheme, *arguments)
  end

  #
  # Base class for all Bundler::URI exceptions.
  #
  class Error < StandardError; end
  #
  # Not a Bundler::URI.
  #
  class InvalidURIError < Error; end
  #
  # Not a Bundler::URI component.
  #
  class InvalidComponentError < Error; end
  #
  # Bundler::URI is valid, bad usage is not.
  #
  class BadURIError < Error; end

  #
  # == Synopsis
  #
  #   Bundler::URI::split(uri)
  #
  # == Args
  #
  # +uri+::
  #   String with Bundler::URI.
  #
  # == Description
  #
  # Splits the string on following parts and returns array with result:
  #
  # * Scheme
  # * Userinfo
  # * Host
  # * Port
  # * Registry
  # * Path
  # * Opaque
  # * Query
  # * Fragment
  #
  # == Usage
  #
  #   require 'bundler/vendor/uri/lib/uri'
  #
  #   Bundler::URI.split("http://www.ruby-lang.org/")
  #   # => ["http", nil, "www.ruby-lang.org", nil, nil, "/", nil, nil, nil]
  #
  def self.split(uri)
    RFC3986_PARSER.split(uri)
  end

  #
  # == Synopsis
  #
  #   Bundler::URI::parse(uri_str)
  #
  # == Args
  #
  # +uri_str+::
  #   String with Bundler::URI.
  #
  # == Description
  #
  # Creates one of the Bundler::URI's subclasses instance from the string.
  #
  # == Raises
  #
  # Bundler::URI::InvalidURIError::
  #   Raised if Bundler::URI given is not a correct one.
  #
  # == Usage
  #
  #   require 'bundler/vendor/uri/lib/uri'
  #
  #   uri = Bundler::URI.parse("http://www.ruby-lang.org/")
  #   # => #<Bundler::URI::HTTP http://www.ruby-lang.org/>
  #   uri.scheme
  #   # => "http"
  #   uri.host
  #   # => "www.ruby-lang.org"
  #
  # It's recommended to first ::escape the provided +uri_str+ if there are any
  # invalid Bundler::URI characters.
  #
  def self.parse(uri)
    RFC3986_PARSER.parse(uri)
  end

  #
  # == Synopsis
  #
  #   Bundler::URI::join(str[, str, ...])
  #
  # == Args
  #
  # +str+::
  #   String(s) to work with, will be converted to RFC3986 URIs before merging.
  #
  # == Description
  #
  # Joins URIs.
  #
  # == Usage
  #
  #   require 'bundler/vendor/uri/lib/uri'
  #
  #   Bundler::URI.join("http://example.com/","main.rbx")
  #   # => #<Bundler::URI::HTTP http://example.com/main.rbx>
  #
  #   Bundler::URI.join('http://example.com', 'foo')
  #   # => #<Bundler::URI::HTTP http://example.com/foo>
  #
  #   Bundler::URI.join('http://example.com', '/foo', '/bar')
  #   # => #<Bundler::URI::HTTP http://example.com/bar>
  #
  #   Bundler::URI.join('http://example.com', '/foo', 'bar')
  #   # => #<Bundler::URI::HTTP http://example.com/bar>
  #
  #   Bundler::URI.join('http://example.com', '/foo/', 'bar')
  #   # => #<Bundler::URI::HTTP http://example.com/foo/bar>
  #
  def self.join(*str)
    RFC3986_PARSER.join(*str)
  end

  #
  # == Synopsis
  #
  #   Bundler::URI::extract(str[, schemes][,&blk])
  #
  # == Args
  #
  # +str+::
  #   String to extract URIs from.
  # +schemes+::
  #   Limit Bundler::URI matching to specific schemes.
  #
  # == Description
  #
  # Extracts URIs from a string. If block given, iterates through all matched URIs.
  # Returns nil if block given or array with matches.
  #
  # == Usage
  #
  #   require "bundler/vendor/uri/lib/uri"
  #
  #   Bundler::URI.extract("text here http://foo.example.org/bla and here mailto:test@example.com and here also.")
  #   # => ["http://foo.example.com/bla", "mailto:test@example.com"]
  #
  def self.extract(str, schemes = nil, &block)
    warn "Bundler::URI.extract is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.extract(str, schemes, &block)
  end

  #
  # == Synopsis
  #
  #   Bundler::URI::regexp([match_schemes])
  #
  # == Args
  #
  # +match_schemes+::
  #   Array of schemes. If given, resulting regexp matches to URIs
  #   whose scheme is one of the match_schemes.
  #
  # == Description
  #
  # Returns a Regexp object which matches to Bundler::URI-like strings.
  # The Regexp object returned by this method includes arbitrary
  # number of capture group (parentheses).  Never rely on its number.
  #
  # == Usage
  #
  #   require 'bundler/vendor/uri/lib/uri'
  #
  #   # extract first Bundler::URI from html_string
  #   html_string.slice(Bundler::URI.regexp)
  #
  #   # remove ftp URIs
  #   html_string.sub(Bundler::URI.regexp(['ftp']), '')
  #
  #   # You should not rely on the number of parentheses
  #   html_string.scan(Bundler::URI.regexp) do |*matches|
  #     p $&
  #   end
  #
  def self.regexp(schemes = nil)
    warn "Bundler::URI.regexp is obsolete", uplevel: 1 if $VERBOSE
    DEFAULT_PARSER.make_regexp(schemes)
  end

  TBLENCWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    TBLENCWWWCOMP_[-i.chr] = -('%%%02X' % i)
  end
  TBLENCWWWCOMP_[' '] = '+'
  TBLENCWWWCOMP_.freeze
  TBLDECWWWCOMP_ = {} # :nodoc:
  256.times do |i|
    h, l = i>>4, i&15
    TBLDECWWWCOMP_[-('%%%X%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%X' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%X%x' % [h, l])] = -i.chr
    TBLDECWWWCOMP_[-('%%%x%x' % [h, l])] = -i.chr
  end
  TBLDECWWWCOMP_['+'] = ' '
  TBLDECWWWCOMP_.freeze

  # Encodes given +str+ to URL-encoded form data.
  #
  # This method doesn't convert *, -, ., 0-9, A-Z, _, a-z, but does convert SP
  # (ASCII space) to + and converts others to %XX.
  #
  # If +enc+ is given, convert +str+ to the encoding before percent encoding.
  #
  # This is an implementation of
  # https://www.w3.org/TR/2013/CR-html5-20130806/forms.html#url-encoded-form-data.
  #
  # See Bundler::URI.decode_www_form_component, Bundler::URI.encode_www_form.
  def self.encode_www_form_component(str, enc=nil)
    str = str.to_s.dup
    if str.encoding != Encoding::ASCII_8BIT
      if enc && enc != Encoding::ASCII_8BIT
        str.encode!(Encoding::UTF_8, invalid: :replace, undef: :replace)
        str.encode!(enc, fallback: ->(x){"&##{x.ord};"})
      end
      str.force_encoding(Encoding::ASCII_8BIT)
    end
    str.gsub!(/[^*\-.0-9A-Z_a-z]/, TBLENCWWWCOMP_)
    str.force_encoding(Encoding::US_ASCII)
  end

  # Decodes given +str+ of URL-encoded form data.
  #
  # This decodes + to SP.
  #
  # See Bundler::URI.encode_www_form_component, Bundler::URI.decode_www_form.
  def self.decode_www_form_component(str, enc=Encoding::UTF_8)
    raise ArgumentError, "invalid %-encoding (#{str})" if /%(?!\h\h)/ =~ str
    str.b.gsub(/\+|%\h\h/, TBLDECWWWCOMP_).force_encoding(enc)
  end

  # Generates URL-encoded form data from given +enum+.
  #
  # This generates application/x-www-form-urlencoded data defined in HTML5
  # from given an Enumerable object.
  #
  # This internally uses Bundler::URI.encode_www_form_component(str).
  #
  # This method doesn't convert the encoding of given items, so convert them
  # before calling this method if you want to send data as other than original
  # encoding or mixed encoding data. (Strings which are encoded in an HTML5
  # ASCII incompatible encoding are converted to UTF-8.)
  #
  # This method doesn't handle files.  When you send a file, use
  # multipart/form-data.
  #
  # This refers https://url.spec.whatwg.org/#concept-urlencoded-serializer
  #
  #    Bundler::URI.encode_www_form([["q", "ruby"], ["lang", "en"]])
  #    #=> "q=ruby&lang=en"
  #    Bundler::URI.encode_www_form("q" => "ruby", "lang" => "en")
  #    #=> "q=ruby&lang=en"
  #    Bundler::URI.encode_www_form("q" => ["ruby", "perl"], "lang" => "en")
  #    #=> "q=ruby&q=perl&lang=en"
  #    Bundler::URI.encode_www_form([["q", "ruby"], ["q", "perl"], ["lang", "en"]])
  #    #=> "q=ruby&q=perl&lang=en"
  #
  # See Bundler::URI.encode_www_form_component, Bundler::URI.decode_www_form.
  def self.encode_www_form(enum, enc=nil)
    enum.map do |k,v|
      if v.nil?
        encode_www_form_component(k, enc)
      elsif v.respond_to?(:to_ary)
        v.to_ary.map do |w|
          str = encode_www_form_component(k, enc)
          unless w.nil?
            str << '='
            str << encode_www_form_component(w, enc)
          end
        end.join('&')
      else
        str = encode_www_form_component(k, enc)
        str << '='
        str << encode_www_form_component(v, enc)
      end
    end.join('&')
  end

  # Decodes URL-encoded form data from given +str+.
  #
  # This decodes application/x-www-form-urlencoded data
  # and returns an array of key-value arrays.
  #
  # This refers http://url.spec.whatwg.org/#concept-urlencoded-parser,
  # so this supports only &-separator, and doesn't support ;-separator.
  #
  #    ary = Bundler::URI.decode_www_form("a=1&a=2&b=3")
  #    ary                   #=> [['a', '1'], ['a', '2'], ['b', '3']]
  #    ary.assoc('a').last   #=> '1'
  #    ary.assoc('b').last   #=> '3'
  #    ary.rassoc('a').last  #=> '2'
  #    Hash[ary]             #=> {"a"=>"2", "b"=>"3"}
  #
  # See Bundler::URI.decode_www_form_component, Bundler::URI.encode_www_form.
  def self.decode_www_form(str, enc=Encoding::UTF_8, separator: '&', use__charset_: false, isindex: false)
    raise ArgumentError, "the input of #{self.name}.#{__method__} must be ASCII only string" unless str.ascii_only?
    ary = []
    return ary if str.empty?
    enc = Encoding.find(enc)
    str.b.each_line(separator) do |string|
      string.chomp!(separator)
      key, sep, val = string.partition('=')
      if isindex
        if sep.empty?
          val = key
          key = +''
        end
        isindex = false
      end

      if use__charset_ and key == '_charset_' and e = get_encoding(val)
        enc = e
        use__charset_ = false
      end

      key.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      if val
        val.gsub!(/\+|%\h\h/, TBLDECWWWCOMP_)
      else
        val = +''
      end

      ary << [key, val]
    end
    ary.each do |k, v|
      k.force_encoding(enc)
      k.scrub!
      v.force_encoding(enc)
      v.scrub!
    end
    ary
  end

  private
=begin command for WEB_ENCODINGS_
  curl https://encoding.spec.whatwg.org/encodings.json|
  ruby -rjson -e 'H={}
  h={
    "shift_jis"=>"Windows-31J",
    "euc-jp"=>"cp51932",
    "iso-2022-jp"=>"cp50221",
    "x-mac-cyrillic"=>"macCyrillic",
  }
  JSON($<.read).map{|x|x["encodings"]}.flatten.each{|x|
    Encoding.find(n=h.fetch(n=x["name"].downcase,n))rescue next
    x["labels"].each{|y|H[y]=n}
  }
  puts "{"
  H.each{|k,v|puts %[  #{k.dump}=>#{v.dump},]}
  puts "}"
'
=end
  WEB_ENCODINGS_ = {
    "unicode-1-1-utf-8"=>"utf-8",
    "utf-8"=>"utf-8",
    "utf8"=>"utf-8",
    "866"=>"ibm866",
    "cp866"=>"ibm866",
    "csibm866"=>"ibm866",
    "ibm866"=>"ibm866",
    "csisolatin2"=>"iso-8859-2",
    "iso-8859-2"=>"iso-8859-2",
    "iso-ir-101"=>"iso-8859-2",
    "iso8859-2"=>"iso-8859-2",
    "iso88592"=>"iso-8859-2",
    "iso_8859-2"=>"iso-8859-2",
    "iso_8859-2:1987"=>"iso-8859-2",
    "l2"=>"iso-8859-2",
    "latin2"=>"iso-8859-2",
    "csisolatin3"=>"iso-8859-3",
    "iso-8859-3"=>"iso-8859-3",
    "iso-ir-109"=>"iso-8859-3",
    "iso8859-3"=>"iso-8859-3",
    "iso88593"=>"iso-8859-3",
    "iso_8859-3"=>"iso-8859-3",
    "iso_8859-3:1988"=>"iso-8859-3",
    "l3"=>"iso-8859-3",
    "latin3"=>"iso-8859-3",
    "csisolatin4"=>"iso-8859-4",
    "iso-8859-4"=>"iso-8859-4",
    "iso-ir-110"=>"iso-8859-4",
    "iso8859-4"=>"iso-8859-4",
    "iso88594"=>"iso-8859-4",
    "iso_8859-4"=>"iso-8859-4",
    "iso_8859-4:1988"=>"iso-8859-4",
    "l4"=>"iso-8859-4",
    "latin4"=>"iso-8859-4",
    "csisolatincyrillic"=>"iso-8859-5",
    "cyrillic"=>"iso-8859-5",
    "iso-8859-5"=>"iso-8859-5",
    "iso-ir-144"=>"iso-8859-5",
    "iso8859-5"=>"iso-8859-5",
    "iso88595"=>"iso-8859-5",
    "iso_8859-5"=>"iso-8859-5",
    "iso_8859-5:1988"=>"iso-8859-5",
    "arabic"=>"iso-8859-6",
    "asmo-708"=>"iso-8859-6",
    "csiso88596e"=>"iso-8859-6",
    "csiso88596i"=>"iso-8859-6",
    "csisolatinarabic"=>"iso-8859-6",
    "ecma-114"=>"iso-8859-6",
    "iso-8859-6"=>"iso-8859-6",
    "iso-8859-6-e"=>"iso-8859-6",
    "iso-8859-6-i"=>"iso-8859-6",
    "iso-ir-127"=>"iso-8859-6",
    "iso8859-6"=>"iso-8859-6",
    "iso88596"=>"iso-8859-6",
    "iso_8859-6"=>"iso-8859-6",
    "iso_8859-6:1987"=>"iso-8859-6",
    "csisolatingreek"=>"iso-8859-7",
    "ecma-118"=>"iso-8859-7",
    "elot_928"=>"iso-8859-7",
    "greek"=>"iso-8859-7",
    "greek8"=>"iso-8859-7",
    "iso-8859-7"=>"iso-8859-7",
    "iso-ir-126"=>"iso-8859-7",
    "iso8859-7"=>"iso-8859-7",
    "iso88597"=>"iso-8859-7",
    "iso_8859-7"=>"iso-8859-7",
    "iso_8859-7:1987"=>"iso-8859-7",
    "sun_eu_greek"=>"iso-8859-7",
    "csiso88598e"=>"iso-8859-8",
    "csisolatinhebrew"=>"iso-8859-8",
    "hebrew"=>"iso-8859-8",
    "iso-8859-8"=>"iso-8859-8",
    "iso-8859-8-e"=>"iso-8859-8",
    "iso-ir-138"=>"iso-8859-8",
    "iso8859-8"=>"iso-8859-8",
    "iso88598"=>"iso-8859-8",
    "iso_8859-8"=>"iso-8859-8",
    "iso_8859-8:1988"=>"iso-8859-8",
    "visual"=>"iso-8859-8",
    "csisolatin6"=>"iso-8859-10",
    "iso-8859-10"=>"iso-8859-10",
    "iso-ir-157"=>"iso-8859-10",
    "iso8859-10"=>"iso-8859-10",
    "iso885910"=>"iso-8859-10",
    "l6"=>"iso-8859-10",
    "latin6"=>"iso-8859-10",
    "iso-8859-13"=>"iso-8859-13",
    "iso8859-13"=>"iso-8859-13",
    "iso885913"=>"iso-8859-13",
    "iso-8859-14"=>"iso-8859-14",
    "iso8859-14"=>"iso-8859-14",
    "iso885914"=>"iso-8859-14",
    "csisolatin9"=>"iso-8859-15",
    "iso-8859-15"=>"iso-8859-15",
    "iso8859-15"=>"iso-8859-15",
    "iso885915"=>"iso-8859-15",
    "iso_8859-15"=>"iso-8859-15",
    "l9"=>"iso-8859-15",
    "iso-8859-16"=>"iso-8859-16",
    "cskoi8r"=>"koi8-r",
    "koi"=>"koi8-r",
    "koi8"=>"koi8-r",
    "koi8-r"=>"koi8-r",
    "koi8_r"=>"koi8-r",
    "koi8-ru"=>"koi8-u",
    "koi8-u"=>"koi8-u",
    "dos-874"=>"windows-874",
    "iso-8859-11"=>"windows-874",
    "iso8859-11"=>"windows-874",
    "iso885911"=>"windows-874",
    "tis-620"=>"windows-874",
    "windows-874"=>"windows-874",
    "cp1250"=>"windows-1250",
    "windows-1250"=>"windows-1250",
    "x-cp1250"=>"windows-1250",
    "cp1251"=>"windows-1251",
    "windows-1251"=>"windows-1251",
    "x-cp1251"=>"windows-1251",
    "ansi_x3.4-1968"=>"windows-1252",
    "ascii"=>"windows-1252",
    "cp1252"=>"windows-1252",
    "cp819"=>"windows-1252",
    "csisolatin1"=>"windows-1252",
    "ibm819"=>"windows-1252",
    "iso-8859-1"=>"windows-1252",
    "iso-ir-100"=>"windows-1252",
    "iso8859-1"=>"windows-1252",
    "iso88591"=>"windows-1252",
    "iso_8859-1"=>"windows-1252",
    "iso_8859-1:1987"=>"windows-1252",
    "l1"=>"windows-1252",
    "latin1"=>"windows-1252",
    "us-ascii"=>"windows-1252",
    "windows-1252"=>"windows-1252",
    "x-cp1252"=>"windows-1252",
    "cp1253"=>"windows-1253",
    "windows-1253"=>"windows-1253",
    "x-cp1253"=>"windows-1253",
    "cp1254"=>"windows-1254",
    "csisolatin5"=>"windows-1254",
    "iso-8859-9"=>"windows-1254",
    "iso-ir-148"=>"windows-1254",
    "iso8859-9"=>"windows-1254",
    "iso88599"=>"windows-1254",
    "iso_8859-9"=>"windows-1254",
    "iso_8859-9:1989"=>"windows-1254",
    "l5"=>"windows-1254",
    "latin5"=>"windows-1254",
    "windows-1254"=>"windows-1254",
    "x-cp1254"=>"windows-1254",
    "cp1255"=>"windows-1255",
    "windows-1255"=>"windows-1255",
    "x-cp1255"=>"windows-1255",
    "cp1256"=>"windows-1256",
    "windows-1256"=>"windows-1256",
    "x-cp1256"=>"windows-1256",
    "cp1257"=>"windows-1257",
    "windows-1257"=>"windows-1257",
    "x-cp1257"=>"windows-1257",
    "cp1258"=>"windows-1258",
    "windows-1258"=>"windows-1258",
    "x-cp1258"=>"windows-1258",
    "x-mac-cyrillic"=>"macCyrillic",
    "x-mac-ukrainian"=>"macCyrillic",
    "chinese"=>"gbk",
    "csgb2312"=>"gbk",
    "csiso58gb231280"=>"gbk",
    "gb2312"=>"gbk",
    "gb_2312"=>"gbk",
    "gb_2312-80"=>"gbk",
    "gbk"=>"gbk",
    "iso-ir-58"=>"gbk",
    "x-gbk"=>"gbk",
    "gb18030"=>"gb18030",
    "big5"=>"big5",
    "big5-hkscs"=>"big5",
    "cn-big5"=>"big5",
    "csbig5"=>"big5",
    "x-x-big5"=>"big5",
    "cseucpkdfmtjapanese"=>"cp51932",
    "euc-jp"=>"cp51932",
    "x-euc-jp"=>"cp51932",
    "csiso2022jp"=>"cp50221",
    "iso-2022-jp"=>"cp50221",
    "csshiftjis"=>"Windows-31J",
    "ms932"=>"Windows-31J",
    "ms_kanji"=>"Windows-31J",
    "shift-jis"=>"Windows-31J",
    "shift_jis"=>"Windows-31J",
    "sjis"=>"Windows-31J",
    "windows-31j"=>"Windows-31J",
    "x-sjis"=>"Windows-31J",
    "cseuckr"=>"euc-kr",
    "csksc56011987"=>"euc-kr",
    "euc-kr"=>"euc-kr",
    "iso-ir-149"=>"euc-kr",
    "korean"=>"euc-kr",
    "ks_c_5601-1987"=>"euc-kr",
    "ks_c_5601-1989"=>"euc-kr",
    "ksc5601"=>"euc-kr",
    "ksc_5601"=>"euc-kr",
    "windows-949"=>"euc-kr",
    "utf-16be"=>"utf-16be",
    "utf-16"=>"utf-16le",
    "utf-16le"=>"utf-16le",
  } # :nodoc:

  # :nodoc:
  # return encoding or nil
  # http://encoding.spec.whatwg.org/#concept-encoding-get
  def self.get_encoding(label)
    Encoding.find(WEB_ENCODINGS_[label.to_str.strip.downcase]) rescue nil
  end
end # module Bundler::URI

module Bundler

  #
  # Returns +uri+ converted to an Bundler::URI object.
  #
  def URI(uri)
    if uri.is_a?(Bundler::URI::Generic)
      uri
    elsif uri = String.try_convert(uri)
      Bundler::URI.parse(uri)
    else
      raise ArgumentError,
        "bad argument (expected Bundler::URI object or Bundler::URI string)"
    end
  end
  module_function :URI
end
PK*"#[N��229gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/wss.rbnu�[���# frozen_string_literal: false
# = uri/wss.rb
#
# Author:: Matt Muller <mamuller@amazon.com>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'ws'

module Bundler::URI

  # The default port for WSS URIs is 443, and the scheme is 'wss:' rather
  # than 'ws:'. Other than that, WSS URIs are identical to WS URIs;
  # see Bundler::URI::WS.
  class WSS < WS
    # A Default port of 443 for Bundler::URI::WSS
    DEFAULT_PORT = 443
  end
  @@schemes['WSS'] = WSS
end
PK*"#[M}����:gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/file.rbnu�[���# frozen_string_literal: true

require_relative 'generic'

module Bundler::URI

  #
  # The "file" Bundler::URI is defined by RFC8089.
  #
  class File < Generic
    # A Default port of nil for Bundler::URI::File.
    DEFAULT_PORT = nil

    #
    # An Array of the available components for Bundler::URI::File.
    #
    COMPONENT = [
      :scheme,
      :host,
      :path
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::File object from components, with syntax checking.
    #
    # The components accepted are +host+ and +path+.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, path]</code>.
    #
    # Examples:
    #
    #     require 'bundler/vendor/uri/lib/uri'
    #
    #     uri1 = Bundler::URI::File.build(['host.example.com', '/path/file.zip'])
    #     uri1.to_s  # => "file://host.example.com/path/file.zip"
    #
    #     uri2 = Bundler::URI::File.build({:host => 'host.example.com',
    #       :path => '/ruby/src'})
    #     uri2.to_s  # => "file://host.example.com/ruby/src"
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)
      super(tmp)
    end

    # Protected setter for the host component +v+.
    #
    # See also Bundler::URI::Generic.host=.
    #
    def set_host(v)
      v = "" if v.nil? || v == "localhost"
      @host = v
    end

    # do nothing
    def set_port(v)
    end

    # raise InvalidURIError
    def check_userinfo(user)
      raise Bundler::URI::InvalidURIError, "can not set userinfo for file Bundler::URI"
    end

    # raise InvalidURIError
    def check_user(user)
      raise Bundler::URI::InvalidURIError, "can not set user for file Bundler::URI"
    end

    # raise InvalidURIError
    def check_password(user)
      raise Bundler::URI::InvalidURIError, "can not set password for file Bundler::URI"
    end

    # do nothing
    def set_userinfo(v)
    end

    # do nothing
    def set_user(v)
    end

    # do nothing
    def set_password(v)
    end
  end

  @@schemes['FILE'] = File
end
PK*"#[0C?E��:gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ldap.rbnu�[���# frozen_string_literal: false
# = uri/ldap.rb
#
# Author::
#  Takaaki Tateishi <ttate@jaist.ac.jp>
#  Akira Yamada <akira@ruby-lang.org>
# License::
#   Bundler::URI::LDAP is copyrighted free software by Takaaki Tateishi and Akira Yamada.
#   You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'generic'

module Bundler::URI

  #
  # LDAP Bundler::URI SCHEMA (described in RFC2255).
  #--
  # ldap://<host>/<dn>[?<attrs>[?<scope>[?<filter>[?<extensions>]]]]
  #++
  class LDAP < Generic

    # A Default port of 389 for Bundler::URI::LDAP.
    DEFAULT_PORT = 389

    # An Array of the available components for Bundler::URI::LDAP.
    COMPONENT = [
      :scheme,
      :host, :port,
      :dn,
      :attributes,
      :scope,
      :filter,
      :extensions,
    ].freeze

    # Scopes available for the starting point.
    #
    # * SCOPE_BASE - the Base DN
    # * SCOPE_ONE  - one level under the Base DN, not including the base DN and
    #   not including any entries under this
    # * SCOPE_SUB  - subtrees, all entries at all levels
    #
    SCOPE = [
      SCOPE_ONE = 'one',
      SCOPE_SUB = 'sub',
      SCOPE_BASE = 'base',
    ].freeze

    #
    # == Description
    #
    # Creates a new Bundler::URI::LDAP object from components, with syntax checking.
    #
    # The components accepted are host, port, dn, attributes,
    # scope, filter, and extensions.
    #
    # The components should be provided either as an Array, or as a Hash
    # with keys formed by preceding the component names with a colon.
    #
    # If an Array is used, the components must be passed in the
    # order <code>[host, port, dn, attributes, scope, filter, extensions]</code>.
    #
    # Example:
    #
    #     uri = Bundler::URI::LDAP.build({:host => 'ldap.example.com',
    #       :dn => '/dc=example'})
    #
    #     uri = Bundler::URI::LDAP.build(["ldap.example.com", nil,
    #       "/dc=example;dc=com", "query", nil, nil, nil])
    #
    def self.build(args)
      tmp = Util::make_components_hash(self, args)

      if tmp[:dn]
        tmp[:path] = tmp[:dn]
      end

      query = []
      [:extensions, :filter, :scope, :attributes].collect do |x|
        next if !tmp[x] && query.size == 0
        query.unshift(tmp[x])
      end

      tmp[:query] = query.join('?')

      return super(tmp)
    end

    #
    # == Description
    #
    # Creates a new Bundler::URI::LDAP object from generic Bundler::URI components as per
    # RFC 2396. No LDAP-specific syntax checking is performed.
    #
    # Arguments are +scheme+, +userinfo+, +host+, +port+, +registry+, +path+,
    # +opaque+, +query+, and +fragment+, in that order.
    #
    # Example:
    #
    #     uri = Bundler::URI::LDAP.new("ldap", nil, "ldap.example.com", nil, nil,
    #       "/dc=example;dc=com", nil, "query", nil)
    #
    # See also Bundler::URI::Generic.new.
    #
    def initialize(*arg)
      super(*arg)

      if @fragment
        raise InvalidURIError, 'bad LDAP URL'
      end

      parse_dn
      parse_query
    end

    # Private method to cleanup +dn+ from using the +path+ component attribute.
    def parse_dn
      raise InvalidURIError, 'bad LDAP URL' unless @path
      @dn = @path[1..-1]
    end
    private :parse_dn

    # Private method to cleanup +attributes+, +scope+, +filter+, and +extensions+
    # from using the +query+ component attribute.
    def parse_query
      @attributes = nil
      @scope      = nil
      @filter     = nil
      @extensions = nil

      if @query
        attrs, scope, filter, extensions = @query.split('?')

        @attributes = attrs if attrs && attrs.size > 0
        @scope      = scope if scope && scope.size > 0
        @filter     = filter if filter && filter.size > 0
        @extensions = extensions if extensions && extensions.size > 0
      end
    end
    private :parse_query

    # Private method to assemble +query+ from +attributes+, +scope+, +filter+, and +extensions+.
    def build_path_query
      @path = '/' + @dn

      query = []
      [@extensions, @filter, @scope, @attributes].each do |x|
        next if !x && query.size == 0
        query.unshift(x)
      end
      @query = query.join('?')
    end
    private :build_path_query

    # Returns dn.
    def dn
      @dn
    end

    # Private setter for dn +val+.
    def set_dn(val)
      @dn = val
      build_path_query
      @dn
    end
    protected :set_dn

    # Setter for dn +val+.
    def dn=(val)
      set_dn(val)
      val
    end

    # Returns attributes.
    def attributes
      @attributes
    end

    # Private setter for attributes +val+.
    def set_attributes(val)
      @attributes = val
      build_path_query
      @attributes
    end
    protected :set_attributes

    # Setter for attributes +val+.
    def attributes=(val)
      set_attributes(val)
      val
    end

    # Returns scope.
    def scope
      @scope
    end

    # Private setter for scope +val+.
    def set_scope(val)
      @scope = val
      build_path_query
      @scope
    end
    protected :set_scope

    # Setter for scope +val+.
    def scope=(val)
      set_scope(val)
      val
    end

    # Returns filter.
    def filter
      @filter
    end

    # Private setter for filter +val+.
    def set_filter(val)
      @filter = val
      build_path_query
      @filter
    end
    protected :set_filter

    # Setter for filter +val+.
    def filter=(val)
      set_filter(val)
      val
    end

    # Returns extensions.
    def extensions
      @extensions
    end

    # Private setter for extensions +val+.
    def set_extensions(val)
      @extensions = val
      build_path_query
      @extensions
    end
    protected :set_extensions

    # Setter for extensions +val+.
    def extensions=(val)
      set_extensions(val)
      val
    end

    # Checks if Bundler::URI has a path.
    # For Bundler::URI::LDAP this will return +false+.
    def hierarchical?
      false
    end
  end

  @@schemes['LDAP'] = LDAP
end
PK*"#[6��ؖؖ=gems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/generic.rbnu�[���# frozen_string_literal: true

# = uri/generic.rb
#
# Author:: Akira Yamada <akira@ruby-lang.org>
# License:: You can redistribute it and/or modify it under the same term as Ruby.
#
# See Bundler::URI for general documentation
#

require_relative 'common'
autoload :IPSocket, 'socket'
autoload :IPAddr, 'ipaddr'

module Bundler::URI

  #
  # Base class for all Bundler::URI classes.
  # Implements generic Bundler::URI syntax as per RFC 2396.
  #
  class Generic
    include Bundler::URI

    #
    # A Default port of nil for Bundler::URI::Generic.
    #
    DEFAULT_PORT = nil

    #
    # Returns default port.
    #
    def self.default_port
      self::DEFAULT_PORT
    end

    #
    # Returns default port.
    #
    def default_port
      self.class.default_port
    end

    #
    # An Array of the available components for Bundler::URI::Generic.
    #
    COMPONENT = [
      :scheme,
      :userinfo, :host, :port, :registry,
      :path, :opaque,
      :query,
      :fragment
    ].freeze

    #
    # Components of the Bundler::URI in the order.
    #
    def self.component
      self::COMPONENT
    end

    USE_REGISTRY = false # :nodoc:

    def self.use_registry # :nodoc:
      self::USE_REGISTRY
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # At first, tries to create a new Bundler::URI::Generic instance using
    # Bundler::URI::Generic::build. But, if exception Bundler::URI::InvalidComponentError is raised,
    # then it does Bundler::URI::Escape.escape all Bundler::URI components and tries again.
    #
    def self.build2(args)
      begin
        return self.build(args)
      rescue InvalidComponentError
        if args.kind_of?(Array)
          return self.build(args.collect{|x|
            if x.is_a?(String)
              DEFAULT_PARSER.escape(x)
            else
              x
            end
          })
        elsif args.kind_of?(Hash)
          tmp = {}
          args.each do |key, value|
            tmp[key] = if value
                DEFAULT_PARSER.escape(value)
              else
                value
              end
          end
          return self.build(tmp)
        end
      end
    end

    #
    # == Synopsis
    #
    # See ::new.
    #
    # == Description
    #
    # Creates a new Bundler::URI::Generic instance from components of Bundler::URI::Generic
    # with check.  Components are: scheme, userinfo, host, port, registry, path,
    # opaque, query, and fragment. You can provide arguments either by an Array or a Hash.
    # See ::new for hash keys to use or for order of array items.
    #
    def self.build(args)
      if args.kind_of?(Array) &&
          args.size == ::Bundler::URI::Generic::COMPONENT.size
        tmp = args.dup
      elsif args.kind_of?(Hash)
        tmp = ::Bundler::URI::Generic::COMPONENT.collect do |c|
          if args.include?(c)
            args[c]
          else
            nil
          end
        end
      else
        component = self.class.component rescue ::Bundler::URI::Generic::COMPONENT
        raise ArgumentError,
        "expected Array of or Hash of components of #{self.class} (#{component.join(', ')})"
      end

      tmp << nil
      tmp << true
      return self.new(*tmp)
    end

    #
    # == Args
    #
    # +scheme+::
    #   Protocol scheme, i.e. 'http','ftp','mailto' and so on.
    # +userinfo+::
    #   User name and password, i.e. 'sdmitry:bla'.
    # +host+::
    #   Server host name.
    # +port+::
    #   Server port.
    # +registry+::
    #   Registry of naming authorities.
    # +path+::
    #   Path on server.
    # +opaque+::
    #   Opaque part.
    # +query+::
    #   Query data.
    # +fragment+::
    #   Part of the Bundler::URI after '#' character.
    # +parser+::
    #   Parser for internal use [Bundler::URI::DEFAULT_PARSER by default].
    # +arg_check+::
    #   Check arguments [false by default].
    #
    # == Description
    #
    # Creates a new Bundler::URI::Generic instance from ``generic'' components without check.
    #
    def initialize(scheme,
                   userinfo, host, port, registry,
                   path, opaque,
                   query,
                   fragment,
                   parser = DEFAULT_PARSER,
                   arg_check = false)
      @scheme = nil
      @user = nil
      @password = nil
      @host = nil
      @port = nil
      @path = nil
      @query = nil
      @opaque = nil
      @fragment = nil
      @parser = parser == DEFAULT_PARSER ? nil : parser

      if arg_check
        self.scheme = scheme
        self.userinfo = userinfo
        self.hostname = host
        self.port = port
        self.path = path
        self.query = query
        self.opaque = opaque
        self.fragment = fragment
      else
        self.set_scheme(scheme)
        self.set_userinfo(userinfo)
        self.set_host(host)
        self.set_port(port)
        self.set_path(path)
        self.query = query
        self.set_opaque(opaque)
        self.fragment=(fragment)
      end
      if registry
        raise InvalidURIError,
          "the scheme #{@scheme} does not accept registry part: #{registry} (or bad hostname?)"
      end

      @scheme&.freeze
      self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
      self.set_port(self.default_port) if self.default_port && !@port
    end

    #
    # Returns the scheme component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").scheme #=> "http"
    #
    attr_reader :scheme

    # Returns the host component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").host #=> "foo"
    #
    # It returns nil if no host component exists.
    #
    #   Bundler::URI("mailto:foo@example.org").host #=> nil
    #
    # The component does not contain the port number.
    #
    #   Bundler::URI("http://foo:8080/bar/baz").host #=> "foo"
    #
    # Since IPv6 addresses are wrapped with brackets in URIs,
    # this method returns IPv6 addresses wrapped with brackets.
    # This form is not appropriate to pass to socket methods such as TCPSocket.open.
    # If unwrapped host names are required, use the #hostname method.
    #
    #   Bundler::URI("http://[::1]/bar/baz").host     #=> "[::1]"
    #   Bundler::URI("http://[::1]/bar/baz").hostname #=> "::1"
    #
    attr_reader :host

    # Returns the port component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").port      #=> 80
    #   Bundler::URI("http://foo:8080/bar/baz").port #=> 8080
    #
    attr_reader :port

    def registry # :nodoc:
      nil
    end

    # Returns the path component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz").path #=> "/bar/baz"
    #
    attr_reader :path

    # Returns the query component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz?search=FooBar").query #=> "search=FooBar"
    #
    attr_reader :query

    # Returns the opaque part of the Bundler::URI.
    #
    #   Bundler::URI("mailto:foo@example.org").opaque #=> "foo@example.org"
    #   Bundler::URI("http://foo/bar/baz").opaque     #=> nil
    #
    # The portion of the path that does not make use of the slash '/'.
    # The path typically refers to an absolute path or an opaque part.
    # (See RFC2396 Section 3 and 5.2.)
    #
    attr_reader :opaque

    # Returns the fragment component of the Bundler::URI.
    #
    #   Bundler::URI("http://foo/bar/baz?search=FooBar#ponies").fragment #=> "ponies"
    #
    attr_reader :fragment

    # Returns the parser to be used.
    #
    # Unless a Bundler::URI::Parser is defined, DEFAULT_PARSER is used.
    #
    def parser
      if !defined?(@parser) || !@parser
        DEFAULT_PARSER
      else
        @parser || DEFAULT_PARSER
      end
    end

    # Replaces self by other Bundler::URI object.
    #
    def replace!(oth)
      if self.class != oth.class
        raise ArgumentError, "expected #{self.class} object"
      end

      component.each do |c|
        self.__send__("#{c}=", oth.__send__(c))
      end
    end
    private :replace!

    #
    # Components of the Bundler::URI in the order.
    #
    def component
      self.class.component
    end

    #
    # Checks the scheme +v+ component against the Bundler::URI::Parser Regexp for :SCHEME.
    #
    def check_scheme(v)
      if v && parser.regexp[:SCHEME] !~ v
        raise InvalidComponentError,
          "bad component(expected scheme component): #{v}"
      end

      return true
    end
    private :check_scheme

    # Protected setter for the scheme component +v+.
    #
    # See also Bundler::URI::Generic.scheme=.
    #
    def set_scheme(v)
      @scheme = v&.downcase
    end
    protected :set_scheme

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the scheme component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_scheme.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.scheme = "https"
    #   uri.to_s  #=> "https://my.example.com"
    #
    def scheme=(v)
      check_scheme(v)
      set_scheme(v)
      v
    end

    #
    # Checks the +user+ and +password+.
    #
    # If +password+ is not provided, then +user+ is
    # split, using Bundler::URI::Generic.split_userinfo, to
    # pull +user+ and +password.
    #
    # See also Bundler::URI::Generic.check_user, Bundler::URI::Generic.check_password.
    #
    def check_userinfo(user, password = nil)
      if !password
        user, password = split_userinfo(user)
      end
      check_user(user)
      check_password(password, user)

      return true
    end
    private :check_userinfo

    #
    # Checks the user +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_user(v)
      if @opaque
        raise InvalidURIError,
          "can not set user with opaque"
      end

      return v unless v

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad component(expected userinfo component or user component): #{v}"
      end

      return true
    end
    private :check_user

    #
    # Checks the password +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :USERINFO.
    #
    # Can not have a registry or opaque component defined,
    # with a user component defined.
    #
    def check_password(v, user = @user)
      if @opaque
        raise InvalidURIError,
          "can not set password with opaque"
      end
      return v unless v

      if !user
        raise InvalidURIError,
          "password component depends user component"
      end

      if parser.regexp[:USERINFO] !~ v
        raise InvalidComponentError,
          "bad password component"
      end

      return true
    end
    private :check_password

    #
    # Sets userinfo, argument is string like 'name:pass'.
    #
    def userinfo=(userinfo)
      if userinfo.nil?
        return nil
      end
      check_userinfo(*userinfo)
      set_userinfo(*userinfo)
      # returns userinfo
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +user+ component
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_user.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.user = "sam"
    #   uri.to_s  #=> "http://sam:V3ry_S3nsit1ve@my.example.com"
    #
    def user=(user)
      check_user(user)
      set_user(user)
      # returns user
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the +password+ component
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_password.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://john:S3nsit1ve@my.example.com")
    #   uri.password = "V3ry_S3nsit1ve"
    #   uri.to_s  #=> "http://john:V3ry_S3nsit1ve@my.example.com"
    #
    def password=(password)
      check_password(password)
      set_password(password)
      # returns password
    end

    # Protected setter for the +user+ component, and +password+ if available
    # (with validation).
    #
    # See also Bundler::URI::Generic.userinfo=.
    #
    def set_userinfo(user, password = nil)
      unless password
        user, password = split_userinfo(user)
      end
      @user     = user
      @password = password if password

      [@user, @password]
    end
    protected :set_userinfo

    # Protected setter for the user component +v+.
    #
    # See also Bundler::URI::Generic.user=.
    #
    def set_user(v)
      set_userinfo(v, @password)
      v
    end
    protected :set_user

    # Protected setter for the password component +v+.
    #
    # See also Bundler::URI::Generic.password=.
    #
    def set_password(v)
      @password = v
      # returns v
    end
    protected :set_password

    # Returns the userinfo +ui+ as <code>[user, password]</code>
    # if properly formatted as 'user:password'.
    def split_userinfo(ui)
      return nil, nil unless ui
      user, password = ui.split(':', 2)

      return user, password
    end
    private :split_userinfo

    # Escapes 'user:password' +v+ based on RFC 1738 section 3.1.
    def escape_userpass(v)
      parser.escape(v, /[@:\/]/o) # RFC 1738 section 3.1 #/
    end
    private :escape_userpass

    # Returns the userinfo, either as 'user' or 'user:password'.
    def userinfo
      if @user.nil?
        nil
      elsif @password.nil?
        @user
      else
        @user + ':' + @password
      end
    end

    # Returns the user component.
    def user
      @user
    end

    # Returns the password component.
    def password
      @password
    end

    #
    # Checks the host +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :HOST.
    #
    # Can not have a registry or opaque component defined,
    # with a host component defined.
    #
    def check_host(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "can not set host with registry or opaque"
      elsif parser.regexp[:HOST] !~ v
        raise InvalidComponentError,
          "bad component(expected host component): #{v}"
      end

      return true
    end
    private :check_host

    # Protected setter for the host component +v+.
    #
    # See also Bundler::URI::Generic.host=.
    #
    def set_host(v)
      @host = v
    end
    protected :set_host

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the host component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_host.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.host = "foo.com"
    #   uri.to_s  #=> "http://foo.com"
    #
    def host=(v)
      check_host(v)
      set_host(v)
      v
    end

    # Extract the host part of the Bundler::URI and unwrap brackets for IPv6 addresses.
    #
    # This method is the same as Bundler::URI::Generic#host except
    # brackets for IPv6 (and future IP) addresses are removed.
    #
    #   uri = Bundler::URI("http://[::1]/bar")
    #   uri.hostname      #=> "::1"
    #   uri.host          #=> "[::1]"
    #
    def hostname
      v = self.host
      /\A\[(.*)\]\z/ =~ v ? $1 : v
    end

    # Sets the host part of the Bundler::URI as the argument with brackets for IPv6 addresses.
    #
    # This method is the same as Bundler::URI::Generic#host= except
    # the argument can be a bare IPv6 address.
    #
    #   uri = Bundler::URI("http://foo/bar")
    #   uri.hostname = "::1"
    #   uri.to_s  #=> "http://[::1]/bar"
    #
    # If the argument seems to be an IPv6 address,
    # it is wrapped with brackets.
    #
    def hostname=(v)
      v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v
      self.host = v
    end

    #
    # Checks the port +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp for :PORT.
    #
    # Can not have a registry or opaque component defined,
    # with a port component defined.
    #
    def check_port(v)
      return v unless v

      if @opaque
        raise InvalidURIError,
          "can not set port with registry or opaque"
      elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v
        raise InvalidComponentError,
          "bad component(expected port component): #{v.inspect}"
      end

      return true
    end
    private :check_port

    # Protected setter for the port component +v+.
    #
    # See also Bundler::URI::Generic.port=.
    #
    def set_port(v)
      v = v.empty? ? nil : v.to_i unless !v || v.kind_of?(Integer)
      @port = v
    end
    protected :set_port

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the port component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_port.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.port = 8080
    #   uri.to_s  #=> "http://my.example.com:8080"
    #
    def port=(v)
      check_port(v)
      set_port(v)
      port
    end

    def check_registry(v) # :nodoc:
      raise InvalidURIError, "can not set registry"
    end
    private :check_registry

    def set_registry(v) #:nodoc:
      raise InvalidURIError, "can not set registry"
    end
    protected :set_registry

    def registry=(v)
      raise InvalidURIError, "can not set registry"
    end

    #
    # Checks the path +v+ component for RFC2396 compliance
    # and against the Bundler::URI::Parser Regexp
    # for :ABS_PATH and :REL_PATH.
    #
    # Can not have a opaque component defined,
    # with a path component defined.
    #
    def check_path(v)
      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if v && @opaque
        raise InvalidURIError,
          "path conflicts with opaque"
      end

      # If scheme is ftp, path may be relative.
      # See RFC 1738 section 3.2.2, and RFC 2396.
      if @scheme && @scheme != "ftp"
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected absolute path component): #{v}"
        end
      else
        if v && v != '' && parser.regexp[:ABS_PATH] !~ v &&
           parser.regexp[:REL_PATH] !~ v
          raise InvalidComponentError,
            "bad component(expected relative path component): #{v}"
        end
      end

      return true
    end
    private :check_path

    # Protected setter for the path component +v+.
    #
    # See also Bundler::URI::Generic.path=.
    #
    def set_path(v)
      @path = v
    end
    protected :set_path

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the path component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_path.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/pub/files")
    #   uri.path = "/faq/"
    #   uri.to_s  #=> "http://my.example.com/faq/"
    #
    def path=(v)
      check_path(v)
      set_path(v)
      v
    end

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the query component +v+.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/?id=25")
    #   uri.query = "id=1"
    #   uri.to_s  #=> "http://my.example.com/?id=1"
    #
    def query=(v)
      return @query = nil unless v
      raise InvalidURIError, "query conflicts with opaque" if @opaque

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      raise InvalidURIError, "invalid percent escape: #{$1}" if /(%\H\H)/n.match(v)
      v.gsub!(/(?!%\h\h|[!$-&(-;=?-_a-~])./n.freeze){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @query = v
    end

    #
    # Checks the opaque +v+ component for RFC2396 compliance and
    # against the Bundler::URI::Parser Regexp for :OPAQUE.
    #
    # Can not have a host, port, user, or path component defined,
    # with an opaque component defined.
    #
    def check_opaque(v)
      return v unless v

      # raise if both hier and opaque are not nil, because:
      # absoluteURI   = scheme ":" ( hier_part | opaque_part )
      # hier_part     = ( net_path | abs_path ) [ "?" query ]
      if @host || @port || @user || @path  # userinfo = @user + ':' + @password
        raise InvalidURIError,
          "can not set opaque with host, port, userinfo or path"
      elsif v && parser.regexp[:OPAQUE] !~ v
        raise InvalidComponentError,
          "bad component(expected opaque component): #{v}"
      end

      return true
    end
    private :check_opaque

    # Protected setter for the opaque component +v+.
    #
    # See also Bundler::URI::Generic.opaque=.
    #
    def set_opaque(v)
      @opaque = v
    end
    protected :set_opaque

    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the opaque component +v+
    # (with validation).
    #
    # See also Bundler::URI::Generic.check_opaque.
    #
    def opaque=(v)
      check_opaque(v)
      set_opaque(v)
      v
    end

    #
    # Checks the fragment +v+ component against the Bundler::URI::Parser Regexp for :FRAGMENT.
    #
    #
    # == Args
    #
    # +v+::
    #    String
    #
    # == Description
    #
    # Public setter for the fragment component +v+
    # (with validation).
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/?id=25#time=1305212049")
    #   uri.fragment = "time=1305212086"
    #   uri.to_s  #=> "http://my.example.com/?id=25#time=1305212086"
    #
    def fragment=(v)
      return @fragment = nil unless v

      x = v.to_str
      v = x.dup if x.equal? v
      v.encode!(Encoding::UTF_8) rescue nil
      v.delete!("\t\r\n")
      v.force_encoding(Encoding::ASCII_8BIT)
      v.gsub!(/(?!%\h\h|[!-~])./n){'%%%02X' % $&.ord}
      v.force_encoding(Encoding::US_ASCII)
      @fragment = v
    end

    #
    # Returns true if Bundler::URI is hierarchical.
    #
    # == Description
    #
    # Bundler::URI has components listed in order of decreasing significance from left to right,
    # see RFC3986 https://tools.ietf.org/html/rfc3986 1.2.3.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com/")
    #   uri.hierarchical?
    #   #=> true
    #   uri = Bundler::URI.parse("mailto:joe@example.com")
    #   uri.hierarchical?
    #   #=> false
    #
    def hierarchical?
      if @path
        true
      else
        false
      end
    end

    #
    # Returns true if Bundler::URI has a scheme (e.g. http:// or https://) specified.
    #
    def absolute?
      if @scheme
        true
      else
        false
      end
    end
    alias absolute absolute?

    #
    # Returns true if Bundler::URI does not have a scheme (e.g. http:// or https://) specified.
    #
    def relative?
      !absolute?
    end

    #
    # Returns an Array of the path split on '/'.
    #
    def split_path(path)
      path.split("/", -1)
    end
    private :split_path

    #
    # Merges a base path +base+, with relative path +rel+,
    # returns a modified base path.
    #
    def merge_path(base, rel)

      # RFC2396, Section 5.2, 5)
      # RFC2396, Section 5.2, 6)
      base_path = split_path(base)
      rel_path  = split_path(rel)

      # RFC2396, Section 5.2, 6), a)
      base_path << '' if base_path.last == '..'
      while i = base_path.index('..')
        base_path.slice!(i - 1, 2)
      end

      if (first = rel_path.first) and first.empty?
        base_path.clear
        rel_path.shift
      end

      # RFC2396, Section 5.2, 6), c)
      # RFC2396, Section 5.2, 6), d)
      rel_path.push('') if rel_path.last == '.' || rel_path.last == '..'
      rel_path.delete('.')

      # RFC2396, Section 5.2, 6), e)
      tmp = []
      rel_path.each do |x|
        if x == '..' &&
            !(tmp.empty? || tmp.last == '..')
          tmp.pop
        else
          tmp << x
        end
      end

      add_trailer_slash = !tmp.empty?
      if base_path.empty?
        base_path = [''] # keep '/' for root directory
      elsif add_trailer_slash
        base_path.pop
      end
      while x = tmp.shift
        if x == '..'
          # RFC2396, Section 4
          # a .. or . in an absolute path has no special meaning
          base_path.pop if base_path.size > 1
        else
          # if x == '..'
          #   valid absolute (but abnormal) path "/../..."
          # else
          #   valid absolute path
          # end
          base_path << x
          tmp.each {|t| base_path << t}
          add_trailer_slash = false
          break
        end
      end
      base_path.push('') if add_trailer_slash

      return base_path.join('/')
    end
    private :merge_path

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Destructive form of #merge.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.merge!("/main.rbx?page=1")
    #   uri.to_s  # => "http://my.example.com/main.rbx?page=1"
    #
    def merge!(oth)
      t = merge(oth)
      if self == t
        nil
      else
        replace!(t)
        self
      end
    end

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Merges two URIs.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.merge("/main.rbx?page=1")
    #   # => "http://my.example.com/main.rbx?page=1"
    #
    def merge(oth)
      rel = parser.__send__(:convert_to_uri, oth)

      if rel.absolute?
        #raise BadURIError, "both Bundler::URI are absolute" if absolute?
        # hmm... should return oth for usability?
        return rel
      end

      unless self.absolute?
        raise BadURIError, "both Bundler::URI are relative"
      end

      base = self.dup

      authority = rel.userinfo || rel.host || rel.port

      # RFC2396, Section 5.2, 2)
      if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
        base.fragment=(rel.fragment) if rel.fragment
        return base
      end

      base.query = nil
      base.fragment=(nil)

      # RFC2396, Section 5.2, 4)
      if !authority
        base.set_path(merge_path(base.path, rel.path)) if base.path && rel.path
      else
        # RFC2396, Section 5.2, 4)
        base.set_path(rel.path) if rel.path
      end

      # RFC2396, Section 5.2, 7)
      base.set_userinfo(rel.userinfo) if rel.userinfo
      base.set_host(rel.host)         if rel.host
      base.set_port(rel.port)         if rel.port
      base.query = rel.query       if rel.query
      base.fragment=(rel.fragment) if rel.fragment

      return base
    end # merge
    alias + merge

    # :stopdoc:
    def route_from_path(src, dst)
      case dst
      when src
        # RFC2396, Section 4.2
        return ''
      when %r{(?:\A|/)\.\.?(?:/|\z)}
        # dst has abnormal absolute path,
        # like "/./", "/../", "/x/../", ...
        return dst.dup
      end

      src_path = src.scan(%r{[^/]*/})
      dst_path = dst.scan(%r{[^/]*/?})

      # discard same parts
      while !dst_path.empty? && dst_path.first == src_path.first
        src_path.shift
        dst_path.shift
      end

      tmp = dst_path.join

      # calculate
      if src_path.empty?
        if tmp.empty?
          return './'
        elsif dst_path.first.include?(':') # (see RFC2396 Section 5)
          return './' + tmp
        else
          return tmp
        end
      end

      return '../' * src_path.size + tmp
    end
    private :route_from_path
    # :startdoc:

    # :stopdoc:
    def route_from0(oth)
      oth = parser.__send__(:convert_to_uri, oth)
      if self.relative?
        raise BadURIError,
          "relative Bundler::URI: #{self}"
      end
      if oth.relative?
        raise BadURIError,
          "relative Bundler::URI: #{oth}"
      end

      if self.scheme != oth.scheme
        return self, self.dup
      end
      rel = Bundler::URI::Generic.new(nil, # it is relative Bundler::URI
                             self.userinfo, self.host, self.port,
                             nil, self.path, self.opaque,
                             self.query, self.fragment, parser)

      if rel.userinfo != oth.userinfo ||
          rel.host.to_s.downcase != oth.host.to_s.downcase ||
          rel.port != oth.port

        if self.userinfo.nil? && self.host.nil?
          return self, self.dup
        end

        rel.set_port(nil) if rel.port == oth.default_port
        return rel, rel
      end
      rel.set_userinfo(nil)
      rel.set_host(nil)
      rel.set_port(nil)

      if rel.path && rel.path == oth.path
        rel.set_path('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      elsif rel.opaque && rel.opaque == oth.opaque
        rel.set_opaque('')
        rel.query = nil if rel.query == oth.query
        return rel, rel
      end

      # you can modify `rel', but can not `oth'.
      return oth, rel
    end
    private :route_from0
    # :startdoc:

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Calculates relative path from oth to self.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse('http://my.example.com/main.rbx?page=1')
    #   uri.route_from('http://my.example.com')
    #   #=> #<Bundler::URI::Generic /main.rbx?page=1>
    #
    def route_from(oth)
      # you can modify `rel', but can not `oth'.
      begin
        oth, rel = route_from0(oth)
      rescue
        raise $!.class, $!.message
      end
      if oth == rel
        return rel
      end

      rel.set_path(route_from_path(oth.path, self.path))
      if rel.path == './' && self.query
        # "./?foo" -> "?foo"
        rel.set_path('')
      end

      return rel
    end

    alias - route_from

    #
    # == Args
    #
    # +oth+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Calculates relative path to oth from self.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse('http://my.example.com')
    #   uri.route_to('http://my.example.com/main.rbx?page=1')
    #   #=> #<Bundler::URI::Generic /main.rbx?page=1>
    #
    def route_to(oth)
      parser.__send__(:convert_to_uri, oth).route_from(self)
    end

    #
    # Returns normalized Bundler::URI.
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   Bundler::URI("HTTP://my.EXAMPLE.com").normalize
    #   #=> #<Bundler::URI::HTTP http://my.example.com/>
    #
    # Normalization here means:
    #
    # * scheme and host are converted to lowercase,
    # * an empty path component is set to "/".
    #
    def normalize
      uri = dup
      uri.normalize!
      uri
    end

    #
    # Destructive version of #normalize.
    #
    def normalize!
      if path&.empty?
        set_path('/')
      end
      if scheme && scheme != scheme.downcase
        set_scheme(self.scheme.downcase)
      end
      if host && host != host.downcase
        set_host(self.host.downcase)
      end
    end

    #
    # Constructs String from Bundler::URI.
    #
    def to_s
      str = ''.dup
      if @scheme
        str << @scheme
        str << ':'
      end

      if @opaque
        str << @opaque
      else
        if @host || %w[file postgres].include?(@scheme)
          str << '//'
        end
        if self.userinfo
          str << self.userinfo
          str << '@'
        end
        if @host
          str << @host
        end
        if @port && @port != self.default_port
          str << ':'
          str << @port.to_s
        end
        str << @path
        if @query
          str << '?'
          str << @query
        end
      end
      if @fragment
        str << '#'
        str << @fragment
      end
      str
    end

    #
    # Compares two URIs.
    #
    def ==(oth)
      if self.class == oth.class
        self.normalize.component_ary == oth.normalize.component_ary
      else
        false
      end
    end

    def hash
      self.component_ary.hash
    end

    def eql?(oth)
      self.class == oth.class &&
      parser == oth.parser &&
      self.component_ary.eql?(oth.component_ary)
    end

=begin

--- Bundler::URI::Generic#===(oth)

=end
#    def ===(oth)
#      raise NotImplementedError
#    end

=begin
=end


    # Returns an Array of the components defined from the COMPONENT Array.
    def component_ary
      component.collect do |x|
        self.__send__(x)
      end
    end
    protected :component_ary

    # == Args
    #
    # +components+::
    #    Multiple Symbol arguments defined in Bundler::URI::HTTP.
    #
    # == Description
    #
    # Selects specified components from Bundler::URI.
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse('http://myuser:mypass@my.example.com/test.rbx')
    #   uri.select(:userinfo, :host, :path)
    #   # => ["myuser:mypass", "my.example.com", "/test.rbx"]
    #
    def select(*components)
      components.collect do |c|
        if component.include?(c)
          self.__send__(c)
        else
          raise ArgumentError,
            "expected of components of #{self.class} (#{self.class.component.join(', ')})"
        end
      end
    end

    def inspect
      "#<#{self.class} #{self}>"
    end

    #
    # == Args
    #
    # +v+::
    #    Bundler::URI or String
    #
    # == Description
    #
    # Attempts to parse other Bundler::URI +oth+,
    # returns [parsed_oth, self].
    #
    # == Usage
    #
    #   require 'bundler/vendor/uri/lib/uri'
    #
    #   uri = Bundler::URI.parse("http://my.example.com")
    #   uri.coerce("http://foo.com")
    #   #=> [#<Bundler::URI::HTTP http://foo.com>, #<Bundler::URI::HTTP http://my.example.com>]
    #
    def coerce(oth)
      case oth
      when String
        oth = parser.parse(oth)
      else
        super
      end

      return oth, self
    end

    # Returns a proxy Bundler::URI.
    # The proxy Bundler::URI is obtained from environment variables such as http_proxy,
    # ftp_proxy, no_proxy, etc.
    # If there is no proper proxy, nil is returned.
    #
    # If the optional parameter +env+ is specified, it is used instead of ENV.
    #
    # Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.)
    # are examined, too.
    #
    # But http_proxy and HTTP_PROXY is treated specially under CGI environment.
    # It's because HTTP_PROXY may be set by Proxy: header.
    # So HTTP_PROXY is not used.
    # http_proxy is not used too if the variable is case insensitive.
    # CGI_HTTP_PROXY can be used instead.
    def find_proxy(env=ENV)
      raise BadURIError, "relative Bundler::URI: #{self}" if self.relative?
      name = self.scheme.downcase + '_proxy'
      proxy_uri = nil
      if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI?
        # HTTP_PROXY conflicts with *_proxy for proxy settings and
        # HTTP_* for header information in CGI.
        # So it should be careful to use it.
        pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k }
        case pairs.length
        when 0 # no proxy setting anyway.
          proxy_uri = nil
        when 1
          k, _ = pairs.shift
          if k == 'http_proxy' && env[k.upcase] == nil
            # http_proxy is safe to use because ENV is case sensitive.
            proxy_uri = env[name]
          else
            proxy_uri = nil
          end
        else # http_proxy is safe to use because ENV is case sensitive.
          proxy_uri = env.to_hash[name]
        end
        if !proxy_uri
          # Use CGI_HTTP_PROXY.  cf. libwww-perl.
          proxy_uri = env["CGI_#{name.upcase}"]
        end
      elsif name == 'http_proxy'
        unless proxy_uri = env[name]
          if proxy_uri = env[name.upcase]
            warn 'The environment variable HTTP_PROXY is discouraged.  Use http_proxy.', uplevel: 1
          end
        end
      else
        proxy_uri = env[name] || env[name.upcase]
      end

      if proxy_uri.nil? || proxy_uri.empty?
        return nil
      end

      if self.hostname
        begin
          addr = IPSocket.getaddress(self.hostname)
          return nil if /\A127\.|\A::1\z/ =~ addr
        rescue SocketError
        end
      end

      name = 'no_proxy'
      if no_proxy = env[name] || env[name.upcase]
        return nil unless Bundler::URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy)
      end
      Bundler::URI.parse(proxy_uri)
    end

    def self.use_proxy?(hostname, addr, port, no_proxy) # :nodoc:
      hostname = hostname.downcase
      dothostname = ".#{hostname}"
      no_proxy.scan(/([^:,\s]+)(?::(\d+))?/) {|p_host, p_port|
        if !p_port || port == p_port.to_i
          if p_host.start_with?('.')
            return false if hostname.end_with?(p_host.downcase)
          else
            return false if dothostname.end_with?(".#{p_host.downcase}")
          end
          if addr
            begin
              return false if IPAddr.new(p_host).include?(addr)
            rescue IPAddr::InvalidAddressError
              next
            end
          end
        end
      }
      true
    end
  end
end
PK+"#[(@Y�:�:9gems/bundler-2.3.27/lib/bundler/vendor/tsort/lib/tsort.rbnu�[���# frozen_string_literal: true

#--
# tsort.rb - provides a module for topological sorting and strongly connected components.
#++
#

#
# Bundler::TSort implements topological sorting using Tarjan's algorithm for
# strongly connected components.
#
# Bundler::TSort is designed to be able to be used with any object which can be
# interpreted as a directed graph.
#
# Bundler::TSort requires two methods to interpret an object as a graph,
# tsort_each_node and tsort_each_child.
#
# * tsort_each_node is used to iterate for all nodes over a graph.
# * tsort_each_child is used to iterate for child nodes of a given node.
#
# The equality of nodes are defined by eql? and hash since
# Bundler::TSort uses Hash internally.
#
# == A Simple Example
#
# The following example demonstrates how to mix the Bundler::TSort module into an
# existing class (in this case, Hash). Here, we're treating each key in
# the hash as a node in the graph, and so we simply alias the required
# #tsort_each_node method to Hash's #each_key method. For each key in the
# hash, the associated value is an array of the node's child nodes. This
# choice in turn leads to our implementation of the required #tsort_each_child
# method, which fetches the array of child nodes and then iterates over that
# array using the user-supplied block.
#
#   require 'bundler/vendor/tsort/lib/tsort'
#
#   class Hash
#     include Bundler::TSort
#     alias tsort_each_node each_key
#     def tsort_each_child(node, &block)
#       fetch(node).each(&block)
#     end
#   end
#
#   {1=>[2, 3], 2=>[3], 3=>[], 4=>[]}.tsort
#   #=> [3, 2, 1, 4]
#
#   {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}.strongly_connected_components
#   #=> [[4], [2, 3], [1]]
#
# == A More Realistic Example
#
# A very simple `make' like tool can be implemented as follows:
#
#   require 'bundler/vendor/tsort/lib/tsort'
#
#   class Make
#     def initialize
#       @dep = {}
#       @dep.default = []
#     end
#
#     def rule(outputs, inputs=[], &block)
#       triple = [outputs, inputs, block]
#       outputs.each {|f| @dep[f] = [triple]}
#       @dep[triple] = inputs
#     end
#
#     def build(target)
#       each_strongly_connected_component_from(target) {|ns|
#         if ns.length != 1
#           fs = ns.delete_if {|n| Array === n}
#           raise Bundler::TSort::Cyclic.new("cyclic dependencies: #{fs.join ', '}")
#         end
#         n = ns.first
#         if Array === n
#           outputs, inputs, block = n
#           inputs_time = inputs.map {|f| File.mtime f}.max
#           begin
#             outputs_time = outputs.map {|f| File.mtime f}.min
#           rescue Errno::ENOENT
#             outputs_time = nil
#           end
#           if outputs_time == nil ||
#              inputs_time != nil && outputs_time <= inputs_time
#             sleep 1 if inputs_time != nil && inputs_time.to_i == Time.now.to_i
#             block.call
#           end
#         end
#       }
#     end
#
#     def tsort_each_child(node, &block)
#       @dep[node].each(&block)
#     end
#     include Bundler::TSort
#   end
#
#   def command(arg)
#     print arg, "\n"
#     system arg
#   end
#
#   m = Make.new
#   m.rule(%w[t1]) { command 'date > t1' }
#   m.rule(%w[t2]) { command 'date > t2' }
#   m.rule(%w[t3]) { command 'date > t3' }
#   m.rule(%w[t4], %w[t1 t3]) { command 'cat t1 t3 > t4' }
#   m.rule(%w[t5], %w[t4 t2]) { command 'cat t4 t2 > t5' }
#   m.build('t5')
#
# == Bugs
#
# * 'tsort.rb' is wrong name because this library uses
#   Tarjan's algorithm for strongly connected components.
#   Although 'strongly_connected_components.rb' is correct but too long.
#
# == References
#
# R. E. Tarjan, "Depth First Search and Linear Graph Algorithms",
# <em>SIAM Journal on Computing</em>, Vol. 1, No. 2, pp. 146-160, June 1972.
#

module Bundler::TSort
  class Cyclic < StandardError
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # If there is a cycle, Bundler::TSort::Cyclic is raised.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.tsort #=> [4, 2, 3, 1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.tsort # raises Bundler::TSort::Cyclic
  #
  def tsort
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.tsort(each_node, each_child)
  end

  # Returns a topologically sorted array of nodes.
  # The array is sorted from children to parents, i.e.
  # the first element has no child and the last node has no parent.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  # If there is a cycle, Bundler::TSort::Cyclic is raised.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.tsort(each_node, each_child) #=> [4, 2, 3, 1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.tsort(each_node, each_child) # raises Bundler::TSort::Cyclic
  #
  def self.tsort(each_node, each_child)
    tsort_each(each_node, each_child).to_a
  end

  # The iterator version of the #tsort method.
  # <tt><em>obj</em>.tsort_each</tt> is similar to <tt><em>obj</em>.tsort.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #tsort_each returns +nil+.
  # If there is a cycle, Bundler::TSort::Cyclic is raised.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.tsort_each {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def tsort_each(&block) # :yields: node
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.tsort_each(each_node, each_child, &block)
  end

  # The iterator version of the Bundler::TSort.tsort method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Bundler::TSort.tsort_each(each_node, each_child) {|n| p n }
  #   #=> 4
  #   #   2
  #   #   3
  #   #   1
  #
  def self.tsort_each(each_node, each_child) # :yields: node
    return to_enum(__method__, each_node, each_child) unless block_given?

    each_strongly_connected_component(each_node, each_child) {|component|
      if component.size == 1
        yield component.first
      else
        raise Cyclic.new("topological sort failed: #{component.inspect}")
      end
    }
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2], [3], [1]]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   p graph.strongly_connected_components #=> [[4], [2, 3], [1]]
  #
  def strongly_connected_components
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.strongly_connected_components(each_node, each_child)
  end

  # Returns strongly connected components as an array of arrays of nodes.
  # The array is sorted from children to parents.
  # Each elements of the array represents a strongly connected component.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2], [3], [1]]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   p Bundler::TSort.strongly_connected_components(each_node, each_child)
  #   #=> [[4], [2, 3], [1]]
  #
  def self.strongly_connected_components(each_node, each_child)
    each_strongly_connected_component(each_node, each_child).to_a
  end

  # The iterator version of the #strongly_connected_components method.
  # <tt><em>obj</em>.each_strongly_connected_component</tt> is similar to
  # <tt><em>obj</em>.strongly_connected_components.each</tt>, but
  # modification of _obj_ during the iteration may lead to unexpected results.
  #
  # #each_strongly_connected_component returns +nil+.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def each_strongly_connected_component(&block) # :yields: nodes
    each_node = method(:tsort_each_node)
    each_child = method(:tsort_each_child)
    Bundler::TSort.each_strongly_connected_component(each_node, each_child, &block)
  end

  # The iterator version of the Bundler::TSort.strongly_connected_components method.
  #
  # The graph is represented by _each_node_ and _each_child_.
  # _each_node_ should have +call+ method which yields for each node in the graph.
  # _each_child_ should have +call+ method which takes a node argument and yields for each child node.
  #
  #   g = {1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Bundler::TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #   #   [3]
  #   #   [1]
  #
  #   g = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_node = lambda {|&b| g.each_key(&b) }
  #   each_child = lambda {|n, &b| g[n].each(&b) }
  #   Bundler::TSort.each_strongly_connected_component(each_node, each_child) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component(each_node, each_child) # :yields: nodes
    return to_enum(__method__, each_node, each_child) unless block_given?

    id_map = {}
    stack = []
    each_node.call {|node|
      unless id_map.include? node
        each_strongly_connected_component_from(node, each_child, id_map, stack) {|c|
          yield c
        }
      end
    }
    nil
  end

  # Iterates over strongly connected component in the subgraph reachable from
  # _node_.
  #
  # Return value is unspecified.
  #
  # #each_strongly_connected_component_from doesn't call #tsort_each_node.
  #
  #   class G
  #     include Bundler::TSort
  #     def initialize(g)
  #       @g = g
  #     end
  #     def tsort_each_child(n, &b) @g[n].each(&b) end
  #     def tsort_each_node(&b) @g.each_key(&b) end
  #   end
  #
  #   graph = G.new({1=>[2, 3], 2=>[4], 3=>[2, 4], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2]
  #
  #   graph = G.new({1=>[2], 2=>[3, 4], 3=>[2], 4=>[]})
  #   graph.each_strongly_connected_component_from(2) {|scc| p scc }
  #   #=> [4]
  #   #   [2, 3]
  #
  def each_strongly_connected_component_from(node, id_map={}, stack=[], &block) # :yields: nodes
    Bundler::TSort.each_strongly_connected_component_from(node, method(:tsort_each_child), id_map, stack, &block)
  end

  # Iterates over strongly connected components in a graph.
  # The graph is represented by _node_ and _each_child_.
  #
  # _node_ is the first node.
  # _each_child_ should have +call+ method which takes a node argument
  # and yields for each child node.
  #
  # Return value is unspecified.
  #
  # #Bundler::TSort.each_strongly_connected_component_from is a class method and
  # it doesn't need a class to represent a graph which includes Bundler::TSort.
  #
  #   graph = {1=>[2], 2=>[3, 4], 3=>[2], 4=>[]}
  #   each_child = lambda {|n, &b| graph[n].each(&b) }
  #   Bundler::TSort.each_strongly_connected_component_from(1, each_child) {|scc|
  #     p scc
  #   }
  #   #=> [4]
  #   #   [2, 3]
  #   #   [1]
  #
  def self.each_strongly_connected_component_from(node, each_child, id_map={}, stack=[]) # :yields: nodes
    return to_enum(__method__, node, each_child, id_map, stack) unless block_given?

    minimum_id = node_id = id_map[node] = id_map.size
    stack_length = stack.length
    stack << node

    each_child.call(node) {|child|
      if id_map.include? child
        child_id = id_map[child]
        minimum_id = child_id if child_id && child_id < minimum_id
      else
        sub_minimum_id =
          each_strongly_connected_component_from(child, each_child, id_map, stack) {|c|
            yield c
          }
        minimum_id = sub_minimum_id if sub_minimum_id < minimum_id
      end
    }

    if node_id == minimum_id
      component = stack.slice!(stack_length .. -1)
      component.each {|n| id_map[n] = nil}
      yield component
    end

    minimum_id
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_node is used to iterate for all nodes over a graph.
  #
  def tsort_each_node # :yields: node
    raise NotImplementedError.new
  end

  # Should be implemented by a extended class.
  #
  # #tsort_each_child is used to iterate for child nodes of _node_.
  #
  def tsort_each_child(node) # :yields: child
    raise NotImplementedError.new
  end
end
PK+"#[C�}�m�mUgems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rbnu�[���require 'net/http'
require_relative '../../../../uri/lib/uri'
require 'cgi' # for escaping
require_relative '../../../../connection_pool/lib/connection_pool'

autoload :OpenSSL, 'openssl'

##
# Persistent connections for Net::HTTP
#
# Bundler::Persistent::Net::HTTP::Persistent maintains persistent connections across all the
# servers you wish to talk to.  For each host:port you communicate with a
# single persistent connection is created.
#
# Connections will be shared across threads through a connection pool to
# increase reuse of connections.
#
# You can shut down any remaining HTTP connections when done by calling
# #shutdown.
#
# Example:
#
#   require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
#
#   uri = Bundler::URI 'http://example.com/awesome/web/service'
#
#   http = Bundler::Persistent::Net::HTTP::Persistent.new
#
#   # perform a GET
#   response = http.request uri
#
#   # or
#
#   get = Net::HTTP::Get.new uri.request_uri
#   response = http.request get
#
#   # create a POST
#   post_uri = uri + 'create'
#   post = Net::HTTP::Post.new post_uri.path
#   post.set_form_data 'some' => 'cool data'
#
#   # perform the POST, the Bundler::URI is always required
#   response http.request post_uri, post
#
# Note that for GET, HEAD and other requests that do not have a body you want
# to use Bundler::URI#request_uri not Bundler::URI#path.  The request_uri contains the query
# params which are sent in the body for other requests.
#
# == TLS/SSL
#
# TLS connections are automatically created depending upon the scheme of the
# Bundler::URI.  TLS connections are automatically verified against the default
# certificate store for your computer.  You can override this by changing
# verify_mode or by specifying an alternate cert_store.
#
# Here are the TLS settings, see the individual methods for documentation:
#
# #certificate        :: This client's certificate
# #ca_file            :: The certificate-authorities
# #ca_path            :: Directory with certificate-authorities
# #cert_store         :: An SSL certificate store
# #ciphers            :: List of SSl ciphers allowed
# #private_key        :: The client's SSL private key
# #reuse_ssl_sessions :: Reuse a previously opened SSL session for a new
#                        connection
# #ssl_timeout        :: Session lifetime
# #ssl_version        :: Which specific SSL version to use
# #verify_callback    :: For server certificate verification
# #verify_depth       :: Depth of certificate verification
# #verify_mode        :: How connections should be verified
#
# == Proxies
#
# A proxy can be set through #proxy= or at initialization time by providing a
# second argument to ::new.  The proxy may be the Bundler::URI of the proxy server or
# <code>:ENV</code> which will consult environment variables.
#
# See #proxy= and #proxy_from_env for details.
#
# == Headers
#
# Headers may be specified for use in every request.  #headers are appended to
# any headers on the request.  #override_headers replace existing headers on
# the request.
#
# The difference between the two can be seen in setting the User-Agent.  Using
# <code>http.headers['User-Agent'] = 'MyUserAgent'</code> will send "Ruby,
# MyUserAgent" while <code>http.override_headers['User-Agent'] =
# 'MyUserAgent'</code> will send "MyUserAgent".
#
# == Tuning
#
# === Segregation
#
# Each Bundler::Persistent::Net::HTTP::Persistent instance has its own pool of connections.  There
# is no sharing with other instances (as was true in earlier versions).
#
# === Idle Timeout
#
# If a connection hasn't been used for this number of seconds it will
# automatically be reset upon the next use to avoid attempting to send to a
# closed connection.  The default value is 5 seconds. nil means no timeout.
# Set through #idle_timeout.
#
# Reducing this value may help avoid the "too many connection resets" error
# when sending non-idempotent requests while increasing this value will cause
# fewer round-trips.
#
# === Read Timeout
#
# The amount of time allowed between reading two chunks from the socket.  Set
# through #read_timeout
#
# === Max Requests
#
# The number of requests that should be made before opening a new connection.
# Typically many keep-alive capable servers tune this to 100 or less, so the
# 101st request will fail with ECONNRESET. If unset (default), this value has
# no effect, if set, connections will be reset on the request after
# max_requests.
#
# === Open Timeout
#
# The amount of time to wait for a connection to be opened.  Set through
# #open_timeout.
#
# === Socket Options
#
# Socket options may be set on newly-created connections.  See #socket_options
# for details.
#
# === Connection Termination
#
# If you are done using the Bundler::Persistent::Net::HTTP::Persistent instance you may shut down
# all the connections in the current thread with #shutdown.  This is not
# recommended for normal use, it should only be used when it will be several
# minutes before you make another HTTP request.
#
# If you are using multiple threads, call #shutdown in each thread when the
# thread is done making requests.  If you don't call shutdown, that's OK.
# Ruby will automatically garbage collect and shutdown your HTTP connections
# when the thread terminates.

class Bundler::Persistent::Net::HTTP::Persistent

  ##
  # The beginning of Time

  EPOCH = Time.at 0 # :nodoc:

  ##
  # Is OpenSSL available?  This test works with autoload

  HAVE_OPENSSL = defined? OpenSSL::SSL # :nodoc:

  ##
  # The default connection pool size is 1/4 the allowed open files
  # (<code>ulimit -n</code>) or 256 if your OS does not support file handle
  # limits (typically windows).

  if Process.const_defined? :RLIMIT_NOFILE
    open_file_limits = Process.getrlimit(Process::RLIMIT_NOFILE)

    # Under JRuby on Windows Process responds to `getrlimit` but returns something that does not match docs
    if open_file_limits.respond_to?(:first)
      DEFAULT_POOL_SIZE = open_file_limits.first / 4
    else
      DEFAULT_POOL_SIZE = 256
    end
  else
    DEFAULT_POOL_SIZE = 256
  end

  ##
  # The version of Bundler::Persistent::Net::HTTP::Persistent you are using

  VERSION = '4.0.0'

  ##
  # Error class for errors raised by Bundler::Persistent::Net::HTTP::Persistent.  Various
  # SystemCallErrors are re-raised with a human-readable message under this
  # class.

  class Error < StandardError; end

  ##
  # Use this method to detect the idle timeout of the host at +uri+.  The
  # value returned can be used to configure #idle_timeout.  +max+ controls the
  # maximum idle timeout to detect.
  #
  # After
  #
  # Idle timeout detection is performed by creating a connection then
  # performing a HEAD request in a loop until the connection terminates
  # waiting one additional second per loop.
  #
  # NOTE:  This may not work on ruby > 1.9.

  def self.detect_idle_timeout uri, max = 10
    uri = Bundler::URI uri unless Bundler::URI::Generic === uri
    uri += '/'

    req = Net::HTTP::Head.new uri.request_uri

    http = new 'net-http-persistent detect_idle_timeout'

    http.connection_for uri do |connection|
      sleep_time = 0

      http = connection.http

      loop do
        response = http.request req

        $stderr.puts "HEAD #{uri} => #{response.code}" if $DEBUG

        unless Net::HTTPOK === response then
          raise Error, "bad response code #{response.code} detecting idle timeout"
        end

        break if sleep_time >= max

        sleep_time += 1

        $stderr.puts "sleeping #{sleep_time}" if $DEBUG
        sleep sleep_time
      end
    end
  rescue
    # ignore StandardErrors, we've probably found the idle timeout.
  ensure
    return sleep_time unless $!
  end

  ##
  # This client's OpenSSL::X509::Certificate

  attr_reader :certificate

  ##
  # For Net::HTTP parity

  alias cert certificate

  ##
  # An SSL certificate authority.  Setting this will set verify_mode to
  # VERIFY_PEER.

  attr_reader :ca_file

  ##
  # A directory of SSL certificates to be used as certificate authorities.
  # Setting this will set verify_mode to VERIFY_PEER.

  attr_reader :ca_path

  ##
  # An SSL certificate store.  Setting this will override the default
  # certificate store.  See verify_mode for more information.

  attr_reader :cert_store

  ##
  # The ciphers allowed for SSL connections

  attr_reader :ciphers

  ##
  # Sends debug_output to this IO via Net::HTTP#set_debug_output.
  #
  # Never use this method in production code, it causes a serious security
  # hole.

  attr_accessor :debug_output

  ##
  # Current connection generation

  attr_reader :generation # :nodoc:

  ##
  # Headers that are added to every request using Net::HTTP#add_field

  attr_reader :headers

  ##
  # Maps host:port to an HTTP version.  This allows us to enable version
  # specific features.

  attr_reader :http_versions

  ##
  # Maximum time an unused connection can remain idle before being
  # automatically closed.

  attr_accessor :idle_timeout

  ##
  # Maximum number of requests on a connection before it is considered expired
  # and automatically closed.

  attr_accessor :max_requests

  ##
  # Number of retries to perform if a request fails.
  #
  # See also #max_retries=, Net::HTTP#max_retries=.

  attr_reader :max_retries

  ##
  # The value sent in the Keep-Alive header.  Defaults to 30.  Not needed for
  # HTTP/1.1 servers.
  #
  # This may not work correctly for HTTP/1.0 servers
  #
  # This method may be removed in a future version as RFC 2616 does not
  # require this header.

  attr_accessor :keep_alive

  ##
  # The name for this collection of persistent connections.

  attr_reader :name

  ##
  # Seconds to wait until a connection is opened.  See Net::HTTP#open_timeout

  attr_accessor :open_timeout

  ##
  # Headers that are added to every request using Net::HTTP#[]=

  attr_reader :override_headers

  ##
  # This client's SSL private key

  attr_reader :private_key

  ##
  # For Net::HTTP parity

  alias key private_key

  ##
  # The URL through which requests will be proxied

  attr_reader :proxy_uri

  ##
  # List of host suffixes which will not be proxied

  attr_reader :no_proxy

  ##
  # Test-only accessor for the connection pool

  attr_reader :pool # :nodoc:

  ##
  # Seconds to wait until reading one block.  See Net::HTTP#read_timeout

  attr_accessor :read_timeout

  ##
  # Seconds to wait until writing one block.  See Net::HTTP#write_timeout

  attr_accessor :write_timeout

  ##
  # By default SSL sessions are reused to avoid extra SSL handshakes.  Set
  # this to false if you have problems communicating with an HTTPS server
  # like:
  #
  #   SSL_connect [...] read finished A: unexpected message (OpenSSL::SSL::SSLError)

  attr_accessor :reuse_ssl_sessions

  ##
  # An array of options for Socket#setsockopt.
  #
  # By default the TCP_NODELAY option is set on sockets.
  #
  # To set additional options append them to this array:
  #
  #   http.socket_options << [Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1]

  attr_reader :socket_options

  ##
  # Current SSL connection generation

  attr_reader :ssl_generation # :nodoc:

  ##
  # SSL session lifetime

  attr_reader :ssl_timeout

  ##
  # SSL version to use.
  #
  # By default, the version will be negotiated automatically between client
  # and server.  Ruby 1.9 and newer only. Deprecated since Ruby 2.5.

  attr_reader :ssl_version

  ##
  # Minimum SSL version to use, e.g. :TLS1_1
  #
  # By default, the version will be negotiated automatically between client
  # and server.  Ruby 2.5 and newer only.

  attr_reader :min_version

  ##
  # Maximum SSL version to use, e.g. :TLS1_2
  #
  # By default, the version will be negotiated automatically between client
  # and server.  Ruby 2.5 and newer only.

  attr_reader :max_version

  ##
  # Where this instance's last-use times live in the thread local variables

  attr_reader :timeout_key # :nodoc:

  ##
  # SSL verification callback.  Used when ca_file or ca_path is set.

  attr_reader :verify_callback

  ##
  # Sets the depth of SSL certificate verification

  attr_reader :verify_depth

  ##
  # HTTPS verify mode.  Defaults to OpenSSL::SSL::VERIFY_PEER which verifies
  # the server certificate.
  #
  # If no ca_file, ca_path or cert_store is set the default system certificate
  # store is used.
  #
  # You can use +verify_mode+ to override any default values.

  attr_reader :verify_mode

  ##
  # Creates a new Bundler::Persistent::Net::HTTP::Persistent.
  #
  # Set a +name+ for fun.  Your library name should be good enough, but this
  # otherwise has no purpose.
  #
  # +proxy+ may be set to a Bundler::URI::HTTP or :ENV to pick up proxy options from
  # the environment.  See proxy_from_env for details.
  #
  # In order to use a Bundler::URI for the proxy you may need to do some extra work
  # beyond Bundler::URI parsing if the proxy requires a password:
  #
  #   proxy = Bundler::URI 'http://proxy.example'
  #   proxy.user     = 'AzureDiamond'
  #   proxy.password = 'hunter2'
  #
  # Set +pool_size+ to limit the maximum number of connections allowed.
  # Defaults to 1/4 the number of allowed file handles or 256 if your OS does
  # not support a limit on allowed file handles.  You can have no more than
  # this many threads with active HTTP transactions.

  def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE
    @name = name

    @debug_output     = nil
    @proxy_uri        = nil
    @no_proxy         = []
    @headers          = {}
    @override_headers = {}
    @http_versions    = {}
    @keep_alive       = 30
    @open_timeout     = nil
    @read_timeout     = nil
    @write_timeout    = nil
    @idle_timeout     = 5
    @max_requests     = nil
    @max_retries      = 1
    @socket_options   = []
    @ssl_generation   = 0 # incremented when SSL session variables change

    @socket_options << [Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1] if
      Socket.const_defined? :TCP_NODELAY

    @pool = Bundler::Persistent::Net::HTTP::Persistent::Pool.new size: pool_size do |http_args|
      Bundler::Persistent::Net::HTTP::Persistent::Connection.new Net::HTTP, http_args, @ssl_generation
    end

    @certificate        = nil
    @ca_file            = nil
    @ca_path            = nil
    @ciphers            = nil
    @private_key        = nil
    @ssl_timeout        = nil
    @ssl_version        = nil
    @min_version        = nil
    @max_version        = nil
    @verify_callback    = nil
    @verify_depth       = nil
    @verify_mode        = nil
    @cert_store         = nil

    @generation         = 0 # incremented when proxy Bundler::URI changes

    if HAVE_OPENSSL then
      @verify_mode        = OpenSSL::SSL::VERIFY_PEER
      @reuse_ssl_sessions = OpenSSL::SSL.const_defined? :Session
    end

    self.proxy = proxy if proxy
  end

  ##
  # Sets this client's OpenSSL::X509::Certificate

  def certificate= certificate
    @certificate = certificate

    reconnect_ssl
  end

  # For Net::HTTP parity
  alias cert= certificate=

  ##
  # Sets the SSL certificate authority file.

  def ca_file= file
    @ca_file = file

    reconnect_ssl
  end

  ##
  # Sets the SSL certificate authority path.

  def ca_path= path
    @ca_path = path

    reconnect_ssl
  end

  ##
  # Overrides the default SSL certificate store used for verifying
  # connections.

  def cert_store= store
    @cert_store = store

    reconnect_ssl
  end

  ##
  # The ciphers allowed for SSL connections

  def ciphers= ciphers
    @ciphers = ciphers

    reconnect_ssl
  end

  ##
  # Creates a new connection for +uri+

  def connection_for uri
    use_ssl = uri.scheme.downcase == 'https'

    net_http_args = [uri.hostname, uri.port]

    # I'm unsure if uri.host or uri.hostname should be checked against
    # the proxy bypass list.
    if @proxy_uri and not proxy_bypass? uri.host, uri.port then
      net_http_args.concat @proxy_args
    else
      net_http_args.concat [nil, nil, nil, nil]
    end

    connection = @pool.checkout net_http_args

    http = connection.http

    connection.ressl @ssl_generation if
      connection.ssl_generation != @ssl_generation

    if not http.started? then
      ssl   http if use_ssl
      start http
    elsif expired? connection then
      reset connection
    end

    http.keep_alive_timeout = @idle_timeout  if @idle_timeout
    http.max_retries        = @max_retries   if http.respond_to?(:max_retries=)
    http.read_timeout       = @read_timeout  if @read_timeout
    http.write_timeout      = @write_timeout if
      @write_timeout && http.respond_to?(:write_timeout=)

    return yield connection
  rescue Errno::ECONNREFUSED
    address = http.proxy_address || http.address
    port    = http.proxy_port    || http.port

    raise Error, "connection refused: #{address}:#{port}"
  rescue Errno::EHOSTDOWN
    address = http.proxy_address || http.address
    port    = http.proxy_port    || http.port

    raise Error, "host down: #{address}:#{port}"
  ensure
    @pool.checkin net_http_args
  end

  ##
  # CGI::escape wrapper

  def escape str
    CGI.escape str if str
  end

  ##
  # CGI::unescape wrapper

  def unescape str
    CGI.unescape str if str
  end


  ##
  # Returns true if the connection should be reset due to an idle timeout, or
  # maximum request count, false otherwise.

  def expired? connection
    return true  if     @max_requests && connection.requests >= @max_requests
    return false unless @idle_timeout
    return true  if     @idle_timeout.zero?

    Time.now - connection.last_use > @idle_timeout
  end

  ##
  # Starts the Net::HTTP +connection+

  def start http
    http.set_debug_output @debug_output if @debug_output
    http.open_timeout = @open_timeout if @open_timeout

    http.start

    socket = http.instance_variable_get :@socket

    if socket then # for fakeweb
      @socket_options.each do |option|
        socket.io.setsockopt(*option)
      end
    end
  end

  ##
  # Finishes the Net::HTTP +connection+

  def finish connection
    connection.finish

    connection.http.instance_variable_set :@last_communicated, nil
    connection.http.instance_variable_set :@ssl_session, nil unless
      @reuse_ssl_sessions
  end

  ##
  # Returns the HTTP protocol version for +uri+

  def http_version uri
    @http_versions["#{uri.hostname}:#{uri.port}"]
  end

  ##
  # Adds "http://" to the String +uri+ if it is missing.

  def normalize_uri uri
    (uri =~ /^https?:/) ? uri : "http://#{uri}"
  end

  ##
  # Set the maximum number of retries for a request.
  #
  # Defaults to one retry.
  #
  # Set this to 0 to disable retries.

  def max_retries= retries
    retries = retries.to_int

    raise ArgumentError, "max_retries must be positive" if retries < 0

    @max_retries = retries

    reconnect
  end

  ##
  # Sets this client's SSL private key

  def private_key= key
    @private_key = key

    reconnect_ssl
  end

  # For Net::HTTP parity
  alias key= private_key=

  ##
  # Sets the proxy server.  The +proxy+ may be the Bundler::URI of the proxy server,
  # the symbol +:ENV+ which will read the proxy from the environment or nil to
  # disable use of a proxy.  See #proxy_from_env for details on setting the
  # proxy from the environment.
  #
  # If the proxy Bundler::URI is set after requests have been made, the next request
  # will shut-down and re-open all connections.
  #
  # The +no_proxy+ query parameter can be used to specify hosts which shouldn't
  # be reached via proxy; if set it should be a comma separated list of
  # hostname suffixes, optionally with +:port+ appended, for example
  # <tt>example.com,some.host:8080</tt>.

  def proxy= proxy
    @proxy_uri = case proxy
                 when :ENV      then proxy_from_env
                 when Bundler::URI::HTTP then proxy
                 when nil       then # ignore
                 else raise ArgumentError, 'proxy must be :ENV or a Bundler::URI::HTTP'
                 end

    @no_proxy.clear

    if @proxy_uri then
      @proxy_args = [
        @proxy_uri.hostname,
        @proxy_uri.port,
        unescape(@proxy_uri.user),
        unescape(@proxy_uri.password),
      ]

      @proxy_connection_id = [nil, *@proxy_args].join ':'

      if @proxy_uri.query then
        @no_proxy = CGI.parse(@proxy_uri.query)['no_proxy'].join(',').downcase.split(',').map { |x| x.strip }.reject { |x| x.empty? }
      end
    end

    reconnect
    reconnect_ssl
  end

  ##
  # Creates a Bundler::URI for an HTTP proxy server from ENV variables.
  #
  # If +HTTP_PROXY+ is set a proxy will be returned.
  #
  # If +HTTP_PROXY_USER+ or +HTTP_PROXY_PASS+ are set the Bundler::URI is given the
  # indicated user and password unless HTTP_PROXY contains either of these in
  # the Bundler::URI.
  #
  # The +NO_PROXY+ ENV variable can be used to specify hosts which shouldn't
  # be reached via proxy; if set it should be a comma separated list of
  # hostname suffixes, optionally with +:port+ appended, for example
  # <tt>example.com,some.host:8080</tt>. When set to <tt>*</tt> no proxy will
  # be returned.
  #
  # For Windows users, lowercase ENV variables are preferred over uppercase ENV
  # variables.

  def proxy_from_env
    env_proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']

    return nil if env_proxy.nil? or env_proxy.empty?

    uri = Bundler::URI normalize_uri env_proxy

    env_no_proxy = ENV['no_proxy'] || ENV['NO_PROXY']

    # '*' is special case for always bypass
    return nil if env_no_proxy == '*'

    if env_no_proxy then
      uri.query = "no_proxy=#{escape(env_no_proxy)}"
    end

    unless uri.user or uri.password then
      uri.user     = escape ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER']
      uri.password = escape ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS']
    end

    uri
  end

  ##
  # Returns true when proxy should by bypassed for host.

  def proxy_bypass? host, port
    host = host.downcase
    host_port = [host, port].join ':'

    @no_proxy.each do |name|
      return true if host[-name.length, name.length] == name or
         host_port[-name.length, name.length] == name
    end

    false
  end

  ##
  # Forces reconnection of all HTTP connections, including TLS/SSL
  # connections.

  def reconnect
    @generation += 1
  end

  ##
  # Forces reconnection of only TLS/SSL connections.

  def reconnect_ssl
    @ssl_generation += 1
  end

  ##
  # Finishes then restarts the Net::HTTP +connection+

  def reset connection
    http = connection.http

    finish connection

    start http
  rescue Errno::ECONNREFUSED
    e = Error.new "connection refused: #{http.address}:#{http.port}"
    e.set_backtrace $@
    raise e
  rescue Errno::EHOSTDOWN
    e = Error.new "host down: #{http.address}:#{http.port}"
    e.set_backtrace $@
    raise e
  end

  ##
  # Makes a request on +uri+.  If +req+ is nil a Net::HTTP::Get is performed
  # against +uri+.
  #
  # If a block is passed #request behaves like Net::HTTP#request (the body of
  # the response will not have been read).
  #
  # +req+ must be a Net::HTTPGenericRequest subclass (see Net::HTTP for a list).

  def request uri, req = nil, &block
    uri      = Bundler::URI uri
    req      = request_setup req || uri
    response = nil

    connection_for uri do |connection|
      http = connection.http

      begin
        connection.requests += 1

        response = http.request req, &block

        if req.connection_close? or
          (response.http_version <= '1.0' and
            not response.connection_keep_alive?) or
            response.connection_close? then
          finish connection
        end
      rescue Exception # make sure to close the connection when it was interrupted
        finish connection

        raise
      ensure
        connection.last_use = Time.now
      end
    end

    @http_versions["#{uri.hostname}:#{uri.port}"] ||= response.http_version

    response
  end

  ##
  # Creates a GET request if +req_or_uri+ is a Bundler::URI and adds headers to the
  # request.
  #
  # Returns the request.

  def request_setup req_or_uri # :nodoc:
    req = if req_or_uri.respond_to? 'request_uri' then
            Net::HTTP::Get.new req_or_uri.request_uri
          else
            req_or_uri
          end

    @headers.each do |pair|
      req.add_field(*pair)
    end

    @override_headers.each do |name, value|
      req[name] = value
    end

    unless req['Connection'] then
      req.add_field 'Connection', 'keep-alive'
      req.add_field 'Keep-Alive', @keep_alive
    end

    req
  end

  ##
  # Shuts down all connections
  #
  # *NOTE*: Calling shutdown for can be dangerous!
  #
  # If any thread is still using a connection it may cause an error!  Call
  # #shutdown when you are completely done making requests!

  def shutdown
    @pool.shutdown { |http| http.finish }
  end

  ##
  # Enables SSL on +connection+

  def ssl connection
    connection.use_ssl = true

    connection.ciphers     = @ciphers     if @ciphers
    connection.ssl_timeout = @ssl_timeout if @ssl_timeout
    connection.ssl_version = @ssl_version if @ssl_version
    connection.min_version = @min_version if @min_version
    connection.max_version = @max_version if @max_version

    connection.verify_depth = @verify_depth
    connection.verify_mode  = @verify_mode

    if OpenSSL::SSL::VERIFY_PEER == OpenSSL::SSL::VERIFY_NONE and
       not Object.const_defined?(:I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG) then
      warn <<-WARNING
                             !!!SECURITY WARNING!!!

The SSL HTTP connection to:

  #{connection.address}:#{connection.port}

                           !!!MAY NOT BE VERIFIED!!!

On your platform your OpenSSL implementation is broken.

There is no difference between the values of VERIFY_NONE and VERIFY_PEER.

This means that attempting to verify the security of SSL connections may not
work.  This exposes you to man-in-the-middle exploits, snooping on the
contents of your connection and other dangers to the security of your data.

To disable this warning define the following constant at top-level in your
application:

  I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG = nil

      WARNING
    end

    connection.ca_file = @ca_file if @ca_file
    connection.ca_path = @ca_path if @ca_path

    if @ca_file or @ca_path then
      connection.verify_mode = OpenSSL::SSL::VERIFY_PEER
      connection.verify_callback = @verify_callback if @verify_callback
    end

    if @certificate and @private_key then
      connection.cert = @certificate
      connection.key  = @private_key
    end

    connection.cert_store = if @cert_store then
                              @cert_store
                            else
                              store = OpenSSL::X509::Store.new
                              store.set_default_paths
                              store
                            end
  end

  ##
  # SSL session lifetime

  def ssl_timeout= ssl_timeout
    @ssl_timeout = ssl_timeout

    reconnect_ssl
  end

  ##
  # SSL version to use

  def ssl_version= ssl_version
    @ssl_version = ssl_version

    reconnect_ssl
  end

  ##
  # Minimum SSL version to use

  def min_version= min_version
    @min_version = min_version

    reconnect_ssl
  end

  ##
  # maximum SSL version to use

  def max_version= max_version
    @max_version = max_version

    reconnect_ssl
  end

  ##
  # Sets the depth of SSL certificate verification

  def verify_depth= verify_depth
    @verify_depth = verify_depth

    reconnect_ssl
  end

  ##
  # Sets the HTTPS verify mode.  Defaults to OpenSSL::SSL::VERIFY_PEER.
  #
  # Setting this to VERIFY_NONE is a VERY BAD IDEA and should NEVER be used.
  # Securely transfer the correct certificate and update the default
  # certificate store or set the ca file instead.

  def verify_mode= verify_mode
    @verify_mode = verify_mode

    reconnect_ssl
  end

  ##
  # SSL verification callback.

  def verify_callback= callback
    @verify_callback = callback

    reconnect_ssl
  end
end

require_relative 'persistent/connection'
require_relative 'persistent/pool'

PK+"#[�(ц��`gems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rbnu�[���##
# A Net::HTTP connection wrapper that holds extra information for managing the
# connection's lifetime.

class Bundler::Persistent::Net::HTTP::Persistent::Connection # :nodoc:

  attr_accessor :http

  attr_accessor :last_use

  attr_accessor :requests

  attr_accessor :ssl_generation

  def initialize http_class, http_args, ssl_generation
    @http           = http_class.new(*http_args)
    @ssl_generation = ssl_generation

    reset
  end

  def finish
    @http.finish
  rescue IOError
  ensure
    reset
  end

  def reset
    @last_use = Bundler::Persistent::Net::HTTP::Persistent::EPOCH
    @requests = 0
  end

  def ressl ssl_generation
    @ssl_generation = ssl_generation

    finish
  end

end
PK+"#[hO8��Zgems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rbnu�[���class Bundler::Persistent::Net::HTTP::Persistent::Pool < Bundler::ConnectionPool # :nodoc:

  attr_reader :available # :nodoc:
  attr_reader :key # :nodoc:

  def initialize(options = {}, &block)
    super

    @available = Bundler::Persistent::Net::HTTP::Persistent::TimedStackMulti.new(@size, &block)
    @key = "current-#{@available.object_id}"
  end

  def checkin net_http_args
    stack = Thread.current[@key][net_http_args] ||= []

    raise Bundler::ConnectionPool::Error, 'no connections are checked out' if
      stack.empty?

    conn = stack.pop

    if stack.empty?
      @available.push conn, connection_args: net_http_args

      Thread.current[@key].delete(net_http_args)
      Thread.current[@key] = nil if Thread.current[@key].empty?
    end

    nil
  end

  def checkout net_http_args
    stacks = Thread.current[@key] ||= {}
    stack  = stacks[net_http_args] ||= []

    if stack.empty? then
      conn = @available.pop connection_args: net_http_args
    else
      conn = stack.last
    end

    stack.push conn

    conn
  end

  def shutdown
    Thread.current[@key] = nil
    super
  end
end

require_relative 'timed_stack_multi'

PK+"#[6�lffggems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rbnu�[���class Bundler::Persistent::Net::HTTP::Persistent::TimedStackMulti < Bundler::ConnectionPool::TimedStack # :nodoc:

  ##
  # Returns a new hash that has arrays for keys
  #
  # Using a class method to limit the bindings referenced by the hash's
  # default_proc

  def self.hash_of_arrays # :nodoc:
    Hash.new { |h,k| h[k] = [] }
  end

  def initialize(size = 0, &block)
    super

    @enqueued = 0
    @ques = self.class.hash_of_arrays
    @lru = {}
    @key = :"connection_args-#{object_id}"
  end

  def empty?
    (@created - @enqueued) >= @max
  end

  def length
    @max - @created + @enqueued
  end

  private

  def connection_stored? options = {} # :nodoc:
    !@ques[options[:connection_args]].empty?
  end

  def fetch_connection options = {} # :nodoc:
    connection_args = options[:connection_args]

    @enqueued -= 1
    lru_update connection_args
    @ques[connection_args].pop
  end

  def lru_update connection_args # :nodoc:
    @lru.delete connection_args
    @lru[connection_args] = true
  end

  def shutdown_connections # :nodoc:
    @ques.each_key do |key|
      super connection_args: key
    end
  end

  def store_connection obj, options = {} # :nodoc:
    @ques[options[:connection_args]].push obj
    @enqueued += 1
  end

  def try_create options = {} # :nodoc:
    connection_args = options[:connection_args]

    if @created >= @max && @enqueued >= 1
      oldest, = @lru.first
      @lru.delete oldest
      @ques[oldest].pop

      @created -= 1
    end

    if @created < @max
      @created += 1
      lru_update connection_args
      return @create_block.call(connection_args)
    end
  end

end

PK+"#[���q@q@7gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor.rbnu�[���require_relative "thor/base"

class Bundler::Thor
  $thor_runner ||= false
  class << self
    # Allows for custom "Command" package naming.
    #
    # === Parameters
    # name<String>
    # options<Hash>
    #
    def package_name(name, _ = {})
      @package_name = name.nil? || name == "" ? nil : name
    end

    # Sets the default command when thor is executed without an explicit command to be called.
    #
    # ==== Parameters
    # meth<Symbol>:: name of the default command
    #
    def default_command(meth = nil)
      if meth
        @default_command = meth == :none ? "help" : meth.to_s
      else
        @default_command ||= from_superclass(:default_command, "help")
      end
    end
    alias_method :default_task, :default_command

    # Registers another Bundler::Thor subclass as a command.
    #
    # ==== Parameters
    # klass<Class>:: Bundler::Thor subclass to register
    # command<String>:: Subcommand name to use
    # usage<String>:: Short usage for the subcommand
    # description<String>:: Description for the subcommand
    def register(klass, subcommand_name, usage, description, options = {})
      if klass <= Bundler::Thor::Group
        desc usage, description, options
        define_method(subcommand_name) { |*args| invoke(klass, args) }
      else
        desc usage, description, options
        subcommand subcommand_name, klass
      end
    end

    # Defines the usage and the description of the next command.
    #
    # ==== Parameters
    # usage<String>
    # description<String>
    # options<String>
    #
    def desc(usage, description, options = {})
      if options[:for]
        command = find_and_refresh_command(options[:for])
        command.usage = usage             if usage
        command.description = description if description
      else
        @usage = usage
        @desc = description
        @hide = options[:hide] || false
      end
    end

    # Defines the long description of the next command.
    #
    # ==== Parameters
    # long description<String>
    #
    def long_desc(long_description, options = {})
      if options[:for]
        command = find_and_refresh_command(options[:for])
        command.long_description = long_description if long_description
      else
        @long_desc = long_description
      end
    end

    # Maps an input to a command. If you define:
    #
    #   map "-T" => "list"
    #
    # Running:
    #
    #   thor -T
    #
    # Will invoke the list command.
    #
    # ==== Parameters
    # Hash[String|Array => Symbol]:: Maps the string or the strings in the array to the given command.
    #
    def map(mappings = nil, **kw)
      @map ||= from_superclass(:map, {})

      if mappings && !kw.empty?
        mappings = kw.merge!(mappings)
      else
        mappings ||= kw
      end
      if mappings
        mappings.each do |key, value|
          if key.respond_to?(:each)
            key.each { |subkey| @map[subkey] = value }
          else
            @map[key] = value
          end
        end
      end

      @map
    end

    # Declares the options for the next command to be declared.
    #
    # ==== Parameters
    # Hash[Symbol => Object]:: The hash key is the name of the option and the value
    # is the type of the option. Can be :string, :array, :hash, :boolean, :numeric
    # or :required (string). If you give a value, the type of the value is used.
    #
    def method_options(options = nil)
      @method_options ||= {}
      build_options(options, @method_options) if options
      @method_options
    end

    alias_method :options, :method_options

    # Adds an option to the set of method options. If :for is given as option,
    # it allows you to change the options from a previous defined command.
    #
    #   def previous_command
    #     # magic
    #   end
    #
    #   method_option :foo => :bar, :for => :previous_command
    #
    #   def next_command
    #     # magic
    #   end
    #
    # ==== Parameters
    # name<Symbol>:: The name of the argument.
    # options<Hash>:: Described below.
    #
    # ==== Options
    # :desc     - Description for the argument.
    # :required - If the argument is required or not.
    # :default  - Default value for this argument. It cannot be required and have default values.
    # :aliases  - Aliases for this option.
    # :type     - The type of the argument, can be :string, :hash, :array, :numeric or :boolean.
    # :banner   - String to show on usage notes.
    # :hide     - If you want to hide this option from the help.
    #
    def method_option(name, options = {})
      scope = if options[:for]
        find_and_refresh_command(options[:for]).options
      else
        method_options
      end

      build_option(name, options, scope)
    end
    alias_method :option, :method_option

    # Prints help information for the given command.
    #
    # ==== Parameters
    # shell<Bundler::Thor::Shell>
    # command_name<String>
    #
    def command_help(shell, command_name)
      meth = normalize_command_name(command_name)
      command = all_commands[meth]
      handle_no_command_error(meth) unless command

      shell.say "Usage:"
      shell.say "  #{banner(command).split("\n").join("\n  ")}"
      shell.say
      class_options_help(shell, nil => command.options.values)
      if command.long_description
        shell.say "Description:"
        shell.print_wrapped(command.long_description, :indent => 2)
      else
        shell.say command.description
      end
    end
    alias_method :task_help, :command_help

    # Prints help information for this class.
    #
    # ==== Parameters
    # shell<Bundler::Thor::Shell>
    #
    def help(shell, subcommand = false)
      list = printable_commands(true, subcommand)
      Bundler::Thor::Util.thor_classes_in(self).each do |klass|
        list += klass.printable_commands(false)
      end
      list.sort! { |a, b| a[0] <=> b[0] }

      if defined?(@package_name) && @package_name
        shell.say "#{@package_name} commands:"
      else
        shell.say "Commands:"
      end

      shell.print_table(list, :indent => 2, :truncate => true)
      shell.say
      class_options_help(shell)
    end

    # Returns commands ready to be printed.
    def printable_commands(all = true, subcommand = false)
      (all ? all_commands : commands).map do |_, command|
        next if command.hidden?
        item = []
        item << banner(command, false, subcommand)
        item << (command.description ? "# #{command.description.gsub(/\s+/m, ' ')}" : "")
        item
      end.compact
    end
    alias_method :printable_tasks, :printable_commands

    def subcommands
      @subcommands ||= from_superclass(:subcommands, [])
    end
    alias_method :subtasks, :subcommands

    def subcommand_classes
      @subcommand_classes ||= {}
    end

    def subcommand(subcommand, subcommand_class)
      subcommands << subcommand.to_s
      subcommand_class.subcommand_help subcommand
      subcommand_classes[subcommand.to_s] = subcommand_class

      define_method(subcommand) do |*args|
        args, opts = Bundler::Thor::Arguments.split(args)
        invoke_args = [args, opts, {:invoked_via_subcommand => true, :class_options => options}]
        invoke_args.unshift "help" if opts.delete("--help") || opts.delete("-h")
        invoke subcommand_class, *invoke_args
      end
      subcommand_class.commands.each do |_meth, command|
        command.ancestor_name = subcommand
      end
    end
    alias_method :subtask, :subcommand

    # Extend check unknown options to accept a hash of conditions.
    #
    # === Parameters
    # options<Hash>: A hash containing :only and/or :except keys
    def check_unknown_options!(options = {})
      @check_unknown_options ||= {}
      options.each do |key, value|
        if value
          @check_unknown_options[key] = Array(value)
        else
          @check_unknown_options.delete(key)
        end
      end
      @check_unknown_options
    end

    # Overwrite check_unknown_options? to take subcommands and options into account.
    def check_unknown_options?(config) #:nodoc:
      options = check_unknown_options
      return false unless options

      command = config[:current_command]
      return true unless command

      name = command.name

      if subcommands.include?(name)
        false
      elsif options[:except]
        !options[:except].include?(name.to_sym)
      elsif options[:only]
        options[:only].include?(name.to_sym)
      else
        true
      end
    end

    # Stop parsing of options as soon as an unknown option or a regular
    # argument is encountered.  All remaining arguments are passed to the command.
    # This is useful if you have a command that can receive arbitrary additional
    # options, and where those additional options should not be handled by
    # Bundler::Thor.
    #
    # ==== Example
    #
    # To better understand how this is useful, let's consider a command that calls
    # an external command.  A user may want to pass arbitrary options and
    # arguments to that command.  The command itself also accepts some options,
    # which should be handled by Bundler::Thor.
    #
    #   class_option "verbose",  :type => :boolean
    #   stop_on_unknown_option! :exec
    #   check_unknown_options!  :except => :exec
    #
    #   desc "exec", "Run a shell command"
    #   def exec(*args)
    #     puts "diagnostic output" if options[:verbose]
    #     Kernel.exec(*args)
    #   end
    #
    # Here +exec+ can be called with +--verbose+ to get diagnostic output,
    # e.g.:
    #
    #   $ thor exec --verbose echo foo
    #   diagnostic output
    #   foo
    #
    # But if +--verbose+ is given after +echo+, it is passed to +echo+ instead:
    #
    #   $ thor exec echo --verbose foo
    #   --verbose foo
    #
    # ==== Parameters
    # Symbol ...:: A list of commands that should be affected.
    def stop_on_unknown_option!(*command_names)
      @stop_on_unknown_option = stop_on_unknown_option | command_names
    end

    def stop_on_unknown_option?(command) #:nodoc:
      command && stop_on_unknown_option.include?(command.name.to_sym)
    end

    # Disable the check for required options for the given commands.
    # This is useful if you have a command that does not need the required options
    # to work, like help.
    #
    # ==== Parameters
    # Symbol ...:: A list of commands that should be affected.
    def disable_required_check!(*command_names)
      @disable_required_check = disable_required_check | command_names
    end

    def disable_required_check?(command) #:nodoc:
      command && disable_required_check.include?(command.name.to_sym)
    end

  protected

    def stop_on_unknown_option #:nodoc:
      @stop_on_unknown_option ||= []
    end

    # help command has the required check disabled by default.
    def disable_required_check #:nodoc:
      @disable_required_check ||= [:help]
    end

    # The method responsible for dispatching given the args.
    def dispatch(meth, given_args, given_opts, config) #:nodoc: # rubocop:disable MethodLength
      meth ||= retrieve_command_name(given_args)
      command = all_commands[normalize_command_name(meth)]

      if !command && config[:invoked_via_subcommand]
        # We're a subcommand and our first argument didn't match any of our
        # commands. So we put it back and call our default command.
        given_args.unshift(meth)
        command = all_commands[normalize_command_name(default_command)]
      end

      if command
        args, opts = Bundler::Thor::Options.split(given_args)
        if stop_on_unknown_option?(command) && !args.empty?
          # given_args starts with a non-option, so we treat everything as
          # ordinary arguments
          args.concat opts
          opts.clear
        end
      else
        args = given_args
        opts = nil
        command = dynamic_command_class.new(meth)
      end

      opts = given_opts || opts || []
      config[:current_command] = command
      config[:command_options] = command.options

      instance = new(args, opts, config)
      yield instance if block_given?
      args = instance.args
      trailing = args[Range.new(arguments.size, -1)]
      instance.invoke_command(command, trailing || [])
    end

    # The banner for this class. You can customize it if you are invoking the
    # thor class by another ways which is not the Bundler::Thor::Runner. It receives
    # the command that is going to be invoked and a boolean which indicates if
    # the namespace should be displayed as arguments.
    #
    def banner(command, namespace = nil, subcommand = false)
      command.formatted_usage(self, $thor_runner, subcommand).split("\n").map do |formatted_usage|
        "#{basename} #{formatted_usage}"
      end.join("\n")
    end

    def baseclass #:nodoc:
      Bundler::Thor
    end

    def dynamic_command_class #:nodoc:
      Bundler::Thor::DynamicCommand
    end

    def create_command(meth) #:nodoc:
      @usage ||= nil
      @desc ||= nil
      @long_desc ||= nil
      @hide ||= nil

      if @usage && @desc
        base_class = @hide ? Bundler::Thor::HiddenCommand : Bundler::Thor::Command
        commands[meth] = base_class.new(meth, @desc, @long_desc, @usage, method_options)
        @usage, @desc, @long_desc, @method_options, @hide = nil
        true
      elsif all_commands[meth] || meth == "method_missing"
        true
      else
        puts "[WARNING] Attempted to create command #{meth.inspect} without usage or description. " \
             "Call desc if you want this method to be available as command or declare it inside a " \
             "no_commands{} block. Invoked from #{caller[1].inspect}."
        false
      end
    end
    alias_method :create_task, :create_command

    def initialize_added #:nodoc:
      class_options.merge!(method_options)
      @method_options = nil
    end

    # Retrieve the command name from given args.
    def retrieve_command_name(args) #:nodoc:
      meth = args.first.to_s unless args.empty?
      args.shift if meth && (map[meth] || meth !~ /^\-/)
    end
    alias_method :retrieve_task_name, :retrieve_command_name

    # receives a (possibly nil) command name and returns a name that is in
    # the commands hash. In addition to normalizing aliases, this logic
    # will determine if a shortened command is an unambiguous substring of
    # a command or alias.
    #
    # +normalize_command_name+ also converts names like +animal-prison+
    # into +animal_prison+.
    def normalize_command_name(meth) #:nodoc:
      return default_command.to_s.tr("-", "_") unless meth

      possibilities = find_command_possibilities(meth)
      raise AmbiguousTaskError, "Ambiguous command #{meth} matches [#{possibilities.join(', ')}]" if possibilities.size > 1

      if possibilities.empty?
        meth ||= default_command
      elsif map[meth]
        meth = map[meth]
      else
        meth = possibilities.first
      end

      meth.to_s.tr("-", "_") # treat foo-bar as foo_bar
    end
    alias_method :normalize_task_name, :normalize_command_name

    # this is the logic that takes the command name passed in by the user
    # and determines whether it is an unambiguous substrings of a command or
    # alias name.
    def find_command_possibilities(meth)
      len = meth.to_s.length
      possibilities = all_commands.merge(map).keys.select { |n| meth == n[0, len] }.sort
      unique_possibilities = possibilities.map { |k| map[k] || k }.uniq

      if possibilities.include?(meth)
        [meth]
      elsif unique_possibilities.size == 1
        unique_possibilities
      else
        possibilities
      end
    end
    alias_method :find_task_possibilities, :find_command_possibilities

    def subcommand_help(cmd)
      desc "help [COMMAND]", "Describe subcommands or one specific subcommand"
      class_eval "
        def help(command = nil, subcommand = true); super; end
"
    end
    alias_method :subtask_help, :subcommand_help
  end

  include Bundler::Thor::Base

  map HELP_MAPPINGS => :help

  desc "help [COMMAND]", "Describe available commands or one specific command"
  def help(command = nil, subcommand = false)
    if command
      if self.class.subcommands.include? command
        self.class.subcommand_classes[command].help(shell, true)
      else
        self.class.command_help(shell, command)
      end
    else
      self.class.help(shell, subcommand)
    end
  end
end
PK+"#[D�x�,,?gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/version.rbnu�[���class Bundler::Thor
  VERSION = "1.2.1"
end
PK+"#[U7gR * *?gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions.rbnu�[���require_relative "actions/create_file"
require_relative "actions/create_link"
require_relative "actions/directory"
require_relative "actions/empty_directory"
require_relative "actions/file_manipulation"
require_relative "actions/inject_into_file"

class Bundler::Thor
  module Actions
    attr_accessor :behavior

    def self.included(base) #:nodoc:
      super(base)
      base.extend ClassMethods
    end

    module ClassMethods
      # Hold source paths for one Bundler::Thor instance. source_paths_for_search is the
      # method responsible to gather source_paths from this current class,
      # inherited paths and the source root.
      #
      def source_paths
        @_source_paths ||= []
      end

      # Stores and return the source root for this class
      def source_root(path = nil)
        @_source_root = path if path
        @_source_root ||= nil
      end

      # Returns the source paths in the following order:
      #
      #   1) This class source paths
      #   2) Source root
      #   3) Parents source paths
      #
      def source_paths_for_search
        paths = []
        paths += source_paths
        paths << source_root if source_root
        paths += from_superclass(:source_paths, [])
        paths
      end

      # Add runtime options that help actions execution.
      #
      def add_runtime_options!
        class_option :force, :type => :boolean, :aliases => "-f", :group => :runtime,
                             :desc => "Overwrite files that already exist"

        class_option :pretend, :type => :boolean, :aliases => "-p", :group => :runtime,
                               :desc => "Run but do not make any changes"

        class_option :quiet, :type => :boolean, :aliases => "-q", :group => :runtime,
                             :desc => "Suppress status output"

        class_option :skip, :type => :boolean, :aliases => "-s", :group => :runtime,
                            :desc => "Skip files that already exist"
      end
    end

    # Extends initializer to add more configuration options.
    #
    # ==== Configuration
    # behavior<Symbol>:: The actions default behavior. Can be :invoke or :revoke.
    #                    It also accepts :force, :skip and :pretend to set the behavior
    #                    and the respective option.
    #
    # destination_root<String>:: The root directory needed for some actions.
    #
    def initialize(args = [], options = {}, config = {})
      self.behavior = case config[:behavior].to_s
      when "force", "skip"
        _cleanup_options_and_set(options, config[:behavior])
        :invoke
      when "revoke"
        :revoke
      else
        :invoke
      end

      super
      self.destination_root = config[:destination_root]
    end

    # Wraps an action object and call it accordingly to the thor class behavior.
    #
    def action(instance) #:nodoc:
      if behavior == :revoke
        instance.revoke!
      else
        instance.invoke!
      end
    end

    # Returns the root for this thor class (also aliased as destination root).
    #
    def destination_root
      @destination_stack.last
    end

    # Sets the root for this thor class. Relatives path are added to the
    # directory where the script was invoked and expanded.
    #
    def destination_root=(root)
      @destination_stack ||= []
      @destination_stack[0] = File.expand_path(root || "")
    end

    # Returns the given path relative to the absolute root (ie, root where
    # the script started).
    #
    def relative_to_original_destination_root(path, remove_dot = true)
      root = @destination_stack[0]
      if path.start_with?(root) && [File::SEPARATOR, File::ALT_SEPARATOR, nil, ''].include?(path[root.size..root.size])
        path = path.dup
        path[0...root.size] = '.'
        remove_dot ? (path[2..-1] || "") : path
      else
        path
      end
    end

    # Holds source paths in instance so they can be manipulated.
    #
    def source_paths
      @source_paths ||= self.class.source_paths_for_search
    end

    # Receives a file or directory and search for it in the source paths.
    #
    def find_in_source_paths(file)
      possible_files = [file, file + TEMPLATE_EXTNAME]
      relative_root = relative_to_original_destination_root(destination_root, false)

      source_paths.each do |source|
        possible_files.each do |f|
          source_file = File.expand_path(f, File.join(source, relative_root))
          return source_file if File.exist?(source_file)
        end
      end

      message = "Could not find #{file.inspect} in any of your source paths. ".dup

      unless self.class.source_root
        message << "Please invoke #{self.class.name}.source_root(PATH) with the PATH containing your templates. "
      end

      message << if source_paths.empty?
                   "Currently you have no source paths."
                 else
                   "Your current source paths are: \n#{source_paths.join("\n")}"
                 end

      raise Error, message
    end

    # Do something in the root or on a provided subfolder. If a relative path
    # is given it's referenced from the current root. The full path is yielded
    # to the block you provide. The path is set back to the previous path when
    # the method exits.
    #
    # Returns the value yielded by the block.
    #
    # ==== Parameters
    # dir<String>:: the directory to move to.
    # config<Hash>:: give :verbose => true to log and use padding.
    #
    def inside(dir = "", config = {}, &block)
      verbose = config.fetch(:verbose, false)
      pretend = options[:pretend]

      say_status :inside, dir, verbose
      shell.padding += 1 if verbose
      @destination_stack.push File.expand_path(dir, destination_root)

      # If the directory doesnt exist and we're not pretending
      if !File.exist?(destination_root) && !pretend
        require "fileutils"
        FileUtils.mkdir_p(destination_root)
      end

      result = nil
      if pretend
        # In pretend mode, just yield down to the block
        result = block.arity == 1 ? yield(destination_root) : yield
      else
        require "fileutils"
        FileUtils.cd(destination_root) { result = block.arity == 1 ? yield(destination_root) : yield }
      end

      @destination_stack.pop
      shell.padding -= 1 if verbose
      result
    end

    # Goes to the root and execute the given block.
    #
    def in_root
      inside(@destination_stack.first) { yield }
    end

    # Loads an external file and execute it in the instance binding.
    #
    # ==== Parameters
    # path<String>:: The path to the file to execute. Can be a web address or
    #                a relative path from the source root.
    #
    # ==== Examples
    #
    #   apply "http://gist.github.com/103208"
    #
    #   apply "recipes/jquery.rb"
    #
    def apply(path, config = {})
      verbose = config.fetch(:verbose, true)
      is_uri  = path =~ %r{^https?\://}
      path    = find_in_source_paths(path) unless is_uri

      say_status :apply, path, verbose
      shell.padding += 1 if verbose

      contents = if is_uri
        require "open-uri"
        URI.open(path, "Accept" => "application/x-thor-template", &:read)
      else
        open(path, &:read)
      end

      instance_eval(contents, path)
      shell.padding -= 1 if verbose
    end

    # Executes a command returning the contents of the command.
    #
    # ==== Parameters
    # command<String>:: the command to be executed.
    # config<Hash>:: give :verbose => false to not log the status, :capture => true to hide to output. Specify :with
    #                to append an executable to command execution.
    #
    # ==== Example
    #
    #   inside('vendor') do
    #     run('ln -s ~/edge rails')
    #   end
    #
    def run(command, config = {})
      return unless behavior == :invoke

      destination = relative_to_original_destination_root(destination_root, false)
      desc = "#{command} from #{destination.inspect}"

      if config[:with]
        desc = "#{File.basename(config[:with].to_s)} #{desc}"
        command = "#{config[:with]} #{command}"
      end

      say_status :run, desc, config.fetch(:verbose, true)

      return if options[:pretend]

      env_splat = [config[:env]] if config[:env]

      if config[:capture]
        require "open3"
        result, status = Open3.capture2e(*env_splat, command.to_s)
        success = status.success?
      else
        result = system(*env_splat, command.to_s)
        success = result
      end

      abort if !success && config.fetch(:abort_on_failure, self.class.exit_on_failure?)

      result
    end

    # Executes a ruby script (taking into account WIN32 platform quirks).
    #
    # ==== Parameters
    # command<String>:: the command to be executed.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    def run_ruby_script(command, config = {})
      return unless behavior == :invoke
      run command, config.merge(:with => Bundler::Thor::Util.ruby_command)
    end

    # Run a thor command. A hash of options can be given and it's converted to
    # switches.
    #
    # ==== Parameters
    # command<String>:: the command to be invoked
    # args<Array>:: arguments to the command
    # config<Hash>:: give :verbose => false to not log the status, :capture => true to hide to output.
    #                Other options are given as parameter to Bundler::Thor.
    #
    #
    # ==== Examples
    #
    #   thor :install, "http://gist.github.com/103208"
    #   #=> thor install http://gist.github.com/103208
    #
    #   thor :list, :all => true, :substring => 'rails'
    #   #=> thor list --all --substring=rails
    #
    def thor(command, *args)
      config  = args.last.is_a?(Hash) ? args.pop : {}
      verbose = config.key?(:verbose) ? config.delete(:verbose) : true
      pretend = config.key?(:pretend) ? config.delete(:pretend) : false
      capture = config.key?(:capture) ? config.delete(:capture) : false

      args.unshift(command)
      args.push Bundler::Thor::Options.to_switches(config)
      command = args.join(" ").strip

      run command, :with => :thor, :verbose => verbose, :pretend => pretend, :capture => capture
    end

  protected

    # Allow current root to be shared between invocations.
    #
    def _shared_configuration #:nodoc:
      super.merge!(:destination_root => destination_root)
    end

    def _cleanup_options_and_set(options, key) #:nodoc:
      case options
      when Array
        %w(--force -f --skip -s).each { |i| options.delete(i) }
        options << "--#{key}"
      when Hash
        [:force, :skip, "force", "skip"].each { |i| options.delete(i) }
        options.merge!(key => true)
      end
    end
  end
end
PK+"#[~��3�3Qgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rbnu�[���require "erb"

class Bundler::Thor
  module Actions
    # Copies the file from the relative source to the relative destination. If
    # the destination is not given it's assumed to be equal to the source.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status, and
    #                :mode => :preserve, to preserve the file mode from the source.

    #
    # ==== Examples
    #
    #   copy_file "README", "doc/README"
    #
    #   copy_file "doc/README"
    #
    def copy_file(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source
      source = File.expand_path(find_in_source_paths(source.to_s))

      resulting_destination = create_file destination, nil, config do
        content = File.binread(source)
        content = yield(content) if block
        content
      end
      if config[:mode] == :preserve
        mode = File.stat(source).mode
        chmod(resulting_destination, mode, config)
      end
    end

    # Links the file from the relative source to the relative destination. If
    # the destination is not given it's assumed to be equal to the source.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   link_file "README", "doc/README"
    #
    #   link_file "doc/README"
    #
    def link_file(source, *args)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source
      source = File.expand_path(find_in_source_paths(source.to_s))

      create_link destination, source, config
    end

    # Gets the content at the given address and places it at the given relative
    # destination. If a block is given instead of destination, the content of
    # the url is yielded and used as location.
    #
    # +get+ relies on open-uri, so passing application user input would provide
    # a command injection attack vector.
    #
    # ==== Parameters
    # source<String>:: the address of the given content.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   get "http://gist.github.com/103208", "doc/README"
    #
    #   get "http://gist.github.com/103208" do |content|
    #     content.split("\n").first
    #   end
    #
    def get(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first

      render = if source =~ %r{^https?\://}
        require "open-uri"
        URI.send(:open, source) { |input| input.binmode.read }
      else
        source = File.expand_path(find_in_source_paths(source.to_s))
        open(source) { |input| input.binmode.read }
      end

      destination ||= if block_given?
        block.arity == 1 ? yield(render) : yield
      else
        File.basename(source)
      end

      create_file destination, render, config
    end

    # Gets an ERB template at the relative source, executes it and makes a copy
    # at the relative destination. If the destination is not given it's assumed
    # to be equal to the source removing .tt from the filename.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   template "README", "doc/README"
    #
    #   template "doc/README"
    #
    def template(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source.sub(/#{TEMPLATE_EXTNAME}$/, "")

      source  = File.expand_path(find_in_source_paths(source.to_s))
      context = config.delete(:context) || instance_eval("binding")

      create_file destination, nil, config do
        match = ERB.version.match(/(\d+\.\d+\.\d+)/)
        capturable_erb = if match && match[1] >= "2.2.0" # Ruby 2.6+
          CapturableERB.new(::File.binread(source), :trim_mode => "-", :eoutvar => "@output_buffer")
        else
          CapturableERB.new(::File.binread(source), nil, "-", "@output_buffer")
        end
        content = capturable_erb.tap do |erb|
          erb.filename = source
        end.result(context)
        content = yield(content) if block
        content
      end
    end

    # Changes the mode of the given file or directory.
    #
    # ==== Parameters
    # mode<Integer>:: the file mode
    # path<String>:: the name of the file to change mode
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   chmod "script/server", 0755
    #
    def chmod(path, mode, config = {})
      return unless behavior == :invoke
      path = File.expand_path(path, destination_root)
      say_status :chmod, relative_to_original_destination_root(path), config.fetch(:verbose, true)
      unless options[:pretend]
        require "fileutils"
        FileUtils.chmod_R(mode, path)
      end
    end

    # Prepend text to a file. Since it depends on insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # data<String>:: the data to prepend to the file, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   prepend_to_file 'config/environments/test.rb', 'config.gem "rspec"'
    #
    #   prepend_to_file 'config/environments/test.rb' do
    #     'config.gem "rspec"'
    #   end
    #
    def prepend_to_file(path, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:after] = /\A/
      insert_into_file(path, *(args << config), &block)
    end
    alias_method :prepend_file, :prepend_to_file

    # Append text to a file. Since it depends on insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # data<String>:: the data to append to the file, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   append_to_file 'config/environments/test.rb', 'config.gem "rspec"'
    #
    #   append_to_file 'config/environments/test.rb' do
    #     'config.gem "rspec"'
    #   end
    #
    def append_to_file(path, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:before] = /\z/
      insert_into_file(path, *(args << config), &block)
    end
    alias_method :append_file, :append_to_file

    # Injects text right after the class definition. Since it depends on
    # insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # klass<String|Class>:: the class to be manipulated
    # data<String>:: the data to append to the class, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   inject_into_class "app/controllers/application_controller.rb", "ApplicationController", "  filter_parameter :password\n"
    #
    #   inject_into_class "app/controllers/application_controller.rb", "ApplicationController" do
    #     "  filter_parameter :password\n"
    #   end
    #
    def inject_into_class(path, klass, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:after] = /class #{klass}\n|class #{klass} .*\n/
      insert_into_file(path, *(args << config), &block)
    end

    # Injects text right after the module definition. Since it depends on
    # insert_into_file, it's reversible.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # module_name<String|Class>:: the module to be manipulated
    # data<String>:: the data to append to the class, can be also given as a block.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper", "  def help; 'help'; end\n"
    #
    #   inject_into_module "app/helpers/application_helper.rb", "ApplicationHelper" do
    #     "  def help; 'help'; end\n"
    #   end
    #
    def inject_into_module(path, module_name, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      config[:after] = /module #{module_name}\n|module #{module_name} .*\n/
      insert_into_file(path, *(args << config), &block)
    end

    # Run a regular expression replacement on a file.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # flag<Regexp|String>:: the regexp or string to be replaced
    # replacement<String>:: the replacement, can be also given as a block
    # config<Hash>:: give :verbose => false to not log the status, and
    #                :force => true, to force the replacement regardles of runner behavior.
    #
    # ==== Example
    #
    #   gsub_file 'app/controllers/application_controller.rb', /#\s*(filter_parameter_logging :password)/, '\1'
    #
    #   gsub_file 'README', /rake/, :green do |match|
    #     match << " no more. Use thor!"
    #   end
    #
    def gsub_file(path, flag, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}

      return unless behavior == :invoke || config.fetch(:force, false)

      path = File.expand_path(path, destination_root)
      say_status :gsub, relative_to_original_destination_root(path), config.fetch(:verbose, true)

      unless options[:pretend]
        content = File.binread(path)
        content.gsub!(flag, *args, &block)
        File.open(path, "wb") { |file| file.write(content) }
      end
    end

    # Uncomment all lines matching a given regex.  It will leave the space
    # which existed before the comment hash in tact but will remove any spacing
    # between the comment hash and the beginning of the line.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # flag<Regexp|String>:: the regexp or string used to decide which lines to uncomment
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   uncomment_lines 'config/initializers/session_store.rb', /active_record/
    #
    def uncomment_lines(path, flag, *args)
      flag = flag.respond_to?(:source) ? flag.source : flag

      gsub_file(path, /^(\s*)#[[:blank:]]*(.*#{flag})/, '\1\2', *args)
    end

    # Comment all lines matching a given regex.  It will leave the space
    # which existed before the beginning of the line in tact and will insert
    # a single space after the comment hash.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # flag<Regexp|String>:: the regexp or string used to decide which lines to comment
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   comment_lines 'config/initializers/session_store.rb', /cookie_store/
    #
    def comment_lines(path, flag, *args)
      flag = flag.respond_to?(:source) ? flag.source : flag

      gsub_file(path, /^(\s*)([^#\n]*#{flag})/, '\1# \2', *args)
    end

    # Removes a file at the given location.
    #
    # ==== Parameters
    # path<String>:: path of the file to be changed
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Example
    #
    #   remove_file 'README'
    #   remove_file 'app/controllers/application_controller.rb'
    #
    def remove_file(path, config = {})
      return unless behavior == :invoke
      path = File.expand_path(path, destination_root)

      say_status :remove, relative_to_original_destination_root(path), config.fetch(:verbose, true)
      if !options[:pretend] && (File.exist?(path) || File.symlink?(path))
        require "fileutils"
        ::FileUtils.rm_rf(path)
      end
    end
    alias_method :remove_dir, :remove_file

    attr_accessor :output_buffer
    private :output_buffer, :output_buffer=

  private

    def concat(string)
      @output_buffer.concat(string)
    end

    def capture(*args)
      with_output_buffer { yield(*args) }
    end

    def with_output_buffer(buf = "".dup) #:nodoc:
      raise ArgumentError, "Buffer can not be a frozen object" if buf.frozen?
      old_buffer = output_buffer
      self.output_buffer = buf
      yield
      output_buffer
    ensure
      self.output_buffer = old_buffer
    end

    # Bundler::Thor::Actions#capture depends on what kind of buffer is used in ERB.
    # Thus CapturableERB fixes ERB to use String buffer.
    class CapturableERB < ERB
      def set_eoutvar(compiler, eoutvar = "_erbout")
        compiler.put_cmd = "#{eoutvar}.concat"
        compiler.insert_cmd = "#{eoutvar}.concat"
        compiler.pre_cmd = ["#{eoutvar} = ''.dup"]
        compiler.post_cmd = [eoutvar]
      end
    end
  end
end
PK+"#[mX���
�
Pgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rbnu�[���require_relative "empty_directory"

class Bundler::Thor
  module Actions
    # Injects the given content into a file. Different from gsub_file, this
    # method is reversible.
    #
    # ==== Parameters
    # destination<String>:: Relative path to the destination root
    # data<String>:: Data to add to the file. Can be given as a block.
    # config<Hash>:: give :verbose => false to not log the status and the flag
    #                for injection (:after or :before) or :force => true for
    #                insert two or more times the same content.
    #
    # ==== Examples
    #
    #   insert_into_file "config/environment.rb", "config.gem :thor", :after => "Rails::Initializer.run do |config|\n"
    #
    #   insert_into_file "config/environment.rb", :after => "Rails::Initializer.run do |config|\n" do
    #     gems = ask "Which gems would you like to add?"
    #     gems.split(" ").map{ |gem| "  config.gem :#{gem}" }.join("\n")
    #   end
    #
    WARNINGS = { unchanged_no_flag: 'File unchanged! The supplied flag value not found!' }

    def insert_into_file(destination, *args, &block)
      data = block_given? ? block : args.shift

      config = args.shift || {}
      config[:after] = /\z/ unless config.key?(:before) || config.key?(:after)

      action InjectIntoFile.new(self, destination, data, config)
    end
    alias_method :inject_into_file, :insert_into_file

    class InjectIntoFile < EmptyDirectory #:nodoc:
      attr_reader :replacement, :flag, :behavior

      def initialize(base, destination, data, config)
        super(base, destination, {:verbose => true}.merge(config))

        @behavior, @flag = if @config.key?(:after)
          [:after, @config.delete(:after)]
        else
          [:before, @config.delete(:before)]
        end

        @replacement = data.is_a?(Proc) ? data.call : data
        @flag = Regexp.escape(@flag) unless @flag.is_a?(Regexp)
      end

      def invoke!
        content = if @behavior == :after
          '\0' + replacement
        else
          replacement + '\0'
        end

        if exists?
          if replace!(/#{flag}/, content, config[:force])
            say_status(:invoke)
          else
            say_status(:unchanged, warning: WARNINGS[:unchanged_no_flag], color: :red)
          end
        else
          unless pretend?
            raise Bundler::Thor::Error, "The file #{ destination } does not appear to exist"
          end
        end
      end

      def revoke!
        say_status :revoke

        regexp = if @behavior == :after
          content = '\1\2'
          /(#{flag})(.*)(#{Regexp.escape(replacement)})/m
        else
          content = '\2\3'
          /(#{Regexp.escape(replacement)})(.*)(#{flag})/m
        end

        replace!(regexp, content, true)
      end

    protected

      def say_status(behavior, warning: nil, color: nil)
        status = if behavior == :invoke
          if flag == /\A/
            :prepend
          elsif flag == /\z/
            :append
          else
            :insert
          end
        elsif warning
          warning
        else
          :subtract
        end

        super(status, (color || config[:verbose]))
      end

      # Adds the content to the file.
      #
      def replace!(regexp, string, force)
        content = File.read(destination)
        if force || !content.include?(replacement)
          success = content.gsub!(regexp, string)

          File.open(destination, "wb") { |file| file.write(content) } unless pretend?
          success
        end
      end
    end
  end
end
PK+"#[te�))Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/create_file.rbnu�[���require_relative "empty_directory"

class Bundler::Thor
  module Actions
    # Create a new file relative to the destination root with the given data,
    # which is the return value of a block or a data string.
    #
    # ==== Parameters
    # destination<String>:: the relative path to the destination root.
    # data<String|NilClass>:: the data to append to the file.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   create_file "lib/fun_party.rb" do
    #     hostname = ask("What is the virtual hostname I should use?")
    #     "vhost.name = #{hostname}"
    #   end
    #
    #   create_file "config/apache.conf", "your apache config"
    #
    def create_file(destination, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      data = args.first
      action CreateFile.new(self, destination, block || data.to_s, config)
    end
    alias_method :add_file, :create_file

    # CreateFile is a subset of Template, which instead of rendering a file with
    # ERB, it gets the content from the user.
    #
    class CreateFile < EmptyDirectory #:nodoc:
      attr_reader :data

      def initialize(base, destination, data, config = {})
        @data = data
        super(base, destination, config)
      end

      # Checks if the content of the file at the destination is identical to the rendered result.
      #
      # ==== Returns
      # Boolean:: true if it is identical, false otherwise.
      #
      def identical?
        exists? && File.binread(destination) == render
      end

      # Holds the content to be added to the file.
      #
      def render
        @render ||= if data.is_a?(Proc)
          data.call
        else
          data
        end
      end

      def invoke!
        invoke_with_conflict_check do
          require "fileutils"
          FileUtils.mkdir_p(File.dirname(destination))
          File.open(destination, "wb") { |f| f.write render }
        end
        given_destination
      end

    protected

      # Now on conflict we check if the file is identical or not.
      #
      def on_conflict_behavior(&block)
        if identical?
          say_status :identical, :blue
        else
          options = base.options.merge(config)
          force_or_skip_or_conflict(options[:force], options[:skip], &block)
        end
      end

      # If force is true, run the action, otherwise check if it's not being
      # skipped. If both are false, show the file_collision menu, if the menu
      # returns true, force it, otherwise skip.
      #
      def force_or_skip_or_conflict(force, skip, &block)
        if force
          say_status :force, :yellow
          yield unless pretend?
        elsif skip
          say_status :skip, :yellow
        else
          say_status :conflict, :red
          force_or_skip_or_conflict(force_on_collision?, true, &block)
        end
      end

      # Shows the file collision menu to the user and gets the result.
      #
      def force_on_collision?
        base.shell.file_collision(destination) { render }
      end
    end
  end
end
PK+"#[,;��		Igems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/directory.rbnu�[���require_relative "empty_directory"

class Bundler::Thor
  module Actions
    # Copies recursively the files from source directory to root directory.
    # If any of the files finishes with .tt, it's considered to be a template
    # and is placed in the destination without the extension .tt. If any
    # empty directory is found, it's copied and all .empty_directory files are
    # ignored. If any file name is wrapped within % signs, the text within
    # the % signs will be executed as a method and replaced with the returned
    # value. Let's suppose a doc directory with the following files:
    #
    #   doc/
    #     components/.empty_directory
    #     README
    #     rdoc.rb.tt
    #     %app_name%.rb
    #
    # When invoked as:
    #
    #   directory "doc"
    #
    # It will create a doc directory in the destination with the following
    # files (assuming that the `app_name` method returns the value "blog"):
    #
    #   doc/
    #     components/
    #     README
    #     rdoc.rb
    #     blog.rb
    #
    # <b>Encoded path note:</b> Since Bundler::Thor internals use Object#respond_to? to check if it can
    # expand %something%, this `something` should be a public method in the class calling
    # #directory. If a method is private, Bundler::Thor stack raises PrivateMethodEncodedError.
    #
    # ==== Parameters
    # source<String>:: the relative path to the source root.
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #                If :recursive => false, does not look for paths recursively.
    #                If :mode => :preserve, preserve the file mode from the source.
    #                If :exclude_pattern => /regexp/, prevents copying files that match that regexp.
    #
    # ==== Examples
    #
    #   directory "doc"
    #   directory "doc", "docs", :recursive => false
    #
    def directory(source, *args, &block)
      config = args.last.is_a?(Hash) ? args.pop : {}
      destination = args.first || source
      action Directory.new(self, source, destination || source, config, &block)
    end

    class Directory < EmptyDirectory #:nodoc:
      attr_reader :source

      def initialize(base, source, destination = nil, config = {}, &block)
        @source = File.expand_path(Dir[Util.escape_globs(base.find_in_source_paths(source.to_s))].first)
        @block  = block
        super(base, destination, {:recursive => true}.merge(config))
      end

      def invoke!
        base.empty_directory given_destination, config
        execute!
      end

      def revoke!
        execute!
      end

    protected

      def execute!
        lookup = Util.escape_globs(source)
        lookup = config[:recursive] ? File.join(lookup, "**") : lookup
        lookup = file_level_lookup(lookup)

        files(lookup).sort.each do |file_source|
          next if File.directory?(file_source)
          next if config[:exclude_pattern] && file_source.match(config[:exclude_pattern])
          file_destination = File.join(given_destination, file_source.gsub(source, "."))
          file_destination.gsub!("/./", "/")

          case file_source
          when /\.empty_directory$/
            dirname = File.dirname(file_destination).gsub(%r{/\.$}, "")
            next if dirname == given_destination
            base.empty_directory(dirname, config)
          when /#{TEMPLATE_EXTNAME}$/
            base.template(file_source, file_destination[0..-4], config, &@block)
          else
            base.copy_file(file_source, file_destination, config, &@block)
          end
        end
      end

      def file_level_lookup(previous_lookup)
        File.join(previous_lookup, "*")
      end

      def files(lookup)
        Dir.glob(lookup, File::FNM_DOTMATCH)
      end
    end
  end
end
PK+"#[O�&��Ogems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rbnu�[���class Bundler::Thor
  module Actions
    # Creates an empty directory.
    #
    # ==== Parameters
    # destination<String>:: the relative path to the destination root.
    # config<Hash>:: give :verbose => false to not log the status.
    #
    # ==== Examples
    #
    #   empty_directory "doc"
    #
    def empty_directory(destination, config = {})
      action EmptyDirectory.new(self, destination, config)
    end

    # Class which holds create directory logic. This is the base class for
    # other actions like create_file and directory.
    #
    # This implementation is based in Templater actions, created by Jonas Nicklas
    # and Michael S. Klishin under MIT LICENSE.
    #
    class EmptyDirectory #:nodoc:
      attr_reader :base, :destination, :given_destination, :relative_destination, :config

      # Initializes given the source and destination.
      #
      # ==== Parameters
      # base<Bundler::Thor::Base>:: A Bundler::Thor::Base instance
      # source<String>:: Relative path to the source of this file
      # destination<String>:: Relative path to the destination of this file
      # config<Hash>:: give :verbose => false to not log the status.
      #
      def initialize(base, destination, config = {})
        @base = base
        @config = {:verbose => true}.merge(config)
        self.destination = destination
      end

      # Checks if the destination file already exists.
      #
      # ==== Returns
      # Boolean:: true if the file exists, false otherwise.
      #
      def exists?
        ::File.exist?(destination)
      end

      def invoke!
        invoke_with_conflict_check do
          require "fileutils"
          ::FileUtils.mkdir_p(destination)
        end
      end

      def revoke!
        say_status :remove, :red
        require "fileutils"
        ::FileUtils.rm_rf(destination) if !pretend? && exists?
        given_destination
      end

    protected

      # Shortcut for pretend.
      #
      def pretend?
        base.options[:pretend]
      end

      # Sets the absolute destination value from a relative destination value.
      # It also stores the given and relative destination. Let's suppose our
      # script is being executed on "dest", it sets the destination root to
      # "dest". The destination, given_destination and relative_destination
      # are related in the following way:
      #
      #   inside "bar" do
      #     empty_directory "baz"
      #   end
      #
      #   destination          #=> dest/bar/baz
      #   relative_destination #=> bar/baz
      #   given_destination    #=> baz
      #
      def destination=(destination)
        return unless destination
        @given_destination = convert_encoded_instructions(destination.to_s)
        @destination = ::File.expand_path(@given_destination, base.destination_root)
        @relative_destination = base.relative_to_original_destination_root(@destination)
      end

      # Filenames in the encoded form are converted. If you have a file:
      #
      #   %file_name%.rb
      #
      # It calls #file_name from the base and replaces %-string with the
      # return value (should be String) of #file_name:
      #
      #   user.rb
      #
      # The method referenced can be either public or private.
      #
      def convert_encoded_instructions(filename)
        filename.gsub(/%(.*?)%/) do |initial_string|
          method = $1.strip
          base.respond_to?(method, true) ? base.send(method) : initial_string
        end
      end

      # Receives a hash of options and just execute the block if some
      # conditions are met.
      #
      def invoke_with_conflict_check(&block)
        if exists?
          on_conflict_behavior(&block)
        else
          yield unless pretend?
          say_status :create, :green
        end

        destination
      rescue Errno::EISDIR, Errno::EEXIST
        on_file_clash_behavior
      end

      def on_file_clash_behavior
        say_status :file_clash, :red
      end

      # What to do when the destination file already exists.
      #
      def on_conflict_behavior
        say_status :exist, :blue
      end

      # Shortcut to say_status shell method.
      #
      def say_status(status, color)
        base.shell.say_status status, relative_destination, color if config[:verbose]
      end
    end
  end
end
PK+"#[s	��mmKgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/create_link.rbnu�[���require_relative "create_file"

class Bundler::Thor
  module Actions
    # Create a new file relative to the destination root from the given source.
    #
    # ==== Parameters
    # destination<String>:: the relative path to the destination root.
    # source<String|NilClass>:: the relative path to the source root.
    # config<Hash>:: give :verbose => false to not log the status.
    #   :: give :symbolic => false for hard link.
    #
    # ==== Examples
    #
    #   create_link "config/apache.conf", "/etc/apache.conf"
    #
    def create_link(destination, *args)
      config = args.last.is_a?(Hash) ? args.pop : {}
      source = args.first
      action CreateLink.new(self, destination, source, config)
    end
    alias_method :add_link, :create_link

    # CreateLink is a subset of CreateFile, which instead of taking a block of
    # data, just takes a source string from the user.
    #
    class CreateLink < CreateFile #:nodoc:
      attr_reader :data

      # Checks if the content of the file at the destination is identical to the rendered result.
      #
      # ==== Returns
      # Boolean:: true if it is identical, false otherwise.
      #
      def identical?
        source = File.expand_path(render, File.dirname(destination))
        exists? && File.identical?(source, destination)
      end

      def invoke!
        invoke_with_conflict_check do
          require "fileutils"
          FileUtils.mkdir_p(File.dirname(destination))
          # Create a symlink by default
          config[:symbolic] = true if config[:symbolic].nil?
          File.unlink(destination) if exists?
          if config[:symbolic]
            File.symlink(render, destination)
          else
            File.link(render, destination)
          end
        end
        given_destination
      end

      def exists?
        super || File.symlink?(destination)
      end
    end
  end
end
PK+"#[��}e�
�
=gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/error.rbnu�[���class Bundler::Thor
  Correctable = if defined?(DidYouMean::SpellChecker) && defined?(DidYouMean::Correctable) # rubocop:disable Naming/ConstantName
                  # In order to support versions of Ruby that don't have keyword
                  # arguments, we need our own spell checker class that doesn't take key
                  # words. Even though this code wouldn't be hit because of the check
                  # above, it's still necessary because the interpreter would otherwise be
                  # unable to parse the file.
                  class NoKwargSpellChecker < DidYouMean::SpellChecker # :nodoc:
                    def initialize(dictionary)
                      @dictionary = dictionary
                    end
                  end

                  DidYouMean::Correctable
                end

  # Bundler::Thor::Error is raised when it's caused by wrong usage of thor classes. Those
  # errors have their backtrace suppressed and are nicely shown to the user.
  #
  # Errors that are caused by the developer, like declaring a method which
  # overwrites a thor keyword, SHOULD NOT raise a Bundler::Thor::Error. This way, we
  # ensure that developer errors are shown with full backtrace.
  class Error < StandardError
  end

  # Raised when a command was not found.
  class UndefinedCommandError < Error
    class SpellChecker
      attr_reader :error

      def initialize(error)
        @error = error
      end

      def corrections
        @corrections ||= spell_checker.correct(error.command).map(&:inspect)
      end

      def spell_checker
        NoKwargSpellChecker.new(error.all_commands)
      end
    end

    attr_reader :command, :all_commands

    def initialize(command, all_commands, namespace)
      @command = command
      @all_commands = all_commands

      message = "Could not find command #{command.inspect}"
      message = namespace ? "#{message} in #{namespace.inspect} namespace." : "#{message}."

      super(message)
    end

    prepend Correctable if Correctable
  end
  UndefinedTaskError = UndefinedCommandError

  class AmbiguousCommandError < Error
  end
  AmbiguousTaskError = AmbiguousCommandError

  # Raised when a command was found, but not invoked properly.
  class InvocationError < Error
  end

  class UnknownArgumentError < Error
    class SpellChecker
      attr_reader :error

      def initialize(error)
        @error = error
      end

      def corrections
        @corrections ||=
          error.unknown.flat_map { |unknown| spell_checker.correct(unknown) }.uniq.map(&:inspect)
      end

      def spell_checker
        @spell_checker ||= NoKwargSpellChecker.new(error.switches)
      end
    end

    attr_reader :switches, :unknown

    def initialize(switches, unknown)
      @switches = switches
      @unknown = unknown

      super("Unknown switches #{unknown.map(&:inspect).join(', ')}")
    end

    prepend Correctable if Correctable
  end

  class RequiredArgumentMissingError < InvocationError
  end

  class MalformattedArgumentError < InvocationError
  end

  if Correctable
    if DidYouMean.respond_to?(:correct_error)
      DidYouMean.correct_error(Bundler::Thor::UndefinedCommandError, UndefinedCommandError::SpellChecker)
      DidYouMean.correct_error(Bundler::Thor::UnknownArgumentError, UnknownArgumentError::SpellChecker)
    else
      DidYouMean::SPELL_CHECKERS.merge!(
        'Bundler::Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
        'Bundler::Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
      )
    end
  end
end
PK+"#[Y�t}}Igems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rbnu�[���class Bundler::Thor
  module LineEditor
    class Basic
      attr_reader :prompt, :options

      def self.available?
        true
      end

      def initialize(prompt, options)
        @prompt = prompt
        @options = options
      end

      def readline
        $stdout.print(prompt)
        get_input
      end

    private

      def get_input
        if echo?
          $stdin.gets
        else
          # Lazy-load io/console since it is gem-ified as of 2.3
          require "io/console"
          $stdin.noecho(&:gets)
        end
      end

      def echo?
        options.fetch(:echo, true)
      end
    end
  end
end
PK+"#[�dq=77Lgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rbnu�[���class Bundler::Thor
  module LineEditor
    class Readline < Basic
      def self.available?
        begin
          require "readline"
        rescue LoadError
        end

        Object.const_defined?(:Readline)
      end

      def readline
        if echo?
          ::Readline.completion_append_character = nil
          # rb-readline does not allow Readline.completion_proc= to receive nil.
          if complete = completion_proc
            ::Readline.completion_proc = complete
          end
          ::Readline.readline(prompt, add_to_history?)
        else
          super
        end
      end

    private

      def add_to_history?
        options.fetch(:add_to_history, true)
      end

      def completion_proc
        if use_path_completion?
          proc { |text| PathCompletion.new(text).matches }
        elsif completion_options.any?
          proc do |text|
            completion_options.select { |option| option.start_with?(text) }
          end
        end
      end

      def completion_options
        options.fetch(:limited_to, [])
      end

      def use_path_completion?
        options.fetch(:path, false)
      end

      class PathCompletion
        attr_reader :text
        private :text

        def initialize(text)
          @text = text
        end

        def matches
          relative_matches
        end

      private

        def relative_matches
          absolute_matches.map { |path| path.sub(base_path, "") }
        end

        def absolute_matches
          Dir[glob_pattern].map do |path|
            if File.directory?(path)
              "#{path}/"
            else
              path
            end
          end
        end

        def glob_pattern
          "#{base_path}#{text}*"
        end

        def base_path
          "#{Dir.pwd}/"
        end
      end
    end
  end
end
PK+"#[�LWX#X#<gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/util.rbnu�[���require "rbconfig"

class Bundler::Thor
  module Sandbox #:nodoc:
  end

  # This module holds several utilities:
  #
  # 1) Methods to convert thor namespaces to constants and vice-versa.
  #
  #   Bundler::Thor::Util.namespace_from_thor_class(Foo::Bar::Baz) #=> "foo:bar:baz"
  #
  # 2) Loading thor files and sandboxing:
  #
  #   Bundler::Thor::Util.load_thorfile("~/.thor/foo")
  #
  module Util
    class << self
      # Receives a namespace and search for it in the Bundler::Thor::Base subclasses.
      #
      # ==== Parameters
      # namespace<String>:: The namespace to search for.
      #
      def find_by_namespace(namespace)
        namespace = "default#{namespace}" if namespace.empty? || namespace =~ /^:/
        Bundler::Thor::Base.subclasses.detect { |klass| klass.namespace == namespace }
      end

      # Receives a constant and converts it to a Bundler::Thor namespace. Since Bundler::Thor
      # commands can be added to a sandbox, this method is also responsible for
      # removing the sandbox namespace.
      #
      # This method should not be used in general because it's used to deal with
      # older versions of Bundler::Thor. On current versions, if you need to get the
      # namespace from a class, just call namespace on it.
      #
      # ==== Parameters
      # constant<Object>:: The constant to be converted to the thor path.
      #
      # ==== Returns
      # String:: If we receive Foo::Bar::Baz it returns "foo:bar:baz"
      #
      def namespace_from_thor_class(constant)
        constant = constant.to_s.gsub(/^Bundler::Thor::Sandbox::/, "")
        constant = snake_case(constant).squeeze(":")
        constant
      end

      # Given the contents, evaluate it inside the sandbox and returns the
      # namespaces defined in the sandbox.
      #
      # ==== Parameters
      # contents<String>
      #
      # ==== Returns
      # Array[Object]
      #
      def namespaces_in_content(contents, file = __FILE__)
        old_constants = Bundler::Thor::Base.subclasses.dup
        Bundler::Thor::Base.subclasses.clear

        load_thorfile(file, contents)

        new_constants = Bundler::Thor::Base.subclasses.dup
        Bundler::Thor::Base.subclasses.replace(old_constants)

        new_constants.map!(&:namespace)
        new_constants.compact!
        new_constants
      end

      # Returns the thor classes declared inside the given class.
      #
      def thor_classes_in(klass)
        stringfied_constants = klass.constants.map(&:to_s)
        Bundler::Thor::Base.subclasses.select do |subclass|
          next unless subclass.name
          stringfied_constants.include?(subclass.name.gsub("#{klass.name}::", ""))
        end
      end

      # Receives a string and convert it to snake case. SnakeCase returns snake_case.
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def snake_case(str)
        return str.downcase if str =~ /^[A-Z_]+$/
        str.gsub(/\B[A-Z]/, '_\&').squeeze("_") =~ /_*(.*)/
        $+.downcase
      end

      # Receives a string and convert it to camel case. camel_case returns CamelCase.
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def camel_case(str)
        return str if str !~ /_/ && str =~ /[A-Z]+.*/
        str.split("_").map(&:capitalize).join
      end

      # Receives a namespace and tries to retrieve a Bundler::Thor or Bundler::Thor::Group class
      # from it. It first searches for a class using the all the given namespace,
      # if it's not found, removes the highest entry and searches for the class
      # again. If found, returns the highest entry as the class name.
      #
      # ==== Examples
      #
      #   class Foo::Bar < Bundler::Thor
      #     def baz
      #     end
      #   end
      #
      #   class Baz::Foo < Bundler::Thor::Group
      #   end
      #
      #   Bundler::Thor::Util.namespace_to_thor_class("foo:bar")     #=> Foo::Bar, nil # will invoke default command
      #   Bundler::Thor::Util.namespace_to_thor_class("baz:foo")     #=> Baz::Foo, nil
      #   Bundler::Thor::Util.namespace_to_thor_class("foo:bar:baz") #=> Foo::Bar, "baz"
      #
      # ==== Parameters
      # namespace<String>
      #
      def find_class_and_command_by_namespace(namespace, fallback = true)
        if namespace.include?(":") # look for a namespaced command
          pieces  = namespace.split(":")
          command = pieces.pop
          klass   = Bundler::Thor::Util.find_by_namespace(pieces.join(":"))
        end
        unless klass # look for a Bundler::Thor::Group with the right name
          klass = Bundler::Thor::Util.find_by_namespace(namespace)
          command = nil
        end
        if !klass && fallback # try a command in the default namespace
          command = namespace
          klass   = Bundler::Thor::Util.find_by_namespace("")
        end
        [klass, command]
      end
      alias_method :find_class_and_task_by_namespace, :find_class_and_command_by_namespace

      # Receives a path and load the thor file in the path. The file is evaluated
      # inside the sandbox to avoid namespacing conflicts.
      #
      def load_thorfile(path, content = nil, debug = false)
        content ||= File.binread(path)

        begin
          Bundler::Thor::Sandbox.class_eval(content, path)
        rescue StandardError => e
          $stderr.puts("WARNING: unable to load thorfile #{path.inspect}: #{e.message}")
          if debug
            $stderr.puts(*e.backtrace)
          else
            $stderr.puts(e.backtrace.first)
          end
        end
      end

      def user_home
        @@user_home ||= if ENV["HOME"]
          ENV["HOME"]
        elsif ENV["USERPROFILE"]
          ENV["USERPROFILE"]
        elsif ENV["HOMEDRIVE"] && ENV["HOMEPATH"]
          File.join(ENV["HOMEDRIVE"], ENV["HOMEPATH"])
        elsif ENV["APPDATA"]
          ENV["APPDATA"]
        else
          begin
            File.expand_path("~")
          rescue
            if File::ALT_SEPARATOR
              "C:/"
            else
              "/"
            end
          end
        end
      end

      # Returns the root where thor files are located, depending on the OS.
      #
      def thor_root
        File.join(user_home, ".thor").tr('\\', "/")
      end

      # Returns the files in the thor root. On Windows thor_root will be something
      # like this:
      #
      #   C:\Documents and Settings\james\.thor
      #
      # If we don't #gsub the \ character, Dir.glob will fail.
      #
      def thor_root_glob
        files = Dir["#{escape_globs(thor_root)}/*"]

        files.map! do |file|
          File.directory?(file) ? File.join(file, "main.thor") : file
        end
      end

      # Where to look for Bundler::Thor files.
      #
      def globs_for(path)
        path = escape_globs(path)
        ["#{path}/Thorfile", "#{path}/*.thor", "#{path}/tasks/*.thor", "#{path}/lib/tasks/**/*.thor"]
      end

      # Return the path to the ruby interpreter taking into account multiple
      # installations and windows extensions.
      #
      def ruby_command
        @ruby_command ||= begin
          ruby_name = RbConfig::CONFIG["ruby_install_name"]
          ruby = File.join(RbConfig::CONFIG["bindir"], ruby_name)
          ruby << RbConfig::CONFIG["EXEEXT"]

          # avoid using different name than ruby (on platforms supporting links)
          if ruby_name != "ruby" && File.respond_to?(:readlink)
            begin
              alternate_ruby = File.join(RbConfig::CONFIG["bindir"], "ruby")
              alternate_ruby << RbConfig::CONFIG["EXEEXT"]

              # ruby is a symlink
              if File.symlink? alternate_ruby
                linked_ruby = File.readlink alternate_ruby

                # symlink points to 'ruby_install_name'
                ruby = alternate_ruby if linked_ruby == ruby_name || linked_ruby == ruby
              end
            rescue NotImplementedError # rubocop:disable HandleExceptions
              # just ignore on windows
            end
          end

          # escape string in case path to ruby executable contain spaces.
          ruby.sub!(/.*\s.*/m, '"\&"')
          ruby
        end
      end

      # Returns a string that has had any glob characters escaped.
      # The glob characters are `* ? { } [ ]`.
      #
      # ==== Examples
      #
      #   Bundler::Thor::Util.escape_globs('[apps]')   # => '\[apps\]'
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def escape_globs(path)
        path.to_s.gsub(/[*?{}\[\]]/, '\\\\\\&')
      end

      # Returns a string that has had any HTML characters escaped.
      #
      # ==== Examples
      #
      #   Bundler::Thor::Util.escape_html('<div>')   # => "&lt;div&gt;"
      #
      # ==== Parameters
      # String
      #
      # ==== Returns
      # String
      #
      def escape_html(string)
        CGI.escapeHTML(string)
      end
    end
  end
end
PK+"#[����`�`<gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/base.rbnu�[���require_relative "command"
require_relative "core_ext/hash_with_indifferent_access"
require_relative "error"
require_relative "invocation"
require_relative "nested_context"
require_relative "parser"
require_relative "shell"
require_relative "line_editor"
require_relative "util"

class Bundler::Thor
  autoload :Actions,    File.expand_path("actions", __dir__)
  autoload :RakeCompat, File.expand_path("rake_compat", __dir__)
  autoload :Group,      File.expand_path("group", __dir__)

  # Shortcuts for help.
  HELP_MAPPINGS       = %w(-h -? --help -D)

  # Bundler::Thor methods that should not be overwritten by the user.
  THOR_RESERVED_WORDS = %w(invoke shell options behavior root destination_root relative_root
                           action add_file create_file in_root inside run run_ruby_script)

  TEMPLATE_EXTNAME = ".tt"

  class << self
    def deprecation_warning(message) #:nodoc:
      unless ENV['THOR_SILENCE_DEPRECATION']
        warn "Deprecation warning: #{message}\n" +
          'You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION.'
      end
    end
  end

  module Base
    attr_accessor :options, :parent_options, :args

    # It receives arguments in an Array and two hashes, one for options and
    # other for configuration.
    #
    # Notice that it does not check if all required arguments were supplied.
    # It should be done by the parser.
    #
    # ==== Parameters
    # args<Array[Object]>:: An array of objects. The objects are applied to their
    #                       respective accessors declared with <tt>argument</tt>.
    #
    # options<Hash>:: An options hash that will be available as self.options.
    #                 The hash given is converted to a hash with indifferent
    #                 access, magic predicates (options.skip?) and then frozen.
    #
    # config<Hash>:: Configuration for this Bundler::Thor class.
    #
    def initialize(args = [], local_options = {}, config = {})
      parse_options = self.class.class_options

      # The start method splits inbound arguments at the first argument
      # that looks like an option (starts with - or --). It then calls
      # new, passing in the two halves of the arguments Array as the
      # first two parameters.

      command_options = config.delete(:command_options) # hook for start
      parse_options = parse_options.merge(command_options) if command_options
      if local_options.is_a?(Array)
        array_options = local_options
        hash_options = {}
      else
        # Handle the case where the class was explicitly instantiated
        # with pre-parsed options.
        array_options = []
        hash_options = local_options
      end

      # Let Bundler::Thor::Options parse the options first, so it can remove
      # declared options from the array. This will leave us with
      # a list of arguments that weren't declared.
      stop_on_unknown = self.class.stop_on_unknown_option? config[:current_command]
      disable_required_check = self.class.disable_required_check? config[:current_command]
      opts = Bundler::Thor::Options.new(parse_options, hash_options, stop_on_unknown, disable_required_check)
      self.options = opts.parse(array_options)
      self.options = config[:class_options].merge(options) if config[:class_options]

      # If unknown options are disallowed, make sure that none of the
      # remaining arguments looks like an option.
      opts.check_unknown! if self.class.check_unknown_options?(config)

      # Add the remaining arguments from the options parser to the
      # arguments passed in to initialize. Then remove any positional
      # arguments declared using #argument (this is primarily used
      # by Bundler::Thor::Group). Tis will leave us with the remaining
      # positional arguments.
      to_parse  = args
      to_parse += opts.remaining unless self.class.strict_args_position?(config)

      thor_args = Bundler::Thor::Arguments.new(self.class.arguments)
      thor_args.parse(to_parse).each { |k, v| __send__("#{k}=", v) }
      @args = thor_args.remaining
    end

    class << self
      def included(base) #:nodoc:
        super(base)
        base.extend ClassMethods
        base.send :include, Invocation
        base.send :include, Shell
      end

      # Returns the classes that inherits from Bundler::Thor or Bundler::Thor::Group.
      #
      # ==== Returns
      # Array[Class]
      #
      def subclasses
        @subclasses ||= []
      end

      # Returns the files where the subclasses are kept.
      #
      # ==== Returns
      # Hash[path<String> => Class]
      #
      def subclass_files
        @subclass_files ||= Hash.new { |h, k| h[k] = [] }
      end

      # Whenever a class inherits from Bundler::Thor or Bundler::Thor::Group, we should track the
      # class and the file on Bundler::Thor::Base. This is the method responsible for it.
      #
      def register_klass_file(klass) #:nodoc:
        file = caller[1].match(/(.*):\d+/)[1]
        Bundler::Thor::Base.subclasses << klass unless Bundler::Thor::Base.subclasses.include?(klass)

        file_subclasses = Bundler::Thor::Base.subclass_files[File.expand_path(file)]
        file_subclasses << klass unless file_subclasses.include?(klass)
      end
    end

    module ClassMethods
      def attr_reader(*) #:nodoc:
        no_commands { super }
      end

      def attr_writer(*) #:nodoc:
        no_commands { super }
      end

      def attr_accessor(*) #:nodoc:
        no_commands { super }
      end

      # If you want to raise an error for unknown options, call check_unknown_options!
      # This is disabled by default to allow dynamic invocations.
      def check_unknown_options!
        @check_unknown_options = true
      end

      def check_unknown_options #:nodoc:
        @check_unknown_options ||= from_superclass(:check_unknown_options, false)
      end

      def check_unknown_options?(config) #:nodoc:
        !!check_unknown_options
      end

      # If you want to raise an error when the default value of an option does not match
      # the type call check_default_type!
      # This will be the default; for compatibility a deprecation warning is issued if necessary.
      def check_default_type!
        @check_default_type = true
      end

      # If you want to use defaults that don't match the type of an option,
      # either specify `check_default_type: false` or call `allow_incompatible_default_type!`
      def allow_incompatible_default_type!
        @check_default_type = false
      end

      def check_default_type #:nodoc:
        @check_default_type = from_superclass(:check_default_type, nil) unless defined?(@check_default_type)
        @check_default_type
      end

      # If true, option parsing is suspended as soon as an unknown option or a
      # regular argument is encountered.  All remaining arguments are passed to
      # the command as regular arguments.
      def stop_on_unknown_option?(command_name) #:nodoc:
        false
      end

      # If true, option set will not suspend the execution of the command when
      # a required option is not provided.
      def disable_required_check?(command_name) #:nodoc:
        false
      end

      # If you want only strict string args (useful when cascading thor classes),
      # call strict_args_position! This is disabled by default to allow dynamic
      # invocations.
      def strict_args_position!
        @strict_args_position = true
      end

      def strict_args_position #:nodoc:
        @strict_args_position ||= from_superclass(:strict_args_position, false)
      end

      def strict_args_position?(config) #:nodoc:
        !!strict_args_position
      end

      # Adds an argument to the class and creates an attr_accessor for it.
      #
      # Arguments are different from options in several aspects. The first one
      # is how they are parsed from the command line, arguments are retrieved
      # from position:
      #
      #   thor command NAME
      #
      # Instead of:
      #
      #   thor command --name=NAME
      #
      # Besides, arguments are used inside your code as an accessor (self.argument),
      # while options are all kept in a hash (self.options).
      #
      # Finally, arguments cannot have type :default or :boolean but can be
      # optional (supplying :optional => :true or :required => false), although
      # you cannot have a required argument after a non-required argument. If you
      # try it, an error is raised.
      #
      # ==== Parameters
      # name<Symbol>:: The name of the argument.
      # options<Hash>:: Described below.
      #
      # ==== Options
      # :desc     - Description for the argument.
      # :required - If the argument is required or not.
      # :optional - If the argument is optional or not.
      # :type     - The type of the argument, can be :string, :hash, :array, :numeric.
      # :default  - Default value for this argument. It cannot be required and have default values.
      # :banner   - String to show on usage notes.
      #
      # ==== Errors
      # ArgumentError:: Raised if you supply a required argument after a non required one.
      #
      def argument(name, options = {})
        is_thor_reserved_word?(name, :argument)
        no_commands { attr_accessor name }

        required = if options.key?(:optional)
          !options[:optional]
        elsif options.key?(:required)
          options[:required]
        else
          options[:default].nil?
        end

        remove_argument name

        if required
          arguments.each do |argument|
            next if argument.required?
            raise ArgumentError, "You cannot have #{name.to_s.inspect} as required argument after " \
                                "the non-required argument #{argument.human_name.inspect}."
          end
        end

        options[:required] = required

        arguments << Bundler::Thor::Argument.new(name, options)
      end

      # Returns this class arguments, looking up in the ancestors chain.
      #
      # ==== Returns
      # Array[Bundler::Thor::Argument]
      #
      def arguments
        @arguments ||= from_superclass(:arguments, [])
      end

      # Adds a bunch of options to the set of class options.
      #
      #   class_options :foo => false, :bar => :required, :baz => :string
      #
      # If you prefer more detailed declaration, check class_option.
      #
      # ==== Parameters
      # Hash[Symbol => Object]
      #
      def class_options(options = nil)
        @class_options ||= from_superclass(:class_options, {})
        build_options(options, @class_options) if options
        @class_options
      end

      # Adds an option to the set of class options
      #
      # ==== Parameters
      # name<Symbol>:: The name of the argument.
      # options<Hash>:: Described below.
      #
      # ==== Options
      # :desc::     -- Description for the argument.
      # :required:: -- If the argument is required or not.
      # :default::  -- Default value for this argument.
      # :group::    -- The group for this options. Use by class options to output options in different levels.
      # :aliases::  -- Aliases for this option. <b>Note:</b> Bundler::Thor follows a convention of one-dash-one-letter options. Thus aliases like "-something" wouldn't be parsed; use either "\--something" or "-s" instead.
      # :type::     -- The type of the argument, can be :string, :hash, :array, :numeric or :boolean.
      # :banner::   -- String to show on usage notes.
      # :hide::     -- If you want to hide this option from the help.
      #
      def class_option(name, options = {})
        build_option(name, options, class_options)
      end

      # Removes a previous defined argument. If :undefine is given, undefine
      # accessors as well.
      #
      # ==== Parameters
      # names<Array>:: Arguments to be removed
      #
      # ==== Examples
      #
      #   remove_argument :foo
      #   remove_argument :foo, :bar, :baz, :undefine => true
      #
      def remove_argument(*names)
        options = names.last.is_a?(Hash) ? names.pop : {}

        names.each do |name|
          arguments.delete_if { |a| a.name == name.to_s }
          undef_method name, "#{name}=" if options[:undefine]
        end
      end

      # Removes a previous defined class option.
      #
      # ==== Parameters
      # names<Array>:: Class options to be removed
      #
      # ==== Examples
      #
      #   remove_class_option :foo
      #   remove_class_option :foo, :bar, :baz
      #
      def remove_class_option(*names)
        names.each do |name|
          class_options.delete(name)
        end
      end

      # Defines the group. This is used when thor list is invoked so you can specify
      # that only commands from a pre-defined group will be shown. Defaults to standard.
      #
      # ==== Parameters
      # name<String|Symbol>
      #
      def group(name = nil)
        if name
          @group = name.to_s
        else
          @group ||= from_superclass(:group, "standard")
        end
      end

      # Returns the commands for this Bundler::Thor class.
      #
      # ==== Returns
      # Hash:: An ordered hash with commands names as keys and Bundler::Thor::Command
      #        objects as values.
      #
      def commands
        @commands ||= Hash.new
      end
      alias_method :tasks, :commands

      # Returns the commands for this Bundler::Thor class and all subclasses.
      #
      # ==== Returns
      # Hash:: An ordered hash with commands names as keys and Bundler::Thor::Command
      #        objects as values.
      #
      def all_commands
        @all_commands ||= from_superclass(:all_commands, Hash.new)
        @all_commands.merge!(commands)
      end
      alias_method :all_tasks, :all_commands

      # Removes a given command from this Bundler::Thor class. This is usually done if you
      # are inheriting from another class and don't want it to be available
      # anymore.
      #
      # By default it only remove the mapping to the command. But you can supply
      # :undefine => true to undefine the method from the class as well.
      #
      # ==== Parameters
      # name<Symbol|String>:: The name of the command to be removed
      # options<Hash>:: You can give :undefine => true if you want commands the method
      #                 to be undefined from the class as well.
      #
      def remove_command(*names)
        options = names.last.is_a?(Hash) ? names.pop : {}

        names.each do |name|
          commands.delete(name.to_s)
          all_commands.delete(name.to_s)
          undef_method name if options[:undefine]
        end
      end
      alias_method :remove_task, :remove_command

      # All methods defined inside the given block are not added as commands.
      #
      # So you can do:
      #
      #   class MyScript < Bundler::Thor
      #     no_commands do
      #       def this_is_not_a_command
      #       end
      #     end
      #   end
      #
      # You can also add the method and remove it from the command list:
      #
      #   class MyScript < Bundler::Thor
      #     def this_is_not_a_command
      #     end
      #     remove_command :this_is_not_a_command
      #   end
      #
      def no_commands(&block)
        no_commands_context.enter(&block)
      end

      alias_method :no_tasks, :no_commands

      def no_commands_context
        @no_commands_context ||= NestedContext.new
      end

      def no_commands?
        no_commands_context.entered?
      end

      # Sets the namespace for the Bundler::Thor or Bundler::Thor::Group class. By default the
      # namespace is retrieved from the class name. If your Bundler::Thor class is named
      # Scripts::MyScript, the help method, for example, will be called as:
      #
      #   thor scripts:my_script -h
      #
      # If you change the namespace:
      #
      #   namespace :my_scripts
      #
      # You change how your commands are invoked:
      #
      #   thor my_scripts -h
      #
      # Finally, if you change your namespace to default:
      #
      #   namespace :default
      #
      # Your commands can be invoked with a shortcut. Instead of:
      #
      #   thor :my_command
      #
      def namespace(name = nil)
        if name
          @namespace = name.to_s
        else
          @namespace ||= Bundler::Thor::Util.namespace_from_thor_class(self)
        end
      end

      # Parses the command and options from the given args, instantiate the class
      # and invoke the command. This method is used when the arguments must be parsed
      # from an array. If you are inside Ruby and want to use a Bundler::Thor class, you
      # can simply initialize it:
      #
      #   script = MyScript.new(args, options, config)
      #   script.invoke(:command, first_arg, second_arg, third_arg)
      #
      def start(given_args = ARGV, config = {})
        config[:shell] ||= Bundler::Thor::Base.shell.new
        dispatch(nil, given_args.dup, nil, config)
      rescue Bundler::Thor::Error => e
        config[:debug] || ENV["THOR_DEBUG"] == "1" ? (raise e) : config[:shell].error(e.message)
        exit(false) if exit_on_failure?
      rescue Errno::EPIPE
        # This happens if a thor command is piped to something like `head`,
        # which closes the pipe when it's done reading. This will also
        # mean that if the pipe is closed, further unnecessary
        # computation will not occur.
        exit(true)
      end

      # Allows to use private methods from parent in child classes as commands.
      #
      # ==== Parameters
      #   names<Array>:: Method names to be used as commands
      #
      # ==== Examples
      #
      #   public_command :foo
      #   public_command :foo, :bar, :baz
      #
      def public_command(*names)
        names.each do |name|
          class_eval "def #{name}(*); super end"
        end
      end
      alias_method :public_task, :public_command

      def handle_no_command_error(command, has_namespace = $thor_runner) #:nodoc:
        raise UndefinedCommandError.new(command, all_commands.keys, (namespace if has_namespace))
      end
      alias_method :handle_no_task_error, :handle_no_command_error

      def handle_argument_error(command, error, args, arity) #:nodoc:
        name = [command.ancestor_name, command.name].compact.join(" ")
        msg = "ERROR: \"#{basename} #{name}\" was called with ".dup
        msg << "no arguments"               if     args.empty?
        msg << "arguments " << args.inspect unless args.empty?
        msg << "\nUsage: \"#{banner(command).split("\n").join("\"\n       \"")}\""
        raise InvocationError, msg
      end

      # A flag that makes the process exit with status 1 if any error happens.
      def exit_on_failure?
        Bundler::Thor.deprecation_warning "Bundler::Thor exit with status 0 on errors. To keep this behavior, you must define `exit_on_failure?` in `#{self.name}`"
        false
      end

    protected

      # Prints the class options per group. If an option does not belong to
      # any group, it's printed as Class option.
      #
      def class_options_help(shell, groups = {}) #:nodoc:
        # Group options by group
        class_options.each do |_, value|
          groups[value.group] ||= []
          groups[value.group] << value
        end

        # Deal with default group
        global_options = groups.delete(nil) || []
        print_options(shell, global_options)

        # Print all others
        groups.each do |group_name, options|
          print_options(shell, options, group_name)
        end
      end

      # Receives a set of options and print them.
      def print_options(shell, options, group_name = nil)
        return if options.empty?

        list = []
        padding = options.map { |o| o.aliases.size }.max.to_i * 4

        options.each do |option|
          next if option.hide
          item = [option.usage(padding)]
          item.push(option.description ? "# #{option.description}" : "")

          list << item
          list << ["", "# Default: #{option.default}"] if option.show_default?
          list << ["", "# Possible values: #{option.enum.join(', ')}"] if option.enum
        end

        shell.say(group_name ? "#{group_name} options:" : "Options:")
        shell.print_table(list, :indent => 2)
        shell.say ""
      end

      # Raises an error if the word given is a Bundler::Thor reserved word.
      def is_thor_reserved_word?(word, type) #:nodoc:
        return false unless THOR_RESERVED_WORDS.include?(word.to_s)
        raise "#{word.inspect} is a Bundler::Thor reserved word and cannot be defined as #{type}"
      end

      # Build an option and adds it to the given scope.
      #
      # ==== Parameters
      # name<Symbol>:: The name of the argument.
      # options<Hash>:: Described in both class_option and method_option.
      # scope<Hash>:: Options hash that is being built up
      def build_option(name, options, scope) #:nodoc:
        scope[name] = Bundler::Thor::Option.new(name, {:check_default_type => check_default_type}.merge!(options))
      end

      # Receives a hash of options, parse them and add to the scope. This is a
      # fast way to set a bunch of options:
      #
      #   build_options :foo => true, :bar => :required, :baz => :string
      #
      # ==== Parameters
      # Hash[Symbol => Object]
      def build_options(options, scope) #:nodoc:
        options.each do |key, value|
          scope[key] = Bundler::Thor::Option.parse(key, value)
        end
      end

      # Finds a command with the given name. If the command belongs to the current
      # class, just return it, otherwise dup it and add the fresh copy to the
      # current command hash.
      def find_and_refresh_command(name) #:nodoc:
        if commands[name.to_s]
          commands[name.to_s]
        elsif command = all_commands[name.to_s] # rubocop:disable AssignmentInCondition
          commands[name.to_s] = command.clone
        else
          raise ArgumentError, "You supplied :for => #{name.inspect}, but the command #{name.inspect} could not be found."
        end
      end
      alias_method :find_and_refresh_task, :find_and_refresh_command

      # Everytime someone inherits from a Bundler::Thor class, register the klass
      # and file into baseclass.
      def inherited(klass)
        super(klass)
        Bundler::Thor::Base.register_klass_file(klass)
        klass.instance_variable_set(:@no_commands, 0)
      end

      # Fire this callback whenever a method is added. Added methods are
      # tracked as commands by invoking the create_command method.
      def method_added(meth)
        super(meth)
        meth = meth.to_s

        if meth == "initialize"
          initialize_added
          return
        end

        # Return if it's not a public instance method
        return unless public_method_defined?(meth.to_sym)

        return if no_commands? || !create_command(meth)

        is_thor_reserved_word?(meth, :command)
        Bundler::Thor::Base.register_klass_file(self)
      end

      # Retrieves a value from superclass. If it reaches the baseclass,
      # returns default.
      def from_superclass(method, default = nil)
        if self == baseclass || !superclass.respond_to?(method, true)
          default
        else
          value = superclass.send(method)

          # Ruby implements `dup` on Object, but raises a `TypeError`
          # if the method is called on immediates. As a result, we
          # don't have a good way to check whether dup will succeed
          # without calling it and rescuing the TypeError.
          begin
            value.dup
          rescue TypeError
            value
          end

        end
      end

      #
      # The basename of the program invoking the thor class.
      #
      def basename
        File.basename($PROGRAM_NAME).split(" ").first
      end

      # SIGNATURE: Sets the baseclass. This is where the superclass lookup
      # finishes.
      def baseclass #:nodoc:
      end

      # SIGNATURE: Creates a new command if valid_command? is true. This method is
      # called when a new method is added to the class.
      def create_command(meth) #:nodoc:
      end
      alias_method :create_task, :create_command

      # SIGNATURE: Defines behavior when the initialize method is added to the
      # class.
      def initialize_added #:nodoc:
      end

      # SIGNATURE: The hook invoked by start.
      def dispatch(command, given_args, given_opts, config) #:nodoc:
        raise NotImplementedError
      end
    end
  end
end
PK+"#[��LuvvCgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/rake_compat.rbnu�[���require "rake"
require "rake/dsl_definition"

class Bundler::Thor
  # Adds a compatibility layer to your Bundler::Thor classes which allows you to use
  # rake package tasks. For example, to use rspec rake tasks, one can do:
  #
  #   require 'bundler/vendor/thor/lib/thor/rake_compat'
  #   require 'rspec/core/rake_task'
  #
  #   class Default < Bundler::Thor
  #     include Bundler::Thor::RakeCompat
  #
  #     RSpec::Core::RakeTask.new(:spec) do |t|
  #       t.spec_opts = ['--options', './.rspec']
  #       t.spec_files = FileList['spec/**/*_spec.rb']
  #     end
  #   end
  #
  module RakeCompat
    include Rake::DSL if defined?(Rake::DSL)

    def self.rake_classes
      @rake_classes ||= []
    end

    def self.included(base)
      super(base)
      # Hack. Make rakefile point to invoker, so rdoc task is generated properly.
      rakefile = File.basename(caller[0].match(/(.*):\d+/)[1])
      Rake.application.instance_variable_set(:@rakefile, rakefile)
      rake_classes << base
    end
  end
end

# override task on (main), for compatibility with Rake 0.9
instance_eval do
  alias rake_namespace namespace

  def task(*)
    task = super

    if klass = Bundler::Thor::RakeCompat.rake_classes.last # rubocop:disable AssignmentInCondition
      non_namespaced_name = task.name.split(":").last

      description = non_namespaced_name
      description << task.arg_names.map { |n| n.to_s.upcase }.join(" ")
      description.strip!

      klass.desc description, Rake.application.last_description || non_namespaced_name
      Rake.application.last_description = nil
      klass.send :define_method, non_namespaced_name do |*args|
        Rake::Task[task.name.to_sym].invoke(*args)
      end
    end

    task
  end

  def namespace(name)
    if klass = Bundler::Thor::RakeCompat.rake_classes.last # rubocop:disable AssignmentInCondition
      const_name = Bundler::Thor::Util.camel_case(name.to_s).to_sym
      klass.const_set(const_name, Class.new(Bundler::Thor))
      new_klass = klass.const_get(const_name)
      Bundler::Thor::RakeCompat.rake_classes << new_klass
    end

    super
    Bundler::Thor::RakeCompat.rake_classes.pop
  end
end
PK+"#[u���		]gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rbnu�[���class Bundler::Thor
  module CoreExt #:nodoc:
    # A hash with indifferent access and magic predicates.
    #
    #   hash = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new 'foo' => 'bar', 'baz' => 'bee', 'force' => true
    #
    #   hash[:foo]  #=> 'bar'
    #   hash['foo'] #=> 'bar'
    #   hash.foo?   #=> true
    #
    class HashWithIndifferentAccess < ::Hash #:nodoc:
      def initialize(hash = {})
        super()
        hash.each do |key, value|
          self[convert_key(key)] = value
        end
      end

      def [](key)
        super(convert_key(key))
      end

      def []=(key, value)
        super(convert_key(key), value)
      end

      def delete(key)
        super(convert_key(key))
      end

      def except(*keys)
        dup.tap do |hash|
          keys.each { |key| hash.delete(convert_key(key)) }
        end
      end

      def fetch(key, *args)
        super(convert_key(key), *args)
      end

      def key?(key)
        super(convert_key(key))
      end

      def values_at(*indices)
        indices.map { |key| self[convert_key(key)] }
      end

      def merge(other)
        dup.merge!(other)
      end

      def merge!(other)
        other.each do |key, value|
          self[convert_key(key)] = value
        end
        self
      end

      def reverse_merge(other)
        self.class.new(other).merge(self)
      end

      def reverse_merge!(other_hash)
        replace(reverse_merge(other_hash))
      end

      def replace(other_hash)
        super(other_hash)
      end

      # Convert to a Hash with String keys.
      def to_hash
        Hash.new(default).merge!(self)
      end

    protected

      def convert_key(key)
        key.is_a?(Symbol) ? key.to_s : key
      end

      # Magic predicates. For instance:
      #
      #   options.force?                  # => !!options['force']
      #   options.shebang                 # => "/usr/lib/local/ruby"
      #   options.test_framework?(:rspec) # => options[:test_framework] == :rspec
      #
      def method_missing(method, *args)
        method = method.to_s
        if method =~ /^(\w+)\?$/
          if args.empty?
            !!self[$1]
          else
            self[$1] == args.first
          end
        else
          self[method]
        end
      end
    end
  end
end
PK+"#[(��_b'b'>gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/runner.rbnu�[���require_relative "../thor"
require_relative "group"

require "yaml"
require "digest/md5"
require "pathname"

class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLength
  autoload :OpenURI, "open-uri"

  map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version

  def self.banner(command, all = false, subcommand = false)
    "thor " + command.formatted_usage(self, all, subcommand)
  end

  def self.exit_on_failure?
    true
  end

  # Override Bundler::Thor#help so it can give information about any class and any method.
  #
  def help(meth = nil)
    if meth && !respond_to?(meth)
      initialize_thorfiles(meth)
      klass, command = Bundler::Thor::Util.find_class_and_command_by_namespace(meth)
      self.class.handle_no_command_error(command, false) if klass.nil?
      klass.start(["-h", command].compact, :shell => shell)
    else
      super
    end
  end

  # If a command is not found on Bundler::Thor::Runner, method missing is invoked and
  # Bundler::Thor::Runner is then responsible for finding the command in all classes.
  #
  def method_missing(meth, *args)
    meth = meth.to_s
    initialize_thorfiles(meth)
    klass, command = Bundler::Thor::Util.find_class_and_command_by_namespace(meth)
    self.class.handle_no_command_error(command, false) if klass.nil?
    args.unshift(command) if command
    klass.start(args, :shell => shell)
  end

  desc "install NAME", "Install an optionally named Bundler::Thor file into your system commands"
  method_options :as => :string, :relative => :boolean, :force => :boolean
  def install(name) # rubocop:disable MethodLength
    initialize_thorfiles

    # If a directory name is provided as the argument, look for a 'main.thor'
    # command in said directory.
    begin
      if File.directory?(File.expand_path(name))
        base = File.join(name, "main.thor")
        package = :directory
        contents = open(base, &:read)
      else
        base = name
        package = :file
        contents = open(name, &:read)
      end
    rescue OpenURI::HTTPError
      raise Error, "Error opening URI '#{name}'"
    rescue Errno::ENOENT
      raise Error, "Error opening file '#{name}'"
    end

    say "Your Thorfile contains:"
    say contents

    unless options["force"]
      return false if no?("Do you wish to continue [y/N]?")
    end

    as = options["as"] || begin
      first_line = contents.split("\n")[0]
      (match = first_line.match(/\s*#\s*module:\s*([^\n]*)/)) ? match[1].strip : nil
    end

    unless as
      basename = File.basename(name)
      as = ask("Please specify a name for #{name} in the system repository [#{basename}]:")
      as = basename if as.empty?
    end

    location = if options[:relative] || name =~ %r{^https?://}
      name
    else
      File.expand_path(name)
    end

    thor_yaml[as] = {
      :filename   => Digest::MD5.hexdigest(name + as),
      :location   => location,
      :namespaces => Bundler::Thor::Util.namespaces_in_content(contents, base)
    }

    save_yaml(thor_yaml)
    say "Storing thor file in your system repository"
    destination = File.join(thor_root, thor_yaml[as][:filename])

    if package == :file
      File.open(destination, "w") { |f| f.puts contents }
    else
      require "fileutils"
      FileUtils.cp_r(name, destination)
    end

    thor_yaml[as][:filename] # Indicate success
  end

  desc "version", "Show Bundler::Thor version"
  def version
    require_relative "version"
    say "Bundler::Thor #{Bundler::Thor::VERSION}"
  end

  desc "uninstall NAME", "Uninstall a named Bundler::Thor module"
  def uninstall(name)
    raise Error, "Can't find module '#{name}'" unless thor_yaml[name]
    say "Uninstalling #{name}."
    require "fileutils"
    FileUtils.rm_rf(File.join(thor_root, (thor_yaml[name][:filename]).to_s))

    thor_yaml.delete(name)
    save_yaml(thor_yaml)

    puts "Done."
  end

  desc "update NAME", "Update a Bundler::Thor file from its original location"
  def update(name)
    raise Error, "Can't find module '#{name}'" if !thor_yaml[name] || !thor_yaml[name][:location]

    say "Updating '#{name}' from #{thor_yaml[name][:location]}"

    old_filename = thor_yaml[name][:filename]
    self.options = options.merge("as" => name)

    if File.directory? File.expand_path(name)
      require "fileutils"
      FileUtils.rm_rf(File.join(thor_root, old_filename))

      thor_yaml.delete(old_filename)
      save_yaml(thor_yaml)

      filename = install(name)
    else
      filename = install(thor_yaml[name][:location])
    end

    File.delete(File.join(thor_root, old_filename)) unless filename == old_filename
  end

  desc "installed", "List the installed Bundler::Thor modules and commands"
  method_options :internal => :boolean
  def installed
    initialize_thorfiles(nil, true)
    display_klasses(true, options["internal"])
  end

  desc "list [SEARCH]", "List the available thor commands (--substring means .*SEARCH)"
  method_options :substring => :boolean, :group => :string, :all => :boolean, :debug => :boolean
  def list(search = "")
    initialize_thorfiles

    search = ".*#{search}" if options["substring"]
    search = /^#{search}.*/i
    group  = options[:group] || "standard"

    klasses = Bundler::Thor::Base.subclasses.select do |k|
      (options[:all] || k.group == group) && k.namespace =~ search
    end

    display_klasses(false, false, klasses)
  end

private

  def thor_root
    Bundler::Thor::Util.thor_root
  end

  def thor_yaml
    @thor_yaml ||= begin
      yaml_file = File.join(thor_root, "thor.yml")
      yaml = YAML.load_file(yaml_file) if File.exist?(yaml_file)
      yaml || {}
    end
  end

  # Save the yaml file. If none exists in thor root, creates one.
  #
  def save_yaml(yaml)
    yaml_file = File.join(thor_root, "thor.yml")

    unless File.exist?(yaml_file)
      require "fileutils"
      FileUtils.mkdir_p(thor_root)
      yaml_file = File.join(thor_root, "thor.yml")
      FileUtils.touch(yaml_file)
    end

    File.open(yaml_file, "w") { |f| f.puts yaml.to_yaml }
  end

  # Load the Thorfiles. If relevant_to is supplied, looks for specific files
  # in the thor_root instead of loading them all.
  #
  # By default, it also traverses the current path until find Bundler::Thor files, as
  # described in thorfiles. This look up can be skipped by supplying
  # skip_lookup true.
  #
  def initialize_thorfiles(relevant_to = nil, skip_lookup = false)
    thorfiles(relevant_to, skip_lookup).each do |f|
      Bundler::Thor::Util.load_thorfile(f, nil, options[:debug]) unless Bundler::Thor::Base.subclass_files.keys.include?(File.expand_path(f))
    end
  end

  # Finds Thorfiles by traversing from your current directory down to the root
  # directory of your system. If at any time we find a Bundler::Thor file, we stop.
  #
  # We also ensure that system-wide Thorfiles are loaded first, so local
  # Thorfiles can override them.
  #
  # ==== Example
  #
  # If we start at /Users/wycats/dev/thor ...
  #
  # 1. /Users/wycats/dev/thor
  # 2. /Users/wycats/dev
  # 3. /Users/wycats <-- we find a Thorfile here, so we stop
  #
  # Suppose we start at c:\Documents and Settings\james\dev\thor ...
  #
  # 1. c:\Documents and Settings\james\dev\thor
  # 2. c:\Documents and Settings\james\dev
  # 3. c:\Documents and Settings\james
  # 4. c:\Documents and Settings
  # 5. c:\ <-- no Thorfiles found!
  #
  def thorfiles(relevant_to = nil, skip_lookup = false)
    thorfiles = []

    unless skip_lookup
      Pathname.pwd.ascend do |path|
        thorfiles = Bundler::Thor::Util.globs_for(path).map { |g| Dir[g] }.flatten
        break unless thorfiles.empty?
      end
    end

    files  = (relevant_to ? thorfiles_relevant_to(relevant_to) : Bundler::Thor::Util.thor_root_glob)
    files += thorfiles
    files -= ["#{thor_root}/thor.yml"]

    files.map! do |file|
      File.directory?(file) ? File.join(file, "main.thor") : file
    end
  end

  # Load Thorfiles relevant to the given method. If you provide "foo:bar" it
  # will load all thor files in the thor.yaml that has "foo" e "foo:bar"
  # namespaces registered.
  #
  def thorfiles_relevant_to(meth)
    lookup = [meth, meth.split(":")[0...-1].join(":")]

    files = thor_yaml.select do |_, v|
      v[:namespaces] && !(v[:namespaces] & lookup).empty?
    end

    files.map { |_, v| File.join(thor_root, (v[:filename]).to_s) }
  end

  # Display information about the given klasses. If with_module is given,
  # it shows a table with information extracted from the yaml file.
  #
  def display_klasses(with_modules = false, show_internal = false, klasses = Bundler::Thor::Base.subclasses)
    klasses -= [Bundler::Thor, Bundler::Thor::Runner, Bundler::Thor::Group] unless show_internal

    raise Error, "No Bundler::Thor commands available" if klasses.empty?
    show_modules if with_modules && !thor_yaml.empty?

    list = Hash.new { |h, k| h[k] = [] }
    groups = klasses.select { |k| k.ancestors.include?(Bundler::Thor::Group) }

    # Get classes which inherit from Bundler::Thor
    (klasses - groups).each { |k| list[k.namespace.split(":").first] += k.printable_commands(false) }

    # Get classes which inherit from Bundler::Thor::Base
    groups.map! { |k| k.printable_commands(false).first }
    list["root"] = groups

    # Order namespaces with default coming first
    list = list.sort { |a, b| a[0].sub(/^default/, "") <=> b[0].sub(/^default/, "") }
    list.each { |n, commands| display_commands(n, commands) unless commands.empty? }
  end

  def display_commands(namespace, list) #:nodoc:
    list.sort! { |a, b| a[0] <=> b[0] }

    say shell.set_color(namespace, :blue, true)
    say "-" * namespace.size

    print_table(list, :truncate => true)
    say
  end
  alias_method :display_tasks, :display_commands

  def show_modules #:nodoc:
    info = []
    labels = %w(Modules Namespaces)

    info << labels
    info << ["-" * labels[0].size, "-" * labels[1].size]

    thor_yaml.each do |name, hash|
      info << [name, hash[:namespaces].join(", ")]
    end

    print_table info
    say ""
  end
end
PK+"#[��홇�Cgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/line_editor.rbnu�[���require_relative "line_editor/basic"
require_relative "line_editor/readline"

class Bundler::Thor
  module LineEditor
    def self.readline(prompt, options = {})
      best_available.new(prompt, options).readline
    end

    def self.best_available
      [
        Bundler::Thor::LineEditor::Readline,
        Bundler::Thor::LineEditor::Basic
      ].detect(&:available?)
    end
  end
end
PK+"#[_-[�IIBgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/invocation.rbnu�[���class Bundler::Thor
  module Invocation
    def self.included(base) #:nodoc:
      super(base)
      base.extend ClassMethods
    end

    module ClassMethods
      # This method is responsible for receiving a name and find the proper
      # class and command for it. The key is an optional parameter which is
      # available only in class methods invocations (i.e. in Bundler::Thor::Group).
      def prepare_for_invocation(key, name) #:nodoc:
        case name
        when Symbol, String
          Bundler::Thor::Util.find_class_and_command_by_namespace(name.to_s, !key)
        else
          name
        end
      end
    end

    # Make initializer aware of invocations and the initialization args.
    def initialize(args = [], options = {}, config = {}, &block) #:nodoc:
      @_invocations = config[:invocations] || Hash.new { |h, k| h[k] = [] }
      @_initializer = [args, options, config]
      super
    end

    # Make the current command chain accessible with in a Bundler::Thor-(sub)command
    def current_command_chain
      @_invocations.values.flatten.map(&:to_sym)
    end

    # Receives a name and invokes it. The name can be a string (either "command" or
    # "namespace:command"), a Bundler::Thor::Command, a Class or a Bundler::Thor instance. If the
    # command cannot be guessed by name, it can also be supplied as second argument.
    #
    # You can also supply the arguments, options and configuration values for
    # the command to be invoked, if none is given, the same values used to
    # initialize the invoker are used to initialize the invoked.
    #
    # When no name is given, it will invoke the default command of the current class.
    #
    # ==== Examples
    #
    #   class A < Bundler::Thor
    #     def foo
    #       invoke :bar
    #       invoke "b:hello", ["Erik"]
    #     end
    #
    #     def bar
    #       invoke "b:hello", ["Erik"]
    #     end
    #   end
    #
    #   class B < Bundler::Thor
    #     def hello(name)
    #       puts "hello #{name}"
    #     end
    #   end
    #
    # You can notice that the method "foo" above invokes two commands: "bar",
    # which belongs to the same class and "hello" which belongs to the class B.
    #
    # By using an invocation system you ensure that a command is invoked only once.
    # In the example above, invoking "foo" will invoke "b:hello" just once, even
    # if it's invoked later by "bar" method.
    #
    # When class A invokes class B, all arguments used on A initialization are
    # supplied to B. This allows lazy parse of options. Let's suppose you have
    # some rspec commands:
    #
    #   class Rspec < Bundler::Thor::Group
    #     class_option :mock_framework, :type => :string, :default => :rr
    #
    #     def invoke_mock_framework
    #       invoke "rspec:#{options[:mock_framework]}"
    #     end
    #   end
    #
    # As you noticed, it invokes the given mock framework, which might have its
    # own options:
    #
    #   class Rspec::RR < Bundler::Thor::Group
    #     class_option :style, :type => :string, :default => :mock
    #   end
    #
    # Since it's not rspec concern to parse mock framework options, when RR
    # is invoked all options are parsed again, so RR can extract only the options
    # that it's going to use.
    #
    # If you want Rspec::RR to be initialized with its own set of options, you
    # have to do that explicitly:
    #
    #   invoke "rspec:rr", [], :style => :foo
    #
    # Besides giving an instance, you can also give a class to invoke:
    #
    #   invoke Rspec::RR, [], :style => :foo
    #
    def invoke(name = nil, *args)
      if name.nil?
        warn "[Bundler::Thor] Calling invoke() without argument is deprecated. Please use invoke_all instead.\n#{caller.join("\n")}"
        return invoke_all
      end

      args.unshift(nil) if args.first.is_a?(Array) || args.first.nil?
      command, args, opts, config = args

      klass, command = _retrieve_class_and_command(name, command)
      raise "Missing Bundler::Thor class for invoke #{name}" unless klass
      raise "Expected Bundler::Thor class, got #{klass}" unless klass <= Bundler::Thor::Base

      args, opts, config = _parse_initialization_options(args, opts, config)
      klass.send(:dispatch, command, args, opts, config) do |instance|
        instance.parent_options = options
      end
    end

    # Invoke the given command if the given args.
    def invoke_command(command, *args) #:nodoc:
      current = @_invocations[self.class]

      unless current.include?(command.name)
        current << command.name
        command.run(self, *args)
      end
    end
    alias_method :invoke_task, :invoke_command

    # Invoke all commands for the current instance.
    def invoke_all #:nodoc:
      self.class.all_commands.map { |_, command| invoke_command(command) }
    end

    # Invokes using shell padding.
    def invoke_with_padding(*args)
      with_padding { invoke(*args) }
    end

  protected

    # Configuration values that are shared between invocations.
    def _shared_configuration #:nodoc:
      {:invocations => @_invocations}
    end

    # This method simply retrieves the class and command to be invoked.
    # If the name is nil or the given name is a command in the current class,
    # use the given name and return self as class. Otherwise, call
    # prepare_for_invocation in the current class.
    def _retrieve_class_and_command(name, sent_command = nil) #:nodoc:
      if name.nil?
        [self.class, nil]
      elsif self.class.all_commands[name.to_s]
        [self.class, name.to_s]
      else
        klass, command = self.class.prepare_for_invocation(nil, name)
        [klass, command || sent_command]
      end
    end
    alias_method :_retrieve_class_and_task, :_retrieve_class_and_command

    # Initialize klass using values stored in the @_initializer.
    def _parse_initialization_options(args, opts, config) #:nodoc:
      stored_args, stored_opts, stored_config = @_initializer

      args ||= stored_args.dup
      opts ||= stored_opts.dup

      config ||= {}
      config = stored_config.merge(_shared_configuration).merge!(config)

      [args, opts, config]
    end
  end
end
PK+"#[�Le1	1	=gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell.rbnu�[���require "rbconfig"

class Bundler::Thor
  module Base
    class << self
      attr_writer :shell

      # Returns the shell used in all Bundler::Thor classes. If you are in a Unix platform
      # it will use a colored log, otherwise it will use a basic one without color.
      #
      def shell
        @shell ||= if ENV["THOR_SHELL"] && !ENV["THOR_SHELL"].empty?
          Bundler::Thor::Shell.const_get(ENV["THOR_SHELL"])
        elsif RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ && !ENV["ANSICON"]
          Bundler::Thor::Shell::Basic
        else
          Bundler::Thor::Shell::Color
        end
      end
    end
  end

  module Shell
    SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_error, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
    attr_writer :shell

    autoload :Basic, File.expand_path("shell/basic", __dir__)
    autoload :Color, File.expand_path("shell/color", __dir__)
    autoload :HTML,  File.expand_path("shell/html", __dir__)

    # Add shell to initialize config values.
    #
    # ==== Configuration
    # shell<Object>:: An instance of the shell to be used.
    #
    # ==== Examples
    #
    #   class MyScript < Bundler::Thor
    #     argument :first, :type => :numeric
    #   end
    #
    #   MyScript.new [1.0], { :foo => :bar }, :shell => Bundler::Thor::Shell::Basic.new
    #
    def initialize(args = [], options = {}, config = {})
      super
      self.shell = config[:shell]
      shell.base ||= self if shell.respond_to?(:base)
    end

    # Holds the shell for the given Bundler::Thor instance. If no shell is given,
    # it gets a default shell from Bundler::Thor::Base.shell.
    def shell
      @shell ||= Bundler::Thor::Base.shell.new
    end

    # Common methods that are delegated to the shell.
    SHELL_DELEGATED_METHODS.each do |method|
      module_eval <<-METHOD, __FILE__, __LINE__ + 1
        def #{method}(*args,&block)
          shell.#{method}(*args,&block)
        end
      METHOD
    end

    # Yields the given block with padding.
    def with_padding
      shell.padding += 1
      yield
    ensure
      shell.padding -= 1
    end

  protected

    # Allow shell to be shared between invocations.
    #
    def _shared_configuration #:nodoc:
      super.merge!(:shell => shell)
    end
  end
end
PK+"#[.����Bgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell/html.rbnu�[���require_relative "basic"

class Bundler::Thor
  module Shell
    # Inherit from Bundler::Thor::Shell::Basic and add set_color behavior. Check
    # Bundler::Thor::Shell::Basic to see all available methods.
    #
    class HTML < Basic
      # The start of an HTML bold sequence.
      BOLD       = "font-weight: bold"

      # Set the terminal's foreground HTML color to black.
      BLACK      = "color: black"
      # Set the terminal's foreground HTML color to red.
      RED        = "color: red"
      # Set the terminal's foreground HTML color to green.
      GREEN      = "color: green"
      # Set the terminal's foreground HTML color to yellow.
      YELLOW     = "color: yellow"
      # Set the terminal's foreground HTML color to blue.
      BLUE       = "color: blue"
      # Set the terminal's foreground HTML color to magenta.
      MAGENTA    = "color: magenta"
      # Set the terminal's foreground HTML color to cyan.
      CYAN       = "color: cyan"
      # Set the terminal's foreground HTML color to white.
      WHITE      = "color: white"

      # Set the terminal's background HTML color to black.
      ON_BLACK   = "background-color: black"
      # Set the terminal's background HTML color to red.
      ON_RED     = "background-color: red"
      # Set the terminal's background HTML color to green.
      ON_GREEN   = "background-color: green"
      # Set the terminal's background HTML color to yellow.
      ON_YELLOW  = "background-color: yellow"
      # Set the terminal's background HTML color to blue.
      ON_BLUE    = "background-color: blue"
      # Set the terminal's background HTML color to magenta.
      ON_MAGENTA = "background-color: magenta"
      # Set the terminal's background HTML color to cyan.
      ON_CYAN    = "background-color: cyan"
      # Set the terminal's background HTML color to white.
      ON_WHITE   = "background-color: white"

      # Set color by using a string or one of the defined constants. If a third
      # option is set to true, it also adds bold to the string. This is based
      # on Highline implementation and it automatically appends CLEAR to the end
      # of the returned String.
      #
      def set_color(string, *colors)
        if colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
          html_colors = colors.map { |color| lookup_color(color) }
          "<span style=\"#{html_colors.join('; ')};\">#{Bundler::Thor::Util.escape_html(string)}</span>"
        else
          color, bold = colors
          html_color = self.class.const_get(color.to_s.upcase) if color.is_a?(Symbol)
          styles = [html_color]
          styles << BOLD if bold
          "<span style=\"#{styles.join('; ')};\">#{Bundler::Thor::Util.escape_html(string)}</span>"
        end
      end

      # Ask something to the user and receives a response.
      #
      # ==== Example
      # ask("What is your name?")
      #
      # TODO: Implement #ask for Bundler::Thor::Shell::HTML
      def ask(statement, color = nil)
        raise NotImplementedError, "Implement #ask for Bundler::Thor::Shell::HTML"
      end

    protected

      def can_display_colors?
        true
      end

      # Overwrite show_diff to show diff with colors if Diff::LCS is
      # available.
      #
      def show_diff(destination, content) #:nodoc:
        if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
          actual  = File.binread(destination).to_s.split("\n")
          content = content.to_s.split("\n")

          Diff::LCS.sdiff(actual, content).each do |diff|
            output_diff_line(diff)
          end
        else
          super
        end
      end

      def output_diff_line(diff) #:nodoc:
        case diff.action
        when "-"
          say "- #{diff.old_element.chomp}", :red, true
        when "+"
          say "+ #{diff.new_element.chomp}", :green, true
        when "!"
          say "- #{diff.old_element.chomp}", :red, true
          say "+ #{diff.new_element.chomp}", :green, true
        else
          say "  #{diff.old_element.chomp}", nil, true
        end
      end

      # Check if Diff::LCS is loaded. If it is, use it to create pretty output
      # for diff.
      #
      def diff_lcs_loaded? #:nodoc:
        return true if defined?(Diff::LCS)
        return @diff_lcs_loaded unless @diff_lcs_loaded.nil?

        @diff_lcs_loaded = begin
          require "diff/lcs"
          true
        rescue LoadError
          false
        end
      end
    end
  end
end
PK+"#[1�UyXXCgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell/color.rbnu�[���require_relative "basic"

class Bundler::Thor
  module Shell
    # Inherit from Bundler::Thor::Shell::Basic and add set_color behavior. Check
    # Bundler::Thor::Shell::Basic to see all available methods.
    #
    class Color < Basic
      # Embed in a String to clear all previous ANSI sequences.
      CLEAR      = "\e[0m"
      # The start of an ANSI bold sequence.
      BOLD       = "\e[1m"

      # Set the terminal's foreground ANSI color to black.
      BLACK      = "\e[30m"
      # Set the terminal's foreground ANSI color to red.
      RED        = "\e[31m"
      # Set the terminal's foreground ANSI color to green.
      GREEN      = "\e[32m"
      # Set the terminal's foreground ANSI color to yellow.
      YELLOW     = "\e[33m"
      # Set the terminal's foreground ANSI color to blue.
      BLUE       = "\e[34m"
      # Set the terminal's foreground ANSI color to magenta.
      MAGENTA    = "\e[35m"
      # Set the terminal's foreground ANSI color to cyan.
      CYAN       = "\e[36m"
      # Set the terminal's foreground ANSI color to white.
      WHITE      = "\e[37m"

      # Set the terminal's background ANSI color to black.
      ON_BLACK   = "\e[40m"
      # Set the terminal's background ANSI color to red.
      ON_RED     = "\e[41m"
      # Set the terminal's background ANSI color to green.
      ON_GREEN   = "\e[42m"
      # Set the terminal's background ANSI color to yellow.
      ON_YELLOW  = "\e[43m"
      # Set the terminal's background ANSI color to blue.
      ON_BLUE    = "\e[44m"
      # Set the terminal's background ANSI color to magenta.
      ON_MAGENTA = "\e[45m"
      # Set the terminal's background ANSI color to cyan.
      ON_CYAN    = "\e[46m"
      # Set the terminal's background ANSI color to white.
      ON_WHITE   = "\e[47m"

      # Set color by using a string or one of the defined constants. If a third
      # option is set to true, it also adds bold to the string. This is based
      # on Highline implementation and it automatically appends CLEAR to the end
      # of the returned String.
      #
      # Pass foreground, background and bold options to this method as
      # symbols.
      #
      # Example:
      #
      #   set_color "Hi!", :red, :on_white, :bold
      #
      # The available colors are:
      #
      #   :bold
      #   :black
      #   :red
      #   :green
      #   :yellow
      #   :blue
      #   :magenta
      #   :cyan
      #   :white
      #   :on_black
      #   :on_red
      #   :on_green
      #   :on_yellow
      #   :on_blue
      #   :on_magenta
      #   :on_cyan
      #   :on_white
      def set_color(string, *colors)
        if colors.compact.empty? || !can_display_colors?
          string
        elsif colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) }
          ansi_colors = colors.map { |color| lookup_color(color) }
          "#{ansi_colors.join}#{string}#{CLEAR}"
        else
          # The old API was `set_color(color, bold=boolean)`. We
          # continue to support the old API because you should never
          # break old APIs unnecessarily :P
          foreground, bold = colors
          foreground = self.class.const_get(foreground.to_s.upcase) if foreground.is_a?(Symbol)

          bold       = bold ? BOLD : ""
          "#{bold}#{foreground}#{string}#{CLEAR}"
        end
      end

    protected

      def can_display_colors?
        are_colors_supported? && !are_colors_disabled?
      end

      def are_colors_supported?
        stdout.tty? && ENV["TERM"] != "dumb"
      end

      def are_colors_disabled?
        !ENV['NO_COLOR'].nil?
      end

      # Overwrite show_diff to show diff with colors if Diff::LCS is
      # available.
      #
      def show_diff(destination, content) #:nodoc:
        if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
          actual  = File.binread(destination).to_s.split("\n")
          content = content.to_s.split("\n")

          Diff::LCS.sdiff(actual, content).each do |diff|
            output_diff_line(diff)
          end
        else
          super
        end
      end

      def output_diff_line(diff) #:nodoc:
        case diff.action
        when "-"
          say "- #{diff.old_element.chomp}", :red, true
        when "+"
          say "+ #{diff.new_element.chomp}", :green, true
        when "!"
          say "- #{diff.old_element.chomp}", :red, true
          say "+ #{diff.new_element.chomp}", :green, true
        else
          say "  #{diff.old_element.chomp}", nil, true
        end
      end

      # Check if Diff::LCS is loaded. If it is, use it to create pretty output
      # for diff.
      #
      def diff_lcs_loaded? #:nodoc:
        return true if defined?(Diff::LCS)
        return @diff_lcs_loaded unless @diff_lcs_loaded.nil?

        @diff_lcs_loaded = begin
          require "diff/lcs"
          true
        rescue LoadError
          false
        end
      end
    end
  end
end
PK+"#[��W|Y<Y<Cgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell/basic.rbnu�[���class Bundler::Thor
  module Shell
    class Basic
      DEFAULT_TERMINAL_WIDTH = 80

      attr_accessor :base
      attr_reader   :padding

      # Initialize base, mute and padding to nil.
      #
      def initialize #:nodoc:
        @base = nil
        @mute = false
        @padding = 0
        @always_force = false
      end

      # Mute everything that's inside given block
      #
      def mute
        @mute = true
        yield
      ensure
        @mute = false
      end

      # Check if base is muted
      #
      def mute?
        @mute
      end

      # Sets the output padding, not allowing less than zero values.
      #
      def padding=(value)
        @padding = [0, value].max
      end

      # Sets the output padding while executing a block and resets it.
      #
      def indent(count = 1)
        orig_padding = padding
        self.padding = padding + count
        yield
        self.padding = orig_padding
      end

      # Asks something to the user and receives a response.
      #
      # If a default value is specified it will be presented to the user
      # and allows them to select that value with an empty response. This
      # option is ignored when limited answers are supplied.
      #
      # If asked to limit the correct responses, you can pass in an
      # array of acceptable answers.  If one of those is not supplied,
      # they will be shown a message stating that one of those answers
      # must be given and re-asked the question.
      #
      # If asking for sensitive information, the :echo option can be set
      # to false to mask user input from $stdin.
      #
      # If the required input is a path, then set the path option to
      # true. This will enable tab completion for file paths relative
      # to the current working directory on systems that support
      # Readline.
      #
      # ==== Example
      # ask("What is your name?")
      #
      # ask("What is the planet furthest from the sun?", :default => "Pluto")
      #
      # ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"])
      #
      # ask("What is your password?", :echo => false)
      #
      # ask("Where should the file be saved?", :path => true)
      #
      def ask(statement, *args)
        options = args.last.is_a?(Hash) ? args.pop : {}
        color = args.first

        if options[:limited_to]
          ask_filtered(statement, color, options)
        else
          ask_simply(statement, color, options)
        end
      end

      # Say (print) something to the user. If the sentence ends with a whitespace
      # or tab character, a new line is not appended (print + flush). Otherwise
      # are passed straight to puts (behavior got from Highline).
      #
      # ==== Example
      # say("I know you knew that.")
      #
      def say(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
        return if quiet?

        buffer = prepare_message(message, *color)
        buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")

        stdout.print(buffer)
        stdout.flush
      end

      # Say (print) an error to the user. If the sentence ends with a whitespace
      # or tab character, a new line is not appended (print + flush). Otherwise
      # are passed straight to puts (behavior got from Highline).
      #
      # ==== Example
      # say_error("error: something went wrong")
      #
      def say_error(message = "", color = nil, force_new_line = (message.to_s !~ /( |\t)\Z/))
        return if quiet?

        buffer = prepare_message(message, *color)
        buffer << "\n" if force_new_line && !message.to_s.end_with?("\n")

        stderr.print(buffer)
        stderr.flush
      end

      # Say a status with the given color and appends the message. Since this
      # method is used frequently by actions, it allows nil or false to be given
      # in log_status, avoiding the message from being shown. If a Symbol is
      # given in log_status, it's used as the color.
      #
      def say_status(status, message, log_status = true)
        return if quiet? || log_status == false
        spaces = "  " * (padding + 1)
        status = status.to_s.rjust(12)
        margin = " " * status.length + spaces

        color  = log_status.is_a?(Symbol) ? log_status : :green
        status = set_color status, color, true if color

        message = message.to_s.chomp.gsub(/(?<!\A)^/, margin)
        buffer = "#{status}#{spaces}#{message}\n"

        stdout.print(buffer)
        stdout.flush
      end

      # Make a question the to user and returns true if the user replies "y" or
      # "yes".
      #
      def yes?(statement, color = nil)
        !!(ask(statement, color, :add_to_history => false) =~ is?(:yes))
      end

      # Make a question the to user and returns true if the user replies "n" or
      # "no".
      #
      def no?(statement, color = nil)
        !!(ask(statement, color, :add_to_history => false) =~ is?(:no))
      end

      # Prints values in columns
      #
      # ==== Parameters
      # Array[String, String, ...]
      #
      def print_in_columns(array)
        return if array.empty?
        colwidth = (array.map { |el| el.to_s.size }.max || 0) + 2
        array.each_with_index do |value, index|
          # Don't output trailing spaces when printing the last column
          if ((((index + 1) % (terminal_width / colwidth))).zero? && !index.zero?) || index + 1 == array.length
            stdout.puts value
          else
            stdout.printf("%-#{colwidth}s", value)
          end
        end
      end

      # Prints a table.
      #
      # ==== Parameters
      # Array[Array[String, String, ...]]
      #
      # ==== Options
      # indent<Integer>:: Indent the first column by indent value.
      # colwidth<Integer>:: Force the first column to colwidth spaces wide.
      #
      def print_table(array, options = {}) # rubocop:disable MethodLength
        return if array.empty?

        formats = []
        indent = options[:indent].to_i
        colwidth = options[:colwidth]
        options[:truncate] = terminal_width if options[:truncate] == true

        formats << "%-#{colwidth + 2}s".dup if colwidth
        start = colwidth ? 1 : 0

        colcount = array.max { |a, b| a.size <=> b.size }.size

        maximas = []

        start.upto(colcount - 1) do |index|
          maxima = array.map { |row| row[index] ? row[index].to_s.size : 0 }.max
          maximas << maxima
          formats << if index == colcount - 1
                       # Don't output 2 trailing spaces when printing the last column
                       "%-s".dup
                     else
                       "%-#{maxima + 2}s".dup
                     end
        end

        formats[0] = formats[0].insert(0, " " * indent)
        formats << "%s"

        array.each do |row|
          sentence = "".dup

          row.each_with_index do |column, index|
            maxima = maximas[index]

            f = if column.is_a?(Numeric)
              if index == row.size - 1
                # Don't output 2 trailing spaces when printing the last column
                "%#{maxima}s"
              else
                "%#{maxima}s  "
              end
            else
              formats[index]
            end
            sentence << f % column.to_s
          end

          sentence = truncate(sentence, options[:truncate]) if options[:truncate]
          stdout.puts sentence
        end
      end

      # Prints a long string, word-wrapping the text to the current width of the
      # terminal display. Ideal for printing heredocs.
      #
      # ==== Parameters
      # String
      #
      # ==== Options
      # indent<Integer>:: Indent each line of the printed paragraph by indent value.
      #
      def print_wrapped(message, options = {})
        indent = options[:indent] || 0
        width = terminal_width - indent
        paras = message.split("\n\n")

        paras.map! do |unwrapped|
          words = unwrapped.split(" ")
          counter = words.first.length
          words.inject do |memo, word|
            word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
            counter = 0 if word.include? "\n"
            if (counter + word.length + 1) < width
              memo = "#{memo} #{word}"
              counter += (word.length + 1)
            else
              memo = "#{memo}\n#{word}"
              counter = word.length
            end
            memo
          end
        end.compact!

        paras.each do |para|
          para.split("\n").each do |line|
            stdout.puts line.insert(0, " " * indent)
          end
          stdout.puts unless para == paras.last
        end
      end

      # Deals with file collision and returns true if the file should be
      # overwritten and false otherwise. If a block is given, it uses the block
      # response as the content for the diff.
      #
      # ==== Parameters
      # destination<String>:: the destination file to solve conflicts
      # block<Proc>:: an optional block that returns the value to be used in diff and merge
      #
      def file_collision(destination)
        return true if @always_force
        options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]"

        loop do
          answer = ask(
            %[Overwrite #{destination}? (enter "h" for help) #{options}],
            :add_to_history => false
          )

          case answer
          when nil
            say ""
            return true
          when is?(:yes), is?(:force), ""
            return true
          when is?(:no), is?(:skip)
            return false
          when is?(:always)
            return @always_force = true
          when is?(:quit)
            say "Aborting..."
            raise SystemExit
          when is?(:diff)
            show_diff(destination, yield) if block_given?
            say "Retrying..."
          when is?(:merge)
            if block_given? && !merge_tool.empty?
              merge(destination, yield)
              return nil
            end

            say "Please specify merge tool to `THOR_MERGE` env."
          else
            say file_collision_help
          end
        end
      end

      # This code was copied from Rake, available under MIT-LICENSE
      # Copyright (c) 2003, 2004 Jim Weirich
      def terminal_width
        result = if ENV["THOR_COLUMNS"]
          ENV["THOR_COLUMNS"].to_i
        else
          unix? ? dynamic_width : DEFAULT_TERMINAL_WIDTH
        end
        result < 10 ? DEFAULT_TERMINAL_WIDTH : result
      rescue
        DEFAULT_TERMINAL_WIDTH
      end

      # Called if something goes wrong during the execution. This is used by Bundler::Thor
      # internally and should not be used inside your scripts. If something went
      # wrong, you can always raise an exception. If you raise a Bundler::Thor::Error, it
      # will be rescued and wrapped in the method below.
      #
      def error(statement)
        stderr.puts statement
      end

      # Apply color to the given string with optional bold. Disabled in the
      # Bundler::Thor::Shell::Basic class.
      #
      def set_color(string, *) #:nodoc:
        string
      end

    protected

      def prepare_message(message, *color)
        spaces = "  " * padding
        spaces + set_color(message.to_s, *color)
      end

      def can_display_colors?
        false
      end

      def lookup_color(color)
        return color unless color.is_a?(Symbol)
        self.class.const_get(color.to_s.upcase)
      end

      def stdout
        $stdout
      end

      def stderr
        $stderr
      end

      def is?(value) #:nodoc:
        value = value.to_s

        if value.size == 1
          /\A#{value}\z/i
        else
          /\A(#{value}|#{value[0, 1]})\z/i
        end
      end

      def file_collision_help #:nodoc:
        <<-HELP
        Y - yes, overwrite
        n - no, do not overwrite
        a - all, overwrite this and all others
        q - quit, abort
        d - diff, show the differences between the old and the new
        h - help, show this help
        m - merge, run merge tool
        HELP
      end

      def show_diff(destination, content) #:nodoc:
        diff_cmd = ENV["THOR_DIFF"] || ENV["RAILS_DIFF"] || "diff -u"

        require "tempfile"
        Tempfile.open(File.basename(destination), File.dirname(destination)) do |temp|
          temp.write content
          temp.rewind
          system %(#{diff_cmd} "#{destination}" "#{temp.path}")
        end
      end

      def quiet? #:nodoc:
        mute? || (base && base.options[:quiet])
      end

      # Calculate the dynamic width of the terminal
      def dynamic_width
        @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput)
      end

      def dynamic_width_stty
        `stty size 2>/dev/null`.split[1].to_i
      end

      def dynamic_width_tput
        `tput cols 2>/dev/null`.to_i
      end

      def unix?
        RUBY_PLATFORM =~ /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i
      end

      def truncate(string, width)
        as_unicode do
          chars = string.chars.to_a
          if chars.length <= width
            chars.join
          else
            chars[0, width - 3].join + "..."
          end
        end
      end

      if "".respond_to?(:encode)
        def as_unicode
          yield
        end
      else
        def as_unicode
          old = $KCODE
          $KCODE = "U"
          yield
        ensure
          $KCODE = old
        end
      end

      def ask_simply(statement, color, options)
        default = options[:default]
        message = [statement, ("(#{default})" if default), nil].uniq.join(" ")
        message = prepare_message(message, *color)
        result = Bundler::Thor::LineEditor.readline(message, options)

        return unless result

        result = result.strip

        if default && result == ""
          default
        else
          result
        end
      end

      def ask_filtered(statement, color, options)
        answer_set = options[:limited_to]
        case_insensitive = options.fetch(:case_insensitive, false)
        correct_answer = nil
        until correct_answer
          answers = answer_set.join(", ")
          answer = ask_simply("#{statement} [#{answers}]", color, options)
          correct_answer = answer_match(answer_set, answer, case_insensitive)
          say("Your response must be one of: [#{answers}]. Please try again.") unless correct_answer
        end
        correct_answer
      end

      def answer_match(possibilities, answer, case_insensitive)
        if case_insensitive
          possibilities.detect{ |possibility| possibility.downcase == answer.downcase }
        else
          possibilities.detect{ |possibility| possibility == answer }
        end
      end

      def merge(destination, content) #:nodoc:
        require "tempfile"
        Tempfile.open([File.basename(destination), File.extname(destination)], File.dirname(destination)) do |temp|
          temp.write content
          temp.rewind
          system %(#{merge_tool} "#{temp.path}" "#{destination}")
        end
      end

      def merge_tool #:nodoc:
        @merge_tool ||= ENV["THOR_MERGE"] || git_merge_tool
      end

      def git_merge_tool #:nodoc:
        `git config merge.tool`.rstrip rescue ""
      end
    end
  end
end
PK+"#[#I`i#i#=gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/group.rbnu�[���require_relative "base"

# Bundler::Thor has a special class called Bundler::Thor::Group. The main difference to Bundler::Thor class
# is that it invokes all commands at once. It also include some methods that allows
# invocations to be done at the class method, which are not available to Bundler::Thor
# commands.
class Bundler::Thor::Group
  class << self
    # The description for this Bundler::Thor::Group. If none is provided, but a source root
    # exists, tries to find the USAGE one folder above it, otherwise searches
    # in the superclass.
    #
    # ==== Parameters
    # description<String>:: The description for this Bundler::Thor::Group.
    #
    def desc(description = nil)
      if description
        @desc = description
      else
        @desc ||= from_superclass(:desc, nil)
      end
    end

    # Prints help information.
    #
    # ==== Options
    # short:: When true, shows only usage.
    #
    def help(shell)
      shell.say "Usage:"
      shell.say "  #{banner}\n"
      shell.say
      class_options_help(shell)
      shell.say desc if desc
    end

    # Stores invocations for this class merging with superclass values.
    #
    def invocations #:nodoc:
      @invocations ||= from_superclass(:invocations, {})
    end

    # Stores invocation blocks used on invoke_from_option.
    #
    def invocation_blocks #:nodoc:
      @invocation_blocks ||= from_superclass(:invocation_blocks, {})
    end

    # Invoke the given namespace or class given. It adds an instance
    # method that will invoke the klass and command. You can give a block to
    # configure how it will be invoked.
    #
    # The namespace/class given will have its options showed on the help
    # usage. Check invoke_from_option for more information.
    #
    def invoke(*names, &block)
      options = names.last.is_a?(Hash) ? names.pop : {}
      verbose = options.fetch(:verbose, true)

      names.each do |name|
        invocations[name] = false
        invocation_blocks[name] = block if block_given?

        class_eval <<-METHOD, __FILE__, __LINE__ + 1
          def _invoke_#{name.to_s.gsub(/\W/, '_')}
            klass, command = self.class.prepare_for_invocation(nil, #{name.inspect})

            if klass
              say_status :invoke, #{name.inspect}, #{verbose.inspect}
              block = self.class.invocation_blocks[#{name.inspect}]
              _invoke_for_class_method klass, command, &block
            else
              say_status :error, %(#{name.inspect} [not found]), :red
            end
          end
        METHOD
      end
    end

    # Invoke a thor class based on the value supplied by the user to the
    # given option named "name". A class option must be created before this
    # method is invoked for each name given.
    #
    # ==== Examples
    #
    #   class GemGenerator < Bundler::Thor::Group
    #     class_option :test_framework, :type => :string
    #     invoke_from_option :test_framework
    #   end
    #
    # ==== Boolean options
    #
    # In some cases, you want to invoke a thor class if some option is true or
    # false. This is automatically handled by invoke_from_option. Then the
    # option name is used to invoke the generator.
    #
    # ==== Preparing for invocation
    #
    # In some cases you want to customize how a specified hook is going to be
    # invoked. You can do that by overwriting the class method
    # prepare_for_invocation. The class method must necessarily return a klass
    # and an optional command.
    #
    # ==== Custom invocations
    #
    # You can also supply a block to customize how the option is going to be
    # invoked. The block receives two parameters, an instance of the current
    # class and the klass to be invoked.
    #
    def invoke_from_option(*names, &block)
      options = names.last.is_a?(Hash) ? names.pop : {}
      verbose = options.fetch(:verbose, :white)

      names.each do |name|
        unless class_options.key?(name)
          raise ArgumentError, "You have to define the option #{name.inspect} " \
                              "before setting invoke_from_option."
        end

        invocations[name] = true
        invocation_blocks[name] = block if block_given?

        class_eval <<-METHOD, __FILE__, __LINE__ + 1
          def _invoke_from_option_#{name.to_s.gsub(/\W/, '_')}
            return unless options[#{name.inspect}]

            value = options[#{name.inspect}]
            value = #{name.inspect} if TrueClass === value
            klass, command = self.class.prepare_for_invocation(#{name.inspect}, value)

            if klass
              say_status :invoke, value, #{verbose.inspect}
              block = self.class.invocation_blocks[#{name.inspect}]
              _invoke_for_class_method klass, command, &block
            else
              say_status :error, %(\#{value} [not found]), :red
            end
          end
        METHOD
      end
    end

    # Remove a previously added invocation.
    #
    # ==== Examples
    #
    #   remove_invocation :test_framework
    #
    def remove_invocation(*names)
      names.each do |name|
        remove_command(name)
        remove_class_option(name)
        invocations.delete(name)
        invocation_blocks.delete(name)
      end
    end

    # Overwrite class options help to allow invoked generators options to be
    # shown recursively when invoking a generator.
    #
    def class_options_help(shell, groups = {}) #:nodoc:
      get_options_from_invocations(groups, class_options) do |klass|
        klass.send(:get_options_from_invocations, groups, class_options)
      end
      super(shell, groups)
    end

    # Get invocations array and merge options from invocations. Those
    # options are added to group_options hash. Options that already exists
    # in base_options are not added twice.
    #
    def get_options_from_invocations(group_options, base_options) #:nodoc: # rubocop:disable MethodLength
      invocations.each do |name, from_option|
        value = if from_option
          option = class_options[name]
          option.type == :boolean ? name : option.default
        else
          name
        end
        next unless value

        klass, _ = prepare_for_invocation(name, value)
        next unless klass && klass.respond_to?(:class_options)

        value = value.to_s
        human_name = value.respond_to?(:classify) ? value.classify : value

        group_options[human_name] ||= []
        group_options[human_name] += klass.class_options.values.select do |class_option|
          base_options[class_option.name.to_sym].nil? && class_option.group.nil? &&
            !group_options.values.flatten.any? { |i| i.name == class_option.name }
        end

        yield klass if block_given?
      end
    end

    # Returns commands ready to be printed.
    def printable_commands(*)
      item = []
      item << banner
      item << (desc ? "# #{desc.gsub(/\s+/m, ' ')}" : "")
      [item]
    end
    alias_method :printable_tasks, :printable_commands

    def handle_argument_error(command, error, _args, arity) #:nodoc:
      msg = "#{basename} #{command.name} takes #{arity} argument".dup
      msg << "s" if arity > 1
      msg << ", but it should not."
      raise error, msg
    end

  protected

    # The method responsible for dispatching given the args.
    def dispatch(command, given_args, given_opts, config) #:nodoc:
      if Bundler::Thor::HELP_MAPPINGS.include?(given_args.first)
        help(config[:shell])
        return
      end

      args, opts = Bundler::Thor::Options.split(given_args)
      opts = given_opts || opts

      instance = new(args, opts, config)
      yield instance if block_given?

      if command
        instance.invoke_command(all_commands[command])
      else
        instance.invoke_all
      end
    end

    # The banner for this class. You can customize it if you are invoking the
    # thor class by another ways which is not the Bundler::Thor::Runner.
    def banner
      "#{basename} #{self_command.formatted_usage(self, false)}"
    end

    # Represents the whole class as a command.
    def self_command #:nodoc:
      Bundler::Thor::DynamicCommand.new(namespace, class_options)
    end
    alias_method :self_task, :self_command

    def baseclass #:nodoc:
      Bundler::Thor::Group
    end

    def create_command(meth) #:nodoc:
      commands[meth.to_s] = Bundler::Thor::Command.new(meth, nil, nil, nil, nil)
      true
    end
    alias_method :create_task, :create_command
  end

  include Bundler::Thor::Base

protected

  # Shortcut to invoke with padding and block handling. Use internally by
  # invoke and invoke_from_option class methods.
  def _invoke_for_class_method(klass, command = nil, *args, &block) #:nodoc:
    with_padding do
      if block
        case block.arity
        when 3
          yield(self, klass, command)
        when 2
          yield(self, klass)
        when 1
          instance_exec(klass, &block)
        end
      else
        invoke klass, command, *args
      end
    end
  end
end
PK+"#[ˤ��

Fgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/options.rbnu�[���class Bundler::Thor
  class Options < Arguments #:nodoc: # rubocop:disable ClassLength
    LONG_RE     = /^(--\w+(?:-\w+)*)$/
    SHORT_RE    = /^(-[a-z])$/i
    EQ_RE       = /^(--\w+(?:-\w+)*|-[a-z])=(.*)$/i
    SHORT_SQ_RE = /^-([a-z]{2,})$/i # Allow either -x -v or -xv style for single char args
    SHORT_NUM   = /^(-[a-z])#{NUMERIC}$/i
    OPTS_END    = "--".freeze

    # Receives a hash and makes it switches.
    def self.to_switches(options)
      options.map do |key, value|
        case value
        when true
          "--#{key}"
        when Array
          "--#{key} #{value.map(&:inspect).join(' ')}"
        when Hash
          "--#{key} #{value.map { |k, v| "#{k}:#{v}" }.join(' ')}"
        when nil, false
          nil
        else
          "--#{key} #{value.inspect}"
        end
      end.compact.join(" ")
    end

    # Takes a hash of Bundler::Thor::Option and a hash with defaults.
    #
    # If +stop_on_unknown+ is true, #parse will stop as soon as it encounters
    # an unknown option or a regular argument.
    def initialize(hash_options = {}, defaults = {}, stop_on_unknown = false, disable_required_check = false)
      @stop_on_unknown = stop_on_unknown
      @disable_required_check = disable_required_check
      options = hash_options.values
      super(options)

      # Add defaults
      defaults.each do |key, value|
        @assigns[key.to_s] = value
        @non_assigned_required.delete(hash_options[key])
      end

      @shorts = {}
      @switches = {}
      @extra = []
      @stopped_parsing_after_extra_index = nil
      @is_treated_as_value = false

      options.each do |option|
        @switches[option.switch_name] = option

        option.aliases.each do |short|
          name = short.to_s.sub(/^(?!\-)/, "-")
          @shorts[name] ||= option.switch_name
        end
      end
    end

    def remaining
      @extra
    end

    def peek
      return super unless @parsing_options

      result = super
      if result == OPTS_END
        shift
        @parsing_options = false
        @stopped_parsing_after_extra_index ||= @extra.size
        super
      else
        result
      end
    end

    def shift
      @is_treated_as_value = false
      super
    end

    def unshift(arg, is_value: false)
      @is_treated_as_value = is_value
      super(arg)
    end

    def parse(args) # rubocop:disable MethodLength
      @pile = args.dup
      @is_treated_as_value = false
      @parsing_options = true

      while peek
        if parsing_options?
          match, is_switch = current_is_switch?
          shifted = shift

          if is_switch
            case shifted
            when SHORT_SQ_RE
              unshift($1.split("").map { |f| "-#{f}" })
              next
            when EQ_RE
              unshift($2, is_value: true)
              switch = $1
            when SHORT_NUM
              unshift($2)
              switch = $1
            when LONG_RE, SHORT_RE
              switch = $1
            end

            switch = normalize_switch(switch)
            option = switch_option(switch)
            result = parse_peek(switch, option)
            assign_result!(option, result)
          elsif @stop_on_unknown
            @parsing_options = false
            @extra << shifted
            @stopped_parsing_after_extra_index ||= @extra.size
            @extra << shift while peek
            break
          elsif match
            @extra << shifted
            @extra << shift while peek && peek !~ /^-/
          else
            @extra << shifted
          end
        else
          @extra << shift
        end
      end

      check_requirement! unless @disable_required_check

      assigns = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new(@assigns)
      assigns.freeze
      assigns
    end

    def check_unknown!
      to_check = @stopped_parsing_after_extra_index ? @extra[0...@stopped_parsing_after_extra_index] : @extra

      # an unknown option starts with - or -- and has no more --'s afterward.
      unknown = to_check.select { |str| str =~ /^--?(?:(?!--).)*$/ }
      raise UnknownArgumentError.new(@switches.keys, unknown) unless unknown.empty?
    end

  protected

    def assign_result!(option, result)
      if option.repeatable && option.type == :hash
        (@assigns[option.human_name] ||= {}).merge!(result)
      elsif option.repeatable
        (@assigns[option.human_name] ||= []) << result
      else
        @assigns[option.human_name] = result
      end
    end

    # Check if the current value in peek is a registered switch.
    #
    # Two booleans are returned.  The first is true if the current value
    # starts with a hyphen; the second is true if it is a registered switch.
    def current_is_switch?
      return [false, false] if @is_treated_as_value
      case peek
      when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM
        [true, switch?($1)]
      when SHORT_SQ_RE
        [true, $1.split("").any? { |f| switch?("-#{f}") }]
      else
        [false, false]
      end
    end

    def current_is_switch_formatted?
      return false if @is_treated_as_value
      case peek
      when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM, SHORT_SQ_RE
        true
      else
        false
      end
    end

    def current_is_value?
      return true if @is_treated_as_value
      peek && (!parsing_options? || super)
    end

    def switch?(arg)
      !switch_option(normalize_switch(arg)).nil?
    end

    def switch_option(arg)
      if match = no_or_skip?(arg) # rubocop:disable AssignmentInCondition
        @switches[arg] || @switches["--#{match}"]
      else
        @switches[arg]
      end
    end

    # Check if the given argument is actually a shortcut.
    #
    def normalize_switch(arg)
      (@shorts[arg] || arg).tr("_", "-")
    end

    def parsing_options?
      peek
      @parsing_options
    end

    # Parse boolean values which can be given as --foo=true, --foo or --no-foo.
    #
    def parse_boolean(switch)
      if current_is_value?
        if ["true", "TRUE", "t", "T", true].include?(peek)
          shift
          true
        elsif ["false", "FALSE", "f", "F", false].include?(peek)
          shift
          false
        else
          @switches.key?(switch) || !no_or_skip?(switch)
        end
      else
        @switches.key?(switch) || !no_or_skip?(switch)
      end
    end

    # Parse the value at the peek analyzing if it requires an input or not.
    #
    def parse_peek(switch, option)
      if parsing_options? && (current_is_switch_formatted? || last?)
        if option.boolean?
          # No problem for boolean types
        elsif no_or_skip?(switch)
          return nil # User set value to nil
        elsif option.string? && !option.required?
          # Return the default if there is one, else the human name
          return option.lazy_default || option.default || option.human_name
        elsif option.lazy_default
          return option.lazy_default
        else
          raise MalformattedArgumentError, "No value provided for option '#{switch}'"
        end
      end

      @non_assigned_required.delete(option)
      send(:"parse_#{option.type}", switch)
    end
  end
end
PK+"#[i�Ggems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/argument.rbnu�[���class Bundler::Thor
  class Argument #:nodoc:
    VALID_TYPES = [:numeric, :hash, :array, :string]

    attr_reader :name, :description, :enum, :required, :type, :default, :banner
    alias_method :human_name, :name

    def initialize(name, options = {})
      class_name = self.class.name.split("::").last

      type = options[:type]

      raise ArgumentError, "#{class_name} name can't be nil."                         if name.nil?
      raise ArgumentError, "Type :#{type} is not valid for #{class_name.downcase}s."  if type && !valid_type?(type)

      @name        = name.to_s
      @description = options[:desc]
      @required    = options.key?(:required) ? options[:required] : true
      @type        = (type || :string).to_sym
      @default     = options[:default]
      @banner      = options[:banner] || default_banner
      @enum        = options[:enum]

      validate! # Trigger specific validations
    end

    def usage
      required? ? banner : "[#{banner}]"
    end

    def required?
      required
    end

    def show_default?
      case default
      when Array, String, Hash
        !default.empty?
      else
        default
      end
    end

  protected

    def validate!
      raise ArgumentError, "An argument cannot be required and have default value." if required? && !default.nil?
      raise ArgumentError, "An argument cannot have an enum other than an array." if @enum && !@enum.is_a?(Array)
    end

    def valid_type?(type)
      self.class::VALID_TYPES.include?(type.to_sym)
    end

    def default_banner
      case type
      when :boolean
        nil
      when :string, :default
        human_name.upcase
      when :numeric
        "N"
      when :hash
        "key:value"
      when :array
        "one two three"
      end
    end
  end
end
PK+"#[��llHgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/arguments.rbnu�[���class Bundler::Thor
  class Arguments #:nodoc: # rubocop:disable ClassLength
    NUMERIC = /[-+]?(\d*\.\d+|\d+)/

    # Receives an array of args and returns two arrays, one with arguments
    # and one with switches.
    #
    def self.split(args)
      arguments = []

      args.each do |item|
        break if item.is_a?(String) && item =~ /^-/
        arguments << item
      end

      [arguments, args[Range.new(arguments.size, -1)]]
    end

    def self.parse(*args)
      to_parse = args.pop
      new(*args).parse(to_parse)
    end

    # Takes an array of Bundler::Thor::Argument objects.
    #
    def initialize(arguments = [])
      @assigns = {}
      @non_assigned_required = []
      @switches = arguments

      arguments.each do |argument|
        if !argument.default.nil?
          begin
            @assigns[argument.human_name] = argument.default.dup
          rescue TypeError  # Compatibility shim for un-dup-able Fixnum in Ruby < 2.4
            @assigns[argument.human_name] = argument.default
          end
        elsif argument.required?
          @non_assigned_required << argument
        end
      end
    end

    def parse(args)
      @pile = args.dup

      @switches.each do |argument|
        break unless peek
        @non_assigned_required.delete(argument)
        @assigns[argument.human_name] = send(:"parse_#{argument.type}", argument.human_name)
      end

      check_requirement!
      @assigns
    end

    def remaining
      @pile
    end

  private

    def no_or_skip?(arg)
      arg =~ /^--(no|skip)-([-\w]+)$/
      $2
    end

    def last?
      @pile.empty?
    end

    def peek
      @pile.first
    end

    def shift
      @pile.shift
    end

    def unshift(arg)
      if arg.is_a?(Array)
        @pile = arg + @pile
      else
        @pile.unshift(arg)
      end
    end

    def current_is_value?
      peek && peek.to_s !~ /^-{1,2}\S+/
    end

    # Runs through the argument array getting strings that contains ":" and
    # mark it as a hash:
    #
    #   [ "name:string", "age:integer" ]
    #
    # Becomes:
    #
    #   { "name" => "string", "age" => "integer" }
    #
    def parse_hash(name)
      return shift if peek.is_a?(Hash)
      hash = {}

      while current_is_value? && peek.include?(":")
        key, value = shift.split(":", 2)
        raise MalformattedArgumentError, "You can't specify '#{key}' more than once in option '#{name}'; got #{key}:#{hash[key]} and #{key}:#{value}" if hash.include? key
        hash[key] = value
      end
      hash
    end

    # Runs through the argument array getting all strings until no string is
    # found or a switch is found.
    #
    #   ["a", "b", "c"]
    #
    # And returns it as an array:
    #
    #   ["a", "b", "c"]
    #
    def parse_array(name)
      return shift if peek.is_a?(Array)
      array = []
      array << shift while current_is_value?
      array
    end

    # Check if the peek is numeric format and return a Float or Integer.
    # Check if the peek is included in enum if enum is provided.
    # Otherwise raises an error.
    #
    def parse_numeric(name)
      return shift if peek.is_a?(Numeric)

      unless peek =~ NUMERIC && $& == peek
        raise MalformattedArgumentError, "Expected numeric value for '#{name}'; got #{peek.inspect}"
      end

      value = $&.index(".") ? shift.to_f : shift.to_i
      if @switches.is_a?(Hash) && switch = @switches[name]
        if switch.enum && !switch.enum.include?(value)
          raise MalformattedArgumentError, "Expected '#{name}' to be one of #{switch.enum.join(', ')}; got #{value}"
        end
      end
      value
    end

    # Parse string:
    # for --string-arg, just return the current value in the pile
    # for --no-string-arg, nil
    # Check if the peek is included in enum if enum is provided. Otherwise raises an error.
    #
    def parse_string(name)
      if no_or_skip?(name)
        nil
      else
        value = shift
        if @switches.is_a?(Hash) && switch = @switches[name]
          if switch.enum && !switch.enum.include?(value)
            raise MalformattedArgumentError, "Expected '#{name}' to be one of #{switch.enum.join(', ')}; got #{value}"
          end
        end
        value
      end
    end

    # Raises an error if @non_assigned_required array is not empty.
    #
    def check_requirement!
      return if @non_assigned_required.empty?
      names = @non_assigned_required.map do |o|
        o.respond_to?(:switch_name) ? o.switch_name : o.human_name
      end.join("', '")
      class_name = self.class.name.split("::").last.downcase
      raise RequiredArgumentMissingError, "No value provided for required #{class_name} '#{names}'"
    end
  end
end
PK+"#[�aq���Egems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/option.rbnu�[���class Bundler::Thor
  class Option < Argument #:nodoc:
    attr_reader :aliases, :group, :lazy_default, :hide, :repeatable

    VALID_TYPES = [:boolean, :numeric, :hash, :array, :string]

    def initialize(name, options = {})
      @check_default_type = options[:check_default_type]
      options[:required] = false unless options.key?(:required)
      @repeatable     = options.fetch(:repeatable, false)
      super
      @lazy_default   = options[:lazy_default]
      @group          = options[:group].to_s.capitalize if options[:group]
      @aliases        = Array(options[:aliases])
      @hide           = options[:hide]
    end

    # This parse quick options given as method_options. It makes several
    # assumptions, but you can be more specific using the option method.
    #
    #   parse :foo => "bar"
    #   #=> Option foo with default value bar
    #
    #   parse [:foo, :baz] => "bar"
    #   #=> Option foo with default value bar and alias :baz
    #
    #   parse :foo => :required
    #   #=> Required option foo without default value
    #
    #   parse :foo => 2
    #   #=> Option foo with default value 2 and type numeric
    #
    #   parse :foo => :numeric
    #   #=> Option foo without default value and type numeric
    #
    #   parse :foo => true
    #   #=> Option foo with default value true and type boolean
    #
    # The valid types are :boolean, :numeric, :hash, :array and :string. If none
    # is given a default type is assumed. This default type accepts arguments as
    # string (--foo=value) or booleans (just --foo).
    #
    # By default all options are optional, unless :required is given.
    #
    def self.parse(key, value)
      if key.is_a?(Array)
        name, *aliases = key
      else
        name = key
        aliases = []
      end

      name    = name.to_s
      default = value

      type = case value
      when Symbol
        default = nil
        if VALID_TYPES.include?(value)
          value
        elsif required = (value == :required) # rubocop:disable AssignmentInCondition
          :string
        end
      when TrueClass, FalseClass
        :boolean
      when Numeric
        :numeric
      when Hash, Array, String
        value.class.name.downcase.to_sym
      end

      new(name.to_s, :required => required, :type => type, :default => default, :aliases => aliases)
    end

    def switch_name
      @switch_name ||= dasherized? ? name : dasherize(name)
    end

    def human_name
      @human_name ||= dasherized? ? undasherize(name) : name
    end

    def usage(padding = 0)
      sample = if banner && !banner.to_s.empty?
        "#{switch_name}=#{banner}".dup
      else
        switch_name
      end

      sample = "[#{sample}]".dup unless required?

      if boolean?
        sample << ", [#{dasherize('no-' + human_name)}]" unless (name == "force") || name.start_with?("no-")
      end

      if aliases.empty?
        (" " * padding) << sample
      else
        "#{aliases.join(', ')}, #{sample}"
      end
    end

    VALID_TYPES.each do |type|
      class_eval <<-RUBY, __FILE__, __LINE__ + 1
        def #{type}?
          self.type == #{type.inspect}
        end
      RUBY
    end

  protected

    def validate!
      raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
      validate_default_type!
    end

    def validate_default_type!
      default_type = case @default
      when nil
        return
      when TrueClass, FalseClass
        required? ? :string : :boolean
      when Numeric
        :numeric
      when Symbol
        :string
      when Hash, Array, String
        @default.class.name.downcase.to_sym
      end

      expected_type = (@repeatable && @type != :hash) ? :array : @type

      if default_type != expected_type
        err = "Expected #{expected_type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})"

        if @check_default_type
          raise ArgumentError, err
        elsif @check_default_type == nil
          Bundler::Thor.deprecation_warning "#{err}.\n" +
            'This will be rejected in the future unless you explicitly pass the options `check_default_type: false`' +
            ' or call `allow_incompatible_default_type!` in your code'
        end
      end
    end

    def dasherized?
      name.index("-") == 0
    end

    def undasherize(str)
      str.sub(/^-{1,2}/, "")
    end

    def dasherize(str)
      (str.length > 1 ? "--" : "-") + str.tr("_", "-")
    end
  end
end
PK+"#[�;��?gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/command.rbnu�[���class Bundler::Thor
  class Command < Struct.new(:name, :description, :long_description, :usage, :options, :ancestor_name)
    FILE_REGEXP = /^#{Regexp.escape(File.dirname(__FILE__))}/

    def initialize(name, description, long_description, usage, options = nil)
      super(name.to_s, description, long_description, usage, options || {})
    end

    def initialize_copy(other) #:nodoc:
      super(other)
      self.options = other.options.dup if other.options
    end

    def hidden?
      false
    end

    # By default, a command invokes a method in the thor class. You can change this
    # implementation to create custom commands.
    def run(instance, args = [])
      arity = nil

      if private_method?(instance)
        instance.class.handle_no_command_error(name)
      elsif public_method?(instance)
        arity = instance.method(name).arity
        instance.__send__(name, *args)
      elsif local_method?(instance, :method_missing)
        instance.__send__(:method_missing, name.to_sym, *args)
      else
        instance.class.handle_no_command_error(name)
      end
    rescue ArgumentError => e
      handle_argument_error?(instance, e, caller) ? instance.class.handle_argument_error(self, e, args, arity) : (raise e)
    rescue NoMethodError => e
      handle_no_method_error?(instance, e, caller) ? instance.class.handle_no_command_error(name) : (raise e)
    end

    # Returns the formatted usage by injecting given required arguments
    # and required options into the given usage.
    def formatted_usage(klass, namespace = true, subcommand = false)
      if ancestor_name
        formatted = "#{ancestor_name} ".dup # add space
      elsif namespace
        namespace = klass.namespace
        formatted = "#{namespace.gsub(/^(default)/, '')}:".dup
      end
      formatted ||= "#{klass.namespace.split(':').last} ".dup if subcommand

      formatted ||= "".dup

      Array(usage).map do |specific_usage|
        formatted_specific_usage = formatted

        formatted_specific_usage += required_arguments_for(klass, specific_usage)

        # Add required options
        formatted_specific_usage += " #{required_options}"

        # Strip and go!
        formatted_specific_usage.strip
      end.join("\n")
    end

  protected

    # Add usage with required arguments
    def required_arguments_for(klass, usage)
      if klass && !klass.arguments.empty?
        usage.to_s.gsub(/^#{name}/) do |match|
          match << " " << klass.arguments.map(&:usage).compact.join(" ")
        end
      else
        usage.to_s
      end
    end

    def not_debugging?(instance)
      !(instance.class.respond_to?(:debugging) && instance.class.debugging)
    end

    def required_options
      @required_options ||= options.map { |_, o| o.usage if o.required? }.compact.sort.join(" ")
    end

    # Given a target, checks if this class name is a public method.
    def public_method?(instance) #:nodoc:
      !(instance.public_methods & [name.to_s, name.to_sym]).empty?
    end

    def private_method?(instance)
      !(instance.private_methods & [name.to_s, name.to_sym]).empty?
    end

    def local_method?(instance, name)
      methods = instance.public_methods(false) + instance.private_methods(false) + instance.protected_methods(false)
      !(methods & [name.to_s, name.to_sym]).empty?
    end

    def sans_backtrace(backtrace, caller) #:nodoc:
      saned = backtrace.reject { |frame| frame =~ FILE_REGEXP || (frame =~ /\.java:/ && RUBY_PLATFORM =~ /java/) || (frame =~ %r{^kernel/} && RUBY_ENGINE =~ /rbx/) }
      saned - caller
    end

    def handle_argument_error?(instance, error, caller)
      not_debugging?(instance) && (error.message =~ /wrong number of arguments/ || error.message =~ /given \d*, expected \d*/) && begin
        saned = sans_backtrace(error.backtrace, caller)
        saned.empty? || saned.size == 1
      end
    end

    def handle_no_method_error?(instance, error, caller)
      not_debugging?(instance) &&
        error.message =~ /^undefined method `#{name}' for #{Regexp.escape(instance.to_s)}$/
    end
  end
  Task = Command

  # A command that is hidden in help messages but still invocable.
  class HiddenCommand < Command
    def hidden?
      true
    end
  end
  HiddenTask = HiddenCommand

  # A dynamic command that handles method missing scenarios.
  class DynamicCommand < Command
    def initialize(name, options = nil)
      super(name.to_s, "A dynamically-generated command", name.to_s, name.to_s, options)
    end

    def run(instance, args = [])
      if (instance.methods & [name.to_s, name.to_sym]).empty?
        super
      else
        instance.class.handle_no_command_error(name)
      end
    end
  end
  DynamicTask = DynamicCommand
end
PK+"#[�ᡇ++Fgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/nested_context.rbnu�[���class Bundler::Thor
  class NestedContext
    def initialize
      @depth = 0
    end

    def enter
      push

      yield
    ensure
      pop
    end

    def entered?
      @depth > 0
    end

    private

    def push
      @depth += 1
    end

    def pop
      @depth -= 1
    end
  end
end
PK+"#[����>gems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser.rbnu�[���require_relative "parser/argument"
require_relative "parser/arguments"
require_relative "parser/option"
require_relative "parser/options"
PK+"#[�	II;gems/bundler-2.3.27/lib/bundler/vendor/tmpdir/lib/tmpdir.rbnu�[���# frozen_string_literal: true
#
# tmpdir - retrieve temporary directory path
#
# $Id$
#

require_relative '../../fileutils/lib/fileutils'
begin
  require 'etc.so'
rescue LoadError # rescue LoadError for miniruby
end

class Bundler::Dir < Dir

  @systmpdir ||= defined?(Etc.systmpdir) ? Etc.systmpdir : '/tmp'

  ##
  # Returns the operating system's temporary file path.

  def self.tmpdir
    tmp = nil
    ['TMPDIR', 'TMP', 'TEMP', ['system temporary path', @systmpdir], ['/tmp']*2, ['.']*2].each do |name, dir = ENV[name]|
      next if !dir
      dir = File.expand_path(dir)
      stat = File.stat(dir) rescue next
      case
      when !stat.directory?
        warn "#{name} is not a directory: #{dir}"
      when !stat.writable?
        warn "#{name} is not writable: #{dir}"
      when stat.world_writable? && !stat.sticky?
        warn "#{name} is world-writable: #{dir}"
      else
        tmp = dir
        break
      end
    end
    raise ArgumentError, "could not find a temporary directory" unless tmp
    tmp
  end

  # Bundler::Dir.mktmpdir creates a temporary directory.
  #
  # The directory is created with 0700 permission.
  # Application should not change the permission to make the temporary directory accessible from other users.
  #
  # The prefix and suffix of the name of the directory is specified by
  # the optional first argument, <i>prefix_suffix</i>.
  # - If it is not specified or nil, "d" is used as the prefix and no suffix is used.
  # - If it is a string, it is used as the prefix and no suffix is used.
  # - If it is an array, first element is used as the prefix and second element is used as a suffix.
  #
  #  Bundler::Dir.mktmpdir {|dir| dir is ".../d..." }
  #  Bundler::Dir.mktmpdir("foo") {|dir| dir is ".../foo..." }
  #  Bundler::Dir.mktmpdir(["foo", "bar"]) {|dir| dir is ".../foo...bar" }
  #
  # The directory is created under Bundler::Dir.tmpdir or
  # the optional second argument <i>tmpdir</i> if non-nil value is given.
  #
  #  Bundler::Dir.mktmpdir {|dir| dir is "#{Bundler::Dir.tmpdir}/d..." }
  #  Bundler::Dir.mktmpdir(nil, "/var/tmp") {|dir| dir is "/var/tmp/d..." }
  #
  # If a block is given,
  # it is yielded with the path of the directory.
  # The directory and its contents are removed
  # using Bundler::FileUtils.remove_entry before Bundler::Dir.mktmpdir returns.
  # The value of the block is returned.
  #
  #  Bundler::Dir.mktmpdir {|dir|
  #    # use the directory...
  #    open("#{dir}/foo", "w") { ... }
  #  }
  #
  # If a block is not given,
  # The path of the directory is returned.
  # In this case, Bundler::Dir.mktmpdir doesn't remove the directory.
  #
  #  dir = Bundler::Dir.mktmpdir
  #  begin
  #    # use the directory...
  #    open("#{dir}/foo", "w") { ... }
  #  ensure
  #    # remove the directory.
  #    Bundler::FileUtils.remove_entry dir
  #  end
  #
  def self.mktmpdir(prefix_suffix=nil, *rest, **options)
    base = nil
    path = Tmpname.create(prefix_suffix || "d", *rest, **options) {|p, _, _, d|
      base = d
      mkdir(p, 0700)
    }
    if block_given?
      begin
        yield path.dup
      ensure
        unless base
          stat = File.stat(File.dirname(path))
          if stat.world_writable? and !stat.sticky?
            raise ArgumentError, "parent directory is world writable but not sticky"
          end
        end
        Bundler::FileUtils.remove_entry path
      end
    else
      path
    end
  end

  module Tmpname # :nodoc:
    module_function

    def tmpdir
      Bundler::Dir.tmpdir
    end

    UNUSABLE_CHARS = "^,-.0-9A-Z_a-z~"

    class << (RANDOM = Random.new)
      MAX = 36**6 # < 0x100000000
      def next
        rand(MAX).to_s(36)
      end
    end
    private_constant :RANDOM

    def create(basename, tmpdir=nil, max_try: nil, **opts)
      origdir = tmpdir
      tmpdir ||= tmpdir()
      n = nil
      prefix, suffix = basename
      prefix = (String.try_convert(prefix) or
                raise ArgumentError, "unexpected prefix: #{prefix.inspect}")
      prefix = prefix.delete(UNUSABLE_CHARS)
      suffix &&= (String.try_convert(suffix) or
                  raise ArgumentError, "unexpected suffix: #{suffix.inspect}")
      suffix &&= suffix.delete(UNUSABLE_CHARS)
      begin
        t = Time.now.strftime("%Y%m%d")
        path = "#{prefix}#{t}-#{$$}-#{RANDOM.next}"\
               "#{n ? %[-#{n}] : ''}#{suffix||''}"
        path = File.join(tmpdir, path)
        yield(path, n, opts, origdir)
      rescue Errno::EEXIST
        n ||= 0
        n += 1
        retry if !max_try or n < max_try
        raise "cannot generate temporary name using `#{basename}' under `#{tmpdir}'"
      end
      path
    end
  end
end
PK+"#[���__-gems/bundler-2.3.27/lib/bundler/dependency.rbnu�[���# frozen_string_literal: true

require "rubygems/dependency"
require_relative "shared_helpers"
require_relative "rubygems_ext"

module Bundler
  class Dependency < Gem::Dependency
    attr_reader :autorequire
    attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref, :force_ruby_platform

    ALL_RUBY_VERSIONS = ((18..27).to_a + (30..31).to_a).freeze
    PLATFORM_MAP = {
      :ruby        => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
      :mri         => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
      :rbx         => [Gem::Platform::RUBY],
      :truffleruby => [Gem::Platform::RUBY],
      :jruby       => [Gem::Platform::JAVA, [18, 19]],
      :windows     => [Gem::Platform::WINDOWS, ALL_RUBY_VERSIONS],
      :mswin       => [Gem::Platform::MSWIN,     ALL_RUBY_VERSIONS],
      :mswin64     => [Gem::Platform::MSWIN64,   ALL_RUBY_VERSIONS - [18]],
      :mingw       => [Gem::Platform::MINGW,     ALL_RUBY_VERSIONS],
      :x64_mingw   => [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
    }.each_with_object({}) do |(platform, spec), hash|
      hash[platform] = spec[0]
      spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
    end.freeze

    def initialize(name, version, options = {}, &blk)
      type = options["type"] || :runtime
      super(name, version, type)

      @autorequire    = nil
      @groups         = Array(options["group"] || :default).map(&:to_sym)
      @source         = options["source"]
      @path           = options["path"]
      @git            = options["git"]
      @github         = options["github"]
      @branch         = options["branch"]
      @ref            = options["ref"]
      @platforms      = Array(options["platforms"])
      @env            = options["env"]
      @should_include = options.fetch("should_include", true)
      @gemfile        = options["gemfile"]
      @force_ruby_platform = options["force_ruby_platform"]

      @autorequire = Array(options["require"] || []) if options.key?("require")
    end

    # Returns the platforms this dependency is valid for, in the same order as
    # passed in the `valid_platforms` parameter
    def gem_platforms(valid_platforms)
      return valid_platforms if @platforms.empty?

      valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
    end

    def expanded_platforms
      @expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
    end

    def should_include?
      @should_include && current_env? && current_platform?
    end

    def current_env?
      return true unless @env
      if @env.is_a?(Hash)
        @env.all? do |key, val|
          ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
        end
      else
        ENV[@env.to_s]
      end
    end

    def current_platform?
      return true if @platforms.empty?
      @platforms.any? do |p|
        Bundler.current_ruby.send("#{p}?")
      end
    end

    def to_lock
      out = super
      out << "!" if source
      out
    end

    def specific?
      super
    rescue NoMethodError
      requirement != ">= 0"
    end
  end
end
PK+"#[_��mwmw-gems/bundler-2.3.27/lib/bundler/definition.rbnu�[���# frozen_string_literal: true

require_relative "lockfile_parser"

module Bundler
  class Definition
    include GemHelpers

    class << self
      # Do not create or modify a lockfile (Makes #lock a noop)
      attr_accessor :no_lock
    end

    attr_reader(
      :dependencies,
      :locked_deps,
      :locked_gems,
      :platforms,
      :requires,
      :ruby_version,
      :lockfile,
      :gemfiles
    )

    # Given a gemfile and lockfile creates a Bundler definition
    #
    # @param gemfile [Pathname] Path to Gemfile
    # @param lockfile [Pathname,nil] Path to Gemfile.lock
    # @param unlock [Hash, Boolean, nil] Gems that have been requested
    #   to be updated or true if all gems should be updated
    # @return [Bundler::Definition]
    def self.build(gemfile, lockfile, unlock)
      unlock ||= {}
      gemfile = Pathname.new(gemfile).expand_path

      raise GemfileNotFound, "#{gemfile} not found" unless gemfile.file?

      Dsl.evaluate(gemfile, lockfile, unlock)
    end

    #
    # How does the new system work?
    #
    # * Load information from Gemfile and Lockfile
    # * Invalidate stale locked specs
    #  * All specs from stale source are stale
    #  * All specs that are reachable only through a stale
    #    dependency are stale.
    # * If all fresh dependencies are satisfied by the locked
    #  specs, then we can try to resolve locally.
    #
    # @param lockfile [Pathname] Path to Gemfile.lock
    # @param dependencies [Array(Bundler::Dependency)] array of dependencies from Gemfile
    # @param sources [Bundler::SourceList]
    # @param unlock [Hash, Boolean, nil] Gems that have been requested
    #   to be updated or true if all gems should be updated
    # @param ruby_version [Bundler::RubyVersion, nil] Requested Ruby Version
    # @param optional_groups [Array(String)] A list of optional groups
    def initialize(lockfile, dependencies, sources, unlock, ruby_version = nil, optional_groups = [], gemfiles = [])
      if [true, false].include?(unlock)
        @unlocking_bundler = false
        @unlocking = unlock
      else
        @unlocking_bundler = unlock.delete(:bundler)
        @unlocking = unlock.any? {|_k, v| !Array(v).empty? }
      end

      @dependencies    = dependencies
      @sources         = sources
      @unlock          = unlock
      @optional_groups = optional_groups
      @remote          = false
      @prefer_local    = false
      @specs           = nil
      @ruby_version    = ruby_version
      @gemfiles        = gemfiles

      @lockfile               = lockfile
      @lockfile_contents      = String.new
      @locked_bundler_version = nil
      @locked_ruby_version    = nil
      @new_platform = nil

      if lockfile && File.exist?(lockfile)
        @lockfile_contents = Bundler.read_file(lockfile)
        @locked_gems = LockfileParser.new(@lockfile_contents)
        @locked_platforms = @locked_gems.platforms
        @platforms = @locked_platforms.dup
        @locked_bundler_version = @locked_gems.bundler_version
        @locked_ruby_version = @locked_gems.ruby_version
        @originally_locked_specs = SpecSet.new(@locked_gems.specs)

        if unlock != true
          @locked_deps    = @locked_gems.dependencies
          @locked_specs   = @originally_locked_specs
          @locked_sources = @locked_gems.sources
        else
          @unlock         = {}
          @locked_deps    = {}
          @locked_specs   = SpecSet.new([])
          @locked_sources = []
        end
      else
        @unlock         = {}
        @platforms      = []
        @locked_gems    = nil
        @locked_deps    = {}
        @locked_specs   = SpecSet.new([])
        @originally_locked_specs = @locked_specs
        @locked_sources = []
        @locked_platforms = []
      end

      locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
      @multisource_allowed = locked_gem_sources.size == 1 && locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?

      if @multisource_allowed
        unless sources.aggregate_global_source?
          msg = "Your lockfile contains a single rubygems source section with multiple remotes, which is insecure. Make sure you run `bundle install` in non frozen mode and commit the result to make your lockfile secure."

          Bundler::SharedHelpers.major_deprecation 2, msg
        end

        @sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
      end

      @unlock[:sources] ||= []
      @unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
        @ruby_version.diff(locked_ruby_version_object)
      end
      @unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)

      add_current_platform unless current_ruby_platform_locked? || Bundler.frozen_bundle?

      converge_path_sources_to_gemspec_sources
      @path_changes = converge_paths
      @source_changes = converge_sources

      if @unlock[:conservative]
        @unlock[:gems] ||= @dependencies.map(&:name)
      else
        eager_unlock = (@unlock[:gems] || []).map {|name| Dependency.new(name, ">= 0") }
        @unlock[:gems] = @locked_specs.for(eager_unlock, false, platforms).map(&:name).uniq
      end

      @dependency_changes = converge_dependencies
      @local_changes = converge_locals

      @requires = compute_requires
    end

    def gem_version_promoter
      @gem_version_promoter ||= GemVersionPromoter.new(@originally_locked_specs, @unlock[:gems])
    end

    def resolve_only_locally!
      @remote = false
      sources.local_only!
      resolve
    end

    def resolve_prefering_local!
      @prefer_local = true
      @remote = true
      sources.remote!
      resolve
    end

    def resolve_with_cache!
      sources.cached!
      resolve
    end

    def resolve_remotely!
      @remote = true
      sources.remote!
      resolve
    end

    # For given dependency list returns a SpecSet with Gemspec of all the required
    # dependencies.
    #  1. The method first resolves the dependencies specified in Gemfile
    #  2. After that it tries and fetches gemspec of resolved dependencies
    #
    # @return [Bundler::SpecSet]
    def specs
      @specs ||= materialize(requested_dependencies)
    end

    def new_specs
      specs - @locked_specs
    end

    def removed_specs
      @locked_specs - specs
    end

    def missing_specs
      resolve.materialize(requested_dependencies).missing_specs
    end

    def missing_specs?
      missing = missing_specs
      return false if missing.empty?
      Bundler.ui.debug "The definition is missing #{missing.map(&:full_name)}"
      true
    rescue BundlerError => e
      @resolve = nil
      @resolver = nil
      @specs = nil
      @gem_version_promoter = nil

      Bundler.ui.debug "The definition is missing dependencies, failed to resolve & materialize locally (#{e})"
      true
    end

    def requested_specs
      specs_for(requested_groups)
    end

    def requested_dependencies
      dependencies_for(requested_groups)
    end

    def current_dependencies
      dependencies.select do |d|
        d.should_include? && !d.gem_platforms([generic_local_platform]).empty?
      end
    end

    def locked_dependencies
      @locked_deps.values
    end

    def new_deps
      @new_deps ||= @dependencies - locked_dependencies
    end

    def deleted_deps
      @deleted_deps ||= locked_dependencies - @dependencies
    end

    def specs_for(groups)
      return specs if groups.empty?
      deps = dependencies_for(groups)
      materialize(deps)
    end

    def dependencies_for(groups)
      groups.map!(&:to_sym)
      current_dependencies.reject do |d|
        (d.groups & groups).empty?
      end
    end

    # Resolve all the dependencies specified in Gemfile. It ensures that
    # dependencies that have been already resolved via locked file and are fresh
    # are reused when resolving dependencies
    #
    # @return [SpecSet] resolved dependencies
    def resolve
      @resolve ||= if Bundler.frozen_bundle?
        Bundler.ui.debug "Frozen, using resolution from the lockfile"
        @locked_specs
      elsif !unlocking? && nothing_changed?
        if deleted_deps.any?
          Bundler.ui.debug("Some dependencies were deleted, using a subset of the resolution from the lockfile")
          SpecSet.new(filter_specs(@locked_specs, @dependencies - deleted_deps))
        else
          Bundler.ui.debug("Found no changes, using resolution from the lockfile")
          if @locked_gems.may_include_redundant_platform_specific_gems?
            SpecSet.new(filter_specs(@locked_specs, @dependencies))
          else
            @locked_specs
          end
        end
      else
        Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
        resolver.start(expanded_dependencies)
      end
    end

    def spec_git_paths
      sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
    end

    def groups
      dependencies.map(&:groups).flatten.uniq
    end

    def lock(file, preserve_unknown_sections = false)
      return if Definition.no_lock

      contents = to_lock

      # Convert to \r\n if the existing lock has them
      # i.e., Windows with `git config core.autocrlf=true`
      contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match("\r\n")

      if @locked_bundler_version
        locked_major = @locked_bundler_version.segments.first
        current_major = Gem::Version.create(Bundler::VERSION).segments.first

        updating_major = locked_major < current_major
      end

      preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler))

      return if file && File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections)

      if Bundler.frozen_bundle?
        Bundler.ui.error "Cannot write a changed lockfile while frozen."
        return
      end

      SharedHelpers.filesystem_access(file) do |p|
        File.open(p, "wb") {|f| f.puts(contents) }
      end
    end

    def locked_ruby_version
      return unless ruby_version
      if @unlock[:ruby] || !@locked_ruby_version
        Bundler::RubyVersion.system
      else
        @locked_ruby_version
      end
    end

    def locked_ruby_version_object
      return unless @locked_ruby_version
      @locked_ruby_version_object ||= begin
        unless version = RubyVersion.from_string(@locked_ruby_version)
          raise LockfileError, "The Ruby version #{@locked_ruby_version} from " \
            "#{@lockfile} could not be parsed. " \
            "Try running bundle update --ruby to resolve this."
        end
        version
      end
    end

    def to_lock
      require_relative "lockfile_generator"
      LockfileGenerator.generate(self)
    end

    def ensure_equivalent_gemfile_and_lockfile(explicit_flag = false)
      msg = String.new
      msg << "You are trying to install in deployment mode after changing\n" \
             "your Gemfile. Run `bundle install` elsewhere and add the\n" \
             "updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."

      unless explicit_flag
        suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
          "bundle config unset frozen"
        elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
          "bundle config unset deployment"
        end
        msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
               "freeze \nby running `#{suggested_command}`." if suggested_command
      end

      added =   []
      deleted = []
      changed = []

      new_platforms = @platforms - @locked_platforms
      deleted_platforms = @locked_platforms - @platforms
      added.concat new_platforms.map {|p| "* platform: #{p}" }
      deleted.concat deleted_platforms.map {|p| "* platform: #{p}" }

      added.concat new_deps.map {|d| "* #{pretty_dep(d)}" } if new_deps.any?
      deleted.concat deleted_deps.map {|d| "* #{pretty_dep(d)}" } if deleted_deps.any?

      both_sources = Hash.new {|h, k| h[k] = [] }
      @dependencies.each {|d| both_sources[d.name][0] = d }

      locked_dependencies.each do |d|
        next if !Bundler.feature_flag.bundler_3_mode? && @locked_specs[d.name].empty?

        both_sources[d.name][1] = d
      end

      both_sources.each do |name, (dep, lock_dep)|
        next if dep.nil? || lock_dep.nil?

        gemfile_source = dep.source || sources.default_source
        lock_source = lock_dep.source || sources.default_source
        next if lock_source.include?(gemfile_source)

        gemfile_source_name = dep.source ? gemfile_source.identifier : "no specified source"
        lockfile_source_name = lock_dep.source ? lock_source.identifier : "no specified source"
        changed << "* #{name} from `#{lockfile_source_name}` to `#{gemfile_source_name}`"
      end

      reason = change_reason
      msg << "\n\n#{reason.split(", ").map(&:capitalize).join("\n")}" unless reason.strip.empty?
      msg << "\n\nYou have added to the Gemfile:\n" << added.join("\n") if added.any?
      msg << "\n\nYou have deleted from the Gemfile:\n" << deleted.join("\n") if deleted.any?
      msg << "\n\nYou have changed in the Gemfile:\n" << changed.join("\n") if changed.any?
      msg << "\n"

      raise ProductionError, msg if added.any? || deleted.any? || changed.any? || !nothing_changed?
    end

    def validate_runtime!
      validate_ruby!
      validate_platforms!
    end

    def validate_ruby!
      return unless ruby_version

      if diff = ruby_version.diff(Bundler::RubyVersion.system)
        problem, expected, actual = diff

        msg = case problem
              when :engine
                "Your Ruby engine is #{actual}, but your Gemfile specified #{expected}"
              when :version
                "Your Ruby version is #{actual}, but your Gemfile specified #{expected}"
              when :engine_version
                "Your #{Bundler::RubyVersion.system.engine} version is #{actual}, but your Gemfile specified #{ruby_version.engine} #{expected}"
              when :patchlevel
                if !expected.is_a?(String)
                  "The Ruby patchlevel in your Gemfile must be a string"
                else
                  "Your Ruby patchlevel is #{actual}, but your Gemfile specified #{expected}"
                end
        end

        raise RubyVersionMismatch, msg
      end
    end

    def validate_platforms!
      return if current_platform_locked?

      raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
        "but your local platform is #{Bundler.local_platform}. " \
        "Add the current platform to the lockfile with\n`bundle lock --add-platform #{Bundler.local_platform}` and try again."
    end

    def add_platform(platform)
      @new_platform ||= !@platforms.include?(platform)
      @platforms |= [platform]
    end

    def remove_platform(platform)
      return if @platforms.delete(Gem::Platform.new(platform))
      raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
    end

    def most_specific_locked_platform
      @platforms.min_by do |bundle_platform|
        platform_specificity_match(bundle_platform, local_platform)
      end
    end

    attr_reader :sources
    private :sources

    def nothing_changed?
      !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes
    end

    def unlocking?
      @unlocking
    end

    private

    def resolver
      @resolver ||= begin
        last_resolve = converge_locked_specs
        remove_ruby_from_platforms_if_necessary!(current_dependencies)
        Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve(last_resolve), platforms)
      end
    end

    def expanded_dependencies
      @expanded_dependencies ||= dependencies + metadata_dependencies
    end

    def filter_specs(specs, deps)
      SpecSet.new(specs).for(deps, false, platforms)
    end

    def materialize(dependencies)
      specs = resolve.materialize(dependencies)
      missing_specs = specs.missing_specs

      if missing_specs.any?
        missing_specs.each do |s|
          locked_gem = @locked_specs[s.name].last
          next if locked_gem.nil? || locked_gem.version != s.version || !@remote
          raise GemNotFound, "Your bundle is locked to #{locked_gem} from #{locked_gem.source}, but that version can " \
                             "no longer be found in that source. That means the author of #{locked_gem} has removed it. " \
                             "You'll need to update your bundle to a version other than #{locked_gem} that hasn't been " \
                             "removed in order to install."
        end

        missing_specs_list = missing_specs.group_by(&:source).map do |source, missing_specs_for_source|
          "#{missing_specs_for_source.map(&:full_name).join(", ")} in #{source}"
        end

        raise GemNotFound, "Could not find #{missing_specs_list.join(" nor ")}"
      end

      loop do
        incomplete_specs = specs.incomplete_specs
        break if incomplete_specs.empty?

        Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
        @resolve = resolver.start(expanded_dependencies, :exclude_specs => incomplete_specs)
        specs = resolve.materialize(dependencies)
      end

      bundler = sources.metadata_source.specs.search(Gem::Dependency.new("bundler", VERSION)).last
      specs["bundler"] = bundler

      specs
    end

    def precompute_source_requirements_for_indirect_dependencies?
      @remote && sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && !sources.aggregate_global_source?
    end

    def pin_locally_available_names(source_requirements)
      source_requirements.each_with_object({}) do |(name, original_source), new_source_requirements|
        local_source = original_source.dup
        local_source.local_only!

        new_source_requirements[name] = if local_source.specs.search(name).any?
          local_source
        else
          original_source
        end
      end
    end

    def current_ruby_platform_locked?
      return false unless generic_local_platform == Gem::Platform::RUBY
      return false if Bundler.settings[:force_ruby_platform] && !@platforms.include?(Gem::Platform::RUBY)

      current_platform_locked?
    end

    def current_platform_locked?
      @platforms.any? do |bundle_platform|
        MatchPlatform.platforms_match?(bundle_platform, Bundler.local_platform)
      end
    end

    def add_current_platform
      add_platform(local_platform)
    end

    def change_reason
      if unlocking?
        unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
          if v == true
            k.to_s
          else
            v = Array(v)
            "#{k}: (#{v.join(", ")})"
          end
        end.join(", ")
        return "bundler is unlocking #{unlock_reason}"
      end
      [
        [@source_changes, "the list of sources changed"],
        [@dependency_changes, "the dependencies in your gemfile changed"],
        [@new_platform, "you added a new platform to your gemfile"],
        [@path_changes, "the gemspecs for path gems changed"],
        [@local_changes, "the gemspecs for git local gems changed"],
      ].select(&:first).map(&:last).join(", ")
    end

    def pretty_dep(dep)
      SharedHelpers.pretty_dependency(dep)
    end

    # Check if the specs of the given source changed
    # according to the locked source.
    def specs_changed?(source)
      locked = @locked_sources.find {|s| s == source }

      !locked || dependencies_for_source_changed?(source, locked) || specs_for_source_changed?(source)
    end

    def dependencies_for_source_changed?(source, locked_source = source)
      deps_for_source = @dependencies.select {|s| s.source == source }
      locked_deps_for_source = locked_dependencies.select {|dep| dep.source == locked_source }

      deps_for_source.uniq.sort != locked_deps_for_source.sort
    end

    def specs_for_source_changed?(source)
      locked_index = Index.new
      locked_index.use(@locked_specs.select {|s| source.can_lock?(s) })

      # order here matters, since Index#== is checking source.specs.include?(locked_index)
      locked_index != source.specs
    rescue PathError, GitError => e
      Bundler.ui.debug "Assuming that #{source} has not changed since fetching its specs errored (#{e})"
      false
    end

    # Get all locals and override their matching sources.
    # Return true if any of the locals changed (for example,
    # they point to a new revision) or depend on new specs.
    def converge_locals
      locals = []

      Bundler.settings.local_overrides.map do |k, v|
        spec   = @dependencies.find {|s| s.name == k }
        source = spec && spec.source
        if source && source.respond_to?(:local_override!)
          source.unlock! if @unlock[:gems].include?(spec.name)
          locals << [source, source.local_override!(v)]
        end
      end

      sources_with_changes = locals.select do |source, changed|
        changed || specs_changed?(source)
      end.map(&:first)
      !sources_with_changes.each {|source| @unlock[:sources] << source.name }.empty?
    end

    def converge_paths
      sources.path_sources.any? do |source|
        specs_changed?(source)
      end
    end

    def converge_path_source_to_gemspec_source(source)
      return source unless source.instance_of?(Source::Path)
      gemspec_source = sources.path_sources.find {|s| s.is_a?(Source::Gemspec) && s.as_path_source == source }
      gemspec_source || source
    end

    def converge_path_sources_to_gemspec_sources
      @locked_sources.map! do |source|
        converge_path_source_to_gemspec_source(source)
      end
      @locked_specs.each do |spec|
        spec.source &&= converge_path_source_to_gemspec_source(spec.source)
      end
      @locked_deps.each do |_, dep|
        dep.source &&= converge_path_source_to_gemspec_source(dep.source)
      end
    end

    def converge_sources
      # Replace the sources from the Gemfile with the sources from the Gemfile.lock,
      # if they exist in the Gemfile.lock and are `==`. If you can't find an equivalent
      # source in the Gemfile.lock, use the one from the Gemfile.
      changes = sources.replace_sources!(@locked_sources)

      sources.all_sources.each do |source|
        # If the source is unlockable and the current command allows an unlock of
        # the source (for example, you are doing a `bundle update <foo>` of a git-pinned
        # gem), unlock it. For git sources, this means to unlock the revision, which
        # will cause the `ref` used to be the most recent for the branch (or master) if
        # an explicit `ref` is not used.
        if source.respond_to?(:unlock!) && @unlock[:sources].include?(source.name)
          source.unlock!
          changes = true
        end
      end

      changes
    end

    def converge_dependencies
      changes = false

      @dependencies.each do |dep|
        if dep.source
          dep.source = sources.get(dep.source)
        end

        unless locked_dep = @locked_deps[dep.name]
          changes = true
          next
        end

        # Gem::Dependency#== matches Gem::Dependency#type. As the lockfile
        # doesn't carry a notion of the dependency type, if you use
        # add_development_dependency in a gemspec that's loaded with the gemspec
        # directive, the lockfile dependencies and resolved dependencies end up
        # with a mismatch on #type. Work around that by setting the type on the
        # dep from the lockfile.
        locked_dep.instance_variable_set(:@type, dep.type)

        # We already know the name matches from the hash lookup
        # so we only need to check the requirement now
        changes ||= dep.requirement != locked_dep.requirement
      end

      changes
    end

    # Remove elements from the locked specs that are expired. This will most
    # commonly happen if the Gemfile has changed since the lockfile was last
    # generated
    def converge_locked_specs
      converged = converge_specs(@locked_specs)

      resolve = SpecSet.new(converged.reject {|s| @unlock[:gems].include?(s.name) })

      diff = nil

      # Now, we unlock any sources that do not have anymore gems pinned to it
      sources.all_sources.each do |source|
        next unless source.respond_to?(:unlock!)

        unless resolve.any? {|s| s.source == source }
          diff ||= @locked_specs.to_a - resolve.to_a
          source.unlock! if diff.any? {|s| s.source == source }
        end
      end

      resolve
    end

    def converge_specs(specs)
      converged = []

      deps = @dependencies.select do |dep|
        specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
      end

      @specs_that_changed_sources = []

      specs.each do |s|
        dep = @dependencies.find {|d| s.satisfies?(d) }

        # Replace the locked dependency's source with the equivalent source from the Gemfile
        s.source = if dep && dep.source
          gemfile_source = dep.source
          lockfile_source = s.source

          @specs_that_changed_sources << s if gemfile_source != lockfile_source

          gemfile_source
        else
          sources.get_with_fallback(s.source)
        end

        next if @unlock[:sources].include?(s.source.name)

        # Path sources have special logic
        if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
          new_specs = begin
            s.source.specs
          rescue PathError, GitError
            # if we won't need the source (according to the lockfile),
            # don't error if the path/git source isn't available
            next if specs.
                    for(requested_dependencies, false).
                    none? {|locked_spec| locked_spec.source == s.source }

            raise
          end

          new_spec = new_specs[s].first

          # If the spec is no longer in the path source, unlock it. This
          # commonly happens if the version changed in the gemspec
          next unless new_spec

          s.dependencies.replace(new_spec.dependencies)
        end

        if dep.nil? && requested_dependencies.find {|d| s.name == d.name }
          @unlock[:gems] << s.name
        else
          converged << s
        end
      end

      filter_specs(converged, deps)
    end

    def metadata_dependencies
      @metadata_dependencies ||= [
        Dependency.new("Ruby\0", Gem.ruby_version),
        Dependency.new("RubyGems\0", Gem::VERSION),
      ]
    end

    def source_requirements
      # Record the specs available in each gem's source, so that those
      # specs will be available later when the resolver knows where to
      # look for that gemspec (or its dependencies)
      source_requirements = if precompute_source_requirements_for_indirect_dependencies?
        all_requirements = source_map.all_requirements
        all_requirements = pin_locally_available_names(all_requirements) if @prefer_local
        { :default => sources.default_source }.merge(all_requirements)
      else
        { :default => Source::RubygemsAggregate.new(sources, source_map) }.merge(source_map.direct_requirements)
      end
      source_requirements.merge!(source_map.locked_requirements) unless @remote
      metadata_dependencies.each do |dep|
        source_requirements[dep.name] = sources.metadata_source
      end
      source_requirements[:default_bundler] = source_requirements["bundler"] || sources.default_source
      source_requirements["bundler"] = sources.metadata_source # needs to come last to override
      verify_changed_sources!
      source_requirements
    end

    def verify_changed_sources!
      @specs_that_changed_sources.each do |s|
        if s.source.specs.search(s.name).empty?
          raise GemNotFound, "Could not find gem '#{s.name}' in #{s.source}"
        end
      end
    end

    def requested_groups
      values = groups - Bundler.settings[:without] - @optional_groups + Bundler.settings[:with]
      values &= Bundler.settings[:only] unless Bundler.settings[:only].empty?
      values
    end

    def lockfiles_equal?(current, proposed, preserve_unknown_sections)
      if preserve_unknown_sections
        sections_to_ignore = LockfileParser.sections_to_ignore(@locked_bundler_version)
        sections_to_ignore += LockfileParser.unknown_sections_in_lockfile(current)
        sections_to_ignore += LockfileParser::ENVIRONMENT_VERSION_SECTIONS
        pattern = /#{Regexp.union(sections_to_ignore)}\n(\s{2,}.*\n)+/
        whitespace_cleanup = /\n{2,}/
        current = current.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
        proposed = proposed.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
      end
      current == proposed
    end

    def compute_requires
      dependencies.reduce({}) do |requires, dep|
        next requires unless dep.should_include?
        requires[dep.name] = Array(dep.autorequire || dep.name).map do |file|
          # Allow `require: true` as an alias for `require: <name>`
          file == true ? dep.name : file
        end
        requires
      end
    end

    def additional_base_requirements_for_resolve(last_resolve)
      return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
      converge_specs(@originally_locked_specs - last_resolve).map do |locked_spec|
        Dependency.new(locked_spec.name, ">= #{locked_spec.version}")
      end.uniq
    end

    def remove_ruby_from_platforms_if_necessary!(dependencies)
      return if Bundler.frozen_bundle? ||
                Bundler.local_platform == Gem::Platform::RUBY ||
                !platforms.include?(Gem::Platform::RUBY) ||
                (@new_platform && platforms.last == Gem::Platform::RUBY) ||
                !@originally_locked_specs.incomplete_ruby_specs?(dependencies)

      remove_platform(Gem::Platform::RUBY)
      add_current_platform
    end

    def source_map
      @source_map ||= SourceMap.new(sources, dependencies, @locked_specs)
    end
  end
end
PK+"#[�j�{��2gems/bundler-2.3.27/lib/bundler/friendly_errors.rbnu�[���# frozen_string_literal: true

require_relative "vendored_thor"

module Bundler
  module FriendlyErrors
    module_function

    def enable!
      @disabled = false
    end

    def disabled?
      @disabled
    end

    def disable!
      @disabled = true
    end

    def log_error(error)
      case error
      when YamlSyntaxError
        Bundler.ui.error error.message
        Bundler.ui.trace error.orig_exception
      when Dsl::DSLError, GemspecError
        Bundler.ui.error error.message
      when GemRequireError
        Bundler.ui.error error.message
        Bundler.ui.trace error.orig_exception
      when BundlerError
        if Bundler.ui.debug?
          Bundler.ui.trace error
        else
          Bundler.ui.error error.message, :wrap => true
        end
      when Thor::Error
        Bundler.ui.error error.message
      when LoadError
        raise error unless error.message =~ /cannot load such file -- openssl|openssl.so|libcrypto.so/
        Bundler.ui.error "\nCould not load OpenSSL. #{error.class}: #{error}\n#{error.backtrace.join("\n  ")}"
      when Interrupt
        Bundler.ui.error "\nQuitting..."
        Bundler.ui.trace error
      when Gem::InvalidSpecificationException
        Bundler.ui.error error.message, :wrap => true
      when SystemExit
      when *[defined?(Java::JavaLang::OutOfMemoryError) && Java::JavaLang::OutOfMemoryError].compact
        Bundler.ui.error "\nYour JVM has run out of memory, and Bundler cannot continue. " \
          "You can decrease the amount of memory Bundler needs by removing gems from your Gemfile, " \
          "especially large gems. (Gems can be as large as hundreds of megabytes, and Bundler has to read those files!). " \
          "Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
      else request_issue_report_for(error)
      end
    end

    def exit_status(error)
      case error
      when BundlerError then error.status_code
      when Thor::Error then 15
      when SystemExit then error.status
      else 1
      end
    end

    def request_issue_report_for(e)
      Bundler.ui.error <<-EOS.gsub(/^ {8}/, ""), nil, nil
        --- ERROR REPORT TEMPLATE -------------------------------------------------------

        ```
        #{exception_message(e)}
        ```

        #{Bundler::Env.report}
        --- TEMPLATE END ----------------------------------------------------------------

      EOS

      Bundler.ui.error "Unfortunately, an unexpected error occurred, and Bundler cannot continue."

      Bundler.ui.error <<-EOS.gsub(/^ {8}/, ""), nil, :yellow

        First, try this link to see if there are any existing issue reports for this error:
        #{issues_url(e)}

        If there aren't any reports for this error yet, please fill in the new issue form located at #{new_issue_url}, and copy and paste the report template above in there.
      EOS
    end

    def exception_message(error)
      message = serialized_exception_for(error)
      cause = error.cause
      return message unless cause

      message + serialized_exception_for(cause)
    end

    def serialized_exception_for(e)
      <<-EOS.gsub(/^ {8}/, "")
        #{e.class}: #{e.message}
          #{e.backtrace && e.backtrace.join("\n          ").chomp}
      EOS
    end

    def issues_url(exception)
      message = exception.message.lines.first.tr(":", " ").chomp
      message = message.split("-").first if exception.is_a?(Errno)
      require "cgi"
      "https://github.com/rubygems/rubygems/search?q=" \
        "#{CGI.escape(message)}&type=Issues"
    end

    def new_issue_url
      "https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md"
    end
  end

  def self.with_friendly_errors
    FriendlyErrors.enable!
    yield
  rescue SignalException
    raise
  rescue Exception => e # rubocop:disable Lint/RescueException
    raise if FriendlyErrors.disabled?

    FriendlyErrors.log_error(e)
    exit FriendlyErrors.exit_status(e)
  end
end
PK+"#[���2gems/bundler-2.3.27/lib/bundler/lockfile_parser.rbnu�[���# frozen_string_literal: true

module Bundler
  class LockfileParser
    attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, :ruby_version

    BUNDLED      = "BUNDLED WITH".freeze
    DEPENDENCIES = "DEPENDENCIES".freeze
    PLATFORMS    = "PLATFORMS".freeze
    RUBY         = "RUBY VERSION".freeze
    GIT          = "GIT".freeze
    GEM          = "GEM".freeze
    PATH         = "PATH".freeze
    PLUGIN       = "PLUGIN SOURCE".freeze
    SPECS        = "  specs:".freeze
    OPTIONS      = /^  ([a-z]+): (.*)$/i.freeze
    SOURCE       = [GIT, GEM, PATH, PLUGIN].freeze

    SECTIONS_BY_VERSION_INTRODUCED = {
      Gem::Version.create("1.0") => [DEPENDENCIES, PLATFORMS, GIT, GEM, PATH].freeze,
      Gem::Version.create("1.10") => [BUNDLED].freeze,
      Gem::Version.create("1.12") => [RUBY].freeze,
      Gem::Version.create("1.13") => [PLUGIN].freeze,
    }.freeze

    KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten.freeze

    ENVIRONMENT_VERSION_SECTIONS = [BUNDLED, RUBY].freeze

    def self.sections_in_lockfile(lockfile_contents)
      lockfile_contents.scan(/^\w[\w ]*$/).uniq
    end

    def self.unknown_sections_in_lockfile(lockfile_contents)
      sections_in_lockfile(lockfile_contents) - KNOWN_SECTIONS
    end

    def self.sections_to_ignore(base_version = nil)
      base_version &&= base_version.release
      base_version ||= Gem::Version.create("1.0".dup)
      attributes = []
      SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced|
        next if version <= base_version
        attributes += introduced
      end
      attributes
    end

    def self.bundled_with
      lockfile = Bundler.default_lockfile
      return unless lockfile.file?

      lockfile_contents = Bundler.read_file(lockfile)
      return unless lockfile_contents.include?(BUNDLED)

      lockfile_contents.split(BUNDLED).last.strip
    end

    def initialize(lockfile)
      @platforms    = []
      @sources      = []
      @dependencies = {}
      @state        = nil
      @specs        = {}

      if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
        raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \
          "Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock."
      end

      lockfile.split(/(?:\r?\n)+/).each do |line|
        if SOURCE.include?(line)
          @state = :source
          parse_source(line)
        elsif line == DEPENDENCIES
          @state = :dependency
        elsif line == PLATFORMS
          @state = :platform
        elsif line == RUBY
          @state = :ruby
        elsif line == BUNDLED
          @state = :bundled_with
        elsif line =~ /^[^\s]/
          @state = nil
        elsif @state
          send("parse_#{@state}", line)
        end
      end
      @specs = @specs.values.sort_by(&:identifier)
    rescue ArgumentError => e
      Bundler.ui.debug(e)
      raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
        "and then `bundle install` to generate a new lockfile."
    end

    def may_include_redundant_platform_specific_gems?
      bundler_version.nil? || bundler_version < Gem::Version.new("1.16.2")
    end

    private

    TYPES = {
      GIT    => Bundler::Source::Git,
      GEM    => Bundler::Source::Rubygems,
      PATH   => Bundler::Source::Path,
      PLUGIN => Bundler::Plugin,
    }.freeze

    def parse_source(line)
      case line
      when SPECS
        case @type
        when PATH
          @current_source = TYPES[@type].from_lock(@opts)
          @sources << @current_source
        when GIT
          @current_source = TYPES[@type].from_lock(@opts)
          @sources << @current_source
        when GEM
          @opts["remotes"] = Array(@opts.delete("remote")).reverse
          @current_source = TYPES[@type].from_lock(@opts)
          @sources << @current_source
        when PLUGIN
          @current_source = Plugin.source_from_lock(@opts)
          @sources << @current_source
        end
      when OPTIONS
        value = $2
        value = true if value == "true"
        value = false if value == "false"

        key = $1

        if @opts[key]
          @opts[key] = Array(@opts[key])
          @opts[key] << value
        else
          @opts[key] = value
        end
      when *SOURCE
        @current_source = nil
        @opts = {}
        @type = line
      else
        parse_spec(line)
      end
    end

    space = / /
    NAME_VERSION = /
      ^(#{space}{2}|#{space}{4}|#{space}{6})(?!#{space}) # Exactly 2, 4, or 6 spaces at the start of the line
      (.*?)                                              # Name
      (?:#{space}\(([^-]*)                               # Space, followed by version
      (?:-(.*))?\))?                                     # Optional platform
      (!)?                                               # Optional pinned marker
      $                                                  # Line end
    /xo.freeze

    def parse_dependency(line)
      return unless line =~ NAME_VERSION
      spaces = $1
      return unless spaces.size == 2
      name = $2
      version = $3
      pinned = $5

      version = version.split(",").map(&:strip) if version

      dep = Bundler::Dependency.new(name, version)

      if pinned && dep.name != "bundler"
        spec = @specs.find {|_, v| v.name == dep.name }
        dep.source = spec.last.source if spec

        # Path sources need to know what the default name / version
        # to use in the case that there are no gemspecs present. A fake
        # gemspec is created based on the version set on the dependency
        # TODO: Use the version from the spec instead of from the dependency
        if version && version.size == 1 && version.first =~ /^\s*= (.+)\s*$/ && dep.source.is_a?(Bundler::Source::Path)
          dep.source.name    = name
          dep.source.version = $1
        end
      end

      @dependencies[dep.name] = dep
    end

    def parse_spec(line)
      return unless line =~ NAME_VERSION
      spaces = $1
      name = $2
      version = $3
      platform = $4

      if spaces.size == 4
        version = Gem::Version.new(version)
        platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
        @current_spec = LazySpecification.new(name, version, platform)
        @current_spec.source = @current_source
        @current_source.add_dependency_names(name)

        @specs[@current_spec.identifier] = @current_spec
      elsif spaces.size == 6
        version = version.split(",").map(&:strip) if version
        dep = Gem::Dependency.new(name, version)
        @current_spec.dependencies << dep
      end
    end

    def parse_platform(line)
      @platforms << Gem::Platform.new($1) if line =~ /^  (.*)$/
    end

    def parse_bundled_with(line)
      line = line.strip
      return unless Gem::Version.correct?(line)
      @bundler_version = Gem::Version.create(line)
    end

    def parse_ruby(line)
      @ruby_version = line.strip
    end
  end
end
PK+"#[�8�9%_%_"gems/bundler-2.3.27/lib/bundler.rbnu�[���# frozen_string_literal: true

require_relative "bundler/vendored_fileutils"
require "pathname"
require "rbconfig"

require_relative "bundler/errors"
require_relative "bundler/environment_preserver"
require_relative "bundler/plugin"
require_relative "bundler/rubygems_ext"
require_relative "bundler/rubygems_integration"
require_relative "bundler/version"
require_relative "bundler/constants"
require_relative "bundler/current_ruby"
require_relative "bundler/build_metadata"

# Bundler provides a consistent environment for Ruby projects by
# tracking and installing the exact gems and versions that are needed.
#
# Since Ruby 2.6, Bundler is a part of Ruby's standard library.
#
# Bundler is used by creating _gemfiles_ listing all the project dependencies
# and (optionally) their versions and then using
#
#   require 'bundler/setup'
#
# or Bundler.setup to setup environment where only specified gems and their
# specified versions could be used.
#
# See {Bundler website}[https://bundler.io/docs.html] for extensive documentation
# on gemfiles creation and Bundler usage.
#
# As a standard library inside project, Bundler could be used for introspection
# of loaded and required modules.
#
module Bundler
  environment_preserver = EnvironmentPreserver.from_env
  ORIGINAL_ENV = environment_preserver.restore
  environment_preserver.replace_with_backup
  SUDO_MUTEX = Thread::Mutex.new

  autoload :Definition,             File.expand_path("bundler/definition", __dir__)
  autoload :Dependency,             File.expand_path("bundler/dependency", __dir__)
  autoload :Deprecate,              File.expand_path("bundler/deprecate", __dir__)
  autoload :Digest,                 File.expand_path("bundler/digest", __dir__)
  autoload :Dsl,                    File.expand_path("bundler/dsl", __dir__)
  autoload :EndpointSpecification,  File.expand_path("bundler/endpoint_specification", __dir__)
  autoload :Env,                    File.expand_path("bundler/env", __dir__)
  autoload :Fetcher,                File.expand_path("bundler/fetcher", __dir__)
  autoload :FeatureFlag,            File.expand_path("bundler/feature_flag", __dir__)
  autoload :GemHelper,              File.expand_path("bundler/gem_helper", __dir__)
  autoload :GemHelpers,             File.expand_path("bundler/gem_helpers", __dir__)
  autoload :GemVersionPromoter,     File.expand_path("bundler/gem_version_promoter", __dir__)
  autoload :Graph,                  File.expand_path("bundler/graph", __dir__)
  autoload :Index,                  File.expand_path("bundler/index", __dir__)
  autoload :Injector,               File.expand_path("bundler/injector", __dir__)
  autoload :Installer,              File.expand_path("bundler/installer", __dir__)
  autoload :LazySpecification,      File.expand_path("bundler/lazy_specification", __dir__)
  autoload :LockfileParser,         File.expand_path("bundler/lockfile_parser", __dir__)
  autoload :MatchRemoteMetadata,    File.expand_path("bundler/match_remote_metadata", __dir__)
  autoload :ProcessLock,            File.expand_path("bundler/process_lock", __dir__)
  autoload :RemoteSpecification,    File.expand_path("bundler/remote_specification", __dir__)
  autoload :Resolver,               File.expand_path("bundler/resolver", __dir__)
  autoload :Retry,                  File.expand_path("bundler/retry", __dir__)
  autoload :RubyDsl,                File.expand_path("bundler/ruby_dsl", __dir__)
  autoload :RubyVersion,            File.expand_path("bundler/ruby_version", __dir__)
  autoload :Runtime,                File.expand_path("bundler/runtime", __dir__)
  autoload :SelfManager,            File.expand_path("bundler/self_manager", __dir__)
  autoload :Settings,               File.expand_path("bundler/settings", __dir__)
  autoload :SharedHelpers,          File.expand_path("bundler/shared_helpers", __dir__)
  autoload :Source,                 File.expand_path("bundler/source", __dir__)
  autoload :SourceList,             File.expand_path("bundler/source_list", __dir__)
  autoload :SourceMap,              File.expand_path("bundler/source_map", __dir__)
  autoload :SpecSet,                File.expand_path("bundler/spec_set", __dir__)
  autoload :StubSpecification,      File.expand_path("bundler/stub_specification", __dir__)
  autoload :UI,                     File.expand_path("bundler/ui", __dir__)
  autoload :URICredentialsFilter,   File.expand_path("bundler/uri_credentials_filter", __dir__)
  autoload :VersionRanges,          File.expand_path("bundler/version_ranges", __dir__)

  class << self
    def configure
      @configured ||= configure_gem_home_and_path
    end

    def ui
      (defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
    end

    def ui=(ui)
      Bundler.rubygems.ui = UI::RGProxy.new(ui)
      @ui = ui
    end

    # Returns absolute path of where gems are installed on the filesystem.
    def bundle_path
      @bundle_path ||= Pathname.new(configured_bundle_path.path).expand_path(root)
    end

    def create_bundle_path
      SharedHelpers.filesystem_access(bundle_path.to_s) do |p|
        mkdir_p(p)
      end unless bundle_path.exist?

      @bundle_path = bundle_path.realpath
    rescue Errno::EEXIST
      raise PathError, "Could not install to path `#{bundle_path}` " \
        "because a file already exists at that path. Either remove or rename the file so the directory can be created."
    end

    def configured_bundle_path
      @configured_bundle_path ||= settings.path.tap(&:validate!)
    end

    # Returns absolute location of where binstubs are installed to.
    def bin_path
      @bin_path ||= begin
        path = settings[:bin] || "bin"
        path = Pathname.new(path).expand_path(root).expand_path
        SharedHelpers.filesystem_access(path) {|p| FileUtils.mkdir_p(p) }
        path
      end
    end

    # Turns on the Bundler runtime. After +Bundler.setup+ call, all +load+ or
    # +require+ of the gems would be allowed only if they are part of
    # the Gemfile or Ruby's standard library. If the versions specified
    # in Gemfile, only those versions would be loaded.
    #
    # Assuming Gemfile
    #
    #    gem 'first_gem', '= 1.0'
    #    group :test do
    #      gem 'second_gem', '= 1.0'
    #    end
    #
    # The code using Bundler.setup works as follows:
    #
    #    require 'third_gem' # allowed, required from global gems
    #    require 'first_gem' # allowed, loads the last installed version
    #    Bundler.setup
    #    require 'fourth_gem' # fails with LoadError
    #    require 'second_gem' # loads exactly version 1.0
    #
    # +Bundler.setup+ can be called only once, all subsequent calls are no-op.
    #
    # If _groups_ list is provided, only gems from specified groups would
    # be allowed (gems specified outside groups belong to special +:default+ group).
    #
    # To require all gems from Gemfile (or only some groups), see Bundler.require.
    #
    def setup(*groups)
      # Return if all groups are already loaded
      return @setup if defined?(@setup) && @setup

      definition.validate_runtime!

      SharedHelpers.print_major_deprecations!

      if groups.empty?
        # Load all groups, but only once
        @setup = load.setup
      else
        load.setup(*groups)
      end
    end

    # Setups Bundler environment (see Bundler.setup) if it is not already set,
    # and loads all gems from groups specified. Unlike ::setup, can be called
    # multiple times with different groups (if they were allowed by setup).
    #
    # Assuming Gemfile
    #
    #    gem 'first_gem', '= 1.0'
    #    group :test do
    #      gem 'second_gem', '= 1.0'
    #    end
    #
    # The code will work as follows:
    #
    #    Bundler.setup # allow all groups
    #    Bundler.require(:default) # requires only first_gem
    #    # ...later
    #    Bundler.require(:test)   # requires second_gem
    #
    def require(*groups)
      setup(*groups).require(*groups)
    end

    def load
      @load ||= Runtime.new(root, definition)
    end

    def environment
      SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :print_caller_location => true
      load
    end

    # Returns an instance of Bundler::Definition for given Gemfile and lockfile
    #
    # @param unlock [Hash, Boolean, nil] Gems that have been requested
    #   to be updated or true if all gems should be updated
    # @return [Bundler::Definition]
    def definition(unlock = nil)
      @definition = nil if unlock
      @definition ||= begin
        configure
        Definition.build(default_gemfile, default_lockfile, unlock)
      end
    end

    def frozen_bundle?
      frozen = settings[:deployment]
      frozen ||= settings[:frozen]
      frozen
    end

    def locked_gems
      @locked_gems ||=
        if defined?(@definition) && @definition
          definition.locked_gems
        elsif Bundler.default_lockfile.file?
          lock = Bundler.read_file(Bundler.default_lockfile)
          LockfileParser.new(lock)
        end
    end

    def most_specific_locked_platform?(platform)
      return false unless defined?(@definition) && @definition

      definition.most_specific_locked_platform == platform
    end

    def ruby_scope
      "#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
    end

    def user_home
      @user_home ||= begin
        home = Bundler.rubygems.user_home
        bundle_home = home ? File.join(home, ".bundle") : nil

        warning = if home.nil?
          "Your home directory is not set."
        elsif !File.directory?(home)
          "`#{home}` is not a directory."
        elsif !File.writable?(home) && (!File.directory?(bundle_home) || !File.writable?(bundle_home))
          "`#{home}` is not writable."
        end

        if warning
          Bundler.ui.warn "#{warning}\n"
          user_home = tmp_home_path
          Bundler.ui.warn "Bundler will use `#{user_home}' as your home directory temporarily.\n"
          user_home
        else
          Pathname.new(home)
        end
      end
    end

    def user_bundle_path(dir = "home")
      env_var, fallback = case dir
                          when "home"
                            ["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }]
                          when "cache"
                            ["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }]
                          when "config"
                            ["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }]
                          when "plugin"
                            ["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }]
                          else
                            raise BundlerError, "Unknown user path requested: #{dir}"
      end
      # `fallback` will already be a Pathname, but Pathname.new() is
      # idempotent so it's OK
      Pathname.new(ENV.fetch(env_var, &fallback))
    end

    def user_cache
      user_bundle_path("cache")
    end

    def home
      bundle_path.join("bundler")
    end

    def install_path
      home.join("gems")
    end

    def specs_path
      bundle_path.join("specifications")
    end

    def root
      @root ||= begin
                  SharedHelpers.root
                rescue GemfileNotFound
                  bundle_dir = default_bundle_dir
                  raise GemfileNotFound, "Could not locate Gemfile or .bundle/ directory" unless bundle_dir
                  Pathname.new(File.expand_path("..", bundle_dir))
                end
    end

    def app_config_path
      if app_config = ENV["BUNDLE_APP_CONFIG"]
        app_config_pathname = Pathname.new(app_config)

        if app_config_pathname.absolute?
          app_config_pathname
        else
          app_config_pathname.expand_path(root)
        end
      else
        root.join(".bundle")
      end
    end

    def app_cache(custom_path = nil)
      path = custom_path || root
      Pathname.new(path).join(settings.app_cache_path)
    end

    def tmp(name = Process.pid.to_s)
      Kernel.send(:require, "tmpdir")
      Pathname.new(Dir.mktmpdir(["bundler", name]))
    end

    def rm_rf(path)
      FileUtils.remove_entry_secure(path) if path && File.exist?(path)
    rescue ArgumentError
      message = <<EOF
It is a security vulnerability to allow your home directory to be world-writable, and bundler cannot continue.
You should probably consider fixing this issue by running `chmod o-w ~` on *nix.
Please refer to https://ruby-doc.org/stdlib-3.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
EOF
      File.world_writable?(path) ? Bundler.ui.warn(message) : raise
      raise PathError, "Please fix the world-writable issue with your #{path} directory"
    end

    def settings
      @settings ||= Settings.new(app_config_path)
    rescue GemfileNotFound
      @settings = Settings.new(Pathname.new(".bundle").expand_path)
    end

    # @return [Hash] Environment present before Bundler was activated
    def original_env
      ORIGINAL_ENV.clone
    end

    # @deprecated Use `unbundled_env` instead
    def clean_env
      Bundler::SharedHelpers.major_deprecation(
        2,
        "`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
        "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`",
        :print_caller_location => true
      )

      unbundled_env
    end

    # @return [Hash] Environment with all bundler-related variables removed
    def unbundled_env
      env = original_env

      if env.key?("BUNDLER_ORIG_MANPATH")
        env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"]
      end

      env.delete_if {|k, _| k[0, 7] == "BUNDLE_" }

      if env.key?("RUBYOPT")
        rubyopt = env["RUBYOPT"].split(" ")
        rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}")
        rubyopt.delete("-rbundler/setup")
        env["RUBYOPT"] = rubyopt.join(" ")
      end

      if env.key?("RUBYLIB")
        rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR)
        rubylib.delete(__dir__)
        env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR)
      end

      env
    end

    # Run block with environment present before Bundler was activated
    def with_original_env
      with_env(original_env) { yield }
    end

    # @deprecated Use `with_unbundled_env` instead
    def with_clean_env
      Bundler::SharedHelpers.major_deprecation(
        2,
        "`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
        "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`",
        :print_caller_location => true
      )

      with_env(unbundled_env) { yield }
    end

    # Run block with all bundler-related variables removed
    def with_unbundled_env
      with_env(unbundled_env) { yield }
    end

    # Run subcommand with the environment present before Bundler was activated
    def original_system(*args)
      with_original_env { Kernel.system(*args) }
    end

    # @deprecated Use `unbundled_system` instead
    def clean_system(*args)
      Bundler::SharedHelpers.major_deprecation(
        2,
        "`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
        "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`",
        :print_caller_location => true
      )

      with_env(unbundled_env) { Kernel.system(*args) }
    end

    # Run subcommand in an environment with all bundler related variables removed
    def unbundled_system(*args)
      with_unbundled_env { Kernel.system(*args) }
    end

    # Run a `Kernel.exec` to a subcommand with the environment present before Bundler was activated
    def original_exec(*args)
      with_original_env { Kernel.exec(*args) }
    end

    # @deprecated Use `unbundled_exec` instead
    def clean_exec(*args)
      Bundler::SharedHelpers.major_deprecation(
        2,
        "`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
        "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`",
        :print_caller_location => true
      )

      with_env(unbundled_env) { Kernel.exec(*args) }
    end

    # Run a `Kernel.exec` to a subcommand in an environment with all bundler related variables removed
    def unbundled_exec(*args)
      with_env(unbundled_env) { Kernel.exec(*args) }
    end

    def local_platform
      return Gem::Platform::RUBY if settings[:force_ruby_platform] || Gem.platforms == [Gem::Platform::RUBY]
      Gem::Platform.local
    end

    def default_gemfile
      SharedHelpers.default_gemfile
    end

    def default_lockfile
      SharedHelpers.default_lockfile
    end

    def default_bundle_dir
      SharedHelpers.default_bundle_dir
    end

    def system_bindir
      # Gem.bindir doesn't always return the location that RubyGems will install
      # system binaries. If you put '-n foo' in your .gemrc, RubyGems will
      # install binstubs there instead. Unfortunately, RubyGems doesn't expose
      # that directory at all, so rather than parse .gemrc ourselves, we allow
      # the directory to be set as well, via `bundle config set --local bindir foo`.
      Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
    end

    def preferred_gemfile_name
      Bundler.settings[:init_gems_rb] ? "gems.rb" : "Gemfile"
    end

    def use_system_gems?
      configured_bundle_path.use_system_gems?
    end

    def requires_sudo?
      return @requires_sudo if defined?(@requires_sudo_ran)

      sudo_present = which "sudo" if settings.allow_sudo?

      if sudo_present
        # the bundle path and subdirectories need to be writable for RubyGems
        # to be able to unpack and install gems without exploding
        path = bundle_path
        path = path.parent until path.exist?

        # bins are written to a different location on OS X
        bin_dir = Pathname.new(Bundler.system_bindir)
        bin_dir = bin_dir.parent until bin_dir.exist?

        # if any directory is not writable, we need sudo
        files = [path, bin_dir] | Dir[bundle_path.join("build_info/*").to_s] | Dir[bundle_path.join("*").to_s]
        unwritable_files = files.reject {|f| File.writable?(f) }
        sudo_needed = !unwritable_files.empty?
        if sudo_needed
          Bundler.ui.warn "Following files may not be writable, so sudo is needed:\n  #{unwritable_files.map(&:to_s).sort.join("\n  ")}"
        end
      end

      @requires_sudo_ran = true
      @requires_sudo = settings.allow_sudo? && sudo_present && sudo_needed
    end

    def mkdir_p(path, options = {})
      if requires_sudo? && !options[:no_sudo]
        sudo "mkdir -p '#{path}'" unless File.exist?(path)
      else
        SharedHelpers.filesystem_access(path, :write) do |p|
          FileUtils.mkdir_p(p)
        end
      end
    end

    def which(executable)
      if File.file?(executable) && File.executable?(executable)
        executable
      elsif paths = ENV["PATH"]
        quote = '"'.freeze
        paths.split(File::PATH_SEPARATOR).find do |path|
          path = path[1..-2] if path.start_with?(quote) && path.end_with?(quote)
          executable_path = File.expand_path(executable, path)
          return executable_path if File.file?(executable_path) && File.executable?(executable_path)
        end
      end
    end

    def sudo(str)
      SUDO_MUTEX.synchronize do
        prompt = "\n\n" + <<-PROMPT.gsub(/^ {6}/, "").strip + " "
        Your user account isn't allowed to install to the system RubyGems.
        You can cancel this installation and run:

            bundle config set --local path 'vendor/bundle'
            bundle install

        to install the gems into ./vendor/bundle/, or you can enter your password
        and install the bundled gems to RubyGems using sudo.

        Password:
        PROMPT

        unless @prompted_for_sudo ||= system(%(sudo -k -p "#{prompt}" true))
          raise SudoNotPermittedError,
            "Bundler requires sudo access to install at the moment. " \
            "Try installing again, granting Bundler sudo access when prompted, or installing into a different path."
        end

        `sudo -p "#{prompt}" #{str}`
      end
    end

    def read_file(file)
      SharedHelpers.filesystem_access(file, :read) do
        File.open(file, "r:UTF-8", &:read)
      end
    end

    def load_marshal(data)
      Marshal.load(data)
    rescue TypeError => e
      raise MarshalError, "#{e.class}: #{e.message}"
    end

    def load_gemspec(file, validate = false)
      @gemspec_cache ||= {}
      key = File.expand_path(file)
      @gemspec_cache[key] ||= load_gemspec_uncached(file, validate)
      # Protect against caching side-effected gemspecs by returning a
      # new instance each time.
      @gemspec_cache[key].dup if @gemspec_cache[key]
    end

    def load_gemspec_uncached(file, validate = false)
      path = Pathname.new(file)
      contents = read_file(file)
      spec = if contents.start_with?("---") # YAML header
        eval_yaml_gemspec(path, contents)
      else
        # Eval the gemspec from its parent directory, because some gemspecs
        # depend on "./" relative paths.
        SharedHelpers.chdir(path.dirname.to_s) do
          eval_gemspec(path, contents)
        end
      end
      return unless spec
      spec.loaded_from = path.expand_path.to_s
      Bundler.rubygems.validate(spec) if validate
      spec
    end

    def clear_gemspec_cache
      @gemspec_cache = {}
    end

    def git_present?
      return @git_present if defined?(@git_present)
      @git_present = Bundler.which("git") || Bundler.which("git.exe")
    end

    def feature_flag
      @feature_flag ||= FeatureFlag.new(VERSION)
    end

    def reset!
      reset_paths!
      Plugin.reset!
      reset_rubygems!
    end

    def reset_settings_and_root!
      @settings = nil
      @root = nil
    end

    def reset_paths!
      @bin_path = nil
      @bundler_major_version = nil
      @bundle_path = nil
      @configured = nil
      @configured_bundle_path = nil
      @definition = nil
      @load = nil
      @locked_gems = nil
      @root = nil
      @settings = nil
      @setup = nil
      @user_home = nil
    end

    def reset_rubygems!
      return unless defined?(@rubygems) && @rubygems
      rubygems.undo_replacements
      rubygems.reset
      @rubygems = nil
    end

    def configure_gem_home_and_path(path = bundle_path)
      configure_gem_path
      configure_gem_home(path)
      Bundler.rubygems.clear_paths
    end

    def self_manager
      @self_manager ||= begin
                          require_relative "bundler/self_manager"
                          Bundler::SelfManager.new
                        end
    end

    private

    def eval_yaml_gemspec(path, contents)
      Kernel.require "psych"

      Gem::Specification.from_yaml(contents)
    rescue ::Psych::SyntaxError, ArgumentError, Gem::EndOfYAMLException, Gem::Exception
      eval_gemspec(path, contents)
    end

    def eval_gemspec(path, contents)
      eval(contents, TOPLEVEL_BINDING.dup, path.expand_path.to_s)
    rescue ScriptError, StandardError => e
      msg = "There was an error while loading `#{path.basename}`: #{e.message}"

      raise GemspecError, Dsl::DSLError.new(msg, path, e.backtrace, contents)
    end

    def configure_gem_path
      unless use_system_gems?
        # this needs to be empty string to cause
        # PathSupport.split_gem_path to only load up the
        # Bundler --path setting as the GEM_PATH.
        Bundler::SharedHelpers.set_env "GEM_PATH", ""
      end
    end

    def configure_gem_home(path)
      Bundler::SharedHelpers.set_env "GEM_HOME", path.to_s
    end

    def tmp_home_path
      Kernel.send(:require, "tmpdir")
      SharedHelpers.filesystem_access(Dir.tmpdir) do
        path = Bundler.tmp
        at_exit { Bundler.rm_rf(path) }
        path
      end
    end

    # @param env [Hash]
    def with_env(env)
      backup = ENV.to_hash
      ENV.replace(env)
      yield
    ensure
      ENV.replace(backup)
    end
  end
end
PK+"#[
i	��gems/rdoc-6.4.1.1/exe/rdocnuȯ��#!/opt/alt/ruby31/bin/ruby
#
#  RDoc: Documentation tool for source code
#        (see lib/rdoc/rdoc.rb for more information)
#
#  Copyright (c) 2003 Dave Thomas
#  Released under the same terms as Ruby

begin
  gem 'rdoc'
rescue NameError => e # --disable-gems
  raise unless e.name == :gem
rescue Gem::LoadError
end

require 'rdoc/rdoc'

begin
  r = RDoc::RDoc.new
  r.document ARGV
rescue Errno::ENOSPC
  $stderr.puts 'Ran out of space creating documentation'
  $stderr.puts
  $stderr.puts 'Please free up some space and try again'
rescue SystemExit
  raise
rescue Exception => e
  if $DEBUG_RDOC then
    $stderr.puts e.message
    $stderr.puts "#{e.backtrace.join "\n\t"}"
    $stderr.puts
  elsif Interrupt === e then
    $stderr.puts
    $stderr.puts 'Interrupted'
  else
    $stderr.puts "uh-oh! RDoc had a problem:"
    $stderr.puts e.message
    $stderr.puts
    $stderr.puts "run with --debug for full backtrace"
  end

  exit 1
end

PK+"#[�7r��gems/rdoc-6.4.1.1/exe/rinuȯ��#!/opt/alt/ruby31/bin/ruby

begin
  gem 'rdoc'
rescue NameError => e # --disable-gems
  raise unless e.name == :gem
rescue Gem::LoadError
end

require 'rdoc/ri/driver'

RDoc::RI::Driver.run ARGV
PK+"#[�X��MM%gems/rdoc-6.4.1.1/lib/rdoc/version.rbnu�[���module RDoc

  ##
  # RDoc version you are using

  VERSION = '6.4.1.1'

end
PK+"#[��p��,gems/rdoc-6.4.1.1/lib/rdoc/markup/heading.rbnu�[���# frozen_string_literal: true
##
# A heading with a level (1-6) and text

RDoc::Markup::Heading =
  Struct.new :level, :text do

  @to_html = nil
  @to_label = nil

  ##
  # A singleton RDoc::Markup::ToLabel formatter for headings.

  def self.to_label
    @to_label ||= RDoc::Markup::ToLabel.new
  end

  ##
  # A singleton plain HTML formatter for headings.  Used for creating labels
  # for the Table of Contents

  def self.to_html
    return @to_html if @to_html

    markup = RDoc::Markup.new
    markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF

    @to_html = RDoc::Markup::ToHtml.new nil

    def @to_html.handle_regexp_CROSSREF target
      target.text.sub(/^\\/, '')
    end

    @to_html
  end

  ##
  # Calls #accept_heading on +visitor+

  def accept visitor
    visitor.accept_heading self
  end

  ##
  # An HTML-safe anchor reference for this header.

  def aref
    "label-#{self.class.to_label.convert text.dup}"
  end

  ##
  # Creates a fully-qualified label which will include the label from
  # +context+.  This helps keep ids unique in HTML.

  def label context = nil
    label = aref

    label = [context.aref, label].compact.join '-' if
      context and context.respond_to? :aref

    label
  end

  ##
  # HTML markup of the text of this label without the surrounding header
  # element.

  def plain_html
    self.class.to_html.to_html(text.dup)
  end

  def pretty_print q # :nodoc:
    q.group 2, "[head: #{level} ", ']' do
      q.pp text
    end
  end

end

PK+"#[�ھ��/gems/rdoc-6.4.1.1/lib/rdoc/markup/attributes.rbnu�[���# frozen_string_literal: true
##
# We manage a set of attributes.  Each attribute has a symbol name and a bit
# value.

class RDoc::Markup::Attributes

  ##
  # The regexp handling attribute type. See RDoc::Markup#add_regexp_handling

  attr_reader :regexp_handling

  ##
  # Creates a new attributes set.

  def initialize
    @regexp_handling = 1

    @name_to_bitmap = [
      [:_REGEXP_HANDLING_, @regexp_handling],
    ]

    @next_bitmap = @regexp_handling << 1
  end

  ##
  # Returns a unique bit for +name+

  def bitmap_for name
    bitmap = @name_to_bitmap.assoc name

    unless bitmap then
      bitmap = @next_bitmap
      @next_bitmap <<= 1
      @name_to_bitmap << [name, bitmap]
    else
      bitmap = bitmap.last
    end

    bitmap
  end

  ##
  # Returns a string representation of +bitmap+

  def as_string bitmap
    return 'none' if bitmap.zero?
    res = []

    @name_to_bitmap.each do |name, bit|
      res << name if (bitmap & bit) != 0
    end

    res.join ','
  end

  ##
  # yields each attribute name in +bitmap+

  def each_name_of bitmap
    return enum_for __method__, bitmap unless block_given?

    @name_to_bitmap.each do |name, bit|
      next if bit == @regexp_handling

      yield name.to_s if (bitmap & bit) != 0
    end
  end

end

PK+"#[��ԄEE)gems/rdoc-6.4.1.1/lib/rdoc/markup/list.rbnu�[���# frozen_string_literal: true
##
# A List is a homogeneous set of ListItems.
#
# The supported list types include:
#
# :BULLET::
#   An unordered list
# :LABEL::
#   An unordered definition list, but using an alternate RDoc::Markup syntax
# :LALPHA::
#   An ordered list using increasing lowercase English letters
# :NOTE::
#   An unordered definition list
# :NUMBER::
#   An ordered list using increasing Arabic numerals
# :UALPHA::
#   An ordered list using increasing uppercase English letters
#
# Definition lists behave like HTML definition lists.  Each list item can
# describe multiple terms.  See RDoc::Markup::ListItem for how labels and
# definition are stored as list items.

class RDoc::Markup::List

  ##
  # The list's type

  attr_accessor :type

  ##
  # Items in the list

  attr_reader :items

  ##
  # Creates a new list of +type+ with +items+.  Valid list types are:
  # +:BULLET+, +:LABEL+, +:LALPHA+, +:NOTE+, +:NUMBER+, +:UALPHA+

  def initialize type = nil, *items
    @type = type
    @items = []
    @items.concat items
  end

  ##
  # Appends +item+ to the list

  def << item
    @items << item
  end

  def == other # :nodoc:
    self.class == other.class and
      @type == other.type and
      @items == other.items
  end

  ##
  # Runs this list and all its #items through +visitor+

  def accept visitor
    visitor.accept_list_start self

    @items.each do |item|
      item.accept visitor
    end

    visitor.accept_list_end self
  end

  ##
  # Is the list empty?

  def empty?
    @items.empty?
  end

  ##
  # Returns the last item in the list

  def last
    @items.last
  end

  def pretty_print q # :nodoc:
    q.group 2, "[list: #{@type} ", ']' do
      q.seplist @items do |item|
        q.pp item
      end
    end
  end

  ##
  # Appends +items+ to the list

  def push *items
    @items.concat items
  end

end

PK+"#[hP)1��8gems/rdoc-6.4.1.1/lib/rdoc/markup/to_joined_paragraph.rbnu�[���# frozen_string_literal: true
##
# Joins the parts of an RDoc::Markup::Paragraph into a single String.
#
# This allows for easier maintenance and testing of Markdown support.
#
# This formatter only works on Paragraph instances.  Attempting to process
# other markup syntax items will not work.

class RDoc::Markup::ToJoinedParagraph < RDoc::Markup::Formatter

  def initialize # :nodoc:
    super nil
  end

  def start_accepting # :nodoc:
  end

  def end_accepting # :nodoc:
  end

  ##
  # Converts the parts of +paragraph+ to a single entry.

  def accept_paragraph paragraph
    parts = paragraph.parts.chunk do |part|
      String === part
    end.map do |string, chunk|
      string ? chunk.join.rstrip : chunk
    end.flatten

    paragraph.parts.replace parts
  end

  alias accept_block_quote     ignore
  alias accept_heading         ignore
  alias accept_list_end        ignore
  alias accept_list_item_end   ignore
  alias accept_list_item_start ignore
  alias accept_list_start      ignore
  alias accept_raw             ignore
  alias accept_rule            ignore
  alias accept_verbatim        ignore
  alias accept_table           ignore

end

PK,"#[ �'n�&�&,gems/rdoc-6.4.1.1/lib/rdoc/markup/to_html.rbnu�[���# frozen_string_literal: true
require 'cgi'

##
# Outputs RDoc markup as HTML.

class RDoc::Markup::ToHtml < RDoc::Markup::Formatter

  include RDoc::Text

  # :section: Utilities

  ##
  # Maps RDoc::Markup::Parser::LIST_TOKENS types to HTML tags

  LIST_TYPE_TO_HTML = {
    :BULLET => ['<ul>',                                      '</ul>'],
    :LABEL  => ['<dl class="rdoc-list label-list">',         '</dl>'],
    :LALPHA => ['<ol style="list-style-type: lower-alpha">', '</ol>'],
    :NOTE   => ['<dl class="rdoc-list note-list">',          '</dl>'],
    :NUMBER => ['<ol>',                                      '</ol>'],
    :UALPHA => ['<ol style="list-style-type: upper-alpha">', '</ol>'],
  }

  attr_reader :res # :nodoc:
  attr_reader :in_list_entry # :nodoc:
  attr_reader :list # :nodoc:

  ##
  # The RDoc::CodeObject HTML is being generated for.  This is used to
  # generate namespaced URI fragments

  attr_accessor :code_object

  ##
  # Path to this document for relative links

  attr_accessor :from_path

  # :section:

  ##
  # Creates a new formatter that will output HTML

  def initialize options, markup = nil
    super

    @code_object = nil
    @from_path = ''
    @in_list_entry = nil
    @list = nil
    @th = nil
    @hard_break = "<br>\n"

    init_regexp_handlings

    init_tags
  end

  # :section: Regexp Handling
  #
  # These methods are used by regexp handling markup added by RDoc::Markup#add_regexp_handling.

  ##
  # Adds regexp handlings.

  def init_regexp_handlings
    # external links
    @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)\S+\w/,
                                :HYPERLINK)
    init_link_notation_regexp_handlings
  end

  ##
  # Adds regexp handlings about link notations.

  def init_link_notation_regexp_handlings
    add_regexp_handling_RDOCLINK
    add_regexp_handling_TIDYLINK
  end

  def handle_RDOCLINK url # :nodoc:
    case url
    when /^rdoc-ref:/
      $'
    when /^rdoc-label:/
      text = $'

      text = case text
             when /\Alabel-/    then $'
             when /\Afootmark-/ then $'
             when /\Afoottext-/ then $'
             else                    text
             end

      gen_url url, text
    when /^rdoc-image:/
      "<img src=\"#{$'}\">"
    else
      url =~ /\Ardoc-[a-z]+:/

      $'
    end
  end

  ##
  # +target+ is a <code><br></code>

  def handle_regexp_HARD_BREAK target
    '<br>'
  end

  ##
  # +target+ is a potential link.  The following schemes are handled:
  #
  # <tt>mailto:</tt>::
  #   Inserted as-is.
  # <tt>http:</tt>::
  #   Links are checked to see if they reference an image. If so, that image
  #   gets inserted using an <tt><img></tt> tag. Otherwise a conventional
  #   <tt><a href></tt> is used.
  # <tt>link:</tt>::
  #   Reference to a local file relative to the output directory.

  def handle_regexp_HYPERLINK(target)
    url = target.text

    gen_url url, url
  end

  ##
  # +target+ is an rdoc-schemed link that will be converted into a hyperlink.
  #
  # For the +rdoc-ref+ scheme the named reference will be returned without
  # creating a link.
  #
  # For the +rdoc-label+ scheme the footnote and label prefixes are stripped
  # when creating a link.  All other contents will be linked verbatim.

  def handle_regexp_RDOCLINK target
    handle_RDOCLINK target.text
  end

  ##
  # This +target+ is a link where the label is different from the URL
  # <tt>label[url]</tt> or <tt>{long label}[url]</tt>

  def handle_regexp_TIDYLINK(target)
    text = target.text

    return text unless
      text =~ /^\{(.*)\}\[(.*?)\]$/ or text =~ /^(\S+)\[(.*?)\]$/

    label = $1
    url   = $2

    label = handle_RDOCLINK label if /^rdoc-image:/ =~ label

    gen_url url, label
  end

  # :section: Visitor
  #
  # These methods implement the HTML visitor.

  ##
  # Prepares the visitor for HTML generation

  def start_accepting
    @res = []
    @in_list_entry = []
    @list = []
  end

  ##
  # Returns the generated output

  def end_accepting
    @res.join
  end

  ##
  # Adds +block_quote+ to the output

  def accept_block_quote block_quote
    @res << "\n<blockquote>"

    block_quote.parts.each do |part|
      part.accept self
    end

    @res << "</blockquote>\n"
  end

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    @res << "\n<p>"
    text = paragraph.text @hard_break
    text = text.gsub(/\r?\n/, ' ')
    @res << to_html(text)
    @res << "</p>\n"
  end

  ##
  # Adds +verbatim+ to the output

  def accept_verbatim verbatim
    text = verbatim.text.rstrip

    klass = nil

    content = if verbatim.ruby? or parseable? text then
                begin
                  tokens = RDoc::Parser::RipperStateLex.parse text
                  klass  = ' class="ruby"'

                  result = RDoc::TokenStream.to_html tokens
                  result = result + "\n" unless "\n" == result[-1]
                  result
                rescue
                  CGI.escapeHTML text
                end
              else
                CGI.escapeHTML text
              end

    if @options.pipe then
      @res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n"
    else
      @res << "\n<pre#{klass}>#{content}</pre>\n"
    end
  end

  ##
  # Adds +rule+ to the output

  def accept_rule rule
    @res << "<hr>\n"
  end

  ##
  # Prepares the visitor for consuming +list+

  def accept_list_start(list)
    @list << list.type
    @res << html_list_name(list.type, true)
    @in_list_entry.push false
  end

  ##
  # Finishes consumption of +list+

  def accept_list_end(list)
    @list.pop
    if tag = @in_list_entry.pop
      @res << tag
    end
    @res << html_list_name(list.type, false) << "\n"
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start(list_item)
    if tag = @in_list_entry.last
      @res << tag
    end

    @res << list_item_start(list_item, @list.last)
  end

  ##
  # Finishes consumption of +list_item+

  def accept_list_item_end(list_item)
    @in_list_entry[-1] = list_end_for(@list.last)
  end

  ##
  # Adds +blank_line+ to the output

  def accept_blank_line(blank_line)
    # @res << annotate("<p />") << "\n"
  end

  ##
  # Adds +heading+ to the output.  The headings greater than 6 are trimmed to
  # level 6.

  def accept_heading heading
    level = [6, heading.level].min

    label = heading.label @code_object

    @res << if @options.output_decoration
              "\n<h#{level} id=\"#{label}\">"
            else
              "\n<h#{level}>"
            end
    @res << to_html(heading.text)
    unless @options.pipe then
      @res << "<span><a href=\"##{label}\">&para;</a>"
      @res << " <a href=\"#top\">&uarr;</a></span>"
    end
    @res << "</h#{level}>\n"
  end

  ##
  # Adds +raw+ to the output

  def accept_raw raw
    @res << raw.parts.join("\n")
  end

  ##
  # Adds +table+ to the output

  def accept_table header, body, aligns
    @res << "\n<table role=\"table\">\n<thead>\n<tr>\n"
    header.zip(aligns) do |text, align|
      @res << '<th'
      @res << ' align="' << align << '"' if align
      @res << '>' << CGI.escapeHTML(text) << "</th>\n"
    end
    @res << "</tr>\n</thead>\n<tbody>\n"
    body.each do |row|
      @res << "<tr>\n"
      row.zip(aligns) do |text, align|
        @res << '<td'
        @res << ' align="' << align << '"' if align
        @res << '>' << CGI.escapeHTML(text) << "</td>\n"
      end
      @res << "</tr>\n"
    end
    @res << "</tbody>\n</table>\n"
  end

  # :section: Utilities

  ##
  # CGI-escapes +text+

  def convert_string(text)
    CGI.escapeHTML text
  end

  ##
  # Generate a link to +url+ with content +text+.  Handles the special cases
  # for img: and link: described under handle_regexp_HYPERLINK

  def gen_url url, text
    scheme, url, id = parse_url url

    if %w[http https link].include?(scheme) and
       url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
      "<img src=\"#{url}\" />"
    else
      if scheme != 'link' and %r%\A((?!https?:)(?:[^/#]*/)*+)([^/#]+)\.(rb|rdoc|md)(?=\z|#)%i =~ url
        url = "#$1#{$2.tr('.', '_')}_#$3.html#$'"
      end

      text = text.sub %r%^#{scheme}:/*%i, ''
      text = text.sub %r%^[*\^](\d+)$%,   '\1'

      link = "<a#{id} href=\"#{url}\">#{text}</a>"

      link = "<sup>#{link}</sup>" if /"foot/ =~ id

      link
    end
  end

  ##
  # Determines the HTML list element for +list_type+ and +open_tag+

  def html_list_name(list_type, open_tag)
    tags = LIST_TYPE_TO_HTML[list_type]
    raise RDoc::Error, "Invalid list type: #{list_type.inspect}" unless tags
    tags[open_tag ? 0 : 1]
  end

  ##
  # Maps attributes to HTML tags

  def init_tags
    add_tag :BOLD, "<strong>", "</strong>"
    add_tag :TT,   "<code>",   "</code>"
    add_tag :EM,   "<em>",     "</em>"
  end

  ##
  # Returns the HTML tag for +list_type+, possible using a label from
  # +list_item+

  def list_item_start(list_item, list_type)
    case list_type
    when :BULLET, :LALPHA, :NUMBER, :UALPHA then
      "<li>"
    when :LABEL, :NOTE then
      Array(list_item.label).map do |label|
        "<dt>#{to_html label}\n"
      end.join << "<dd>"
    else
      raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
    end
  end

  ##
  # Returns the HTML end-tag for +list_type+

  def list_end_for(list_type)
    case list_type
    when :BULLET, :LALPHA, :NUMBER, :UALPHA then
      "</li>"
    when :LABEL, :NOTE then
      "</dd>"
    else
      raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
    end
  end

  ##
  # Returns true if text is valid ruby syntax

  def parseable? text
    verbose, $VERBOSE = $VERBOSE, nil
    eval("BEGIN {return true}\n#{text}")
  rescue SyntaxError
    false
  ensure
    $VERBOSE = verbose
  end

  ##
  # Converts +item+ to HTML using RDoc::Text#to_html

  def to_html item
    super convert_flow @am.flow item
  end

end

PK,"#[u�a1��*gems/rdoc-6.4.1.1/lib/rdoc/markup/to_bs.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup with hot backspace action!  You will probably need a
# pager to use this output format.
#
# This formatter won't work on 1.8.6 because it lacks String#chars.

class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc

  ##
  # Returns a new ToBs that is ready for hot backspace action!

  def initialize markup = nil
    super

    @in_b  = false
    @in_em = false
  end

  ##
  # Sets a flag that is picked up by #annotate to do the right thing in
  # #convert_string

  def init_tags
    add_tag :BOLD, '+b', '-b'
    add_tag :EM,   '+_', '-_'
    add_tag :TT,   ''  , ''   # we need in_tt information maintained
  end

  ##
  # Makes heading text bold.

  def accept_heading heading
    use_prefix or @res << ' ' * @indent
    @res << @headings[heading.level][0]
    @in_b = true
    @res << attributes(heading.text)
    @in_b = false
    @res << @headings[heading.level][1]
    @res << "\n"
  end

  ##
  # Turns on or off regexp handling for +convert_string+

  def annotate tag
    case tag
    when '+b' then @in_b = true
    when '-b' then @in_b = false
    when '+_' then @in_em = true
    when '-_' then @in_em = false
    end
    ''
  end

  ##
  # Calls convert_string on the result of convert_regexp_handling

  def convert_regexp_handling target
    convert_string super
  end

  ##
  # Adds bold or underline mixed with backspaces

  def convert_string string
    return string unless @in_b or @in_em
    chars = if @in_b then
              string.chars.map do |char| "#{char}\b#{char}" end
            elsif @in_em then
              string.chars.map do |char| "_\b#{char}" end
            end

    chars.join
  end

end
PK,"#[V���,gems/rdoc-6.4.1.1/lib/rdoc/markup/to_test.rbnu�[���# frozen_string_literal: true
##
# This Markup outputter is used for testing purposes.

class RDoc::Markup::ToTest < RDoc::Markup::Formatter

  # :stopdoc:

  ##
  # :section: Visitor

  def start_accepting
    @res = []
    @list = []
  end

  def end_accepting
    @res
  end

  def accept_paragraph(paragraph)
    @res << convert_flow(@am.flow(paragraph.text))
  end

  def accept_raw raw
    @res << raw.parts.join
  end

  def accept_verbatim(verbatim)
    @res << verbatim.text.gsub(/^(\S)/, '  \1')
  end

  def accept_list_start(list)
    @list << case list.type
             when :BULLET then
               '*'
             when :NUMBER then
               '1'
             else
               list.type
             end
  end

  def accept_list_end(list)
    @list.pop
  end

  def accept_list_item_start(list_item)
    @res << "#{' ' * (@list.size - 1)}#{@list.last}: "
  end

  def accept_list_item_end(list_item)
  end

  def accept_blank_line(blank_line)
    @res << "\n"
  end

  def accept_heading(heading)
    @res << "#{'=' * heading.level} #{heading.text}"
  end

  def accept_rule(rule)
    @res << '-' * rule.weight
  end

  # :startdoc:

end

PK,"#[�����*gems/rdoc-6.4.1.1/lib/rdoc/markup/table.rbnu�[���# frozen_string_literal: true
##
# A section of table

class RDoc::Markup::Table
  attr_accessor :header, :align, :body

  def initialize header, align, body
    @header, @align, @body = header, align, body
  end

  def == other
    self.class == other.class and
      @header == other.header and
      @align == other.align and
      @body == other.body
  end

  def accept visitor
    visitor.accept_table @header, @body, @align
  end

  def pretty_print q # :nodoc:
    q.group 2, '[Table: ', ']' do
      q.group 2, '[Head: ', ']' do
        q.seplist @header.zip(@align) do |text, align|
          q.pp text
          if align
            q.text ":"
            q.breakable
            q.text align.to_s
          end
        end
      end
      q.breakable
      q.group 2, '[Body: ', ']' do
        q.seplist @body do |body|
          q.group 2, '[', ']' do
            q.seplist body do |text|
              q.pp text
            end
          end
        end
      end
    end
  end
end
PK,"#[�e�M��4gems/rdoc-6.4.1.1/lib/rdoc/markup/to_html_snippet.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup as paragraphs with inline markup only.

class RDoc::Markup::ToHtmlSnippet < RDoc::Markup::ToHtml

  ##
  # After this many characters the input will be cut off.

  attr_reader :character_limit

  ##
  # The number of characters seen so far.

  attr_reader :characters # :nodoc:

  ##
  # The attribute bitmask

  attr_reader :mask

  ##
  # After this many paragraphs the input will be cut off.

  attr_reader :paragraph_limit

  ##
  # Count of paragraphs found

  attr_reader :paragraphs

  ##
  # Creates a new ToHtmlSnippet formatter that will cut off the input on the
  # next word boundary after the given number of +characters+ or +paragraphs+
  # of text have been encountered.

  def initialize options, characters = 100, paragraphs = 3, markup = nil
    super options, markup

    @character_limit = characters
    @paragraph_limit = paragraphs

    @characters = 0
    @mask       = 0
    @paragraphs = 0

    @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
  end

  ##
  # Adds +heading+ to the output as a paragraph

  def accept_heading heading
    @res << "<p>#{to_html heading.text}\n"

    add_paragraph
  end

  ##
  # Raw sections are untrusted and ignored

  alias accept_raw ignore

  ##
  # Rules are ignored

  alias accept_rule ignore

  def accept_paragraph paragraph
    para = @in_list_entry.last || "<p>"

    text = paragraph.text @hard_break

    @res << "#{para}#{to_html text}\n"

    add_paragraph
  end

  ##
  # Finishes consumption of +list_item+

  def accept_list_item_end list_item
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    @res << list_item_start(list_item, @list.last)
  end

  ##
  # Prepares the visitor for consuming +list+

  def accept_list_start list
    @list << list.type
    @res << html_list_name(list.type, true)
    @in_list_entry.push ''
  end

  ##
  # Adds +verbatim+ to the output

  def accept_verbatim verbatim
    throw :done if @characters >= @character_limit
    input = verbatim.text.rstrip

    text = truncate input
    text << ' ...' unless text == input

    super RDoc::Markup::Verbatim.new text

    add_paragraph
  end

  ##
  # Prepares the visitor for HTML snippet generation

  def start_accepting
    super

    @characters = 0
  end

  ##
  # Removes escaping from the cross-references in +target+

  def handle_regexp_CROSSREF target
    target.text.sub(/\A\\/, '')
  end

  ##
  # +target+ is a <code><br></code>

  def handle_regexp_HARD_BREAK target
    @characters -= 4
    '<br>'
  end

  ##
  # Lists are paragraphs, but notes and labels have a separator

  def list_item_start list_item, list_type
    throw :done if @characters >= @character_limit

    case list_type
    when :BULLET, :LALPHA, :NUMBER, :UALPHA then
      "<p>"
    when :LABEL, :NOTE then
      labels = Array(list_item.label).map do |label|
        to_html label
      end.join ', '

      labels << " &mdash; " unless labels.empty?

      start = "<p>#{labels}"
      @characters += 1 # try to include the label
      start
    else
      raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
    end
  end

  ##
  # Returns just the text of +link+, +url+ is only used to determine the link
  # type.

  def gen_url url, text
    if url =~ /^rdoc-label:([^:]*)(?::(.*))?/ then
      type = "link"
    elsif url =~ /([A-Za-z]+):(.*)/ then
      type = $1
    else
      type = "http"
    end

    if (type == "http" or type == "https" or type == "link") and
       url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
      ''
    else
      text.sub(%r%^#{type}:/*%, '')
    end
  end

  ##
  # In snippets, there are no lists

  def html_list_name list_type, open_tag
    ''
  end

  ##
  # Throws +:done+ when paragraph_limit paragraphs have been encountered

  def add_paragraph
    @paragraphs += 1

    throw :done if @paragraphs >= @paragraph_limit
  end

  ##
  # Marks up +content+

  def convert content
    catch :done do
      return super
    end

    end_accepting
  end

  ##
  # Converts flow items +flow+

  def convert_flow flow
    throw :done if @characters >= @character_limit

    res = []
    @mask = 0

    flow.each do |item|
      case item
      when RDoc::Markup::AttrChanger then
        off_tags res, item
        on_tags  res, item
      when String then
        text = convert_string item
        res << truncate(text)
      when RDoc::Markup::RegexpHandling then
        text = convert_regexp_handling item
        res << truncate(text)
      else
        raise "Unknown flow element: #{item.inspect}"
      end

      if @characters >= @character_limit then
        off_tags res, RDoc::Markup::AttrChanger.new(0, @mask)
        break
      end
    end

    res << ' ...' if @characters >= @character_limit

    res.join
  end

  ##
  # Maintains a bitmask to allow HTML elements to be closed properly.  See
  # RDoc::Markup::Formatter.

  def on_tags res, item
    @mask ^= item.turn_on

    super
  end

  ##
  # Maintains a bitmask to allow HTML elements to be closed properly.  See
  # RDoc::Markup::Formatter.

  def off_tags res, item
    @mask ^= item.turn_off

    super
  end

  ##
  # Truncates +text+ at the end of the first word after the character_limit.

  def truncate text
    length = text.length
    characters = @characters
    @characters += length

    return text if @characters < @character_limit

    remaining = @character_limit - characters

    text =~ /\A(.{#{remaining},}?)(\s|$)/m # TODO word-break instead of \s?

    $1
  end

end

PK,"#[����7gems/rdoc-6.4.1.1/lib/rdoc/markup/indented_paragraph.rbnu�[���# frozen_string_literal: true
##
# An Indented Paragraph of text

class RDoc::Markup::IndentedParagraph < RDoc::Markup::Raw

  ##
  # The indent in number of spaces

  attr_reader :indent

  ##
  # Creates a new IndentedParagraph containing +parts+ indented with +indent+
  # spaces

  def initialize indent, *parts
    @indent = indent

    super(*parts)
  end

  def == other # :nodoc:
    super and indent == other.indent
  end

  ##
  # Calls #accept_indented_paragraph on +visitor+

  def accept visitor
    visitor.accept_indented_paragraph self
  end

  ##
  # Joins the raw paragraph text and converts inline HardBreaks to the
  # +hard_break+ text followed by the indent.

  def text hard_break = nil
    @parts.map do |part|
      if RDoc::Markup::HardBreak === part then
        '%1$s%3$*2$s' % [hard_break, @indent, ' '] if hard_break
      else
        part
      end
    end.join
  end

end

PK,"#[� t{ll0gems/rdoc-6.4.1.1/lib/rdoc/markup/to_markdown.rbnu�[���# frozen_string_literal: true
# :markup: markdown

##
# Outputs parsed markup as Markdown

class RDoc::Markup::ToMarkdown < RDoc::Markup::ToRdoc

  ##
  # Creates a new formatter that will output Markdown format text

  def initialize markup = nil
    super

    @headings[1] = ['# ',      '']
    @headings[2] = ['## ',     '']
    @headings[3] = ['### ',    '']
    @headings[4] = ['#### ',   '']
    @headings[5] = ['##### ',  '']
    @headings[6] = ['###### ', '']

    add_regexp_handling_RDOCLINK
    add_regexp_handling_TIDYLINK

    @hard_break = "  \n"
  end

  ##
  # Maps attributes to HTML sequences

  def init_tags
    add_tag :BOLD, '**', '**'
    add_tag :EM,   '*',  '*'
    add_tag :TT,   '`',  '`'
  end

  ##
  # Adds a newline to the output

  def handle_regexp_HARD_BREAK target
    "  \n"
  end

  ##
  # Finishes consumption of `list`

  def accept_list_end list
    @res << "\n"

    super
  end

  ##
  # Finishes consumption of `list_item`

  def accept_list_item_end list_item
    width = case @list_type.last
            when :BULLET then
              4
            when :NOTE, :LABEL then
              use_prefix

              4
            else
              @list_index[-1] = @list_index.last.succ
              4
            end

    @indent -= width
  end

  ##
  # Prepares the visitor for consuming `list_item`

  def accept_list_item_start list_item
    type = @list_type.last

    case type
    when :NOTE, :LABEL then
      bullets = Array(list_item.label).map do |label|
        attributes(label).strip
      end.join "\n"

      bullets << "\n:"

      @prefix = ' ' * @indent
      @indent += 4
      @prefix << bullets + (' ' * (@indent - 1))
    else
      bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
      @prefix = (' ' * @indent) + bullet.ljust(4)

      @indent += 4
    end
  end

  ##
  # Prepares the visitor for consuming `list`

  def accept_list_start list
    case list.type
    when :BULLET, :LABEL, :NOTE then
      @list_index << nil
    when :LALPHA, :NUMBER, :UALPHA then
      @list_index << 1
    else
      raise RDoc::Error, "invalid list type #{list.type}"
    end

    @list_width << 4
    @list_type << list.type
  end

  ##
  # Adds `rule` to the output

  def accept_rule rule
    use_prefix or @res << ' ' * @indent
    @res << '-' * 3
    @res << "\n"
  end

  ##
  # Outputs `verbatim` indented 4 columns

  def accept_verbatim verbatim
    indent = ' ' * (@indent + 4)

    verbatim.parts.each do |part|
      @res << indent unless part == "\n"
      @res << part
    end

    @res << "\n"
  end

  ##
  # Creates a Markdown-style URL from +url+ with +text+.

  def gen_url url, text
    scheme, url, = parse_url url

    "[#{text.sub(%r{^#{scheme}:/*}i, '')}](#{url})"
  end

  ##
  # Handles <tt>rdoc-</tt> type links for footnotes.

  def handle_rdoc_link url
    case url
    when /^rdoc-ref:/ then
      $'
    when /^rdoc-label:footmark-(\d+)/ then
      "[^#{$1}]:"
    when /^rdoc-label:foottext-(\d+)/ then
      "[^#{$1}]"
    when /^rdoc-label:label-/ then
      gen_url url, $'
    when /^rdoc-image:/ then
      "![](#{$'})"
    when /^rdoc-[a-z]+:/ then
      $'
    end
  end

  ##
  # Converts the RDoc markup tidylink into a Markdown.style link.

  def handle_regexp_TIDYLINK target
    text = target.text

    return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/

    label = $1
    url   = $2

    if url =~ /^rdoc-label:foot/ then
      handle_rdoc_link url
    else
      gen_url url, label
    end
  end

  ##
  # Converts the rdoc-...: links into a Markdown.style links.

  def handle_regexp_RDOCLINK target
    handle_rdoc_link target.text
  end

end

PK,"#[f�Q`66,gems/rdoc-6.4.1.1/lib/rdoc/markup/to_ansi.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup with vibrant ANSI color!

class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc

  ##
  # Creates a new ToAnsi visitor that is ready to output vibrant ANSI color!

  def initialize markup = nil
    super

    @headings.clear
    @headings[1] = ["\e[1;32m", "\e[m"] # bold
    @headings[2] = ["\e[4;32m", "\e[m"] # underline
    @headings[3] = ["\e[32m",   "\e[m"] # just green
  end

  ##
  # Maps attributes to ANSI sequences

  def init_tags
    add_tag :BOLD, "\e[1m", "\e[m"
    add_tag :TT,   "\e[7m", "\e[m"
    add_tag :EM,   "\e[4m", "\e[m"
  end

  ##
  # Overrides indent width to ensure output lines up correctly.

  def accept_list_item_end list_item
    width = case @list_type.last
            when :BULLET then
              2
            when :NOTE, :LABEL then
              if @prefix then
                @res << @prefix.strip
                @prefix = nil
              end

              @res << "\n" unless res.length == 1
              2
            else
              bullet = @list_index.last.to_s
              @list_index[-1] = @list_index.last.succ
              bullet.length + 2
            end

    @indent -= width
  end

  ##
  # Adds coloring to note and label list items

  def accept_list_item_start list_item
    bullet = case @list_type.last
             when :BULLET then
               '*'
             when :NOTE, :LABEL then
               labels = Array(list_item.label).map do |label|
                 attributes(label).strip
               end.join "\n"

               labels << ":\n" unless labels.empty?

               labels
             else
               @list_index.last.to_s + '.'
             end

    case @list_type.last
    when :NOTE, :LABEL then
      @indent += 2
      @prefix = bullet + (' ' * @indent)
    else
      @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)

      width = bullet.gsub(/\e\[[\d;]*m/, '').length + 1

      @indent += width
    end
  end

  ##
  # Starts accepting with a reset screen

  def start_accepting
    super

    @res = ["\e[0m"]
  end

end

PK,"#[�F�VV-gems/rdoc-6.4.1.1/lib/rdoc/markup/to_label.rbnu�[���# frozen_string_literal: true
require 'cgi'

##
# Creates HTML-safe labels suitable for use in id attributes.  Tidylinks are
# converted to their link part and cross-reference links have the suppression
# marks removed (\\SomeClass is converted to SomeClass).

class RDoc::Markup::ToLabel < RDoc::Markup::Formatter

  attr_reader :res # :nodoc:

  ##
  # Creates a new formatter that will output HTML-safe labels

  def initialize markup = nil
    super nil, markup

    @markup.add_regexp_handling RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
    @markup.add_regexp_handling(/(((\{.*?\})|\b\S+?)\[\S+?\])/, :TIDYLINK)

    add_tag :BOLD, '', ''
    add_tag :TT,   '', ''
    add_tag :EM,   '', ''

    @res = []
  end

  ##
  # Converts +text+ to an HTML-safe label

  def convert text
    label = convert_flow @am.flow text

    CGI.escape(label).gsub('%', '-').sub(/^-/, '')
  end

  ##
  # Converts the CROSSREF +target+ to plain text, removing the suppression
  # marker, if any

  def handle_regexp_CROSSREF target
    text = target.text

    text.sub(/^\\/, '')
  end

  ##
  # Converts the TIDYLINK +target+ to just the text part

  def handle_regexp_TIDYLINK target
    text = target.text

    return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/

    $1
  end

  alias accept_blank_line         ignore
  alias accept_block_quote        ignore
  alias accept_heading            ignore
  alias accept_list_end           ignore
  alias accept_list_item_end      ignore
  alias accept_list_item_start    ignore
  alias accept_list_start         ignore
  alias accept_paragraph          ignore
  alias accept_raw                ignore
  alias accept_rule               ignore
  alias accept_verbatim           ignore
  alias end_accepting             ignore
  alias handle_regexp_HARD_BREAK  ignore
  alias start_accepting           ignore

end

PK,"#[�C�"==,gems/rdoc-6.4.1.1/lib/rdoc/markup/include.rbnu�[���# frozen_string_literal: true
##
# A file included at generation time.  Objects of this class are created by
# RDoc::RD for an extension-less include.
#
# This implementation in incomplete.

class RDoc::Markup::Include

  ##
  # The filename to be included, without extension

  attr_reader :file

  ##
  # Directories to search for #file

  attr_reader :include_path

  ##
  # Creates a new include that will import +file+ from +include_path+

  def initialize file, include_path
    @file = file
    @include_path = include_path
  end

  def == other # :nodoc:
    self.class === other and
      @file == other.file and @include_path == other.include_path
  end

  def pretty_print q # :nodoc:
    q.group 2, '[incl ', ']' do
      q.text file
      q.breakable
      q.text 'from '
      q.pp include_path
    end
  end

end

PK,"#[WY���-gems/rdoc-6.4.1.1/lib/rdoc/markup/document.rbnu�[���# frozen_string_literal: true
##
# A Document containing lists, headings, paragraphs, etc.

class RDoc::Markup::Document

  include Enumerable

  ##
  # The file this document was created from.  See also
  # RDoc::ClassModule#add_comment

  attr_reader :file

  ##
  # If a heading is below the given level it will be omitted from the
  # table_of_contents

  attr_accessor :omit_headings_below

  ##
  # The parts of the Document

  attr_reader :parts

  ##
  # Creates a new Document with +parts+

  def initialize *parts
    @parts = []
    @parts.concat parts

    @file = nil
    @omit_headings_from_table_of_contents_below = nil
  end

  ##
  # Appends +part+ to the document

  def << part
    case part
    when RDoc::Markup::Document then
      unless part.empty? then
        parts.concat part.parts
        parts << RDoc::Markup::BlankLine.new
      end
    when String then
      raise ArgumentError,
            "expected RDoc::Markup::Document and friends, got String" unless
        part.empty?
    else
      parts << part
    end
  end

  def == other # :nodoc:
    self.class == other.class and
      @file == other.file and
      @parts == other.parts
  end

  ##
  # Runs this document and all its #items through +visitor+

  def accept visitor
    visitor.start_accepting

    visitor.accept_document self

    visitor.end_accepting
  end

  ##
  # Concatenates the given +parts+ onto the document

  def concat parts
    self.parts.concat parts
  end

  ##
  # Enumerator for the parts of this document

  def each &block
    @parts.each(&block)
  end

  ##
  # Does this document have no parts?

  def empty?
    @parts.empty? or (@parts.length == 1 and merged? and @parts.first.empty?)
  end

  ##
  # The file this Document was created from.

  def file= location
    @file = case location
            when RDoc::TopLevel then
              location.relative_name
            else
              location
            end
  end

  ##
  # When this is a collection of documents (#file is not set and this document
  # contains only other documents as its direct children) #merge replaces
  # documents in this class with documents from +other+ when the file matches
  # and adds documents from +other+ when the files do not.
  #
  # The information in +other+ is preferred over the receiver

  def merge other
    if empty? then
      @parts = other.parts
      return self
    end

    other.parts.each do |other_part|
      self.parts.delete_if do |self_part|
        self_part.file and self_part.file == other_part.file
      end

      self.parts << other_part
    end

    self
  end

  ##
  # Does this Document contain other Documents?

  def merged?
    RDoc::Markup::Document === @parts.first
  end

  def pretty_print q # :nodoc:
    start = @file ? "[doc (#{@file}): " : '[doc: '

    q.group 2, start, ']' do
      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Appends +parts+ to the document

  def push *parts
    self.parts.concat parts
  end

  ##
  # Returns an Array of headings in the document.
  #
  # Require 'rdoc/markup/formatter' before calling this method.

  def table_of_contents
    accept RDoc::Markup::ToTableOfContents.to_toc
  end

end

PK,"#[�fcr��.gems/rdoc-6.4.1.1/lib/rdoc/markup/list_item.rbnu�[���# frozen_string_literal: true
##
# An item within a List that contains paragraphs, headings, etc.
#
# For BULLET, NUMBER, LALPHA and UALPHA lists, the label will always be nil.
# For NOTE and LABEL lists, the list label may contain:
#
# * a single String for a single label
# * an Array of Strings for a list item with multiple terms
# * nil for an extra description attached to a previously labeled list item

class RDoc::Markup::ListItem

  ##
  # The label for the ListItem

  attr_accessor :label

  ##
  # Parts of the ListItem

  attr_reader :parts

  ##
  # Creates a new ListItem with an optional +label+ containing +parts+

  def initialize label = nil, *parts
    @label = label
    @parts = []
    @parts.concat parts
  end

  ##
  # Appends +part+ to the ListItem

  def << part
    @parts << part
  end

  def == other # :nodoc:
    self.class == other.class and
      @label == other.label and
      @parts == other.parts
  end

  ##
  # Runs this list item and all its #parts through +visitor+

  def accept visitor
    visitor.accept_list_item_start self

    @parts.each do |part|
      part.accept visitor
    end

    visitor.accept_list_item_end self
  end

  ##
  # Is the ListItem empty?

  def empty?
    @parts.empty?
  end

  ##
  # Length of parts in the ListItem

  def length
    @parts.length
  end

  def pretty_print q # :nodoc:
    q.group 2, '[item: ', ']' do
      case @label
      when Array then
        q.pp @label
        q.text ';'
        q.breakable
      when String then
        q.pp @label
        q.text ';'
        q.breakable
      end

      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Adds +parts+ to the ListItem

  def push *parts
    @parts.concat parts
  end

end

PK,"#[���;;)gems/rdoc-6.4.1.1/lib/rdoc/markup/rule.rbnu�[���# frozen_string_literal: true
##
# A horizontal rule with a weight

class RDoc::Markup::Rule < Struct.new :weight

  ##
  # Calls #accept_rule on +visitor+

  def accept visitor
    visitor.accept_rule self
  end

  def pretty_print q # :nodoc:
    q.group 2, '[rule:', ']' do
      q.pp weight
    end
  end

end

PK,"#[ߦo��1gems/rdoc-6.4.1.1/lib/rdoc/markup/attr_changer.rbnu�[���# frozen_string_literal: true
class RDoc::Markup

  AttrChanger = Struct.new :turn_on, :turn_off # :nodoc:

end

##
# An AttrChanger records a change in attributes. It contains a bitmap of the
# attributes to turn on, and a bitmap of those to turn off.

class RDoc::Markup::AttrChanger

  def to_s # :nodoc:
    "Attr: +#{turn_on}/-#{turn_off}"
  end

  def inspect # :nodoc:
    '+%d/-%d' % [turn_on, turn_off]
  end

end

PK,"#[%�F��.gems/rdoc-6.4.1.1/lib/rdoc/markup/formatter.rbnu�[���# frozen_string_literal: true
##
# Base class for RDoc markup formatters
#
# Formatters are a visitor that converts an RDoc::Markup tree (from a comment)
# into some kind of output.  RDoc ships with formatters for converting back to
# rdoc, ANSI text, HTML, a Table of Contents and other formats.
#
# If you'd like to write your own Formatter use
# RDoc::Markup::FormatterTestCase.  If you're writing a text-output formatter
# use RDoc::Markup::TextFormatterTestCase which provides extra test cases.

class RDoc::Markup::Formatter

  ##
  # Tag for inline markup containing a +bit+ for the bitmask and the +on+ and
  # +off+ triggers.

  InlineTag = Struct.new(:bit, :on, :off)

  ##
  # Converts a target url to one that is relative to a given path

  def self.gen_relative_url path, target
    from        = File.dirname path
    to, to_file = File.split target

    from = from.split "/"
    to   = to.split "/"

    from.delete '.'
    to.delete '.'

    while from.size > 0 and to.size > 0 and from[0] == to[0] do
      from.shift
      to.shift
    end

    from.fill ".."
    from.concat to
    from << to_file
    File.join(*from)
  end

  ##
  # Creates a new Formatter

  def initialize options, markup = nil
    @options = options

    @markup = markup || RDoc::Markup.new
    @am     = @markup.attribute_manager
    @am.add_regexp_handling(/<br>/, :HARD_BREAK)

    @attributes = @am.attributes

    @attr_tags = []

    @in_tt = 0
    @tt_bit = @attributes.bitmap_for :TT

    @hard_break = ''
    @from_path = '.'
  end

  ##
  # Adds +document+ to the output

  def accept_document document
    document.parts.each do |item|
      case item
      when RDoc::Markup::Document then # HACK
        accept_document item
      else
        item.accept self
      end
    end
  end

  ##
  # Adds a regexp handling for links of the form rdoc-...:

  def add_regexp_handling_RDOCLINK
    @markup.add_regexp_handling(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK)
  end

  ##
  # Adds a regexp handling for links of the form {<text>}[<url>] and
  # <word>[<url>]

  def add_regexp_handling_TIDYLINK
    @markup.add_regexp_handling(/(?:
                                  \{.*?\} |    # multi-word label
                                  \b[^\s{}]+? # single-word label
                                 )

                                 \[\S+?\]     # link target
                                /x, :TIDYLINK)
  end

  ##
  # Add a new set of tags for an attribute. We allow separate start and end
  # tags for flexibility

  def add_tag(name, start, stop)
    attr = @attributes.bitmap_for name
    @attr_tags << InlineTag.new(attr, start, stop)
  end

  ##
  # Allows +tag+ to be decorated with additional information.

  def annotate(tag)
    tag
  end

  ##
  # Marks up +content+

  def convert content
    @markup.convert content, self
  end

  ##
  # Converts flow items +flow+

  def convert_flow(flow)
    res = []

    flow.each do |item|
      case item
      when String then
        res << convert_string(item)
      when RDoc::Markup::AttrChanger then
        off_tags res, item
        on_tags res, item
      when RDoc::Markup::RegexpHandling then
        res << convert_regexp_handling(item)
      else
        raise "Unknown flow element: #{item.inspect}"
      end
    end

    res.join
  end

  ##
  # Converts added regexp handlings. See RDoc::Markup#add_regexp_handling

  def convert_regexp_handling target
    return target.text if in_tt?

    handled = false

    @attributes.each_name_of target.type do |name|
      method_name = "handle_regexp_#{name}"

      if respond_to? method_name then
        target.text = public_send method_name, target
        handled = true
      end
    end

    unless handled then
      target_name = @attributes.as_string target.type

      raise RDoc::Error, "Unhandled regexp handling #{target_name}: #{target}"
    end

    target.text
  end

  ##
  # Converts a string to be fancier if desired

  def convert_string string
    string
  end

  ##
  # Use ignore in your subclass to ignore the content of a node.
  #
  #   ##
  #   # We don't support raw nodes in ToNoRaw
  #
  #   alias accept_raw ignore

  def ignore *node
  end

  ##
  # Are we currently inside tt tags?

  def in_tt?
    @in_tt > 0
  end

  ##
  # Turns on tags for +item+ on +res+

  def on_tags res, item
    attr_mask = item.turn_on
    return if attr_mask.zero?

    @attr_tags.each do |tag|
      if attr_mask & tag.bit != 0 then
        res << annotate(tag.on)
        @in_tt += 1 if tt? tag
      end
    end
  end

  ##
  # Turns off tags for +item+ on +res+

  def off_tags res, item
    attr_mask = item.turn_off
    return if attr_mask.zero?

    @attr_tags.reverse_each do |tag|
      if attr_mask & tag.bit != 0 then
        @in_tt -= 1 if tt? tag
        res << annotate(tag.off)
      end
    end
  end

  ##
  # Extracts and a scheme, url and an anchor id from +url+ and returns them.

  def parse_url url
    case url
    when /^rdoc-label:([^:]*)(?::(.*))?/ then
      scheme = 'link'
      path   = "##{$1}"
      id     = " id=\"#{$2}\"" if $2
    when /([A-Za-z]+):(.*)/ then
      scheme = $1.downcase
      path   = $2
    when /^#/ then
    else
      scheme = 'http'
      path   = url
      url    = url
    end

    if scheme == 'link' then
      url = if path[0, 1] == '#' then # is this meaningful?
              path
            else
              self.class.gen_relative_url @from_path, path
            end
    end

    [scheme, url, id]
  end

  ##
  # Is +tag+ a tt tag?

  def tt? tag
    tag.bit == @tt_bit
  end

end

PK,"#[.�����,gems/rdoc-6.4.1.1/lib/rdoc/markup/to_rdoc.rbnu�[���# frozen_string_literal: true
##
# Outputs RDoc markup as RDoc markup! (mostly)

class RDoc::Markup::ToRdoc < RDoc::Markup::Formatter

  ##
  # Current indent amount for output in characters

  attr_accessor :indent

  ##
  # Output width in characters

  attr_accessor :width

  ##
  # Stack of current list indexes for alphabetic and numeric lists

  attr_reader :list_index

  ##
  # Stack of list types

  attr_reader :list_type

  ##
  # Stack of list widths for indentation

  attr_reader :list_width

  ##
  # Prefix for the next list item.  See #use_prefix

  attr_reader :prefix

  ##
  # Output accumulator

  attr_reader :res

  ##
  # Creates a new formatter that will output (mostly) \RDoc markup

  def initialize markup = nil
    super nil, markup

    @markup.add_regexp_handling(/\\\S/, :SUPPRESSED_CROSSREF)
    @width = 78
    init_tags

    @headings = {}
    @headings.default = []

    @headings[1] = ['= ',      '']
    @headings[2] = ['== ',     '']
    @headings[3] = ['=== ',    '']
    @headings[4] = ['==== ',   '']
    @headings[5] = ['===== ',  '']
    @headings[6] = ['====== ', '']

    @hard_break = "\n"
  end

  ##
  # Maps attributes to HTML sequences

  def init_tags
    add_tag :BOLD, "<b>", "</b>"
    add_tag :TT,   "<tt>", "</tt>"
    add_tag :EM,   "<em>", "</em>"
  end

  ##
  # Adds +blank_line+ to the output

  def accept_blank_line blank_line
    @res << "\n"
  end

  ##
  # Adds +paragraph+ to the output

  def accept_block_quote block_quote
    @indent += 2

    block_quote.parts.each do |part|
      @prefix = '> '

      part.accept self
    end

    @indent -= 2
  end

  ##
  # Adds +heading+ to the output

  def accept_heading heading
    use_prefix or @res << ' ' * @indent
    @res << @headings[heading.level][0]
    @res << attributes(heading.text)
    @res << @headings[heading.level][1]
    @res << "\n"
  end

  ##
  # Finishes consumption of +list+

  def accept_list_end list
    @list_index.pop
    @list_type.pop
    @list_width.pop
  end

  ##
  # Finishes consumption of +list_item+

  def accept_list_item_end list_item
    width = case @list_type.last
            when :BULLET then
              2
            when :NOTE, :LABEL then
              if @prefix then
                @res << @prefix.strip
                @prefix = nil
              end

              @res << "\n"
              2
            else
              bullet = @list_index.last.to_s
              @list_index[-1] = @list_index.last.succ
              bullet.length + 2
            end

    @indent -= width
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    type = @list_type.last

    case type
    when :NOTE, :LABEL then
      bullets = Array(list_item.label).map do |label|
        attributes(label).strip
      end.join "\n"

      bullets << ":\n" unless bullets.empty?

      @prefix = ' ' * @indent
      @indent += 2
      @prefix << bullets + (' ' * @indent)
    else
      bullet = type == :BULLET ? '*' :  @list_index.last.to_s + '.'
      @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
      width = bullet.length + 1
      @indent += width
    end
  end

  ##
  # Prepares the visitor for consuming +list+

  def accept_list_start list
    case list.type
    when :BULLET then
      @list_index << nil
      @list_width << 1
    when :LABEL, :NOTE then
      @list_index << nil
      @list_width << 2
    when :LALPHA then
      @list_index << 'a'
      @list_width << list.items.length.to_s.length
    when :NUMBER then
      @list_index << 1
      @list_width << list.items.length.to_s.length
    when :UALPHA then
      @list_index << 'A'
      @list_width << list.items.length.to_s.length
    else
      raise RDoc::Error, "invalid list type #{list.type}"
    end

    @list_type << list.type
  end

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    text = paragraph.text @hard_break
    wrap attributes text
  end

  ##
  # Adds +paragraph+ to the output

  def accept_indented_paragraph paragraph
    @indent += paragraph.indent
    text = paragraph.text @hard_break
    wrap attributes text
    @indent -= paragraph.indent
  end

  ##
  # Adds +raw+ to the output

  def accept_raw raw
    @res << raw.parts.join("\n")
  end

  ##
  # Adds +rule+ to the output

  def accept_rule rule
    use_prefix or @res << ' ' * @indent
    @res << '-' * (@width - @indent)
    @res << "\n"
  end

  ##
  # Outputs +verbatim+ indented 2 columns

  def accept_verbatim verbatim
    indent = ' ' * (@indent + 2)

    verbatim.parts.each do |part|
      @res << indent unless part == "\n"
      @res << part
    end

    @res << "\n"
  end

  ##
  # Adds +table+ to the output

  def accept_table header, body, aligns
    widths = header.zip(body) do |h, b|
      [h.size, b.size].max
    end
    aligns = aligns.map do |a|
      case a
      when nil
        :center
      when :left
        :ljust
      when :right
        :rjust
      end
    end
    @res << header.zip(widths, aligns) do |h, w, a|
      h.__send__(a, w)
    end.join("|").rstrip << "\n"
    @res << widths.map {|w| "-" * w }.join("|") << "\n"
    body.each do |row|
      @res << row.zip(widths, aligns) do |t, w, a|
        t.__send__(a, w)
      end.join("|").rstrip << "\n"
    end
  end

  ##
  # Applies attribute-specific markup to +text+ using RDoc::AttributeManager

  def attributes text
    flow = @am.flow text.dup
    convert_flow flow
  end

  ##
  # Returns the generated output

  def end_accepting
    @res.join
  end

  ##
  # Removes preceding \\ from the suppressed crossref +target+

  def handle_regexp_SUPPRESSED_CROSSREF target
    text = target.text
    text = text.sub('\\', '') unless in_tt?
    text
  end

  ##
  # Adds a newline to the output

  def handle_regexp_HARD_BREAK target
    "\n"
  end

  ##
  # Prepares the visitor for text generation

  def start_accepting
    @res = [""]
    @indent = 0
    @prefix = nil

    @list_index = []
    @list_type  = []
    @list_width = []
  end

  ##
  # Adds the stored #prefix to the output and clears it.  Lists generate a
  # prefix for later consumption.

  def use_prefix
    prefix, @prefix = @prefix, nil
    @res << prefix if prefix

    prefix
  end

  ##
  # Wraps +text+ to #width

  def wrap text
    return unless text && !text.empty?

    text_len = @width - @indent

    text_len = 20 if text_len < 20

    re = /^(.{0,#{text_len}})[ \n]/
    next_prefix = ' ' * @indent

    prefix = @prefix || next_prefix
    @prefix = nil

    @res << prefix

    while text.length > text_len
      if text =~ re then
        @res << $1
        text.slice!(0, $&.length)
      else
        @res << text.slice!(0, text_len)
      end

      @res << "\n" << next_prefix
    end

    if text.empty? then
      @res.pop
      @res.pop
    else
      @res << text
      @res << "\n"
    end
  end

end

PK,"#[ʘw�		/gems/rdoc-6.4.1.1/lib/rdoc/markup/to_tt_only.rbnu�[���# frozen_string_literal: true
##
# Extracts sections of text enclosed in plus, tt or code.  Used to discover
# undocumented parameters.

class RDoc::Markup::ToTtOnly < RDoc::Markup::Formatter

  ##
  # Stack of list types

  attr_reader :list_type

  ##
  # Output accumulator

  attr_reader :res

  ##
  # Creates a new tt-only formatter.

  def initialize markup = nil
    super nil, markup

    add_tag :TT, nil, nil
  end

  ##
  # Adds tts from +block_quote+ to the output

  def accept_block_quote block_quote
    tt_sections block_quote.text
  end

  ##
  # Pops the list type for +list+ from #list_type

  def accept_list_end list
    @list_type.pop
  end

  ##
  # Pushes the list type for +list+ onto #list_type

  def accept_list_start list
    @list_type << list.type
  end

  ##
  # Prepares the visitor for consuming +list_item+

  def accept_list_item_start list_item
    case @list_type.last
    when :NOTE, :LABEL then
      Array(list_item.label).map do |label|
        tt_sections label
      end.flatten
    end
  end

  ##
  # Adds +paragraph+ to the output

  def accept_paragraph paragraph
    tt_sections(paragraph.text)
  end

  ##
  # Does nothing to +markup_item+ because it doesn't have any user-built
  # content

  def do_nothing markup_item
  end

  alias accept_blank_line    do_nothing # :nodoc:
  alias accept_heading       do_nothing # :nodoc:
  alias accept_list_item_end do_nothing # :nodoc:
  alias accept_raw           do_nothing # :nodoc:
  alias accept_rule          do_nothing # :nodoc:
  alias accept_verbatim      do_nothing # :nodoc:

  ##
  # Extracts tt sections from +text+

  def tt_sections text
    flow = @am.flow text.dup

    flow.each do |item|
      case item
      when String then
        @res << item if in_tt?
      when RDoc::Markup::AttrChanger then
        off_tags res, item
        on_tags res, item
      when RDoc::Markup::RegexpHandling then
        @res << convert_regexp_handling(item) if in_tt? # TODO can this happen?
      else
        raise "Unknown flow element: #{item.inspect}"
      end
    end

    res
  end

  ##
  # Returns an Array of items that were wrapped in plus, tt or code.

  def end_accepting
    @res.compact
  end

  ##
  # Prepares the visitor for gathering tt sections

  def start_accepting
    @res = []

    @list_type = []
  end

end

PK,"#[�M����(gems/rdoc-6.4.1.1/lib/rdoc/markup/raw.rbnu�[���# frozen_string_literal: true
##
# A section of text that is added to the output document as-is

class RDoc::Markup::Raw

  ##
  # The component parts of the list

  attr_reader :parts

  ##
  # Creates a new Raw containing +parts+

  def initialize *parts
    @parts = []
    @parts.concat parts
  end

  ##
  # Appends +text+

  def << text
    @parts << text
  end

  def == other # :nodoc:
    self.class == other.class and @parts == other.parts
  end

  ##
  # Calls #accept_raw+ on +visitor+

  def accept visitor
    visitor.accept_raw self
  end

  ##
  # Appends +other+'s parts

  def merge other
    @parts.concat other.parts
  end

  def pretty_print q # :nodoc:
    self.class.name =~ /.*::(\w{1,4})/i

    q.group 2, "[#{$1.downcase}: ", ']' do
      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Appends +texts+ onto this Paragraph

  def push *texts
    self.parts.concat texts
  end

  ##
  # The raw text

  def text
    @parts.join ' '
  end

end

PK,"#[��սd(d(6gems/rdoc-6.4.1.1/lib/rdoc/markup/attribute_manager.rbnu�[���# frozen_string_literal: true
##
# Manages changes of attributes in a block of text

class RDoc::Markup::AttributeManager

  ##
  # The NUL character

  NULL = "\000".freeze

  #--
  # We work by substituting non-printing characters in to the text. For now
  # I'm assuming that I can substitute a character in the range 0..8 for a 7
  # bit character without damaging the encoded string, but this might be
  # optimistic
  #++

  A_PROTECT = 004 # :nodoc:

  ##
  # Special mask character to prevent inline markup handling

  PROTECT_ATTR = A_PROTECT.chr # :nodoc:

  ##
  # The attributes enabled for this markup object.

  attr_reader :attributes

  ##
  # This maps delimiters that occur around words (such as *bold* or +tt+)
  # where the start and end delimiters and the same. This lets us optimize
  # the regexp

  attr_reader :matching_word_pairs

  ##
  # And this is used when the delimiters aren't the same. In this case the
  # hash maps a pattern to the attribute character

  attr_reader :word_pair_map

  ##
  # This maps HTML tags to the corresponding attribute char

  attr_reader :html_tags

  ##
  # A \ in front of a character that would normally be processed turns off
  # processing. We do this by turning \< into <#{PROTECT}

  attr_reader :protectable

  ##
  # And this maps _regexp handling_ sequences to a name. A regexp handling
  # sequence is something like a WikiWord

  attr_reader :regexp_handlings

  ##
  # A bits of exclusive maps
  attr_reader :exclusive_bitmap

  ##
  # Creates a new attribute manager that understands bold, emphasized and
  # teletype text.

  def initialize
    @html_tags = {}
    @matching_word_pairs = {}
    @protectable = %w[<]
    @regexp_handlings = []
    @word_pair_map = {}
    @exclusive_bitmap = 0
    @attributes = RDoc::Markup::Attributes.new

    add_word_pair "*", "*", :BOLD, true
    add_word_pair "_", "_", :EM, true
    add_word_pair "+", "+", :TT, true

    add_html "em", :EM, true
    add_html "i",  :EM, true
    add_html "b",  :BOLD, true
    add_html "tt",   :TT, true
    add_html "code", :TT, true
  end

  ##
  # Return an attribute object with the given turn_on and turn_off bits set

  def attribute(turn_on, turn_off)
    RDoc::Markup::AttrChanger.new turn_on, turn_off
  end

  ##
  # Changes the current attribute from +current+ to +new+

  def change_attribute current, new
    diff = current ^ new
    attribute(new & diff, current & diff)
  end

  ##
  # Used by the tests to change attributes by name from +current_set+ to
  # +new_set+

  def changed_attribute_by_name current_set, new_set
    current = new = 0
    current_set.each do |name|
      current |= @attributes.bitmap_for(name)
    end

    new_set.each do |name|
      new |= @attributes.bitmap_for(name)
    end

    change_attribute(current, new)
  end

  ##
  # Copies +start_pos+ to +end_pos+ from the current string

  def copy_string(start_pos, end_pos)
    res = @str[start_pos...end_pos]
    res.gsub!(/\000/, '')
    res
  end

  def exclusive?(attr)
    (attr & @exclusive_bitmap) != 0
  end

  NON_PRINTING_START = "\1" # :nodoc:
  NON_PRINTING_END = "\2" # :nodoc:

  ##
  # Map attributes like <b>text</b>to the sequence
  # \001\002<char>\001\003<char>, where <char> is a per-attribute specific
  # character

  def convert_attrs(str, attrs, exclusive = false)
    convert_attrs_matching_word_pairs(str, attrs, exclusive)
    convert_attrs_word_pair_map(str, attrs, exclusive)
  end

  def convert_attrs_matching_word_pairs(str, attrs, exclusive)
    # first do matching ones
    tags = @matching_word_pairs.select { |start, bitmap|
      if exclusive && exclusive?(bitmap)
        true
      elsif !exclusive && !exclusive?(bitmap)
        true
      else
        false
      end
    }.keys
    return if tags.empty?
    all_tags = @matching_word_pairs.keys

    re = /(^|\W|[#{all_tags.join("")}])([#{tags.join("")}])(\2*[#\\]?[\w:.\/\[\]-]+?\S?)\2(?!\2)([#{all_tags.join("")}]|\W|$)/

    1 while str.gsub!(re) { |orig|
      attr = @matching_word_pairs[$2]
      attr_updated = attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
      if attr_updated
        $1 + NULL * $2.length + $3 + NULL * $2.length + $4
      else
        $1 + NON_PRINTING_START + $2 + NON_PRINTING_END + $3 + NON_PRINTING_START + $2 + NON_PRINTING_END + $4
      end
    }
    str.delete!(NON_PRINTING_START + NON_PRINTING_END)
  end

  def convert_attrs_word_pair_map(str, attrs, exclusive)
    # then non-matching
    unless @word_pair_map.empty? then
      @word_pair_map.each do |regexp, attr|
        if !exclusive
          next if exclusive?(attr)
        else
          next if !exclusive?(attr)
        end
        1 while str.gsub!(regexp) { |orig|
          updated = attrs.set_attrs($`.length + $1.length, $2.length, attr)
          if updated
            NULL * $1.length + $2 + NULL * $3.length
          else
            orig
          end
        }
      end
    end
  end

  ##
  # Converts HTML tags to RDoc attributes

  def convert_html(str, attrs, exclusive = false)
    tags = @html_tags.select { |start, bitmap|
      if exclusive && exclusive?(bitmap)
        true
      elsif !exclusive && !exclusive?(bitmap)
        true
      else
        false
      end
    }.keys.join '|'

    1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) { |orig|
      attr = @html_tags[$1.downcase]
      html_length = $1.length + 2
      seq = NULL * html_length
      attrs.set_attrs($`.length + html_length, $2.length, attr)
      seq + $2 + seq + NULL
    }
  end

  ##
  # Converts regexp handling sequences to RDoc attributes

  def convert_regexp_handlings str, attrs, exclusive = false
    @regexp_handlings.each do |regexp, attribute|
      if exclusive
        next if !exclusive?(attribute)
      else
        next if exclusive?(attribute)
      end
      str.scan(regexp) do
        capture = $~.size == 1 ? 0 : 1

        s, e = $~.offset capture

        attrs.set_attrs s, e - s, attribute | @attributes.regexp_handling
      end
    end
  end

  ##
  # Escapes regexp handling sequences of text to prevent conversion to RDoc

  def mask_protected_sequences
    # protect __send__, __FILE__, etc.
    @str.gsub!(/__([a-z]+)__/i,
      "_#{PROTECT_ATTR}_#{PROTECT_ATTR}\\1_#{PROTECT_ATTR}_#{PROTECT_ATTR}")
    @str.gsub!(/(\A|[^\\])\\([#{Regexp.escape @protectable.join}])/m,
               "\\1\\2#{PROTECT_ATTR}")
    @str.gsub!(/\\(\\[#{Regexp.escape @protectable.join}])/m, "\\1")
  end

  ##
  # Unescapes regexp handling sequences of text

  def unmask_protected_sequences
    @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
  end

  ##
  # Adds a markup class with +name+ for words wrapped in the +start+ and
  # +stop+ character.  To make words wrapped with "*" bold:
  #
  #   am.add_word_pair '*', '*', :BOLD

  def add_word_pair(start, stop, name, exclusive = false)
    raise ArgumentError, "Word flags may not start with '<'" if
      start[0,1] == '<'

    bitmap = @attributes.bitmap_for name

    if start == stop then
      @matching_word_pairs[start] = bitmap
    else
      pattern = /(#{Regexp.escape start})(\S+)(#{Regexp.escape stop})/
      @word_pair_map[pattern] = bitmap
    end

    @protectable << start[0,1]
    @protectable.uniq!

    @exclusive_bitmap |= bitmap if exclusive
  end

  ##
  # Adds a markup class with +name+ for words surrounded by HTML tag +tag+.
  # To process emphasis tags:
  #
  #   am.add_html 'em', :EM

  def add_html(tag, name, exclusive = false)
    bitmap = @attributes.bitmap_for name
    @html_tags[tag.downcase] = bitmap
    @exclusive_bitmap |= bitmap if exclusive
  end

  ##
  # Adds a regexp handling for +pattern+ with +name+.  A simple URL handler
  # would be:
  #
  #   @am.add_regexp_handling(/((https?:)\S+\w)/, :HYPERLINK)

  def add_regexp_handling pattern, name, exclusive = false
    bitmap = @attributes.bitmap_for(name)
    @regexp_handlings << [pattern, bitmap]
    @exclusive_bitmap |= bitmap if exclusive
  end

  ##
  # Processes +str+ converting attributes, HTML and regexp handlings

  def flow str
    @str = str.dup

    mask_protected_sequences

    @attrs = RDoc::Markup::AttrSpan.new @str.length, @exclusive_bitmap

    convert_attrs            @str, @attrs, true
    convert_html             @str, @attrs, true
    convert_regexp_handlings @str, @attrs, true
    convert_attrs            @str, @attrs
    convert_html             @str, @attrs
    convert_regexp_handlings @str, @attrs

    unmask_protected_sequences

    split_into_flow
  end

  ##
  # Debug method that prints a string along with its attributes

  def display_attributes
    puts
    puts @str.tr(NULL, "!")
    bit = 1
    16.times do |bno|
      line = ""
      @str.length.times do |i|
        if (@attrs[i] & bit) == 0
          line << " "
        else
          if bno.zero?
            line << "S"
          else
            line << ("%d" % (bno+1))
          end
        end
      end
      puts(line) unless line =~ /^ *$/
      bit <<= 1
    end
  end

  ##
  # Splits the string into chunks by attribute change

  def split_into_flow
    res = []
    current_attr = 0

    str_len = @str.length

    # skip leading invisible text
    i = 0
    i += 1 while i < str_len and @str[i].chr == "\0"
    start_pos = i

    # then scan the string, chunking it on attribute changes
    while i < str_len
      new_attr = @attrs[i]
      if new_attr != current_attr
        if i > start_pos
          res << copy_string(start_pos, i)
          start_pos = i
        end

        res << change_attribute(current_attr, new_attr)
        current_attr = new_attr

        if (current_attr & @attributes.regexp_handling) != 0 then
          i += 1 while
            i < str_len and (@attrs[i] & @attributes.regexp_handling) != 0

          res << RDoc::Markup::RegexpHandling.new(current_attr,
                                                  copy_string(start_pos, i))
          start_pos = i
          next
        end
      end

      # move on, skipping any invisible characters
      begin
        i += 1
      end while i < str_len and @str[i].chr == "\0"
    end

    # tidy up trailing text
    if start_pos < str_len
      res << copy_string(start_pos, str_len)
    end

    # and reset to all attributes off
    res << change_attribute(current_attr, 0) if current_attr != 0

    res
  end

end

PK,"#[�y ��/gems/rdoc-6.4.1.1/lib/rdoc/markup/hard_break.rbnu�[���# frozen_string_literal: true
##
# A hard-break in the middle of a paragraph.

class RDoc::Markup::HardBreak

  @instance = new

  ##
  # RDoc::Markup::HardBreak is a singleton

  def self.new
    @instance
  end

  ##
  # Calls #accept_hard_break on +visitor+

  def accept visitor
    visitor.accept_hard_break self
  end

  def == other # :nodoc:
    self.class === other
  end

  def pretty_print q # :nodoc:
    q.text "[break]"
  end

end

PK,"#[�t�ԇ�/gems/rdoc-6.4.1.1/lib/rdoc/markup/blank_line.rbnu�[���# frozen_string_literal: true
##
# An empty line.  This class is a singleton.

class RDoc::Markup::BlankLine

  @instance = new

  ##
  # RDoc::Markup::BlankLine is a singleton

  def self.new
    @instance
  end

  ##
  # Calls #accept_blank_line on +visitor+

  def accept visitor
    visitor.accept_blank_line self
  end

  def pretty_print q # :nodoc:
    q.text 'blankline'
  end

end

PK,"#[N�_���0gems/rdoc-6.4.1.1/lib/rdoc/markup/block_quote.rbnu�[���# frozen_string_literal: true
##
# A quoted section which contains markup items.

class RDoc::Markup::BlockQuote < RDoc::Markup::Raw

  ##
  # Calls #accept_block_quote on +visitor+

  def accept visitor
    visitor.accept_block_quote self
  end

end

PK,"#[TZL���9gems/rdoc-6.4.1.1/lib/rdoc/markup/to_table_of_contents.rbnu�[���# frozen_string_literal: true
##
# Extracts just the RDoc::Markup::Heading elements from a
# RDoc::Markup::Document to help build a table of contents

class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter

  @to_toc = nil

  ##
  # Singleton for table-of-contents generation

  def self.to_toc
    @to_toc ||= new
  end

  ##
  # Output accumulator

  attr_reader :res

  ##
  # Omits headings with a level less than the given level.

  attr_accessor :omit_headings_below

  def initialize # :nodoc:
    super nil

    @omit_headings_below = nil
  end

  ##
  # Adds +document+ to the output, using its heading cutoff if present

  def accept_document document
    @omit_headings_below = document.omit_headings_below

    super
  end

  ##
  # Adds +heading+ to the table of contents

  def accept_heading heading
    @res << heading unless suppressed? heading
  end

  ##
  # Returns the table of contents

  def end_accepting
    @res
  end

  ##
  # Prepares the visitor for text generation

  def start_accepting
    @omit_headings_below = nil
    @res = []
  end

  ##
  # Returns true if +heading+ is below the display threshold

  def suppressed? heading
    return false unless @omit_headings_below

    heading.level > @omit_headings_below
  end

  # :stopdoc:
  alias accept_block_quote     ignore
  alias accept_raw             ignore
  alias accept_rule            ignore
  alias accept_blank_line      ignore
  alias accept_paragraph       ignore
  alias accept_verbatim        ignore
  alias accept_list_end        ignore
  alias accept_list_item_start ignore
  alias accept_list_item_end   ignore
  alias accept_list_end_bullet ignore
  alias accept_list_start      ignore
  alias accept_table           ignore
  # :startdoc:

end

PK,"#[���a{{5gems/rdoc-6.4.1.1/lib/rdoc/markup/to_html_crossref.rbnu�[���# frozen_string_literal: true
##
# Subclass of the RDoc::Markup::ToHtml class that supports looking up method
# names, classes, etc to create links.  RDoc::CrossReference is used to
# generate those links based on the current context.

class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml

  # :stopdoc:
  ALL_CROSSREF_REGEXP = RDoc::CrossReference::ALL_CROSSREF_REGEXP
  CLASS_REGEXP_STR    = RDoc::CrossReference::CLASS_REGEXP_STR
  CROSSREF_REGEXP     = RDoc::CrossReference::CROSSREF_REGEXP
  METHOD_REGEXP_STR   = RDoc::CrossReference::METHOD_REGEXP_STR
  # :startdoc:

  ##
  # RDoc::CodeObject for generating references

  attr_accessor :context

  ##
  # Should we show '#' characters on method references?

  attr_accessor :show_hash

  ##
  # Creates a new crossref resolver that generates links relative to +context+
  # which lives at +from_path+ in the generated files.  '#' characters on
  # references are removed unless +show_hash+ is true.  Only method names
  # preceded by '#' or '::' are linked, unless +hyperlink_all+ is true.

  def initialize(options, from_path, context, markup = nil)
    raise ArgumentError, 'from_path cannot be nil' if from_path.nil?

    super options, markup

    @context       = context
    @from_path     = from_path
    @hyperlink_all = @options.hyperlink_all
    @show_hash     = @options.show_hash

    @cross_reference = RDoc::CrossReference.new @context
  end

  def init_link_notation_regexp_handlings
    add_regexp_handling_RDOCLINK

    # The crossref must be linked before tidylink because Klass.method[:sym]
    # will be processed as a tidylink first and will be broken.
    crossref_re = @options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP
    @markup.add_regexp_handling crossref_re, :CROSSREF

    add_regexp_handling_TIDYLINK
  end

  ##
  # Creates a link to the reference +name+ if the name exists.  If +text+ is
  # given it is used as the link text, otherwise +name+ is used.

  def cross_reference name, text = nil, code = true
    lookup = name

    name = name[1..-1] unless @show_hash if name[0, 1] == '#'

    if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])@/
      text ||= "#{CGI.unescape $'} at <code>#{$1}</code>"
      code = false
    else
      text ||= name
    end

    link lookup, text, code
  end

  ##
  # We're invoked when any text matches the CROSSREF pattern.  If we find the
  # corresponding reference, generate a link.  If the name we're looking for
  # contains no punctuation, we look for it up the module/class chain.  For
  # example, ToHtml is found, even without the <tt>RDoc::Markup::</tt> prefix,
  # because we look for it in module Markup first.

  def handle_regexp_CROSSREF(target)
    name = target.text

    return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails

    unless @hyperlink_all then
      # This ensures that words entirely consisting of lowercase letters will
      # not have cross-references generated (to suppress lots of erroneous
      # cross-references to "new" in text, for instance)
      return name if name =~ /\A[a-z]*\z/
    end

    cross_reference name
  end

  ##
  # Handles <tt>rdoc-ref:</tt> scheme links and allows RDoc::Markup::ToHtml to
  # handle other schemes.

  def handle_regexp_HYPERLINK target
    return cross_reference $' if target.text =~ /\Ardoc-ref:/

    super
  end

  ##
  # +target+ is an rdoc-schemed link that will be converted into a hyperlink.
  # For the rdoc-ref scheme the cross-reference will be looked up and the
  # given name will be used.
  #
  # All other contents are handled by
  # {the superclass}[rdoc-ref:RDoc::Markup::ToHtml#handle_regexp_RDOCLINK]

  def handle_regexp_RDOCLINK target
    url = target.text

    case url
    when /\Ardoc-ref:/ then
      cross_reference $'
    else
      super
    end
  end

  ##
  # Generates links for <tt>rdoc-ref:</tt> scheme URLs and allows
  # RDoc::Markup::ToHtml to handle other schemes.

  def gen_url url, text
    return super unless url =~ /\Ardoc-ref:/

    name = $'
    cross_reference name, text, name == text
  end

  ##
  # Creates an HTML link to +name+ with the given +text+.

  def link name, text, code = true
    if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])@/
      name = $1
      label = $'
    end

    ref = @cross_reference.resolve name, text

    case ref
    when String then
      ref
    else
      path = ref.as_href @from_path

      if code and RDoc::CodeObject === ref and !(RDoc::TopLevel === ref)
        text = "<code>#{CGI.escapeHTML text}</code>"
      end

      if path =~ /#/ then
        path << "-label-#{label}"
      elsif ref.sections and
            ref.sections.any? { |section| label == section.title } then
        path << "##{label}"
      else
        if ref.respond_to?(:aref)
          path << "##{ref.aref}-label-#{label}"
        else
          path << "#label-#{label}"
        end
      end if label

      "<a href=\"#{path}\">#{text}</a>"
    end
  end

end

PK,"#[[n�A##-gems/rdoc-6.4.1.1/lib/rdoc/markup/verbatim.rbnu�[���# frozen_string_literal: true
##
# A section of verbatim text

class RDoc::Markup::Verbatim < RDoc::Markup::Raw

  ##
  # Format of this verbatim section

  attr_accessor :format

  def initialize *parts # :nodoc:
    super

    @format = nil
  end

  def == other # :nodoc:
    super and @format == other.format
  end

  ##
  # Calls #accept_verbatim on +visitor+

  def accept visitor
    visitor.accept_verbatim self
  end

  ##
  # Collapses 3+ newlines into two newlines

  def normalize
    parts = []

    newlines = 0

    @parts.each do |part|
      case part
      when /^\s*\n/ then
        newlines += 1
        parts << part if newlines == 1
      else
        newlines = 0
        parts << part
      end
    end

    parts.pop if parts.last =~ /\A\r?\n\z/

    @parts = parts
  end

  def pretty_print q # :nodoc:
    self.class.name =~ /.*::(\w{1,4})/i

    q.group 2, "[#{$1.downcase}: ", ']' do
      if @format then
        q.text "format: #{@format}"
        q.breakable
      end

      q.seplist @parts do |part|
        q.pp part
      end
    end
  end

  ##
  # Is this verbatim section Ruby code?

  def ruby?
    @format ||= nil # TODO for older ri data, switch the tree to marshal_dump
    @format == :ruby
  end

  ##
  # The text of the section

  def text
    @parts.join
  end

end

PK,"#[|����4gems/rdoc-6.4.1.1/lib/rdoc/markup/regexp_handling.rbnu�[���# frozen_string_literal: true
##
# Hold details of a regexp handling sequence

class RDoc::Markup::RegexpHandling

  ##
  # Regexp handling type

  attr_reader   :type

  ##
  # Regexp handling text

  attr_accessor :text

  ##
  # Creates a new regexp handling sequence of +type+ with +text+

  def initialize(type, text)
    @type, @text = type, text
  end

  ##
  # Regexp handlings are equal when the have the same text and type

  def ==(o)
    self.text == o.text && self.type == o.type
  end

  def inspect # :nodoc:
    "#<RDoc::Markup::RegexpHandling:0x%x @type=%p, @text=%p>" % [
      object_id, @type, text.dump]
  end

  def to_s # :nodoc:
    "RegexpHandling: type=#{type} text=#{text.dump}"
  end

end

PK,"#[d����.gems/rdoc-6.4.1.1/lib/rdoc/markup/paragraph.rbnu�[���# frozen_string_literal: true
##
# A Paragraph of text

class RDoc::Markup::Paragraph < RDoc::Markup::Raw

  ##
  # Calls #accept_paragraph on +visitor+

  def accept visitor
    visitor.accept_paragraph self
  end

  ##
  # Joins the raw paragraph text and converts inline HardBreaks to the
  # +hard_break+ text.

  def text hard_break = ''
    @parts.map do |part|
      if RDoc::Markup::HardBreak === part then
        hard_break
      else
        part
      end
    end.join
  end

end

PK,"#[v���!�!0gems/rdoc-6.4.1.1/lib/rdoc/markup/pre_process.rbnu�[���# frozen_string_literal: true
##
# Handle common directives that can occur in a block of text:
#
#   \:include: filename
#
# Directives can be escaped by preceding them with a backslash.
#
# RDoc plugin authors can register additional directives to be handled by
# using RDoc::Markup::PreProcess::register.
#
# Any directive that is not built-in to RDoc (including those registered via
# plugins) will be stored in the metadata hash on the CodeObject the comment
# is attached to.  See RDoc::Markup@Directives for the list of built-in
# directives.

class RDoc::Markup::PreProcess

  ##
  # An RDoc::Options instance that will be filled in with overrides from
  # directives

  attr_accessor :options

  ##
  # Adds a post-process handler for directives.  The handler will be called
  # with the result RDoc::Comment (or text String) and the code object for the
  # comment (if any).

  def self.post_process &block
    @post_processors << block
  end

  ##
  # Registered post-processors

  def self.post_processors
    @post_processors
  end

  ##
  # Registers +directive+ as one handled by RDoc.  If a block is given the
  # directive will be replaced by the result of the block, otherwise the
  # directive will be removed from the processed text.
  #
  # The block will be called with the directive name and the directive
  # parameter:
  #
  #   RDoc::Markup::PreProcess.register 'my-directive' do |directive, param|
  #     # replace text, etc.
  #   end

  def self.register directive, &block
    @registered[directive] = block
  end

  ##
  # Registered directives

  def self.registered
    @registered
  end

  ##
  # Clears all registered directives and post-processors

  def self.reset
    @post_processors = []
    @registered = {}
  end

  reset

  ##
  # Creates a new pre-processor for +input_file_name+ that will look for
  # included files in +include_path+

  def initialize(input_file_name, include_path)
    @input_file_name = input_file_name
    @include_path = include_path
    @options = nil
  end

  ##
  # Look for directives in the given +text+.
  #
  # Options that we don't handle are yielded.  If the block returns false the
  # directive is restored to the text.  If the block returns nil or no block
  # was given the directive is handled according to the registered directives.
  # If a String was returned the directive is replaced with the string.
  #
  # If no matching directive was registered the directive is restored to the
  # text.
  #
  # If +code_object+ is given and the directive is unknown then the
  # directive's parameter is set as metadata on the +code_object+.  See
  # RDoc::CodeObject#metadata for details.

  def handle text, code_object = nil, &block
    if RDoc::Comment === text then
      comment = text
      text = text.text
    end

    # regexp helper (square brackets for optional)
    # $1      $2  $3        $4      $5
    # [prefix][\]:directive:[spaces][param]newline
    text = text.gsub(/^([ \t]*(?:#|\/?\*)?[ \t]*)(\\?):(\w+):([ \t]*)(.+)?(\r?\n|$)/) do
      # skip something like ':toto::'
      next $& if $4.empty? and $5 and $5[0, 1] == ':'

      # skip if escaped
      next "#$1:#$3:#$4#$5\n" unless $2.empty?

      # This is not in handle_directive because I didn't want to pass another
      # argument into it
      if comment and $3 == 'markup' then
        next "#{$1.strip}\n" unless $5
        comment.format = $5.downcase
        next "#{$1.strip}\n"
      end

      handle_directive $1, $3, $5, code_object, text.encoding, &block
    end

    if comment then
      comment.text = text
    else
      comment = text
    end

    self.class.post_processors.each do |handler|
      handler.call comment, code_object
    end

    text
  end

  ##
  # Performs the actions described by +directive+ and its parameter +param+.
  #
  # +code_object+ is used for directives that operate on a class or module.
  # +prefix+ is used to ensure the replacement for handled directives is
  # correct.  +encoding+ is used for the <tt>include</tt> directive.
  #
  # For a list of directives in RDoc see RDoc::Markup.
  #--
  # When 1.8.7 support is ditched prefix can be defaulted to ''

  def handle_directive prefix, directive, param, code_object = nil,
                       encoding = nil
    blankline = "#{prefix.strip}\n"
    directive = directive.downcase

    case directive
    when 'arg', 'args' then
      return "#{prefix}:#{directive}: #{param}\n" unless code_object && code_object.kind_of?(RDoc::AnyMethod)

      code_object.params = param

      blankline
    when 'category' then
      if RDoc::Context === code_object then
        section = code_object.add_section param
        code_object.temporary_section = section
      elsif RDoc::AnyMethod === code_object then
        code_object.section_title = param
      end

      blankline # ignore category if we're not on an RDoc::Context
    when 'doc' then
      return blankline unless code_object
      code_object.document_self = true
      code_object.force_documentation = true

      blankline
    when 'enddoc' then
      return blankline unless code_object
      code_object.done_documenting = true

      blankline
    when 'include' then
      filename = param.split(' ', 2).first
      include_file filename, prefix, encoding
    when 'main' then
      @options.main_page = param if @options.respond_to? :main_page

      blankline
    when 'nodoc' then
      return blankline unless code_object
      code_object.document_self = nil # notify nodoc
      code_object.document_children = param !~ /all/i

      blankline
    when 'notnew', 'not_new', 'not-new' then
      return blankline unless RDoc::AnyMethod === code_object

      code_object.dont_rename_initialize = true

      blankline
    when 'startdoc' then
      return blankline unless code_object

      code_object.start_doc
      code_object.force_documentation = true

      blankline
    when 'stopdoc' then
      return blankline unless code_object

      code_object.stop_doc

      blankline
    when 'title' then
      @options.default_title = param if @options.respond_to? :default_title=

      blankline
    when 'yield', 'yields' then
      return blankline unless code_object
      # remove parameter &block
      code_object.params = code_object.params.sub(/,?\s*&\w+/, '') if code_object.params

      code_object.block_params = param

      blankline
    else
      result = yield directive, param if block_given?

      case result
      when nil then
        code_object.metadata[directive] = param if code_object

        if RDoc::Markup::PreProcess.registered.include? directive then
          handler = RDoc::Markup::PreProcess.registered[directive]
          result = handler.call directive, param if handler
        else
          result = "#{prefix}:#{directive}: #{param}\n"
        end
      when false then
        result = "#{prefix}:#{directive}: #{param}\n"
      end

      result
    end
  end

  ##
  # Handles the <tt>:include: _filename_</tt> directive.
  #
  # If the first line of the included file starts with '#', and contains
  # an encoding information in the form 'coding:' or 'coding=', it is
  # removed.
  #
  # If all lines in the included file start with a '#', this leading '#'
  # is removed before inclusion. The included content is indented like
  # the <tt>:include:</tt> directive.
  #--
  # so all content will be verbatim because of the likely space after '#'?
  # TODO shift left the whole file content in that case
  # TODO comment stop/start #-- and #++ in included file must be processed here

  def include_file name, indent, encoding
    full_name = find_include_file name

    unless full_name then
      warn "Couldn't find file to include '#{name}' from #{@input_file_name}"
      return ''
    end

    content = RDoc::Encoding.read_file full_name, encoding, true
    content = RDoc::Encoding.remove_magic_comment content

    # strip magic comment
    content = content.sub(/\A# .*coding[=:].*$/, '').lstrip

    # strip leading '#'s, but only if all lines start with them
    if content =~ /^[^#]/ then
      content.gsub(/^/, indent)
    else
      content.gsub(/^#?/, indent)
    end
  end

  ##
  # Look for the given file in the directory containing the current file,
  # and then in each of the directories specified in the RDOC_INCLUDE path

  def find_include_file(name)
    to_search = [File.dirname(@input_file_name)].concat @include_path
    to_search.each do |dir|
      full_name = File.join(dir, name)
      stat = File.stat(full_name) rescue next
      return full_name if stat.readable?
    end
    nil
  end

end
PK,"#[�W��.gems/rdoc-6.4.1.1/lib/rdoc/markup/attr_span.rbnu�[���# frozen_string_literal: true
##
# An array of attributes which parallels the characters in a string.

class RDoc::Markup::AttrSpan

  ##
  # Creates a new AttrSpan for +length+ characters

  def initialize(length, exclusive)
    @attrs = Array.new(length, 0)
    @exclusive = exclusive
  end

  ##
  # Toggles +bits+ from +start+ to +length+
  def set_attrs(start, length, bits)
    updated = false
    for i in start ... (start+length)
      if (@exclusive & @attrs[i]) == 0 || (@exclusive & bits) != 0
        @attrs[i] |= bits
        updated = true
      end
    end
    updated
  end

  ##
  # Accesses flags for character +n+

  def [](n)
    @attrs[n]
  end

end

PK,"#[��<��8�8+gems/rdoc-6.4.1.1/lib/rdoc/markup/parser.rbnu�[���# frozen_string_literal: true
require 'strscan'

##
# A recursive-descent parser for RDoc markup.
#
# The parser tokenizes an input string then parses the tokens into a Document.
# Documents can be converted into output formats by writing a visitor like
# RDoc::Markup::ToHTML.
#
# The parser only handles the block-level constructs Paragraph, List,
# ListItem, Heading, Verbatim, BlankLine, Rule and BlockQuote.
# Inline markup such as <tt>\+blah\+</tt> is handled separately by
# RDoc::Markup::AttributeManager.
#
# To see what markup the Parser implements read RDoc.  To see how to use
# RDoc markup to format text in your program read RDoc::Markup.

class RDoc::Markup::Parser

  include RDoc::Text

  ##
  # List token types

  LIST_TOKENS = [
    :BULLET,
    :LABEL,
    :LALPHA,
    :NOTE,
    :NUMBER,
    :UALPHA,
  ]

  ##
  # Parser error subclass

  class Error < RuntimeError; end

  ##
  # Raised when the parser is unable to handle the given markup

  class ParseError < Error; end

  ##
  # Enables display of debugging information

  attr_accessor :debug

  ##
  # Token accessor

  attr_reader :tokens

  ##
  # Parses +str+ into a Document.
  #
  # Use RDoc::Markup#parse instead of this method.

  def self.parse str
    parser = new
    parser.tokenize str
    doc = RDoc::Markup::Document.new
    parser.parse doc
  end

  ##
  # Returns a token stream for +str+, for testing

  def self.tokenize str
    parser = new
    parser.tokenize str
    parser.tokens
  end

  ##
  # Creates a new Parser.  See also ::parse

  def initialize
    @binary_input   = nil
    @current_token  = nil
    @debug          = false
    @s              = nil
    @tokens         = []
  end

  ##
  # Builds a Heading of +level+

  def build_heading level
    type, text, = get

    text = case type
           when :TEXT then
             skip :NEWLINE
             text
           else
             unget
             ''
           end

    RDoc::Markup::Heading.new level, text
  end

  ##
  # Builds a List flush to +margin+

  def build_list margin
    p :list_start => margin if @debug

    list = RDoc::Markup::List.new
    label = nil

    until @tokens.empty? do
      type, data, column, = get

      case type
      when *LIST_TOKENS then
        if column < margin || (list.type && list.type != type) then
          unget
          break
        end

        list.type = type
        peek_type, _, column, = peek_token

        case type
        when :NOTE, :LABEL then
          label = [] unless label

          if peek_type == :NEWLINE then
            # description not on the same line as LABEL/NOTE
            # skip the trailing newline & any blank lines below
            while peek_type == :NEWLINE
              get
              peek_type, _, column, = peek_token
            end

            # we may be:
            #   - at end of stream
            #   - at a column < margin:
            #         [text]
            #       blah blah blah
            #   - at the same column, but with a different type of list item
            #       [text]
            #       * blah blah
            #   - at the same column, with the same type of list item
            #       [one]
            #       [two]
            # In all cases, we have an empty description.
            # In the last case only, we continue.
            if peek_type.nil? || column < margin then
              empty = true
            elsif column == margin then
              case peek_type
              when type
                empty = :continue
              when *LIST_TOKENS
                empty = true
              else
                empty = false
              end
            else
              empty = false
            end

            if empty then
              label << data
              next if empty == :continue
              break
            end
          end
        else
          data = nil
        end

        if label then
          data = label << data
          label = nil
        end

        list_item = RDoc::Markup::ListItem.new data
        parse list_item, column
        list << list_item

      else
        unget
        break
      end
    end

    p :list_end => margin if @debug

    if list.empty? then
      return nil unless label
      return nil unless [:LABEL, :NOTE].include? list.type

      list_item = RDoc::Markup::ListItem.new label, RDoc::Markup::BlankLine.new
      list << list_item
    end

    list
  end

  ##
  # Builds a Paragraph that is flush to +margin+

  def build_paragraph margin
    p :paragraph_start => margin if @debug

    paragraph = RDoc::Markup::Paragraph.new

    until @tokens.empty? do
      type, data, column, = get

      if type == :TEXT and column == margin then
        paragraph << data

        break if peek_token.first == :BREAK

        data << ' ' if skip :NEWLINE
      else
        unget
        break
      end
    end

    paragraph.parts.last.sub!(/ \z/, '') # cleanup

    p :paragraph_end => margin if @debug

    paragraph
  end

  ##
  # Builds a Verbatim that is indented from +margin+.
  #
  # The verbatim block is shifted left (the least indented lines start in
  # column 0).  Each part of the verbatim is one line of text, always
  # terminated by a newline.  Blank lines always consist of a single newline
  # character, and there is never a single newline at the end of the verbatim.

  def build_verbatim margin
    p :verbatim_begin => margin if @debug
    verbatim = RDoc::Markup::Verbatim.new

    min_indent = nil
    generate_leading_spaces = true
    line = ''.dup

    until @tokens.empty? do
      type, data, column, = get

      if type == :NEWLINE then
        line << data
        verbatim << line
        line = ''.dup
        generate_leading_spaces = true
        next
      end

      if column <= margin
        unget
        break
      end

      if generate_leading_spaces then
        indent = column - margin
        line << ' ' * indent
        min_indent = indent if min_indent.nil? || indent < min_indent
        generate_leading_spaces = false
      end

      case type
      when :HEADER then
        line << '=' * data
        _, _, peek_column, = peek_token
        peek_column ||= column + data
        indent = peek_column - column - data
        line << ' ' * indent
      when :RULE then
        width = 2 + data
        line << '-' * width
        _, _, peek_column, = peek_token
        peek_column ||= column + width
        indent = peek_column - column - width
        line << ' ' * indent
      when :BREAK, :TEXT then
        line << data
      else # *LIST_TOKENS
        list_marker = case type
                      when :BULLET then data
                      when :LABEL  then "[#{data}]"
                      when :NOTE   then "#{data}::"
                      else # :LALPHA, :NUMBER, :UALPHA
                        "#{data}."
                      end
        line << list_marker
        peek_type, _, peek_column = peek_token
        unless peek_type == :NEWLINE then
          peek_column ||= column + list_marker.length
          indent = peek_column - column - list_marker.length
          line << ' ' * indent
        end
      end

    end

    verbatim << line << "\n" unless line.empty?
    verbatim.parts.each { |p| p.slice!(0, min_indent) unless p == "\n" } if min_indent > 0
    verbatim.normalize

    p :verbatim_end => margin if @debug

    verbatim
  end

  ##
  # Pulls the next token from the stream.

  def get
    @current_token = @tokens.shift
    p :get => @current_token if @debug
    @current_token
  end

  ##
  # Parses the tokens into an array of RDoc::Markup::XXX objects,
  # and appends them to the passed +parent+ RDoc::Markup::YYY object.
  #
  # Exits at the end of the token stream, or when it encounters a token
  # in a column less than +indent+ (unless it is a NEWLINE).
  #
  # Returns +parent+.

  def parse parent, indent = 0
    p :parse_start => indent if @debug

    until @tokens.empty? do
      type, data, column, = get

      case type
      when :BREAK then
        parent << RDoc::Markup::BlankLine.new
        skip :NEWLINE, false
        next
      when :NEWLINE then
        # trailing newlines are skipped below, so this is a blank line
        parent << RDoc::Markup::BlankLine.new
        skip :NEWLINE, false
        next
      end

      # indentation change: break or verbatim
      if column < indent then
        unget
        break
      elsif column > indent then
        unget
        parent << build_verbatim(indent)
        next
      end

      # indentation is the same
      case type
      when :HEADER then
        parent << build_heading(data)
      when :RULE then
        parent << RDoc::Markup::Rule.new(data)
        skip :NEWLINE
      when :TEXT then
        unget
        parse_text parent, indent
      when :BLOCKQUOTE then
        type, _, column = get
        if type == :NEWLINE
          type, _, column = get
        end
        unget if type
        bq = RDoc::Markup::BlockQuote.new
        p :blockquote_start => [data, column] if @debug
        parse bq, column
        p :blockquote_end => indent if @debug
        parent << bq
      when *LIST_TOKENS then
        unget
        parent << build_list(indent)
      else
        type, data, column, line = @current_token
        raise ParseError, "Unhandled token #{type} (#{data.inspect}) at #{line}:#{column}"
      end
    end

    p :parse_end => indent if @debug

    parent

  end

  ##
  # Small hook that is overridden by RDoc::TomDoc

  def parse_text parent, indent # :nodoc:
    parent << build_paragraph(indent)
  end

  ##
  # Returns the next token on the stream without modifying the stream

  def peek_token
    token = @tokens.first || []
    p :peek => token if @debug
    token
  end

  ##
  # A simple wrapper of StringScanner that is aware of the current column and lineno

  class MyStringScanner
    def initialize(input)
      @line = @column = 0
      @s = StringScanner.new input
    end

    def scan(re)
      ret = @s.scan(re)
      @column += ret.length if ret
      ret
    end

    def unscan(s)
      @s.pos -= s.bytesize
      @column -= s.length
    end

    def pos
      [@column, @line]
    end

    def newline!
      @column = 0
      @line += 1
    end

    def eos?
      @s.eos?
    end

    def matched
      @s.matched
    end

    def [](i)
      @s[i]
    end
  end

  ##
  # Creates the StringScanner

  def setup_scanner input
    @s = MyStringScanner.new input
  end

  ##
  # Skips the next token if its type is +token_type+.
  #
  # Optionally raises an error if the next token is not of the expected type.

  def skip token_type, error = true
    type, = get
    return unless type # end of stream
    return @current_token if token_type == type
    unget
    raise ParseError, "expected #{token_type} got #{@current_token.inspect}" if error
  end

  ##
  # Turns text +input+ into a stream of tokens

  def tokenize input
    setup_scanner input

    until @s.eos? do
      pos = @s.pos

      # leading spaces will be reflected by the column of the next token
      # the only thing we loose are trailing spaces at the end of the file
      next if @s.scan(/ +/)

      # note: after BULLET, LABEL, etc.,
      # indent will be the column of the next non-newline token

      @tokens << case
                 # [CR]LF => :NEWLINE
                 when @s.scan(/\r?\n/) then
                   token = [:NEWLINE, @s.matched, *pos]
                   @s.newline!
                   token
                 # === text => :HEADER then :TEXT
                 when @s.scan(/(=+)(\s*)/) then
                   level = @s[1].length
                   header = [:HEADER, level, *pos]

                   if @s[2] =~ /^\r?\n/ then
                     @s.unscan(@s[2])
                     header
                   else
                     pos = @s.pos
                     @s.scan(/.*/)
                     @tokens << header
                     [:TEXT, @s.matched.sub(/\r$/, ''), *pos]
                   end
                 # --- (at least 3) and nothing else on the line => :RULE
                 when @s.scan(/(-{3,}) *\r?$/) then
                   [:RULE, @s[1].length - 2, *pos]
                 # * or - followed by white space and text => :BULLET
                 when @s.scan(/([*-]) +(\S)/) then
                   @s.unscan(@s[2])
                   [:BULLET, @s[1], *pos]
                 # A. text, a. text, 12. text => :UALPHA, :LALPHA, :NUMBER
                 when @s.scan(/([a-z]|\d+)\. +(\S)/i) then
                   # FIXME if tab(s), the column will be wrong
                   # either support tabs everywhere by first expanding them to
                   # spaces, or assume that they will have been replaced
                   # before (and provide a check for that at least in debug
                   # mode)
                   list_label = @s[1]
                   @s.unscan(@s[2])
                   list_type =
                     case list_label
                     when /[a-z]/ then :LALPHA
                     when /[A-Z]/ then :UALPHA
                     when /\d/    then :NUMBER
                     else
                       raise ParseError, "BUG token #{list_label}"
                     end
                   [list_type, list_label, *pos]
                 # [text] followed by spaces or end of line => :LABEL
                 when @s.scan(/\[(.*?)\]( +|\r?$)/) then
                   [:LABEL, @s[1], *pos]
                 # text:: followed by spaces or end of line => :NOTE
                 when @s.scan(/(.*?)::( +|\r?$)/) then
                   [:NOTE, @s[1], *pos]
                 # >>> followed by end of line => :BLOCKQUOTE
                 when @s.scan(/>>> *(\w+)?$/) then
                   [:BLOCKQUOTE, @s[1], *pos]
                 # anything else: :TEXT
                 else
                   @s.scan(/(.*?)(  )?\r?$/)
                   token = [:TEXT, @s[1], *pos]

                   if @s[2] then
                     @tokens << token
                     [:BREAK, @s[2], pos[0] + @s[1].length, pos[1]]
                   else
                     token
                   end
                 end
    end

    self
  end

  ##
  # Returns the current token to the token stream

  def unget
    token = @current_token
    p :unget => token if @debug
    raise Error, 'too many #ungets' if token == @tokens.first
    @tokens.unshift token if token
  end

end
PK,"#[
!�V#gems/rdoc-6.4.1.1/lib/rdoc/erbio.rbnu�[���# frozen_string_literal: true
require 'erb'

##
# A subclass of ERB that writes directly to an IO.  Credit to Aaron Patterson
# and Masatoshi SEKI.
#
# To use:
#
#   erbio = RDoc::ERBIO.new '<%= "hello world" %>', nil, nil
#
#   File.open 'hello.txt', 'w' do |io|
#     erbio.result binding
#   end
#
# Note that binding must enclose the io you wish to output on.

class RDoc::ERBIO < ERB

  ##
  # Defaults +eoutvar+ to 'io', otherwise is identical to ERB's initialize

  def initialize str, safe_level = nil, legacy_trim_mode = nil, legacy_eoutvar = 'io', trim_mode: nil, eoutvar: 'io'
    if RUBY_VERSION >= '2.6'
      super(str, trim_mode: trim_mode, eoutvar: eoutvar)
    else
      super(str, safe_level, legacy_trim_mode, legacy_eoutvar)
    end
  end

  ##
  # Instructs +compiler+ how to write to +io_variable+

  def set_eoutvar compiler, io_variable
    compiler.put_cmd    = "#{io_variable}.write"
    compiler.insert_cmd = "#{io_variable}.write"
    compiler.pre_cmd    = []
    compiler.post_cmd   = []
  end

end

PK,"#[F�v�EE gems/rdoc-6.4.1.1/lib/rdoc/rd.rbnu�[���# frozen_string_literal: true
##
# RDoc::RD implements the RD format from the rdtool gem.
#
# To choose RD as your only default format see
# RDoc::Options@Saved+Options for instructions on setting up a
# <code>.doc_options</code> file to store your project default.
#
# == LICENSE
#
# The grammar that produces RDoc::RD::BlockParser and RDoc::RD::InlineParser
# is included in RDoc under the Ruby License.
#
# You can find the original source for rdtool at
# https://github.com/uwabami/rdtool/
#
# You can use, re-distribute or change these files under Ruby's License or GPL.
#
# 1. You may make and give away verbatim copies of the source form of the
#    software without restriction, provided that you duplicate all of the
#    original copyright notices and associated disclaimers.
#
# 2. You may modify your copy of the software in any way, provided that
#    you do at least ONE of the following:
#
#    a. place your modifications in the Public Domain or otherwise
#       make them Freely Available, such as by posting said
#       modifications to Usenet or an equivalent medium, or by allowing
#       the author to include your modifications in the software.
#
#    b. use the modified software only within your corporation or
#       organization.
#
#    c. give non-standard binaries non-standard names, with
#       instructions on where to get the original software distribution.
#
#    d. make other distribution arrangements with the author.
#
# 3. You may distribute the software in object code or binary form,
#    provided that you do at least ONE of the following:
#
#    a. distribute the binaries and library files of the software,
#       together with instructions (in the manual page or equivalent)
#       on where to get the original distribution.
#
#    b. accompany the distribution with the machine-readable source of
#       the software.
#
#    c. give non-standard binaries non-standard names, with
#       instructions on where to get the original software distribution.
#
#    d. make other distribution arrangements with the author.
#
# 4. You may modify and include the part of the software into any other
#    software (possibly commercial).  But some files in the distribution
#    are not written by the author, so that they are not under these terms.
#
#    For the list of those files and their copying conditions, see the
#    file LEGAL.
#
# 5. The scripts and library files supplied as input to or produced as
#    output from the software do not automatically fall under the
#    copyright of the software, but belong to whomever generated them,
#    and may be sold commercially, and may be aggregated with this
#    software.
#
# 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
#    IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
#    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
#    PURPOSE.

class RDoc::RD

  ##
  # Parses +rd+ source and returns an RDoc::Markup::Document.  If the
  # <tt>=begin</tt> or <tt>=end</tt> lines are missing they will be added.

  def self.parse rd
    rd = rd.lines.to_a

    if rd.find { |i| /\S/ === i } and !rd.find{|i| /^=begin\b/ === i } then
      rd.unshift("=begin\n").push("=end\n")
    end

    parser = RDoc::RD::BlockParser.new
    document = parser.parse rd

    # isn't this always true?
    document.parts.shift if RDoc::Markup::BlankLine === document.parts.first
    document.parts.pop   if RDoc::Markup::BlankLine === document.parts.last

    document
  end

  autoload :BlockParser,  'rdoc/rd/block_parser'
  autoload :InlineParser, 'rdoc/rd/inline_parser'
  autoload :Inline,       'rdoc/rd/inline'

end

PK,"#[T��߆�"gems/rdoc-6.4.1.1/lib/rdoc/text.rbnu�[���# frozen_string_literal: true

##
# For RDoc::Text#to_html

require 'strscan'

##
# Methods for manipulating comment text

module RDoc::Text

  attr_accessor :language

  ##
  # Maps markup formats to classes that can parse them.  If the format is
  # unknown, "rdoc" format is used.

  MARKUP_FORMAT = {
    'markdown' => RDoc::Markdown,
    'rdoc'     => RDoc::Markup,
    'rd'       => RDoc::RD,
    'tomdoc'   => RDoc::TomDoc,
  }

  MARKUP_FORMAT.default = RDoc::Markup

  ##
  # Maps an encoding to a Hash of characters properly transcoded for that
  # encoding.
  #
  # See also encode_fallback.

  TO_HTML_CHARACTERS = Hash.new do |h, encoding|
    h[encoding] = {
      :close_dquote => encode_fallback('”', encoding, '"'),
      :close_squote => encode_fallback('’', encoding, '\''),
      :copyright    => encode_fallback('©', encoding, '(c)'),
      :ellipsis     => encode_fallback('…', encoding, '...'),
      :em_dash      => encode_fallback('—', encoding, '---'),
      :en_dash      => encode_fallback('–', encoding, '--'),
      :open_dquote  => encode_fallback('“', encoding, '"'),
      :open_squote  => encode_fallback('‘', encoding, '\''),
      :trademark    => encode_fallback('®', encoding, '(r)'),
    }
  end

  ##
  # Transcodes +character+ to +encoding+ with a +fallback+ character.

  def self.encode_fallback character, encoding, fallback
    character.encode(encoding, :fallback => { character => fallback },
                     :undef => :replace, :replace => fallback)
  end

  ##
  # Expands tab characters in +text+ to eight spaces

  def expand_tabs text
    expanded = []

    text.each_line do |line|
      nil while line.gsub!(/(?:\G|\r)((?:.{8})*?)([^\t\r\n]{0,7})\t/) do
        r = "#{$1}#{$2}#{' ' * (8 - $2.size)}"
        r = RDoc::Encoding.change_encoding r, text.encoding
        r
      end

      expanded << line
    end

    expanded.join
  end

  ##
  # Flush +text+ left based on the shortest line

  def flush_left text
    indent = 9999

    text.each_line do |line|
      line_indent = line =~ /\S/ || 9999
      indent = line_indent if indent > line_indent
    end

    empty = ''
    empty = RDoc::Encoding.change_encoding empty, text.encoding

    text.gsub(/^ {0,#{indent}}/, empty)
  end

  ##
  # Convert a string in markup format into HTML.
  #
  # Requires the including class to implement #formatter

  def markup text
    if @store.rdoc.options
      locale = @store.rdoc.options.locale
    else
      locale = nil
    end
    if locale
      i18n_text = RDoc::I18n::Text.new(text)
      text = i18n_text.translate(locale)
    end
    parse(text).accept formatter
  end

  ##
  # Strips hashes, expands tabs then flushes +text+ to the left

  def normalize_comment text
    return text if text.empty?

    case language
    when :ruby
      text = strip_hashes text
    when :c
      text = strip_stars text
    end
    text = expand_tabs    text
    text = flush_left     text
    text = strip_newlines text
    text
  end

  ##
  # Normalizes +text+ then builds a RDoc::Markup::Document from it

  def parse text, format = 'rdoc'
    return text if RDoc::Markup::Document === text
    return text.parse if RDoc::Comment === text

    text = normalize_comment text # TODO remove, should not be necessary

    return RDoc::Markup::Document.new if text =~ /\A\n*\z/

    MARKUP_FORMAT[format].parse text
  end

  ##
  # The first +limit+ characters of +text+ as HTML

  def snippet text, limit = 100
    document = parse text

    RDoc::Markup::ToHtmlSnippet.new(options, limit).convert document
  end

  ##
  # Strips leading # characters from +text+

  def strip_hashes text
    return text if text =~ /^(?>\s*)[^\#]/

    empty = ''
    empty = RDoc::Encoding.change_encoding empty, text.encoding

    text.gsub(/^\s*(#+)/) { $1.tr '#', ' ' }.gsub(/^\s+$/, empty)
  end

  ##
  # Strips leading and trailing \n characters from +text+

  def strip_newlines text
    text.gsub(/\A\n*(.*?)\n*\z/m) do $1 end # block preserves String encoding
  end

  ##
  # Strips /* */ style comments

  def strip_stars text
    return text unless text =~ %r%/\*.*\*/%m

    encoding = text.encoding

    text = text.gsub %r%Document-method:\s+[\w:.#=!?|^&<>~+\-/*\%@`\[\]]+%, ''

    space = ' '
    space = RDoc::Encoding.change_encoding space, encoding if encoding

    text.sub!  %r%/\*+%       do space * $&.length end
    text.sub!  %r%\*+/%       do space * $&.length end
    text.gsub! %r%^[ \t]*\*%m do space * $&.length end

    empty = ''
    empty = RDoc::Encoding.change_encoding empty, encoding if encoding
    text.gsub(/^\s+$/, empty)
  end

  ##
  # Converts ampersand, dashes, ellipsis, quotes, copyright and registered
  # trademark symbols in +text+ to properly encoded characters.

  def to_html text
    html = (''.encode text.encoding).dup

    encoded = RDoc::Text::TO_HTML_CHARACTERS[text.encoding]

    s = StringScanner.new text
    insquotes = false
    indquotes = false
    after_word = nil

    until s.eos? do
      case
      when s.scan(/<(tt|code)>.*?<\/\1>/) then # skip contents of tt
        html << s.matched.gsub('\\\\', '\\')
      when s.scan(/<(tt|code)>.*?/) then
        warn "mismatched <#{s[1]}> tag" # TODO signal file/line
        html << s.matched
      when s.scan(/<[^>]+\/?s*>/) then # skip HTML tags
        html << s.matched
      when s.scan(/\\(\S)/) then # unhandled suppressed crossref
        html << s[1]
        after_word = nil
      when s.scan(/\.\.\.(\.?)/) then
        html << s[1] << encoded[:ellipsis]
        after_word = nil
      when s.scan(/\(c\)/i) then
        html << encoded[:copyright]
        after_word = nil
      when s.scan(/\(r\)/i) then
        html << encoded[:trademark]
        after_word = nil
      when s.scan(/---/) then
        html << encoded[:em_dash]
        after_word = nil
      when s.scan(/--/) then
        html << encoded[:en_dash]
        after_word = nil
      when s.scan(/&quot;|"/) then
        html << encoded[indquotes ? :close_dquote : :open_dquote]
        indquotes = !indquotes
        after_word = nil
      when s.scan(/``/) then # backtick double quote
        html << encoded[:open_dquote]
        after_word = nil
      when s.scan(/(?:&#39;|'){2}/) then # tick double quote
        html << encoded[:close_dquote]
        after_word = nil
      when s.scan(/`/) then # backtick
        if insquotes or after_word
          html << '`'
          after_word = false
        else
          html << encoded[:open_squote]
          insquotes = true
        end
      when s.scan(/&#39;|'/) then # single quote
        if insquotes
          html << encoded[:close_squote]
          insquotes = false
        elsif after_word
          # Mary's dog, my parents' house: do not start paired quotes
          html << encoded[:close_squote]
        else
          html << encoded[:open_squote]
          insquotes = true
        end

        after_word = nil
      else # advance to the next potentially significant character
        match = s.scan(/.+?(?=[<\\.("'`&-])/) #"

        if match then
          html << match
          after_word = match =~ /\w$/
        else
          html << s.rest
          break
        end
      end
    end

    html
  end

  ##
  # Wraps +txt+ to +line_len+

  def wrap(txt, line_len = 76)
    res = []
    sp = 0
    ep = txt.length

    while sp < ep
      # scan back for a space
      p = sp + line_len - 1
      if p >= ep
        p = ep
      else
        while p > sp and txt[p] != ?\s
          p -= 1
        end
        if p <= sp
          p = sp + line_len
          while p < ep and txt[p] != ?\s
            p += 1
          end
        end
      end
      res << txt[sp...p] << "\n"
      sp = p
      sp += 1 while sp < ep and txt[sp] == ?\s
    end

    res.join.strip
  end

end
PK,"#[Ȅ���(gems/rdoc-6.4.1.1/lib/rdoc/anon_class.rbnu�[���# frozen_string_literal: true
##
# An anonymous class like:
#
#   c = Class.new do end
#
# AnonClass is currently not used.

class RDoc::AnonClass < RDoc::ClassModule
end

PK,"#[}{�})�)�%gems/rdoc-6.4.1.1/lib/rdoc/options.rbnu�[���# frozen_string_literal: true
require 'optparse'
require 'pathname'

##
# RDoc::Options handles the parsing and storage of options
#
# == Saved Options
#
# You can save some options like the markup format in the
# <tt>.rdoc_options</tt> file in your gem.  The easiest way to do this is:
#
#   rdoc --markup tomdoc --write-options
#
# Which will automatically create the file and fill it with the options you
# specified.
#
# The following options will not be saved since they interfere with the user's
# preferences or with the normal operation of RDoc:
#
# * +--coverage-report+
# * +--dry-run+
# * +--encoding+
# * +--force-update+
# * +--format+
# * +--pipe+
# * +--quiet+
# * +--template+
# * +--verbose+
#
# == Custom Options
#
# Generators can hook into RDoc::Options to add generator-specific command
# line options.
#
# When <tt>--format</tt> is encountered in ARGV, RDoc calls ::setup_options on
# the generator class to add extra options to the option parser.  Options for
# custom generators must occur after <tt>--format</tt>.  <tt>rdoc --help</tt>
# will list options for all installed generators.
#
# Example:
#
#   class RDoc::Generator::Spellcheck
#     RDoc::RDoc.add_generator self
#
#     def self.setup_options rdoc_options
#       op = rdoc_options.option_parser
#
#       op.on('--spell-dictionary DICTIONARY',
#             RDoc::Options::Path) do |dictionary|
#         rdoc_options.spell_dictionary = dictionary
#       end
#     end
#   end
#
# Of course, RDoc::Options does not respond to +spell_dictionary+ by default
# so you will need to add it:
#
#   class RDoc::Options
#
#     ##
#     # The spell dictionary used by the spell-checking plugin.
#
#     attr_accessor :spell_dictionary
#
#   end
#
# == Option Validators
#
# OptionParser validators will validate and cast user input values.  In
# addition to the validators that ship with OptionParser (String, Integer,
# Float, TrueClass, FalseClass, Array, Regexp, Date, Time, URI, etc.),
# RDoc::Options adds Path, PathArray and Template.

class RDoc::Options

  ##
  # The deprecated options.

  DEPRECATED = {
    '--accessor'      => 'support discontinued',
    '--diagram'       => 'support discontinued',
    '--help-output'   => 'support discontinued',
    '--image-format'  => 'was an option for --diagram',
    '--inline-source' => 'source code is now always inlined',
    '--merge'         => 'ri now always merges class information',
    '--one-file'      => 'support discontinued',
    '--op-name'       => 'support discontinued',
    '--opname'        => 'support discontinued',
    '--promiscuous'   => 'files always only document their content',
    '--ri-system'     => 'Ruby installers use other techniques',
  }

  ##
  # RDoc options ignored (or handled specially) by --write-options

  SPECIAL = %w[
    coverage_report
    dry_run
    encoding
    files
    force_output
    force_update
    generator
    generator_name
    generator_options
    generators
    op_dir
    option_parser
    pipe
    rdoc_include
    root
    static_path
    stylesheet_url
    template
    template_dir
    update_output_dir
    verbosity
    write_options
  ]

  ##
  # Option validator for OptionParser that matches a directory that exists on
  # the filesystem.

  Directory = Object.new

  ##
  # Option validator for OptionParser that matches a file or directory that
  # exists on the filesystem.

  Path = Object.new

  ##
  # Option validator for OptionParser that matches a comma-separated list of
  # files or directories that exist on the filesystem.

  PathArray = Object.new

  ##
  # Option validator for OptionParser that matches a template directory for an
  # installed generator that lives in
  # <tt>"rdoc/generator/template/#{template_name}"</tt>

  Template = Object.new

  ##
  # Character-set for HTML output.  #encoding is preferred over #charset

  attr_accessor :charset

  ##
  # If true, RDoc will not write any files.

  attr_accessor :dry_run

  ##
  # The output encoding.  All input files will be transcoded to this encoding.
  #
  # The default encoding is UTF-8.  This is set via --encoding.

  attr_accessor :encoding

  ##
  # Files matching this pattern will be excluded

  attr_writer :exclude

  ##
  # The list of files to be processed

  attr_accessor :files

  ##
  # Create the output even if the output directory does not look
  # like an rdoc output directory

  attr_accessor :force_output

  ##
  # Scan newer sources than the flag file if true.

  attr_accessor :force_update

  ##
  # Formatter to mark up text with

  attr_accessor :formatter

  ##
  # Description of the output generator (set with the <tt>--format</tt> option)

  attr_accessor :generator

  ##
  # For #==

  attr_reader :generator_name # :nodoc:

  ##
  # Loaded generator options.  Used to prevent --help from loading the same
  # options multiple times.

  attr_accessor :generator_options

  ##
  # Old rdoc behavior: hyperlink all words that match a method name,
  # even if not preceded by '#' or '::'

  attr_accessor :hyperlink_all

  ##
  # Include line numbers in the source code

  attr_accessor :line_numbers

  ##
  # The output locale.

  attr_accessor :locale

  ##
  # The directory where locale data live.

  attr_accessor :locale_dir

  ##
  # Name of the file, class or module to display in the initial index page (if
  # not specified the first file we encounter is used)

  attr_accessor :main_page

  ##
  # The default markup format.  The default is 'rdoc'.  'markdown', 'tomdoc'
  # and 'rd' are also built-in.

  attr_accessor :markup

  ##
  # If true, only report on undocumented files

  attr_accessor :coverage_report

  ##
  # The name of the output directory

  attr_accessor :op_dir

  ##
  # The OptionParser for this instance

  attr_accessor :option_parser

  ##
  # Output heading decorations?
  attr_accessor :output_decoration

  ##
  # Directory where guides, FAQ, and other pages not associated with a class
  # live.  You may leave this unset if these are at the root of your project.

  attr_accessor :page_dir

  ##
  # Is RDoc in pipe mode?

  attr_accessor :pipe

  ##
  # Array of directories to search for files to satisfy an :include:

  attr_accessor :rdoc_include

  ##
  # Root of the source documentation will be generated for.  Set this when
  # building documentation outside the source directory.  Defaults to the
  # current directory.

  attr_accessor :root

  ##
  # Include the '#' at the front of hyperlinked instance method names

  attr_accessor :show_hash

  ##
  # Directory to copy static files from

  attr_accessor :static_path

  ##
  # The number of columns in a tab

  attr_accessor :tab_width

  ##
  # Template to be used when generating output

  attr_accessor :template

  ##
  # Directory the template lives in

  attr_accessor :template_dir

  ##
  # Additional template stylesheets

  attr_accessor :template_stylesheets

  ##
  # Documentation title

  attr_accessor :title

  ##
  # Should RDoc update the timestamps in the output dir?

  attr_accessor :update_output_dir

  ##
  # Verbosity, zero means quiet

  attr_accessor :verbosity

  ##
  # URL of web cvs frontend

  attr_accessor :webcvs

  ##
  # Minimum visibility of a documented method. One of +:public+, +:protected+,
  # +:private+ or +:nodoc+.
  #
  # The +:nodoc+ visibility ignores all directives related to visibility.  The
  # other visibilities may be overridden on a per-method basis with the :doc:
  # directive.

  attr_reader :visibility

  def initialize loaded_options = nil # :nodoc:
    init_ivars
    override loaded_options if loaded_options
  end

  def init_ivars # :nodoc:
    @dry_run = false
    @exclude = %w[
      ~\z \.orig\z \.rej\z \.bak\z
      \.gemspec\z
    ]
    @files = nil
    @force_output = false
    @force_update = true
    @generator = nil
    @generator_name = nil
    @generator_options = []
    @generators = RDoc::RDoc::GENERATORS
    @hyperlink_all = false
    @line_numbers = false
    @locale = nil
    @locale_name = nil
    @locale_dir = 'locale'
    @main_page = nil
    @markup = 'rdoc'
    @coverage_report = false
    @op_dir = nil
    @page_dir = nil
    @pipe = false
    @output_decoration = true
    @rdoc_include = []
    @root = Pathname(Dir.pwd)
    @show_hash = false
    @static_path = []
    @stylesheet_url = nil # TODO remove in RDoc 4
    @tab_width = 8
    @template = nil
    @template_dir = nil
    @template_stylesheets = []
    @title = nil
    @update_output_dir = true
    @verbosity = 1
    @visibility = :protected
    @webcvs = nil
    @write_options = false
    @encoding = Encoding::UTF_8
    @charset = @encoding.name
  end

  def init_with map # :nodoc:
    init_ivars

    encoding = map['encoding']
    @encoding = encoding ? Encoding.find(encoding) : encoding

    @charset        = map['charset']
    @exclude        = map['exclude']
    @generator_name = map['generator_name']
    @hyperlink_all  = map['hyperlink_all']
    @line_numbers   = map['line_numbers']
    @locale_name    = map['locale_name']
    @locale_dir     = map['locale_dir']
    @main_page      = map['main_page']
    @markup         = map['markup']
    @op_dir         = map['op_dir']
    @show_hash      = map['show_hash']
    @tab_width      = map['tab_width']
    @template_dir   = map['template_dir']
    @title          = map['title']
    @visibility     = map['visibility']
    @webcvs         = map['webcvs']

    @rdoc_include = sanitize_path map['rdoc_include']
    @static_path  = sanitize_path map['static_path']
  end

  def yaml_initialize tag, map # :nodoc:
    init_with map
  end

  def override map # :nodoc:
    if map.has_key?('encoding')
      encoding = map['encoding']
      @encoding = encoding ? Encoding.find(encoding) : encoding
    end

    @charset        = map['charset']        if map.has_key?('charset')
    @exclude        = map['exclude']        if map.has_key?('exclude')
    @generator_name = map['generator_name'] if map.has_key?('generator_name')
    @hyperlink_all  = map['hyperlink_all']  if map.has_key?('hyperlink_all')
    @line_numbers   = map['line_numbers']   if map.has_key?('line_numbers')
    @locale_name    = map['locale_name']    if map.has_key?('locale_name')
    @locale_dir     = map['locale_dir']     if map.has_key?('locale_dir')
    @main_page      = map['main_page']      if map.has_key?('main_page')
    @markup         = map['markup']         if map.has_key?('markup')
    @op_dir         = map['op_dir']         if map.has_key?('op_dir')
    @show_hash      = map['show_hash']      if map.has_key?('show_hash')
    @tab_width      = map['tab_width']      if map.has_key?('tab_width')
    @template_dir   = map['template_dir']   if map.has_key?('template_dir')
    @title          = map['title']          if map.has_key?('title')
    @visibility     = map['visibility']     if map.has_key?('visibility')
    @webcvs         = map['webcvs']         if map.has_key?('webcvs')

    if map.has_key?('rdoc_include')
      @rdoc_include = sanitize_path map['rdoc_include']
    end
    if map.has_key?('static_path')
      @static_path  = sanitize_path map['static_path']
    end
  end

  def == other # :nodoc:
    self.class === other and
      @encoding       == other.encoding       and
      @generator_name == other.generator_name and
      @hyperlink_all  == other.hyperlink_all  and
      @line_numbers   == other.line_numbers   and
      @locale         == other.locale         and
      @locale_dir     == other.locale_dir and
      @main_page      == other.main_page      and
      @markup         == other.markup         and
      @op_dir         == other.op_dir         and
      @rdoc_include   == other.rdoc_include   and
      @show_hash      == other.show_hash      and
      @static_path    == other.static_path    and
      @tab_width      == other.tab_width      and
      @template       == other.template       and
      @title          == other.title          and
      @visibility     == other.visibility     and
      @webcvs         == other.webcvs
  end

  ##
  # Check that the files on the command line exist

  def check_files
    @files.delete_if do |file|
      if File.exist? file then
        if File.readable? file then
          false
        else
          warn "file '#{file}' not readable"

          true
        end
      else
        warn "file '#{file}' not found"

        true
      end
    end
  end

  ##
  # Ensure only one generator is loaded

  def check_generator
    if @generator then
      raise OptionParser::InvalidOption,
        "generator already set to #{@generator_name}"
    end
  end

  ##
  # Set the title, but only if not already set. Used to set the title
  # from a source file, so that a title set from the command line
  # will have the priority.

  def default_title=(string)
    @title ||= string
  end

  ##
  # For dumping YAML

  def encode_with coder # :nodoc:
    encoding = @encoding ? @encoding.name : nil

    coder.add 'encoding', encoding
    coder.add 'static_path',  sanitize_path(@static_path)
    coder.add 'rdoc_include', sanitize_path(@rdoc_include)

    ivars = instance_variables.map { |ivar| ivar.to_s[1..-1] }
    ivars -= SPECIAL

    ivars.sort.each do |ivar|
      coder.add ivar, instance_variable_get("@#{ivar}")
    end
  end

  ##
  # Create a regexp for #exclude

  def exclude
    if @exclude.nil? or Regexp === @exclude then
      # done, #finish is being re-run
      @exclude
    elsif @exclude.empty? then
      nil
    else
      Regexp.new(@exclude.join("|"))
    end
  end

  ##
  # Completes any unfinished option setup business such as filtering for
  # existent files, creating a regexp for #exclude and setting a default
  # #template.

  def finish
    @op_dir ||= 'doc'

    @rdoc_include << "." if @rdoc_include.empty?
    root = @root.to_s
    @rdoc_include << root unless @rdoc_include.include?(root)

    @exclude = self.exclude

    finish_page_dir

    check_files

    # If no template was specified, use the default template for the output
    # formatter

    unless @template then
      @template     = @generator_name
      @template_dir = template_dir_for @template
    end

    if @locale_name
      @locale = RDoc::I18n::Locale[@locale_name]
      @locale.load(@locale_dir)
    else
      @locale = nil
    end

    self
  end

  ##
  # Fixes the page_dir to be relative to the root_dir and adds the page_dir to
  # the files list.

  def finish_page_dir
    return unless @page_dir

    @files << @page_dir.to_s

    page_dir = nil
    begin
      page_dir = @page_dir.expand_path.relative_path_from @root
    rescue ArgumentError
      # On Windows, sometimes crosses different drive letters.
      page_dir = @page_dir.expand_path
    end

    @page_dir = page_dir
  end

  ##
  # Returns a properly-space list of generators and their descriptions.

  def generator_descriptions
    lengths = []

    generators = RDoc::RDoc::GENERATORS.map do |name, generator|
      lengths << name.length

      description = generator::DESCRIPTION if
        generator.const_defined? :DESCRIPTION

      [name, description]
    end

    longest = lengths.max

    generators.sort.map do |name, description|
      if description then
        "  %-*s - %s" % [longest, name, description]
      else
        "  #{name}"
      end
    end.join "\n"
  end

  ##
  # Parses command line options.

  def parse argv
    ignore_invalid = true

    argv.insert(0, *ENV['RDOCOPT'].split) if ENV['RDOCOPT']

    opts = OptionParser.new do |opt|
      @option_parser = opt
      opt.program_name = File.basename $0
      opt.version = RDoc::VERSION
      opt.release = nil
      opt.summary_indent = ' ' * 4
      opt.banner = <<-EOF
Usage: #{opt.program_name} [options] [names...]

  Files are parsed, and the information they contain collected, before any
  output is produced. This allows cross references between all files to be
  resolved. If a name is a directory, it is traversed. If no names are
  specified, all Ruby files in the current directory (and subdirectories) are
  processed.

  How RDoc generates output depends on the output formatter being used, and on
  the options you give.

  Options can be specified via the RDOCOPT environment variable, which
  functions similar to the RUBYOPT environment variable for ruby.

    $ export RDOCOPT="--show-hash"

  will make rdoc show hashes in method links by default.  Command-line options
  always will override those in RDOCOPT.

  Available formatters:

#{generator_descriptions}

  RDoc understands the following file formats:

      EOF

      parsers = Hash.new { |h,parser| h[parser] = [] }

      RDoc::Parser.parsers.each do |regexp, parser|
        parsers[parser.name.sub('RDoc::Parser::', '')] << regexp.source
      end

      parsers.sort.each do |parser, regexp|
        opt.banner += "  - #{parser}: #{regexp.join ', '}\n"
      end
      opt.banner += "  - TomDoc:  Only in ruby files\n"

      opt.banner += "\n  The following options are deprecated:\n\n"

      name_length = DEPRECATED.keys.sort_by { |k| k.length }.last.length

      DEPRECATED.sort_by { |k,| k }.each do |name, reason|
        opt.banner += "    %*1$2$s  %3$s\n" % [-name_length, name, reason]
      end

      opt.accept Template do |template|
        template_dir = template_dir_for template

        unless template_dir then
          $stderr.puts "could not find template #{template}"
          nil
        else
          [template, template_dir]
        end
      end

      opt.accept Directory do |directory|
        directory = File.expand_path directory

        raise OptionParser::InvalidArgument unless File.directory? directory

        directory
      end

      opt.accept Path do |path|
        path = File.expand_path path

        raise OptionParser::InvalidArgument unless File.exist? path

        path
      end

      opt.accept PathArray do |paths,|
        paths = if paths then
                  paths.split(',').map { |d| d unless d.empty? }
                end

        paths.map do |path|
          path = File.expand_path path

          raise OptionParser::InvalidArgument unless File.exist? path

          path
        end
      end

      opt.separator nil
      opt.separator "Parsing options:"
      opt.separator nil

      opt.on("--encoding=ENCODING", "-e", Encoding.list.map { |e| e.name },
             "Specifies the output encoding.  All files",
             "read will be converted to this encoding.",
             "The default encoding is UTF-8.",
             "--encoding is preferred over --charset") do |value|
               @encoding = Encoding.find value
               @charset = @encoding.name # may not be valid value
             end

      opt.separator nil

      opt.on("--locale=NAME",
             "Specifies the output locale.") do |value|
        @locale_name = value
      end

      opt.on("--locale-data-dir=DIR",
             "Specifies the directory where locale data live.") do |value|
        @locale_dir = value
      end

      opt.separator nil

      opt.on("--all", "-a",
             "Synonym for --visibility=private.") do |value|
        @visibility = :private
      end

      opt.separator nil

      opt.on("--exclude=PATTERN", "-x", Regexp,
             "Do not process files or directories",
             "matching PATTERN.") do |value|
        @exclude << value
      end

      opt.separator nil

      opt.on("--extension=NEW=OLD", "-E",
             "Treat files ending with .new as if they",
             "ended with .old. Using '-E cgi=rb' will",
             "cause xxx.cgi to be parsed as a Ruby file.") do |value|
        new, old = value.split(/=/, 2)

        unless new and old then
          raise OptionParser::InvalidArgument, "Invalid parameter to '-E'"
        end

        unless RDoc::Parser.alias_extension old, new then
          raise OptionParser::InvalidArgument, "Unknown extension .#{old} to -E"
        end
      end

      opt.separator nil

      opt.on("--[no-]force-update", "-U",
             "Forces rdoc to scan all sources even if",
             "no files are newer than the flag file.") do |value|
        @force_update = value
      end

      opt.separator nil

      opt.on("--pipe", "-p",
             "Convert RDoc on stdin to HTML") do
        @pipe = true
      end

      opt.separator nil

      opt.on("--tab-width=WIDTH", "-w", Integer,
             "Set the width of tab characters.") do |value|
        raise OptionParser::InvalidArgument,
              "#{value} is an invalid tab width" if value <= 0
        @tab_width = value
      end

      opt.separator nil

      opt.on("--visibility=VISIBILITY", "-V", RDoc::VISIBILITIES + [:nodoc],
             "Minimum visibility to document a method.",
             "One of 'public', 'protected' (the default),",
             "'private' or 'nodoc' (show everything)") do |value|
        @visibility = value
      end

      opt.separator nil

      markup_formats = RDoc::Text::MARKUP_FORMAT.keys.sort

      opt.on("--markup=MARKUP", markup_formats,
             "The markup format for the named files.",
             "The default is rdoc.  Valid values are:",
             markup_formats.join(', ')) do |value|
        @markup = value
      end

      opt.separator nil

      opt.on("--root=ROOT", Directory,
             "Root of the source tree documentation",
             "will be generated for.  Set this when",
             "building documentation outside the",
             "source directory.  Default is the",
             "current directory.") do |root|
        @root = Pathname(root)
      end

      opt.separator nil

      opt.on("--page-dir=DIR", Directory,
             "Directory where guides, your FAQ or",
             "other pages not associated with a class",
             "live.  Set this when you don't store",
             "such files at your project root.",
             "NOTE: Do not use the same file name in",
             "the page dir and the root of your project") do |page_dir|
        @page_dir = Pathname(page_dir)
      end

      opt.separator nil
      opt.separator "Common generator options:"
      opt.separator nil

      opt.on("--force-output", "-O",
             "Forces rdoc to write the output files,",
             "even if the output directory exists",
             "and does not seem to have been created",
             "by rdoc.") do |value|
        @force_output = value
      end

      opt.separator nil

      generator_text = @generators.keys.map { |name| "  #{name}" }.sort

      opt.on("-f", "--fmt=FORMAT", "--format=FORMAT", @generators.keys,
             "Set the output formatter.  One of:", *generator_text) do |value|
        check_generator

        @generator_name = value.downcase
        setup_generator
      end

      opt.separator nil

      opt.on("--include=DIRECTORIES", "-i", PathArray,
             "Set (or add to) the list of directories to",
             "be searched when satisfying :include:",
             "requests. Can be used more than once.") do |value|
        @rdoc_include.concat value.map { |dir| dir.strip }
      end

      opt.separator nil

      opt.on("--[no-]coverage-report=[LEVEL]", "--[no-]dcov", "-C", Integer,
             "Prints a report on undocumented items.",
             "Does not generate files.") do |value|
        value = 0 if value.nil? # Integer converts -C to nil

        @coverage_report = value
        @force_update = true if value
      end

      opt.separator nil

      opt.on("--output=DIR", "--op", "-o",
             "Set the output directory.") do |value|
        @op_dir = value
      end

      opt.separator nil

      opt.on("-d",
             "Deprecated --diagram option.",
             "Prevents firing debug mode",
             "with legacy invocation.") do |value|
      end

      opt.separator nil
      opt.separator 'HTML generator options:'
      opt.separator nil

      opt.on("--charset=CHARSET", "-c",
             "Specifies the output HTML character-set.",
             "Use --encoding instead of --charset if",
             "available.") do |value|
        @charset = value
      end

      opt.separator nil

      opt.on("--hyperlink-all", "-A",
             "Generate hyperlinks for all words that",
             "correspond to known methods, even if they",
             "do not start with '#' or '::' (legacy",
             "behavior).") do |value|
        @hyperlink_all = value
      end

      opt.separator nil

      opt.on("--main=NAME", "-m",
             "NAME will be the initial page displayed.") do |value|
        @main_page = value
      end

      opt.separator nil

      opt.on("--[no-]line-numbers", "-N",
             "Include line numbers in the source code.",
             "By default, only the number of the first",
             "line is displayed, in a leading comment.") do |value|
        @line_numbers = value
      end

      opt.separator nil

      opt.on("--show-hash", "-H",
             "A name of the form #name in a comment is a",
             "possible hyperlink to an instance method",
             "name. When displayed, the '#' is removed",
             "unless this option is specified.") do |value|
        @show_hash = value
      end

      opt.separator nil

      opt.on("--template=NAME", "-T", Template,
             "Set the template used when generating",
             "output. The default depends on the",
             "formatter used.") do |(template, template_dir)|
        @template     = template
        @template_dir = template_dir
      end

      opt.separator nil

      opt.on("--template-stylesheets=FILES", PathArray,
             "Set (or add to) the list of files to",
             "include with the html template.") do |value|
        @template_stylesheets.concat value
      end

      opt.separator nil

      opt.on("--title=TITLE", "-t",
             "Set TITLE as the title for HTML output.") do |value|
        @title = value
      end

      opt.separator nil

      opt.on("--copy-files=PATH", Path,
             "Specify a file or directory to copy static",
             "files from.",
             "If a file is given it will be copied into",
             "the output dir.  If a directory is given the",
             "entire directory will be copied.",
             "You can use this multiple times") do |value|
        @static_path << value
      end

      opt.separator nil

      opt.on("--webcvs=URL", "-W",
             "Specify a URL for linking to a web frontend",
             "to CVS. If the URL contains a '\%s', the",
             "name of the current file will be",
             "substituted; if the URL doesn't contain a",
             "'\%s', the filename will be appended to it.") do |value|
        @webcvs = value
      end

      opt.separator nil
      opt.separator "ri generator options:"
      opt.separator nil

      opt.on("--ri", "-r",
             "Generate output for use by `ri`. The files",
             "are stored in the '.rdoc' directory under",
             "your home directory unless overridden by a",
             "subsequent --op parameter, so no special",
             "privileges are needed.") do |value|
        check_generator

        @generator_name = "ri"
        @op_dir ||= RDoc::RI::Paths::HOMEDIR
        setup_generator
      end

      opt.separator nil

      opt.on("--ri-site", "-R",
             "Generate output for use by `ri`. The files",
             "are stored in a site-wide directory,",
             "making them accessible to others, so",
             "special privileges are needed.") do |value|
        check_generator

        @generator_name = "ri"
        @op_dir = RDoc::RI::Paths.site_dir
        setup_generator
      end

      opt.separator nil
      opt.separator "Generic options:"
      opt.separator nil

      opt.on("--write-options",
             "Write .rdoc_options to the current",
             "directory with the given options.  Not all",
             "options will be used.  See RDoc::Options",
             "for details.") do |value|
        @write_options = true
      end

      opt.separator nil

      opt.on("--[no-]dry-run",
             "Don't write any files") do |value|
        @dry_run = value
      end

      opt.separator nil

      opt.on("-D", "--[no-]debug",
             "Displays lots on internal stuff.") do |value|
        $DEBUG_RDOC = value
      end

      opt.separator nil

      opt.on("--[no-]ignore-invalid",
             "Ignore invalid options and continue",
             "(default true).") do |value|
        ignore_invalid = value
      end

      opt.separator nil

      opt.on("--quiet", "-q",
             "Don't show progress as we parse.") do |value|
        @verbosity = 0
      end

      opt.separator nil

      opt.on("--verbose", "-V",
             "Display extra progress as RDoc parses") do |value|
        @verbosity = 2
      end

      opt.separator nil

      opt.on("--version", "-v", "print the version") do
        puts opt.version
        exit
      end

      opt.separator nil

      opt.on("--help", "-h", "Display this help") do
        RDoc::RDoc::GENERATORS.each_key do |generator|
          setup_generator generator
        end

        puts opt.help
        exit
      end

      opt.separator nil
    end

    setup_generator 'darkfish' if
      argv.grep(/\A(-f|--fmt|--format|-r|-R|--ri|--ri-site)\b/).empty?

    deprecated = []
    invalid = []

    begin
      opts.parse! argv
    rescue OptionParser::ParseError => e
      if DEPRECATED[e.args.first] then
        deprecated << e.args.first
      elsif %w[--format --ri -r --ri-site -R].include? e.args.first then
        raise
      else
        invalid << e.args.join(' ')
      end

      retry
    end

    unless @generator then
      @generator = RDoc::Generator::Darkfish
      @generator_name = 'darkfish'
    end

    if @pipe and not argv.empty? then
      @pipe = false
      invalid << '-p (with files)'
    end

    unless quiet then
      deprecated.each do |opt|
        $stderr.puts 'option ' + opt + ' is deprecated: ' + DEPRECATED[opt]
      end
    end

    unless invalid.empty? then
      invalid = "invalid options: #{invalid.join ', '}"

      if ignore_invalid then
        unless quiet then
          $stderr.puts invalid
          $stderr.puts '(invalid options are ignored)'
        end
      else
        unless quiet then
          $stderr.puts opts
        end
        $stderr.puts invalid
        exit 1
      end
    end

    @files = argv.dup

    finish

    if @write_options then
      write_options
      exit
    end

    self
  end

  ##
  # Don't display progress as we process the files

  def quiet
    @verbosity.zero?
  end

  ##
  # Set quietness to +bool+

  def quiet= bool
    @verbosity = bool ? 0 : 1
  end

  ##
  # Removes directories from +path+ that are outside the current directory

  def sanitize_path path
    require 'pathname'
    dot = Pathname.new('.').expand_path

    path.reject do |item|
      path = Pathname.new(item).expand_path
      is_reject = nil
      relative = nil
      begin
        relative = path.relative_path_from(dot).to_s
      rescue ArgumentError
        # On Windows, sometimes crosses different drive letters.
        is_reject = true
      else
        is_reject = relative.start_with? '..'
      end
      is_reject
    end
  end

  ##
  # Set up an output generator for the named +generator_name+.
  #
  # If the found generator responds to :setup_options it will be called with
  # the options instance.  This allows generators to add custom options or set
  # default options.

  def setup_generator generator_name = @generator_name
    @generator = @generators[generator_name]

    unless @generator then
      raise OptionParser::InvalidArgument,
            "Invalid output formatter #{generator_name}"
    end

    return if @generator_options.include? @generator

    @generator_name = generator_name
    @generator_options << @generator

    if @generator.respond_to? :setup_options then
      @option_parser ||= OptionParser.new
      @generator.setup_options self
    end
  end

  ##
  # Finds the template dir for +template+

  def template_dir_for template
    template_path = File.join 'rdoc', 'generator', 'template', template

    $LOAD_PATH.map do |path|
      File.join File.expand_path(path), template_path
    end.find do |dir|
      File.directory? dir
    end
  end

  # Sets the minimum visibility of a documented method.
  #
  # Accepts +:public+, +:protected+, +:private+, +:nodoc+, or +:all+.
  #
  # When +:all+ is passed, visibility is set to +:private+, similarly to
  # RDOCOPT="--all", see #visibility for more information.

  def visibility= visibility
    case visibility
    when :all
      @visibility = :private
    else
      @visibility = visibility
    end
  end

  ##
  # Displays a warning using Kernel#warn if we're being verbose

  def warn message
    super message if @verbosity > 1
  end

  ##
  # Writes the YAML file .rdoc_options to the current directory containing the
  # parsed options.

  def write_options
    RDoc.load_yaml

    File.open '.rdoc_options', 'w' do |io|
      io.set_encoding Encoding::UTF_8

      YAML.dump self, io
    end
  end

  ##
  # Loads options from .rdoc_options if the file exists, otherwise creates a
  # new RDoc::Options instance.

  def self.load_options
    options_file = File.expand_path '.rdoc_options'
    return RDoc::Options.new unless File.exist? options_file

    RDoc.load_yaml

    begin
      options = YAML.safe_load File.read('.rdoc_options'), permitted_classes: [RDoc::Options, Symbol]
    rescue Psych::SyntaxError
      raise RDoc::Error, "#{options_file} is not a valid rdoc options file"
    end

    return RDoc::Options.new unless options # Allow empty file.

    raise RDoc::Error, "#{options_file} is not a valid rdoc options file" unless
      RDoc::Options === options or Hash === options

    if Hash === options
      # Override the default values with the contents of YAML file.
      options = RDoc::Options.new options
    end

    options
  end

end
PK,"#[�at��)�)#gems/rdoc-6.4.1.1/lib/rdoc/stats.rbnu�[���# frozen_string_literal: true
##
# RDoc statistics collector which prints a summary and report of a project's
# documentation totals.

class RDoc::Stats

  include RDoc::Text

  ##
  # Output level for the coverage report

  attr_reader :coverage_level

  ##
  # Count of files parsed during parsing

  attr_reader :files_so_far

  ##
  # Total number of files found

  attr_reader :num_files

  ##
  # Creates a new Stats that will have +num_files+.  +verbosity+ defaults to 1
  # which will create an RDoc::Stats::Normal outputter.

  def initialize store, num_files, verbosity = 1
    @num_files = num_files
    @store     = store

    @coverage_level   = 0
    @doc_items        = nil
    @files_so_far     = 0
    @fully_documented = false
    @num_params       = 0
    @percent_doc      = nil
    @start            = Time.now
    @undoc_params     = 0

    @display = case verbosity
               when 0 then Quiet.new   num_files
               when 1 then Normal.new  num_files
               else        Verbose.new num_files
               end
  end

  ##
  # Records the parsing of an alias +as+.

  def add_alias as
    @display.print_alias as
  end

  ##
  # Records the parsing of an attribute +attribute+

  def add_attribute attribute
    @display.print_attribute attribute
  end

  ##
  # Records the parsing of a class +klass+

  def add_class klass
    @display.print_class klass
  end

  ##
  # Records the parsing of +constant+

  def add_constant constant
    @display.print_constant constant
  end

  ##
  # Records the parsing of +file+

  def add_file(file)
    @files_so_far += 1
    @display.print_file @files_so_far, file
  end

  ##
  # Records the parsing of +method+

  def add_method(method)
    @display.print_method method
  end

  ##
  # Records the parsing of a module +mod+

  def add_module(mod)
    @display.print_module mod
  end

  ##
  # Call this to mark the beginning of parsing for display purposes

  def begin_adding
    @display.begin_adding
  end

  ##
  # Calculates documentation totals and percentages for classes, modules,
  # constants, attributes and methods.

  def calculate
    return if @doc_items

    ucm = @store.unique_classes_and_modules

    classes = @store.unique_classes.reject { |cm| cm.full_name == 'Object' }

    constants = []
    ucm.each { |cm| constants.concat cm.constants }

    methods = []
    ucm.each { |cm| methods.concat cm.method_list }

    attributes = []
    ucm.each { |cm| attributes.concat cm.attributes }

    @num_attributes, @undoc_attributes = doc_stats attributes
    @num_classes,    @undoc_classes    = doc_stats classes
    @num_constants,  @undoc_constants  = doc_stats constants
    @num_methods,    @undoc_methods    = doc_stats methods
    @num_modules,    @undoc_modules    = doc_stats @store.unique_modules

    @num_items =
      @num_attributes +
      @num_classes +
      @num_constants +
      @num_methods +
      @num_modules +
      @num_params

    @undoc_items =
      @undoc_attributes +
      @undoc_classes +
      @undoc_constants +
      @undoc_methods +
      @undoc_modules +
      @undoc_params

    @doc_items = @num_items - @undoc_items
  end

  ##
  # Sets coverage report level.  Accepted values are:
  #
  # false or nil:: No report
  # 0:: Classes, modules, constants, attributes, methods
  # 1:: Level 0 + method parameters

  def coverage_level= level
    level = -1 unless level

    @coverage_level = level
  end

  ##
  # Returns the length and number of undocumented items in +collection+.

  def doc_stats collection
    visible = collection.select { |item| item.display? }
    [visible.length, visible.count { |item| not item.documented? }]
  end

  ##
  # Call this to mark the end of parsing for display purposes

  def done_adding
    @display.done_adding
  end

  ##
  # The documentation status of this project.  +true+ when 100%, +false+ when
  # less than 100% and +nil+ when unknown.
  #
  # Set by calling #calculate

  def fully_documented?
    @fully_documented
  end

  ##
  # A report that says you did a great job!

  def great_job
    report = RDoc::Markup::Document.new

    report << RDoc::Markup::Paragraph.new('100% documentation!')
    report << RDoc::Markup::Paragraph.new('Great Job!')

    report
  end

  ##
  # Calculates the percentage of items documented.

  def percent_doc
    return @percent_doc if @percent_doc

    @fully_documented = (@num_items - @doc_items) == 0

    @percent_doc = @doc_items.to_f / @num_items * 100 if @num_items.nonzero?
    @percent_doc ||= 0

    @percent_doc
  end

  ##
  # Returns a report on which items are not documented

  def report
    if @coverage_level > 0 then
      extend RDoc::Text
    end

    if @coverage_level.zero? then
      calculate

      return great_job if @num_items == @doc_items
    end

    ucm = @store.unique_classes_and_modules

    report = RDoc::Markup::Document.new
    report << RDoc::Markup::Paragraph.new('The following items are not documented:')
    report << RDoc::Markup::BlankLine.new

    ucm.sort.each do |cm|
      body = report_class_module(cm) {
        [
          report_constants(cm),
          report_attributes(cm),
          report_methods(cm),
        ].compact
      }

      report << body if body
    end

    if @coverage_level > 0 then
      calculate

      return great_job if @num_items == @doc_items
    end

    report
  end

  ##
  # Returns a report on undocumented attributes in ClassModule +cm+

  def report_attributes cm
    return if cm.attributes.empty?

    report = []

    cm.each_attribute do |attr|
      next if attr.documented?
      line = attr.line ? ":#{attr.line}" : nil
      report << "  #{attr.definition} :#{attr.name} # in file #{attr.file.full_name}#{line}\n"
      report << "\n"
    end

    report
  end

  ##
  # Returns a report on undocumented items in ClassModule +cm+

  def report_class_module cm
    return if cm.fully_documented? and @coverage_level.zero?
    return unless cm.display?

    report = RDoc::Markup::Document.new

    if cm.in_files.empty? then
      report << RDoc::Markup::Paragraph.new("#{cm.definition} is referenced but empty.")
      report << RDoc::Markup::Paragraph.new("It probably came from another project.  I'm sorry I'm holding it against you.")

      return report
    elsif cm.documented? then
      documented = true
      klass = RDoc::Markup::Verbatim.new("#{cm.definition} # is documented\n")
    else
      report << RDoc::Markup::Paragraph.new('In files:')

      list = RDoc::Markup::List.new :BULLET

      cm.in_files.each do |file|
        para = RDoc::Markup::Paragraph.new file.full_name
        list << RDoc::Markup::ListItem.new(nil, para)
      end

      report << list
      report << RDoc::Markup::BlankLine.new

      klass = RDoc::Markup::Verbatim.new("#{cm.definition}\n")
    end

    klass << "\n"

    body = yield.flatten # HACK remove #flatten

    if body.empty? then
      return if documented

      klass.parts.pop
    else
      klass.parts.concat body
    end

    klass << "end\n"

    report << klass

    report
  end

  ##
  # Returns a report on undocumented constants in ClassModule +cm+

  def report_constants cm
    return if cm.constants.empty?

    report = []

    cm.each_constant do |constant|
      # TODO constant aliases are listed in the summary but not reported
      # figure out what to do here
      next if constant.documented? || constant.is_alias_for

      line = constant.line ? ":#{constant.line}" : line
      report << "  # in file #{constant.file.full_name}#{line}\n"
      report << "  #{constant.name} = nil\n"
      report << "\n"
    end

    report
  end

  ##
  # Returns a report on undocumented methods in ClassModule +cm+

  def report_methods cm
    return if cm.method_list.empty?

    report = []

    cm.each_method do |method|
      next if method.documented? and @coverage_level.zero?

      if @coverage_level > 0 then
        params, undoc = undoc_params method

        @num_params += params

        unless undoc.empty? then
          @undoc_params += undoc.length

          undoc = undoc.map do |param| "+#{param}+" end
          param_report = "  # #{undoc.join ', '} is not documented\n"
        end
      end

      next if method.documented? and not param_report

      line = method.line ? ":#{method.line}" : nil
      scope = method.singleton ? 'self.' : nil

      report << "  # in file #{method.file.full_name}#{line}\n"
      report << param_report if param_report
      report << "  def #{scope}#{method.name}#{method.params}; end\n"
      report << "\n"
    end

    report
  end

  ##
  # Returns a summary of the collected statistics.

  def summary
    calculate

    num_width = [@num_files, @num_items].max.to_s.length
    undoc_width = [
      @undoc_attributes,
      @undoc_classes,
      @undoc_constants,
      @undoc_items,
      @undoc_methods,
      @undoc_modules,
      @undoc_params,
    ].max.to_s.length

    report = RDoc::Markup::Verbatim.new

    report << "Files:      %*d\n" % [num_width, @num_files]

    report << "\n"

    report << "Classes:    %*d (%*d undocumented)\n" % [
      num_width, @num_classes, undoc_width, @undoc_classes]
    report << "Modules:    %*d (%*d undocumented)\n" % [
      num_width, @num_modules, undoc_width, @undoc_modules]
    report << "Constants:  %*d (%*d undocumented)\n" % [
      num_width, @num_constants, undoc_width, @undoc_constants]
    report << "Attributes: %*d (%*d undocumented)\n" % [
      num_width, @num_attributes, undoc_width, @undoc_attributes]
    report << "Methods:    %*d (%*d undocumented)\n" % [
      num_width, @num_methods, undoc_width, @undoc_methods]
    report << "Parameters: %*d (%*d undocumented)\n" % [
      num_width, @num_params, undoc_width, @undoc_params] if
        @coverage_level > 0

    report << "\n"

    report << "Total:      %*d (%*d undocumented)\n" % [
      num_width, @num_items, undoc_width, @undoc_items]

    report << "%6.2f%% documented\n" % percent_doc
    report << "\n"
    report << "Elapsed: %0.1fs\n" % (Time.now - @start)

    RDoc::Markup::Document.new report
  end

  ##
  # Determines which parameters in +method+ were not documented.  Returns a
  # total parameter count and an Array of undocumented methods.

  def undoc_params method
    @formatter ||= RDoc::Markup::ToTtOnly.new

    params = method.param_list

    params = params.map { |param| param.gsub(/^\*\*?/, '') }

    return 0, [] if params.empty?

    document = parse method.comment

    tts = document.accept @formatter

    undoc = params - tts

    [params.length, undoc]
  end

  autoload :Quiet,   'rdoc/stats/quiet'
  autoload :Normal,  'rdoc/stats/normal'
  autoload :Verbose, 'rdoc/stats/verbose'

end

PK,"#[4[@D��"gems/rdoc-6.4.1.1/lib/rdoc/i18n.rbnu�[���# frozen_string_literal: true
##
# This module provides i18n related features.

module RDoc::I18n

  autoload :Locale, 'rdoc/i18n/locale'
  require_relative 'i18n/text'

end
PK,"#[�&“��%gems/rdoc-6.4.1.1/lib/rdoc/require.rbnu�[���# frozen_string_literal: true
##
# A file loaded by \#require

class RDoc::Require < RDoc::CodeObject

  ##
  # Name of the required file

  attr_accessor :name

  ##
  # Creates a new Require that loads +name+ with +comment+

  def initialize(name, comment)
    super()
    @name = name.gsub(/'|"/, "") #'
    @top_level = nil
    self.comment = comment
  end

  def inspect # :nodoc:
    "#<%s:0x%x require '%s' in %s>" % [
      self.class,
      object_id,
      @name,
      parent_file_name,
    ]
  end

  def to_s # :nodoc:
    "require #{name} in: #{parent}"
  end

  ##
  # The RDoc::TopLevel corresponding to this require, or +nil+ if not found.

  def top_level
    @top_level ||= begin
      tl = RDoc::TopLevel.all_files_hash[name + '.rb']

      if tl.nil? and RDoc::TopLevel.all_files.first.full_name =~ %r(^lib/) then
        # second chance
        tl = RDoc::TopLevel.all_files_hash['lib/' + name + '.rb']
      end

      tl
    end
  end

end

PK,"#[����#gems/rdoc-6.4.1.1/lib/rdoc/mixin.rbnu�[���# frozen_string_literal: true
##
# A Mixin adds features from a module into another context.  RDoc::Include and
# RDoc::Extend are both mixins.

class RDoc::Mixin < RDoc::CodeObject

  ##
  # Name of included module

  attr_accessor :name

  ##
  # Creates a new Mixin for +name+ with +comment+

  def initialize(name, comment)
    super()
    @name = name
    self.comment = comment
    @module = nil # cache for module if found
  end

  ##
  # Mixins are sorted by name

  def <=> other
    return unless self.class === other

    name <=> other.name
  end

  def == other # :nodoc:
    self.class === other and @name == other.name
  end

  alias eql? == # :nodoc:

  ##
  # Full name based on #module

  def full_name
    m = self.module
    RDoc::ClassModule === m ? m.full_name : @name
  end

  def hash # :nodoc:
    [@name, self.module].hash
  end

  def inspect # :nodoc:
    "#<%s:0x%x %s.%s %s>" % [
      self.class,
      object_id,
      parent_name, self.class.name.downcase, @name,
    ]
  end

  ##
  # Attempts to locate the included module object.  Returns the name if not
  # known.
  #
  # The scoping rules of Ruby to resolve the name of an included module are:
  # - first look into the children of the current context;
  # - if not found, look into the children of included modules,
  #   in reverse inclusion order;
  # - if still not found, go up the hierarchy of names.
  #
  # This method has <code>O(n!)</code> behavior when the module calling
  # include is referencing nonexistent modules.  Avoid calling #module until
  # after all the files are parsed.  This behavior is due to ruby's constant
  # lookup behavior.
  #
  # As of the beginning of October, 2011, no gem includes nonexistent modules.

  def module
    return @module if @module

    # search the current context
    return @name unless parent
    full_name = parent.child_name(@name)
    @module = @store.modules_hash[full_name]
    return @module if @module
    return @name if @name =~ /^::/

    # search the includes before this one, in reverse order
    searched = parent.includes.take_while { |i| i != self }.reverse
    searched.each do |i|
      inc = i.module
      next if String === inc
      full_name = inc.child_name(@name)
      @module = @store.modules_hash[full_name]
      return @module if @module
    end

    # go up the hierarchy of names
    up = parent.parent
    while up
      full_name = up.child_name(@name)
      @module = @store.modules_hash[full_name]
      return @module if @module
      up = up.parent
    end

    @name
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  def to_s # :nodoc:
    "#{self.class.name.downcase} #@name in: #{parent}"
  end

end

PK,"#[�$�yy%gems/rdoc-6.4.1.1/lib/rdoc/context.rbnu�[���# frozen_string_literal: true
require 'cgi'

##
# A Context is something that can hold modules, classes, methods, attributes,
# aliases, requires, and includes. Classes, modules, and files are all
# Contexts.

class RDoc::Context < RDoc::CodeObject

  include Comparable

  ##
  # Types of methods

  TYPES = %w[class instance]

  ##
  # If a context has these titles it will be sorted in this order.

  TOMDOC_TITLES = [nil, 'Public', 'Internal', 'Deprecated'] # :nodoc:
  TOMDOC_TITLES_SORT = TOMDOC_TITLES.sort_by { |title| title.to_s } # :nodoc:

  ##
  # Class/module aliases

  attr_reader :aliases

  ##
  # All attr* methods

  attr_reader :attributes

  ##
  # Block params to be used in the next MethodAttr parsed under this context

  attr_accessor :block_params

  ##
  # Constants defined

  attr_reader :constants

  ##
  # Sets the current documentation section of documentation

  attr_writer :current_section

  ##
  # Files this context is found in

  attr_reader :in_files

  ##
  # Modules this context includes

  attr_reader :includes

  ##
  # Modules this context is extended with

  attr_reader :extends

  ##
  # Methods defined in this context

  attr_reader :method_list

  ##
  # Name of this class excluding namespace.  See also full_name

  attr_reader :name

  ##
  # Files this context requires

  attr_reader :requires

  ##
  # Use this section for the next method, attribute or constant added.

  attr_accessor :temporary_section

  ##
  # Hash <tt>old_name => [aliases]</tt>, for aliases
  # that haven't (yet) been resolved to a method/attribute.
  # (Not to be confused with the aliases of the context.)

  attr_accessor :unmatched_alias_lists

  ##
  # Aliases that could not be resolved.

  attr_reader :external_aliases

  ##
  # Current visibility of this context

  attr_accessor :visibility

  ##
  # Current visibility of this line

  attr_writer :current_line_visibility

  ##
  # Hash of registered methods. Attributes are also registered here,
  # twice if they are RW.

  attr_reader :methods_hash

  ##
  # Params to be used in the next MethodAttr parsed under this context

  attr_accessor :params

  ##
  # Hash of registered constants.

  attr_reader :constants_hash

  ##
  # Creates an unnamed empty context with public current visibility

  def initialize
    super

    @in_files = []

    @name    ||= "unknown"
    @parent  = nil
    @visibility = :public

    @current_section = Section.new self, nil, nil
    @sections = { nil => @current_section }
    @temporary_section = nil

    @classes = {}
    @modules = {}

    initialize_methods_etc
  end

  ##
  # Sets the defaults for methods and so-forth

  def initialize_methods_etc
    @method_list = []
    @attributes  = []
    @aliases     = []
    @requires    = []
    @includes    = []
    @extends     = []
    @constants   = []
    @external_aliases = []
    @current_line_visibility = nil

    # This Hash maps a method name to a list of unmatched aliases (aliases of
    # a method not yet encountered).
    @unmatched_alias_lists = {}

    @methods_hash   = {}
    @constants_hash = {}

    @params = nil

    @store ||= nil
  end

  ##
  # Contexts are sorted by full_name

  def <=>(other)
    return nil unless RDoc::CodeObject === other

    full_name <=> other.full_name
  end

  ##
  # Adds an item of type +klass+ with the given +name+ and +comment+ to the
  # context.
  #
  # Currently only RDoc::Extend and RDoc::Include are supported.

  def add klass, name, comment
    if RDoc::Extend == klass then
      ext = RDoc::Extend.new name, comment
      add_extend ext
    elsif RDoc::Include == klass then
      incl = RDoc::Include.new name, comment
      add_include incl
    else
      raise NotImplementedError, "adding a #{klass} is not implemented"
    end
  end

  ##
  # Adds +an_alias+ that is automatically resolved

  def add_alias an_alias
    return an_alias unless @document_self

    method_attr = find_method(an_alias.old_name, an_alias.singleton) ||
                  find_attribute(an_alias.old_name, an_alias.singleton)

    if method_attr then
      method_attr.add_alias an_alias, self
    else
      add_to @external_aliases, an_alias
      unmatched_alias_list =
        @unmatched_alias_lists[an_alias.pretty_old_name] ||= []
      unmatched_alias_list.push an_alias
    end

    an_alias
  end

  ##
  # Adds +attribute+ if not already there. If it is (as method(s) or attribute),
  # updates the comment if it was empty.
  #
  # The attribute is registered only if it defines a new method.
  # For instance, <tt>attr_reader :foo</tt> will not be registered
  # if method +foo+ exists, but <tt>attr_accessor :foo</tt> will be registered
  # if method +foo+ exists, but <tt>foo=</tt> does not.

  def add_attribute attribute
    return attribute unless @document_self

    # mainly to check for redefinition of an attribute as a method
    # TODO find a policy for 'attr_reader :foo' + 'def foo=()'
    register = false

    key = nil

    if attribute.rw.index 'R' then
      key = attribute.pretty_name
      known = @methods_hash[key]

      if known then
        known.comment = attribute.comment if known.comment.empty?
      elsif registered = @methods_hash[attribute.pretty_name + '='] and
            RDoc::Attr === registered then
        registered.rw = 'RW'
      else
        @methods_hash[key] = attribute
        register = true
      end
    end

    if attribute.rw.index 'W' then
      key = attribute.pretty_name + '='
      known = @methods_hash[key]

      if known then
        known.comment = attribute.comment if known.comment.empty?
      elsif registered = @methods_hash[attribute.pretty_name] and
            RDoc::Attr === registered then
        registered.rw = 'RW'
      else
        @methods_hash[key] = attribute
        register = true
      end
    end

    if register then
      attribute.visibility = @visibility
      add_to @attributes, attribute
      resolve_aliases attribute
    end

    attribute
  end

  ##
  # Adds a class named +given_name+ with +superclass+.
  #
  # Both +given_name+ and +superclass+ may contain '::', and are
  # interpreted relative to the +self+ context. This allows handling correctly
  # examples like these:
  #   class RDoc::Gauntlet < Gauntlet
  #   module Mod
  #     class Object   # implies < ::Object
  #     class SubObject < Object  # this is _not_ ::Object
  #
  # Given <tt>class Container::Item</tt> RDoc assumes +Container+ is a module
  # unless it later sees <tt>class Container</tt>.  +add_class+ automatically
  # upgrades +given_name+ to a class in this case.

  def add_class class_type, given_name, superclass = '::Object'
    # superclass +nil+ is passed by the C parser in the following cases:
    # - registering Object in 1.8 (correct)
    # - registering BasicObject in 1.9 (correct)
    # - registering RubyVM in 1.9 in iseq.c (incorrect: < Object in vm.c)
    #
    # If we later find a superclass for a registered class with a nil
    # superclass, we must honor it.

    # find the name & enclosing context
    if given_name =~ /^:+(\w+)$/ then
      full_name = $1
      enclosing = top_level
      name = full_name.split(/:+/).last
    else
      full_name = child_name given_name

      if full_name =~ /^(.+)::(\w+)$/ then
        name = $2
        ename = $1
        enclosing = @store.classes_hash[ename] || @store.modules_hash[ename]
        # HACK: crashes in actionpack/lib/action_view/helpers/form_helper.rb (metaprogramming)
        unless enclosing then
          # try the given name at top level (will work for the above example)
          enclosing = @store.classes_hash[given_name] ||
                      @store.modules_hash[given_name]
          return enclosing if enclosing
          # not found: create the parent(s)
          names = ename.split('::')
          enclosing = self
          names.each do |n|
            enclosing = enclosing.classes_hash[n] ||
                        enclosing.modules_hash[n] ||
                        enclosing.add_module(RDoc::NormalModule, n)
          end
        end
      else
        name = full_name
        enclosing = self
      end
    end

    # fix up superclass
    if full_name == 'BasicObject' then
      superclass = nil
    elsif full_name == 'Object' then
      superclass = '::BasicObject'
    end

    # find the superclass full name
    if superclass then
      if superclass =~ /^:+/ then
        superclass = $' #'
      else
        if superclass =~ /^(\w+):+(.+)$/ then
          suffix = $2
          mod = find_module_named($1)
          superclass = mod.full_name + '::' + suffix if mod
        else
          mod = find_module_named(superclass)
          superclass = mod.full_name if mod
        end
      end

      # did we believe it was a module?
      mod = @store.modules_hash.delete superclass

      upgrade_to_class mod, RDoc::NormalClass, mod.parent if mod

      # e.g., Object < Object
      superclass = nil if superclass == full_name
    end

    klass = @store.classes_hash[full_name]

    if klass then
      # if TopLevel, it may not be registered in the classes:
      enclosing.classes_hash[name] = klass

      # update the superclass if needed
      if superclass then
        existing = klass.superclass
        existing = existing.full_name unless existing.is_a?(String) if existing
        if existing.nil? ||
           (existing == 'Object' && superclass != 'Object') then
          klass.superclass = superclass
        end
      end
    else
      # this is a new class
      mod = @store.modules_hash.delete full_name

      if mod then
        klass = upgrade_to_class mod, RDoc::NormalClass, enclosing

        klass.superclass = superclass unless superclass.nil?
      else
        klass = class_type.new name, superclass

        enclosing.add_class_or_module(klass, enclosing.classes_hash,
                                      @store.classes_hash)
      end
    end

    klass.parent = self

    klass
  end

  ##
  # Adds the class or module +mod+ to the modules or
  # classes Hash +self_hash+, and to +all_hash+ (either
  # <tt>TopLevel::modules_hash</tt> or <tt>TopLevel::classes_hash</tt>),
  # unless #done_documenting is +true+. Sets the #parent of +mod+
  # to +self+, and its #section to #current_section. Returns +mod+.

  def add_class_or_module mod, self_hash, all_hash
    mod.section = current_section # TODO declaring context? something is
                                  # wrong here...
    mod.parent = self
    mod.full_name = nil
    mod.store = @store

    unless @done_documenting then
      self_hash[mod.name] = mod
      # this must be done AFTER adding mod to its parent, so that the full
      # name is correct:
      all_hash[mod.full_name] = mod
      if @store.unmatched_constant_alias[mod.full_name] then
        to, file = @store.unmatched_constant_alias[mod.full_name]
        add_module_alias mod, mod.name, to, file
      end
    end

    mod
  end

  ##
  # Adds +constant+ if not already there. If it is, updates the comment,
  # value and/or is_alias_for of the known constant if they were empty/nil.

  def add_constant constant
    return constant unless @document_self

    # HACK: avoid duplicate 'PI' & 'E' in math.c (1.8.7 source code)
    # (this is a #ifdef: should be handled by the C parser)
    known = @constants_hash[constant.name]

    if known then
      known.comment = constant.comment if known.comment.empty?

      known.value = constant.value if
        known.value.nil? or known.value.strip.empty?

      known.is_alias_for ||= constant.is_alias_for
    else
      @constants_hash[constant.name] = constant
      add_to @constants, constant
    end

    constant
  end

  ##
  # Adds included module +include+ which should be an RDoc::Include

  def add_include include
    add_to @includes, include

    include
  end

  ##
  # Adds extension module +ext+ which should be an RDoc::Extend

  def add_extend ext
    add_to @extends, ext

    ext
  end

  ##
  # Adds +method+ if not already there. If it is (as method or attribute),
  # updates the comment if it was empty.

  def add_method method
    return method unless @document_self

    # HACK: avoid duplicate 'new' in io.c & struct.c (1.8.7 source code)
    key = method.pretty_name
    known = @methods_hash[key]

    if known then
      if @store then # otherwise we are loading
        known.comment = method.comment if known.comment.empty?
        previously = ", previously in #{known.file}" unless
          method.file == known.file
        @store.rdoc.options.warn \
          "Duplicate method #{known.full_name} in #{method.file}#{previously}"
      end
    else
      @methods_hash[key] = method
      if @current_line_visibility
        method.visibility, @current_line_visibility = @current_line_visibility, nil
      else
        method.visibility = @visibility
      end
      add_to @method_list, method
      resolve_aliases method
    end

    method
  end

  ##
  # Adds a module named +name+.  If RDoc already knows +name+ is a class then
  # that class is returned instead.  See also #add_class.

  def add_module(class_type, name)
    mod = @classes[name] || @modules[name]
    return mod if mod

    full_name = child_name name
    mod = @store.modules_hash[full_name] || class_type.new(name)

    add_class_or_module mod, @modules, @store.modules_hash
  end

  ##
  # Adds a module by +RDoc::NormalModule+ instance. See also #add_module.

  def add_module_by_normal_module(mod)
    add_class_or_module mod, @modules, @store.modules_hash
  end

  ##
  # Adds an alias from +from+ (a class or module) to +name+ which was defined
  # in +file+.

  def add_module_alias from, from_name, to, file
    return from if @done_documenting

    to_full_name = child_name to.name

    # if we already know this name, don't register an alias:
    # see the metaprogramming in lib/active_support/basic_object.rb,
    # where we already know BasicObject is a class when we find
    # BasicObject = BlankSlate
    return from if @store.find_class_or_module to_full_name

    unless from
      @store.unmatched_constant_alias[child_name(from_name)] = [to, file]
      return to
    end

    new_to = from.dup
    new_to.name = to.name
    new_to.full_name = nil

    if new_to.module? then
      @store.modules_hash[to_full_name] = new_to
      @modules[to.name] = new_to
    else
      @store.classes_hash[to_full_name] = new_to
      @classes[to.name] = new_to
    end

    # Registers a constant for this alias.  The constant value and comment
    # will be updated later, when the Ruby parser adds the constant
    const = RDoc::Constant.new to.name, nil, new_to.comment
    const.record_location file
    const.is_alias_for = from
    add_constant const

    new_to
  end

  ##
  # Adds +require+ to this context's top level

  def add_require(require)
    return require unless @document_self

    if RDoc::TopLevel === self then
      add_to @requires, require
    else
      parent.add_require require
    end
  end

  ##
  # Returns a section with +title+, creating it if it doesn't already exist.
  # +comment+ will be appended to the section's comment.
  #
  # A section with a +title+ of +nil+ will return the default section.
  #
  # See also RDoc::Context::Section

  def add_section title, comment = nil
    if section = @sections[title] then
      section.add_comment comment if comment
    else
      section = Section.new self, title, comment
      @sections[title] = section
    end

    section
  end

  ##
  # Adds +thing+ to the collection +array+

  def add_to array, thing
    array << thing if @document_self

    thing.parent  = self
    thing.store   = @store if @store
    thing.section = current_section
  end

  ##
  # Is there any content?
  #
  # This means any of: comment, aliases, methods, attributes, external
  # aliases, require, constant.
  #
  # Includes and extends are also checked unless <tt>includes == false</tt>.

  def any_content(includes = true)
    @any_content ||= !(
      @comment.empty? &&
      @method_list.empty? &&
      @attributes.empty? &&
      @aliases.empty? &&
      @external_aliases.empty? &&
      @requires.empty? &&
      @constants.empty?
    )
    @any_content || (includes && !(@includes + @extends).empty? )
  end

  ##
  # Creates the full name for a child with +name+

  def child_name name
    if name =~ /^:+/
      $'  #'
    elsif RDoc::TopLevel === self then
      name
    else
      "#{self.full_name}::#{name}"
    end
  end

  ##
  # Class attributes

  def class_attributes
    @class_attributes ||= attributes.select { |a| a.singleton }
  end

  ##
  # Class methods

  def class_method_list
    @class_method_list ||= method_list.select { |a| a.singleton }
  end

  ##
  # Array of classes in this context

  def classes
    @classes.values
  end

  ##
  # All classes and modules in this namespace

  def classes_and_modules
    classes + modules
  end

  ##
  # Hash of classes keyed by class name

  def classes_hash
    @classes
  end

  ##
  # The current documentation section that new items will be added to.  If
  # temporary_section is available it will be used.

  def current_section
    if section = @temporary_section then
      @temporary_section = nil
    else
      section = @current_section
    end

    section
  end

  ##
  # Is part of this thing was defined in +file+?

  def defined_in?(file)
    @in_files.include?(file)
  end

  def display(method_attr) # :nodoc:
    if method_attr.is_a? RDoc::Attr
      "#{method_attr.definition} #{method_attr.pretty_name}"
    else
      "method #{method_attr.pretty_name}"
    end
  end

  ##
  # Iterator for ancestors for duck-typing.  Does nothing.  See
  # RDoc::ClassModule#each_ancestor.
  #
  # This method exists to make it easy to work with Context subclasses that
  # aren't part of RDoc.

  def each_ancestor # :nodoc:
  end

  ##
  # Iterator for attributes

  def each_attribute # :yields: attribute
    @attributes.each { |a| yield a }
  end

  ##
  # Iterator for classes and modules

  def each_classmodule(&block) # :yields: module
    classes_and_modules.sort.each(&block)
  end

  ##
  # Iterator for constants

  def each_constant # :yields: constant
    @constants.each {|c| yield c}
  end

  ##
  # Iterator for included modules

  def each_include # :yields: include
    @includes.each do |i| yield i end
  end

  ##
  # Iterator for extension modules

  def each_extend # :yields: extend
    @extends.each do |e| yield e end
  end

  ##
  # Iterator for methods

  def each_method # :yields: method
    return enum_for __method__ unless block_given?

    @method_list.sort.each { |m| yield m }
  end

  ##
  # Iterator for each section's contents sorted by title.  The +section+, the
  # section's +constants+ and the sections +attributes+ are yielded.  The
  # +constants+ and +attributes+ collections are sorted.
  #
  # To retrieve methods in a section use #methods_by_type with the optional
  # +section+ parameter.
  #
  # NOTE: Do not edit collections yielded by this method

  def each_section # :yields: section, constants, attributes
    return enum_for __method__ unless block_given?

    constants  = @constants.group_by  do |constant|  constant.section end
    attributes = @attributes.group_by do |attribute| attribute.section end

    constants.default  = []
    attributes.default = []

    sort_sections.each do |section|
      yield section, constants[section].select(&:display?).sort, attributes[section].select(&:display?).sort
    end
  end

  ##
  # Finds an attribute +name+ with singleton value +singleton+.

  def find_attribute(name, singleton)
    name = $1 if name =~ /^(.*)=$/
    @attributes.find { |a| a.name == name && a.singleton == singleton }
  end

  ##
  # Finds an attribute with +name+ in this context

  def find_attribute_named(name)
    case name
    when /\A#/ then
      find_attribute name[1..-1], false
    when /\A::/ then
      find_attribute name[2..-1], true
    else
      @attributes.find { |a| a.name == name }
    end
  end

  ##
  # Finds a class method with +name+ in this context

  def find_class_method_named(name)
    @method_list.find { |meth| meth.singleton && meth.name == name }
  end

  ##
  # Finds a constant with +name+ in this context

  def find_constant_named(name)
    @constants.find do |m|
      m.name == name || m.full_name == name
    end
  end

  ##
  # Find a module at a higher scope

  def find_enclosing_module_named(name)
    parent && parent.find_module_named(name)
  end

  ##
  # Finds an external alias +name+ with singleton value +singleton+.

  def find_external_alias(name, singleton)
    @external_aliases.find { |m| m.name == name && m.singleton == singleton }
  end

  ##
  # Finds an external alias with +name+ in this context

  def find_external_alias_named(name)
    case name
    when /\A#/ then
      find_external_alias name[1..-1], false
    when /\A::/ then
      find_external_alias name[2..-1], true
    else
      @external_aliases.find { |a| a.name == name }
    end
  end

  ##
  # Finds a file with +name+ in this context

  def find_file_named name
    @store.find_file_named name
  end

  ##
  # Finds an instance method with +name+ in this context

  def find_instance_method_named(name)
    @method_list.find { |meth| !meth.singleton && meth.name == name }
  end

  ##
  # Finds a method, constant, attribute, external alias, module or file
  # named +symbol+ in this context.

  def find_local_symbol(symbol)
    find_method_named(symbol) or
    find_constant_named(symbol) or
    find_attribute_named(symbol) or
    find_external_alias_named(symbol) or
    find_module_named(symbol) or
    find_file_named(symbol)
  end

  ##
  # Finds a method named +name+ with singleton value +singleton+.

  def find_method(name, singleton)
    @method_list.find { |m|
      if m.singleton
        m.name == name && m.singleton == singleton
      else
        m.name == name && !m.singleton && !singleton
      end
    }
  end

  ##
  # Finds a instance or module method with +name+ in this context

  def find_method_named(name)
    case name
    when /\A#/ then
      find_method name[1..-1], false
    when /\A::/ then
      find_method name[2..-1], true
    else
      @method_list.find { |meth| meth.name == name }
    end
  end

  ##
  # Find a module with +name+ using ruby's scoping rules

  def find_module_named(name)
    res = @modules[name] || @classes[name]
    return res if res
    return self if self.name == name
    find_enclosing_module_named name
  end

  ##
  # Look up +symbol+, first as a module, then as a local symbol.

  def find_symbol(symbol)
    find_symbol_module(symbol) || find_local_symbol(symbol)
  end

  ##
  # Look up a module named +symbol+.

  def find_symbol_module(symbol)
    result = nil

    # look for a class or module 'symbol'
    case symbol
    when /^::/ then
      result = @store.find_class_or_module symbol
    when /^(\w+):+(.+)$/
      suffix = $2
      top = $1
      searched = self
      while searched do
        mod = searched.find_module_named(top)
        break unless mod
        result = @store.find_class_or_module "#{mod.full_name}::#{suffix}"
        break if result || searched.is_a?(RDoc::TopLevel)
        searched = searched.parent
      end
    else
      searched = self
      while searched do
        result = searched.find_module_named(symbol)
        break if result || searched.is_a?(RDoc::TopLevel)
        searched = searched.parent
      end
    end

    result
  end

  ##
  # The full name for this context.  This method is overridden by subclasses.

  def full_name
    '(unknown)'
  end

  ##
  # Does this context and its methods and constants all have documentation?
  #
  # (Yes, fully documented doesn't mean everything.)

  def fully_documented?
    documented? and
      attributes.all? { |a| a.documented? } and
      method_list.all? { |m| m.documented? } and
      constants.all? { |c| c.documented? }
  end

  ##
  # URL for this with a +prefix+

  def http_url(prefix)
    path = name_for_path
    path = path.gsub(/<<\s*(\w*)/, 'from-\1') if path =~ /<</
    path = [prefix] + path.split('::')

    File.join(*path.compact) + '.html'
  end

  ##
  # Instance attributes

  def instance_attributes
    @instance_attributes ||= attributes.reject { |a| a.singleton }
  end

  ##
  # Instance methods

  def instance_methods
    @instance_methods ||= method_list.reject { |a| a.singleton }
  end

  ##
  # Instance methods
  #--
  # TODO remove this later

  def instance_method_list
    warn '#instance_method_list is obsoleted, please use #instance_methods'
    @instance_methods ||= method_list.reject { |a| a.singleton }
  end

  ##
  # Breaks method_list into a nested hash by type (<tt>'class'</tt> or
  # <tt>'instance'</tt>) and visibility (+:public+, +:protected+, +:private+).
  #
  # If +section+ is provided only methods in that RDoc::Context::Section will
  # be returned.

  def methods_by_type section = nil
    methods = {}

    TYPES.each do |type|
      visibilities = {}
      RDoc::VISIBILITIES.each do |vis|
        visibilities[vis] = []
      end

      methods[type] = visibilities
    end

    each_method do |method|
      next if section and not method.section == section
      methods[method.type][method.visibility] << method
    end

    methods
  end

  ##
  # Yields AnyMethod and Attr entries matching the list of names in +methods+.

  def methods_matching(methods, singleton = false, &block)
    (@method_list + @attributes).each do |m|
      yield m if methods.include?(m.name) and m.singleton == singleton
    end

    each_ancestor do |parent|
      parent.methods_matching(methods, singleton, &block)
    end
  end

  ##
  # Array of modules in this context

  def modules
    @modules.values
  end

  ##
  # Hash of modules keyed by module name

  def modules_hash
    @modules
  end

  ##
  # Name to use to generate the url.
  # <tt>#full_name</tt> by default.

  def name_for_path
    full_name
  end

  ##
  # Changes the visibility for new methods to +visibility+

  def ongoing_visibility=(visibility)
    @visibility = visibility
  end

  ##
  # Record +top_level+ as a file +self+ is in.

  def record_location(top_level)
    @in_files << top_level unless @in_files.include?(top_level)
  end

  ##
  # Should we remove this context from the documentation?
  #
  # The answer is yes if:
  # * #received_nodoc is +true+
  # * #any_content is +false+ (not counting includes)
  # * All #includes are modules (not a string), and their module has
  #   <tt>#remove_from_documentation? == true</tt>
  # * All classes and modules have <tt>#remove_from_documentation? == true</tt>

  def remove_from_documentation?
    @remove_from_documentation ||=
      @received_nodoc &&
      !any_content(false) &&
      @includes.all? { |i| !i.module.is_a?(String) && i.module.remove_from_documentation? } &&
      classes_and_modules.all? { |cm| cm.remove_from_documentation? }
  end

  ##
  # Removes methods and attributes with a visibility less than +min_visibility+.
  #--
  # TODO mark the visibility of attributes in the template (if not public?)

  def remove_invisible min_visibility
    return if [:private, :nodoc].include? min_visibility
    remove_invisible_in @method_list, min_visibility
    remove_invisible_in @attributes, min_visibility
    remove_invisible_in @constants, min_visibility
  end

  ##
  # Only called when min_visibility == :public or :private

  def remove_invisible_in array, min_visibility # :nodoc:
    if min_visibility == :public then
      array.reject! { |e|
        e.visibility != :public and not e.force_documentation
      }
    else
      array.reject! { |e|
        e.visibility == :private and not e.force_documentation
      }
    end
  end

  ##
  # Tries to resolve unmatched aliases when a method or attribute has just
  # been added.

  def resolve_aliases added
    # resolve any pending unmatched aliases
    key = added.pretty_name
    unmatched_alias_list = @unmatched_alias_lists[key]
    return unless unmatched_alias_list
    unmatched_alias_list.each do |unmatched_alias|
      added.add_alias unmatched_alias, self
      @external_aliases.delete unmatched_alias
    end
    @unmatched_alias_lists.delete key
  end

  ##
  # Returns RDoc::Context::Section objects referenced in this context for use
  # in a table of contents.

  def section_contents
    used_sections = {}

    each_method do |method|
      next unless method.display?

      used_sections[method.section] = true
    end

    # order found sections
    sections = sort_sections.select do |section|
      used_sections[section]
    end

    # only the default section is used
    return [] if
      sections.length == 1 and not sections.first.title

    sections
  end

  ##
  # Sections in this context

  def sections
    @sections.values
  end

  def sections_hash # :nodoc:
    @sections
  end

  ##
  # Sets the current section to a section with +title+.  See also #add_section

  def set_current_section title, comment
    @current_section = add_section title, comment
  end

  ##
  # Given an array +methods+ of method names, set the visibility of each to
  # +visibility+

  def set_visibility_for(methods, visibility, singleton = false)
    methods_matching methods, singleton do |m|
      m.visibility = visibility
    end
  end

  ##
  # Given an array +names+ of constants, set the visibility of each constant to
  # +visibility+

  def set_constant_visibility_for(names, visibility)
    names.each do |name|
      constant = @constants_hash[name] or next
      constant.visibility = visibility
    end
  end

  ##
  # Sorts sections alphabetically (default) or in TomDoc fashion (none,
  # Public, Internal, Deprecated)

  def sort_sections
    titles = @sections.map { |title, _| title }

    if titles.length > 1 and
       TOMDOC_TITLES_SORT ==
         (titles | TOMDOC_TITLES).sort_by { |title| title.to_s } then
      @sections.values_at(*TOMDOC_TITLES).compact
    else
      @sections.sort_by { |title, _|
        title.to_s
      }.map { |_, section|
        section
      }
    end
  end

  def to_s # :nodoc:
    "#{self.class.name} #{self.full_name}"
  end

  ##
  # Return the TopLevel that owns us
  #--
  # FIXME we can be 'owned' by several TopLevel (see #record_location &
  # #in_files)

  def top_level
    return @top_level if defined? @top_level
    @top_level = self
    @top_level = @top_level.parent until RDoc::TopLevel === @top_level
    @top_level
  end

  ##
  # Upgrades NormalModule +mod+ in +enclosing+ to a +class_type+

  def upgrade_to_class mod, class_type, enclosing
    enclosing.modules_hash.delete mod.name

    klass = RDoc::ClassModule.from_module class_type, mod
    klass.store = @store

    # if it was there, then we keep it even if done_documenting
    @store.classes_hash[mod.full_name] = klass
    enclosing.classes_hash[mod.name]   = klass

    klass
  end

  autoload :Section, 'rdoc/context/section'

end
PK,"#[n��=gems/rdoc-6.4.1.1/lib/rdoc/generator/pot/message_extractor.rbnu�[���# frozen_string_literal: true
##
# Extracts message from RDoc::Store

class RDoc::Generator::POT::MessageExtractor

  ##
  # Creates a message extractor for +store+.

  def initialize store
    @store = store
    @po = RDoc::Generator::POT::PO.new
  end

  ##
  # Extracts messages from +store+, stores them into
  # RDoc::Generator::POT::PO and returns it.

  def extract
    @store.all_classes_and_modules.each do |klass|
      extract_from_klass(klass)
    end
    @po
  end

  private

  def extract_from_klass klass
    extract_text(klass.comment_location, klass.full_name)

    klass.each_section do |section, constants, attributes|
      extract_text(section.title ,"#{klass.full_name}: section title")
      section.comments.each do |comment|
        extract_text(comment, "#{klass.full_name}: #{section.title}")
      end
    end

    klass.each_constant do |constant|
      extract_text(constant.comment, constant.full_name)
    end

    klass.each_attribute do |attribute|
      extract_text(attribute.comment, attribute.full_name)
    end

    klass.each_method do |method|
      extract_text(method.comment, method.full_name)
    end
  end

  def extract_text text, comment, location = nil
    return if text.nil?

    options = {
      :extracted_comment => comment,
      :references => [location].compact,
    }
    i18n_text = RDoc::I18n::Text.new(text)
    i18n_text.extract_messages do |part|
      @po.add(entry(part[:paragraph], options))
    end
  end

  def entry msgid, options
    RDoc::Generator::POT::POEntry.new(msgid, options)
  end

end
PK,"#[�jl{��4gems/rdoc-6.4.1.1/lib/rdoc/generator/pot/po_entry.rbnu�[���# frozen_string_literal: true
##
# A PO entry in PO

class RDoc::Generator::POT::POEntry

  # The msgid content
  attr_reader :msgid

  # The msgstr content
  attr_reader :msgstr

  # The comment content created by translator (PO editor)
  attr_reader :translator_comment

  # The comment content extracted from source file
  attr_reader :extracted_comment

  # The locations where the PO entry is extracted
  attr_reader :references

  # The flags of the PO entry
  attr_reader :flags

  ##
  # Creates a PO entry for +msgid+. Other valus can be specified by
  # +options+.

  def initialize msgid, options = {}
    @msgid = msgid
    @msgstr = options[:msgstr] || ""
    @translator_comment = options[:translator_comment]
    @extracted_comment = options[:extracted_comment]
    @references = options[:references] || []
    @flags = options[:flags] || []
  end

  ##
  # Returns the PO entry in PO format.

  def to_s
    entry = ''
    entry += format_translator_comment
    entry += format_extracted_comment
    entry += format_references
    entry += format_flags
    entry += <<-ENTRY
msgid #{format_message(@msgid)}
msgstr #{format_message(@msgstr)}
    ENTRY
  end

  ##
  # Merges the PO entry with +other_entry+.

  def merge other_entry
    options = {
      :extracted_comment  => merge_string(@extracted_comment,
                                          other_entry.extracted_comment),
      :translator_comment => merge_string(@translator_comment,
                                          other_entry.translator_comment),
      :references         => merge_array(@references,
                                         other_entry.references),
      :flags              => merge_array(@flags,
                                         other_entry.flags),
    }
    self.class.new(@msgid, options)
  end

  private

  def format_comment mark, comment
    return '' unless comment
    return '' if comment.empty?

    formatted_comment = ''
    comment.each_line do |line|
      formatted_comment += "#{mark} #{line}"
    end
    formatted_comment += "\n" unless formatted_comment.end_with?("\n")
    formatted_comment
  end

  def format_translator_comment
    format_comment('#', @translator_comment)
  end

  def format_extracted_comment
    format_comment('#.', @extracted_comment)
  end

  def format_references
    return '' if @references.empty?

    formatted_references = ''
    @references.sort.each do |file, line|
      formatted_references += "\#: #{file}:#{line}\n"
    end
    formatted_references
  end

  def format_flags
    return '' if @flags.empty?

    formatted_flags = flags.join(",")
    "\#, #{formatted_flags}\n"
  end

  def format_message message
    return "\"#{escape(message)}\"" unless message.include?("\n")

    formatted_message = '""'
    message.each_line do |line|
      formatted_message += "\n"
      formatted_message += "\"#{escape(line)}\""
    end
    formatted_message
  end

  def escape string
    string.gsub(/["\\\t\n]/) do |special_character|
      case special_character
      when "\t"
        "\\t"
      when "\n"
        "\\n"
      else
        "\\#{special_character}"
      end
    end
  end

  def merge_string string1, string2
    [string1, string2].compact.join("\n")
  end

  def merge_array array1, array2
      (array1 + array2).uniq
  end

end
PK,"#[��.gems/rdoc-6.4.1.1/lib/rdoc/generator/pot/po.rbnu�[���# frozen_string_literal: true
##
# Generates a PO format text

class RDoc::Generator::POT::PO

  ##
  # Creates an object that represents PO format.

  def initialize
    @entries = {}
    add_header
  end

  ##
  # Adds a PO entry to the PO.

  def add entry
    existing_entry = @entries[entry.msgid]
    if existing_entry
      entry = existing_entry.merge(entry)
    end
    @entries[entry.msgid] = entry
  end

  ##
  # Returns PO format text for the PO.

  def to_s
    po = ''
    sort_entries.each do |entry|
      po += "\n" unless po.empty?
      po += entry.to_s
    end
    po
  end

  private

  def add_header
    add(header_entry)
  end

  def header_entry
    comment = <<-COMMENT
SOME DESCRIPTIVE TITLE.
Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
This file is distributed under the same license as the PACKAGE package.
FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    COMMENT

    content = <<-CONTENT
Project-Id-Version: PACKAGE VERSEION
Report-Msgid-Bugs-To:
PO-Revision-Date: YEAR-MO_DA HO:MI+ZONE
Last-Translator: FULL NAME <EMAIL@ADDRESS>
Language-Team: LANGUAGE <LL@li.org>
Language:
MIME-Version: 1.0
Content-Type: text/plain; charset=CHARSET
Content-Transfer-Encoding: 8bit
Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;
    CONTENT

    options = {
      :msgstr => content,
      :translator_comment => comment,
      :flags => ['fuzzy'],
    }
    RDoc::Generator::POT::POEntry.new('', options)
  end

  def sort_entries
    headers, messages = @entries.values.partition do |entry|
      entry.msgid.empty?
    end
    # TODO: sort by location
    sorted_messages = messages.sort_by do |entry|
      entry.msgid
    end
    headers + sorted_messages
  end

end
PK,"#[&���+gems/rdoc-6.4.1.1/lib/rdoc/generator/pot.rbnu�[���# frozen_string_literal: true
##
# Generates a POT file.
#
# Here is a translator work flow with the generator.
#
# == Create .pot
#
# You create .pot file by pot formatter:
#
#   % rdoc --format pot
#
# It generates doc/rdoc.pot.
#
# == Create .po
#
# You create .po file from doc/rdoc.pot. This operation is needed only
# the first time. This work flow assumes that you are a translator
# for Japanese.
#
# You create locale/ja/rdoc.po from doc/rdoc.pot. You can use msginit
# provided by GNU gettext or rmsginit provided by gettext gem. This
# work flow uses gettext gem because it is more portable than GNU
# gettext for Rubyists. Gettext gem is implemented by pure Ruby.
#
#   % gem install gettext
#   % mkdir -p locale/ja
#   % rmsginit --input doc/rdoc.pot --output locale/ja/rdoc.po --locale ja
#
# Translate messages in .po
#
# You translate messages in .po by a PO file editor. po-mode.el exists
# for Emacs users. There are some GUI tools such as GTranslator.
# There are some Web services such as POEditor and Tansifex. You can
# edit by your favorite text editor because .po is a text file.
# Generate localized documentation
#
# You can generate localized documentation with locale/ja/rdoc.po:
#
#   % rdoc --locale ja
#
# You can find documentation in Japanese in doc/. Yay!
#
# == Update translation
#
# You need to update translation when your application is added or
# modified messages.
#
# You can update .po by the following command lines:
#
#   % rdoc --format pot
#   % rmsgmerge --update locale/ja/rdoc.po doc/rdoc.pot
#
# You edit locale/ja/rdoc.po to translate new messages.

class RDoc::Generator::POT

  RDoc::RDoc.add_generator self

  ##
  # Description of this generator

  DESCRIPTION = 'creates .pot file'

  ##
  # Set up a new .pot generator

  def initialize store, options #:not-new:
    @options    = options
    @store      = store
  end

  ##
  # Writes .pot to disk.

  def generate
    po = extract_messages
    pot_path = 'rdoc.pot'
    File.open(pot_path, "w") do |pot|
      pot.print(po.to_s)
    end
  end

  def class_dir
    nil
  end

  private
  def extract_messages
    extractor = MessageExtractor.new(@store)
    extractor.extract
  end

  require_relative 'pot/message_extractor'
  require_relative 'pot/po'
  require_relative 'pot/po_entry'

end
PK,"#[��r�
�
Igems/rdoc-6.4.1.1/lib/rdoc/generator/template/json_index/js/navigation.jsnu�[���/*
 * Navigation allows movement using the arrow keys through the search results.
 *
 * When using this library you will need to set scrollIntoView to the
 * appropriate function for your layout.  Use scrollInWindow if the container
 * is not scrollable and scrollInElement if the container is a separate
 * scrolling region.
 */
Navigation = new function() {
  this.initNavigation = function() {
    var _this = this;

    document.addEventListener('keydown', function(e) {
      _this.onkeydown(e);
    });

    this.navigationActive = true;
  }

  this.setNavigationActive = function(state) {
    this.navigationActive = state;
  }

  this.onkeydown = function(e) {
    if (!this.navigationActive) return;
    switch(e.keyCode) {
      case 37: //Event.KEY_LEFT:
        if (this.moveLeft()) e.preventDefault();
        break;
      case 38: //Event.KEY_UP:
        if (e.keyCode == 38 || e.ctrlKey) {
          if (this.moveUp()) e.preventDefault();
        }
        break;
      case 39: //Event.KEY_RIGHT:
        if (this.moveRight()) e.preventDefault();
        break;
      case 40: //Event.KEY_DOWN:
        if (e.keyCode == 40 || e.ctrlKey) {
          if (this.moveDown()) e.preventDefault();
        }
        break;
      case 13: //Event.KEY_RETURN:
        if (this.current) e.preventDefault();
        this.select(this.current);
        break;
    }
    if (e.ctrlKey && e.shiftKey) this.select(this.current);
  }

  this.moveRight = function() {
  }

  this.moveLeft = function() {
  }

  this.move = function(isDown) {
  }

  this.moveUp = function() {
    return this.move(false);
  }

  this.moveDown = function() {
    return this.move(true);
  }

  /*
   * Scrolls to the given element in the scrollable element view.
   */
  this.scrollInElement = function(element, view) {
    var offset, viewHeight, viewScroll, height;
    offset = element.offsetTop;
    height = element.offsetHeight;
    viewHeight = view.offsetHeight;
    viewScroll = view.scrollTop;

    if (offset - viewScroll + height > viewHeight) {
      view.scrollTop = offset - viewHeight + height;
    }
    if (offset < viewScroll) {
      view.scrollTop = offset;
    }
  }

  /*
   * Scrolls to the given element in the window.  The second argument is
   * ignored
   */
  this.scrollInWindow = function(element, ignored) {
    var offset, viewHeight, viewScroll, height;
    offset = element.offsetTop;
    height = element.offsetHeight;
    viewHeight = window.innerHeight;
    viewScroll = window.scrollY;

    if (offset - viewScroll + height > viewHeight) {
      window.scrollTo(window.scrollX, offset - viewHeight + height);
    }
    if (offset < viewScroll) {
      window.scrollTo(window.scrollX, offset);
    }
  }
}

PK,"#[P�^���Ggems/rdoc-6.4.1.1/lib/rdoc/generator/template/json_index/js/searcher.jsnu�[���Searcher = function(data) {
  this.data = data;
  this.handlers = [];
}

Searcher.prototype = new function() {
  // search is performed in chunks of 1000 for non-blocking user input
  var CHUNK_SIZE = 1000;
  // do not try to find more than 100 results
  var MAX_RESULTS = 100;
  var huid = 1;
  var suid = 1;
  var runs = 0;

  this.find = function(query) {
    var queries = splitQuery(query);
    var regexps = buildRegexps(queries);
    var highlighters = buildHilighters(queries);
    var state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++};
    var _this = this;

    this.currentSuid = state.n;

    if (!query) return;

    var run = function() {
      // stop current search thread if new search started
      if (state.n != _this.currentSuid) return;

      var results =
        performSearch(_this.data, regexps, queries, highlighters, state);
      var hasMore = (state.limit > 0 && state.pass < 4);

      triggerResults.call(_this, results, !hasMore);
      if (hasMore) {
        setTimeout(run, 2);
      }
      runs++;
    };
    runs = 0;

    // start search thread
    run();
  }

  /*  ----- Events ------  */
  this.ready = function(fn) {
    fn.huid = huid;
    this.handlers.push(fn);
  }

  /*  ----- Utilities ------  */
  function splitQuery(query) {
    return query.split(/(\s+|::?|\(\)?)/).filter(function(string) {
      return string.match(/\S/);
    });
  }

  function buildRegexps(queries) {
    return queries.map(function(query) {
      return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i');
    });
  }

  function buildHilighters(queries) {
    return queries.map(function(query) {
      return query.split('').map(function(l, i) {
        return '\u0001$' + (i*2+1) + '\u0002$' + (i*2+2);
      }).join('');
    });
  }

  // function longMatchRegexp(index, longIndex, regexps) {
  //     for (var i = regexps.length - 1; i >= 0; i--){
  //         if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) return false;
  //     };
  //     return true;
  // }


  /*  ----- Mathchers ------  */

  /*
   * This record matches if the index starts with queries[0] and the record
   * matches all of the regexps
   */
  function matchPassBeginning(index, longIndex, queries, regexps) {
    if (index.indexOf(queries[0]) != 0) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }

  /*
   * This record matches if the longIndex starts with queries[0] and the
   * longIndex matches all of the regexps
   */
  function matchPassLongIndex(index, longIndex, queries, regexps) {
    if (longIndex.indexOf(queries[0]) != 0) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }

  /*
   * This record matches if the index contains queries[0] and the record
   * matches all of the regexps
   */
  function matchPassContains(index, longIndex, queries, regexps) {
    if (index.indexOf(queries[0]) == -1) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }

  /*
   * This record matches if regexps[0] matches the index and the record
   * matches all of the regexps
   */
  function matchPassRegexp(index, longIndex, queries, regexps) {
    if (!index.match(regexps[0])) return false;
    for (var i=1, l = regexps.length; i < l; i++) {
      if (!index.match(regexps[i]) && !longIndex.match(regexps[i]))
        return false;
    };
    return true;
  }


  /*  ----- Highlighters ------  */
  function highlightRegexp(info, queries, regexps, highlighters) {
    var result = createResult(info);
    for (var i=0, l = regexps.length; i < l; i++) {
      result.title = result.title.replace(regexps[i], highlighters[i]);
      result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
    };
    return result;
  }

  function hltSubstring(string, pos, length) {
    return string.substring(0, pos) + '\u0001' + string.substring(pos, pos + length) + '\u0002' + string.substring(pos + length);
  }

  function highlightQuery(info, queries, regexps, highlighters) {
    var result = createResult(info);
    var pos = 0;
    var lcTitle = result.title.toLowerCase();

    pos = lcTitle.indexOf(queries[0]);
    if (pos != -1) {
      result.title = hltSubstring(result.title, pos, queries[0].length);
    }

    result.namespace = result.namespace.replace(regexps[0], highlighters[0]);
    for (var i=1, l = regexps.length; i < l; i++) {
      result.title = result.title.replace(regexps[i], highlighters[i]);
      result.namespace = result.namespace.replace(regexps[i], highlighters[i]);
    };
    return result;
  }

  function createResult(info) {
    var result = {};
    result.title = info[0];
    result.namespace = info[1];
    result.path = info[2];
    result.params = info[3];
    result.snippet = info[4];
    result.badge = info[6];
    return result;
  }

  /*  ----- Searching ------  */
  function performSearch(data, regexps, queries, highlighters, state) {
    var searchIndex = data.searchIndex;
    var longSearchIndex = data.longSearchIndex;
    var info = data.info;
    var result = [];
    var i = state.from;
    var l = searchIndex.length;
    var togo = CHUNK_SIZE;
    var matchFunc, hltFunc;

    while (state.pass < 4 && state.limit > 0 && togo > 0) {
      if (state.pass == 0) {
        matchFunc = matchPassBeginning;
        hltFunc = highlightQuery;
      } else if (state.pass == 1) {
        matchFunc = matchPassLongIndex;
        hltFunc = highlightQuery;
      } else if (state.pass == 2) {
        matchFunc = matchPassContains;
        hltFunc = highlightQuery;
      } else if (state.pass == 3) {
        matchFunc = matchPassRegexp;
        hltFunc = highlightRegexp;
      }

      for (; togo > 0 && i < l && state.limit > 0; i++, togo--) {
        if (info[i].n == state.n) continue;
        if (matchFunc(searchIndex[i], longSearchIndex[i], queries, regexps)) {
          info[i].n = state.n;
          result.push(hltFunc(info[i], queries, regexps, highlighters));
          state.limit--;
        }
      };
      if (searchIndex.length <= i) {
        state.pass++;
        i = state.from = 0;
      } else {
        state.from = i;
      }
    }
    return result;
  }

  function triggerResults(results, isLast) {
    this.handlers.forEach(function(fn) {
      fn.call(this, results, isLast)
    });
  }
}

PK,"#[^��Wgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtmlnu�[���<%- comment = if current.respond_to? :comment_location then
               current.comment_location
             else
               current.comment
             end
   table = current.parse(comment).table_of_contents

   if table.length > 1 then %>
<div class="nav-section">
  <h3>Table of Contents</h3>

  <ul class="link-list" role="directory">
<%-   table.each do |heading| -%>
    <li><a href="#<%= heading.label current %>"><%= heading.plain_html %></a>
<%-   end -%>
  </ul>
</div>
<%- end -%>
PK,"#[��>�q�qKgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfnu�[���GPOS�jN�K�GSUBV.TL�OS/2�8�M�`cmapRԟ�N@�cvt &�7g|8fpgm�zAg�	�gaspgtglyf�i�S(��head�DeJ޼6hheaix��$hmtxESvJ�Tkern�2���ll�locaK�p�PP,maxp>
�R| name�
U�R�:post:�\�c��prep�x9�qH�
0JDFLTlatn����kernkernJnv�$R�
�^�	h
B
l�&��rj����Z���j��L��*|�DV�:�� �!.!�##L#�$4$~%�&J'$'�(�)�*�+f+�,6,�-�.(.�/t/�/�0:0|2"2�33T3�3�4&4l4�55b5�66L6�6�7B7�7�888�9d9�9�:&:�:�;@<�=�>j?,?�@hA�B�CzD�E�F�G*G�HfI�K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��VK	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��k7	��
7
7�G���G������"<#��$��&��*��-�o2��4��D��F��G��H��I��J�{P��Q��R��S��T��U��V��W��X��Y��[��\��]��l7m��o��r7tFuFw��y��{F|7}���������������������������������������������������������������������������������������������������������������������������������������7�7�G�7�7�G����7���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V
�em�eo�ey�e}�e�e�e�e�e�e)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������4	���L�L������"$��-�.F��G��H��P��Q��R��S��T��U��X��w�������������������������������������������������������������������������������������L�L���	��������$��������������������������������1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������I��
��
��4�$4"��#��&��*��2��4��7�[9�V:�y<�=?�VF��G��H��R��T��Y��Z��\��l��m�$o�$r��t�Bu�By�${�B|��}�$�����������������������=�����������������������������������������������=�$�$�����4�����4�$�$�$���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������.	������$��-�VD��F��G��H��R��T�����������������������������������������������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������#��&��*��2��4��7��8���������������������������������������[	���L�L�L���`�`#��$��&��*��-�82��4��D�F�)G�)H�)J�>P�`Q�`R�)S�`T�)U�`V�DX�`Y�LZ�t[�g\�L]��m�Lo�Lw�`y�L}�L����������������������������������������������������������)��)��)��)��)��)��`��)��)��)��)��)��)��`��`��`��`������)�)�`���)�L�L�L�L�L�L�L���	��������$��������������������������������k7	��
7
7�G���G������"<#��$��&��*��-�o2��4��D��F��G��H��I��J�{P��Q��R��S��T��U��V��W��X��Y��[��\��]��l7m��o��r7tFuFw��y��{F|7}���������������������������������������������������������������������������������������������������������������������������������������7�7�G�7�7�G����7���I7	��
7
7��������"%$��-��D��F��G��H��J��R��T��V��l7m��o��r7t7u7y��{7|7}�����������������������������������������������������������������������������������������������7�7��7�7��������7���1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������i	�t

�y�`�y�t����"%#��$�t&��*��-�82��4��D��F�`G�`H�`J�[P��Q��R�`S��T�`U��V��X��Y��Z��[��\��lm�`o�`rt-u-w��y�`{-|}�`��t��t��t��t��t��t��t��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������t�����`�`�����`�`�`���y���y�`�`�`���t0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������K
K
K�y�ylKrKtdud{d|K�K�K�y�K�K�y�K��
��
��Y��Z��\��l��r��t��u��{��|���������F��G��H��R��T����������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������
����D���������������������������$	��������$��F��G��H��R��T��������������������������������������������������������������������������������F��G��H��R��T��������������������������������������������$	��������$��F��G��H��R��T������������������������������������������������������������������������"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V	�`�`$�`9F:F<(?F��`��`��`��`��`��`��`�(�`�(��`	�`�`$�`9F:F<(?F��`��`��`��`��`��`��`�(�`�(��`'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���	�`�`$�`9F:F<(?F��`��`��`��`��`��`��`�(�`�(��`K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V
�em�eo�ey�e}�e�e�e�e�e�e)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������i	�t

�y�`�y�t����"%#��$�t&��*��-�82��4��D��F�`G�`H�`J�[P��Q��R�`S��T�`U��V��X��Y��Z��[��\��lm�`o�`rt-u-w��y�`{-|}�`��t��t��t��t��t��t��t��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������t�����`�`�����`�`�`���y���y�`�`�`���t)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|��������������������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������V��
��
��Y��Z��\��l��r��t��u��{��|���������
�em�eo�ey�e}�e�e�e�e�e�e��
����
��9��:��?��@��Y��[��\��`��l��r��|��������� �t
�t
�t�o9�j:��<�y?�jY��\��l�tm�oo�or�tt��u��y�o{��|�t}�o��y�y�o�o�t�t�t�t�o�o�o��t��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������i	�t

�y�`�y�t����"%#��$�t&��*��-�82��4��D��F�`G�`H�`J�[P��Q��R�`S��T�`U��V��X��Y��Z��[��\��lm�`o�`rt-u-w��y�`{-|}�`��t��t��t��t��t��t��t��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������t�����`�`�����`�`�`���y���y�`�`�`���t0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��"%#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��VK	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��VK	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V-�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���'�B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B���K	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V6�V
�V
�V��"��#��&��*��--2��4��7��8��9��:��<�t?��Y��\��l�Vm��o��r�Vt�`u�`y��{�`|�V}�������������������������������������t�����t�����V�V�V�V��������Vv

#$&')-./2345789:;<=>?DEHIKNPQRSUYZ[\^lmoprtuy{|}��������������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I�,xx�D���P`KtyPL@�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ/��'37;��BK�	PX@3	`f[[		QCQ
D@4hf[[		QCQ
DY@
;:$$#,$
+>32#'&>54.#"#"'4632#"&!!7!!3<G*6]E'!1:3%
A 1;2"/?#.B.{,! ,, !,����]#[��n$;S47O;-('rz/**5C/$8'�� ..  ..��y$?����
&@#QCSD

+#.54>32#"&tA1!""'5���-PS\88\SP-<��""!5��)�
,@)
BQD

$+#"&/!#"&/		u		��ܙ�$�ܙ�$V<�6:��5BK�-PX@(
Y	CQ
C
D@&
Z
Y	C
DY@:98766421/-,(&#"!#!+#"&547!+#"&5<?3#76;>;!323+32%!!�^)V��V*^��R�(�W*_*_*W�(�R���*R����E��m�
	
�&!��F��p&!�{,F����
\;FQ�@)
!
LA*7BK�PX@2j

h
f_

SC	TD@1j

h
fk

SC	TDY@NMCB;965$#$+.'7632.54>?>;#".'+4.'>��H	&4EX8 D�e>4e�_	$e�?
'?]A/_WJ7:m�f
$�2Tm<P}U,��,Lc8LqL&bP'!'#|4QwZE�e>��K?"!(%�� (4G[<V�sF�
�B\@+��7Yu�>X?-(0K`W����'0DX?@<[	[CSC
C		SDUS((%"&((($
+#".54>324.#"32>>;+#".54>324.#"32>�0Rl<>mP..Pm>>lQ/L#=Q--P<##<P--Q=#eC�
D�0Ql<>mP..Pm>>lQ.L#<Q--Q<##<Q--Q<#3W�X--X�WX�Y--Y�XMnG!!GnMMmF!!Fm�
��PW�X--X�WX�Y--Y�XMoG!!GoMMmF  Fmj��T�@RS@PN9K*$BhfSC
CSDGE0.'%!
@@+2#"&'.#">7>;#"&/#".54>7.54>32>7&'�CxY5
":W;<bF'TX�-57C>*Y�-l~�OK�sG4Z|HGG3^���;^s8F}m[&�5BkJ(�.Ng8D<*%C\7R�V�HH�I
^�[���4X?$2a�ZH�mVP�VFwX2��MrM& 9N/�N_n���
@BQD

$+#"&/		��ܙ�$������(+.54>7�yx*Mi@@iM*
wyv�e�
v���uu���v
��eb�����(+4'&54?'&5476Zyw
*Lj@@jL*xyv���
v���uu���v
��{���51@.1-,($#
	BMQE55+5467'7>7./7.=3>?'.'t����4����
��	m,n
n-n
��	m-m	
n-n	�m��,@)MYQE+!!#!5!i��QN�R���=I�;�I�n��@B?S
D"+74632'&5467>7#"&n0'+/(8"
	%/U#2;0)URL 	

'5@$2d)5z@MQE+!!d�/zQi��"�@SD($+74>32#"&i!""'5M""!5������@kD""++6;[ 'n')-�%I��?�'@SCSD((($+#".54>324.#"32>?P��ii��OO��ii��PdBo�RR�pBBp�RR�oB�WW����WW����HH���GG����*@'
BhCR
D%+%!47#"/3!!5E��
	�J5�'J|"&��	(i��J��2>@;.BhSCQ
D-,+)$"
22+2>3!2!5467>54.#"#"&#'>ZQ�pB1To=�E E#c�o�<fK+4Wq>CqW9
0Kr��/_�`P�~w>�<8"�=rtzENsJ$)Ie<#[�b3����HU@RD
Bhh[SCSDB@;910/.&$HH	+2#".'763232>54.#5>54.#"#"/>eQ�m?+Kf<��Fz�ay�h:&#4KeBZ�[-)`�s\�^02Tp=CpV:1
Jr��-Z�XEoT9��W�l=Ah�@
599-<]s6ApQ/E-NlAKnH"(He>#[�b3?^� @[C
D!#+!+#!"&/3467![
�V�e	�UV��^�4
�j�
/��&�������/@@=-,Bh[QCSD(#&(#"+#!>32#".'763232>54.#"'!��UCx7n�q:N��d;j^N

1MiFR�i;-[�^9�H>o|^�(?q�\p�|B#.'$5d�]L�[3s����02@/B[CSD-+#!	+2#".54676;>32>54.#"t[�o?E{�gc�u@T`�"T�Z4;���1Z�QV�a43]�NX�`2N<m�``�vB@x�mSт��)H#=E�]O�a66_�MQ�[1=a|�/�@QC
D#'++67!"&=/�wA�
���+	��=x���';OD@A
B[SCSD=<)(GE<O=O31(;);''	+".54>7.54>32'2>54.#"2>54.#"Df�yD-RqD>`A"9j�_^�k9"B`>DqR.Dy�fQ�`4Dj�<<�jD4_�QQwN%*QuKKvQ*%Nw6f�ZNzZ<>Vi<K�b88b�K<iV><ZzNZ�f6L-StG]|JJ|]GtS-�1Sj9=iN,,Ni=9jS1��22@/B[SC
D/-%#	+".54>32+>74.#"32>=W�k<Cx�b^�q?-@)��"V�3:�"2Z{IN�]40W{KU�\/Z9j�\[�rA@u�d7ddi<��H*K#@F�M�[32Z}KN}W.:^u���J�#;K�#PX@SCSD@[SDY�(&($+74>32#"&4>32#"&�!""'5!""'5M""!5D""!5��J�-H@
(B?K�#PX@SCS
D@[S
DY�,*$($+4>32#"&4632'&5467>7#"&�!""'50'+/(8"
	%/j""!5�#2;0)URL 	

'5@$2�	�5�(+����!'*)���A��		��A����e!@YMQE+!!!!�;��;��,J�J�	�5�(+546767.'&=�*("���	A	
A�)!����(:9@6BhfSCSD(&#-$+>32#'54>54.#"#"'4>32#"&!DQ`8F|]7/HTI3A0GSG0*H^3BaB&�!""'52'*NqFLnS?78"��)>:<KbC6U;#+#�i""!5l�3Naf@c
U
8Bh[

[	[OSGPOYWOaPaFD<:641/'%NN
+%"&'#".54>3232>54.#"3267632#"$&546$32%2>7.#"�XY8�R8R6A}�t5]%[%09hP/a��}���mq����d
p����zv�����q:e���$MG>P3"Z�g9(;�]W]S'D\5U��V��.I,7 <o�b�ݒHj�������]DA%JPi�%���wS��m��HF?kS6Iv�K(E2��
$@!BZC
D# +!#"&'!+3!.'�O��I�NCf��z����e��{�++�z�*=@:B[SCS
D*(" !+3!2#!2654.#%!2>54&#!��y�t9'JkE��@z�q��c��3`�Y��3b�Y*�����0]�U8hXA��Z�d5�����CkK(K2Rh7��|���2D@ABhfSCSD,*" 	22+%2#".54>32#".#"32>7>�
(,h{�X���be���M�ob/	+=TnF�؜WV��yLwdV*	�+/K5g���
�i+@*-%Y�뒖�W(:'�y�@SCS
D!(!$+#!!24.#!!2>yb��������bjR�Ҁ�c��ҕRĤ���b�b������T�T���"�.@+YQCQ
D+!!!!!"�l����U��S��U��"�	(@%YQC
D		+!!!#"���{g�U��U�v�|��C�4H@E!
Bh[SCSD,*%#44+%2>7!"&=!#".546$32#"'.#"2Ixg]/���5r��Y���dd��Q�vf/		9a�h�ޝUV��C+}	8�	%:'g����g+?),,0&X�쓖�X�� @YC
D+!#!#3!3g��ggvg��Z��l��^�@C
D+!#3^gg�Y����'@$BhCSD#'$+#"&'>7>3232>53�;m�b-\1	#-LzV-g�w�|?	0c�f���"&@#B[C
D'(' +32>7>;#"&'.+#3VT;S��!�S�� [ff�	K
���Xd�V����@CR
D+%!!38���fWW��H� %@"BhC
D!5(+>7>;#47+"'#32z
,GZ����YF;� �
�y��#��J�
�(��@C
D!+2&53#"'#3	�Z1�hY2��6��y��Y�{����'@SCSD((($+#".54>324.#"32>�b������cc������bjR�Ҁ~їSS��~�ҕRĤ���gg����hg������WW�씕�VV���S�*@'[SC
D
!+#!2#%!2>54&#!Vfm��E��u��^�g7���:�����]�q?R4\}J��{����0T@
BK�PX@SCSCD@kSCSDY�(((%&+#"&'#".54>324.#"32>�+PsHpV ��?�N���cc������bjR�Ҁ~їSS��~�ҕR�k��~-�vFg����hg������WW�씕�VV�����"2@/B[SC
D" *!+#!2#"&'.#'32>54&#!Vfi��8i�]�Y�;')��^�g6ƽ��������Q�eA
��>L-TvJ��W����==@:=BhfSCSD;9(&!#!+#".#"#"&'763232>54.54>32~	
)FiMMuO)=d�d==t�l��L	(8J`=T�[0=d�d=6h�bn�H�%-&,Ld7H^B-,5PuWY�tCcV,#)#3XyEKaA,*4Qy[G�e=FH#n� @QC
D+!#!5n�f��W��0W����#@ CSD+%2>53#".53�f�p;fJ��||NjJg;o�IG~�ck��u˗VV��uk��c�~H��@BC
D* +3267>;#Q��P��[��j.46,��y��' @#BC
D,; +32>7>;2>7>;#&'#Ue	
��eN�C\�^�][��u..��u,-��y��4��@BC
D(")!+	32>7>;	#"&'+�e
��
b��e�B
�J]����L
�T�%���	��@BC
D,"+#32>7>;�g��Y��ZH��H?
�v++�s��
$@!QCQ
D

+!!547!5��~�������#�U%�U�����
'@$[OQE

!#+!+32�>�����$
��
$������@kD" +32#"&')'n' �%�"k����
!@[OQE!"+46;#"&=!!k��=���
s
$�� ��@
BkD,!+3#"&'.'+ <UD�	
	�
G���
��L���3@MQE+!5���DDV���	@kD		+2#"&/��6���
�k��C�'7T@Q-Bh[SC
C	SD)(/.(7)7" 	''
+!"/#".54>754&#"#"/>32%2>7)QXf=3`J-H��wuHeF,
N�mPxO(�J:aSH#�ͅ?!6H(@,>aD?lP0h��(0(NP3_�S�x5->$#<S52I/�����#�K�%PX@
B@
BYK�%PX@CSCSD@!CSC
CSDY@##&#+33>32#"&'#"32>54&�`B�m��9o�ih�6hc�?9�ZX�Y-����Xf��m��PQOz�f[��VE@u�b��X��X�,9@6,BhfSCSD(&#(#"+#".#"32>32#".54>321	
#:W>V�[01Z�NHa?%
FXg8_�q?<s�la�8^ =r�ei�o:"("
 4&E��yr��K>5W����#q@
BK�%PX@CSCS
D@!CSC
CSDY@##
+!"/#"&54>323%267.#"c
B�n��9o�ie�6`�^c�?:�XX�Y-��Zj��m��PKHN�Q@f[
UF@u�b��X����%0H@EBh[SCSD'&,+&0'0	%%	+2#!32>32#".54>"!4.T�i;
�14`�TKnK,

Oao8f�xA=s�kMzY7	�,Pp�:o�ip�s:!)!
 4%G��k��JG0Z~NPX/n�_�BK�!PX@SCQC
D@[SC
DY@!$%!	+3'&=354>32#"&#"!!nj�,PqD?)1S<!C��{	'~U�V+
.@gK{G��K����:Pd�@3B+BK�PX@,
[[CS	CSD@/h
[[S	CSDY@RQ\ZQdRdMKA?$"::+23#"'#".5467.54>7.54>4.'32>2>54.#"�Ao,��4]�OVF*0<c�c<>u�gi�k6h[2; -GO3]��1Rkuv3&A.-W~RL�a7��@dD#$Ec??dE$$Ed� !&_6HuS.B+.-QC>rX5+I`6Or@9.-()�[HuT.��/9 
	'1;#,K7 ">V.%B\88]B$$B]88\B%���-@*BCSC
D##+33>32#4&#"�_E�nR}R*_��b�B���Ue4b�W��|��eX��G�&@#SCC
D
+##".54>32_�    ��W!!���G�'4@1	BSCCSD$"!$%+#"&'76323265#".54>32;Y<.
QN�    �4XA%
0XQbW!!���0@-B[CC
D%(%!+3267>;#"&'.+#.�T�I
�S�^-`���{�_

�
�
�
���@C
D+#_��Q����,8@5+
BCSC
D,,##&&!	+332>32>32#4&#"#4&#"�4	BKU/m�ATc4JvS,`~u4_I+_toQ�6��)D1q>Z;1`�Z��|��&KpJ��|��aV����1@.BCSC
D#$!+332>32#4&#"�4	D�oR}R*_��b�B��Vi4b�W��|��eX�W����',@)SCSD''	+2#".54>2>54.#"k�t==t�kk�u==u�kY�Y,,Y�YY�Y--Y��I��uu��HH��uu��I�K=r�dc�s>>s�cd�r=�����$D@ABCSCSCD$$&%!+32>32#"&'"32>54&�4
	B�n��9n�if�6Bc�>9�YX�Y-���C�Zj��m��PJI�g\��VF@u�b��W����#D@ABCSCSCD##&#+##"&54>32763267.#"�`B�l��9o�ig�6	��c�?6�YX�Y-��Xf��m��PNLp�]f[RH@u�b�����8@5BhCSC
D#$%!+332>32#".#"�20�u-L"
!0q�-��y�B
���yY����<=@:<BhfSCSD:8'%" #!+#".#"#"&'7>3232>54.54>32�#9S<6Y?#0NchcN0/Y�Si�<
&=[C?`@!0NcicN0.UzL[�;h4E&/>,  ':T<ApR0C6" % #<Q-2B.  &:S>5bJ,464���@#x@
!BK�PX@%jhQCSD@#jh[SDY@
	##	+"&5#"&=7>;!!32>32�eq��
-9��%2$4&&upu�%d	��G�]);&
**3�����-@*BC
CSD$!#+32673#"/#".5逃a�C`5	E�oS|R*���cX��Vh4b�W|��@
BC
D,!+!#32>7>;T�\KH

	JH�	��*+
��* @#BC
D*!); +32>76;2>76;#"'.'+I�'		�F��F����C�	��**��-*+�(��#v�@BC
D("(!+	3267>;	#"&'+���[
$

X��j[��
��U���Z�	�����h	����@BCD,""++32>7>;{D��[OO	KI����	��
J:�
@QCQ
D+!!547!5!:��d�)q������K&MK?����H3@0*B[[OSG@>;83-+4.#52>54.54>;+";2#".54>�):##:)&HiB7!+G3)55)3G+!7BiH&�!7)=)7!7hhi8=hM+*8P19lii5%>./=%5ijl81P8*+Mh=8ihh��Q�@QD+3#KK�i���H5@2B[[OSGEDCB530-3)++546;2>54.54>7.54>54.+"&=323"}&HiB7	!+G3)55)3G+!	7BiH&)9##9)�7hhi8=hM+*8P18lji5%=/.>%5iil91P8*+Mh=8ihh7!7)=)7����9@6jk[OSG
+2>53#".#"#4>32%=*N <X83kib+&;*M <W84khb70B'7^F('0'0B'7^F('0'���
&@#SCQD

+4>734632#"&A�5'""'5��&-PS\88\SP-���'5""7����0;U@R6&,BjhfkSCTD##'#	+.54>?>;#".'>32+M`�r>@{�s
$W�5		!7P8+KfC'EXh:
$��/Y}N,\�a3J��tp��M�
�:.!��"' 1%�
�b�o@i?q�CQ�:@@=3)Bh[SCS
D#&#%&%"	+46;4>32#"'.#"!#!>3!#!5>5#C�4g�fLtW>&	

->V<NuP(�
�?H?+�6"@2��&]�uC%@V0;.4]�O��'��Yy+(A
(:N4F���D#79@6!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"�($�1�-n?>m-�1�$*)$�2�-n>>m-�1�$)H+Ic88cJ++Jc88cI+�>m-�2�$*)$�2�-n?>m-�2�$)($�2�-n?8bI++Ib88cJ++JcU(� 8@5	B
Z	YC
D *!+!3267>;!!!!#!5!5!�Z�ZO
Z
	YP�Y[��n��_��n��h�g#!'���:v:��~:v��Q�@YQD+3#3#KKKK������}k�H\A@>HZP=#BhfWSDFD-+(&!#!+#".#"#"&'7>3232>54.5467.54>32>54.'(#9S<8[@#2RhmhR2TR6C/Y�Si�<
&>\D>`B"4VmqmV4[g7E.UzL[�;��'CX`c-G>$=QZ]+YJ
5F'.D7.07F]>S{#&bEApR0C6" % "<Q/3L;004EY=M{%%cJ6aK,55��)A5-*+ `=-F7,)'&^'�"W'3K�PX@
SD@OSGY�((($+#".54>32#".54>32�

W









U����,H\�@
BK�PX@4hf[[		SCSDK�PX@4hf[[		SCSD@4hf[[		SCSDYY@
YW*,((#&(%!
+632#".54>32#".#"3264>32#".732>54.#"8;�t`�s@Cx�c4WJ@
!:[DS�a55^�MU{�S4]���dd���]44]���dc���]4;g���hh���g�
;FAv�fd�wB)!5b�WZ�a3)Pc���^44^���cd���^44^���d��hh���ii��j>5�&4B@? ,Bh[WSD('.-'4(4$##' 	+#"&/#".54>754&#"#"/>322>755 

15=$!<.*]�iDI+;(0jCeh��!81+��!*GD$
%9'$A13LO
0-ub��"�D8'����%�%(+55���
	
���
	
�
z
��	��
{
z
��	��
�S��=K�	PX@_MQE@kMQEY�+!#!�=R���'d)5z@MQE+!!d�/zQU����/FO��:BK�PX@/h		[
[SCSDK�PX@/h		[
[SCSD@/h		[
[SCSDYY@00OMIG0F0E)!(*,&+4>32#".732>54.#"#32#"&'.#'32654&+U4]���dd���]44]���dc���]4;g���hh���g�U����u	P
��n�ywlv��c���^44^���cd���^44^���d��hh���ii��yusvd���
_
@a[\T�5%@MQE+!!!��%A[D��'@WSD((($+4>32#".732>54.#"[/Qn??nQ//Qn??nQ/G$>T00T=$$=T00T>$n>mQ..Qm>>lQ//Ql>0T>$$>T00T?$$?TmP�7@4YYMQE
	+!!#!5!!!i��QN�R��R��U��jI�n�I��Ia�;W-g@
+BK�#PX@h[SD@!h[OQEY@(&#!
--+2>3!2!546?>54.#"#"&/>V,N9!*8�'�&�1%'4>H|W1I0(E?;�*�89< #4"G7`fb|=W?�@=BK�PX@,hh[[SD@1hh[[OSGY@;964.-,+#!??	+2#".'7>3232>54.#5>54.#"#"/>\,L7 H<IM%@V0<Q7!$;-)>).J5[Y'3?I{W/C+BWTB0M73C$
(%*4!4%1K?"2!A;`f���	@kD	#++7>3�9���
������0@-BCS
CD&$!#+32673#"/#"&'#"&5逃a�C`5	F�fb�%0���cX��X\MH+X$��6�B��*@'hiSD+##!#".54>3��U��Vg�r==r�g�R�
�
y8b�MP�\2��o�@OSG($+4>32#".�$&&$P&&%%����V@
BK�	PX@^jTD@jjTDY@+232654.'73#"&'76�(390A'*=Y]1D()N
��
,&!�`<;0!��5RO�	BK�PX@jjQD@jjMRFY�$+37#"/733!����:����%~	��c1W;��)@&WSD	+2#".54>2654&#"wBjJ''JjBDjK''KjDhiihkii�*OoEEoO**OoEEoO*��rq��qr�����)�'(+7'&547>7.'&54?'&547>7.'&54?�������	&

%	��
��	&

%	��
�q�#-O@L!	Bh		Z
[CS
D-+(&#"$!"
+%3+#5!"/3%37#"/733!47!+>;�~m?��`C�����:�������( 
*�$�� �#%~	��c1w�}�
d�K�-=Ge@b710+Bhh		Z[CS

DGEB@=<;:9853/.(&#!
--
+2>3!2!546?>54.#"#"&/>%37#"/733!+>;f,N9!*8�'�&�1%'4>I|�����:����( 
*�1I0(E?;�*�89< #4"@>`f%~	��c1�b
dSq�PU_]@N	
$SBK�	PX@B

h		h
	
	[[
\SCS
DK�PX@B

h		h
	
	[[
\SCS
DK�
PX@B

h		h
	
	[[
\SCS
D@B

h		h
	
	[[
\SCS
DYYY@!_]ZXUTKHEC=<;:20)' PP!"+%3+#5!"/32#".'7>3232>54.#5>54.#"#*.'>47!+>;�~m?��`C�Z,L7 H<IM%@V0<Q7!$;-)>).J5[Y'3>J	{�����( 
*�$�� ��/C+BWTB0M73C$
(%*4!4%1K?"2!G5`f���}�
d*����);5@2BhfSCTD('#-$+#".54>?332>324>32#"&�DQ`8E}]70GTJ3A0GTG0*H^3E_@$
		��!""'5�2')MoGLkM924#��*<45E]B6U;#+#O""!5����&$	[����&$[����&$
`����&$`����&$
`����&$`����4@1YYQCS
D"	+!!!!!!!+!����Hj��K��8���
O� i�U��S��U��c7.|���Oh@e<B
M	Bhf
hSCSC	S			DKIA@:820(&!OO+232654.'7.54>32#".#"32>7>32#"&'76�(390A'$��Ze���M�ob/	+=TnF�؜WV��yLwdV*	
(,ey�UY]1D()N
��
,&!sn���
�i+@*-%Y�뒖�W(:'+.J5K<;0!���"�&(	Z���"�&(Z���"�&(
_���"�&(
_����&,	���N�&,��E�&,
	��N�&,
	1��!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>1����bb������R�Ҁ�c��l��ҕR��b��������b���T��@��T������&1���{����&2	���{����&2���{����&2
���{����&2���{����&2
����D�	(+		'	7	�t3����4u��5pn����4t��4vp6��o{����!-9b@
21&%BK�PX@kCSCSD@jkSCSDY�**%(%$+#"&'+7&54>327>;.#"4&'32>�b���s�Q�
 ,�lwc���y�So7�eo�$^U�G�j~їSrVN�E�d�ҕRĤ���g=9��`���hC?��`�갠�R�9<W�씘�R�35V��������&8	�������&8�������&8
�������&8
�����&</�S�.@+[[C
D
!+#3!2#%!2>54&#!Vff��E��u��^�g7����������]�q?R4\}J����'�J>@;BhSC
CSDED?='%" JJ+2#"&'7>3232>54.54>54.#"#4>�U�Z./GRG/!7EIE7!2Z~Me�<

%<Y?;\?!;XfX;0ITI0?fIG}^6_Bu��3Qd2>\G87:%$1$!)<S;DrR-C6" % #=R/CQ4&1K?1H>:DS8I?*+X�^��e�o;��k��C�&DC���k��C�&Dv���k��C�&D����k��Ci&D����k��CW&Dj���k��C�&D��k����BR]�@:@BK�1PX@5hh

[S	CSD@?hh

[S	CSCSDY@&TSYXS]T]NLDC><7520-,$"
	BB+2#!32>32#"&'#".54>754&#"#"&/>32>32>5"!4.�K�`7
�l0X|LGdD&
JZe4��/Uly7?lP.H��wuHeF,M�k~�/���ͅ?!<R1BtW2�HsR1V(He�<s�op�r:!'!
4%��MjBBhI@qV6E��)0)
NP�po��(BY58O2,U|O+4^�RU�]1X��X�Gh@e6:
E	Bhf
hSCSC	S			DCA9842/-%# GG+232654.'7.54>32#".#"32>32#"&'76�(390A'%W�g8<s�la�8	
#:W>V�[01Z�NHa?%
-�jY]1D()N
��
,&!vK��sr��K>5" =r�ei�o:"("
 :NO<;0!��X����&HC���X����&Hv���X����&H����X���W&Hj���"V�&�C������&�v�������&��������W&�j�Y���}6J6@3<2B65@[SD87B@7J8J.,$"+&54?.'.546?7#".54>32.'2>7.#"�~<�J
Z�N�
r?iM*9r�s[�wD:o�g5kcV �n�9X�\2;XvLX�Y-7_}.

m!/<0�d/z��u��WAy�l`�I9X<��K��-E��t3fP2<j�R]�d5����i&Q���W����&RC���W����&Rv���W����&R����W���i&R����W���W&Rj�m�_#+@([YOSG($(#+!!4632#"&4632#"&m��Uy5'""'55'""'5�I�'7#!5�_'7#!5W���& ,6=@:54%$
BjkSCSD.--6.6'%($'+#"'+7.54>327>;.#"2>54'h<>=t�k�lQ
!&�DF=u�kX�7W2��/0�-vKY�[.iY�Z.P�
WiC�vu��HOm�C�u��I1-t��h�9�*,?s���>r�d�s�]E�������&XC��������&Xv��������&X��������W&Xj�������&\v������!@@=BCSCSCD!!&#+3>32#"&'"32>54&�_B�m��9n�if�6Bc�>9�YX�Y-�����Xg��m��PNL�g\��VF@u�b�������W&\j���c�&/O@L,BAhZC
CSD('#!&&	+2#"&54>7&'!+3"32>!.'F
T/L^'1��I�NCfC23&@2&�z���"KB92*��e��y/A'05��++k����BRn@k-H	6Bh
h		[SCSCSDDCJICRDR?=1/*(%# BB+2#"&54>7&/#".54>754&#"#"&/>3232>2>7�
T/L^)4
)QXf=3`J-H��wuHeF,N�mPxO(.(@2&��:aSH#�ͅ?!6H�"KB ;3+	(@,>aD?lP0h��(0(
NP3_�S�x"-705(->$#<S52I/��|���&&��X��X�&Fv���A�'T@Q	B
		hYQCQ
C		SD$"''+2#"&54>7!!!!!!#32>$
T/L^&1�RP�l���[.(@2&�"KB82+�U��S��U"-705X����CNg@d2Bhh

[		SCSCSDEDJIDNEN@>0.+)$"CC
+2#"&54>7"#".54>32#!32>3232>"!4.�
T/L^!+
f�xA=s�jT�i;
�14`�TKnK,

7EP*,&@2&�MzY7	�,Pp�"KB4/)G��k��J:o�ip�s:!)!
 *"",505�0Z~NPX/��@C
D+#_��:�#@ BCR
D+%!!54?3c��r�����f��?��WKeB
]�9�#@ 
BC
D+7#54?[��_�����Y2T���Z4Tv����&1������&Qv{��7� 4�@

BK�PX@+YSCQC	S
DK�%PX@)YSCQC	S
DK�)PX@3YSCQC	Q
C	SD@1YSCQCQ
C		SDYYY@
1/%(%
+!!!!!#".54>32!4.#"32>7�l���%k��]�ߠYY�߇]��k%E��J��sr��KK��rs��J2��S��UNR�Y/f�
���h0Z�RM�=��XX�씕�WW��W��W�2FQa@^.
Bh

[
	SCSDHG43MLGQHQ><3F4F,*" 
	22+2#!32>32#"&'#".54>32>2>54.#""!4.�K�`7�l0Y|LCcE)JZe4��,*Ĕb�m::m�c��*E^x�ZR{R))R{RS|S))S|?HsR1W(Ie�<s�op�r:!)!
 4%����H��uu��I��BjL)�K=r�dc�s>>s�cd�r=n4^�RU�]1��W����&6��Y����&Vv���W����&6��Y����&V������&<
4��s��&=h��J:�&]v���s��&=k��J:�&]����s��&=k��J:�&]��v����#2@/YSCSD##""	+#543>7'&=37>3#"!{`Dl�X$3`N7
_��ض$5`N7
e��b�\+0 FpR

'���3FpR�G �(�@BkD* +#"/&'+73(A��C�U���� �(�
@BkD' +32?>;# C��A�U��

�����5%q5�� @WD
+".5332>53$B[9E(A00A)E9[�'DZ2%B22B%2ZD'��}�@SD($+#".54>32}    F!!xs��=K�'PX@WSD@[OSGY�$&($+4>32#".732654&#"x/?##?//?##?/:@32@@23@$<++<$$;,,;$2@@22@@����
+@(B@jSD+2#"&54>732>�
T/L^-81.(@2&�"KB"=6,
"-705&�*iQK�PX@WSD@[OSGY@
+2673#".#"#4>32�+,;%6"!;63*,=&6"";537/$?.!'!9-$?.!'!|���	#@ SD




	#++7>3!+7>3��*�R�/�
��
��
�.��s�\�BK�1PX@SCS
D@SC
CSDY@!$##	++#!#"&'7632325#5463s�_�,mi4
	���$�e��=nt	'��"
��f@MQE+!!���fG��f@MQE+!!���fG�!.��(+.5467�L=&2#!&K&N�;3d6;=n��(+'&547>54'&547�L=&2#�&K&N�;2e6:=n���(+7'&547>54'&547�L=&2#�&K&N�;2e6:=�!;�)�(+.5467.5467�L=&2#�L=&2#!&K&N�;3d6;=&K&N�;3d6;=n'�)�(+'&547>54'&547%'&547>54'&547�L=&2#JL=&2#�&K&N�;2e6:=&K&N�;2e6:=n�'�)�(+7'&547>54'&547%'&547>54'&547�L=&2#JL=&2#�&K&N�;2e6:=&K&N�;2e6:=������@BK�PX@CCSCDK�%PX@ZCCD@`ZCDYY@
#!""+463632>72!#"'!�M�S

R�N��

����

� ��

�������-�@&"	BK�PX@/
	

	`
	
[CCSCDK�%PX@-
	

	`Z
	
[CCD@/`
	

	`Z
	
[CDYY@+)('%#! !"#+7!!5463632>72!!#.'#"'"&5�|��M�S

R�N��}N�R

S�M�� �

� �B �

�1i|@OSG($+4>32#"..Pj<=lP..Pl=<jP.T=lQ..Ql=<iP..Pii����#5@SD(&(&($+74>32#"&%4>32#"&%4>32#"&i!""'5�!""'5�!""'5M""!5'""!5'""!5W��z�'0DXl�K@H[	[CSC
C
		S
D}{sqig_]US((%"&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�0Rl<>mP..Pm>>lQ/L#=Q--P<##<P--Q=#eC�
D�0Ql<>mP..Pm>>lQ.L#<Q--Q<##<Q--Q<# 0Ql<>mP..Pm>>lQ.L#<Q--Q<##<Q--Q<#3W�X--X�WX�Y--Y�XMnG!!GnMMmF!!Fm�
��PW�X--X�WX�Y--Y�XMoG!!GoMMmF  FmMW�X--X�WX�Y--Y�XMoG!!GoMMmF  Fm�����(+5���
	
�
z
��	��
�����(+7'&547>7.'&54?����	&

%	��
�6��	@C
D#"+'+>;k( 
*
d��o�N[@X;	Bh		h
[	[SC
S


DNMHGFEA?97$##%'$+3>32#".#"!#!!#!32>32#".'#53.547#�Z��n@m]Q%
"1CY:Z�qJZ���
Hp�Z>_H4$	
	%$TfxFq��T���_�ҒN,A+#%?z�v/2'|�~@%+%	#.K5N�ً;'10HH�#C@@
BhS	CS	D##!4%
+67>;#7+"'#32###5��	
9>��?9
	�W�G��
l���,��z*�E?��x;��;h}�71@.1BSCS
D76***+!>54.#"!"&=!5.54>32!#c`�r>V��ooŔV>q�`��b�yDe�뇇�eDx�b�kOw�g~�~??~�~g�wO��4�\��m�ؖOO�؉m��\�4{���.BC@@4Bh[SCSD0/:8/B0B#+(($+>32#".54>32>54&#"#"&'2>7.#"�$CCG(W�_2G�ԌQ�`5I��q5cVD��1K8%
MR�oO
+GeEb�k9(If=#H��~����6f�[rɖV9W;;5-��
�&G��y3cN/I�dKvR+�@BCR
D+3!7!&'^\M�
��*
��ySz!+&M���$@!QCD+##!##5�b��b��R�k��k�RW����&@#
BQCQD+!!!!547	&5W�����{�[��`�R����R$1.
�z��@MQE+!!�=���I(��"@Bj[
D*# +#"&=!267>;#5�:�
�:��O�
��.)%'�
�IJ
�';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+".'#".54>32>32%2>7.#"!2>54.#"�7\NCCN[79hO//Oh97[NCCN\79hO//Oh�F,KB;;BK,,M:!!:M�+M9!!9M+-KB;;BK(BW//VC(+PsGGrP+(CW..WC(+PrGGsP+N&@S--T@&:V78V::V87V:&@T--S@&����K�)*@'BSCSD!%)U$+>32#"&#"#"&'7>3232>7�
:Vo@'9
4XC-	�?]xE!A

"<`G/
>W�U+
+
 DgH��c�Z*	'	 GqQ����/d@a('B[[[	O	SG,*%# //

+267#".#"'>32267#".#"'>32
4Xd84ec`.7Wc<4fc_.4Xd84ec`.7Wc<4fc_*-:+/$,$-8-0$,$��-:+.$,$-8-/$,$���pkK�	PX@)^_	ZMQE@'jk	ZMQEY@

+!3!!!!#!5!7!��uGt��h��@vHv��Th�De��J�J��J��P�O!@	@MQE+!!��
��''%���v>����	?x��I�P�O!@
@MQE+5467>7.'.=!5!�
&&&��
���(��?>�I��f��"@
BMQE+3	#	>7	.'��B��nB��L		N��	
�@����@�S�������@CD+3#���k�a�BK�!PX@SCQC	
D@[SC	
DY@!$%!
+3'&=354>32#"&#"!#!nj�6g�_!G
+!��G`�{	'U\�g7
0
��R�<}����"�K�!PX@SCQC	
DK�1PX@[SC	
D@![CSC	
DYY@""A15!
+3'&=354>32;#.#"!!nj�4d�`"IE<H_6w0KvQ+ ��{	'AX�n>�nO/Y~NAG����R��
@jD


+2+:	 0["6M6
��	@ja		+2#"&'%t�G
���	
��2E�%@OSG&(($+#".54>32#".54632�

�

0!
�





!1
U5�q@MQE+!!U��aq<�J�	@ja	#++7>3J��
F����
	<�@Bja, +#"&/.'+73<I��J�Z{{�<�@Bja, +32>?>;#J�	�I�Z�{{�2��
(@%jOSG


+"&5332653$|v@R``R@v�pfGQQGbt�8{�@OSG($+#".54>32{  �}���!@[OSG$&($+4>32#".732654&#"}-="">-->""=-5@32@@23@^";**;"#:**:#2@@22@@*)�1@.[OSG
+2673#".#"#4>32�*,6"5"!<85*+8$4""<84P7+#;- % 8*"<- % j��	+@(OSG




	#++7>3!+7>3��/�
q�4���	��	���m�
@kD


+2+U	 3�#;U<.���U_<��ʓ^p�ӡ�6��z�	��V�6�:z/������V���Wgj��X�Xb {�m�n�d�i���I�������?�������x�������������!kl	�|����x��|��V��Y(������;{��;{��W�#��	����sX���Xk��IV�kD��XDW�X��K:���������7�:�:W.�DW�\Y�4:����#��JX?XXi��������C���UX��I'MU�jj����dMUI[�m�a�bI�:��6�I����Wj������S�*						7��|��������VV�VV'1��;{;{;{;{;{��;{��������������k�k�k�k�k�kIk�X�X�X�X�X�"������0Y:�:W:W:W:W:W�m:W:�:�:�:��.��	�k|�X���X��*:X9��:��{�W:W\YW\Y��s�J�s�J�s�J�vI I II5I�IxI�I&I|�.:�7����n�n���n�n�����`i�Wk�k��6��H�h�{TMTW��c(TJ��������������*lI�IIIUI�III2I�I}I*IjI�l�#`�	�V��B��V#��$�V&��*��2��4��97:7<?7D��F��G��H��R��T��m�Bo�By�B}�B��V��V��V��V��V��V��V��������������������������������������������������������������������������������V��������������B�B���B�B�B��V
	�V
�
�B
�
�V
#��
$�V
&��
*��
2��
4��
97
:7
<
?7
D��
F��
G��
H��
R��
T��
m�B
o�B
y�B
}�B
��V
��V
��V
��V
��V
��V
��V
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�V
��
��
��
��
��
��
�
�B
�B
�
�
�B
�B
�B
��V#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������
	�V
�
�B
�
�V
#��
$�V
&��
*��
2��
4��
97
:7
<
?7
D��
F��
G��
H��
R��
T��
m�B
o�B
y�B
}�B
��V
��V
��V
��V
��V
��V
��V
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�V
��
��
��
��
��
��
�
�B
�B
�
�
�B
�B
�B
��V�
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v���B	��
�B
�B�v�v��$��7�L9��:��;��<�`=��?��l�Br�B|�B�����������������������`���`�������B�B�v�B�B�v��B����
�
��v#��&��*��2��4��7�L9�L:��<�y?�LY��Z��\��l�m�vo�vr�y�v|�}�v�����������������������y�����y�v�v�����v�v�v��7	��
7
7�G���G������"<#��$��&��*��-�o2��4��D��F��G��H��I��J�{P��Q��R��S��T��U��V��W��X��Y��[��\��]��l7m��o��r7tFuFw��y��{F|7}���������������������������������������������������������������������������������������������������������������������������������������7�7�G�7�7�G����7���#��#	��#
��#��#
��#��#��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#��#��#���#���$�V$
�V$
�V$��$"��$#��$&��$*��$--$2��$4��$7��$8��$9��$:��$<�t$?��$Y��$\��$l�V$m��$o��$r�V$t�`$u�`$y��${�`$|�V$}��$���$���$���$���$���$���$���$���$���$���$���$��t$��$��$�t$��$��$�V$�V$�V$�V$��$��$��$��V&�e&m�e&o�e&y�e&}�e&�e&�e&�e&�e&�e'��'	��'
��'��'
��'��'��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'��'��'���'���)	��)�L)�L)��)��)��)")$��)-�.)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)��)��)��)��)��)�L)�L)���-	��-��-��-��-$��-���-���-���-���-���-���-���-��-��-��-���.��.#��.&��.*��.2��.4��.F��.G��.H��.I��.R��.T��.W��.Y��.Z��.\��.m��.o��.y��.}��.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.��.��.��.��.��.��.��.��.��.��/��/
��/
��/4/�$/4/"��/#��/&��/*��/2��/4��/7�[/9�V/:�y/<�=/?�V/F��/G��/H��/R��/T��/Y��/Z��/\��/l��/m�$/o�$/r��/t�B/u�B/y�$/{�B/|��/}�$/���/���/���/���/���/���/���/��=/���/���/���/���/���/���/���/���/���/���/���/���/��/��/��/��/��/�=/�$/�$/��/��/�4/��/��/�4/�$/�$/�$/���2��2	��2
��2��2
��2��2��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2��2��2���2���3	��3�3�3��3$��3-�V3D��3F��3G��3H��3R��3T��3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3��3��3��3��3��3�3�3���4��4	��4
��4��4
��4��4��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4��4��4���4���5#��5&��5*��52��54��57��58��5���5���5���5���5���5���5���5���5���5���5���5��5��7	��7�L7�L7�L7��7�`7�`7#��7$��7&��7*��7-�872��74��7D�7F�)7G�)7H�)7J�>7P�`7Q�`7R�)7S�`7T�)7U�`7V�D7X�`7Y�L7Z�t7[�g7\�L7]��7m�L7o�L7w�`7y�L7}�L7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��7��7��7��7��7��7��7��)7��)7��)7��)7��)7��)7��`7��)7��)7��)7��)7��)7��)7��`7��`7��`7��`7��7�7��7�)7�)7�`7��7�)7�L7�L7�L7�L7�L7�L7�L7���8	��8��8��8��8$��8���8���8���8���8���8���8���8��8��8��8���979	��9
79
79�G9��9�G9��9��9��9"<9#��9$��9&��9*��9-�o92��94��9D��9F��9G��9H��9I��9J�{9P��9Q��9R��9S��9T��9U��9V��9W��9X��9Y��9[��9\��9]��9l79m��9o��9r79tF9uF9w��9y��9{F9|79}��9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9��9��9��9��9��9��9��9��9�9�9�79�79�G9�79�79�G9�9�9�9�79���:7:	��:
7:
7:��:��:��:��:"%:$��:-��:D��:F��:G��:H��:J��:R��:T��:V��:l7:m��:o��:r7:t7:u7:y��:{7:|7:}��:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:�7:�7:�:�7:�7:�:��:��:��:�7:���;��;#��;&��;*��;2��;4��;F��;G��;H��;I��;R��;T��;W��;Y��;Z��;\��;m��;o��;y��;}��;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;��;��;��;��;��;��;��;��;��;��<<	�t<
<
<�y<�`<�y<�t<��<��<"%<#��<$�t<&��<*��<-�8<2��<4��<D��<F�`<G�`<H�`<J�[<P��<Q��<R�`<S��<T�`<U��<V��<X��<Y��<Z��<[��<\��<l<m�`<o�`<r<t-<u-<w��<y�`<{-<|<}�`<��t<��t<��t<��t<��t<��t<��t<���<���<���<���<���<���<���<���<���<���<���<���<���<���<��`<��`<��`<��`<��`<��`<���<��`<��`<��`<��`<��`<��`<���<���<���<���<�t<��<��<�`<�`<��<��<�`<�`<�`<�<�<�y<�<�<�y<�`<�`<�`<�<��t=��="%=#��=&��=*��=2��=4��=F��=G��=H��=R��=T��=V��=Y��=\��=m��=o��=y��=}��=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=��=��=��=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>F��>G��>H��>R��>T��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��?�V?
�V?
�V?��?"��?#��?&��?*��?--?2��?4��?7��?8��?9��?:��?<�t??��?Y��?\��?l�V?m��?o��?r�V?t�`?u�`?y��?{�`?|�V?}��?���?���?���?���?���?���?���?���?���?���?���?��t?��?��?�t?��?��?�V?�V?�V?�V?��?��?��?��VD��D
��D
��DY��DZ��D\��Dl��Dr��Dt��Du��D{��D|��D�D�D�D�D���E��E
��E��E
��E9��E:��E?��E@��EY��E[��E\��E`��El��Er��E|��E�E�E�E�E���H��H
��H��H
��H9��H:��H?��H@��HY��H[��H\��H`��Hl��Hr��H|��H�H�H�H�H���IKI
KI
KI�yI�yIlKIrKItdIudI{dI|KI�KI�KI�yI�KI�KI�yI�KK��K
��K
��KY��KZ��K\��Kl��Kr��Kt��Ku��K{��K|��K�K�K�K�K���NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��P��P
��P
��PY��PZ��P\��Pl��Pr��Pt��Pu��P{��P|��P�P�P�P�P���Q��Q
��Q
��QY��QZ��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q�Q�Q�Q�Q���R��R
��R��R
��R9��R:��R?��R@��RY��R[��R\��R`��Rl��Rr��R|��R�R�R�R�R���S��S
��S��S
��S9��S:��S?��S@��SY��S[��S\��S`��Sl��Sr��S|��S�S�S�S�S���U��U��UD��U���U���U���U���U���U���U���U��U�U�Y	��Y��Y��Y��Y$��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y�Y�Y���Z��Z��Z��Z��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��\	��\��\��\��\$��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\�\�\���^#��^&��^*��^2��^4��^F��^G��^H��^R��^T��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��l	�Vl�l�Bl�l�Vl#��l$�Vl&��l*��l2��l4��l97l:7l<l?7lD��lF��lG��lH��lR��lT��lm�Blo�Bly�Bl}�Bl��Vl��Vl��Vl��Vl��Vl��Vl��Vl���l���l���l���l���l���l���l�l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�Vl��l��l��l��l��l��l�l�Bl�Bl�l�l�Bl�Bl�Bl��Vm�Bm	��m
�Bm
�Bm�vm�vm��m$��m7�Lm9��m:��m;��m<�`m=��m?��ml�Bmr�Bm|�Bm���m���m���m���m���m���m���m��`m��m�`m��m��m��m�Bm�Bm�vm�Bm�Bm�vm��Bm���o�Bo	��o
�Bo
�Bo�vo�vo��o$��o7�Lo9��o:��o;��o<�`o=��o?��ol�Bor�Bo|�Bo���o���o���o���o���o���o���o��`o��o�`o��o��o��o�Bo�Bo�vo�Bo�Bo�vo��Bo���p��p	��p
��p��p
��p��p��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p��p��p���p���r	�Vr�r�Br�r�Vr#��r$�Vr&��r*��r2��r4��r97r:7r<r?7rD��rF��rG��rH��rR��rT��rm�Bro�Bry�Br}�Br��Vr��Vr��Vr��Vr��Vr��Vr��Vr���r���r���r���r���r���r���r�r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�Vr��r��r��r��r��r��r�r�Br�Br�r�r�Br�Br�Br��Vt	�`t�`t$�`t9Ft:Ft<(t?Ft��`t��`t��`t��`t��`t��`t��`t�(t�`t�(t��`u	�`u�`u$�`u9Fu:Fu<(u?Fu��`u��`u��`u��`u��`u��`u��`u�(u�`u�(u��`y�By	��y
�By
�By�vy�vy��y$��y7�Ly9��y:��y;��y<�`y=��y?��yl�Byr�By|�By���y���y���y���y���y���y���y��`y��y�`y��y��y��y�By�By�vy�By�By�vy��By���{	�`{�`{$�`{9F{:F{<({?F{��`{��`{��`{��`{��`{��`{��`{�({�`{�({��`|	�V|�|�B|�|�V|#��|$�V|&��|*��|2��|4��|97|:7|<|?7|D��|F��|G��|H��|R��|T��|m�B|o�B|y�B|}�B|��V|��V|��V|��V|��V|��V|��V|���|���|���|���|���|���|���|�|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�V|��|��|��|��|��|��|�|�B|�B|�|�|�B|�B|�B|��V}�B}	��}
�B}
�B}�v}�v}��}$��}7�L}9��}:��};��}<�`}=��}?��}l�B}r�B}|�B}���}���}���}���}���}���}���}��`}��}�`}��}��}��}�B}�B}�v}�B}�B}�v}��B}�����V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V��e�m�e�o�e�y�e�}�e��e��e��e��e��e����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|����������������������������������������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$���������������������������������������������	�t�
�
��y��`��y��t�������"%�#���$�t�&���*���-�8�2���4���D���F�`�G�`�H�`�J�[�P���Q���R�`�S���T�`�U���V���X���Y���Z���[���\���l�m�`�o�`�r�t-�u-�w���y�`�{-�|�}�`���t���t���t���t���t���t���t�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������t��������`��`��������`��`��`������y������y��`��`��`�����t����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V����
���
���Y���Z���\���l���r���t���u���{���|����������������e�m�e�o�e�y�e�}�e��e��e��e��e��e����
������
���9���:���?���@���Y���[���\���`���l���r���|����������������t�
�t�
�t��o�9�j�:���<�y�?�j�Y���\���l�t�m�o�o�o�r�t�t���u���y�o�{���|�t�}�o���y��y��o��o��t��t��t��t��o��o��o���t����
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������	�t�
�
��y��`��y��t�������"%�#���$�t�&���*���-�8�2���4���D���F�`�G�`�H�`�J�[�P���Q���R�`�S���T�`�U���V���X���Y���Z���[���\���l�m�`�o�`�r�t-�u-�w���y�`�{-�|�}�`���t���t���t���t���t���t���t�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������t��������`��`��������`��`��`������y������y��`��`��`�����t����"%�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������"%�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������"%�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}���������������������������������������������������������������������������������������������������������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B�����	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V�	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V���
��
���v�#���&���*���2���4���7�L�9�L�:���<�y�?�L�Y���Z���\���l��m�v�o�v�r��y�v�|��}�v�������������������������������y��������y��v��v����������v��v��v����	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V�	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V���
��
���v�#���&���*���2���4���7�L�9�L�:���<�y�?�L�Y���Z���\���l��m�v�o�v�r��y�v�|��}�v�������������������������������y��������y��v��v����������v��v��v�����B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B������B�	���
�B�
�B��v��v����$���7�L�9���:���;���<�`�=���?���l�B�r�B�|�B�������������������������������`�����`�����������B��B��v��B��B��v���B�����	�V����B����V�#���$�V�&���*���2���4���97�:7�<�?7�D���F���G���H���R���T���m�B�o�B�y�B�}�B���V���V���V���V���V���V���V������������������������������������������������������������������������������������������������������������V����������������������B��B������B��B��B���V��V�
�V�
�V����"���#���&���*���--�2���4���7���8���9���:���<�t�?���Y���\���l�V�m���o���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������t��������t��������V��V��V��V������������V�����"��"��J��"<b��n�6�2�	(	z	�

,
R
�~����

�
�
�Zv��@~�F��F��Fr���*�z�T����T��V�`����P���r�NN���Jl 
 ^!B!�!�"$">##&#n#�$"$�$�%.%d%�%�&.&t&�'0'�))r)~)�)�)�)�)�**�*�*�*�*�*�*�*�++T+`+l+x+�+�+�+�,P,\,h,t,�,�,�-P-\-h-t-�-�-�.x///(/4/@/L/X/d/p/�0000&020>0�1111$101<1�1�22�2�2�3<3�3�4*4\4h4t5<5�5�5�6666(646@6L6X6d6�6�777D7n7�7�8R8�8�8�99>9d9�9�::V:�;t;�;�<�<�= =>=�>4>�??F?p?�?�?�@�@�A^A�A�B6BxB�B�CbC�C�C�DD.D\D�D�D�E$EhE�E��`"/n�	� ��
��(�
�(�
�0�%	%
�42(
�Z	6	J	^	Pl	�	P�	�	` 	�		�	
��	0
V	d
�	
�
�	4n	�	
�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightRegulartyPolandLukaszDziedzic: Lato Light: 2013Version 1.105; Western+Polish opensourceLato-LightLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightRegulartyPolandLukaszDziedzic: Lato Light: 2013Lato-LightVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLLatoLight�ZD	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt��bKbK�������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK,"#[䍒�TtTtSgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfnu�[��� DSIGtLGPOS�,HPGSUBV.TI|OS/2ٮ��J�`cmapRԟ�J��cvt '�i�8fpgm�zAj4	�gaspi�glyfmr��O��>head��d��6hhea�`�L$hmtx4W��pTkern@�B���g�loca�E�/R�,maxpC
�T� name��UTpost:�]fX�prep�x9�s��
0JDFLTlatn����kernkernGr�����T��v		�

����
V
��8�,^$^�0��
D��J��J���J�L F �!z"##P#�$4$~%x&&�'�(�)�*�+�+�,J,�-n..�/$/V/�/�/�1�242n2�2�33V3�3�44J4�4�4�5�5�6�7�7�7�8~8�8�:�;";�;�<�=2>,?&?�@�A�B�C8C�D�E.F(>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;q6	��
6
6�A���A������":#��$��&��*��-�i2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l6m��o��p��r6tPuPw��y��{P|6}�������������������������������������������������������������������������������������������������������������������������������������������������������6�6�A�6�6�A��A�����$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������
��m��o��y��}�������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�|�L�L�|����"$�|-�:D��F��G��H��P��Q��R��S��T��U��X��w����|��|��|��|��|��|��|�������������������������������������������������������������������������|�����������L�L�L��|	����$����������������������������+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������3��
��
���;#��&��*��2��4��7�89�J:�h<�,?�JY�|Z��\�|k��l��m�;o�;p��r��t�,u�,y�;{�,|��}�;�����������������������,��|��|�����,�;�;�����;�;�;$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������/	�v�C�C�v$�v-�JD��F��G��H��R��T����v��v��v��v��v��v��v����������������������������������������������������������v���������C�C�C��v$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������#��&��*��2��4��7��8��k��p���������������������������������������f	�|�L�L�L�|�f�f"'#��$�|&��*��-�82��4��D�/F�/G�/H�/J�EP�fQ�fR�/S�fT�/U�fV�JX�fY�WZ�[�Z\�L]�_k��m�Lo�Lp��w�fy�L}�L��|��|��|��|��|��|��|�����������������������/��/��/��/��/��/��/��/��/��/��/��/��/��f��/��/��/��/��/��/��f��f��f��f��W��W�|�/���/�/�f���/�J�J�_�_�_�L�L�L�L�L�L�L�L��|	����$����������������������������q6	��
6
6�A���A������":#��$��&��*��-�i2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l6m��o��p��r6tPuPw��y��{P|6}�������������������������������������������������������������������������������������������������������������������������������������������������������6�6�A�6�6�A��A�����N:	��
:
:����������$��-��D��F��G��H��J��P��Q��R��S��T��U��V��X��l:r:t<u<w��{<|:��������������������������������������������������������������������������������������������������������������:�:��:�:�����+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������m7	�r
7
7�'�J�'�r����"2#��$�r&��*��-�82��4��D�AF�AG�AH�AJ�WP��Q��R�AS��T�AU��V�AX��]��k��l7m�Jo�Jp��r7t>u>w��y�J{>|7}�J��r��r��r��r��r��r��r�����������������������A��A��A��A��A��A��A��A��A��A��A��A��A�����A��A��A��A��A��A�������������r�A���A�A�����A�A�A�������J�J�7�7�'�7�7�'�J�'�J�J��r��"##��&��*��2��4��k��m��o��p��y��}��������������������������������-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������E
E
E��lErEtdud{d|E�E�E��E�E����
��
��Y��\��l��r��t��u��{��|����������������D��F��G��H��R��T���������������������������������������������������������������������
��
��Y��\��l��r��t��u��{��|������������������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������"�h�hD��F��G��H��R��T��������������������������������������������������������������������h�h�h.	���r�r��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������r�r�r���	��������$�������������������������������D��F��G��H��R��T�������������������������������������������������������������������.	���h�h��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������h�h�h���-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U	�T�T$�T9:::<(?:��T��T��T��T��T��T��T�(�T�(��T	�T�T$�T9:::<(?:��T��T��T��T��T��T��T�(�T�(��T&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���	�T�T$�T9:::<(?:��T��T��T��T��T��T��T�(�T�(��T>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������
��m��o��y��}�������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������	����$����������������������������	����$����������������������������	����$����������������������������	����$����������������������������m7	�r
7
7�'�J�'�r����"2#��$�r&��*��-�82��4��D�AF�AG�AH�AJ�WP��Q��R�AS��T�AU��V�AX��]��k��l7m�Jo�Jp��r7t>u>w��y�J{>|7}�J��r��r��r��r��r��r��r�����������������������A��A��A��A��A��A��A��A��A��A��A��A��A�����A��A��A��A��A��A�������������r�A���A�A�����A�A�A�������J�J�7�7�'�7�7�'�J�'�J�J��r$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�������������������������������������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������.	���r�r��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������r�r�r�����
����
��@��[��`��l��r��|������.	���r�r��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������r�r�r���:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������
��m��o��y��}���������
����
��@��[��`��l��r��|������"�i
�i
�i��9�^:��<�h?�^Y��Z��\��l�im��o��r�it�}u�}y��{�}|�i}����h�������h���i�i�i�i�����
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|������m7	�r
7
7�'�J�'�r����"2#��$�r&��*��-�82��4��D�AF�AG�AH�AJ�WP��Q��R�AS��T�AU��V�AX��]��k��l7m�Jo�Jp��r7t>u>w��y�J{>|7}�J��r��r��r��r��r��r��r�����������������������A��A��A��A��A��A��A��A��A��A��A��A��A�����A��A��A��A��A��A�������������r�A���A�A�����A�A�A�������J�J�7�7�'�7�7�'�J�'�J�J��r��"##��&��*��2��4��k��m��o��p��y��}����������������������������������"##��&��*��2��4��k��m��o��p��y��}����������������������������������"##��&��*��2��4��k��m��o��p��y��}��������������������������������&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���0��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���&��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^���>	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U:�J
�J
�J��#��&��*��->2��4��7�|8��9��:��<�h?��W��Y��Z��\��k��l�Jm��o��p��r�Jt�Iu�Iy��{�I|�J}�������������������������������������h�����������h�����J�J�J�J������r

#$&')-./2345789:;<=>?EHIKNPQRSUYZ[\^klmoprtuy{|}����������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I��xx�t���P`KtyPL�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ-��(8<@J@GBhf[[		QCQ
D@?($#-$
+>32#'.54>54&#"#"'4632#"&!!7!!�9DO.?gI)-60#z
-5-I9)8(c>0((0>���22c��u&#@[87P;+&%ia/(&.8'3<��/@)(?��g6,����
!&@#QCSD

+#>74>32#".FuF�!-."".-!���-UV\44\VU->��."".-""-����
*@'	BQD

$+#"&=!#"&=�$"%�$"%��ߛ""�!�ߛ""�!6��<@H@E
Y	CQ
C
D@?>=<<6431.-(&##!#!+#"&547#+#"546?3#7>;>;3323+32%3#�Nq�t0M��+�j�'&�v
-N���Mv�&%�j����j���X]��#�(
7KGk �X�	��G��
7KG�bf8CN�@J)?BAK�	PX@$jhfkCDK�
PX@$jhfkCD@$jhfkCDYY�#'#%+.'7632.54>?>;#".'+4.'>�w�?=+A\Dg>w]9B|�o@&g�30%6I2]@~c>F��u"@�":N,`JsP)�5H)WHkG"aKN&1/1KoRS�xL��Q;@"!�2IlO_��S��,A0#�2Oh�*?1%�-DUZ����'1EY�K�PX@'[	[SC		S
DK� PX@+[	[SC
C		SD@/[	[CSC
C		SDYY@
VT((%#&((($
+#".54>324.#"32>>;+#".54>324.#"32>�;`{A8^C%6]}F8^C&�$1(G4$1'G5w|��
~:`|A8]C%6]}F8]D%�$1(G5$1'G6xc�j7)MoFc�k8)NpH2H."JsQ1E-!GqU��
�c�i7)MnFc�l8)NpH2G."JrQ1F-!Hr9����BN�@;LK.&BK�PX@*hSCS
CS
D@(hSCS
CSDY@IG20)'#!
BB+2#"'.#">7>;#"./#".54>7.54>3267�FrR-e)<)3R; /2B)6w[G�`^�R�b65]}H'%9i��q#=T1_�F��sr�,Nj>!8-&C[49x?�gB�Gs�`��zWf1[�QO�u\ B�?R�j>��8W<VF�>�����
@	BQD

$+#"&=�$"%��ߛ""�!z��S
�(+.547*Q*;& U�uGJrN)�J���C.V���S�	�/r�������
�(+4.'&546?
'.547>9)R);& T�uFIsN)1I���C/W���T������.r��a��6C@0,+'$#	BK�PX@kD@
jaY@
66+7>7'767&/7&546?3>?'.'i�!�$$$�3�T
	� �# �2�a�!

dIefIe��!
dIefHd
�s�A�.@+jkMRF+!!#!7!�5��f5�5�i�6��S��Q���2��$�@
?S
D"+74632'&54>7#"&2A6.1F-
 *'4A{/B'3-a_Z&&5E*Ea<�@MQE+!!s��8��-��'�@SD($+74>32#".-"--""--"n."".-""-����.�	@kD#"++>;]:I�4 I "�!O��j�',@)SCSD''	+2#".54>2>54.#"�_�sAb��~`�sAb�� T�qB-Le8T�qB-Le�I�ے���kI�ۓ�J�k��Y��x�j0Y���x�i0���*@'
BhCR
D$+7!7#"&/3!!�6{��,֌����M�
Kq��/J�4;@80BhSCQ
D-+'%
44+2>3!2!7>7>54.#"#"&/>�S�f99b�J�Q)R&��HIrO)#>U2p�%#Wc���/Z�R[��~C�x
"5;)�AusxE6R6ufb�f4]��X�CU@R?
Bhh[SCSD<:64.-,+#!CC	+2#".'763232>54.#7>54.#"#"&/>�T�b6*MmCz{V��jd�jBP,B\AR�W.N�f��">T2r�&#Xc���.UxIOyZ;#�pl�{B.\�_:W:8Zr;0Q;"{��5P5veb�f4-f�'@$
B\C
D!#+3+#!"&/3>7!���.�/��"+����b��{W���7�9D��F�.@@=,+Bh[QCSD(#&(""+#!632#".'763232>54.#"'!<37�9so\i�i4]��u?p_N=/C_CS�d7$HnK2sDg��M$/�9d�Q~͐O)6J%8e�V9]C$�h��0�22@/B[CSD/-%#	+2#".54>7>;>32>54.#"�O�e:T��vb�l99W<�3��.%7���$Dd@O�a6'Ge>O�^5l2`�Wo��P<n�_>wy}E���3,$)�!;cH(5^�L=cE%8_~���$@!BQC
D$'++>7!"&=7�
	�'����D-�+�)uR��>�3GD@AB[SCSD54! ?=4G5G+) 3!3	+".5467.54>32'2>54.#"2>54.#"c�r>��aaH�iZ�e6��t|Q��cN~Z0-Lc5Bz_9$Fd�QqG :X;HoL'9Y3^�Q��)&�bX�q@4[{F��-#�ui�w?�.RtF@Z9$LwS5W?#�4Sf3-N;"-Lh:+P=%�w�12@/B[SC
D.,&$	+".54>32+>74.#"32>5K�`7R��p^�h8;T6�c0��.=�P%D_:I{Z3�xO~Y0M0\�Ti��N;j�XH}vvB�<6-/�:_D%2Y{Ju�5Zv-����';K�$PX@SCSD@[SDY�((($+74>32#".4>32#".-"--""--"d"--""--"n."".-""-	."".-""-.����,D�
?K�$PX@SCS
D@[S
DY@	)'"+74632'&54>7#"&4>32#"..A6.1F-
 *'4Ai"--""--"{/B'3-a_Z&&5E*E."".-""-���W�(+�6�#/+��-��
�
�'0����!@YMQE+!!!!�Z��:X��=�Ѓ}��X�(+	7>7%>7.'%.54>7����/+�Z�|�o
�
�'0�n����%95@2BhfSCSD(&#*$+>32#7>54&#"#"'4>32#".�!KWc8FqP*/HWO=
%w5LWI1_Q8R;'

!-."".-!4(*Je;TvW?;@+��0JA>H[=NZ$��."".-""-M��MTdf@c
[
<Bh[

[	[OSGVU^\UdVdLJ@>9731)'TT
+%"&'#".54>3232>54.#"3267>32#".54>32%2>7&#"FR?�H0G. ?[w�T?[)�!3aK.Dz�e��lP��v��Lk�����_<k���muϛZEv��1<:8k#)I�a92�JMPE#<R0<~uhN-��4L#F�it�v<u�્ړL>03HR_����ɥu@O�؊םYu3WC(	Gr�I9H����
$@!BZC
D# +!#"&'!+3!.'��N���	%����>�
^����zQB&&Cae�*=@:B[SCS
D*(" !+3!2#!2>54&#%32>54&+a��p�h2%JoJ��G��y�?OxP(�����QyQ(|���-SwI@tbL�pc�xB��*NnE_q�+MlAggd����/D@ABhfSCSD'%" 
//+%2>32#".546$32#".#"�BfN7)	A^���̍Kt��L|fS$@(EmWtʔU:g�� ' Qfq\�䉻6�{2F+N

(/(]���o�{Ba=�@SCS
D!(!$+#!!24.#!!2>=q����ՔP�7g�]�Ό2xƎO1����v�Z��l�yA��[��aA�(@%YQCQ
D+!!!!!!.��<��=u�ϱ/�����aA�	"@YQC
D+!!!#!.��?��L��/�����d��%�:G@D&
Bh[SCSD20+)" ::+%2>7#"&50>17!#".546$32#"'.#"�4ZOI$'�	�C6s��R�ӖQs��S�nY%<
5KjK{͓R;l��D

O��':']�芹3�z2D(N


)%^���q�~CaE� @ZC
D+!#!#3!3��Q�EP���O�O���r��}����@C
D+!#3=���������QK�PX�B�BYK�PX@CSD@hCSDY�#%"+#"&'7>3232>73���6^0
!+4\J3u���m"N~\�r%� &@#
B\C
D'(% +3267>;#".'.+#3�B#-�,���%#����'+QQ���" ��	
#�Y
	<�n�af�@CR
D+%!!3/7������av�"&@#BhC
D!6(+67>;#>7+"'#3243����	��/.������[�'*'�	�g#.�~++�.���	�{aE�@BC
D!+2>73#"&'#3rj���^�����`���)�gH���d����)@SCSD(((&+#".546$324.#"32>�4_���k�ӕOr���ӕO�8g�]vƎP8g�]xƎO2zڹ�h8^�扷3�|_��m�|D_���m�|C^��ri�/@,[SC
D
!+#!2#32>54.#nB���r�m6J�υtJ�U�X."DhE���6d�Vq��M�4]�L:\A#d����0P�BK�PX@SCSCD@kSCSDY�(((%&+#"&'#".546$324.#"32>�3^�R!�"5�6q<�ӕOr���ӕO�8g�]vƎP8g�]xƎO2yظ�4�w^�扷3�|_��m�|D_���m�|C^��rU�#7@4B[SC
D#",!+#!2#"'.#32>54&#vJ��yr�m54b�W 5�1��
"%/D�U�Y-��Y���0YNW�wS&��(���0WwGms����==@:=BhfSCSD;9(&#!#"+#".#"#"&'7>3232>54.54>32�&;T?@dE$0NeheN0F��t��AB,DdKEoM*0NcicN0@x�ln�9�#)#(E\54G3')2JhJf��PeVY-7-,NmB7I2%&0JlOX�|JTI{�� @QC
D+!#!7��Y����W��������$�#@ CSD+%2>73#".5473vP�eAk�jc��{o�w>j�k'Ko�>m�Zi��{ӛXH��j-/i��&K|Z1|W�@BC
D, +32>7>;#|���%��7��� M**L!�g���,!@'
BC
D,> +32>7>;2>7>;#.'#���
�$+�

�'�����
�/���
( <��
:  :��gO&&������@BC
D'"(!+	3267>;	#"&'+�	
l��z���
�Q$�������l��
q
��$y��@BC
D,"+#32>7>;�G�G����
}!�=��;^��44>��$@!QCQ
D+!!7>7!7�	����"	l�7�<�l�;��!��W�'@$[OQE!#+!+32!�W�ř��C��	l��q�	@kD# +32#"&'lI +iH2�"�9" ���)�'@$
B[OQE!#+!!7>;#"&57�X�	����C80��@
BkD+!+3#"&'.'+>rg��
����z`+,+��������X@MQE+!7��+�ttM���	@kD		+2#"&'�
kc���0���+^@ BK�"PX@SCS
D@SC
CSDY@
$!++*' +!#"&57#".54>322>7.#"0\#$S]f7<bE&-St��ZA{<��1^TI++<pbP9 $�@hI(/[�VZ��]3��=l�Y\'Fat�E�O����,�K�"PX@ B@ BYK�	PX@CSCTDK�"PX@CSCTD@!CSC
CTDYY@$",,(%+33>32#"&'#"32>54&O��X&X`h6��"?Ym�FQ�*
�0b[P &j74\L<)V��4=eF'��R���_6D?Au<j�W��6-,Kes{<w|<��b/d�BK�	PX@$hfSCSD@$hfSCSDY�%(#%($+%#".54>32#".#"32>3234]^e:X�[/M��rd�38+A3E{\58Q6-F6)!,�9L-<m�\{�hGDC
K��f>eG'!65���*s@ BK�"PX@CSCS
D@!CSC
CSDY@$"**
+!"&57#"&54>323%2>7.#"�#&Zck7��"?Ym�FJ{+E���90a[O!&j6OY0V$�AjK)��R���^6:6-�?�;i�V5,^��Yw};��q*9b@
0BK�	PX@hSCSD@hSCSDY@,++9,9*&%*+32>32#".54>32%">54.q6���uv0K;-& ,3afo@W�`4!?[u�QMpH#��?jR:��d #8BoYB��#75K2:k�^N��xW2,DRB4[{G19B$' ?���#g@
BK�2PX@"SCQCQD@MWSDY@
##T%#++'.5737>32#"&#"3ve.KF�d�AcI>3	+I8&�a���KW
NbW�]0\8ZA]������;K^�@9$BK�PX@+	[[CSCSD@.h	[[SCSDY@=<[YSQEC<K=K4320(&
+#".54>32.5467#".54>32!2>54&#"4&'.#"32>0"(")1)Bz�mW�e7R��Y$G#	&^<:eL,5f�bnQ~	
�~6R9YN6R8W
6_*RxN&yoBmM+�2PD<<?%*DHU:Gb9$B]8OrJ")B)&JoJH�mB4;9��/M`1XZ,J^3Z^�-	0?"HL#:NO��,@)BCSC
D&#+33>32#>54&#"O��SO�es|L�L=B-_ZNA��Tvy��+�{�%RP1ZN��_��GK�	PX@SCC
D@SCC
DY@

+##".54>32�z�z�#,,!",,#���>-##-.##/�g����(Y�	BK�	PX@SCCSD@SCCSDY@%#U%+#"&'7>323267#".54>32��-LiC#2GE
��#-+!"+,#���=iN-

`
IQ@>-##-.##/N��0@-B\CC
D%(%!+3267>;#"&'.+#�jO��y0���
";�����W�s
 ����X��@C
D+33X�����?G�0Z@BK�"PX@SC
D@CSC
DY@00&%$$!	+332>32>32#654&#"#>54&#"GzY<K�cgbL�hpoL�L2;+VPEA�M/;0YOD?�<�~�������2�{�1(KG+S{P���0GD0[�R��G�P@
BK�"PX@SC
D@CSC
DY@&$!+332>32#>54&#"GyY<Q�mq}L�L=A0c\O:�<���*�{�%RO4_�S��7���#NK�	PX@SCSD@SCSDY@##	+%2>54&#"".54>32�IxT.nhJwT.mYS�d8P��nS�d8P��}P��_��O��_���9l�d��b9l�c�c���+�@BK�	PX@SCSCDK�"PX@SCSCD@!CSCSCDYY@#!++(&!+32>32#"&'"32>54&�Y<&Zcl8��"?Ym�FK|*6�0c\O &k74\L<)V��M<�BkL)��R���_6;7�E�<l�W��7-,Kes{<w|0���0b@%
	BK�	PX@SCSCD@SCSCDY@
 )&0 0*, +#"&54>5#".54>322>7.#"p ;#PZb4<bE&-St��ZA{<��0]TH-+<pbP9 ��%�;^C$/[�VZ��]3��<j�Wc'Fat�E�G��,@)
BSC
D#*!+332>32&#"GzY A�Y** /,a�38��������*
��99@69BhfSCSD/#%/#"+#".#"#"&'7>3232>54.54>32�!/D0-J6>^m^>7g�Za�/, 0I81O7>^l^>3`�V[�2S,;!/8)&:ZHF�a:E6D
#2C&3<(#7XI@w\7=4_���>0b�+BK�2PX@#jhQCSD@!jh\SDY@	%#(+&+74>7#"&54>?>;!!32>32#"&�?q
�K^,
��=/)(	%0}?ap�$:/�9����)231	U+1j`����#L�BK�"PX@CT
D@C
CTDY@##*!&+32>73#"&54>57#"&5467bL=B.a[N?�zX"Q�jq}L��|$RP2\�P�"("Q����*�K��@BC
D, +32>7>;#K��:�����t%J$$I&��Q��. @'BC
D*!,< +32>7>;2>7>;#"'.'+Q�]Jq
��W�{
�����t#A  A#��p#B! C#��"�! �R"����@BC
D(")!+32>7>;	#"&'+h���
�����
��
�!���/�+�����Q����@
BCD,"!++32>7>;<)�����	@���)����*+Y�@QCQ
D+!!7>7!7!P����6	K���#�&�J
#ߌ1��Y�E7@4&:B[[OSG=;303++4&#72654.54>;+";2#".54>�85
JI-Y�V1	
'B/"3;5@#C=
2EfC" & �4Bhw|575a�i7MEoQ;?<MgA![?<rsu?FU%(Gb:Bxsq���5�@QD+3#����������G7@4<(B[[OSG?=525++3"+7>;2>5<&454>7.54>54&+"&54>5732�85
JI-Y�V1	

'B/"3;5@#C=
2EfC" & 4Bhw|575a�i7M

	EoQ<?;LhA![?<rsu?FU%(Gb:Bxsq9��9@6jkO[SG
+2673#".#"#4>32�AI�%Ef@4f_V$AI�%EeA4f_VeUFCpP, '!TGCpP-!'!����
!&@#SCQD

+>734>32#".�C

hB."--""--"��-UW\45\VU-���."".-""-��&�/8�@%BK�	PX@.jhfkSCSD@.jhfkSCSDY@
##'#+.54>?>;#".'>32+�R�`4M�ф"@-R}04+=*�@[?*	'!S`i6!@�tj�Z�]0
	Dq�`~מ\��?1<	��"<#6&����Dv���>?@<+Bh[SCS
D&&%#%&"	+#!>3!#!7>7#7>;>32#"&'.#"!z�Y	60<�	
�;#9+$�q!P��mT{X9K#2H4AkQ3 ���Kj*I
p
/C..F	^�zF&B[5,

0$+OpE��F��+`#7?@<!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"!�[�,h:9f+�Y�"!�[�,h99e,�Z�!�#>Q//S=$$=S//Q>#�9e,�Z�"!�[�,g:9f+�\�!!�[�,g:.Q=$$=Q./R>##>R~��"8@5
B
Z	YC
D"! ,!+!32>7>;!!!!#!7!7!�6�ʐ�
	_"��6��
V��'�'��
V
��p'��!:; =��cic��Aci���5�@YQD+3#3#����������;���FVA@>FTL;!BhfWSDDB+)&$#!+#".#"#"&'7>3232>54.5467.54>32>54.'R!/B0/K6DfvfDY_%-6f�^a�00	!0I:2O7)BUYUB)ag%.3a�W[�/��:Zn3:26Ug1E9�.>".A88JdH[�)!U9J�`7D6B
"3E))<0(*0?R8Y�'"X>AvZ5>6��/B82V51D70#P^���'@SD((($+#".54>32#".54>32? )(() g))))((**((**]���+Ga�@
BK�	PX@5h
f[[		SCSD@5h
f[[		SCSDY@\ZPNB@42(&+++2#".54>32#".#"32>%4>32#".732>54.#";		<9�tb�s?Dz�bm�9.2M:GpP**Kg>?V9!�.4`���ee���_44_���ed���`4e,Qs��XX��sR-c��X��sQ,�@BIDz�de�yCC8A-TxKMyR+�e���`44`���ed���`44`���eY��tS--St��Y��e.Sv���?��-9L@I!Bh[	WSD/.32.9/9%#
--
+"&/#"&54>?6454&#"#"&/>32'26?.04AR%V�j(0"0$6xD,D//�.G$
B\9*H	1 ED(K;&&.6
(2.4G(��P&#m*"����%�%(+77�4�

o ;]4�

o ;���
��
 ����
��
 �>�=K�	PX@_MQE@kMQEY�+!#!�[4�$�9�^ a<�@MQE+!!s��8��^���3IV��>BK�	PX@/h		[
[SCSD@/h		[
[SCSDY@44VTLJ4I4H)!*,,&+4>32#".732>54.#"#!2#"'.#'32>54.+^4`���ee���`44`���ee���`4e,Rr��XX��sR-c�焄�b� ��kj
�!�	Ps8M/+F4��e���`44`���ed���`44`���eY��tS--St��Y��ee���|}z^�
��.
r(:&%8$p��A@MQE+!!~��Aq�'�'@WSD((($+4>32#".732>54.#"�3XvDEwX22XwEDvX3}6I**I66I**I6hCvW22WvCBuW33WuA*I66I**J77J3PK�<@9jhZMQE
	+!!#!7!!!�/��e-�-�j�/����D������r�{�$����d-9@6+	Bh[SD(&#!
--+26;2!7>?>54&#"#"&/>�`m0?"�2*��
�6(6**A!C�ddS,HA<�*�89:-0+2ji�|�d:S@P6Bhh[[SD31.,('&%::	+2#".'763232>54&#7>54&#"#"&/>�.K5�980Nd48Q7"	:
+!"5%FV[S5,2=@5HWd->$�-E7<]?!1G/!%011Y=>,-.+4P4���	@kD	#++7>3��f�"��������%2@/BCT
CD%%'%!&+32673#"&=#"&'#"&5<7\SVQF�=]�|gF�PA^#U %��Y
RYJB�
lHC/+$H �� k�7��*@'hiSD+##!#".54>3�ܵ���붝j]�i9H��q���7�7]2Z~MZ�tC����@OSG($+4>32#".�)67((76)Q8((86))6��w
�K�PX@B@BYK�	PX@^TDK�PX@jTD@jjTDYY@
+232654&'73#"&'76E(+GB:k JC!;Q0&B�	(#	�R?.$9'5��z^N�
BK�2PX@jjQD@jjMRFY�$+37#"&/733!�6
y �hNy�u��,\		6���]�<��!)@&WSD!!	+2#".54>2654&#"�:]A"0UxH;^A#0Wy
ZYA?2E+@�%Ea<R�]2%Eb<Q�]2���uKU&C^8KTw���%�%(+'&54767&'&54?'&54767&'&54?���5
�
	p!;���5
�
	p!;�{

 �|�{

 �k�+1V@S%/
Bhh
Z\	C
D10+*)('&$##!#
+3+#7!"&/3+>;37#"&/733!>73�n
Uj���w��/F�1!G�u�6
y �hNy�u����I��>�] [���,\		6���]�,���\�	7Hb@_B;5Bhh
Z[	CT
D
HGFEDC?=9820,*
77#"
+%+>;26;2!7>?>54&#"#"&/>%37#"&/733!�/F�1!G�`m3C$�2*��
�6(6*/=	
+����6
y �hNy�u5 [�IdS-LC>!�8*�89:-04)
ji<�,\		6���]�z�TZ~@{P
"/
	X
B

h	
	
h

h	[

[\

SC
DZYMKGEA@?>8631+)TT##!#+3+#7!"&/3+>;%2#".'763232>54&#7>54&#"#"&/>>73n
Uj���w��/F�1!G�u.K5�980Nd48Q7"	:
46"5%FV[S5,2@15HW
���I��>�] [->$�-E7<]?!1G/,2%011Y=>,-0%	4P4�c,����u';5@2BhfSCSD(&#,$+#".54>?332>324>32#".u!LWb8DoQ,/IWN:	$u	1HSF/-;!7S<'��!-."".-!�4''HgAQsS<56$��-B:8CV;)?+$."".-""-������&$	O������&$_������&$
O������&$O������&$
O�����-&$P����9@6AYYQCS
D#	+!!!!!!!+!��L�*�:��&�������������$@d����J�K�PX@9=HB@9=HBYK�	PX@0hfSCSC	SDK�PX@0hfSCSC	SD@7hf	hSCSCSDYY@FD<;64/-%# JJ
+232654&'7.546$32#".#"32>32#"&'76�(+GB0r�~Bt��L|fS$@(EmWtʔU:g�UBfN7)	AWߒJC!;Q0&B�	(#	vd�ڀ�6�{2F+N

(/(]���o�{B ' Q^o:?.$9'5��aA�&(	$��aA�&($��aA�&(
$��aA�&(
$��V
�&,	����&,��g��&,
�����&,
E��!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>S�P�ԕOp��Q�{7f�]��>\
��?2xŎN	�Z�㈷���v��l�yA�n��[����aE�&1���d����&2	���d����&2���d����&2
���d����&2���d����&2
�l�9W�	(+		'	7	9�|8f��nP���g0������]d��]e[]��Z0����%1=g@5*)#
BK� PX@kCSCSD@jkSCSDY�**'(%&+#"&'+.546$327>;.#"%4&'32>�4_���ka�Cm=J�MRr��h�EY`�EJ��+)�2�OvƎP�$"�<0wHxƎO2zڹ�h82/�	T錷3�|;6p�T��a�<.1_��*X�;��&'^�������$�&8	������$�&8������$�&8
������$�&8
���y��&<<��	�����++���,@)\[C
D"( +32+#332>54&#��r�n6J�΅�!���3J�U�X.���6c�Uq��L����a��4]�Lt�3�&�P}@JGBAK�,PX@(hSCSCQD@%hWSCSDY@LKFD=;%# PP+2#"&'7>3232>54.54>54.#"+'&573>�Y~Q&/FQF/+@K@+>i�OY�10	"-@0*G3.DQD.1JWJ1-I4>mU:
l.KF�n(�^���6Se/D`H638&#/)+=XAV�_3E6B"6I*0?.(4H8>XE:@P8;0Ct�U���KW!M\��K��0����&DCi��0����&Dv+��0����&D�"��0����&D�"��0����&Dj"��0����&D�6���GUbG@E?"BK�	PX@5hh

[S	CSDK�PX@5hh

[S	CSDK�,PX@?hh

[S	CSCSD@Jhh

[S	CS	CSCSDYYY@&WV\[VbWbQOIHCA<:75/.(& 
	GG+232>32#"&'#"&54>7>54#"#"&/>32>32>7">54&]<fK*7��zl1K;-&,3afo@i�' Ydj1��@���<U?0W�hlz<���x�g-NA4]K4	�<bI2��c(K%BY39lU7

��#74L1rr>W8wxG�c>(�!)!7QP`UT^��%<Q2HE%JoJ�-TvH$3@$9D<��bI�K�PX@6<GB@6<GBYK�	PX@0hfSCSC	SDK�PX@0hfSCSC	SD@7hf	hSCSCSDYY@EC;:42-+#!II
+232654&'7.54>32#".#"32>32#"&'76(+GB2JqL'M��rd�38+A3E{\58Q6-F6)!,/TTW1JC!;Q0&B�	(#	y
Ck�T{�hGDC
K��f>eG'!63H-<?.$9'5��;��q�&HC���;����&Hv���;��q�&H����;����&Hj���=��&�C���_u�&�v���"^�&�����/w�&�j�<����1E6@37-B10@[SD32=;2E3E+)!+.54?.'&54?7#".54>32.'2>7.#"��)`7%X�F�qQ^F�ȂR�e8E}�ia�0LL�!AoX>	&<U9KwR+"=S)		^%
7@3|9	ST���k9k�_l��U[\��E���3l�v,Q?&<i�QCjI'��G��&Q����++��7����&RC����++��7����&Rv����++��7����&R�����++��7����&R�����++��7����&Rj����++s�A~'+@([YOSG(&(%+!!4>32#"&4>32#"&���B�&2'&21;X&2'&20<��2&(1$>�f2&(1$>���%)4�@32#"BK�	PX@!CSCSCDK�PX@!CSCSCDK�PX@!kCSCSD@!jkSCSDYYY@+**4+4&$+"'+7.54>327>;&#"2>54&'�|Z$:C�(+P��n}["  Z�'+P�����8NJzY1�I{Y1
�F7=1�5�X��b@.�5�W�c�YBZ-L���sM��g,K ��,��`����&XC����++��`����&Xv����++��`����&X�����++��`����&Xj����++��Q����&\v����++%����,p@ BK�	PX@!CSCSCD@!CSCSCDY@$",,(%+3>32#"&'#"32>54&%ݰY&X`h6��"?Ym�FK{+.'0b\O!&k74\L<)V���4=eF'��R���_6;6��&�<j�W��6,,Kes{<w|��Q����&\j����++������'0�K�PX@
-B@
-BYK�PX@!ZC
C	SD@(	hZC
CSDY@)($"''
+2#"&5467#"&'!+3#32>!.'�
Y0LRVB
N���	%���_-&( ���
�@F:?n)^����g!*3 '	�QB&&C0���4F(K�PX@&;BK�"PX@&;B@&;BYYK�	PX@#SC	SCSDK�PX@#SC	SCSDK�"PX@*hSC	SCSD@.hSC
C	SCSDYYY@65?<5F6F1/('$"44
+2#"&54>7.57#".54>32#32>2>7.#">
Y0LR*:"$S]f7<bE&-St��ZA{<y-&( �C1^TI++<pbP9 �@F: =81�@hI(/[�VZ��]3�,!*3 '	\=l�Y\'Fat�E���d����&&���<��o�&Fv����++a��A�%�K�PX�B�	BYK�PX@*YQCQ
C	
SD@1
		hYQCQ
C		SDY@" 
%%+2#"&5467!!!!!!#32>G
Y0LRVB���/��<��=ui-&( �@F:?n)������!*3 '	;��qAP�K�PX@G2B@G2BYK�	PX@*h	SCSCSDK�PX@*h	SCSCSD@1hh	SCSCSDYY@CBBPCP><0.)'
AA
+2#"&5467.54>3232>3232>">54.I
Y0LRI9U�_2!?[u�QMpH#6���uv0K;-& ,M�T+$( ?jR:��d #8�@F::f(<j�]N��xW2,DR%BoYB��#7P]!)2 '	Y4[{G19B$' _��@C
D+#�z�z�����!@
BCR
D+%!!76?3�m��=7�E��Y�&�}���-`�
W�Lb�@BC
D+4?37#L�N�F��\�T��D��Jf!I��E��aE�&1���G��&Qv���++d����2'@
BK�PX@"YS
C	S
DK�PX@-YS
CS
C	S
DK� PX@*YSCQ
C	S
DK�"PX@4YSCQ
CS
C		S
D@2YSCQ
CQ
C		SDYYYY@/-%#(#+!!!!!7#".54>324.#"32>���;��=q��Z��u��Fh���K�kS h/Z�Sm��I0[�Sm��H�������r~\�ㇹ6�~&Ge?��j�|Dc���k�|Cb��.���4FU�@
L2"BK�	PX@$hS	C
SD@$hS	C
SDY@ HG65GUHU><5F6F0.&$ 44+232>32#"&'#".54>32>2>54&#"">54.�AhJ'8\��~ym0K;-&,2afp@i�'E΁QzQ)U��kk�#?��IQ}U+]aN|X/.JH;fP8��h&'="?X5)LC;0&
��#74L1tsny;e�H���Xe[Zf�vN��qs�L��y/VB(.YQ3:A!*!�����&6���
��#�&Vv���++������&6���
��,�&V�~���++��y��&<
<��	�����++����&=8��Y�&]v����++���&=8��Y�&]�����++����&=8��Y�&]�����++��i�'6@3
BYSCSD''#"+#763>7'.546767376$3#"!��2���:.UH8���*0�/UI9+G�!˹[7:^E�	
�ſ_;^E�}Q���@BkD, +#"&/.'+3�rd�w����	q���@BkD( +32?>;#qxd
�s��������p��Aq���� @WD
	+".5467332>73r>V6y4B'6#z&Eg�!:M-
3?)9!6aI+��@SD($+#".54>32#.-""-.#:-""-/##/�kJ�=K�PX@WSD@[OSGY�$&($+4>32#".732654&#"� 7H()I8  8I)(H7 d6/-77-/6#*D22D*)D00D),88,-88/��t
YK�PX@B@@B@YK�PX@
SD@jSDY@+2#"&54>732>R
Y0LR.@%W-&( �@F:"@:2
!*3 '	h���QK�*PX@WSD@O[SGY@	+273#".#"#>32�Ai!2B% 5-) (j"3A%!4-()X/M7#-,.N8#��)�	#@ SD




	#++7>3!+7>3�H�"��S� ������������!Y�BK�(PX@SCS
D@SC
CSDY@! 6##++#!#"&'7>3267#7>3�"|l�k��O�z=<;N��D#��u�}w�H	?C�?
���@MQE+!!����}�o�@MQE+!!���7�}�����(+.5467�j^/	!

�%J%d�L	
09@"6
�����(+'&5467>54&'&547pj^0	!

�%J%d�L	
08@#6
����(+7'&5467>54&'&547�j^0	!

�%J%d�L	
08@#6
����1�(+.5467.5467�j^/	!

�j^/	!

�%J%d�L	
09@"6
*%J%d�L	
09@"6
����1�(+'&5467>54&'&547%'&5467>54&'&547yj^0	!

�j^0	!

�%J%d�L	
08@#6
*%J%d�L	
08@#6
�����1�(+7'&5467>54&'&547%'&5467>54&'&547�j^0	!

�j^0	!

�%J%d�L	
08@#6
*%J%d�L	
08@#6
�����%,@)BCSCD$&$"+>3632>32!#"&'!�,*?�G#)33#P$KIF &!��6H0+u6���/��,
	)
�D���B����9E@B)!("B[C	SCD98'%#&$"
+>3632>32!!#.'#"&'#"&5<>7!!�,*?�G#)33#P$KIF &"��Pj.*?�G!0+O$KIG&!kP���/��,
	'(�v:/�/�
(�����,K�PX@SD@OSGY�($+4>32#".�:e�LM�e;;e�ML�e:SM�e;;e�MM�d;;d�-��,�';@SD((((($+74>32#".%4>32#".%4>32#".-"--""--""--""--"!..""..!n."".-""-."".-""-."".-""-Z����'1EYm��K�PX@+[	[SC
		S

DK� PX@/[	[SC
C
		S
D@3[	[CSC
C
		S
DYY@~|trjh`^VT((%#&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�;`{A8^C%6]}F8^C&�$1(G4$1'G5w|��
~:`|A8]C%6]}F8]D%�$1(G5$1'G6):`{A8^C%6]}F8]D%�$1(F5#1'F6xc�j7)MoFc�k8)NpH2H."JsQ1E-!GqU��
�c�i7)MnFc�l8)NpH2G."JrQ1F-!HrRc�i7)MnFc�l8)NpH2G."JrQ1F-!Hr�����(+7�4�

o ;���
��
 w����(+'&54767&'&54?���5
�
	p!;�{

 �c�	@C
D#"+'+>;?/F�1!G5 [*����B[@X	4	Bh		h
[	[SC
S


DBA?>=<861/"##%%$+3>32#".#"!#!!#!32>32#".'#7367#T�!w��p��;C&6J3M�oT0����d��RoI.ASގq�v>����̎LcWB 4f�`7#H&6��-6-DeqR�ҀcJG�I6�%B@?BhS	CS	D%%!4(
+>7>;#7+"'#32'###7�
�	fGk.�
}.iGg�
�<x;�P

3��rG��RH��Ne��eA�=/@,!BSCS
D=<,**+!>54.#"!"&546767!7.54>32!�5T�i<5a�Re��H*Lj@4�/LxR,0X|��`zȎNAw�f~
(�Jx�pZ�_0B��zMyY:�O%�Tv�Ta��tQ+L��prěl�a A���3HB@?"Bh[SCSD54?=4H5H#*++$+>32#".5467>32>7>54&#"#"&'2>7.#"�'JMT0ItQ,n�݉HwT._��g^�"	e\'C7)
:qdU .I5K{\:]9*8l�c?!���/X~P#sʔVRQ"=9����7o�r-S@'>m�Wgp����@	BCR
D+)3!.'��ԩ���

����9 !9�����$@!QCD+##!##7��Ȳ�ɱȼ����]��]����$@!BQCQD+!!!!7>7	&5<7�R�����A��
��!
���;4�;�A��^�@MQE+!!�[���Ll�"@Bj[
D,'!+!##"&5<>7!2>7>;p���"Ne[n� 
�[ A 7Q=���';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+%".'#".54>32>32%2>7.#"!2>54.#"{3P?1DNX35[C'7\xB3O@2DMX35\D'7]y��!<86$,4!&A1$1S%B1$1!;86%+4�!8K))K8!(KhAR�i=!9K))K9!(KiAR�i<�5E''E4!<T4&:&!<T4'9&4E''E5�{����!(@%BSCSD6'%"+>32#"#"&'7>32>7�)��#A*\n�Og}F D
6Q=,C��Wnu��f�_-
L
:^B����7^@[0!/"B[[	O[	SG42+)&$77

+2>7#".#"'>322>7#".#"'>32@80%(u=4c_\-90%
)wB4d^\81%
'v=4c_\-81%
)wB5c_[W
l0."("i31!)!��
m/-!(!
h31!)!��}kK�PX@)^_	ZMQE@'jk	ZMQEY@

+!733!!!#7!7!7!��}����w��5�}���Pw�S���ʃ����ZP�� @	@MQE+!!�3�-2/��*>��yz�
�z{�
�iP��@
@MQE+%!7!7>7%>7.'%.54657n��>���2/�a�P����z�
�z������"@
BMQE+3	#>7	&'��|��y|�	��
�5���4��&&EF,#&���~�-K�PX@kD@
jaY@	+3v���0>���'s@

BK�2PX@(SCQC
CQD@MWSC
DY@''W%#+#!+'&5737>32#"&#"�y�k�}f.KF�c(�Iz�k''#
SzU1	�`���KX#O8]�n=Z$HnK5>��!�@	BK�	PX@(SCQC
CQDK�&PX@(SCQC
CQDK�2PX@,CSCQC
CQD@$MWCSC
DYYY@!!#!%#	++'&5737>32;#.#"3wg.KF�b(�
Bn�aG�5w���-_+u��a���KX!Q7T�pA
�Z$
��7�G��2��5K�0PX@QD@MQEY@	+#2~mQR��U
	�	@ja		+2#"&/����
�
����'@OSG((($+#".54>32#".54>32P%##%X$$$$�$$%%$$%%�(��@MQE+!!�4���f
�@ja
#++7>3����
��
�	
f
��@Bja& +#"&/+73ǃr�	���
kk��
��@Bja!+#'327>3�ƒr�	���kk����(@%jOSG
+"&547332673�syo�NOp,Ie�^^c><4T< *@OSG($+#".54>32"-,!!,-"�,!!,,"",��V-!@[OSG$&($+4>32#".732654&#"�4D&'E44E'&D4Y6/-77-/6{'B//B'&@..@&+99+-88���1@.O[SG
+2673#".#"#>32)^.>% 82.'a.>%!82-|*%*G5 -%*H5 �
b�	+@(OSG




	#++7>3!+7>3(�S�'��]�)����

�}��
@kD


+2+�+$<]�

9^I
D��{��_<�	�ʓ^p�ӡ���-	��VO������'-�{����6�G�Z9��(z(�����s�2�a�-����O���/�]�-�D�h���R���-�.+���+}���M���a�dia+aaEdpa6�1���r�a�aoa�dhr�d�r�?{?��|Z�����y|(!�l(������8M�0Ob<5�;]?���$O�_�g�N�XGG�7�0�G

�_`�K�Q����QZ(1X�(���9�{�������~X��;8^=]x�k����a=^8p��3����8;k#�8����kw������������������������d+a+a+a+a6V6�6g6��Eoa�d�d�d�d�d�l�0?�?�?�?��yh�I3�0�0�0�0�0�0�b<�;�;�;�;�=�_�"�/�<G�7�7�7�7�7�s�````�Q%�Q���0�db<+a�;�_�YLoaG�d.�

�

�y|Z|Z|Z�8Q8q8p8�88�8/8h8�x�����������������,�,B���-OZV�VwA��*/�]+A��Y�����xL�=�{����+Z+i����>G>8G8U8�8�88f8�8�8*8�8�8�8g�P`�	�U�������U$�U96:0<-?6D��F��G��H��R��T��m��o��y��}����U��U��U��U��U��U��U�-����������������������������������������������������������U���������-����������U
	�U
��
��
��
�U
$�U
96
:0
<-
?6
D��
F��
G��
H��
R��
T��
m��
o��
y��
}��
��U
��U
��U
��U
��U
��U
��U
�-
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�U
��
��
��
��
�-
�
�
�
�
�
�
�
�
��U#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������
	�U
��
��
��
�U
$�U
96
:0
<-
?6
D��
F��
G��
H��
R��
T��
m��
o��
y��
}��
��U
��U
��U
��U
��U
��U
��U
�-
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�U
��
��
��
��
�-
�
�
�
�
�
�
�
�
��U��
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;��	��
��
���^�^��$��7�A9��;��<�@=��?��l��r��|�������������������������@���@���������^���^�^�����
��
���;#��&��*��2��4��7�59�,:�|<�;?�,Y�rZ��\�|k��l��m�;o�;p��r��y�;|��}�;�����������������������;��r��r�����;�;�;�����;�;�;6	��
6
6�A���A������":#��$��&��*��-�i2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l6m��o��p��r6tPuPw��y��{P|6}�������������������������������������������������������������������������������������������������������������������������������������������������������6�6�A�6�6�A��A�����#��#	��#
��#��#
��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#���$�J$
�J$
�J$��$#��$&��$*��$->$2��$4��$7�|$8��$9��$:��$<�h$?��$W��$Y��$Z��$\��$k��$l�J$m��$o��$p��$r�J$t�I$u�I$y��${�I$|�J$}��$���$���$���$���$���$���$���$���$���$���$���$��h$���$���$��$��$�h$��$��$�J$�J$�J$�J$��$��$��&��&m��&o��&y��&}��&�&�&�&�&�'��'	��'
��'��'
��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'���)	�|)�L)�L)�|)��)��)")$�|)-�:)D��)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)��|)��|)��|)��|)��|)��|)��|)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)�|)��)��)��)��)��)�L)�L)�L)��|-	��-��-$��-���-���-���-���-���-���-���-��-���..
.
.��.#��.&��.*��.2��.4��.I��.W��.Y��.Z��.\��.k��.l.m��.o��.p��.r.y��.|.}��.���.���.���.���.���.���.���.���.���.��.��.�.�.�.�.�.�.�.�.�/��/
��/
��/�;/#��/&��/*��/2��/4��/7�8/9�J/:�h/<�,/?�J/Y�|/Z��/\�|/k��/l��/m�;/o�;/p��/r��/t�,/u�,/y�;/{�,/|��/}�;/���/���/���/���/���/���/���/��,/��|/��|/��/��/�,/�;/�;/�/�/�/�/�;/�;/�;2��2	��2
��2��2
��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2���3	�v3�C3�C3�v3$�v3-�J3D��3F��3G��3H��3R��3T��3��v3��v3��v3��v3��v3��v3��v3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3�v3��3��3��3��3�C3�C3�C3��v4��4	��4
��4��4
��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4���5#��5&��5*��52��54��57��58��5k��5p��5���5���5���5���5���5���5���5���5���5���5���5��5��7	�|7�L7�L7�L7�|7�f7�f7"'7#��7$�|7&��7*��7-�872��74��7D�/7F�/7G�/7H�/7J�E7P�f7Q�f7R�/7S�f7T�/7U�f7V�J7X�f7Y�W7Z�7[�Z7\�L7]�_7k��7m�L7o�L7p��7w�f7y�L7}�L7��|7��|7��|7��|7��|7��|7��|7���7���7���7���7���7���7���7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��/7��f7��/7��/7��/7��/7��/7��/7��f7��f7��f7��f7��W7��W7�|7�/7��7�/7�/7�f7��7�/7�J7�J7�_7�_7�_7�L7�L7�L7�L7�L7�L7�L7�L7��|8	��8��8$��8���8���8���8���8���8���8���8��8���969	��9
69
69�A9��9�A9��9��9��9":9#��9$��9&��9*��9-�i92��94��9D��9F��9G��9H��9P��9Q��9R��9S��9T��9U��9V��9X��9Y��9Z��9\��9]��9k��9l69m��9o��9p��9r69tP9uP9w��9y��9{P9|69}��9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9��9��9��9��9��9��9��9��9��9��9��9��9��9�9�9�69�69�A9�69�69�A9�9�A9�9�9���:::	��:
::
::��:��:��:��:��:$��:-��:D��:F��:G��:H��:J��:P��:Q��:R��:S��:T��:U��:V��:X��:l::r::t<:u<:w��:{<:|::���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:��:�::�::�:�::�::�:�:���;;
;
;��;#��;&��;*��;2��;4��;I��;W��;Y��;Z��;\��;k��;l;m��;o��;p��;r;y��;|;}��;���;���;���;���;���;���;���;���;���;��;��;�;�;�;�;�;�;�;�;�<7<	�r<
7<
7<�'<�J<�'<�r<��<��<"2<#��<$�r<&��<*��<-�8<2��<4��<D�A<F�A<G�A<H�A<J�W<P��<Q��<R�A<S��<T�A<U��<V�A<X��<]��<k��<l7<m�J<o�J<p��<r7<t><u><w��<y�J<{><|7<}�J<��r<��r<��r<��r<��r<��r<��r<���<���<���<���<���<���<���<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<��A<���<��A<��A<��A<��A<��A<��A<���<���<���<���<�r<�A<��<�A<�A<��<��<�A<�A<�A<��<��<��<�J<�J<�7<�7<�'<�7<�7<�'<�J<�'<�J<�J<��r=��="#=#��=&��=*��=2��=4��=k��=m��=o��=p��=y��=}��=���=���=���=���=���=���=���=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>D��>F��>G��>H��>R��>T��>k��>p��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��>��?�J?
�J?
�J?��?#��?&��?*��?->?2��?4��?7�|?8��?9��?:��?<�h??��?W��?Y��?Z��?\��?k��?l�J?m��?o��?p��?r�J?t�I?u�I?y��?{�I?|�J?}��?���?���?���?���?���?���?���?���?���?���?���?��h?���?���?��?��?�h?��?��?�J?�J?�J?�J?��?��?��E��E
��E��E
��E@��E[��E`��El��Er��E|��E�E�E�E�H��H
��H��H
��H@��H[��H`��Hl��Hr��H|��H�H�H�H�IEI
EI
EI�I�IlEIrEItdIudI{dI|EI�EI�EI�I�EI�EI�I�K��K
��K
��KY��K\��Kl��Kr��Kt��Ku��K{��K|��K���K���K��K��K��K��ND��NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��N��P��P
��P
��PY��P\��Pl��Pr��Pt��Pu��P{��P|��P���P���P��P��P��P��Q��Q
��Q
��QY��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q���Q���Q��Q��Q��Q��R��R
��R��R
��R@��R[��R`��Rl��Rr��R|��R�R�R�R�S��S
��S��S
��S@��S[��S`��Sl��Sr��S|��S�S�S�S�U�hU�hUD��UF��UG��UH��UR��UT��U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U��U��U��U��U�hU�hU�hY	��Y�rY�rY��Y$��YD��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y��Y�rY�rY�rY���Z	��Z��Z��Z��Z$��Z���Z���Z���Z���Z���Z���Z���Z��Z�Z�Z�Z���[D��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��[��\	��\�h\�h\��\$��\D��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\��\�h\�h\�h\���^#��^&��^*��^2��^4��^D��^F��^G��^H��^R��^T��^k��^p��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��^��k��k	��k
��k��k
��k��k$��k7��k9��k;��k<��k=��k?��k@��k`��kl��kr��k|��k���k���k���k���k���k���k���k���k��k��k��k��k��k��k��k��k��k���l	�Ul��l��l��l�Ul$�Ul96l:0l<-l?6lD��lF��lG��lH��lR��lT��lm��lo��ly��l}��l��Ul��Ul��Ul��Ul��Ul��Ul��Ul�-l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�Ul��l��l��l��l�-l�l�l�l�l�l�l�l�l��Um��m	��m
��m
��m�^m�^m��m$��m7�Am9��m;��m<�@m=��m?��ml��mr��m|��m���m���m���m���m���m���m���m��@m��m�@m��m��m��m�m�m�^m�m�m�^m�^m���o��o	��o
��o
��o�^o�^o��o$��o7�Ao9��o;��o<�@o=��o?��ol��or��o|��o���o���o���o���o���o���o���o��@o��o�@o��o��o��o�o�o�^o�o�o�^o�^o���p��p	��p
��p��p
��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p���r	�Ur��r��r��r�Ur$�Ur96r:0r<-r?6rD��rF��rG��rH��rR��rT��rm��ro��ry��r}��r��Ur��Ur��Ur��Ur��Ur��Ur��Ur�-r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�Ur��r��r��r��r�-r�r�r�r�r�r�r�r�r��Ut	�Tt�Tt$�Tt9:t::t<(t?:t��Tt��Tt��Tt��Tt��Tt��Tt��Tt�(t�Tt�(t��Tu	�Tu�Tu$�Tu9:u::u<(u?:u��Tu��Tu��Tu��Tu��Tu��Tu��Tu�(u�Tu�(u��Ty��y	��y
��y
��y�^y�^y��y$��y7�Ay9��y;��y<�@y=��y?��yl��yr��y|��y���y���y���y���y���y���y���y��@y��y�@y��y��y��y�y�y�^y�y�y�^y�^y���{	�T{�T{$�T{9:{::{<({?:{��T{��T{��T{��T{��T{��T{��T{�({�T{�({��T|	�U|��|��|��|�U|$�U|96|:0|<-|?6|D��|F��|G��|H��|R��|T��|m��|o��|y��|}��|��U|��U|��U|��U|��U|��U|��U|�-|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�U|��|��|��|��|�-|�|�|�|�|�|�|�|�|��U}��}	��}
��}
��}�^}�^}��}$��}7�A}9��};��}<�@}=��}?��}l��}r��}|��}���}���}���}���}���}���}���}��@}��}�@}��}��}��}�}�}�^}�}�}�^}�^}�����J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�����������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�������������m���o���y���}����������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|������������������������������������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������7�	�r�
7�
7��'��J��'��r�������"2�#���$�r�&���*���-�8�2���4���D�A�F�A�G�A�H�A�J�W�P���Q���R�A�S���T�A�U���V�A�X���]���k���l7�m�J�o�J�p���r7�t>�u>�w���y�J�{>�|7�}�J���r���r���r���r���r���r���r�������������������������������A���A���A���A���A���A���A���A���A���A���A���A���A�������A���A���A���A���A���A������������������r��A�����A��A��������A��A��A�����������J��J��7��7��'��7��7��'��J��'��J��J���r����	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|�����������	����r��r����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������r��r��r��������
������
���@���[���`���l���r���|�����������	����r��r����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������r��r��r������J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J�������������m���o���y���}����������������
������
���@���[���`���l���r���|������������i�
�i�
�i����9�^�:���<�h�?�^�Y���Z���\���l�i�m���o���r�i�t�}�u�}�y���{�}�|�i�}�����h����������h������i��i��i��i����������
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|�����������7�	�r�
7�
7��'��J��'��r�������"2�#���$�r�&���*���-�8�2���4���D�A�F�A�G�A�H�A�J�W�P���Q���R�A�S���T�A�U���V�A�X���]���k���l7�m�J�o�J�p���r7�t>�u>�w���y�J�{>�|7�}�J���r���r���r���r���r���r���r�������������������������������A���A���A���A���A���A���A���A���A���A���A���A���A�������A���A���A���A���A���A������������������r��A�����A��A��������A��A��A�����������J��J��7��7��'��7��7��'��J��'��J��J���r����"#�#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������"#�#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������"#�#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^��������	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^�����	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U�	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U����
���
����;�#���&���*���2���4���7�5�9�,�:�|�<�;�?�,�Y�r�Z���\�|�k���l���m�;�o�;�p���r���y�;�|���}�;�������������������������������;���r���r��������;��;��;����������;��;��;�	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U�	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U����
���
����;�#���&���*���2���4���7�5�9�,�:�|�<�;�?�,�Y�r�Z���\�|�k���l���m�;�o�;�p���r���y�;�|���}�;�������������������������������;���r���r��������;��;��;����������;��;��;����	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^��������
���
����;�#���&���*���2���4���7�5�9�,�:�|�<�;�?�,�Y�r�Z���\�|�k���l���m�;�o�;�p���r���y�;�|���}�;�������������������������������;���r���r��������;��;��;����������;��;��;����	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^��������	���
���
����^��^����$���7�A�9���;���<�@�=���?���l���r���|���������������������������������@�����@���������������^������^��^�����	�U�����������U�$�U�96�:0�<-�?6�D���F���G���H���R���T���m���o���y���}�����U���U���U���U���U���U���U��-������������������������������������������������������������������������������U��������������-�������������������U��J�
�J�
�J����#���&���*���->�2���4���7�|�8���9���:���<�h�?���W���Y���Z���\���k���l�J�m���o���p���r�J�t�I�u�I�y���{�I�|�J�}�������������������������������������������������h����������������h��������J��J��J��J���������������Z,�
Bz�(Zt��J�B��N�		r	�
.
^
�
��z�
 
P
z
�2���>|���Lr��F���(Hx���X�d�`���(���t�(�.l�R��@���f|�@@�   �!!l!�"&"l#<#�#�$,$F%%%b%�&&�&�&�'2'^'�((Z(�)")�*�*�++++$+0+<+�,n,z,�,�,�,�,�,�,�--*-6-B-N-Z-f-�. .,.8.D.P.b.�/R/^/j/v/�/�/�0�1�1�1�1�1�1�1�1�2
2�2�2�2�2�2�2�3L444*4<4N4`4�4�5�6|6�6�7"7�88P8~8�8�9~:8:D:T:`:p:�:�:�:�:�:�:�;8;h;�;�;�;�<J<�<�=,=�=�=�=�>>H>�>�?4?�@@:@�A�A�A�BB�CCxDD0D\D�D�D�E�E�FRF�F�G0GpG�HH�H�IIJIdI�I�I�JJ:JzJ�J�K�b"/n�	�n���)��(��0�+	C
�R.2F
�x:	T	h	p	R|	�	P�	�	`4	0�		�	
��	0
�	d
�	
�.	4�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoItalictyPolandLukaszDziedzic: Lato Italic: 2013Lato ItalicVersion 1.105; Western+Polish opensourceLato-ItalicLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoItalictyPolandLukaszDziedzic: Lato Italic: 2013Lato-ItalicVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFL���rt	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt�������������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK-"#[^b��Sgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfnu�[����pBASEe]��0FDSIGGDEF����x�GPOS#f�8�dbGSUB�]��JOS/2���x`cmapspB3fglyfc��[M�Ovhead�ʹ�6hhea3y4$hmtx�s�p�Bloca�ny�A�BmaxpT^X name��s�@�post+���$9	�7
��_<���
��s�0�:($��X�0�0( �*bX��XK�X^2)	 �8ADBO  ����`��� X#	J6F\i,@J;Dk:B&K&F2@8=HC/7R4HO*L2#H/H/t51>%F																							������	J66666FFFF\\\\\\\\^\\\\F\\\\,,,,,,,,,@@@@JJJJJJJJJJJJ;DDD[kkk*k��k:::BBBBBBBB&&&&&&&&&&&&&&&&&&&&&&&&FFFFFFF22222222@@@@@@@@@@@@@@@@@@@@@@@@888888I2AJ&.=============='========HCCCCC"////7777777777777777744444444���HH HOOOOOOOOOOOO*LLLL2222222###HHHHHHHH��/////////////////////////tRttaa/55555555=R1111111>>>>>>>>>>>>>>>>>>>>>>>FFFFFF/HH*A��BHHH4C//6/n7F0/*1/@<HHHOO2)2)y#��HJ/444ttJJ5++21��'>!FF4��2E29C/B////////////////////////////////QQQQQQQQQQQQQQOQOQQQQQQQQQ��QQ	Jl\8@&JD:BB&@K?������J����*H5FVA7=I"@;3
H/2>)IH9*FA==3>>=>I0Jt)�������h�������jijs��noh������}����	JJl\.@@E��:@&@K6@-"J\\l72JJ;��E@?&l2.E@6,>J	��\2@&&=<Tt70IIM%H/HHC2%H@##&Q5"77tC5OO*��$MIK /%x/0MHC %@H2=77I////CQQQ��8O3*#.<>=58O8O3*#.<>=58O8O3*#.<>=58O��������bg�R��3E�E���*;FFFPP��v��zZ��zZ|Y�<<>�c�~�hjiJ�J�@YYG0w><@\�h�h�h�h�he��FT|||@���������������������������������������������������������������������0��������t&|���������������>$@C-`.OC[C5OY##4

5FFTF�FFtbFFFVF44FFIF����p�@<��}!	B,;J
]>Gf
��J<9'H55AADDAA00
��,7����5�����������.���J#��������Z}�uu���}�nm�������.}�����u�nf�������z��mt��wx����u��B9���������"������m���������u��n�J���k�nf�0�c��h��o�������/����������������uzsi�jj�������!!��������������������������������������������������������������������������������������������������������������������KK����^�^^�������^^�������^^������������������������������������������,����
,,5��>A����$�,$
��	����Rkl���������mnopqrstuv�������	

������ !"#$%&'()*+,-./012345����:=R^���
*)+-KJLNipoqsr������VS����������M�����T������&(u�����W�����o69�������������hU������l8_7a]��~������U�������������/9@Z`z~�������������7C\ghnv{~������������������ *,14=E_auz~���������������/_cu��������������CIMPRX[���!+;IScgo���������    " & 0 3 5 : ? D I q y  � � � � � � � � � � � � �!!!! !"!&!.!^!�!�!�!�""""""""")"+"7"H"a"e###!%�%�%�%�%�%�%�%�%�%�&&&<&@&B&`&c&f&k''R'd'�..%������ 0:A[a{�������������7CP^hjox}������������������#,.49@_atz~���������������0br��������������CGMORV[��� $2>RXfl~��������      & / 2 5 9 < D G p t } � � � � � � � � � � � � �!!!! !"!&!.!P!�!�!�!�""""""""")"+"7"H"`"d###%%�%�%�%�%�%�%�%�%�&&&:&@&B&`&c&e&j''R'd'�.."������=������oY���
�����������������x�p�o�%$#$	��;�:�.������������������������������-�i��o�d�c�j�$�~�|�y���������������z�z��������T�i�p�l�G�%����s������޺�ޚޙ�r�m�cݹ�j�q�վջ%y%l������������������������"",028>HNPZ\^bfprxzz||xz�����������������������������������������Rkl��������������������������o�VSQT����&���������������(�mno�6789:=MR]^_a~������������������
)*+-JKLN�iopqrs���������;<	@
S T!V#U"W$[(b.c/d1e0`,p<q=r>s?xC}I�M�O�T�Q�U��V�WZ�[�]�\�b�a�f�j�hn���t��u����������������������������������������������Ww����?�P�v����������Ot@�wo;�g>N�����������������������������2:?A��������H4;@I��	
 "-./02467�C#JE��v�wxy|~�z}�������������������JKLMNOPQRS	T
UVW
XYZ[\]^_`abcd*,-358<=QX%Y&Z'n:uAzEyD{G|H�X�Y�^�_�`�c�d�e�k�l�m������������������������������������F�ABCDEFGHIJKLf2g3h4i5j6k7l8m9�R�S�x�y�z�{�|�}�~����������������������������������������������������������������l��������1��6gY]Uebck�x}~pqrstuvwyz{|����������������������������������������������������������$�  !!�""�##�$$R%%k&&l''�()�**�++�,,�--�..�//�09m:;�<<�==�>>�??�@@�AZ[[�\\�]]�^^�__�``�az{{�||�}}�~~���o�����V��S��Q��T��������������&��������������������������������������������(�����m�����6��=��M��R��]��a��~�������������������������������������
������)��-��J��N�����i��o���������������������;<	@
S T		!

V#U

"W$[(b.c/d1e0`,p<q=  r!!>""s##?$$x%%C&&}''I((�))M**�++O,,�--T..�//Q00�11U2233�44�55V66�77W88Z99�::[;;�<<]==�>>\??�@@bAA�BBaCC�DDfEE�FFjGG�HHhIInJJ�KK�LL�MMtNN�OOPP�QQuRR�SS�TT�UU�VV�WW�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�dd�ee�ff�gg�hh�ii�jj�kk�ll�mm�nn�oo�pp�qq�rr�ss�tt�uu�vv�ww�xx�yy�zz�{{�||�}}�~~������\�����W��w����������������?�������P�����v��������������������������������O����t��@�����w��o��;�����g��>����N������������77�CCPPP�QQ�RX�Y\�^g�hh�jj�kn�ov�x{�}~����������������������������0��2��:��?��A�����������������������������������������H��4��;��@��I��	
		

 " $#&-''2((4)*6,,8.1944=9=>@@�AABBCCC#DDJEEE__FaaGtu�zz�~~���������v�����w��{��|��~�����^��o��z��}������������������������������������������������/�0_bb�ccJrrssKttuuL����M����N����O����P����Q����R����S��	��T��
��U����V����W��
��X����Y����Z��[����\����]����^����_����`����a����b����c����dCC)GG*HI,MM/OO3PP5RR7VV8WX<[[>��+��.��BQX

%Y&Z'n:  u!!A$$z%%E&&y''D(({))G**|++H22�33X44�55Y66�77^88�99_::�;;`>>�??c@@�AAdBB�CCeDD�EEkFF�GGlHH�IImRR�SS�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�ff�gg�ll�mm�nn�oo�~~����������������������������������������������F��������A����B����C����D����E����F����G����H����I����J����K����L����f��2��g��3��h��4��i��5��j��6��k��7��l��8��m��9�����R�����S�����x�����y�����z�����{�����|�����}�����~���������������������������������������������������������������������������������������������������������������������������������������������  p  �  �  �  �  �  �  �  �  �  �  �   !� " "� & &� / / 0 0l 2 3� 5 5� 9 :� < <� = =� > ?� D Dh G G� H H� I I� p p� q q1 t y� } ~�  6 � �� � � � �F � �X � �g � �Y � �Z � �\ � �] � �U � �d � �^ � �` � �e � �b � �f!!�!!�!!k!!�! ! �!"!"�!&!&�!.!.�!P!Px!Q!R}!S!Zp![!^y!�!�!�!��!�!��!�!��!�!��!�!��""�""�""�""�""�""�""�""i""�""�""�""�")")�"+"+�"7"7�"H"H�"`"`�"a"a�"d"e�##�##�##�# #!�%%�s%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��&&�&&�&:&;�&<&<�&@&@�&B&B�&`&`�&c&c�&e&e�&f&f�&j&k�''�'R'R�'d'd�'�'��..�.".%����������������������**M�����'<Qp����4p���W����J}��<_ju����)X���0K�����&1<G������		
		&	1	<	G	R	`	�	�	�	�	�	�	�



$
/
:
E
M
~
�
�
�
�
�
�
�
�	*5@KVdoz�������$/;Fit��������



)
4
?
J
V
a
l
z
�
�
�
�
�
�
�
�
�
�$/:EP[fq|������
Xcny�����*5@KYdoz��������
 +EP[fq|�������"-]hs~�����������
#.9DOZe���;br}�������*5�����������r}�������@KVa��������4?JU`kv������������	 +7Bmx�����������!9DP[ft��������"-hs~������%0;FT_j������ +������������(q�������%0;FQ\gr������� ! , 7 B M X c n y � � � � � � � � � � � �!	!!!*!s!�!�!�">"�"�"�#$#g#�#�$$_$�$�$�%%O%�%�%�%�&P&�&�''H'k'�'�'�'�(((/(:(u(�(�(�))7)w)�)�**-*d*�*�*�++E+d+�+�+�,(,^,�,�,�-
-6-S-�-�-�-�.6.f.�.�/G/o/�/�/�00O0�0�0�0�0�0�0�0�0�0�1=1H1S1^1i1t11�1�1�1�1�1�1�2 2(232>2I2T2_2j2u2�2�2�2�2�2�2�2�2�2�2�3333"3J3w3�3�3�3�3�4
44 4.494V4b4�4�4�4�4�4�5
555%5V5^5f5�5�5�5�5�5�5�5�5�5�6)616R6�6�6�6�777E7k7s7�7�8=8i8�8�9(9R9�9�9�::;:]:�:�;
;=;p;�;�<<<U<�<�==a=i=�=�=�=�=�=�=�=�>>>>$>c>�>�>�??? ?)?8?F?N?]?e?m?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�@@!@=@K@S@v@�@�@�AASA[A�A�A�A�A�BBLBmBxB�B�B�B�B�B�B�B�CC*C\CdC{C�C�C�C�DD;DiD�D�D�D�E	EECEKESE[EcE�E�E�E�FFF)FSF�F�F�F�G&GfG�G�G�H
HH7HhH�H�H�H�H�H�H�H�H�H�IIII%IjI�I�I�I�J#J_J�J�J�J�KK)K1KCKKKSKdKlK�K�K�K�LL/LQLwL�L�L�MMM'MdMoM�M�M�M�M�M�N"N*N5N@NKNaN�N�N�N�N�O,OkO�O�O�PP#PHPyP�P�P�P�P�P�P�P�P�P�P�Q	QQQ'QqQyQ�Q�Q�RKR�R�R�SS,S^S�S�TTIT�T�T�T�UURUvU�U�U�U�VVJV_V�V�V�WW@WtW�W�XX_X�X�X�X�X�X�Y,YMYnY�Y�Y�Y�ZZ>ZKZXZaZnZ�Z�Z�Z�Z�Z�Z�Z�Z�Z�[[[[3[_[l[[�[�[�[�[�[�\\\;\G\S\f\s\�\�\�\�\�]*]k]z]�]�]�]�]�^^_^|^�^�^�_P_�_�``+`:`I`X`p`�`�`�`�`�aaha�a�b0b�b�cc&c2c:cBc�c�c�c�c�c�c�c�c�c�c�c�c�ddd7dNdpd�d�d�e,eDe�e�e�fff3fYflf�f�f�g
gBgZg�g�g�h	hh<hEhNhWh`hihrh{h�h�h�h�h�h�h�h�h�h�ii7idi�i�i�jMjnj�j�j�j�k%kFkrk�k�k�l/lSltl�l�l�mm$m]m�m�nnEn�n�n�oo=oJoVocopo�o�p)pTp�p�q
qgq�q�rr^r�r�ssgs�s�s�t"t;tjt�t�t�t�t�u%u4uDuSucusu�u�u�u�u�u�u�u�vvv#v3vyv�v�v�v�v�v�www(w;wVwqw�w�w�w�w�xxx1x@x�x�x�x�x�x�y.ybyy�y�y�y�y�zzz-z@z�z�{!{9{Q{h{�{�{�{�{�{�||<|\|{|�|�|�}}}.}F}V}f}{}�}�}�}�}�}�}�~~I~�~�~�~�.b�����������������7�����ȃЃ؃��
�3�G�U�t�|���������������ȄЄ؄������υ݅����$�7�J�p�����������܆���0�G�^�����Ň�
�8�^���������Ԉ��
�(�C�a�}�������É҉�	��*�?�K�T�]�f�������Պ���(�8�A�J�S�\�e�������ċ�	���8�D�a�������>�k���َ�7�i�������ю�� �K�y�������5�e���Ӑ��!�5�I�l�����Ւ�.�Q�������������������Ӓ��&�C�d�������ēԓ����&�6�F�U�e�u���������ʔߔ���1�D�W�j��������ӕ���$�7�I�^�r�������Ö֖���#�;�T�l�������̗���2�J�b�z�������Ϙ��
�!�6�K�e�z�������љ���-�E�^�}�����͚���6�M�l�����ۛ���*�D�T�e�����������ŜҜߜ���%�7�D�P�]�j�w�����������ŝҝߝ������F�ߥ����!�1�E�V�g�u��������������"�M�p�x��������#5�	3!%3''#7'377##���(()|__�+�u^��l[Mbb
��p_;;��s	O�	3'&&'#3#'#��
�˰˜'�(J<<1m44m����t��J2�"332#32654&##3254&##J�Dl?6:FHBqG[A6014BOv9=O�F?+S
KACT)�+%$�ZX+&6��:�"&&546632&&#"3267dQ�TS�W>d!Q7$E[]I#;QQL�ml�Q3 [pbdp Y`F4�
332#'326654&&##F�_�NM�[)3M++M3�D�pp�Gw(\NNY%\�3!!3#!\�����&�|�{�|i�	3!!3#i������|�|�,��#�"&&546632&&#"32675#53WS�PP�TB^Q2'@UNM#
_�!mL�mm�P3 [pbdp

px��0@�33353##@���������t��J�353#5!#3J��Ę�|�||�l|;���"&'73265#5!6u+U9C23��.k0<[H4C'{�R@j@DR�3333#D����֣�K������wc�k �33!k�"���|:�333773#54>7##''#:�@@�|22H3/��ZZ�t�QXP����PXQ�B�333&&553#'#B��8���8����4:�tE�6|:�&��2�"&&546632'2654&#",MwBBwMNvBBvN3<<33<<N�om�MM�mo�NljekkejlK1�332##3254&##K�GsEFtETKx=;K�'\OLb/�Rh3*&�NG�&%2654&#""&'&&5466323267,3<<33<<�_�XjBwMNvB`QC#
0llqekkeql��bL��m�MM�m��"n	FH�332#'#3254&##F�ErE@4��}MHw<;H�%XNH]����`a0&2��'�*"&'732654&''.546632&&#"*B�5U%Y//-6/T$@'=lF;r,K"D0%-</OAK;q0.e& #$/F/6X4,*]"TE6\89�3#5!#���||��@���"&5332653.ww�-./-�s���`:??:��o�I�
3336673�ŜNM�����5f66f50�tT�!3336677336673#'&&'#[W�,^)�P�&
&���*N,,O)��(O--O([�t�@@�F�33366773#'&'#���?
:����GDO={44{�����0;3�H�353366773�ҞBB�����%I''I%��P�8#�	35!5!!81����5Y�{Y�I|=���%"&&5467&&#"'6632#'#'2675�2I(��42$I*43u@hxx%[!:IQ &(D*SX
"&`&nr��8(rR"H��)�"'##336632'2654#"RH?s�H$]k=bY)8[/-.B6��N�rUy?xFL�.�C��#�"&&546632&#"3267WN}IP�L;`D77@PN='A;-l=uRSt=&['LA@M]%$/���!"&5466323'53#'#52675&&#"^s=a6);�xH+)(<2�yQu>M��C3$x�CGIE7��#�"3&"&&546632!3267>+<�KN|IJvBMh5��L="=!1+h�./]�h=uRRt>?kD%	62YRI�3#57546632&&#"3#Ճ�.cM+L4]��}m
9]6l	
Ws��4�-<�0<J"&&5475&&54675&&5466323##"&'3322654&#"2654&##"'@f;M!&;a8.$�d7\:"T\bgH�R,,++,;K,+>3#D�9,=&
)2B+<P(l#9I$
%:C4Q.�*('**'(*��#H�3336632#4&#"H�Q8SN� )-��_-l^��2.����O��&U
-��*�<��&�
-LI�33373#'L����̟�I��k����N}2�� �"&5#5!3267�]`�/2&!'?p^�t��.#	l
#>�33366326632#4#"#4#"#o
2+D5+5:�s
�=+Q"/VJ��R-0��R-��H�3336632#4&#"Hx T7TN� )-�B .l^��2.��/��)�"&&546632'2654&#",BsHHsBBsHHsB3333333=uRSt==tSRu=wM@ALLA@MH�H)�336632#"'#2654#"HxN(]j=b8D6U)9[/--��2#�sUx?6Q�$FL�.�/�H�!57##"&5466323732675&&#"}D#^s=a6*As�+)(<2��P �yQu>!3�X$�CGIEt$�3336632&&#"tx%i;!)%.Y �l=;

{6C��5���'"&'732654&&'&&54632&&#"(C�/?.e5)&41eXzjCm'B%T)"#4?MT"}-\
K:EV+X+:)C]1��&�"&&55#57733#3267�O^)}�y��270!O7bA�m��s�80j
>��
�"&5332673#'#�UL�),�x!Ql^2��1/!F�G%.9�
33366773ڻ�NN����%M''M%�T� 33366773366773#'&&'#UQ�k �L�	��%H&&J#��%H&&H%�� H+:Y�%2�3'3366773#'&&'#%���3


,����9
1�P+,P��R,+R�>;�"&'7326773366773�&+1
גS
I��<U�p$��#K'%K%�>U*F�	35#5!!F����O.sN��s��	O~&���	O~&���	OC&��	OT&��	ON&��	O/&��	OP&��	O~&	O�
+"&54773'&&'#3#'#2654&#",3?+�;S"@j�
�˰˜'�(��6-5�R(
/ -6��<<1m44m����t�����	OT&	�g�	%3'&&'#"&54667#'##33267��
�1D(('�(�˰�*3
#;J<<1m44m��2. 4%
����t9 
J��	�
O�&-��	Ov&��	O&T��	O&V��	O�&X��	O�&Z��	�
OC&&-��	O�&\��	O�&^��	O�&`��	O�&b��	�
OP&&-��S�3#!#3#3!5#�T
���s�vv���v-d]1]�q�|�|�|������S~&M�[����S/&M[	4�!*35#5732#'3254&##3#532654&##TKK�Dk>59FHBrGRFu8=Fjj95233:�E�E;*K
OEDY*lf3-<K�)'$��J�D2�&<	��6�:�&3+��6��:~&�5��6��:C&5��6��:T&5��6��:d&5��F4T&��F�
4�&-���F�D4�&<���F�4�&3���4��E�3&&546632#7326654&'�&"74:9za��DxO
!2?<5""+^UCDi<��s�Hw)^Qm_��\~&���\~&���\C&��\T&��\N&��\/&��\P&��\d&^�-�!"&54667!!!3#!#3267�1D&�������%)#;�2.3&�|�{�|)J��\�
�&-��\v&��\T&��\D&T��F&V��\@�&X��\�&Z��\�
C&&-��\�&f��,��#~&���,��#C&��,��#P&��,��#d&��,�#�&0��,��#T&��,��#/&��,��#T&,��`21&&#"32675#53#"&&546632&&54632&&#"Q2'@UNM#
_�!m>S�PP�TKB'
E[pbdp

px��0L�mm�P7Nm!��@C&	��@N&	��@�
�&	-����&	3�_��@��&	9U�3#57533533###35#@==���==�����E^]]]K����S��J~&
���J~&
���JC&
��JT&
��JN&
��J/&
��Jd&
��JT&
J�� "&54667#53#5!#3#326731C#�����*#";�2. 3%|�||�l|1J��Jv&
��J�
�&
-��JP&
��;��C&��D�R�&0��D�
R�&-��D�DR�&<��[ ~&
����k &
����k� �&
0#��k�
 �&
-#��*�
 /&
&�-#��k�D �&
<#�� �
35'737!k@2r��1�"�&X@J��dX~�|��k=�&

����:~&���:d&��:�
�&-��B~&�
��B~&�
��BT&
��BT&
��B��&0��Bd&
��B�
�&-��B�D�&<��&��2~&���&��2~&���&��2C&��&��2T&��&��2N&��&��2/&��&��2y&��&��2P&��&��2T&&�2�!-"&5467.54663232672654&#"B1C+Oh3BwMNvB`P(!#;33<<33<<�2.)=
^�Xk�OO�j��#5JSipekkepi��&�
2�&-��&��2v&��&��2&T��&��2&V��&��2�&X��&��2�&Z��&�
2C&&-&��S?("&&5466326654&'7'2654&#",MwBBwM?4
ms'+BvN3<<33<<N�om�M	'$#,5r+�Wo�Nljekkejl��&��S~&����&��S~&����&��Sv&���&��ST&����&�
S?&�-��&��2�&f��D� )77&&5466327#"'7&#"2654&'EBwMV=5PDBvNT?6Z�(3<o3<�
b)oEm�M-K4a(mCo�N.Ls$� k��lj"�!����D~&��S�!"&&54663!#3#3%3#"MzEH}O"�yy���!00G�pp�D{�{�|w�%XOO\'��FH~&���FHT&��FHd&��F�H�&0��F�
H�&-��F�
H/&&-��F�DH�&<��2��'~&���2��'C&��2��'T&��2��'�&h��2�'�&3��2�'�&0��2��'d&��2�
'�&-@��D�$"&'732654&''7&&#"#46632�1P<!)6@V
+\�3iQ\vRG=(S$Y"$ 8V} ��b�Cg<eRx%ZA3R0��9T&���9�&3���9�&0���
9�&-���D9�&<9�3#5735#5!#3#�^'��E�||�K��@��~&���@��~&���@��C&��@��T&��@��N&��@��/&��@��P&��@��~&��@��y&��@��T&@��$"&54667&&53326533267B1C	fi�,./.��<##;�2.1!�w��`:??:��o�;1J��@���&P��@���&I��@���&R��@���&L��@�
�&-��@��v&@���B#"&53326536654&'7swww�-./-F,
mAV������`:??:�.",4=B��@���~&����@���~&����@���v&���@���T&���@�
�B&�-���
I�&-��T~&���T~&���TC&��TN&��H~&���H~&���HC&��HN&��Hd&���
H�&-��Hv&��HT&��8#~&���8#T&��8#d&��8#C&��8�
#�&-
��8�D#�&<
4�3#5732#'326654&&##3#FFF�^�NM�Z)3M++M3ll*ED�pp�Gw(\NNY%�KI6�3332##53254&##I�[GsEFtE[Rw<;R�c'[OMb.{�h3)2��0�"&&547!&&#"'6632'267#/JrAg?7"7D"]>NuABsL);�9P�iVOe )P�kj�Q@UU@A��,�"&'7326654&#"#36632i0 
0+7��G+:\6X	�!YTq]&$�1�>#'A�z��J�J�33"&'732653J�y"+ �!P��t�
m')~��6[7&A�333"&5463233&�i ))  ((6�i���|)* ** *�����|��.�JW~&'��h����=��/&���=��/&���=���&��=���&��=���&��=���&��=���&	��=��&=��n)4@"&54677"&&5467&&#"'6632#'#'26752654&#"@AC�;M)*C�2I(��42$I*43u@hxx%[!:IQ &P8=++{J#
6!+=��(D*SX
"&`&nr��8(rR"	��=���&=�.�,7"&54667'##"&&5467&&#"'66323272675�1D(%[02I(��42$I*43u@hx83!?�!:IQ &�21 1#
:((D*SX
"&`&nr��4AIR"��=�
�&-��=��&��=��U)&S��'��)&U��=��>2&W��=��F&Y��=�
�&&-��=��t&[��=��t&]��=��y&_��=��E&a��=�
�&&	-��Q�3@"3&&"&'#"&5467&&#"'66326632#327%3267&&55�({1M%F%;Jos"/4)Q(&;@$4F#�4$%'3I��
7)�-65.�h("("P>NZ.` )) AmA"32_�
-	,����Q/&�
����Q�&
��)�&"'###57533#36632'2654#"RH?sBB���I#]k=bY)8[/--B6)FHGL1I�nRt=x@H|.���H�D)�&<
��C�#�&2*��C��#/&�*��C��#�&*��C��#�&*��C��#�&
*"��z6!&"&5466323'53#'#72675&&#"3�Te6V/#2�o? "2+"��yQu>M��C3&x�CGIE�b���/�
�&-��/�D�&<��/��&2�/��R�("&5466323'5#53533#'#52675&#"_s=b5*;���BBxH+'**<2�uNp<M*LGGF��3$x�!?BC@��7��#/& ���7��#/& ���7��#�& ��7��#�& ��7��#�& ��7��#�& ��7��#�& 	7�#�2"3&"&5467#"&&546632!3267327>+<�
3B# N|IJvBMh5��L="=!138 ?�./]��21#8=uRRt>?kD%	62Y".&B��7��#�& 
��7�
#�& -��7��#& ��7��#�& ��7��M)& S����#)& U��7��62& W��7��#F& Y��7�
#�& &-��7��#n& e��4�-</&"���4�-<�&"��4�-<�&"	��4�-<�&"
��4�-<�&"1��4�-<�&"��4�-<�&"��4�-<�&"����&#�e<�����&#�e<��H�
�&#-��H�D�&#<�� ��&#2�e��H��&#9�3#57533#36632#4&#"HBB���	Q8SN� )-)FHGL+`-l^��2.���O�/&U�-��O/&U�-��O�&U-��O�&U-��O�&U-��O��&U-��O�&U-��O���&M
-��O�&U-��O�
��&$--��O�&U	-O��!#5!�Z}s���*�<�&�-��L�I�&&0��L�
I�&&-��L�DI�&&<LI�33773#'L����˟�J������H{��2�� �&'��<��2�� 6&'���2� �&'0C��2�
 �&'-C��2�
 k&'&�<-C��2�D �&'<C2�� �"&55'75#5!73267�]`U2��/z2�2&!'?p^U1[K�t�D\^�.#	l
������&'�
����#>2&(���#>�&(
��#�
>�&(-��H/&)���H/&)���H�&)��H�&)��H��&)0��H�&)
��H�
�&)-��H�D�&)<����&3336632#4&#"'667#"&54632�xH1JE�!��'48	
(47)8=W�@-k]��!1-��"NE/3).7UKR}��/��)/&*���/��)/&*���/��)�&*��/��)�&*��/��)�&*��/��)�&*��/��)
&*��/��)�&*/�)�!-"&5467.54663232672654&#"@0B+<e=GtBBsH`M&$  @43333333�21)<AoKSt==tScr"5	AJNCALLACN��/�
)�&*-��/��)&*��/��A)&*S����))&*U��/��*2&*W��/��)F&*Y��/�
)�&*&-��/��)�&*	��/��)n&*e/��Q�)"&&5466326654&'7'2654&#",BsHHsB71%l
B4#+HsB3333333=uRSt=
.+#
07=M!a>Ru=wM@ALLA@M��/��Q/&����/��Q/&����/��Q&���/��Q�&����/�
Q�&�-/��)
 (77&#"'7&&5466327#"&'72654'��!33P9. HsBK=.9/ HsB%F�33���Q��.7!W6St=&7/8 X6Ru=KR@!���/��)/&����Q�872654&#""3&&"&&5466326632#3267#"&'��%w�2S12T3'=D"3E#�5!#3H$K>kM@AMMA@M!.55.�h=uRSt=*11*AmA"41
_'//'��t$/&-�1��R�$�&-0���t$�&-1��t$�&-
1��a�
$�&--���a�
$�&-&1-���/�D$�&-<���5��/&.���5���&.��5���&.��5��R&.g��5��&.2��5��&.0��5���&.
��5�
�&.-=��;�4"&'732654.54>54&#"#46632�)@"1*./('�2eLAS)./'Nd
 $3(,(+#<3��>c91M+$2%"&9,-K,RI�3#57546632&&#"Ճ�.cM+L4]}m
9]6l	
W���1��&6&/���1�&�&/2K��1�&�&/0D��1�
&�&/-D��1�D&�&/<D��1��&j&/���1��&� "&&55#575#57733#3#3267�O^)||}�y�Ҿ�270!O7bAFXm��sXL
80j
��>��
/&0����>��
/&0����>��
�&0���>��
�&0���>��
�&0���>��
�&0���>��
�&0	���>��
&0���>��
&0���>��
�&0�>�$�&"&54667'##"&5332673327�1D(!Q5UL�),�:1!?�210#J%.l^2��1/!F�4A��>��
9&0O���>��
r&0H���>��
i&0Q���>��
r&0K���>�

�&0-��>��
&0�>��n�!"&5332673>54'7#'#�UL�),!)m
7*x!Ql^2��1/!F'&+/77D�7G%.��>��n/&�����>��n/&�����>��n&����>��n�&����>�
n�&�-���
9�&1-��T/&2���T/&2���T�&2��T�&2���>;/&4����>;/&4����>;�&4���>;�&4���>;�&4
���H�&4-����>;&4���>;�&4��F/&5���F�&5��F�&5
��F�&5��F�
�&5-��F�D�&5</��&�/7326544'&&#""&&546632&&''7&'77�F13>9 6?rCqD>e:$C
0#�(w*2@&H"�(o@M<r�;>LK	:��;lIHe6-IKD<Y)ED8<�qP~HH�H)�"336632#"&'#2654&#"H�G%\k>b6%>U(:,0..�u�M�sUx?Q�$FLCC�H�E� "&'73254&#"#336632q)

/ )-�x T7TN!J�	mQ2.���B .l^��7\7*�<��"&'73265#5!�.K +15'�Z(d�i
36es�.<g?A�<#� ,33"&54632"&'732653"&54632M�I%11%&00�)

� M$%11%&00�9,"#++#",�l')�6Z7�,"#++#",���z�."&5#53327"&54632"&5#533267�RU\�$!& ((  ))�RU\�$
 %p^�s�.#	l
5* ** *��p^�s�.#l
B�<u/33"&'732653'7'7M��)

� M��H�d�H�d��l')�6Z7�H�b�H�bH��"�%"&53366323267>54&#"(hxx&Z02I(��42$I*43u�IQ % !:nr8'(C*TW"&a&#H��)� "&'##336632'2654#"Q"FsxN+>Y0=cZ):^,," 6�3$>pLVy?xDH��H��'� ,"&'##46632&&#"36632'2654#"S"Gs+_N$:"+*G$\j=`Y(8Z-.!!6�:`;l(.L�oSt=xAI}�4���"&'732654&#"'6632�4j+<=%AQM8: D i>I}LK$%]M@AL[&=tSRu=C��-�+%"32654'67&&546632&#"6632#"'�*8!"')�r!!$P�L=] @2@AW/b*DO.V>F;�@!��1A5!Y7St=%X+PD%-.E=*F*//�Vm�"/"&&57##"&&5466323'5332672675&&#"7H#B#>]4=`5)9�$��),%83�*E(? >uQQu>M��S%"l�CGIE/��l� -"&5466323'546632&#"#'#72675&&#"�]p<`4';"K?


x
H)-$72�yQu>M,H,l#%��3$x�CGIE6��!�"3&&"&'73267!&&546632X�
::1i*0!="=M
��:mLBqEI}�]/.�hX26	&Dk?>uQRt>/���!"&&546632373#'#72675&&#">_4=b8&CsxK+)(<2>uQQu>!3�3$x�CGIE��n=�7��"�"&&5467!&&#"'6632'267##Mj5S
G9"=!0+h1LwEHtH-:
�@mC%	51X>tRQu>p/1`��o�(2"&&'7&&#"'663273267#"&'744'326�BW,�
+-1&S%DbKC	
#">$4]	�( )>h?y"]:6$8(F	$:Jq@�	H(6F��"�*"&&54675&&546632&&#"33#"3267=FpA>5.0>nF7j+5 H&91eCR75>E+I:.k#E326
;2=],c]%��0���!/��"�+"&&546632'2654&##532654&#"<LzGLyE:`:(/39<h=$-,# ##9FD9tVXs:?2":
:22E"pcHMRA*�<.�"&'732655#575#5!3#�.K +15'���Z��(d�i
36�Fvs�L�<g?1�>n�,9"&'732677##"&&5466323'46632&#"2675&&#")g,1#I82A">\3>a4&8"L@ 

�b(,%83�a."?>oGLq>#(K0m%#�3afE�C>=C/�<�,"&'732677##"&&5466323732675&&#")k,1#M79H#>_4<b9N9s�g+*%?7�d0"?>oGLq>?3� dpG�C>=C@��� "&&54>32&&#"3275#53QI|L.Oc5DX"B/(#@'H9$\� j8rW?bC#%X B5ELSb�&�-9�%"&54673366773'2654&'#/IW#��R

R��$WJ�PB&A0�� 4##4 �h1B&BP\) +��9�#/"&5467&&#"'66326632&#"'2654&',Zn7.**>)R%%S(>*(/6nZ""#"^X,\*k

%**%

k*\,X^w$99$<�H�57#"&5332673}S8SN�!(-���_.l^2��1/K�XH�!346632&&#"36632#4&#"H+_N$:"++	Q8SN� )-�:`;l(.]-l^��2-��H�E�."&'732654&#"#46632&&#"36632i+
 )-�+_N$:"++	Q8SN!N�	m'*2-���:`;l(.]-l^��7\7��H�'��O.�&O
-O	�353#5!#3O�����s
ss��s����&Q
-�H�##73753y��Ͽ�F������G}�X��2�� �&'=�w)�� �	)354&#""&55#"&546325#5!3#3267��]`	RJ;.$�/��2&!'?]&��p^O?.,8zt��LU.#	l
2�E �"&5#5!327�^_�/1!-!'?�p^6t�P.#l)�<W�!33!#"&'732654&#"'7#)���WU?i>Hd#B=&,85+1����N�
lIIf5/"[82,1G��y�33!y��s��5�#'##"'#"&53327332675o

3+D
6+5:�s
�=+Q"/VJ\��-0O��-O�H5� 57##"'#"&53327332673�
-)D
6*4;�s
���a,Q"/VJ\��-0O��-O�X#�E>�+"&'732654#"#4#"#3366326632�%
s
�o
2+D6*4;A�m Z-0��R-���>+Q"/VJ��0O0��E� "&'73265336632#4&#">$x O4TL� #*H�l!%�B .l^��7)��4W4H�Et� "&&54&#"#336632327&@I #*�x P4SL
%�4W47)���B .l^��%!lJ�333&&553#'&&'#J��
	���
 	��<.\%���<.[&�/��)�"&&546632"3&27#,BtGGtBCsGGsCY�Y_�;tUVs;;sVUt;�``��jj��Q�%"&&5466323#3#3#'27&&#"�8f@@f8,"힀���/!3&8sXXs:tMcXtsBM7?�G?�#5.54667534&'66�8b;;b8|9a;;a9�.&&.$.&&.��=oOOo=��=oOOo=��CJ"IDDI��J4����#'##"&'73267�x%i;!)%.Z�l=;

{6C4����"&'732673#'#�!)%.Z�x%i

|6C�Cl<<4�E2�"&&55##"&'73266733267�=FY0+!$40�
.�/O/m56

|0(�("k
t�E$�"&&5336632&&#"3267IN^)x%i;!)%.Y 170!P�7bA�l=;

{6C�9/
k
t$�346632.#"t8v]5T!!A-GqC	{D;�J6�332#'#32654##J�9]79)��mGV('OV�G>:H���$<J6�73254&#3##33�VO'(^��)97]9��G�<$�H:=H�5�E�5"'3267#"&55732654&&'&&54632&&#"(99
)XI?.e5)&41eXzjCm'B%T)"#4?MT"} ij^3\
K:EV+X+:)C]+�<1�"&'7326546632&&#"�1A*&&%XL.=%"+""R�
f	+,�9^8i	
+,�9^8+�<1�%"&'732655#57546632&&#"3#�1A*&&��%XL.=%"+"��"R�
f	+,�E�9^8i	
+,�K�9^82�h'�23#5#5354&#"'66�O^)}�y��27/!P�7bA�m��s�80
j
1�E&�"&&5#57733#3267�O^)}�y��260!Q�7bA^m��s��9/
k
����X� "&55#57533533##'#'32675#�PIRR���VVx
K9'�k]NE����K��E%,�5)b'��1�#"&&54675#5332654&'53#,Op:/W�!2451!�W.:o>b5<Ys_%K94II49K%_sY<5b>>��)�"&5332654&#"'632*l��2-/3
-Kd9qyv
��@:\P;8mcl^�N9�
#'&&'##~��NN����&L''L&��T� #'&&'##'&&'##33677Q�k 
�L�	��%I%%K#��%I%%I%�� H+:Y�9�3>32&#"#'&&'#�;S=%(/גS

I	>V,p(-��#K'%K%�!9�353366773�Û64�–Zk#?&&?#k���F�Ez�"&&55!5#5!!327-@I������
%�3P+
O.sN��t%!lF��M�
%%"2232654'67#5#5!6632##� 	�J	�����*G+1:U\� $��5.O.sO��EL76<V94�<�"&'732654&#"'7#5!2Oo(CH,5EA70���=[3Es�7%\&:4.4
G�sN�3U4Jh6���<j�0;"&&5466323'53!#"&'732654&#"'7##'#7275&#"�,F')F+2 sk=D+P9.C9 #'$.nzY,!" @uOOtA.[��O�kO?e;^29/.	Q���,x3�!EFFG��N�0"&55#57733632&&#"'2654.5445#K�wDJz�!)(I1$'"12"1qSB2#44#A@l[�m��O#+>.1G'm#!(6(�4)�<��4"&'73265#327#"&55#57733546632&&#"r)
�4$YMDKz�"PD#
!K�l')~�*%
kjV�m��3X6l')��6Z72�3>54&#"'6632�BM A8*FI$pMDsE+O59(:5 /3)]'9/]G6QF'��E#�3.546632&&#"�5O,FsDMo%IG)7B MB'FQ6G]/9'])3/ 5:(��2�35#5736654&#"'66323#͗L]PM=4,JI&tOBoCG0���E0\*/3)\(8.]G7`%K�9#�35#573&&546632&&#"3#��L80GCoBPt%IJ,4=MP���E%`7G].8(\)3/*\0K�C�H�#575#5733#3#㠠��������<FyF)��KyK��/��*�+"&&546632'26654&&#"7"&54632,IrBBrIIsBBsI6!!65!!5****P�zz�OO�zz�Pw,k^\i--i\^k,�( ++ (B�J�!"&'73265#'##33&&553z)		
�8���8�D�m'E�6|:�����4:�6[7��/������/��/&���/��/&���/���&��/���&��/���&��/���&��/���&	��/��&/��n#0<"&54677"&&546632373#'#72675&&#"2654&#"4AC�;M)*Cu>_4=b8&CsxK+)(<2<8=++{J#
6!+=��>uQQu>!3�3$x�CGIE��/���&��/�
�&-��/��&��/��I)&S����)&U��/��22&W��/��F&Y��/�
�&&-��/��t&[��/��t&]��/��y&_��/��E&a��/�
�&&	-/�(�'4"&54667'##"&&54663237332672675&&#"�-?!
K$>_4=b8&Cs3';�+)(<2�211$	6$>uQQu>!3�4	AO�CGIE��/�<����/�</&6�
��/�<�&6
��/�<�&6	
��/�<�&6
��/�<�&61
��/�<�&6
��/�<�&6
��/�<�&6
��Q4�&@
Q4�	353#5!3Q��/�s
s��s��Q4/&@���Q4/&@���Q4�&@��Q4�&@��Q4�&@��Q4�&@��Q4�&@��Q�4�&N
��Q4&@��Q�
4�&?-��Q4�&@	��Q4�&P
O���"&5467##5!3267_1D6 *�Z2* 

?�21.?}s�3AQ�4�"&5467#53#5!3#3267N0D4۱�/��2(
@�21.?s
s��s3AO.�
!5#575#5!3#���Z���Evs�K�Q4�3535#575#5!3#3Q����/���seEZs�Kes��
#3267&#"&&'#"&54632#5!�" $),Q5T_WO,*�Z6-�/!V><I
5s�%P3Q4�	353#5!3Q��/�s�t��s��Q4�&R�<��QP6&R���Q�4�&R0��Q�
4�&R-��Q�
4k&R&<-��Q�D4�&R<QA�3535'75#5!73Q�T2��/z2��s�1[K�t�E\^�s����&R�
�����i�	#53#533353#533"&54632`\�NP\�^��&&&&s�t��ss�t��s.''''��Q4�&R=wQ4�
#354&#"535#"&546325#5!3#3�x�OH;-�/���[&

��s�=+*8	|t��G�s��	O���J2�l�3!!l����|��9�353%3'&&'#������9

Y3��Y|�1n44n1��\���8#���@�	&��2�"&&546632'2654&#"'53,NvBBvNNvBBvN3<<33<<�R�jk�OO�jj�Rtbbnnbbt�����J�
��DR�I�
33#&&'#ıŜNM��t05f66f5���:���B�B�35!5!%5!B�pL�z�||{{�||��&��2�@�3!##@ؓ���t����K1�?�357'5!!!?�������%Y��Y|��|��9���H���H�5&&5467534&'66�g{{gtg{{g�5++544,,4U
�ww�
TT
�ww�
U_?Q
0	O>>O	��
Q��F�C�35&&55336553�et�Q|Q�te�tm�n=��n��mt�9�'3535.5466323#5>54&#"d+AvOPuA*d�9669wEZ6[�NN�[6ZEwj&FN3UmmU3NF&jO�	3'&&'#3#'#'
p

鳰�� �!p^-~J<<1X99X����t��[F���3!#3#3'�:�����G^-~�|�{�|[F��(�33353##'Ń^��^�^-~����t��[F���353#5!#3'�YYFYY�O^-~|�||�l|[F��JN�����2�"&&54632'2654&&#"''b=^5t\\tt\ %&�^-~Q�l������`vOZ''ZOv`�Fp�!53366773'\��(		
)����^-~���(G&&G(��P�[F��HN���:�%)3535&&5466323#5>54&#"'�R)3]??\3)R�$  %�^-~w2wTU�II�UTw2wj+GL1a__a1LG+j[F*��N�,"&546632373327#"&'#'2677&&#"�Xl;`5,I�

,4>30 3/!7+�yRu?+8W9�v&l
%-Rx?,V,+CJHCH�O.�246632#"&'2654&#"'6654&#"H/aK7b>+*:O:Z0%O#b'8+*5),%'9��Dl?'P?2J`FI^-&;t923'8k>*)'HDI�I$�O1�>54.'736673� 9I*�42)0�-D2�$-"/���9 "j�GP�Z?nn|L.f*5��#�!-"&&54667&&54632&&#"'32654&')BoC-I+-D]a:{8!9j)2W@3E#<p�A,.:4'8B6gG5O9P91Im9) AO6Fj;�698=,>
EF��"�,"&&54675&&546632&&#"327&#"3267JNuA>4./>nF5j+6 H$82d"$++63<FL%:9g"D326:2>_+i^(V�E�&'6654&'.54675!#�s0D&H;"��=GE�?hM)=4VI�&'5T=_�RttVa`((2
7:ZA�O�>54&#"#4&'336632&0��"M7VE�N��96(!%��XS(T*6k]�7��!�"&54632"3.2667#,n��nn��n,�++�,��������^SOOS�!VNNV!=���"&&55#5!3267�HR!�%+,+ H2]?�s3th%.#	lI��J�!34&'33>7&&'U�&Yi=(I)DK"�E#XT'?#]:a@�$#1kb&&jDH8"��@�''&&#"'6632##���
3  2-Wh!��c�'%w
bn�N@�<I�&3326733267#"&'##"&'@�"!/�%19
>$%
����5+")4:�v*m./+-	<b8/�3.'736673�?O)�+''0�1M9^��= "Zb_)V�UW��];�E�7'6654&'.546675&&54675!#"3267&&#"�s0D8^7(C'051)ԍ1<81(.:P B3=A�&&*L>+H5
E-2ss/)"8t8-"%
0'Y3��%�"&&546632'2654&#",BqFFqBBqFFqB2002111=uRSt==tSRu=wM@ALLA@M
��N�""&54665#'665#57!#3267�SAz�
bK�R
&]MJ\)X�c	e�Rnt+bKl	H�O)�46632#"&'2654#"H@nEp~=a6"FV'8\+81��^x9�wUx? 9l7FL�J?g/��@� "&&54663!&&''2654&#"Al@Fp>(?'&);gA).-*(0/;qRVq7yV8Gh8wB=;T?H@G2��&�"&55#57!#3267�YF�J�� >cR�ms=r+ n
>��� "&&54654&'332654&'7&Nd/�1%/1�}9dB!C!S(>#c/-/LR-g@9x;���O?t#5.54667534&'66�8b;;b8|9a;;a9�.&&.$.&&.��=oOOo=}}=oOOo=��CJ"IDDI��J)�CD�
'7373'#�����w[��ɑ~�V7 ����� ��OEt%5.554&'3336654&'7�N[(�",{)*
�ol��@h>{R)>#><*@
��FQ2hB:|>�����B�-"&54673254&'332654&&'7#"&'#�O_,"�%&-|�!)XQ":4��>�74>l>4A]"6++6"4)HC)BC'15yM��#**#I�F�$'6654&'.54>32&&#"�s&5*QC(/Pg79\C0?RJC>E�&+
#8W><]@"# [H<=8#6)\H��.�)6".5546632'2654&#">54&#"G/[I,0cL5a=/)'?&?iD&6++:/#4R@B,*#<_D�Dk>&O?2O2M/G].0-(8
4=V%$2")'K9��!�
,7&&"&&54&'332667.546632�.RAC/*/lMa,�U*UwO-9b=Xy?z,"
	hT/��4V4"1
4\#\U
-<>7X3X�n�����O?t��OA*6654&#"5.5467546632i'/{:b;:.b%%*-,N1PX<`8,Y-GJH>3���?tSA�4U/Y3:L�Zn2�tSvA+U*��*��N>&��F��">&� ��A�O>&���=��>&����=���&����3��%>&���>��>&����>���&������B>&���=��>&�J���>��>&�J�I�DJ�(34&'33>7'667&&'U�&Yi=(I)DK"0,�%GD"XT'?#]:a@�$#1kb&#H=(W)&iCH80�O(� %2654&#"5.546632,42244223T1GsBBsG0Q3dPDALLADP��BgDSt==tSCfC-U-J�F�!'6654&&'.546633&"#"�r&)9iCKM�(Z$>NBI>E�&*
8_HUp7y>G.8#6)\t�O�!!3#t�������s�aL�S)�K*�'6654''7&&''7&'7�		4h9<�
x�<�Er_��
�2Z-"5 {p/6H{oeLlv���1d����'�"����$��0������������3��/�*��p*3773�/`�����.�>�[~�'1^-~[F��h:�>J���(���E����"&533267gR?�'[L.bZ!m	���8�#���8�#���8�!���+b����.�>��j-�m��i-�j��j-�l��s-�i���3�Pn���3�Pk��n=����o7�!M��h:�>J���;�GN����'6654&'7�$+\L&?�:J9,)4����.5467Z%@&L\+$�4),9J��t�'7<}�����[~������'6654&'7'7�%LH$6�<}�:J90#1��}���.5467'7�7$IL$
~<}�1#09J7������'6654&'7'7�%LH$6�^}�:J90#1�����.54677�7$IL%
C}<�1#09J&������#"&&#"'66323267'6654&'7_!?)%!?){	&
SAE8	3$	4#�/		;!%&����
#&&54677"&&#"'66323267O0EBR
%
!?)%!?)�&%!;		v	3$	4#��	O�J2�3!!32#'32654&##J���[EqDBoE_P;:;;O�|�#SHJ\)s+..%��J2���l�`�DL�	3#'53667>7!3#5!��U�%
YO���JBg%�(9:���\ev:Y^>��\ܼ���\�W�-3'&&#"'6632353376632&&#"####q	-C&x&B-	q�B%x%B[��.C����C.��������.��,�*"&'732654&##532654&#"'6632%B�5N&S.6C=@WC>47,(B"K-r=tz*)1AEw,1f#!.*)&m'#&"b(+^Q/K
P;C[.@�33373#5467#@�8���8���:4�D�t�:|6�����@C&�ER�33376632&&#"##E�:L"S7
!;˞�<���D2�#w���������"&'732667667!##G"
[�W
2C�BGb�b�tE{Fmy0��:���@�	��&��2���@�m��K1���6��:���9���F�"&'7327733773�(	.	ݜL64E��_�⾜���JV��H�5&&5467534&'6�lvvltlvvl�`1/4/1`Z~rq{XX{qr~ZU{	C>>C	����F�@�D^�33333#5@���K
z�����\ܼ-�!#"&&55332673�-!Mo;�:='�.iX��D6�t:�333333�OxO�������t�D^�3333333#5~KtK~;s�������\ܼ9�3#5!32#'32654##��>h?<e? .0c|�*XGN^)u,2V"6�3332#'32654##3"�;[47\:

&+R���)XHN^)u,2V����tJ2�3332#'32654##J�VJsBEtISJ:A{J��)XHN^)u,2V��!�"'73267#53&&#"'6632��ZNE+>M
��M>%;N$n@S�NP�`\$KT{IC^"3K�ts�G��D�"%26654&&#""&'##336632�I\1��2
[G]ees%]TTZ""ZTT]%�������~�����!5##&&54663335#"�I���8FDrE��LL:==��^LNX%�t`�&001��\~]��\Na��:�""'732654&#"##5!#6632�*
+$����%3Y6)F
p631��||�+_NNY%��l~&��7��9�"&&546632&&#"3#3267gU�QT�T?d!N8#;V��
SC(?NRG�st�K3"^CI{UJ$\`��2��'���J�
��JN���;������E�#+"&'732667667!32###%32654##+
7U15[8|2!9%$'L�6;i�Z�(XHO^).VfFYh+�,3UE�3335332###732654&##�V�7U13V6�V� #!#����(XHO^)��u(7/&8�5!#6632#54#"#��#Wh�H�||�Ye��H����ER~&����@~&������FC&�?�D�3333##5?����z����t��<�3#53533#32#'32654&##�ww���%GsEBqG*!8;:>�u``u_"OBN\'r(2+%&��2�"&&546632"3&&267#,MwBBwMNvBBvN-;	�	;-/<�;N�no�KL�nn�N+KJJK�NVRSUo�33366776632&&#"�ŜO
%NH	y���6e66e6�\S�#�2l83!73!l�������2�
3#57!!3#~LL�����F(|�K���De�23'&&#"'6632353376632&&#"3#5####q	-C&x&B-	I6
b'B%x%B[��.C����C.���\ܼ����.�D,�,5&&'732654&##532654&#"'6632�3`)N&S.6C=@WC>47,(B"K-r=tz*)1AdP��+&f#!.*)&m'#&"b(+^Q/K
P;Qb�E�D]�33376632&&#"3#5##E�:L"S7
!;�Ss*�<���D2�#w�\ܼ��X�3#5!37>32&"#"##��13'3 



,��p1|��03�$|����@�D^�333533#5##@���K
pa������\ܼ��6�D:�5.546632&&#"3267!Bj?S�W>d!Q7$E[]I#;Q7T��S�^l�Q3 [pbdp YB���H�H�35#57333667733#�_��BB��r��Fq�%I''I%���K��DU�333667733#5#'&'#���?
:��vWp7GDO={44{���\ܼ�0;3�,�D\�!#"&&553326733#5~+Lm:�8:&�K
{.iX��D6��\ܼ>*�336632#54&#">�+!Mn;�8>'��.hX��D5����J�
��WC&���	OC&�����S�M��\C&���2��0����@/&���&��2N&���&��2�����F/&�����Fy&���=���<���-32654&#""&54>76676632�91+*.(8kv�.TsF.2@#4I-L*5W5<jTTI>B7#
�ګ�o�T*

�803fLLs?T#�#332#32654&##32654&##T�;_8(,/8;b;gQ*$$)R^-%',]�92;623?/��t�3!!t����s���TF�3#'53>77!3#5!��n�
uO~��
1J
�׿` KF��`�����7��#� V�-3'&&#"'6632353376632&&#"#'##5#q

-C$p$C-q�A*p*A<�);i��i;)�<������0���)"&'732654##53254&#"'6632=o;9)T"F>[xoS2>+H)62m=Hn=%375Dv*]0c/_!>2:
722E"I�33366773#5467#I�#���	"��%].;��&\.=��I�&"
MF�33376632&#"#'#M�N.I5
��vO�[?)	� ;������
�"&'73267667!##I
v�o

R�"(J�J�}7o7SY%3�#33366773#54667##'&&'#%�;	7��
6Q9�66��OP!J �� LPOH�33353#5#H����������/��)�*H�3!##Hȓ��}����H�H)�+��C��#�2&�3#5!#��}ss�����>;�4�HB�#/:57#"&546632'536632#"&'275&&#"32654&#"�&CO*C%#|->J*D'$�!� �K�yQu>H��L�sUx?H$�DGIDFLCC���%2�3H�TI�33333#5H���O~�}��`��@�!5#"&&55332753u(#>`6�-4$��'YJ��.)�#5�333333#�IxI��}��}�#�T_�3333333#5#�FuF�;q�}��}��`��3�3#5!32#'3254##��&<`88`<&NN}s� H>@L p<9&2�3332#'3254##3&�$3Q00Q3$??�� H>@L p<9��Q*�3332#'3254##Q�i?d::d?icVVc� H>@L p<95���"&'73267#53&&#"'6632�4m'7F#>R��
L:F2?g:NLI$V17c2+#U#9sXVt:��D�%2654&#""&'##336632�!C^4��5]ATddk=PP>>PP=wec��_a����"�!5##7&&54663335#"{Gm��)97]9��VVO'���H:>G�<$��7��#/)��7��#�-�<&�*"&'7326654&&#"##57533#36632=%

,*(�BB���	H1\a9h�l)j`MX$��*EHGK,^-����E��t/&�#C��!�"&&546632&&#"3#3267[PIP�O9[!?;"8N��R>%D4*j:tVWs:Y,1c71Y%��5���.��O��$��O�N��*�<��%���@� '"&'73267667!32###%3254##.	4S11S4�3

DJJ�-G�P� H>@L }>}>EK|<9$?�3335332##5#73254##$�O�6S//S6�O�CC𳳞 H>@L ��p<9���I��MF/&$���I/&"����>;�&-
K�T
�3333##'K����~�}��� 2t3#53533#32#'3254##������&<a88a<&OO�tWWtW I>@K p<9��/��)��%K�33366776632&&#"ֱ�K
	EA	]��%M''M%HXV|#��x�3!73#xw	���/�
35#575!#3#�SS�����E�srK��Tc�23'&&#"'6632353376632&&#"3#5#'##5#q

-C$p$C-@>a%A*p*A<�);i��i;)�<�`������0�T�+'&&'732654##53254&#"'6632�+S,9)T"F>[xoS2>+H)62m=Hn=%375bO�� ]0c/_!>2:
72=J�M�TR�33376632&#"3#5#'#M�N.I5
_Xl3vO�[?)	� ;�`����S�3#5!376632&&#"#'#��3 E0

��h3}s�[A'� E���H�TI�333533#5#5#H���O~V���`����C�T#�'&&546632&#"3267YsP�L;`D77@PN='A;B#���hSt=&['LA@M] ��H9�53366773�ǔP



P������'F$$F'�� �H8�5#57333667733#�M'��P



P��n���E��'F$$F'�[K�%�TA�3'33667733#5#'&&'#%���3


,��Za|#9
1�P+,P�~`��R,+R@�TJ�!5#"&&5533267533#5h% <]5�*1�O}�'UF��('��`����H�#��V�& 
��2�� �'��=���&
����Q���7��#�&
��7��"����I�&"��/��)�&(��/��)�����>;�&-���>;
&-��/�����/���&e
C���$0"&&5467&&54667>7'32654&'%?f=]G+D5bB:@$C"CA!;%DL<l�:'(;-#4@6dDTd H-49	�


,jQEj<�49;>+;
F��Q4�?��Q4�E��Q4�R���u�)5AE"&''26533&&554632"#&&'#"&54632'2654&#"53
�e


-1
�a-�1JJ11II1J�q�{3[z1_@Cq��/[z1_@COXWQQWXOZ"+,"",+"�NN��J�2=6654&#""&&5467&&5466326673&''327&&'�
	%D]0?*'I1JS%8= 	�, 3(#CG%Y}1(  "@
�%.'��3U2AS&G/M/PD)A4; K+;n3 	w."�%.C$%8�� �'"&54632'26654&&#"7"&54632,n��nn��n 33 44,, ++��������r(`RS\&&\SR`(�*"#))#"*O{353#566733O��AN%l�wo[
��w3�35>54&#"'66326633:[�L62&?O2hICd9Aj>?�TM}i-/1'O232[=5oo6|*���*"&'732654&&#52654&#"'6632Rv%D P+4C"SK^M2,%A!J/l=Ej;@9<RFs2(]$'$)h/&!%Z&+)M81FM>;S+#.{	35467#5!533#��$D��	�PPkO6�n�e~��p�.��{"&'732654&#"'!!632Rt'B I-6EB2, A���(,;c<Fq4%]%2102*A|w*WDFd4<��!�+"32654&".54>32&&#"6632=<B%&;4*1\I+.Mc4Df M< 'C*"S$8X4?h%"L9161+��$LwTY�T)-X&WK!$*WCB_4>{3>7!5!�+D2���<K(P�wt?|ZCv{�]=���&3"&54675&&546632654&#"2654&&'+n�G1(58a?_q5&2E8k"0.,#1G,8'D.#BaM;IH26O*_O,GLA2P.~,1%-$%',��'(%3*/5���*3267&&#""&'732667#"&&546632�4+=A&%<NCg!N='B+"T#7Z4?h=BuJ-Na�1+"K91�.X&XK!%*WCB`3A�pY�T)8�� �!"&54632"6654&&267,n��nn��n(�3 '�4��������*��*Va'�@	)Uc*O{
353'733O�`H�t�wBCQ���w8�� N'"&54632'26654&&#"7"&54632,n��nn��n 33 44,, ++��������r$TGGP!!PGGT$u*""**""*OB353#566733O��AN%l�w6[
�5w3N356654&#"'66326633:��62&?O2hICd96^;?}TY�8/2'P222\>0\W+|*��N*"&'732654&&#52654&#"'6632Rv%D P+4C"SK^M2,%A!J/l=Ej;@9<RFsZ2(]%,(*h2*!(Z&+*O84IMA=W-#��.B	735467#5!533#��#C��	�PP�wN7�Z�e���p�.��B "&'732654&#"'!!6632Rt'B I-6EB2, A���&;c<FqZ4%]&7552*I{�	*YGIg6��<��!�s>��B
>7!5!�%NC���<K)Nm��V{ZD{��`��=���u5��N+3267.#""&'732667#"&&546632�4+>$0%<NCg!N=%A,#S#7Z4?h=BuJ-Nas55$9@2��-X%YM"$.^FEb4A�p_�Y+8�� N"&54632"654&&267',n��nn��n%�3 %�4���������
�#.JS#�y�!-JX%OB
353'733O�^H�t�wAQ��5w8�� �'"&54632'26654&&#"7"&54632,n��nn��n 33 44,, ++��������r*dUV`''`VUd*�*"#**#"*O�353#566733O��AN%l�w�[
��w3�35>54&#"'66326633:\�L62&?O2hICd9Aj>?�TMk.47'O235`A6qp7|*���*"&'732654&&#52654&#"'6632Rv%D P+4C"SK^M2,%A!J/l=Ej;@9<RFs2(]$)'*h2'$&Y&,*O93IP?=T,#.�	35467#5!533#��%D��	�PPq O7�_�f���p�.��� "&'732654&#"'!!6632Rt'B I-6EB2, A���&;c<Fq4%d*4424+I|+YEHe5<��!�+"32654&".54>32&&#"6632=<B%&;4*1\I+.Mc4Df M< 'C*#S$8X4?h."O>383.��%NzV\�V*.X([N!%+YECb4>�3>7!5!�+D3���=K(R�|x@|[Cz�`=���&3"&54675&&546632654&#"2654&&'+n�G1(58a?_q5&2E8k"0.,#1G,8'D."BdO<KK38P,bP.JPB3Q0�,6'/''(.��)*&6 +25���*3267&&#""&'732667#"&&546632�4+=B&%<NCg!N='B+"T#7Z4?h=BuJ-Na�3."P;2��.X'\N!%+YEDa4B�s[�W*8�� �!"&54632"6654&&267,n��nn��n'�3 '�4��������:��-Yc)�0,Yg+O�
353'733O�^H�t�wUBQ���w�����"&54632,4@@44@@D12DD21D��'��'66'#"&54632�%CA*BB.>>j�VI.51/8[Q_�������"'�C�����'�"'�C�����Y�#"&546323"&546323"&54632[)33)*22�)33))33�*22*)338()77)(88()77)(88()77)(8����7'3"&54632��0+99++99�����9-,88,-9�R��73"&54632�`I+99++99�����8,-99-,8b����&7&>54&#"'6632"&54632�+. * 0R$c;:\7!/.<+99++99�(<.'& K(2$H7(7+)2#��9-,88,-9g�F��&"&&54>'33267"&5463249]7!/.�+. +1R$c5+99++99�$H7(7+)2#(<.'& J(3�8,-99-,8�/��''3�#�#/푑�R/�'��{���"��"&5467632-7>WX&48
(36"TLR}(ND02).7�"��'667#"&54632�'48	
(47)8=W"NE/3).7UKR}��3"�'��{����E"$�'��{������������E�$�'��{�������"��&&54632#"'gWW=8)73)
	84"(}RKU7.)3/E���%'57Z��>���7�����7'7'7�>>�7��7����*�'��{����;.�'��{����F~���F~���F~�P�675!P��oo�X655!X�ooP�675!P��oo���X6����������e��%"&&546632,.K++K./J++Je*I..I**I..I*vS��%"&&546632'2654&#",4S//S45R//R5,77,+88S/R23Q//Q32R/K:..::..:�r��7!�.r(���`��7!%35#�R����`L��F�zr��753z��rD��Z`��753%3'Z��ղY`x��F��T��73�D��Td���4��7377'�y��C��4���yYZzR��%5!*�d�RD��Z0��%5!'7#*���Y�0x����|T��%%5%3���DT����Y4��%%5%3'5��yF�4��\y�Z�k��7!'26654&&#"�<�*B&&B**B&&Bk6��%A))A%%A))A%�XJ55!X���<�\��5!<�nn<����5!5!<� �^^�^^>I�5!>�ISS�c����"&'732667,x�g&A��??��A&g��=?C$++$C?=��M��
&&5467�arraRYQQY�V捍�VAW�wv�W~�M��
'6654&'7�RYQQYRbqq�AW�vw�WAV捍��h��!#3�(���\N�@Nh�h��53#5!h��(�N�N��j�h��/"&546654&&'5>54&&54633#"33�`Z<66<Z`M)>(/55/(>)�=Q$53!V"36#Q=N*(O,93		39.L)*Ni�h��/532654&54675&&54654&##532#i)>'.66.'>)M`Z<66<Z`�N*)L.93		39,O(*N=Q#63"V!35$Q=J�`�3JI{���f���m�3��J�`�3���{I�f���m�33낂����H0��H@[67'7'7737'�@a��N��a@t[,�DG+��+GD�,�Y����5'37'�	��	v	��	Pv	��	v��Y����75'75'37'7'�	��		��	v	��		��	P�	v~~v	��	v~~v	�G���1>"&'732654.5467&&54632&&#"654&&'7j"T3<&=C=&-%
^T:]D86'?E?'+)b� 4=$6O(%T)+K3+A/&D)DU)\' -@-,A&C[�!% ( 0���
%"&&5466333 AnAAlA*4��4hLTb)�9���$��w���&Ȍ�t��>���'��v����D�$=I7&>54&#"'6632"&54632&>54&#"'6632"&54632N	%AJ'?V! 4+99++99�	%AJ'?V! 4+99++99�/G;7
TI>+@314!��9-,88,-9/G;7
TI>+@314!��9-,88,-9<��D�$*6%&>54&#"'6632"&54632'3"&54632f	%AJ'?V! 4+99++99���0+99++99�/G;7
TI>+@314!��9-,88,-9����9-,88,-9���$*67&>54&#"'6632"&54632'3"&54632N	%AJ'?V! 4+99++99��0+99++99�/G;7
TI>+@314!��9-,88,-9����9-,88,-9@����(7''36654&#"'6632"&54632�
v%<,&<Q(v<Af;$54"8(44('44��\\(1((+K.1(J41D1%$��7))77))7\�F�(%#753267#"&&54>'2#"&546q
v%<,&<Q(v<Af;$54#8(44('44�\\(1)(+K.1(K31D1%$7)(88()7���3!#�(��N��h��!#5! �(qN�A�z�{33�p���MNh�z�{533h�p�N�����h��!#3%3#�\����11�\N�@NN�h�h��53#5!'3#h��\�11�N�N��N����!#�'��N��h��#5! �(\N�V�h�33�p�����Nh�h�533h�p�N`�R��E�;"&&546632'26654&&#"7"&&546632&&#"3267,L�MM�LL�MM�LAb66bAAb66bM2N-1O-'57%'&!/7	Q�gh�OO�hg�Q=D{RRyCCyRR{DK0Y<;V/=
>,3<
D��E�,4"&&546632'26654&&#"'32##53254&##,L�MM�LL�MM�LAb66bAAb66b:�+F)*F*<	Q�gh�OO�hg�Q=D{RRyCCyRR{DWm901@[�@e7��)2"&&546632'2654&#"'532#'#532654&##+6Z66Z67Z55Z7?QQ??QQY#.*<74[;;[44[;;[41SFFSSFFS8� "M<<d��jR�5#53#333773#57##'#BO�Nqg""gT5:6j�WW�:^GG^��`s��s`��^R�&:"&'73254&''&&54632&&#"733773#57##'#k!72#*%>7 8,") Bng""gT5:6^<	*&);=
	

(%(?:^GG^��`s��s`�m&�/9".546632#'##"&&5466754&&#"32672675S<oV3R�QLa.N<)$:!=pL:-/Z;=a6-;**U$F9�1b�f��SAoE��3#&?'6E(	%@'>�nh�CIK\$!��&�0:".54>32#'##"&&5466754&#"32672675S<oV31Vo=I^-N<)$:!=pL?>#G<$=a6-;**U$F9*T�W\�T(;c<��2#&?'6E'
)?=eHTo6I[
$"F�37#7#537#53733733#3##7#�i
h�KW
P\TiTOZT_Uhn�y�^n^����^n^���T�'7'7737'�@R��N��R@e,�8H �� H8�,~|��675!|`�oo��|��6���|��6�@���'-3'7&&'77.54632237&&'#74&'27"W'L@3)N2wdX"7I*O47iM`J�Es
�
#dr)@1L[�
�$Th*A11P.�
a,	Z��l�
�2���x���2���x�
�2���l�
�2���x�
2���l��2���l�
2���x��2���l�
2���l�
2����X2���}X2���ol�2����v�	2�:��"&54632'2654&#",KbbKKbbK))**�nbbllbbnR8FE66EF8��F��535#566733�ym08Ui�Z�C��Z��F��'6654&#"'6323�Yf# -$=>aEUD8��9A]$!08QF>0S1Z��:��'"&'732654&#52654&#"'6632*7XA.&25*/!&= I1'B(B&+-I�''3>7# 0"<1#$6��F��53533##5��Ok\_::_d6'�ddGVV��:��"&'732654&#"'7!#6632*7WA.&. -�
%>&[�''3" �[79(:M��:��
$"32654"&54632&&#"66321$)"4T]f[/:*$.01=G'C

)$6�p\^tD

71B9'>$��F��>7#5!�2#�:.3�=_[4[::fkA��:��$0"&54675&&54632'6654&#"2654&',HX,%#!V=@SE()X7""/!"�@."3*299293%.A��
��:��%73267&&#""&'73267#"&546632�!#(#%.=*%/.1=G'D*T\dQ
)$��D71B9'?$q\]t���&.54667J'11'O/))/��/U]<<]V.(?uA@v?���}&'6654&'7P/))/P'00��(?v@Au?(.V]<<]U�=l��"&54632,%%%%�$%%$��v��'66'#"&54632�&(''HA��7
#"a9Q����D"&54632'2654&#",@TT@@TT@\MNYYNM\O'33%%33'��8!5#56673Q&*S�@����D356654&#"'66323�>T>A(;G2\7)L#8$:3"AW����D%"&'732654&#52654#"'6632-F#)-#& '#*E(2E#NB7	>1(!
&,8��D7573533##5�`LMA^33^=3��XXB==����8"&'732654&#"'73#6632."D#)++Յ
2;LB�X#3..@����D"%"3254"&546632&&#"66321
$GO%I6 7*
&"'.6G� �^I-M/=."0..B��83>7#5!�&�&(-HE'W8+MS5����D$/"&54675&&54632'654&#"2654&',;K'J35I#K.
6% !)22)
$$%6�

�

����D	#%3267&&#""&'73267#"&54632%
	#!6)
&!'-6G6GO%I���<
-!
0./A^J,M/����&&5467B3993OS+(Y8xOOx70am7i/����'6654'7O)*SO399Y0/i7ma07xOOx�lz"&54632,%%%%	%&&%�}vz'66'#"&54632�&(''#%A�8$#3/9P���+�{
7���7�o7���7�{7���+�{
7���7�{7���+�o7���+�{7���7�o7���+�{7���+�{7������7������7���.l�7����v�7���o��)���o��J���o��7�o��""&5467&#"'6632#'#'2675�2<ep93%#Q*DNS:#?2o<(3?+DIM�$N8�o�K"'##36632'2654#"O0)	Qh/>H)A>#8
o+#�u2\L8P*T+1U�
	�o��"&&546632&&#"3267[2P/4U1"50

'//$ )@o)M67M*@1)(1@�o�K "&546632'53#'#72675&&#"@L)A$&gT0
$ o\P6N*1t�, T�	)./+�p��"3&&"&&546632#3278*�#3T10N-ON�5%**"Gz  ��(M74M+\B">�w�R5#5754632&&#"3#JJGO3#<oow�M
8LK3
Q�����+7F%"&5475&&54675&&5466323##"'3322654&#"2654&##"&'@W4(B%�AP;
6<BGlV&1(	,�(+' 
,(5K:4
(,4C0�	
�w�K36632#54&#"�h5$83hw�u=I>˾��w�k5#53"&54632&}�7&&''w�Q��v"$$"���k7"&'732655#53"&54632�0"~�D)&&''�
I	 #�Q��(E*�"$$"�w�K3373#'�hqr|�pQ-w��~��~-Q�o�K"&5#533267zC=E�

&oL>Q��P0w"�!3366326632#54&#"#54&#"0T.""-
2"73hhwJ+"J=˾ܾ��w��336632#54&#"�U5%83hwJ+I>˾��o��"&&546632'2654&#",,L//L,,L//L,  o)M67M**M76M)S1()11)(1����7336632#"&'72654#"�U3>G)A%(4#8
��!\L8P*3_�+1U�
	���� %57#"&546632373'2675&&#"]-@L)A$*Q�
$ �c0\P6N*"�>��	)./+�w��336632&&#"�V@#
6wJI)(W#,��o��&"&'732654&'.54632&&#",)T/504"PF+E/,0-5#Ro?		&/:=
	%.>�o�""&55#57733#327mPBEJ
W��!"4oQAoMaaQn%J�o��"&553326753#'#�83hhU5oH=���.tw��
3366773�yh0

0cuwJ�33���&w�337733773#''#xRf&S(_OxwI�dd��dd���ZZ|w��7'3366773#'&&'#|oholioo"		w��4

4��44����7"&'7326773366773��h/(ctC�M@�//���@>�w��	57#5!3���#��w7�Q7�Q�p��
"'7"3&&"&&546632#327:}Fl7*�#3T10N-ON�5%**"G�nD��  ��(M74M+\B">�p��
"'7"3&&"&&546632#32704kGv*�#3T10N-ON�5%**"G�2�D�  ��(M74M+\B">����2"3&&"&5467#"&&546632#326732678*�#'".3T10N-ON�5%("1 
	*z  �d""&(M74M+\B" 
=(/
�p��"&54673&&#"'6632'267#'OP�/#)"G1N//M0&�%p]C">)M74M+N!!�w�N4632&&#"6632#54&#"�CI.5$83hwR:KL?H>�� �����%%"&54673366773'2654&'#/1:hh*
)ce91





�6,-�""��� -,6@�w�M5&&546632&&#"1@/M-3H3+ +3?w�$I7.<"A!7$��o��"&546632373#'#72675&&#">M)B%2&	PT2
$!o\P6N))!�� T�	)./+����+%"&'732677#"&546632373'2675&&#"H#3$#->M+B#,S\A
%"�C
&\F2K)��@D�
p	)(')�w�k	535#533"&54632�tf�j�&&''wQ�Q�Qv"$$"���ol�'2���@53ب�HH���=5!�
�AA>�=5!>��AA$?4S)7'7&547'76327'#"'72654&#"mIQ"!PIY0642YIQ"RIZ46/e$22$$22?JR.A?.RJZZJR-@!7RJ[N5-,66,-5@���+773254.546753&&#"#5&&@@/W/J*CJC*XLb4MI#?)E*BKB*WSb1hsd!-*>.AV��+ T.)>.?]��)C&�)356654'#57&&546632&&#"3#!C4BpT;gB>Y#O,07��#[P5
V)?\2*'P.0$[
$4|9{35#535#5333667733#3#⩩����==�������F7F%�!B !B ���F7F�-��G�1"&'#57445447#576632&&#"3!3#3267}f�?67A�j3_%Q4 2B�����D1#6Q(evqDEny(&O<8J
J8=L,0`���!5&&5466753&'66757av8a>Q'?C$;E"�%#$$)_
�mGhB
a]Z��]_\-A�@.��&�&"&'7>77#5737>32&&#"3#�!2
 WK/VE;&'s'Q`	l=9�e+I[+n+#7k�<a9O��3�/5"&7&&5467722327&&'667'7&&'o	13�JY�m23
7(Q
0)Q%X534")%&�c���s!�u��h\fl*O�kL(.c\j�a8]eC&�035667#573&&'#57&546632&&#"3#3#!C.?pOZC;gB>Y#O,07����#[B,D

E?\2*'P.0J
J*|<{#'+3'5#575#57533533#3##'#73'#'3'#3'#�"*SFFFF�TPjEEEE�TP�#�>1�0=
zz���626����<2<���m|<222K{3#575323###3&&#3267#eQQ�;dC
CB
De:,�
6,"",7
�|U� G=[9I#�H&"�'"P{!'3'#573373333###'377#377#*� KD �#w&w?E�A
�ꉉ�"9������?��"��h�((��(([2�)-%"&5466323'5#53533#'#'2675&&#"5!N]4P+$0��yHHd	;#"2*��tc[8P+CJ11D�n%ao+&/-�JJK{',13#575#575323#3###4&'#364'3&#327#eQQQQ�O|K??K}N,����|>"">}Y5.5�9F;
	;C?��
-	}##�&C���#5.5466753&&#"3275#53&Bf;9gCbU=Q4 AGK@#L�I)nfP�_\�U
he@Pqegm
zx��$f5���6"&5467#57367#5736654&#"'66323#3!327Gko<J�J�# 3F#W>\l	Dt���
%(AH=)pgU	ED
 O'0_RJK

%<^((O��3�!5.5466753&&'67CGn?=nIQW@Q"+#Q!O/�3.01nd	N�b_�T
][AO
�Z
(L$-e�Tk�lY{75327#573&&##5!#3##'YIt�Q�
F7I��:MK	H6����uGDuJ#?J@Q����'{ 5'75'75377>54&'7yD#gD#g��#��#�*H,yg�� @17!@2�~E@V7E@V�"8# [|=#5{35'75'75#5!#77�q#�q#���q#�q#��7@H77@H�kks7?I77?I�#5{3#57!#5!�g�����EK�L1JJ9{!35#575#5732##3#32654&##�mmmm�ClACm@=��74::47�E3D'&QAAR%2K�U7.504{35#57!!3#3#�LL����ݏ�aU�|y{PZaGp7'77'7\K�3�3�KI�/�0�I��Gph��Gph����H�'
��D&h
��F�'3?K"&54632'2654&#"'%"&54632'2654&#""&54632'2654&#"�6II67II7�&�X6II67II7-6JJ67II7�H<<CC<<H?''''�,�^�QH<<CC<<H>''&'>H<<CC<<H>''&'��Q|'�qD&h��G|'�qD&h���Q�'
�qD&h����G|'�qD&h
���
��G�'�qD&h
�����G|'�qD&h���
��G�'�qD&h�����G�'
�qD&h�����G�'�qD&h�����G|'�qD&h�����G|'�qD&h���H|'�qD&h�����G|'�qD&h�����G�'
�qD&h�����G|'�qD&h�����G|'�qD&h�����G|'�qD&h�5��F{!-5#56673'%5#56673"&54632'2654&#"�Q&+S��&�@Q&+S�6JJ67II7��@�,�^�]�A�H<<CC<<H>''&'����G�'
��D&h
�F^675#53533#���l��^�h��h�F~5!F�hhTp#7'7'77'�I��I��I��I�pJ��J��J��J�FIK"&54632"&54632%5!,"//"#..#"//"#..����+""++""+��+""++""+�hh������������F��&�t����F-g'��&���t�y%%5%��~���	�f����b�y75%5%5b	��������fF0
35!5%5%F�4̬���hh��z�y."".F0
35!%5775''5F�4�����hh�y."".y�zF675#53533#5!���l����̞�h��h��hhV�	3#''#V�v�y.--.��t����F(l77#537#5!733#3!XGY�I�H]GY�I��H(zg�gzzg�gz4�$�%".#"'66323267�/%$'X U./%$&XU�)))NC(*)NC��4v$&�t��F^~%5!5!����^�h��F^~7!!F��^ h�I^D7546632#54&#"I;fBBf;l@77@^�Gh::hG��CHHC�F^673!Fl`^��h��ye(4%"&'##"&&5463236632%267&&#"%2654&#"�5P)B.(A&ZI/A#L3-J,-N��$( 4"&+$10y.@%/0M-^h,(5/2V7Fb3�%!)0 ).$&./����"&&546632'2654&#"-(B''B()A&&A)%%%%�%A**A%%A**A%F)! )) !)�c��3��/cK����pc�&���v�cr�''3/�c������@�<I��<���+73267&&#""&&5466324454&#"'6632�.&A3*7=5Z57a>#D3;2@)Y4Ng4I��+,>L!7��0X=Eh; 	T`Z#'L�[r�_��b�""&'732654&&546632&#"�
'QN 'P�j>GM��RGoAk>GL��SFpA�p�#46632&#"r�QN
&�p�GoAk>G}�br�"&'732653�
'�P�j>G��qFpA!��Y4'736673�J�c�b�P�EG��**��|��9�a��9�u	O�#33736677#O˰˜'�(�
�
��t�����4m1<<1mB��35!5#535!5!B&����|�{�|�t��,5,c'��tA��A;��.{
55!!!;���⧮=xW"#W|��|��?{!#!&��x�
s����H�".:"&546632&&#"3267'77'7"&54632'2654&#"�?T,G(2/!!)9kK�3�3�K�@TT@@TT@8WO6K(<	
1)(/
=��I�/�0�I��\MNYYNM\O'33%%33'J���	)6654&#""&''667546323267;,+6Cl
71jQJW*[H./5!T�*X6 4��IKZ�~uZP>kd64,Y0��>�1".54>32!"32673!2554'&&#",9cK++Kc99cK+�b6T5_"&(r�
G&(H4\zFFz\44\zF�	<=3<HZ�

�
��8		5!!#��F�e���O�t���9	'3'�OO�f�E��E�����J		'7!5!'74E���f�EO�t�O����9	737*��O�t�O��F�e���F��]�	%'7'��
j�����j
�>��	7'7'%'7�S���j
S�
i��G6��	%%7'7'7���S�
i6j
�S���f6�	7'77ij
�S��6��T�
j
��8	5!!!!#��FN��((��NODU##UD��97'3'#'##nOODU##U�E��EN���((����J	'7!5!75'!5!'74EN���((��NEODU##UDO����9733737*��ODU##UDO��FN��((��NF����d�%'7!'57!'7d�M[��[M��M[$[M��<ll<��<ll<J��0#'7'73'7.�<ll<��<ll<8�N[[M��M[��[N<�S05!'#'7'73'7<���<ll<��<ll<�mmu�N[[M��M[��[N9Z:%"&&546632,Fn??nFFn??nZ?mDEl??lEDm?'H1L%"&&546632'26654&&#",KvDDvKLuDDuL2N--N22N--NHDuIJtDDtJIuDL/S45R//R54S/Hf.7!H�f�85S#A7!%!!5�hB��S�OP5S#A	77!%!!5I�C��`��S�?�WE:f9@b%	,��9��AeJ753A��e�AeJ753%3'A���pe�H�Dk(A73D� k���Dk(A7377'D� J��k���kkAQ6%5!*���Q��AQ6%5!'7#*���p�Q����0kA%%5%3� �k��*0kA%%5%3'5� �N�k��*��k
kuA73
d��k�����kKA%%5%3G��dk��*,M,G#7!%26654&&#"7"&&546632,�JqAAqJIrAArI0J**J00J**JM��AqGHpAApHGqAL,O23N,,N32O,7W!D+%"&&546632'26654&&#"7"&54632,EoAAoEFnAAnF0M--M00M--M01DD11DDW>pIIn??nIIp>H,O44N,,N44O,6E43EE34E��u�	7!%!!KGA����
lA��K:���-7!667%!&&'73667!K�9Z&A���4["�B.]#1R1�_
lA'EO(��K:�R�zMD=7p8c�R���p�&&'73>7�I5](=$f{CZd�=U�J==>xݼEN_���5��-�!"&&5466323'6654&'�4!-N/ OG6195m&$<$0^<*P*,Q��af����j�!"&&546632%#"&&546632b1 (E*"�eT2 (E*"�e&$<$�<��bf&$<$G$��af��X�#.5463236632.\u@W@2LL2@W@u^�vi6_g4DD4g_6iv�X�47"&5466327.546326632#"&'#!5667#�:I'@%$#"
W@@W
!$$%@'H;%IUF�hFUH�OC1>	716CC617	>1CO&3cR
99
Rc3&����\�#53.��..hi��X�!%#"&54>73#"&'#!5667C'9MCsXXsCM9'BUF�hFU�3'BF-OZxUUxZO-FB'3cR
99
Rc��]x+7EMU%"&&546632'26654&&#"'"&546323"&54632"&'73267'254#"3254#",Z�NN�ZZ�MM�ZDg::gDDg::g�iAQ/9''9/Q��
M�XY�MM�YX�MC;jFFj;;jFFj;�' && '' && '�B9!!9B�0Id'3;C%"&&5466322654&#"32654&#"267'#"''"54323"5432,T�HH�TU�HH���:FO/VV/O�0H�RSHHSR�H(&&&&&&&&�@;@@;@�����%#.5463236632.EPOA'kS?TT?Sk'AOPE->02@\D_`7DD7`_D\@20>���x"6BNV&&#"3262672654&#4&#""&&54632#32654&#""&'6632672'&00
6XRN88ohgq6b@U~E��o�;H7X3%j	

	KUXhOPfWh)�
	
	
��03P6/?DNSIu�E;V��bjMG
MJ7T/73�			e+%.45-%+L53��g�%,:H%"&&5467&5467&&54>7'267!'66327&&#"66327&&#",n�B-1%?1	
,30�1?%1-B�n9Q��Pb# "�" #@;0:?6;			'O	;6?:0;@`5==5�""A77A""A77��x%;IW%"&54632'"&5463226654&#""&'&5467663266327&&#"66327&&#",[_gSSg_[Bh;xmmx<gB^�#B�uu�B"��  # #�  # #�l*6SMMS6*�7qWpggpWq7CVT�&(bddb(&�TV0!!A77A!!A77��=X('73546323%37'654&#"354&#"C((.bYYb.((��))5/""/5.�$&%%F  �\dd\� �� ��6"//"6!/55/.��*�'2654&#"5#535.5466323#,?PP??R%B��<Z2AsJKrA2Z<��<UAATTA+D'��lgICd<Em@@mE<dCIgl��v�
'72654&&#""&&54663275%#7�@Q%A+)A%Q>JsAAsJA6q�$aaAsVUA+D''D+AU\@mEDn@ja�݁hI)Em@��d�7%2654&#"'7&&'#5367'7675373#'#5&',5EE55EE�IR
bb	PIQl
RIQ	bbPIR l�F66FF66F�IPhQIR	mm
QIO
hRIS	mm	J���3'377''#�x��>9--99--
QP����{y]\yy\]#5�
33%!5''##�v�g JDDJh/���c�wppw���c������"������"�����C5254#56�]]k\\ODDORDCS�zC&546"3zk\\k]]SCDRODD���A5&&546632&&#"1@/M-3H3+ +3?�P%H7.=#@!6%t��373'!��������<���<�'!%��<��Z���%"&'573267O#?��	
&�)87iQ9?E
��}1z/����1�/���u1����uA���yx�3��yk�����P�����1�/���}1z/��xb3�Z��k����n=����m;�����P�����<��	���8����5
���>��
�����2����4.��)�".:FR^jv��"&54632'"&546323"&54632%"&54632!"&54632%"&54632!"&54632%"&54632!"&54632%"&54632"&54632'"&54632+|���]�a��c]����
-RmmR+}1z/'72�d�1�b����~'7Q�N��w_��+b'7N�!+���1�/'7&H�d1H�b���~'7A�N�J�_�.�>'Xc#�.u1��'73'#�8l�l8}14��4\���C'73'#�@Z�Z@h�'oo'Tn=��".#"'6632327n%\@:%\@=MK7MKf��T"&&#"'66323267s#1$_G4$0%_F�LDKE�P��5!�(P]]���/5!�.�^^���P�������/�<��
"&'73267,URT((()TQ<[B // B[�<��
"&'73267,VTr  rT<TJ*,,*JT���P
"&'73267,JRP*""*PR�FC##CFz��C
"&'73267,`O||O�I;"";I�>��"&54632,+77++77>1()33)(1���d"&54632,(22((22�/%%..%%/m;��"&546323"&54632�#--##--�#--##--;."#..#".."#..#".t��N"&546323"&54632�** **� **  ))�* )) ** )) *�8�'6654&'7$,	bP'?8:ZB5",���v'6654&'7$,]L&?�:

I1(",w<�R
"&'73267'"&54632,XYL6.-7LXY ,,  ,,<[B$44$B[�(!!**!!(x���
"&'73267'"&54632,QY
H
9))9
H[Q ++  ++�FC%%%%CFx(! )) !(�8�"&54632'2654&#",ACCAACCA8=+*==*+=7���~"&54632'2654&#",3??32@@2�6--55--67�5
'7'7�NXbGNXb5#�,�#�,��y'7'7�Ie^AHd^�"�4�"�4uA��'737�l8}}8lA�4\\4����T'737�Z@hh@Z�n(TT(n�$n63��$b�B5�
'7'7�lbXelbX5�,�#�,�9��y'7'7�z^dsz^e��4�"�4��5��
'6632&&#"�TQVVQT)(((5B[[B 00���M
'6632&&#"�PRJJRP*""*�CFFC""�2x"&54676326%.;<B
&&22-.F0$ "�8�.5467W%@'Pb	+%8,"5BZ�2u'67#"&54632�B
&&&-;21$ "1-.F���8������5#5353JuuT��BGB�������533#�Tuu���BGB�>��5#53Al�>OG�"���'6654&'7-%
m2R�;(,/15D"��p��
&546"3pZLLZ$  $��9//96�����53533�UTU�GhhG������5#53#U�U��iFFi������5#53533#UUTUU��BGBBGB��f���53���GG���
���
���m�����������������
'6654&'7�;,"P=g�;6(%31�8��
&&5467ZP=g^:-"8(%31;���'6654&'73�;,.2V&&g�;iH	" 31���'6654&'73�;,.2V&&g�;iH	" 31��"&546673326750A%S!!@�21 4%	/	A��"&5466733267:1D&Z!#;�2. 5&
1J��g��73�j������$���5!#5#�Ln܎�GG��u����������	�����	�����n�������D�����J�L%".#"'6632327�%=3,\92&=2-\9�4DC4DD����
52654&#56�$  $ZLL��769//9��*���53353�LnL֎GG���	���5!'35#��nn���6Jk��'&32366324&#"#54&#"�St'		(<8SF�
�OP
/�6��'7'77'�1??1AA1??1A6,89,77,98,7��n=����f��T�(���"&5533267b=2j
�E:"O�0�C(��5!���^^�cJ�	'6632.#"w&g�xx�g&A��??��JC?==?C%**�;�r"&546323"&54632''7�####�####�8NN;$$$$$$$$�$�4����"&546323"&54632''7�""##�##""�?_\�$##$$##$}'�9h:�>"&5463277"&54632�####;&hM{####H!  !��!  !�;�r"&546323"&54632''7�####�####�dNN;$$$$$$$$�u4�����"&546323"&54632''7�""##�##""�|\_�$##$$##$}9�o7�!"&54632'77"&54632�!!!!_Ig#R!!!!H���;�G,"&546323"&54632'"&&#"'6632327�####�####E +!
@2&!*!	@3;$$$$$$$$�88'79�;�9"&546323"&54632%5!�####�####��(;$$$$$$$$�EE����"&546323"&54632%5!�""##�##""��.�$##$$##$�EE�;�i"&546323"&54632''737�####�####�\0dd0\;$$$$$$$$�\,AA,\����"&546323"&54632''737�""##�##""�\;^^;\�$##$$##$�f'II'f�6A)'73'#7'7�/]t]/f�8ON64\\4A,3��-'73'#7'7�;Z~Z;\�,d1�'dd'H2V<6�)'73'#''7�/]t]/f�iNS64\\4Aw4/��'73'#''7�;Z~Z;\�e0a�'dd'HM;W�6*2'73'#7'6654&'7�/]t]/f�
&RA 464\\4A
2
>*# &��)�'73'#'6654&'7�;Z~Z;\�&
S@C�'dd'H/
<-!,'�6�F'73'#7"&&#"'632327�/]t]/f<&CN%C64TT48^&o&o����'73'#7"&&#"'6632327�;Z~Z;\>(F0*'F0�'\\'?Z&96'	96�<�t
"&'73267''7,URK-+,,KQM@]W<[B$44$B[,�A����
"&'73267''7,JRH.%%/HR9H_\�FC#''#CFl/�9�<�t
"&'73267''7,URK-+,,KQ_tW]<[B$44$B[xA�����
"&'73267''7,JRH.%%/HR[s\_�FC#''#CFl9��<�y
"&'73267''6654&'7,URK-+,,KQy	'SCF<[B$44$B[}3

P4+1'����
"&'73267''6654&'7,JRH.%%/HRj&R@C�FC#''#CFm/
=-!,'�<�E
!"&'73267'"&&#"'6632327,NGH%((%HH&K3)%	K3<D-!!-D�&:6%96����
!"&'73267'"&&#"'6632327,JMG'))'GM(F0*'F0�>22>�'96'	86�4�B'73'#7"&'73267�4RtR4VA;6!%& 6;4!YY!=^:((:����'73'#7"&'73267�8W~W8\ILG&()%GK�'\\'H]<11<�P�n5!''7�(�1�<P]]y<iJ����5!''7�.�1�<�^^qBkQuA�R"&54632'737, ,,  ,,kl0��0l�(!!**!!(}�,aa,�z���"&54632'737, ++  ++pb/��/b1(! )) !(sf0TT0fs-�.54677�8$NR%!<"wG?,#,7R<��i-�.5467'7�8$NR%!�Fw!?,#,7RL���3�P
!&&5467'6632327#"&&#"O0EBR
%
�3)%K3)&3&%";		96&96&j-�'6654&'7'7� &RN$7�R"v?:R7,#,�j-�'6654&'7'7� &RN$7�Fw ?:R7,#,���3�P!"&&#"'6632327'6654&'7f&K3)%K3�	&
SAE�&96&96�/		;"%&����q'5!E�犊�����'!E����pq�3�px����p��!��px��!�7q%53!53!53��������犊����!�7�%3!3!3����������������qA333犊���7
���p
���p
�����A!!!�����7
���p
���p
���Eq%53!53!53!53�p��p��p��p犊�������E�%3!3!3!3�p��p��p��p����������q_53535353犊�����~���������������_5!5!5!5!�������~������������p�q%!#!��Ԋ���p��%!#!��Ԋ����E��p�q%#!!�������p��%#!!�������E���pqq#!5!q�����pw����pq�#!!q�����p3���p�q!#5!������pw����p��!#!������p3����%!3!��J�,�������%!3!��J�,�E������7!3����������7!3��E������q�%!5!3q�J,��w���q�%!!3q�J,��3�����'53!E��w�������'3!E��3���p��%!#3!��Ԋ�,�x���p��%!#3!��Ԋ�,���x����p��	%!##!3��ԊD��w����p��	%#!33!���D�,�w����p��%#!!3�����x����p��	%!##!3��ԊD��3E����p��	%#!33!���D�,���E3����p��%#!!3�����x�����pq�#!5!3q���,��pw�w���pq�#!!3q���,��p33���p��	#!53!#q����D�pw�w�����p��	!#5!33����,�D�pw�w�����p��!#53!������pw�w���p��	#!3!#q����D�p33�����p��	!#!33����,�D�p33�����p��!#3!������p33���p�q%!#!5!��Ԋ����w����p��	#!!!!q����,��p3D����p��	%!#!5!5!��Ԋ��,����w�D���p��%!#!!��Ԋ����3���p�q%#!#5!������w����p��	%#!#!3�������3D���p��	%#!#535!���������w�D���p��%#!#!������3�����%!5!3!��,�,�w�������	%!!!3!���J,�,�D3�������	%!5!5!3!��J��,�,�D�w�������%!!3!��,�,�3�������%!53!3�����w�������	'3!3#E���3���D�����	75#53!3����D�w��������%!3!3����3�����p��%!#!5!3!��Ԋ��,�,�w�w�����p��%!#!!3!��Ԋ��,�,�33�����p��%!#!5!3!��Ԋ��,�,���w�w�����p��%!#!!3!��Ԋ��,�,���33�����p��%!#!53!3��Ԋ�����w�w�����p��%#!#5!3!����,�,�w�w�����p��%#!#53!3�������w�w�����p��
%##!3!3#�D�������33������p��
%!##5#53!3��ԊD����3D�w�����p��
!#!333#����,�D��p33��D����p��
%#!#53533!�����D�,���w�D3�����p��%!#!3!3��Ԋ�����33�����p��%#!#!3!����,�,���33�����p��%#!#3!3�������33�����p��%#!#53!3�������w�w�����p��%#!#3!3�������33��K�
q%53!53w��>�犊��K�
�%3!3w��>�������jq�33犊��,���,����j��!!����,���,����^��5!5!E��q���퉉^�p��3!3q��d��px��x���p��	%!#!!!��Ԋ���,^����^�p�q	##!#q��?��pw�����^�p��!#!##!��J�?��,q����d�w���pq�	#!5!5!5!q���,����p����p�q	###5!q���?�pw��w������p��#!5!##5!���J?�퉣,�p��v��^��	73!!!�,��,^�����^���	73333^�������w���^^��333!q������qw����������^q�	%!5!5!5!3q�J,��,�^���������	%!53333��������w��w��^��!533!5!3�ԣ�����q��v��p��%!#3!!!��Ԋ�,��,^�x���^�p��3##33^�������px��w��x��^�p��	333##!^������,�px��w����w���pq�#!5!5!5!3q���,��,��p�����p��3!##533q��퉣���px��w�w���p��	3!533##5!q���ԣ���,�px��������p��5!!#!5!E�Ԋ���q��������p�q###5!#q����pw��w�������p��	5!##!##5!E⣉,�J��,q����w�����^��!5!3!5!��,�,��q���d�������%!533333��������w��w����^��33!!5335!q���J�ԣ����qw����v�����p��%!#!5!5!5!3!!!��Ԋ��,��,�,��,^��������p��###533333#q����������pw��w�w��w��������p��33!!533##!##5!q���J�ԣ����,�J��,qw����v�w����p�q4>33#"�9f�LEE@i>�p�M�f9�>i@�p���pqq!#4&&##532q�>i@EEM�f9�p�@i>�9f����q�##532665q9f�MEE@i>�pL�f9�>i@�����333#".�>i@EEL�f9X��p@i>�9f���X�3#L��L������X�#5LL��������X�#5533��L��L��L�����A�����A���A�A����qq'5!E�犊��q�73�������q75!��犊�pqq3�p�����q�'!E��������7!��������7!�������p�q!��p�������%!5!5!5!��J��,��D�D��p��!333���D�D�pw�������%!!!!���J�,�DD��p��%###!�D�D�w,X�!X,��D�pX�5!X�p���pX��!X�p^���pX}!X�p
���pX,!X�p��D�pX�!X�pk���pX�!X�p���pX9!X�p�7�pX�!X�px���p
�!
�px���p��!�px���pw�!w�px���p,�!,�px���p��3�px���p��3��px���pK�3K�px��,�pX�!,,�px��*��X�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



�U










ZU










ZU










ZU










ZU










ZU










ZU










*��L*�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���      NU      NU      NU      NU      NU      NU      N*��:E�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      9X�5!X9��
�pX�3
K�px���p,,!,�p��D,�pX,!,,�p��D,,�!,,��D�pX�!!,,�px�D�D�pX�!!,,,��D�D��D�pX�!!!X���X,�Dx�pX�!!!X���X�p��,,X�!,,,��D�pX�!!,,��,,��D�D��D�pX�!!!X��,,�p����5��-��������j��B�'3#57546632&#"3#33"&54632IBB$PC4ZZ��J+77++77}m5V4l
!&s���>1()33)(1��Z�'"&533267%#57546632&#"3#L;�	$�#BB$PC4ZZ[K#��m}m5V4l
!&s��>��z$#4>55#7#3ϑ"8CC8"o��p"8CD8"����H_?,)4M<����I`?-(3L;�T�A�Z�3333'53##A���%���%��h����܂�"]؅����=X���XX��(�l��(q�'7AQ�Q0�PP����\	\��\������(h���0Q���TTP����Hf$<HT`l&~	&�
*�6�D*:n�2�$�D*	�	�	�	F�	(D	dl	$�	��	4�		4�	2	
 N	4n	�	�	�	�	�	�					$	0		 	T	
,	t	0	�	.	�	
2	�	8
0	&
h	<
�	�	"
�	.	�	2	�
�
�"2F`z�0�	(�
,4,8`<�0�H
"2
L8`���� a���� gi & l �� ������������� J���� ����� ����� �������� 1��������� ����� [�]����� �� ������ [0]����������� ����� [-]������������ ���������� [*]������� ��� �������� �� ������ [$]����������� ����������� [-,*]���� �, ���� a���� �, ���� g, ������� 1���� �, ���� J� 2010 - 2020 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name  Source .Source Code ProBold2.038;ADBO;SourceCodePro-Bold;ADOBESource Code Pro BoldVersion 2.038;hotconv 1.0.116;makeotfexe 2.5.65601SourceCodePro-BoldSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunt, Teo Tuominenhttp://www.adobe.com/typeThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an  AS IS  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.http://scripts.sil.org/OFLsimple asimple gserifed i & lSami Jcursive �cursive �cursive �Serbian �Cyrillic breve [�]slashed zero [0]typographic hyphen [-]typographic asterisk [*]slashed dollar sign [$]alternate numeral one [1]typographic alternates [-,*]simple a, cursive �simple g, cursive �, Serbian 1Sami J, cursive �?@>AB>9 0?@>AB>9 gV 8 � A 70A5G:0<8A00<A:89 JA:>@>?8A=K9 �A:>@>?8A=K9 �A:>@>?8A=K9 �A5@1A:89 1:8@8;;8G5A:0O :@0B:0 [�]70G5@:=CBK9 =>;L [0]B8?>3@0DA:89 45D8A [-]B8?>3@0DA:0O 72574>G:0 [*]70G5@:=CBK9 7=0: 4>;;0@0 [$]B8?>3@0DA:85 70<5AB8B5;8 [-,*]?@>AB>9 0, A:>@>?8A=K9 �A5@1A:89 1, ?@>AB>9 g, A:>@>?8A=K9 �A00<A:89 J, A:>@>?8A=K9 ���2 $%&'()*+,-./0123456789:;<=DEFGHIJKLMNOPQRSTUVWXYZ[\]����bc	

�d���e�� !"#$%&'()*+,-.�/0123456789:���;�<�=>?@ABCDEFGHIJK�LMNOPQRfSTUV����gWXYZ[\]^_`abcdefghi�j�klmnopqrs�tuvwxyz{|}~����h��������������������������������������������jikml��n��������������������o�������qpr�s����������������������������utv�w��������������������������x�����zy{}|���	

���� !"#$%&~�'�()*+,-./0123456789:;<=>?�@�ABCDE�FGHI��JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	�

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������	���������������������������"�
��������������	

B>@^`_?�
���� !"#$%&�'��(#)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef�g�hijklmnopqrstuvwxyz{|}~����������������������������������������������������������������� �!���A�a�������������������������������������������������������������������������������������C������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-.AmacronAbreve
Aringacuteuni01CDAogonekuni1EA0uni1EA2uni1EA4uni1EA6uni1EA8uni1EAAuni1EACuni1EAEuni1EB0uni1EB2uni1EB4uni1EB6AEacuteuni01E2uni0243uni1E06Ccircumflex
CdotaccentDcaronuni1E0Cuni1E0Euni1E10Dcroatuni018AEcaronEmacronEbreve
EdotaccentEogonekuni1EB8uni1EBAuni1EBCuni1EBEuni1EC0uni1EC2uni1EC4uni1EC6uni1E16uni01F4Gcircumflex
Gdotaccentuni0122Gcaronuni1E20uni00470303uni0193Hcircumflexuni1E26uni1E24uni1E28uni1E2AHbarItildeImacronuni01CFIogonekuni1EC8uni1ECAIbreveJcircumflexuni0136uni1E32uni1E34LacuteLcaronuni013Buni1E36uni1E38uni1E3ALdotuni1E3Euni1E40uni1E42Nacuteuni01F8Ncaronuni0145uni1E44uni1E46uni1E48Omacron
OhungarumlautObreveuni01D1uni01EAuni1ECCuni1ECEuni1ED0uni1ED2uni1ED4uni1ED6uni1ED8Ohornuni1EDAuni1EDCuni1EDEuni1EE0uni1EE2uni1E52OslashacuteRacuteRcaronuni1E58uni0156uni1E5Auni1E5Cuni1E5ESacuteScircumflexuni1E66uni015Euni0218uni1E60uni1E62uni1E9ETcaronuni0162uni021Auni1E6Cuni1E6ETbarUtildeUmacronUbreveUring
Uhungarumlautuni01D3Uogonekuni01D5uni01D7uni01D9uni01DBuni1EE4uni1EE6Uhornuni1EE8uni1EEAuni1EECuni1EEEuni1EF0uni1E7EWgraveWacuteWcircumflex	WdieresisYgraveYcircumflexuni1E8Euni1EF4uni1EF6uni1EF8Zacute
Zdotaccentuni1E90uni1E92uni1E94uni018FEngIJuni004C00B7004Cuni01320301amacronabreve
aringacuteuni01CEaogonekuni1EA1uni1EA3uni1EA5uni1EA7uni1EA9uni1EABuni1EADuni1EAFuni1EB1uni1EB3uni1EB5uni1EB7aeacuteuni01E3uni0180uni1E07ccircumflex
cdotaccentdcaronuni1E0Duni1E0Funi1E11ecaronemacronebreveeogonek
edotaccentuni1EB9uni1EBBuni1EBDuni1EBFuni1EC1uni1EC3uni1EC5uni1EC7uni1E17uni01F5gcircumflex
gdotaccentuni0123gcaronuni1E21uni00670303hcircumflexuni1E27uni1E25uni1E96uni1E29uni1E2Bhbaritildeimacronuni01D0iogonekuni1EC9uni1ECBibrevejcircumflexuni0137uni1E33uni1E35kgreenlandiclacutelcaronuni013Cuni1E37uni1E39uni1E3Bldotuni1E3Funi1E41uni1E43nacuteuni01F9ncaronuni0146uni1E45uni1E47uni1E49napostropheomacron
ohungarumlautuni01D2uni01EBuni1ECDuni1ECFuni1ED1uni1ED3uni1ED5uni1ED7uni1ED9obreveuni1E53ohornuni1EDBuni1EDDuni1EDFuni1EE1uni1EE3oslashacuteracuteuni0157rcaronuni1E59uni1E5Buni1E5Duni1E5Fsacutescircumflexuni1E67uni015Funi0219uni1E61uni1E63longstcaronuni0163uni021Buni1E6Duni1E6Funi1E97tbarutildeumacronubreveuring
uhungarumlautuni01D4uogonekuni01D6uni01D8uni01DAuni01DCuni1EE5uni1EE7uhornuni1EE9uni1EEBuni1EEDuni1EEFuni1EF1uni1E7Fwgravewacutewcircumflex	wdieresisygraveycircumflexuni1E8Funi1EF5uni1EF7uni1EF9zacute
zdotaccentuni1E91uni1E93uni1E95enguni0237ijuni006C00B7006Cuni01330301uni0250uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0251uni0299uni0259uni025Auni025Buni025Cuni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni029Cuni0268uni026Auni029Duni029Euni026Buni026Cuni026Duni026Euni029Funi026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0278uni0279uni027Auni027Buni027Duni027Euni0280uni0281uni0282uni0283uni0284uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni02A4uni02A6uni02A7uni0294uni0295uni02A1uni02A2uni01C2uni0298	uni014A.aa.aagrave.aaacute.a
acircumflex.aatilde.aadieresis.a	amacron.aabreve.aaring.aaringacute.a	uni01CE.a	uni1EA1.a	uni1EA3.a	uni1EA5.a	uni1EA7.a	uni1EA9.a	uni1EAB.a	uni1EAD.a	uni1EAF.a	uni1EB1.a	uni1EB3.a	uni1EB5.a	uni1EB7.a	aogonek.ag.a	uni01F5.a
gcircumflex.agbreve.agdotaccent.a	uni0123.agcaron.a	uni1E21.a
uni00670303.ai.a
dotlessi.aigrave.aiacute.a
icircumflex.aitilde.aidieresis.a	imacron.a	uni01D0.a	iogonek.a	uni1EC9.a	uni1ECB.a	uni012D.a	uni0268.a	iogonek.d
iogonek.da	uni0268.d
uni0268.da	uni029D.dl.alacute.alcaron.a	uni013C.a	uni1E37.a	uni1E39.a	uni1E3B.alslash.aldot.auni006C00B7006C.a	uni026B.a	uni026C.aAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9
AlphatonosEpsilontonosEtatonos	IotatonosIotadieresisOmicrontonosUpsilontonosUpsilondieresis
Omegatonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigmatauupsilonphichipsiomegauni03C2uni03D0uni03D1uni03D5phi.a
alphatonosepsilontonosetatonos	iotatonosiotadieresisomicrontonosupsilontonosupsilondieresis
omegatonosiotadieresistonosupsilondieresistonosuni03D7uni03D9uni03DBuni03DDuni03E1uni037E	anoteleia
anoteleia.capuni0374uni0375tonos	tonos.cap
dieresistonosuni037Auni1FBEuni1FBDuni1FBFuni1FFEuni1FEFuni1FFDuni1FCDuni1FDDuni1FCEuni1FDEuni1FCFuni1FDFuni1FC0uni1FEDuni1FEEuni1FC1uni1FBD.capuni1FFE.capuni1FEF.capuni1FFD.capuni1FCD.capuni1FDD.capuni1FCE.capuni1FDE.capuni1FCF.capuni1FDF.capuni0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0462uni0472uni0474uni0490uni0492uni0496uni0498uni049Auni04A0uni04A2uni04AAuni04AEuni04B0uni04B2uni04B6uni04BAuni04C0uni04C1uni04D0uni04D4uni04D6uni04D8uni04E2uni04E6uni04E8uni04EEuni04F2uni0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0463uni0473uni0475uni0491uni0493uni0497uni0499uni049Buni04A1uni04A3uni04ABuni04AFuni04B1uni04B3uni04B7uni04BBuni04C2uni04CFuni04D1uni04D5uni04D7uni04D9uni04E3uni04E7uni04E9uni04EFuni04F3	uni0430.a	uni04D1.auni0431.srb	uni0456.a	uni0457.a	uni04CF.auni2116zero.aone.a	zero.onumone.onumtwo.onum
three.onum	four.onum	five.onumsix.onum
seven.onum
eight.onum	nine.onumzero.bone.bzero.capone.captwo.cap	three.capfour.capfive.capsix.cap	seven.cap	eight.capnine.capzero.cone.c
quotereverseduni00ADuni2010
figuredashuni2015uni25E6uni25AAuni25ABuni25B4uni25B5uni25B8uni25B9uni25BEuni25BFuni25C2uni25C3	invbullet
filledrect
underscoredbluni203Euni203Funi2016	exclamdbluni2047uni2049uni2048uni203Duni2E18uni231Cuni231Duni231Euni231Funi27E6uni27E7uni2E22uni2E23uni2E24uni2E25uni2117uni2120at.case
asterisk.ahyphen.a	uni00AD.a	uni2010.adollar.a	zero.supsone.supstwo.sups
three.sups	four.sups	five.supssix.sups
seven.sups
eight.sups	nine.supsparenleft.supsparenright.supsperiod.sups
comma.sups	zero.subsone.substwo.subs
three.subs	four.subs	five.subssix.subs
seven.subs
eight.subs	nine.subsparenleft.subsparenright.subsperiod.subs
comma.subs	zero.dnomone.dnomtwo.dnom
three.dnom	four.dnom	five.dnomsix.dnom
seven.dnom
eight.dnom	nine.dnomparenleft.dnomparenright.dnomperiod.dnom
comma.dnom	zero.numrone.numrtwo.numr
three.numr	four.numr	five.numrsix.numr
seven.numr
eight.numr	nine.numrparenleft.numrparenright.numrperiod.numr
comma.numr
ordfeminine.aa.supsb.supsc.supsd.supse.supsf.supsg.supsh.supsi.supsj.supsk.supsl.supsm.supsn.supso.supsp.supsq.supsr.supss.supst.supsu.supsv.supsw.supsx.supsy.supsz.supsegrave.supseacute.supseogonek.supsuni0259.supsuni0266.supsuni02E0uni02E4a.supag.supai.supa
colon.supshyphen.supsendash.supsemdash.supsEurouni0192
colonmonetarylirauni20A6pesetauni20A9donguni20B1uni20B2uni20B4uni20B5uni20B9uni20BAuni20AEuni20B8uni20BDuni2215
slash.fraconethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215Auni2150	oneeighththreeeighthsfiveeighthsseveneighthsuni2151uni2152uni2189uni2219equivalence
revlogicalnotintersection
orthogonaluni2032uni2033uni2035uni00B5
integraltp
integralbtuni2206uni2126uni2200uni2203uni2237uni2105uni2113	estimateduni2190arrowupuni2192	arrowdownuni2196uni2197uni2198uni2199uni21D0uni21D1uni21D2uni21D3	arrowboth	arrowupdnarrowupdnbseuni25CFuni25CBuni25A0uni25A1uni2752uni25C6triagupuni25B3uni25B6uni25B7triagdnuni25BDuni25C0uni25C1triagrttriaglf	invcircleuni25C9uni2610uni2611uni2713musicalnotemusicalnotedblheartclubdiamondspade	smilefaceinvsmilefaceuni2764uni2615u1F4A9u1F916u1F512femalemalesunhouseuni02B9uni02BBuni02BCuni02BEuni02BFuni02C1uni02D0uni02D1uni02DEuni02C8uni02C9uni02CAuni02CBuni02CCuni25CCuni0300uni0300.capuni0340uni0301uni0301.cap	uni0301.guni0302uni0302.capuni0303uni0303.capuni0304uni0304.capuni0305uni0305.capuni0306	uni0306.cuni0306.capuni0306.ccapuni0307uni0307.capuni0308uni0308.capuni0309uni0309.capuni0310uni0310.capuni030Auni030A.capuni030Buni030B.capuni030Cuni030C.cap	uni030C.auni030Funi030F.capuni0311uni0311.capuni0312	uni0312.guni0313uni0343uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0323uni0324uni0325uni0326	uni0326.auni0327uni0327.capuni0328uni0328.capuni0329uni032Auni032Cuni032Euni032Funi0330uni0331uni0334uni0339uni033Auni033Buni033Cuni033Duni0342uni0342.capuni0345uni035Funi0361uni03080301uni03080301.cap
uni03080301.guni03080300uni03080300.cap
uni03080300.guni03080303uni03080304uni03080304.capuni0308030Cuni0308030C.capuni03020301uni03020301.capuni03020300uni03020300.capuni03020309uni03020309.capuni03020303uni03020303.capuni03060301uni03060301.capuni03060300uni03060300.capuni03060309uni03060309.capuni03060303uni03060303.capuni03020306uni03020306.capuni03040301uni03040301.capuni030C0307uni030C0307.capuni03120301uni03120300uni03120303uni03130301uni03130300uni03130303uni00A0uni2007
space.fracnbspace.fracuni2500uni2501uni2502uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250Buni250Cuni250Duni250Euni250Funi2510uni2511uni2512uni2513uni2514uni2515uni2516uni2517uni2518uni2519uni251Auni251Buni251Cuni251Duni251Euni251Funi2520uni2521uni2522uni2523uni2524uni2525uni2526uni2527uni2528uni2529uni252Auni252Buni252Cuni252Duni252Euni252Funi2530uni2531uni2532uni2533uni2534uni2535uni2536uni2537uni2538uni2539uni253Auni253Buni253Cuni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254Funi2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cuni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Funi2580uni2581uni2582uni2583uni2584uni2585uni2586uni2587uni2588uni2589uni258Auni258Buni258Cuni258Duni258Euni258Funi2590uni2591uni2592uni2593uni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259Funi202FuniFEFFu1F3B5u1F3B6f_if_luniE0A0uniE0A1uniE0A2uniE0B0uniE0B1uniE0B2uniE0B3ideoromnDFLTcyrlgreklatn�V�t
  !!""#')13577::==@@MM[[^^eevv������������������



$$**00??BBQQUU\\aassww�����������������������������	  ##&&56;;?@HHLNQRYY\^bbddffllnnqquu����������������������������

$%'-0146KLee�����EHn�#11BDHn
�(DFLTcyrl.grekXlatnl�� 
SRB ��	!��
"��#ATH &NSM 6SKS F��$��
%��&��'(ccmp�ccmp�ccmpccmp
ccmpccmpccmp"ccmp*frac2frac8frac>fracDfracJfracPfracVfrac\markbmarkvmark�mark�mark�mark�mark�mark�mkmkmkmkmkmkmkmkmkmkmkmk mkmk&mkmk,size2size6size:size>sizeBsizeFsizeJsizeN	
	
	
	
	
	
	
	








 d&.8BJT\dlt|��vxz�������h��	z	�	�
`
P��
�t����8��&^���^���\��|�ZS������������������������������������������������������������������������������������x~x���xx���x����xxxxx������������r�rr x&,�x�xx2xx����8�rr��8 >DJPV\�b�hnrrtzzr�r������� �������r�rr�r�������h����8�8x�xxx�xx 
rx�"(x.x4"x.x&x�:@�Frrr��rLRrXrhr,,�a�C�M�J�H�B���@�1�-�?�@��V������Y����;C4`8�(H��)�v�Y>�"T�����6R%�'r��*P���f����3d�)J�
�,�.�9E�EEG�BL$>�F�4��OD\&��	Z	`

,�	D	Lhh.djpv|�^�^��^^����������^����������^,WB��O�1�@�V'�b>��7w����6�NMx�jZZZZZZZZZZZZZZZZZZZZZZZ}���� &�,28��>��D�JPV\Vbhnt�z�����������&��V�bn��z�h�DD����V2��������J��b���n
""(.��4:@F������LRX^2V�   �    ���>d�,��U��*��D�����C��E��O�����@��0��-��8��6��T��4��%��Y����3o��2����3��3���3��q��9���37��L��"��.��D�3��h��<�3��(��*�3B��,�$��I�3�3o�3n�3N��	�3W�3��4�3-�36�3�3V�yq�3�$R��K�3�������
,��ZoJo��",��������z�HHDJ>>>>PV>\bDDDJ>hPPPnV>JJJJtt>,���`�!��6�L�2ZShnhhnhhnhnhnhnhhnnhnhnhnhnhnhnhnhnhnhhhhhhhnhnhhnhhhnhnhnhnhnhnhnhnhnhnhnhnhnhhhhhh&&,28822>DJP,,�,�,�,�,�,�,#,�,�GF,!#$%&'/(a�������������������	#"%+,4�������������������	hjFG�E JJJMMKinLR�# 11(BD)Hn,�	

!#$%&')*+,-./01345@M[e���������
QUaw��������������������������������������	
56?@HLMNQRY\]^bdflnqu��������������
$%'()*+,-01456KLe�&�23.	

!#$')*-./035M��U���?@LRY\]�$%(06<>AEE}	

!#$%&')*+,-./01345M[�����Ua��������������������������������������	
6?@LQRY\]^du��=
'R�'*�45
$*047:=^��
*Us #&?@���	


��DFLTcyrlfgreklatnR��! (08@HPX`hpx����������������
SRB T��"	!)19AIQYaiqy�������������������"
"*2:BJRZbjrz�������������������"#+3;CKS[cks{����������������ATH ^NSM �SKS ���!$,4<DLT\dlt|���������������	��!
%-5=EMU]emu}���������������
��"&.6>FNV^fnv~������������������"'/7?GOW_gow����������������
casePcaseVcase\casebcasehcasencasetcasezccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�cv01�cv01�cv01�cv01cv01cv01cv01cv01cv02 cv02&cv02,cv022cv028cv02>cv02Dcv02Jcv04Pcv04Vcv04\cv04bcv04hcv04ncv04tcv04zcv06�cv06�cv06�cv06�cv06�cv06�cv06�cv06�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv08�cv08�cv08�cv08�cv08�cv08�cv08cv08
cv09cv09cv09cv09"cv09(cv09.cv094cv09:cv10@cv10Fcv10Lcv10Rcv10Xcv10^cv10dcv10jcv11pcv11vcv11|cv11�cv11�cv11�cv11�cv11�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv15	cv15	cv15	cv15	cv15	cv15	cv15	$cv15	*cv16	0cv16	6cv16	<cv16	Bcv16	Hcv16	Ncv16	Tcv16	Zcv17	`cv17	fcv17	lcv17	rcv17	xcv17	~cv17	�cv17	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�frac	�frac	�frac	�frac	�frac	�frac	�frac
frac
locl
 locl
&locl
.locl
4locl
:numr
@numr
Fnumr
Lnumr
Rnumr
Xnumr
^numr
dnumr
jonum
ponum
vonum
|onum
�onum
�onum
�onum
�onum
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�salt
�salt
�saltsalt$salt@salt\saltxsalt�sinf�sinf�sinf�sinf�sinf�sinf�sinf�sinf�ss01�ss01�ss01�ss01�ss01ss01ss01ss01ss02 ss02(ss020ss028ss02@ss02Hss02Pss02Xss03`ss03jss03tss03~ss03�ss03�ss03�ss03�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss05�ss05�ss05�ss05�ss05
ss05
ss05
ss05
ss06
 ss06
&ss06
,ss06
2ss06
8ss06
>ss06
Dss06
Jss07
Pss07
Vss07
\ss07
bss07
hss07
nss07
tss07
zsubs
�subs
�subs
�subs
�subs
�subs
�subs
�subs
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�zerozerozerozerozerozerozero$zero*								@:4.("������������������������������~xrltnhb\VPJRLF@:4.(0*$����������������������������~��ztnhb\























        ����������������~tj`VPJD>82,&$������������ � � � � � � � 	

$JRZbjr~���������������&.6>FNV^fn,*0.,z����������� 2<x���� Vh�������������!#L
 &,28>DJP  **
U���������!��!��"�:d��$U�S�Yc	W$]�[�a_aC$*06<K�M�H�JNOQNC &,j�j�i�ikkC &,m�m�l�lnnC�,6@JT`jt~����������@4e4v�4�
�4�4
4$04B?2Q4��'\w4��4���;2*v"�d"� !$%"#�

����#��#���#�)*+,-./0123456789:;<=>?@ABCDEFG��������������rMNOP�����	NR9�������������������������35CILPRTVXZ\^`bdfP !"#$%&'(5)*+,-./01234ef'J:
6789:;<=>K6 ?RABCDEFGHIJK@STUVWXYZ[L\]NPhijL4444
8C<<��<
<
@
M4N4*(U�MOQNP��35CILPRTVXZ\^`bdf(q

r��� "	
_b��+.qt�A_�+q	b�.t��A$4��	

CHKOQSUWY[]_ace?$%Q��HL	!#

 "$'*/0�66Y[[>]x?zz[|�\�����������^~���!��	

24CHKOQSUWY[]_ace!��35CILPRTVXZ\^`bdfmv��
���!o
hj%
qr5)*00��������mv9��mnopqrstuvxyz{|}~������	

24CHKOQSUWY[]_ace\\&&))"";B//	 $'JKLMNOPQRSTU[\]^_`ab����MO@A[1���my����Rnnz�$?($%Q��HL��	

24CHKOQSUWY[]_ace%ooPK-"#[�՞�w�wMgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfnu�[��� DSIGw�GPOS��,K�GSUBV.TL�OS/2ٮ�iM�`cmapRԟ�NP�cvt '��m`8fpgm�zAm�	�gaspmXglyf*~ʙS8�Bhead��e��|6hhea���$hmtx[�`���TkernlBjT�,l�loca�.�V,maxp<
�X< name�$�X\^post:�]i��prep�x9�w,�
0JDFLTlatn����kernkernJnv�$R�
�^�	h
B
l�&��rj����Z���j��L��*|�DV�:�� �!.!�##L#�$4$~%�&J'$'�(�)�*�+f+�,6,�-�.(.�/t/�/�0:0|2"2�33T3�3�4&4l4�55b5�66L6�6�7B7�7�888�9d9�9�:&:�:�;@<�=�>j?,?�@hA�B�CzD�E�F�G*G�HfI�K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��JK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��k0	�x
0
0�@���@�x����"0#��$�x&��*��-�h2��4��D��F��G��H��I��J�xP��Q��R��S��T��U��V��W��X��Y��[��\��]��l0m��o��r0t:u:w��y��{:|0}����x��x��x��x��x��x��x����������������������������������������������������������������������������������������������x�����������������0�0�@�0�0�@����0��x)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J
�jm�jo�jy�j}�j�j�j�j�j�j)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������4	�|�L�L�|����"$�|-�:F��G��H��P��Q��R��S��T��U��X��w����|��|��|��|��|��|��|����������������������������������������������������|���������L�L��|	��������$��������������������������������1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������I��
��
��6�:6"��#��&��*��2��4��7�T9�J:�h<�,?�JF��G��H��R��T��Y��Z��\��l��m�:o�:r��t�6u�6y�:{�6|��}�:�����������������������,�����������������������������������������������,�:�:�����6�����6�:�:�:���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������.	�v���v$�v-�JD��F��G��H��R��T����v��v��v��v��v��v��v����������������������������������������������������������v������������v)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������#��&��*��2��4��7��8���������������������������������������[	�|�L�L�L�|�`�`#��$�|&��*��-�82��4��D�F�.G�.H�.J�DP�`Q�`R�.S�`T�.U�`V�^X�`Y�LZ�t[�p\�L]��m�Lo�Lw�`y�L}�L��|��|��|��|��|��|��|�������������������������������������.��.��.��.��.��.��`��.��.��.��.��.��.��`��`��`��`�|����.�.�`���.�L�L�L�L�L�L�L��|	��������$��������������������������������k0	�x
0
0�@���@�x����"0#��$�x&��*��-�h2��4��D��F��G��H��I��J�xP��Q��R��S��T��U��V��W��X��Y��[��\��]��l0m��o��r0t:u:w��y��{:|0}����x��x��x��x��x��x��x����������������������������������������������������������������������������������������������x�����������������0�0�@�0�0�@����0��xI0	��
0
0��������""$��-��D��F��G��H��J��R��T��V��l0m��o��r0t0u0y��{0|0}�����������������������������������������������������������������������������������������������0�0��0�0��������0���1��#��&��*��2��4��F��G��H��I��R��T��W��Y��Z��\��m��o��y��}�������������������������������������������������������������������������������i	�\

�h�`�h�\����""#��$�\&��*��-�82��4��D��F�`G�`H�`J�TP��Q��R�`S��T�`U��V��X��Y��Z��[�|\��lm�`o�`rt2u2w��y�`{2|}�`��\��\��\��\��\��\��\��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������\�����`�`�����`�`�`���h���h�`�`�`���\0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������D
D
D�~�~lDrDtdud{d|D�D�D�~�D�D�~�D��
��
��Y��Z��\��l��r��t��u��{��|���������F��G��H��R��T����������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������
�|�|D��������������������������|�|$	���|�|��$��F��G��H��R��T��������������������������������������������������������������������|�|�����������F��G��H��R��T��������������������������������������������$	���|�|��$��F��G��H��R��T��������������������������������������������������������������������|�|���"#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J	�H�H$�H9:::<(?:��H��H��H��H��H��H��H�(�H�(��H	�H�H$�H9:::<(?:��H��H��H��H��H��H��H�(�H�(��H'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���	�H�H$�H9:::<(?:��H��H��H��H��H��H��H�(�H�(��HK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J
�jm�jo�jy�j}�j�j�j�j�j�j)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|������������������������������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������	��������$��������������������������������i	�\

�h�`�h�\����""#��$�\&��*��-�82��4��D��F�`G�`H�`J�TP��Q��R�`S��T�`U��V��X��Y��Z��[�|\��lm�`o�`rt2u2w��y�`{2|}�`��\��\��\��\��\��\��\��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������\�����`�`�����`�`�`���h���h�`�`�`���\)��	��
����
��������$��7��9��;��<��=��?��@��`��l��r��|��������������������������������������������������������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������J��
��
��Y��Z��\��l��r��t��u��{��|���������
�jm�jo�jy�j}�j�j�j�j�j�j��
����
��9��:��?��@��Y��[��\��`��l��r��|��������� �t
�t
�t��9�^:��<�h?�^Y��\��l�tm��o��r�tt�|u�|y��{�||�t}����h�h���t�t�t�t�����t��
��
��Y��Z��\��l��r��t��u��{��|�����������
����
��9��:��?��@��Y��[��\��`��l��r��|���������i	�\

�h�`�h�\����""#��$�\&��*��-�82��4��D��F�`G�`H�`J�TP��Q��R�`S��T�`U��V��X��Y��Z��[�|\��lm�`o�`rt2u2w��y�`{2|}�`��\��\��\��\��\��\��\��������������������������������������������`��`��`��`��`��`�����`��`��`��`��`��`�������������\�����`�`�����`�`�`���h���h�`�`�`���\0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������0��""#��&��*��2��4��F��G��H��R��T��V��Y��\��m��o��y��}��������������������������������������������������������������������������'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��JK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��JK	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J-�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���'�N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N���K	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J6�J
�J
�J��"��#��&��*��-22��4��7�|8��9�x:��<�\?�xY��\��l�Jm��o��r�Jt�Hu�Hy��{�H|�J}�������������������������������������\�����\�����J�J�J�J��������Jv

#$&')-./2345789:;<=>?DEHIKNPQRSUYZ[\^lmoprtuy{|}��������������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I�xx�x���P`KtyPL@�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ-��%59=J@GBhf[[		QCQ
D=<($#*$
+>32#'&>54&#"#"'4632#"&!!7!!�9DO.?gI)-60#z-70 I9)8(c>0((0>���22c��u&#@[87P;+&%iu"3+(.:(3<��/@)(?��g6,����
!&@#QCSD

+#.54>32#".�	y	+!..""..!���-VW[44[WV-<��."".-""-����
,@)	BQD

$+#"&/!#"&/3���ޛ ## �"�ޛ ## �"6Q�>BH@E
Y	CQ
C
DBA@?>>86530/*(##!#!+#"&5467#+#"&546?3#7>;>;3323+32%3#TQ G�G-OU��A�
$'�H+PT�TO!I�
%&�A�	���A���Y"Z��%�9FJf"�Z���K��9�Fj�$g8CN~@J( I>)
?4BK�	PX@$hfSCSD@$hfSCSDY�#&#&+.'7>32.54>?>;#".'+4.'>�y�H50FaD%F�kA9m�h
Bi�<+):L1!H�pE<s�kB�%@V1"AeE#��"<P/A_=aKR&1.5U�aI�lE��
R:B!!�4R{\Z�xK��2H4&�-F]�0G6(�(<KH����'1EY�K�PX@'[	[SC		S
DK�"PX@+[	[SC
C		SD@/[	[CSC
C		SDYY@
VT((%#&((($
+#".54>324.#"32>>;+#".54>324.#"32>�4Wt?DsV00VsDCuU1�1A%%A00A%%A1�
���
�54Ws?DsV00VsDCtV0�1A%%A00A%%A1?T�[00[�TV�\00\�VB\;;\BA[99[w��
RT�[00[�TV�\00\�VB]::]BAZ99ZR��x�?K�@8IH+%BK�PX@*hSCS
CS
D@(hSCS
CSDY@FD/-(&" 	??+2#"&'.#">7>;#"&/#".54>7.54>3267�O�_7o
1E.2P9"6&�&-nFB,�$�^��P�yJ/SrD=:5d���0Nd4p�D�Yjk�3To<8. 9M-#@AE&�]C�Js�a���[j6g�]F}jTM�NI�_7��AcD#RD�9���3�
@	BQD

$+#"&/3��ޛ ## �"����
(+.54>7!nhOKiAAiKO
imu�m�0s���zy���t1��lJ����	(+4'&546?'.54676*mi
OKiAAiKOhnu���1t���yz���s0��`_��0J@-)($ BK�PX@QD@MQEY@
00+5467'767./7.=3>?'.'b!�,�$%#�,�#	X�,�!!�,�_�"cKdeKd %��)cKdeKd!'�d�"�,@)MYQE+!!#!5!���i��k���U��R���^��P�@?S
D$+74>32'&547>7#".^,/0G-

 
*{)'3-a_Z&
%0:!!-dR�@MQE+!!d���X��Q�@SD($+74>32#".X!..""..!n."".-""-����	@kD#"++>;�7KY
0!K#"� "<��L�'@SCSD((($+#".54>324.#"32>LQ��mn��PP��nm��Q�7]zBBz\77\zBBz]7̼��XX����XX��켤߈;;�ߤ�ވ;;����*@'BhCR
D&+%!47#"&/3!!4�
	8�����,-�
	Mq��h$�3;@8/BhSCQ
D,*$"
33+2>3!2!5467>54.#"#"&/>Y[�sB0Rk<��(R&�"�D�9^C$(F^66\G1
 ]P{��6g�^P�}u=�~
"l=(�:klo??_> 9N/b�f5l��.�JU@RF
Bhh[SCSDCA;910/.&$JJ	+2#".'763232>54.#5>54.#"#"&/>l[�o>#A\9��K��cr�pHL(DeKKqK&Q�p[�R%'D]66\G0 ]P{��4`�SDkQ8%��c�o;9d�P 		I@,1N`/:`F(�&B\8>\< 9O.b�f5(`�&@#B[C
D!#+3+#!"&/3467!�����������f��y[���< �;l����.@@=,+Bh[QCSD(#&(""+#!632#".'763232>54.#"'!�09�>Bp_p�t;P��m?tdV!63HaCKxU.'OvO6t>pt�K&1��Bt�]r��F*6L&0Y|MClL*!�l��2�.2@/B[CSD+)!	+2#".5467>;>32>54.#"�V�tDH��ml�|CT[k2 ��3|��(MoGHtS-,PpCHtQ+n9m�fc�~HE�p^�z���#'�LErR-.RpBFqO*1Smn<�@QC
D$'++>7!"&=<��
.'Z
��P",�S%�*y`��&�3GD@AB[SCSD54! ?=4G5G+) 3!3	+".5467.54>32'2>54.#"2>54.#"Ck��F��qs>r�ba�r>tp��G�kFoM)1Sl;;lS1)MoFFc>!Aa@@aA!>c9j�^��&*�tO�f::f�Ot�*&��^�j9�'Gc<JiBBiJ<cG'�+G\12XB&&BX21\G+�6�32@/B[SC
D0.&$	+".54>32+>74.#"32>%Q�nAF~�hg�xA,='��
0��&7�+Li?BmM*'IiAHoL(L6i�c^�zFDz�g>oji8�;4,.�CmL)+Lj?DkJ&/Nf���y�';K�$PX@SCSD@[SDY�((($+74>32#".4>32#".�!..""..!!..""..!n."".-""-	."".-""-���y�2D�?K�$PX@SCS
D@[S
DY@	/-%#$+74>32'&547>7#".4>32#".�,/0G-

 
*!..""..!{)'3-a_Z&
%0:!!-�."".-""-���W�(+��?--�����
�
�
������!@YMQE+!!!!�[��[��>�և���W�(+75467%>7.'%.=��++�?�
�
�
�oJ"����(<9@6BhfSCSD(&#-$+>32#'54>54.#"#"'4>32#"."KYg<O�b8-ERG3z-EOE-":O-=W<%�!..""..!4(.TxKLnS=66!��*A99EX<+F1$��."".-""-V�OQaf@c
X
7Bh[

[	[OSGSR[YRaSaGE;9530.&$QQ
+%"&'#".54>3232>54.#"3267632#"$&54>32%2>7&#"�Nb
:�N<X;A��}Ce-])1XC'Y��z��dk�����U
k�ﭭ���}7d���l\���_5=k��?;1L'.K}Z3B�KNQF)Id:U��X��K1$/
8f�W�ЋEf�������XB3	BHRn�,�mʯ�g9(Ns��kl��Lx2VA'	?f�EHW
I�
$@!BZC
D# +!#"&'!+3!&'I� ��}�"�=���
Z����{G6Q)E���*=@:B[SCS
D*(" !+3!2#!2>54&#%!2>54&#!�Ʉ�{;!CeD��C��x��6SwM$����RxO&�����4`�W5bTB��[�l;��
&E_9o��$@[6~vZ��	�.D@ABhfSCSD)'..+2#".546$32#".#"32>76�
LX�����bi�	���Y?
(6Jb@s��MM��i@fWK&(
Sfrk����kbTY

 O�҂�ґL 1"���@SCS
D!(!$+#!!24.#!!2>�f��������f�H��s��Us��H̡���g�g�����АL��L���!�.@+YQCQ
D+!!!!!!�P-��������$�����!�	(@%YQC
D		+!!!#!�PL����������Z��@�4K@H!
Bh[SCSD,*%#44+%2>7#"&=!#"$&546$32#"'.#"-:aVL&��6u��Y����ig��U�}j.7>YySyĊJM���<n��':'k����j/C*X(%O�т�ՔN�8� @YC
D+!#!#3!38�������t������@C
D+!#3����<����QK�PX�B�BYK�PX@CSD@hCSDY�!&$+#"'>7>3232>53�;s�mai<2BgG%��x��F9(T�Z��:�"&@#
B[C
D)(% +3267>;#".'.+#3�I&-�) ���%*:��!X��%�� 
	$�Y
	9�p����@CR
D+%!!3pl��£�����#%@"BhC
D!6)+>7>;#467+"'#32o

�
���--�
��
�53q
�g0��--�2���
���8�@C
D!+2.53#"&'#3>�b���d�
��1��g70��\����'@SCSD((($+#"$&546$324.#"32>�f��������ff����f�H��ts��HH��st��H̡���kk�
��
�ll��ґNN�҄�ёMM����*@'[SC
D
!+#!2#'32>54&+����ɄAF�ȁ��SV,������?t�ed�xC�,OnB��\��$�0s�BK�	PX@kSCSDK�PX@SCSCD@kSCSDYY�(((%&+#"&'#"$&546$324.#"32>�)NpFp�$8�9{C����ff����f�H��ts��HH��st��H�e���/�sk�
��
�ll��ґNN�҄�ёMM�����#2@/B[SC
D#!,!+#!2#"'.#'32>54&+����Ɓ>0[�S$��5��((��U�W,���V���7h�[L�iJ(��)�)Kh?��:����==@:=BhfSCSD;9(&#!#"+#".#"#"&'7>3232>54.54>32�	-EaEAdC";a{�{a;@{�r��Q86QsSElK(;`{�{`;;p�kx�J�")"#<Q/<O8),7TzY^�zFeV\-6-&E`;AS8')6V�_L�nBLH~� @QC
D+!#!5~�1�/���
������#@ CSD+%2>53#".53�Y�a3�O�Ԅ�ԔO�3a��<l�Zg��|ԛXX��|g��Z�l=G�@BC
D, +32>7>;#� �	�"������
"P++P"��g��( @#BC
D+< +32>7>;2>7>;#&'#�"(
	Q#8!O
)#��A���		�����>""?��4C!<��gE)%����@BC
D("(!+	3267>;	#"&'+��'�va	��%�����	���
���P�Y����@BC
D,"+#32>7>;���HG	�:��:_��#>>"-V��
$@!QCQ
D

+!!547!5���2��,���H"���Lv������
'@$[OQE

!#+!+32�p����F��F����	@kD# +32#"&'L!0
YK8
�" �'"#Z����
!@[OQE!"+46;#"&=!!Z��p���3F�����@
BkD+!+3#"&'.'+sf��
����z`+,+�����[@MQE+!5��xx&���	@kD		+2#"&'�! �f���
\��z)9}@!/BK�PX@'h[SCS
D@+h[SC
CSDY@+*10*9+9%##' 	+!#"&/#".54>754&#"#"&/>322>75zO (LT_:;gL-B��ecAYA/ T�vU�Z.�2/NE?{�l1,<^$9'!BeE<oV7Ovy!)!9QP8d�U��#2 �2D*(:%����%�@	BK�	PX@CSCSDK�"PX@CSCSD@!CSC
CSDYY@%%(#+33>32#"&'#"32654.��?�iX�d6<q�fb�3	&QW�70uH��#B`���IYB��~p��QLD\&wPI�B6ʻc�[*J��*i@
*BK�	PX@$hfSCSD@$hfSCSDY�($#(#"+#".#"32>32#".54>32E#6M8JrM'*LmDAT8$2B�n_�xE?y�sj�?A5d�X\�a3&AQKF��|q��NE?H����%p@BK�"PX@CSCS
D@!CSC
CSDY@%%+!"/#".54>323%267.#"[&
A�lW�d6<q�g]�4��=W�71uG��"B`%{O_C��~p��Q?92�?�PI�B5ʻc�[*J���$-{�BK�	PX@'h[SCSD@'h[SCSDY@&%)(%-&-
	$$	+2#!32>32#".54>"!4.#[�p?�^0TtHCaF/2!\ip7i��HAz�r��'"B_=s�l*`�_/$A(;&G�ʃj��M���>gK)��]@
BK�2PX@SCQC
D@YSC
DY@
4%+3'.=354>32+"!!�p�1[�PD: .K6%��]
IbW�]0Y6XA]���2���9M]�@2A*BK�PX@,
[[CS	CSD@/h
[[S	CSDY@ONWUN]O]JH@>#!99+2!#"'#".5467.54>7.54>4.'32>2>54&#"�Bs/*s"9e�SG? !:`zz`:Az�oo�n7_S+3!0 KU9f��*H^hl19G#HmJHrO*��6S8qlkq8RB!	APJyV..$%	2XFAz_9,Ja5KiC8/.**�]JyU.��&.N6";+0BN6K-]nn]-K6���-@*BCSC
D##+33>32#4&#"��A�gSU,�ilO�:���ES7e�V�{�sLA����GK�	PX@SCC
D@SCC
DY@

+##".54>32X��#.-##-.#���>-##-/##/�����(Y�	BK�	PX@SCCSD@SCCSDY@%#U%+#"&'7>323265#".54>32X EmL!6
NB�#.-##-.#���=iN-

`
IQ@>-##-/##/���0@-B[CC
D%(%!+3267>;#"&'.+#K.@���
����2����W�s
��
���X�@C
D+#X���?���*V�)BK�PX@SC
D@CSC
DY@**##&$!	+332>32>32#4&#"#4&#"�j&

8�\gEVa2P}W.�hc,O<#�b^Bq/�%hEXra7P43b�\�{�w{<[<�{�zxG=�
��L�BK�PX@SC
D@CSC
DY@#$!+332>32#4&#"�j&
B�kSU,�ilO�:�%nIZ7e�V�{�sLA�H��#NK�	PX@SCSD@SCSDY@##	+2#".54>2654&#",o�}CC}�oo�~DD~�o����LpK%%KpJ��wx��II��xw��J�xɴ��4b�ZZ�a4���%�@BK�	PX@SCSCDK�PX@SCSCD@!CSCSCDYY@%%($!+32>32#"&'"32654.�j&
A�mW�d6<p�f^�3W�71uH��#B`��L%xO`C��~p��Q>9�@�PI�B6ʻc�[*H���%�K�PX@B@BYK�	PX@SCSCDK�PX@SCSCD@!CSCSCDYY@%%(#+##".54>32763267.#"Ų@�iW�d6<q�gb�6
&��W�70vG��"B`����JZC��~p��QF@O%��PI�@7ʻc�[*��lK�PX@B@BYK�PX@SC
D@hCSC
DY@!$%!+332>32#"&#"�f4�g*D:4]}*��jw�lg�{>��<=@:<BhfSCSD:8'%" #!+#".#"#"&'7>3232>54.54>32�&7L4-H3-J^c^J-2b�]j�<*(9Q=4N4-J_c_J-0\�Vd�:N(5'4&!(<W=FwW2E6D
".<"*7' )>[A:kQ0?7,���>!t@
	BK�2PX@$jhQCTD@"jh[TDY@
!!+"&5#"&=7>;!!32>32�x�z�)Z"��>1)4.��~lG9�����@>U+1z����L�BK�PX@CS
D@C
CSDY@$!#+32673#"/#".5,jkN�:�j&
B�jSV+��zs~JB�%mIY7d�V���@BC
D, +32>7>;#���c���t$H##H$����. @'BC
D*!,< +32>7>;2>7>;#"'.'+���M�	�����
�

����t$C""C$��p#D!!H��"�/0�R"��@BC
D("(!+	3267>;	#"&'+����	�
���c���
��
��@����������@BCD,""++32>7>;�	���^�	
	�������,,}FU�@QCQ
D+!!5467!5!U��)�
'����#�&�J
#ߌ,���@3@0$B[[OSG86303++4&#52654.54>;+";2#".54>�FCCF)S{R5MY)7!!7)YM5R{S)�?QkP@2bbd4EtT.OeV8hcb2&A3%		%4@%2bch8WdP/TtE4ccb�p�@QD+3#把���X��,�@5@2B[[OSG?>=<1/,)3)++546;2654.54>7.54>54&+"&=323"�*R{R5MY)7!!7)YM5R{R*FCCF�2bcc4EtT/PdW8hcb2%@4%		%3A&2bch8VeO.TtE4dbb2@PkQt�9@6jkO[SG
+2673#".#"#4>32�AI�%Ef@4f_V$AI�%EeA4f_VeUFCpP, '!TGCpP-!'!���
!&@#SCQD

+4>734>32#".	y	�"--""--"��-UW\44\WU-���-""-."".���.7�@32&*BK�	PX@)jhfTCSDK�PX@)jhfTCSD@)jhfTCSDYY@	##'#+.54>?>;#".'>32+1\�q?B~�wBR�6.!-?*4?U;&0<�kB�y4LsN'
O��ro��Q��?1>�"	?HJ���9c�4[�>@@=7+Bh[SCS
D%&#&'%"	+46;4>32#"&'.#"!#!>3!#!5>5#4 �6n�nNy^EH

)3B-?`@ ��{929��<">0��$^�{G'DZ4./#*NnD��H�Km-Ls
"3E.!��`#7?@<!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"�!�[�,h:9f+�Y�"!�[�,h99e,�Y�"�#>Q//S=$$=S//Q>#�9e,�Z�"!�[�,g:9f+�\�"!�[�,g:.Q=$$=Q./R>##>R,S�"8@5
B
Z	YC
D"! ,!+!32>7>;!!!!#!5!5!�2�h�
!��g3��T�����T��q(��#:;"6��fig��;gi�p�@YQD+3#3#把�������r����HZA@>HXN=#BhfWSDFD-+(&!#!+#".#"#"&'7>3232>54.5467.54>32>54.'1&7L40M51OfifO1NT1>2a�\j�<)(:U?2O62RhnhR2V]2?0\�Vd�:��Fm�>604FOT(B6�*8&9/+.7G\=Q&%bEFwW2E6D
#->&-B3*,3F]@N}#&iK:kP0>7��3G95K/$8.&##I�V{'3K� PX@
SD@OSGY�((($+#".54>32#".54>32� )(() g))))	((**((**D����.Jb�@
BK�	PX@4hf[[		SCSD@4hf[[		SCSDY@
_],,*(#%(%"
+>32#".54>32#".#"32>4>32#".732>54.#"=9�tb�s?Ez�bl�9.2L;FqO++Lj>0B0%�R4_���ee���_44_���ee���_4d,Rr��X��c-Rs��X��b�@BIDz�de�yCD7A-TxKMyR+	e���`44`���ed���`44`���eY��tS-d��Y��vS.e��\?T�)5E@B!-Bh[WSD+*/.*5+5%##' 	+#"&/#".54>754&#"#"&/>322675T<.28"&A0&X�k:9&2%4yI6T:��3J$Fa<4H1 )<)"C5#%?<
*1."<T3��&#i#*"���)�)(+55��:
�
�:/�:
�
�:�
��
��
��
��
��
�;��=K�	PX@_MQE@kMQEY�+!#!�\��;�X!dR�@MQE+!!d���D����3IV��>BK�	PX@/h		[
[SCSD@/h		[
[SCSDY@44VTLJ4I4H)!*,,&+4>32#".732>54.#"#!2#"'.#'32>54.+D4_���ee���_44_���ee���_4d,Rr��X��c-Rs��X��b� ��kj�!�	Pt7M/+F4��e���`44`���ed���`44`���eY��tS-d��Y��vS.e���|}z^�
��.
r(:&%8$�RD@MQE+!!>��DuF'��'@WSD((($+4>32#".732>54.#"F2XwEEwX22XwEEwX26I**H66H**I6hCvW22WvCBuW33WuA*I66I**J77JdP"�7@4YYMQE
	+!!#!5!!!���i��k��k��B������p�x�%�R�Qe-9@6+Bh[SD(&" 
--+2>;2!546?>54&#"#"&/>Z4U<!*6�/��
�, <-.9	G�e6M/(E>:�M+
�455370*jjT|Re=S@P9Bhh[[SD640.*)('==	+2#".'763232>54.#5>54&#"#"&/>b3R; wBE*E[09T=+7+ / 'A/WG:009	C,ATe3D(�-N>7T91H/
 (+W<424/(5O5��U�	@kD	#++7>3U�j�! ���
�z����3@0BCS
CD&$!#+32673#"/#"&'#"&5,liN�:�j&
C�WJp'Y&)��nmxJB�%mHD3.*W&��($*�7�*@'hiSD+##!#".54>3۝��h�u??u�h���7�7]=i�QV�e8|���@OSG($+4>32#".|)68((86)Q8((86))6����
�K�PX@
B@
BYK�	PX@^TDK�PX@jTD@jjTDYY@+232654.'73#"&'76� *+)<&+pZQ 9P0)J�	!�PE6 3$7x�D_O�	BK�$PX@jjQD@jjMRFY�$+37#"/733!��k	'�l��i��+X	8��zUH<��)@&WSD	+2#".54>2654&#"~FqP,,PqFGrQ,,QrGTSSTWSS�+PsGHtQ++QtHGsP+��iddhhddi��
�%�%(+7'&54767&'&54?%'&54767&'&54?�:
�
�
:�(�:
�
�
:�

�{�{

f|� &0O@L$	Bh		Z
[CS
D0.+)&% $!#
+3+#5!"&/3%37#"/733!4673+>;m
Rm��
V|���k	'�l��i��,L2. MA��9�;�+X	8��zU�,���\ f]�-=Ge@b710+Bhh		Z[CS

DGEB@=<;:9853/.(&" 
--
+2>;2!546?>54&#"#"&/>%37#"/733!+>;f4U<!*6�/��
�, <-.9	G����k	'�l��i�,L2. M�6M/(E>:�M+
�455370*jj3�+X	8��zU�v\ D}�NT^x@uJ	
%RB

h		h
	
	[[
\SCS
D^\YWTSGEA?;:980.)'!NN!#+3+#5!"&/32#".'763232>54.#5>54&#"#"&/>4673+>;m
Rm��
V|�B3R; wBE*E[09T=+7+ / 'A/WG:009	C,AT���,L2. MA��9��3D(�-N>7T91H/
 (+W<424/(5O5�\,���\ ,��)=9@6BhfSCTD('#-$+#".54>?332>324>32#".KXh<O�b8-ERG3z-EOE-":O-=W<&�q!..""..!�4(,RvKLjL601!��,>2/<P;,E1$."".-""-��
I�&$	k��
I�&$k��
I�&$
v��
I�&$v��
I�&$
v��
I-&$s����:@7BYYQCS
D#	+!!!!!!!+!���</��=a��1�Գ%���^���$�������)EZ��	�K2K�PX@:>
IB@:>
IBYK�	PX@0hfSCSC	SDK�
PX@0hfSCSC	SDK�PX@0hfSCSC	SD@7hf	hSCSCSDYYY@GE=<861/'% KK
+232654.'7.546$32#".#"32>7632#"&'76� *+)<&$��Vi�	���Y?
(6Jb@s��MM��i@fWK&
LS�ZQ 9P0)J�	!vu����kbTY

 O�҂�ґL 1"
Sap7E6 3$7���!�&(	7���!�&(7���!�&(
B���!�&(
B������&,	������&,�����{�&,
����x�&,
2��!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>2���ff��������H��t��}��Ut��H�g��������g�2�АL�r�L����8�&1���\����&2	���\����&2���\����&2
���\����&2���\����&2
�~�X�	(+		'	7	���b_����_d��_YX�����`b��`dY`��X\����!-8h@21&%BK�PX@kCSCSD@jkSCSDY�)*%(%$+#"&'+&546$327>;.#"4&'32>�f����l�Od:N�p{f��s�SR  d�gp�AKE�<�Ws��H�A<�qt�t��H̡���k10�b ��
�l:6o�b�꫇�I�*+N�҄~�H��FM��������&8	�������&8�������&8
�������&8
�����&<9��.@+[[C
D!+#332#'32>54&+����ɄAF�ȁ��SV,��������?t�ed�xC�,OnB�����v�HwK�PX�B�BYK�PX@hSCSD@#hSC
CSDY@CB=;%# HH+2#"&'7>3232>54.54>54.#"#4>�g�b/+@K@+5P]P59d�Oa�<)(7K5,F18TbT8-CNC-8Y?DoO+�E���<]n3<VB203 '4-/FfNNzU-E6D
".@%8F3*:SB5O?6<G0 A4!*T~T�&�h�zB��\��z�&DC���\��z�&Dv���\��z�&D����\��z�&D����\��z{&Dj���\��z�&D��\��CQ\�@A;BK�	PX@5hh

[S	CSDK�PX@5hh

[S	CSD@?hh

[S	CSCSDYY@&SRXWR\S\MKED?=8631.-%#
	CC+2#!32>32#"&'#".54>754&#"#"&/>32>32>5"!4.�R�g;��.MiAE\=&/!Wcj4u�7Wjw;ErS-B��ecAYA/ T�qx�!6���{�l1dQ9cI*�=`E)�<W@z�p)[�Z,$	=(;&qt>X8#FjH<t\;2v~#*#9QPf[Xg��#8H*WP$JnJ�)NpFAoP-J��H�K�PX@7;
FB@7;
FBYK�PX@-hffSCTD@3hfffSCTDY@DB42/-%# HH	+232654.'7.54>32#".#"32>32#"&'76� *+)<&%S�f:?y�sj�?/#6M8JrM'*LmDAT8$2;�aZQ 9P0)J�	!yO��qq��NE?@5d�X\�a3&	AHJ:E6 3$7��J����&HC���J����&Hv���J����&H����J���{&Hj�������&�C����(�&�v�����6�&�������){&�j�L���4H6@3:0B43@[SD65@>5H6H.,$"+.54?.'.54?7#".54>32.'2>7.#"�g-e9`�Q�#a<cF'>{�xb�}H>t�hd�Au^�_GsQ.4Kc>KqL'.Pi)
H"><0z9
C1|��n��VB{�p^�~JVW��@���6m�o+Q?%2WwDQV-�����&Q���H���&RC���H���&Rv���H���&R����H���&R����H��{&Rj�d�"�++@([YOSG(((%+!!4>32#".4>32#".d��Bb!--""--!!--""--!��."".-""-�S."".-""-@��-I!+5t@43%$BAK�	PX@ jkSCSD@ jkSCSDY@
-,,5-5%%(%'+#"&'+7.54>327>;&#"2>54'�=BC}�oL�67;C�BFD~�oO�8D  Z��;�IoLtO(7KsO(4�OFtD�vx��I" J�E�|w��J&#[���aN86d��$5d�Z�`��0��z����&XC���z����&Xv���z����&X����z���{&Xj�������&\v�����#q@BK�	PX@!CSCSCD@!CSCSCDY@##(#+3>32#"&'"32654.��?�iW�d6<p�f_�3W�71uH��#B`����JYB��~p��QE?�3�PI�B6ʻc�[*�����{&\j�
����'/�K�PX@
,B@
,BYK�PX@!ZC
C	SD@(	hZC
CSDY@)($"
''
+2#"&5467"&'!+3#32>!&'d	]3XeO< ��}�"�=�=%*"1*
�?�
�BOB:e&Z����g'/&+	�G6Q)E\���CS�@;I	BK�PX@1h		[SC
SCSD@8hh		[SC
SCSDY@EDKJDSES%##.%#'+!32>32#"&54>7&/#".54>754&#"#"&/>322>75z*"1*
	]3Xe'5
(LT_:;gL-B��ecAYA/	 T�vU�Z.�2/NE?{�l1,<'/&+	BOB83- ^$9'!BeE<oV7Ovy!)!9QP8d�U��#2 �2D*(:%��Z��	�&&���J���&Fv����4�&�K�PX�B�	BYK�PX@*YQCQ
C	
SD@1
		hYQCQ
C		SDY@#!
&&+2#"&5467!!!!!!#32>	]3XeO<�Zs�P-���[*"1*
�BOB:e&���$���'/&+	J���<E�K�PX@
-B@
-BYK�PX@2h		[SCSC
SD@9h
h		[SCSCSDY@>=A@=E>E97+)&$ 
<<+2#"&5467.54>32#!32>3232>"!4.�	]3XeB4g�~FAz�n[�p?�^0TtHCaF/22�R'!1*
���'"B_�BOB5]%H�ȁj��M=s�l*`�_/$A<G&.&+	U��>gK)�X�@C
D+#X����,�#@ 
BCR
D+%!!54?3����l�һ��%ā��"�*_�
V�6K�#@ 
BC
D+7#54?���������MfC��LiD���8�&1������&Qv\��'�02@
BK�PX@"YS
C	S
DK�"PX@,YSCQ
C	S
DK�,PX@6YSCQ
C	Q
C	SDK�0PX@4YSCQ
C	Q
C	SD@2YSCQ
CQ
C		SDYYYY@-+#!(#+!!!!!5#".54>3254.#"32>'�P-�����T����\\�ꎡ�T@w�hh�xAAx�hh�w@���$����x�k�
��
�l�y�3�ӔOO�ӄ�ӓNN��H��u0@K�@.
BK�	PX@,h

[
	SCSD@,h

[
	SCSDY@$BA21GFAKBK:81@2@,*" 
	00+2#!32>32#"&'#".54>32>2654.#""!4.�R�g;��.MiA=Y@-3!Wcj4w�76��d�u@@w�f��52�����"DhEGhE"�e=`E*�<W@z�p)[�Z,$A(;&swpzI��xw��Jyni~�xɴZ�b44b�Z��)NpFAoP-��:����&6��>���&Vv���:����&6��>���&V������&<
D��V��&=N��FU�&]v���V�&=X��FU�&]����V��&=X��FU�&]��j����#6@3
BYSCTD###"+#5432>7'.=37>3#"!�Y��<-Q?,Y����.Q@-	B�&͹^9:\D�I�ƿb:]D���d�
@BkD' +#"/+3dw��{ߦ�~~	�d�@BkD+ +32>?>;#{��wߦ�
}	

}	�����RDq �D� @WD
+".5332>532MhA~"9++9"~Ai�+Ib7!9((9!7bI+����@SD($+#".54>32�#.-""-.#:-""-/##/jk��=K�PX@WSD@[OSGY�$&($+4>32#".732654&#"j 7H()I8  8I)(H7 d6/-77-/6#*D22D*)D00D),88,-88����
YK�PX@B@@B@YK�PX@
SD@jSDY@+2#"&54>732>�	]3Xe+;"\*"1*
�BOB;6/
'/&+	�Y�QK�.PX@WSD@O[SGY@
+2673#".#"#4>32�$'l/A(#=60Ho0B'#=6/-*,/O8"X0O9"^���	#@ SD




	#++7>3!+7>3��J�
!!��V�!������
�0����!Y�BK�(PX@SCS
D@SC
CSDY@! 6##++#!#"&'7>3265#54>3����sy�"BB9�	�H$��r��w�K	>B|@
�
��@MQE+!!� �����
��@MQE+!!�2����:�'��(+.5467rYP7
�0a0Z�E"
,16 D&
Z�F��(+'.547>54&'&547YO7
�0`0[�E"
-16 D&Z��F��(+%'.547>54&'&547YO7
�0`0[�E"
-16 D&:�W�1�(+.5467.5467rYP7
�YP7
�0a0Z�E"
,16 D&
,0a0Z�E"
,16 D&
Z�v�1�(+'.547>54&'&547%'.547>54&'&547YO7
�YO7
�0`0[�E"
-16 D&,0`0[�E"
-16 D&Z��v�1�(+%'.547>54&'&547%'.547>54&'&547YO7
�YO7
�0`0[�E"
-16 D&,0`0[�E"
-16 D&v���3@0
	BCSCD#$&"+4632632>72!#"'!v)+"LPP'(57&N�E,(�x&75(�w�0	
��0<�`��	�v���/G@D
	%$ B[C	SCD/.$$#$&"
+4632632>72!!#.'#"'"&=!!v)+"LPP'(57&N�E,(�x�(,E�N&75(N�E+)��w�0	
��0<��<0��0<X����,K�PX@SD@OSGY�($+4>32#".�;d�LM�e;;e�ML�d;SM�e;;e�MM�d;;d�X��V�';@SD((((($+74>32#".%4>32#".%4>32#".X!..""..!!..""..!��!..""..!n."".-""-."".-""-."".-""-H����'1EYm��K�PX@+[	[SC
		S

DK�"PX@/[	[SC
C
		S
D@3[	[CSC
C
		S
DYY@~|trjh`^VT((%#&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�4Wt?DsV00VsDCuU1�1A%%A00A%%A1�	���
�54Ws?DsV00VsDCtV0�1A%%A00A%%A1h4Wt?DsV00VsDCuU1�1A%%A00A%%A1?T�[00[�TV�\00\�VB\;;\BA[99[}
��
RT�[00[�TV�\00\�VB]::]BAZ99ZAT�[00[�TV�\00\�VB]::]BAZ99Z�����(+5��:
�
�:�
��
��
�����(+'&54767&'&54?�:
�
�
:�{

�D#�	@C
D#"+'+>;,L2. M5\ "��r�G[@X	5	Bh		h
[	[SC
S


DGF@?>=9720"###%$+3>32#".#"!#!!#!32>32#".'#53&45467#"�_��l��F=%>aK�� #���j��6R<+ KFЏt��W����~ˏLdXD	
&.&�7(8�� % FfqO�Ӄf)@I)�&C@@BhS	CS	D&&!4)
+>7>;#7+"'#32'###5��	jn	�
�nj�~�U/
��mK��MH��P
i��iV~�71@.1BSCS
D76***+!>54.#"!"&=!5.54>32!#DQ�c7E{�dd�{E7b�Q�$�`�l;c���c;m�`�$�Ag�]k�m88m�k]�gA�J#d�`��e�֚VV�րe��`�d#\��2�*>C@@0Bh[SCSD,+64+>,>#'(($+>32#".54>32>54&#"#"&'2>7.#"\'INV3Z�h9I�ݔV�h:L��ph�0�|*G8*
xBw`G
&>W:T�X- <U9*J�ʀ���9k�_sʔVYV%C����7p�s,S@&>m�WAfF%b�@	BCR
D+3!%!.'`�S��M��				��g��:"";>���$@!QCD+##!##5���������W��W�T���&@#BQCQD+!!!!5467	.5T��e=����Q	
u�����;4�;�A�
�\��@MQE+!!�\���.��"@
Bj[
D,# +#"&=!2>7>;#�)O�	�s�֕�!)9�e D"8G�P:� �';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+%".'#".54>32>32%2>7.#"!2>54.#"�8[MAAL\7>qU22Uq>7\LAAM[8>pV22Vp�O$>7227>$$?00?�$?//?$$>8228>�";L**L;"0Y|LL|X1";L**L;"1X|LL|Y0�5E''E4/H00H//H00H/4E''E5����\�#(@%BSCSD6''"+>32#"#"&'7>32>7v��&E do�
Ac�K#J
	 :W=%C��V	
mv��f�_-
L
;]B�~��7�@0!/"BK�	PX@+[[	O[	SGK�PX@$[[	WSD@+[[	O[	SGYY@42+)&$77

+2>7#".#"'>322>7#".#"'>326."	#p=4ge_-8."	#qB5hd_-6."	#p=4ge_-8."	#qB5hd_Zr/.!(!
m31!)!��
q0.!)!m31!(!���~kK�PX@)^_	ZMQE@'jk	ZMQEY@

+!733!!!#7!5!7!��r�r��_��2w�w��K_�V���ȇ�����P��!@@MQE+!!��G.32�����yz�
�z{�
��P��!@	@MQE+5467%67.'%.=!5!��)81�G��J��z�
�z�������"@
BMQE+3	#>7	&'��|��z|�	��
�5���4��&&EF+#&�����@CD+3#�����!a@BK�2PX@SCQC
D@YSC
DY@!!U%+3'.=354>32#"&#"!#!�p�:t�s&O��d��T]
I8]�p>

]
��3�`������BK�&PX@SCQC
DK�2PX@"CSCQC
D@ YCSC
DYY@A!%	+3'.=354>32;#.#"!!�p�4h�hS�Hd�6m(����]
I6T�pB
�Y*��6��������
@SD


+2+h
>1P
2H4��
��	@ja		+2#"&'%�  Ӌ���
����v�'@OSG((($+#".54>32#".54>32�)'')�((((�''))''))D'"�@MQE+!!D�"�j�
��@ja
#++7>3�����
���
��
x�@Bja* +#"&/&'+73x�	��	��
__���
x�@
Bja,!+#'32>?>;���	��	�
�^^�J�
(@%jOSG


+"&53326533��sNVVNs��sr;==;i|��@OSG($+#".54>32�"-,!!,-"�,!!,,"",v��-!@[OSG$&($+4>32#".732654&#"v3D&'E55E'&D3Y6/-77-/6{'B//B'&@..@&+99+-88V�1@.O[SG
+2673#".#"#4>32�#%b*>(#@;4"%d+?'#@:4)%+H5+$+I4N
��	+@(OSG




	#++7>3!+7>3��V�&!��`�( ��
��
��|��
@SD


+2+� 
>9�
!;ZBG���C�_<��ʓ^p�ӡ�D���-	��V	�D�C�'-�����6�j$H~R��X�XJ `�d�^�d�X���<���h�l�(�l�l�n�`������������"lVP
�ZZ����l��Z��f�x<R��0���<\��<\�$:���P���VX���XZ��f&�\^��J^HJ��2X�������j�X�XHP�^H&�d>�,Xz���FX,X�XX�t������4���,X��rf<D�\�����d<DfF�d�R�Tf�Xz:*"|f��x�H���f�f�D,P
P
P
P
P
P
B��ZZ��������f��f�f��f��*2��<\<\<\<\<\�~<\��������������\�\�\�\�\�\`\�JJJJJ�������RLX�XHXHXHXHXH�dX@XzXzXzXzP�P
�\ZZ�J��J�>,�6��X��\�HH:d>$:d>��V�F�V�F�V�F�jffff f�fjf�ff^�0X�j��:�Z�Z�:�Z�Z�v�v���X	Hx�x�f�D�"�@�V�\pX>XT��z.X: ��������������t�f�f��f��fDf�f��f��ff�fvffNf�l�#`�	�J��N��J#��$�J&��*��2��4��90:0<?0D��F��G��H��R��T��m�No�Ny�N}�N��J��J��J��J��J��J��J��������������������������������������������������������������������������������J��������������N�N���N�N�N��J
	�J
�
�N
�
�J
#��
$�J
&��
*��
2��
4��
90
:0
<
?0
D��
F��
G��
H��
R��
T��
m�N
o�N
y�N
}�N
��J
��J
��J
��J
��J
��J
��J
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�J
��
��
��
��
��
��
�
�N
�N
�
�
�N
�N
�N
��J#��&��*��2��4��F��G��H��R��T���������������������������������������������������������������������
	�J
�
�N
�
�J
#��
$�J
&��
*��
2��
4��
90
:0
<
?0
D��
F��
G��
H��
R��
T��
m�N
o�N
y�N
}�N
��J
��J
��J
��J
��J
��J
��J
���
���
���
���
���
���
���
�
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�J
��
��
��
��
��
��
�
�N
�N
�
�
�N
�N
�N
��J�
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x���N	��
�N
�N�x�x��$��7�L9��:��;��<�`=��?��l�Nr�N|�N�����������������������`���`�������N�N�x�N�N�x��N����
�
��x#��&��*��2��4��7�L9�L:��<�h?�LY�|Z��\�|l�m�xo�xr�y�x|�}�x�����������������������h�����h�x�x�����x�x�x��0	�x
0
0�@���@�x����"0#��$�x&��*��-�h2��4��D��F��G��H��I��J�xP��Q��R��S��T��U��V��W��X��Y��[��\��]��l0m��o��r0t:u:w��y��{:|0}����x��x��x��x��x��x��x����������������������������������������������������������������������������������������������x�����������������0�0�@�0�0�@����0��x#��#	��#
��#��#
��#��#��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#��#��#���#���$�J$
�J$
�J$��$"��$#��$&��$*��$-2$2��$4��$7�|$8��$9�x$:��$<�\$?�x$Y��$\��$l�J$m��$o��$r�J$t�H$u�H$y��${�H$|�J$}��$���$���$���$���$���$���$���$���$���$���$���$��\$��$��$�\$��$��$�J$�J$�J$�J$��$��$��$��J&�j&m�j&o�j&y�j&}�j&�j&�j&�j&�j&�j'��'	��'
��'��'
��'��'��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'��'��'���'���)	�|)�L)�L)�|)��)��)")$�|)-�:)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)��|)��|)��|)��|)��|)��|)��|)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)�|)��)��)��)��)�L)�L)��|-	��-��-��-��-$��-���-���-���-���-���-���-���-��-��-��-���.��.#��.&��.*��.2��.4��.F��.G��.H��.I��.R��.T��.W��.Y��.Z��.\��.m��.o��.y��.}��.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.���.��.��.��.��.��.��.��.��.��.��/��/
��/
��/6/�:/6/"��/#��/&��/*��/2��/4��/7�T/9�J/:�h/<�,/?�J/F��/G��/H��/R��/T��/Y��/Z��/\��/l��/m�:/o�:/r��/t�6/u�6/y�:/{�6/|��/}�:/���/���/���/���/���/���/���/��,/���/���/���/���/���/���/���/���/���/���/���/���/��/��/��/��/��/�,/�:/�:/��/��/�6/��/��/�6/�:/�:/�:/���2��2	��2
��2��2
��2��2��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2��2��2���2���3	�v3�3�3�v3$�v3-�J3D��3F��3G��3H��3R��3T��3��v3��v3��v3��v3��v3��v3��v3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3�v3��3��3��3��3�3�3��v4��4	��4
��4��4
��4��4��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4��4��4���4���5#��5&��5*��52��54��57��58��5���5���5���5���5���5���5���5���5���5���5���5��5��7	�|7�L7�L7�L7�|7�`7�`7#��7$�|7&��7*��7-�872��74��7D�7F�.7G�.7H�.7J�D7P�`7Q�`7R�.7S�`7T�.7U�`7V�^7X�`7Y�L7Z�t7[�p7\�L7]��7m�L7o�L7w�`7y�L7}�L7��|7��|7��|7��|7��|7��|7��|7���7���7���7���7���7���7���7��7��7��7��7��7��7��7��.7��.7��.7��.7��.7��.7��`7��.7��.7��.7��.7��.7��.7��`7��`7��`7��`7�|7�7��7�.7�.7�`7��7�.7�L7�L7�L7�L7�L7�L7�L7��|8	��8��8��8��8$��8���8���8���8���8���8���8���8��8��8��8���909	�x9
09
09�@9��9�@9�x9��9��9"09#��9$�x9&��9*��9-�h92��94��9D��9F��9G��9H��9I��9J�x9P��9Q��9R��9S��9T��9U��9V��9W��9X��9Y��9[��9\��9]��9l09m��9o��9r09t:9u:9w��9y��9{:9|09}��9��x9��x9��x9��x9��x9��x9��x9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9�x9��9��9��9��9��9��9��9�9�9�09�09�@9�09�09�@9�9�9�9�09��x:0:	��:
0:
0:��:��:��:��:"":$��:-��:D��:F��:G��:H��:J��:R��:T��:V��:l0:m��:o��:r0:t0:u0:y��:{0:|0:}��:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:�0:�0:�:�0:�0:�:��:��:��:�0:���;��;#��;&��;*��;2��;4��;F��;G��;H��;I��;R��;T��;W��;Y��;Z��;\��;m��;o��;y��;}��;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;���;��;��;��;��;��;��;��;��;��;��<<	�\<
<
<�h<�`<�h<�\<��<��<""<#��<$�\<&��<*��<-�8<2��<4��<D��<F�`<G�`<H�`<J�T<P��<Q��<R�`<S��<T�`<U��<V��<X��<Y��<Z��<[�|<\��<l<m�`<o�`<r<t2<u2<w��<y�`<{2<|<}�`<��\<��\<��\<��\<��\<��\<��\<���<���<���<���<���<���<���<���<���<���<���<���<���<���<��`<��`<��`<��`<��`<��`<���<��`<��`<��`<��`<��`<��`<���<���<���<���<�\<��<��<�`<�`<��<��<�`<�`<�`<�<�<�h<�<�<�h<�`<�`<�`<�<��\=��=""=#��=&��=*��=2��=4��=F��=G��=H��=R��=T��=V��=Y��=\��=m��=o��=y��=}��=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=���=��=��=��=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>F��>G��>H��>R��>T��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��?�J?
�J?
�J?��?"��?#��?&��?*��?-2?2��?4��?7�|?8��?9�x?:��?<�\??�x?Y��?\��?l�J?m��?o��?r�J?t�H?u�H?y��?{�H?|�J?}��?���?���?���?���?���?���?���?���?���?���?���?��\?��?��?�\?��?��?�J?�J?�J?�J?��?��?��?��JD��D
��D
��DY��DZ��D\��Dl��Dr��Dt��Du��D{��D|��D�D�D�D�D���E��E
��E��E
��E9��E:��E?��E@��EY��E[��E\��E`��El��Er��E|��E�E�E�E�E���H��H
��H��H
��H9��H:��H?��H@��HY��H[��H\��H`��Hl��Hr��H|��H�H�H�H�H���IDI
DI
DI�~I�~IlDIrDItdIudI{dI|DI�DI�DI�~I�DI�DI�~I�DK��K
��K
��KY��KZ��K\��Kl��Kr��Kt��Ku��K{��K|��K�K�K�K�K���NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��P��P
��P
��PY��PZ��P\��Pl��Pr��Pt��Pu��P{��P|��P�P�P�P�P���Q��Q
��Q
��QY��QZ��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q�Q�Q�Q�Q���R��R
��R��R
��R9��R:��R?��R@��RY��R[��R\��R`��Rl��Rr��R|��R�R�R�R�R���S��S
��S��S
��S9��S:��S?��S@��SY��S[��S\��S`��Sl��Sr��S|��S�S�S�S�S���U�|U�|UD��U���U���U���U���U���U���U���U��U�|U�|Y	��Y�|Y�|Y��Y$��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y�|Y�|Y���Z��Z��Z��Z��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��\	��\�|\�|\��\$��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\�|\�|\���^#��^&��^*��^2��^4��^F��^G��^H��^R��^T��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��l	�Jl�l�Nl�l�Jl#��l$�Jl&��l*��l2��l4��l90l:0l<l?0lD��lF��lG��lH��lR��lT��lm�Nlo�Nly�Nl}�Nl��Jl��Jl��Jl��Jl��Jl��Jl��Jl���l���l���l���l���l���l���l�l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�Jl��l��l��l��l��l��l�l�Nl�Nl�l�l�Nl�Nl�Nl��Jm�Nm	��m
�Nm
�Nm�xm�xm��m$��m7�Lm9��m:��m;��m<�`m=��m?��ml�Nmr�Nm|�Nm���m���m���m���m���m���m���m��`m��m�`m��m��m��m�Nm�Nm�xm�Nm�Nm�xm��Nm���o�No	��o
�No
�No�xo�xo��o$��o7�Lo9��o:��o;��o<�`o=��o?��ol�Nor�No|�No���o���o���o���o���o���o���o��`o��o�`o��o��o��o�No�No�xo�No�No�xo��No���p��p	��p
��p��p
��p��p��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p��p��p���p���r	�Jr�r�Nr�r�Jr#��r$�Jr&��r*��r2��r4��r90r:0r<r?0rD��rF��rG��rH��rR��rT��rm�Nro�Nry�Nr}�Nr��Jr��Jr��Jr��Jr��Jr��Jr��Jr���r���r���r���r���r���r���r�r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�Jr��r��r��r��r��r��r�r�Nr�Nr�r�r�Nr�Nr�Nr��Jt	�Ht�Ht$�Ht9:t::t<(t?:t��Ht��Ht��Ht��Ht��Ht��Ht��Ht�(t�Ht�(t��Hu	�Hu�Hu$�Hu9:u::u<(u?:u��Hu��Hu��Hu��Hu��Hu��Hu��Hu�(u�Hu�(u��Hy�Ny	��y
�Ny
�Ny�xy�xy��y$��y7�Ly9��y:��y;��y<�`y=��y?��yl�Nyr�Ny|�Ny���y���y���y���y���y���y���y��`y��y�`y��y��y��y�Ny�Ny�xy�Ny�Ny�xy��Ny���{	�H{�H{$�H{9:{::{<({?:{��H{��H{��H{��H{��H{��H{��H{�({�H{�({��H|	�J|�|�N|�|�J|#��|$�J|&��|*��|2��|4��|90|:0|<|?0|D��|F��|G��|H��|R��|T��|m�N|o�N|y�N|}�N|��J|��J|��J|��J|��J|��J|��J|���|���|���|���|���|���|���|�|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�J|��|��|��|��|��|��|�|�N|�N|�|�|�N|�N|�N|��J}�N}	��}
�N}
�N}�x}�x}��}$��}7�L}9��}:��};��}<�`}=��}?��}l�N}r�N}|�N}���}���}���}���}���}���}���}��`}��}�`}��}��}��}�N}�N}�x}�N}�N}�x}��N}�����J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J��j�m�j�o�j�y�j�}�j��j��j��j��j��j����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|����������������������������������������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$��������������������������������������������	������������$���������������������������������������������	�\�
�
��h��`��h��\�������""�#���$�\�&���*���-�8�2���4���D���F�`�G�`�H�`�J�T�P���Q���R�`�S���T�`�U���V���X���Y���Z���[�|�\���l�m�`�o�`�r�t2�u2�w���y�`�{2�|�}�`���\���\���\���\���\���\���\�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������\��������`��`��������`��`��`������h������h��`��`��`�����\����	���
������
������������$���7���9���;���<���=���?���@���`���l���r���|�������������������������������������������������������������������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J����
���
���Y���Z���\���l���r���t���u���{���|����������������j�m�j�o�j�y�j�}�j��j��j��j��j��j����
������
���9���:���?���@���Y���[���\���`���l���r���|����������������t�
�t�
�t����9�^�:���<�h�?�^�Y���\���l�t�m���o���r�t�t�|�u�|�y���{�|�|�t�}�����h��h������t��t��t��t���������t����
���
���Y���Z���\���l���r���t���u���{���|������������������
������
���9���:���?���@���Y���[���\���`���l���r���|����������������	�\�
�
��h��`��h��\�������""�#���$�\�&���*���-�8�2���4���D���F�`�G�`�H�`�J�T�P���Q���R�`�S���T�`�U���V���X���Y���Z���[�|�\���l�m�`�o�`�r�t2�u2�w���y�`�{2�|�}�`���\���\���\���\���\���\���\�����������������������������������������������������������`���`���`���`���`���`�������`���`���`���`���`���`������������������\��������`��`��������`��`��`������h������h��`��`��`�����\����""�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������""�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}�����������������������������������������������������������������������������������������������������������""�#���&���*���2���4���F���G���H���R���T���V���Y���\���m���o���y���}���������������������������������������������������������������������������������������������������������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N�����	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J�	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J���
��
���x�#���&���*���2���4���7�L�9�L�:���<�h�?�L�Y�|�Z���\�|�l��m�x�o�x�r��y�x�|��}�x�������������������������������h��������h��x��x����������x��x��x����	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J�	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J���
��
���x�#���&���*���2���4���7�L�9�L�:���<�h�?�L�Y�|�Z���\�|�l��m�x�o�x�r��y�x�|��}�x�������������������������������h��������h��x��x����������x��x��x�����N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N������N�	���
�N�
�N��x��x����$���7�L�9���:���;���<�`�=���?���l�N�r�N�|�N�������������������������������`�����`�����������N��N��x��N��N��x���N�����	�J����N����J�#���$�J�&���*���2���4���90�:0�<�?0�D���F���G���H���R���T���m�N�o�N�y�N�}�N���J���J���J���J���J���J���J������������������������������������������������������������������������������������������������������������J����������������������N��N������N��N��N���J��J�
�J�
�J����"���#���&���*���-2�2���4���7�|�8���9�x�:���<�\�?�x�Y���\���l�J�m���o���r�J�t�H�u�H�y���{�H�|�J�}�������������������������������������������������\��������\��������J��J��J��J������������J������D��(\��8R|�� �Z� R�	@	�

*
N
t
���:��

:
�
�
�:���*z�>�&`��.d���8Tv��l�HP�Tn�"���`�N��*Z��N����  z � �!�!�"�# #j#�#�$n$�$�%%l%�&&X&�&�'('l'�'�(l))�*>*J*V*b*n*z*�*�+�+�+�+�,,, ,,,8,�,�,�,�,�,�,�,�-�-�-�-�-�-�..�.�.�.�.�.�.�/�0�0�0�0�0�0�0�0�11�1�1�1�1�1�1�2(2�2�2�2�2�2�3d3p44�4�4�5d6"6<6p6�6�6�7�8T8`8l8x8�8�8�8�8�8�8�8�9*9R9�9�9�9�:4:�:�;;x;�;�;�<<0<~<�==j=�>>p?~?�?�?�@~@�ADA�A�BBNBhB�C8C�D8D�D�EEHE^E�F8F`F�F�F�GG4GbG�G�G�H@HzH��b"/n�	�n���*��(��0�/	G
�V22J
�|>	X	l	t	T�	�	P�	�	`>	0�		�	
��	0
�	d
�	
�8	4�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoRegulartyPolandLukaszDziedzic: Lato Regular: 2013Lato RegularVersion 1.105; Western+Polish opensourceLato-RegularLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.LatoRegulartyPolandLukaszDziedzic: Lato Regular: 2013Lato-RegularVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.tyPoland Lukasz DziedzicLukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFL�tx	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt�������������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK-"#[Z��o�oQgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfnu�[���GPOS'��HPGSUBV.TIlOS/2�8��J|`cmapRԟ�J��cvt &�6e�8fpgm�zAe�	�gaspe�glyf�^��O���head��d��6hhea�1��$hmtx?k���TkernO�Q��@g�loca�)N4,maxp>
�P` name�BbdP�}post:�\�b�prep�x9�op�
0JDFLTlatn����kernkernGr�����T��v		�

����
V
��8�,^$^�0��
D��J��J���J�L F �!z"##P#�$4$~%x&&�'�(�)�*�+�+�,J,�-n..�/$/V/�/�/�1�242n2�2�33V3�3�44J4�4�4�5�5�6�7�7�7�8~8�8�:�;";�;�<�=2>,?&?�@�A�B�C8C�D�E.F(>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�Iq>	��
>
>�G���G������"F#��$��&��*��-�o2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l>m��o��p��r>tPuPw��y��{P|>}�������������������������������������������������������������������������������������������������������������������������������������������������������>�>�G�>�>�G��G�����$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������
�om�oo�oy�o}�o�o�o�o�o�o$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	���L�L������"$��-�.D��F��G��H��P��Q��R��S��T��U��X��w������������������������������������������������������������������������������������������������������������L�L�L���	����$����������������������������+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������3��
��
���$#��&��*��2��4��7�89�V:�y<�=?�VY�zZ��\�zk��l��m�$o�$p��r��t�=u�=y�${�=|��}�$�����������������������=��z��z�����=�$�$���������$�$�$$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������/	���=�=��$��-�VD��F��G��H��R��T�������������������������������������������������������������������������������������������=�=�=���$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������#��&��*��2��4��7��8��k��p���������������������������������������f	���L�L�L���]�]"-#��$��&��*��-�82��4��D�)F�)G�)H�)J�AP�]Q�]R�)S�]T�)U�]V�FX�]Y�QZ�y[�b\�L]�ek��m�Lo�Lp��w�]y�L}�L��������������������������������������������)��)��)��)��)��)��)��)��)��)��)��)��)��]��)��)��)��)��)��)��]��]��]��]��Q��Q���)���)�)�]���)�F�F�e�e�e�L�L�L�L�L�L�L�L���	����$����������������������������q>	��
>
>�G���G������"F#��$��&��*��-�o2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l>m��o��p��r>tPuPw��y��{P|>}�������������������������������������������������������������������������������������������������������������������������������������������������������>�>�G�>�>�G��G�����NF	��
F
F����������$��-��D��F��G��H��J��P��Q��R��S��T��U��V��X��lFrFt<u<w��{<|F��������������������������������������������������������������������������������������������������������������F�F��F�F�����+

��#��&��*��2��4��I��W��Y��Z��\��k��lm��o��p��ry��|}������������������������������������������m4	�~
4
4�[�V�[�~����"2#��$�~&��*��-�82��4��D�GF�GG�GH�GJ�_P��Q��R�GS��T�GU��V�GX��]��k��l4m�Vo�Vp��r4t2u2w��y�V{2|4}�V��~��~��~��~��~��~��~�����������������������G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G�������������~�G���G�G�����G�G�G�������V�V�4�4�[�4�4�[�V�[�V�V��~��" #��&��*��2��4��k��m��o��p��y��}��������������������������������-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������K
K
K�y�ylKrKtdud{d|K�K�K�y�K�K�y�y��
��
��Y��\��l��r��t��u��{��|����������������D��F��G��H��R��T���������������������������������������������������������������������
��
��Y��\��l��r��t��u��{��|������������������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������"�y�yD��F��G��H��R��T��������������������������������������������������������������������y�y�y.	���~�~��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������~�~�~���	��������$����������������������������������D��F��G��H��R��T�������������������������������������������������������������������.	���y�y��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������y�y�y���-#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[	�e�e$�e9F:F<(?F��e��e��e��e��e��e��e�(�e�(��e	�e�e$�e9F:F<(?F��e��e��e��e��e��e��e�(�e�(��e&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���	�e�e$�e9F:F<(?F��e��e��e��e��e��e��e�(�e�(��e>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������
�om�oo�oy�o}�o�o�o�o�o�o$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�����������������������������������������������	����$����������������������������	����$����������������������������	����$����������������������������	����$����������������������������m4	�~
4
4�[�V�[�~����"2#��$�~&��*��-�82��4��D�GF�GG�GH�GJ�_P��Q��R�GS��T�GU��V�GX��]��k��l4m�Vo�Vp��r4t2u2w��y�V{2|4}�V��~��~��~��~��~��~��~�����������������������G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G�������������~�G���G�G�����G�G�G�������V�V�4�4�[�4�4�[�V�[�V�V��~$��	��
����
����$��7��9��;��<��=��?��@��`��l��r��|�������������������������������������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|��������
����
��@��[��`��l��r��|������.	���~�~��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������~�~�~�����
����
��@��[��`��l��r��|������.	���~�~��$��D��F��G��H��R��T�������������������������������������������������������������������������������������������~�~�~���:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������
�om�oo�oy�o}�o�o�o�o�o�o��
����
��@��[��`��l��r��|������"�o
�o
�o�t9�j:��<�y?�jY��Z��\��l�om�to�tr�ot��u��y�t{��|�o}�t��y�������y�t�t�o�o�o�o�t�t�t��
��
��Y��\��l��r��t��u��{��|������������������
����
��@��[��`��l��r��|������m4	�~
4
4�[�V�[�~����"2#��$�~&��*��-�82��4��D�GF�GG�GH�GJ�_P��Q��R�GS��T�GU��V�GX��]��k��l4m�Vo�Vp��r4t2u2w��y�V{2|4}�V��~��~��~��~��~��~��~�����������������������G��G��G��G��G��G��G��G��G��G��G��G��G�����G��G��G��G��G��G�������������~�G���G�G�����G�G�G�������V�V�4�4�[�4�4�[�V�[�V�V��~��" #��&��*��2��4��k��m��o��p��y��}����������������������������������" #��&��*��2��4��k��m��o��p��y��}����������������������������������" #��&��*��2��4��k��m��o��p��y��}��������������������������������&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���0�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���&�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j���>	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[:�V
�V
�V��#��&��*��-22��4��7��8��9��:��<�y?��W��Y��Z��\��k��l�Vm��o��p��r�Vt�`u�`y��{�`|�V}�������������������������������������y�����������y�����V�V�V�V������r

#$&')-./2345789:;<=>?EHIKNPQRSUYZ[\^klmoprtuy{|}����������������������������������������������������������
8�DFLTlatn����case&case,liga2liga8sups>supsD,>B	

@LO,{tuCjqv�������I�,xx�A���P`KtyPL�J�z��� ��� �&
	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a���������������������������������rdei�x�pk�vj���sgw�����l|����cn���m}�b�������������������y���������������������q���z���`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ`T@
~�1DS[a~�����    " & 0 : D �!"!&"""""""+"H"`"e%�&i���
 �1ARZ`x�����      & 0 9 D �!"!&"""""""+"H"`"d%�&i����������������{�u�q�[�H����$��������������I�����������������޸ޡޞ�:ڜ/��,8<@��BK�	PX@3	`f[[		QCQ
D@4hf[[		QCQ
DY@@?>=<;:9751/+)&$$
+>32#'.<54>54.#"#"'4632#"&!!7!!3<G*6]E'!1;3$
A!1:1!/?#.B.{,! ,, !,����]#[��n$;S47O;-('rT.)*4C.$8'�� ..  ..��y$?�����
)@&hCSD

+#>74>32#"&�F
>F�!""'5���-PS\88\SP-<��""!5��t�
,@)	BkD

$+#"&'7!#"&'7e$
&]$
&��ܚ�$�ܚ�$Pr�:>yK�)PX@(
Y	CQ
C
D@&
Z
Y	C
DY@>=<;::5320-,'%#"!#!+#"&547!+#"546?3#76;>;!323+32%!!�'��Ԇ)��ۂ�
)։(�+�)�����	��,�����E
	��l��%��D�
	�m$�yE�r��B[9DO�@!
*BK�PX@2j

h
f_

SC	SD@1j

h
fk

SC	SDY@LKA@#$#$+.'7632.54>?>;#".'+4.'>ေ>	"/AU8o<rY6=r�g
#"d�7#;XAc@|c=D~�p$
#�-Lb6kY�b4��'DX2`TV,bP&!(#�/HhLN�pE��J@!!)%��0GhN\�N��:P9)��>c��6M9*,6Tl}��8�'0DXuK�PX@+[	[SC
C		SD@/[	[CSC
C		SDY@
US((%"&((($
+#".54>324.#"32>>;+#".54>324.#"32>�7Zt>3W?#4XvA3V?$J.>$0XC'-?$0WC(XA��B�7Zt>3W>#4XuA3V?$J.=$0XC(.?$0WB(qg�h4&ImGg�i5&JmI<W9)W�]<V8(V�b
���g�h5&JlGg�i5&KmH<W9)W�];V8(V�M����?OT@QK8J)#BhSCS
CSDFD/-&$ 
??	+2"#"'.#">7>;#"&/#".54>7.54>32>7�>hJ)40K6=eI(>;a2A
<TD�M�/lz�GG|\6:c�M106b��0.J_2>si^(��GrP,�)Kh?	 E:%,Mi>E�I�NH�G^�[���3V>#-U|NR�y\F�FP�d8��BeD"!:P/�Viz��e�
@	BkD

$+#"&'7e$
&��ܚ�$���H� �(+.54>7�!2!	++<'
4UxR&	S~T+�O���H		X���PV�����r	w������ �(+4.'&546?'&547>\!1!	++<'
4UxR&	S~T++O���H		Y���PV�����r	w��	����;*@'40/+'&"
	Bja;;+7>7'7>7./7.5<?3>?'.'x	
��
��2	

����

��n+n		n,n	��	n,n	
	n+n	
���3�.@+jkMRF+!!#!7!�7��O7L8�Q	�8��=G�;�G�?���@B?S
D"+74632'.54>7#"&?0'+/(8"'$	%/U#2;0)URL 	%9J,2c*x@MQE+!!n�	�RxN:����@SD&$+74>32#"&:!#7''5M""'55�����@kD""++6;	!&�''/�$Z��`�',@)SCSD''	+2#".54>2>54.#"�\�r@b��y\�r@b��.c��Q5\}Gc��Q5]}�H�ّ���jH�ّ�G�j��_�)ʂ�z;_��Ƀ�{;���)@&BhCR
D$+%!7#"/3!!F����I�5�(H�E��	'i��HF5�1<@9-BhSCQ
D+)#!
11+2>3!2!7>7>54.#"#"/>�K�c9;e�K�	 G#h�q
	!K}Z2-Mf9Du_F.\~��*S}R[���D�8!5!�C{|�NCcA 'Ig?Z�b4q��<�HU@RD
Bhh[SCSDB@:80/.-%#HH	+2#".'763232>54.#7>54.#"#"/>�K�`73XwCEgF#Q��ha�f<)	
2OpNa�g6$V�m	a�k8,Kd9Dv`F.[~��)OvLP~^?
7Oe:`�xD.\�Y
GhF"Ci�@7aG)B2X|L@_?'Hg@Z�b4>^�+@(
B\C
D!#+!+#!"&/367!Z�1T2�g;Tk�5b�2
�i�
-�� '��g��8�-@@=+*Bh[QCSD(#&(""+#!632#".'763232>54.#"'!2����kg�g3[��m:hXI 
-HgF[�yF(T�Xn�8�{_�$6a�P}NJJ#-'%=r�iBmN,%r���32@/B[CSD0.&$	+2#".54>7>;>32>54.#"�T�b6Q��oY�f7:Z>�	Q�&>B���*PsJ^�p=,QtG_�o=M5`�Rl��J7h�\:qwH	

��*K#?G�-DtU0=l�WFrP+Do����$@!BQC
D$'++>7!"&57�	��H.
��
�#	��


>f��&�%;OD@A
B[SCSD=<'&GE<O=O1/&;';%%	+".54>7.54>32'2>54.#"2>54.#"^�m<6`�MmpBx�fW�_1)MpH<cG'N��eY�l==`u7,]ZQ=$.Ty�[�Y+%HjES�\2!Fk1ZNY�fA!�hT�l?3WuCDw`F5NiBf�q<J3_�SOkA"8PkE?fJ(�9]v>6]E'2XwE2^H+�Z�22@/B[SC
D/-%#	+".54>32+>74.#"32>MP�^3O��iU�c5:V7�H T� >B�V+NnBV�l=)MnD]�i8Z3\�Of�I8f�VDrosE��I&L)BH�CqQ-9g�VClK(Ai�:��Z�;K�#PX@SCSD@[SDY�&&&$+74>32#"&4>32#"&:!#7''5f!#7''5M""'55D""'55<�e�)K@
B?K�#PX@SCS
D@[S
DY@	(& "+74632'.54>7#"&4>32#"&<0'+/(8"'$	%/o!#7''5U#2;0)URL 	%9J,2<""'55�	�5�(+���%(�B��A��

��
���	c!@YMQE+!!!!�;	��/:��+GG�	�5�(+	767>7&'&5<>7���L%(�����A


�~����'95@2BhfSCSD(&#,$+>32#7>54.#"#"'4>32#"&EQ\4=gK*1LYQ< @9NZL2 9M,>\@(
"!""'5
3'&Fa;SvXA<>(��,E>?PhH/K5#*#�g""!5a��2Wlf@c
^
?Bh[

[	[OSGYXb`XlYlOMCA=;86,*" 
WW
+%"&5<7#".54>3232>54.#"3267632#".54>32%2>7.#"IG?�L-B*!>Zq�N1T!';sZ7L��g\���a7V��z��_	o�����^<j���hpɘXDq��%!HHFp.;l\K5/�NH\S 9L,;|tfL,��=Z !*	I��v|�|?7f���z��PD>JP[�����ǡq=I�҉�ՙTD?lT7%AXck4!9*��X�
$@!BZC
D# +!#"&'!+3!.'XLe���L�b�>E�	
��b��z�*�5�*=@:B[SCS
D*(" !+3!2#!2654.#%!2>54&#!��yf�b/,QtI��C�s�JD��)OsJ��a�\,�����*OrHD|eI�yb�p<�����:]B$H:_zAw~�����/D@A
BhfSCSD'%" //+%2>32#".546$32#".#"�ItZA.	#.ix�PzŋKp��ItaQ&)N}`��aBv�E%+%*/K5X�⊹3�y,B*(,5,h���|NjJ�-�@SCS
D!(!&+#!!24.#!!2>-1[���g�$��}ʍLg?u�h���x�ޢZ/}ڵ�b3�U�ދy†H�c��?�(@%YQCQ
D+!!!!!!4�WG7��I���5��P��R��?�	"@YQC
D+!!!#!4�WJO��Pd�5��S�u�����9G@D$	Bh[SCSD1/(& 99+%2>7#"504>7!#".546$32#"'.#"�CobZ-0�k?5o}�R͐Mn��M~hV&	'7Kb?��]Bz�A*��
%:'Y�㊻3�w,@)'!h���|njK�!� @ZC
D+!#!#3!3sdS��Sd�dR(Rd��Y��k����@C
D+!#3	d�d�����'@$BhCSD#%$+#"&'7>3232>73}Hn�W6Y+

#1#;lW=
xd�u�q76%W�i���� &@#
B\C
D'(% +3267>;#"&'.+#3^M"(PQ�~�P	�*	TTc�d�L���Xf�U��X�@CR
D+7!!3�h�6�cUU��<�!'@$BhC
D!6(+67>;#>7+"'#32-
~E�W���	�n�W�D���
�y��#��F���!�@BC
D!+2>73#"'#3b
��W�.�Q�W�1��0��y�-�G����q�'@SCSD((($+#".546$324.#"32>qm���|ȍLn��}ɍLg?v�g�ޣ\@v�g�ޢ[0����xY�≺3�xY��{ŋKh��{ŊKg��?�/@,[SC
D



!+#!2#32>54&#GFc�T��J��v�T�^�k:��;�����l��H��S<j�V�����q�/T@
BK�PX@SCSCD@kSCSDY�((($&+#"&'#".546$324.#"32>q5a�U#N
�|�|ȍLn��}ɍLg?v�g�ޣ\@v�g�ޢ[0�⼓1�{
C2Y�≺3�xY��{ŋKh��{ŊKg��3�!7@4B[SC
D! *!+#!2#"'.#32>54&#POc�P��<n�^qU��!%SM�_�j8�������\�sH��@���4`�S�~'����==@:=BhfSCSD;9(&!#!+#".#"#"&'763232>54.54>32�";]FLwS,2QgmgQ2B{�m��<!	!-@U8T�`32QglhQ1:m�ef�8�&-&1Uq@=S;+)1FdI`��LcV+#)#9d�N>S:((0GgKQ�sDKH��� @QC
D+!#!7�
�8�c��6
�T��3T����#@ CSD+%2>73#".5473o]�uLkdl]��sg�o:kdl-W�FH~�cl��u˖VG|�e,-l��(T�h;
�@BC
D, +32>7>;#O&
	GN�:Y��c00��y�~�( @#BC
D+; +32>7>;2>7>;#.'#�N���
�M��Y�	��Y��h))��h))��y��/����@
BC
D)"'!+	32676;	#"&'+��Y
-�c��Y
���	b��
��4�r���p
���@BC
D,"+#32>7>;gIcI��X+�SG��H?�d! �,��$@!QCQ
D+!!7>7!7��28�A	���!	�R!
�RD��D�'@$[OQE!#+!+32D�&
�̼���#��
q��H�@kD" +32#"&'q''	�%�$�+���'@$B[OQE!#+!!7>;#"5�(���˻�
#v ��@	BkD+!+3#"&'&'+\;UC�

�F���
��L������1@MQE+!7�	�+�AA�~�@kD+2#"/�s5����<��s�+^@ BK�%PX@SCS
D@SC
CSDY@
#!++*' +!#"&5#".54>322>7&#"�.!&[gr=?^? ,Qp��R<h3��9odY#2;EC~o]D%[
9P�^41Z�PW��~\4��@u�d�-Pn��L��f����0h�"BK�%PX@CSCSD@!CSC
CSDY@(&00*%+33>32#"&'#"32>54&f�]a'`ju<AbB" ;Ul�HU�*9sk]$#7?C#?mYE/f���O�\32[�PM���b9MLl�@t�d��'7"3Xu��A��H��F�25@2BhfSCSD%(#&*$+%#".54>32#".#"32>325_[^5VT*!>Xn�I1OB6	
1N;T�k=AbC5TA1&
�;L,;j�VO��vV1#2! % Z��lEvV0")"
@����.p@"BK�%PX@CSCS
D@!CSC
CSDY@&$..
+!"&5#".54>323%2>7.#"�!'alv=AbB" ;Ul�IQ�,I\��I9rk]$#+�E?mYE/f
=Q�_42\�QL���b9GGK�Q@?t�c N@3Xt��@��F��F�,=7@42BhSCSD.--=.=*&%,+32>32#".54>32%">54.F8`�Ќ��5UC3(	1]_f:S�X.;Wp�OIe?��P�cC��O,,G%)JB;1')��$($
4K07e�ZK��zZ4)=GgDq�Q%)0361(B���%^�BK�!PX@kSCQD@kYSDY@%%!$%$	++'&546737>32#"&#"!2j*#�~�
:Wn?8
(-Q?-	
~���w~U�V+
0AhK{F�����>Td�@<& CBBK�PX@+	[[CSCSD@.h	[[SCSDY@VU^\UdVdQOGD7642*(
+#".54>32.5467#".54>32!4&'.#"32>2>54&#"�(/(#*#@t�dO�_4K��b"D#")[69bG(1]�W3Z#
�l 1X)c�a1'Hf>N�[2�@eF$n]@dE$l�7ZKA>@$3016@'?uZ6 =X8HoL(4 #H3$GgDE�h? 

L��1F%?T.+C-*FZ
6Wo8hi3Tm9jnf��,@)BCSC
D%%+33>32#654&#"f�^\(akp9po
^KMS6pi^$A��KuQ*��2]��|.)fj7g�Z��x��&@#SCC
D
+##".54>32Ny]y���W !�m����(4@1	BSCCSD%#!%%+#"&'7>323267#".54>32J�(?W5)JR
���4XA%
XQbW !c��0@-B\CC
D%(%!+3267>;#"&'.+#rm%�R�9	lP	��$=]����	{�_

�


�
�
�u��@C
D+33u�]���Q^��5Z@
BK�)PX@SC
D@CSC
DY@55%&($!	+332>32>32#>54&#"#654&#"^x+#N�qdU']gl5k^
]K>M1eaW#C]K	:Jr�I?�$�ꛫ~v"'PwO'�}
6_��|7Z]-Z�\��|E6TW�^��!P@
BK�)PX@SC
D@CSC
DY@!!%&!+332>32#654&#"^x+")cnt;op
^KMS8rk^$=�$��O}W-��	2[��|.)ej9i�]��G����%,@)SCSD%%	+%2>54&#"".54>32�W�f7�~:fVE/�wP�]3H��lP�]3I��>[��g��)Jex�F��K8j�`yߪe9i�^yޫf2����-m@!BK�)PX@SCSCD@!CSCSCDY@%#--*&!+32>32#"&'"32>54&2�+# 'amv=AbB" ;Ul�HQ�+;�9sj^$#,�E?mYE/f��F$��Q�_42[�PM���b9HF�?t�d��O@3Xu��A��<��s�.6@3#BSCSCD&$..*) +#"&547#".54>322>?&#"�6O&Yeo<?^? ,Qp��R<h3��9mdX#4;EC~o]D%[��sM}Z11Z�PW��~\4��?t�c�-Pn��L��^��,@)
BSC
D#$!+332>32&#"^x+#D�c)+.(k�=<�$�أ�Y��!����<=@:<BhfSCSD:8'%" #!+#".#"#"&'7>3232>54.54>32�
2J73[C'&?OTO?&3^�Ra�/	
5R>;aE&&>PSP>&2Z|JT|0i"9K*)8)%4K5@x]8C6" ' 'DY2,<+#2H4:kS144l���@+g@
	&BK�!PX@#jhQCSD@!jh\SDY@	%#(&&+74>7#"5?>;!!32>32#"&�D��B
./ ��E=0!3&(r9R]�$9,5)d	��G��)4!A:**3Zr����"P@
BK�%PX@CT
D@C
CTDY@""'!%+32>73#"&5#"&54>7!KMS7pj^$@^x,)cmt:oo
�/(fk8i�\�O|U-��	3Z��S��@BC
D+ +3267>;#SI�
�G�N�	��,*0
�Vx�) @#BC
D(!+: +32>76;2>7>;#"'&5+VC�	V$�
FB�VD���B���))��**
�(����V�@BC
D("(!+3267>;	#"&'+s�P
�	 	T��P
�	��P��rq	�0����QV����@
BCD,"!++32>7>;�C��J
�
�	I����
��	
	<�@QCQ
D+!!7>7!7!6�a/	�^
���
����K&	MKG��F�D7@4"5B[[OSG<:303)+4&#72654&54>;+";20#".54>�D9J\+NoE3:P1	'?.*")"'8#38U:#*#�9I;tw<�<U�_3(3Vn:B�>-TF3
)5 =vw{A)B0

	%BY4D{ut���@QD+3#�KK����D7@45"B[[OSG<:303)+3"+7>;2>54&54>7.54>54.+"&504>732�D9J\+NoE3:P1	'>/*")"'9"37V:#*#9I;tw<�<U�_3(3Vm;B�>-TF3
(6 =vw{A(C0

	%BY4D{utP���9@6jk[OSG
+2>53#".#"#4>32�%=*N <X83kib+&;*M <W84khb70B'7^F('0'0B'7^F('0'�����
)@&hSCD

+>734632#"&�D

)			C 5'#7''5��&-PS\88\SP-���'7#'55���/:K@H%BjhfkSCSD##'#	+.54>?>;#".'>32+V�b4L�ˀ#
#)V�.
	4N8�KlI*J]l:$
#�)LmE�i�r=@o�`�לX��;- ��"' 	1%�
�Q�]7lJ��i�=C@@+
Bh[SCS
D%&%##("	+#!>3!#!7>7#7>;>32#"'.#"!a�%'#/)�5$=/*��$Lz�fPuQ4(	&;XAN�`=	$����,F9/'@
#4I5W%)]�uC%?V0 <.4_�O��$��D#79@6!B
@ ?WSD42*((+467'7>327'#"&''7.732>54.#"(#�2�-n?>n-�1�%))#�1�-n?>m,�1�$)H+Ib89cJ++Jc98bI+�>m-�2�%*)$�2�-n?>m-�2�$)($�2�-m?8bI++Ib88cJ++Jc���!8@5	B
Z	YC
D! +!+!32>7>;!!!!#!7!7!�[��M	

�N��[��o��/]/��n��h�d##���9v8��8v���@YQD+3#3#�KKKK����X�}b�EYA@>EWM:#BhfWSDCA,*'%!#!+#".#"#"&'763232>54.5467.54>32>54.'K	1I76[B%(BUXUB(^](22]�Ta�0
4P>>bD$Im�mIdq*42Z}LS{0��!8IPR$NC2CJL#`M
#:N*)>3,-3AR7^�&"U;Dy\5B6" % 'CY2=S@:GaGU�)!V>;lR145��&<2+(+&kE(?3*&&+gv�qm%3K�'PX@
SD@OSGY�&(($+#".54>32#".54632

V
0"





"1
k���/Ka�@
BK�PX@4hf[[		SCSDK�PX@4hf[[		SCSD@4hf[[		SCSDYY@
^\*,*(#&(%"
+>32#".54>32#".#"32>4>32#".732>54.#"Y";�t`�s@Cw�c4WJA	!;[DS�a55_�L<V?-�%4^���dc���^44^���cc���^4<g��\��yW/h���g�#;FAv�fd�wB)!5b�WZ�a3,c���^44^���cd���^44^���d��h/Wy��]��ii���>d�0:L@I!Bh[	WSD21651:2:%#00
+"&=#".54>7>454#"#"&/>32'26?4cB2&)[�go'8)

	1i?*>)�=[+��9GD.11!*H7!w/-1A$	4Y�a*5)�KB.)����%�%(+77�

�			� =

�			� z
����	{z
����	�T��=K�	PX@_MQE@kMQEY�+!#!�<.O$���'c*x@MQE+!!n�	�RxNq���1GP��<BK�PX@/h		[
[SCSDK�PX@/h		[
[SCSD@/h		[
[SCSDYY@22PNJH2G2F)!**,&+4>32#".732>54.#"#32#"'.#'32654&+q4^���dd���^44^���cc���^4<g��\��yW/h���g�U����v
O��n�ywkw��c���^44^���cd���^44^���d��h/Wy��]��ii��yusvd�
��_
@a[\Tr�q$@MQE+!!y��	$@�D��'@WSD((($+4>32#".732>54.#"�0Qm>?nQ//Qn?>mQ0E$>U00T=$$=T00U>$n>mQ..Qm>>lQ//Ql>0T>$$>T00T?$$?T<P8<@9jhZMQE
	+!!#!7!!!�2�	�O1L1�S�2����V�jG�l�G��G���V/g@
-BK�!PX@h[SD@!h[OQEY@+)%#
//+2>3!2!767%>54.#"#"/>�(E33C%�(�'
"=,#/9Z$�V,?*-LD?!��;>@$-B=`e�|�V>�@:BK�PX@,hh[[SD@1hh[[OSGY@8631+*)( >>	+2#".'763232>54.#7>54.#"#"/>�(D2UE@A+H^3<N1 	
 9.,E/+D0ae".?T	$1BPV)<&K_K95U>!3C$
('0;-!2RH+B;0I2�T�@kD"++7>3T�7�
�������$7@4#BCS
CD$$&(!&+32673#"50>7#"&'#"&5RcjX�H][z3K�]Xn(.��cmybX�	;3X[JD*R#��y�B4�*@'hiSD+##!#".54>34	�U����Vm\�h8E��n�R�
�
y-SwKV�i;����@OSG($+4>32#".�$&&$P&&%%��TV@
BK�	PX@^jTD@jjTDY@+232654.'73#"&'764#3:(8"8:'JN2E(&D
��
2*�a73!5%��lQN�	BK�PX@jjQD@jjMRFY�$+37#"/733!��C�
�9R����%��h5�;��#)@&WSD##	+2#".54>2>54&#"�7U;+OpE8V;+Oq7T8RR:U8R�$C]9O�[2$B]9O�\2��*MlBYk+NlAYj���%�#(+7'&54767&'&54?'&54767&'&54?�	�	��	�	���
'	'
����
'	'
���`�(.Q@N"Bhh
Z\	C
D.-('&%$#%"#!"
+%3+#7!"5'3+6;37#"/733!>7!�n=���A��&�$(���C��9R�������'��"�Ud#�k%w
��h5t�|�H�9Jb@_D=7Bhh
Z[	CT
D
	JIHGFEB@;:52/-	9
9""
+%+6;2>3!2!7>7%>54.#"#*/>%37#"/733!w&�$(y(E33C%�(�'
"=,#/>X����C��9R���d#�K,?*-LD?!� �;>@$-F9`e %w
��h5�r�Y_y@vU
!.
	
B

h	
	
h

h	[

[\

SC
D_^SPMKEDCB:820*(YY"#!#+%3+#7!"5'3+6;%2#".'763232>54.#7>54.#"#*/>>7!�		n=���A��&�$(��(D2UE@A+H^3<N1 	"6*,E/+D0ae".?V		1BP+���'��"�Ud#)<&K_K95U>!3C$
-%0;-!2RH+E80I2���|��;�(:5@2BhfSCSD('#,$+#".54>?332>324>32#"&;DP\4;gL+1KZP; >6MXK1!8K)=]B'�!""'5�3'%Db>RtS=68%��+?99KeG0L5$*$P""!5����X�&$	@����X�&$H����X�&$
@����X�&$@����X�&$
@����X�&$@����:@7BYYQCS
D#	+!!!!!!+!!��6��W�X���Mwz���
5��P��R��b��z5+�����Lh@e9?
J	Bhf
hSCSC	S			DHF>=750.&$!LL+232654.'7.546$32#".#"32>32#"&'76#3:(8"/r��Fp��ItaQ&)N}`��aBv�bItZA.	#-ds�LJN2E(&D
��
2*r^�܅�3�y,B*(,5,h���|NjJ%+%*-I5L73!5%���?�&(	G���?�&(G���?�&(
G���?�&(
G�����&,	�����&,�����&,
�����&,
E`�!,@)YSCS
D!%(!+3!2#!#%4.#!!!!2>M�R�}ɍLl�����$T��?u�g��Hs��Jx�ݡZ��U�މ����r�y†H��>��c����!�&1������q�&2	������q�&2������q�&2
������q�&2������q�&2
���)C�	(+		'	7	)�cF6���Z,���9C�
����3u��3wp4��pO����!-9b@
21&%BK�PX@kCSCSD@jkSCSDY�**%(%$+#"&'+7.546$327>;.#"%4&'32>qm���h�C�")�JNn��m�Ez
4�DH�w:6%:�`�ޣ\"40��9�Z�ޢ[0����x>9��Q卺3�xE?��Q��v�E�<@h��(o�E�67g�������&8	�������&8�������&8
�������&8
������&<&�Y�,@)\[C
D"& +32+#332>54&#����J��u�#c�d-T�^�k:��i��l��H������T<j�V��;���P�@
JBK�PX@-hkSCQCSD@+hk[SCSDY@LKIGFD<:$"PP	+2#"&'763232>54.54>54.#"+'&573>�InJ%4MZM4.EQE.6_�M]~03L::^B$/HRH/5O]O54T=A{cEp*#���W|��-I\.FdL<:A+)3'&7TBL\3C6! % (E]58F0#-B58RC=GZ?D9&Bv�^�z�v	(_��K��<��s�&DCT��<����&Dv-��<��s�&D���<���h&D���<���m&Dj��<��s�&D�22��j�GWd�@?E!BK�)PX@5hh

[S	CSD@?hh

[S	CSCSDY@&YX^]XdYdSQIHCA=;860/'%
	GG+232>32#"&'#".54>?>54&#"#"/>32>32>7">54&Z7]D&>���y5UD3(	0\`g:t�[jo08]C%F��\[BaF.Q�crt9�����=0B'=oY<
�GtY;
��{4b� ;Q0:hN0))��$($
3K1��MjA8W<K}[6U#in(/(NPxkjx�'Eb?.B+-U|P+6c�V'<N-HQH��F�Nh@e;A
L	Bhf
hSCSC	S			DJH@?9720(&#!NN+232654.'7.54>32#".#"32>32#"&'76#3:(8"1OtM&!>Xn�I1OB6	
1N;T�k=AbC5TA1&
2XVV/ JN2E(&D
��
2*u?i�SO��vV1#2! % Z��lEvV0")"
7I,P73!5%��F��F�&HC���F��F�&Hv���F��F�&H����F��Qm&Hj���a`�&�C���x'�&�v���B%�&�����IDm&�j�I���y7I5@20B76
@[SD98A?8I9I,*" +&54?.'&54?7#".54>324654&'267.#"��3vD
Q�C�
�+H4@��~L�^5Ay�i1`TE\U�I��!	+GeDZ�`2*Hc.	y#0	=3�
	o(f~�Y����n9h�[m��U9X=��K��,��3dO1H|�^M{V.��^�j&Q����++��G����&RC����++��G����&Rv����++��G����&R�����++��G���j&R�����++��G���o&Rj����++��3^#+@([YOSG&&&%+!!4>32#"&4>32#"&���U�%$.&$,X%$.%#-�G{&1#%/�Y&1#%/ ��� *5u@
43$#BK�PX@!kCSCSD@!jkSCSDY@,++5,5'%  +"'+7.54>327>;&#"2>54&'��YF
!&+-H��lDq-=2u),I����7GnW�h9W�g9��G
K`�5�[yߪe(&S�5�Xyޫf��W�GY��AZ��kBn*�GB��r����&XC����++��r����&Xv����++��r����&X�����++��r���o&Xj����++��V����&\v����++;����0?@<"BCSCSCD(&00*%+3>32#"&'#"32>54&;�]b'`kt<AbB" ;Ul�HQ�+6$9sk]$#7>C#?mYF/g����N�\32[�PM���b9HG�E@u�d��'6"3Xu��A����V���o&\j����++�����'0L@I-BAhZC
CSD)($"''+2#"&54>7.'!+332>!.'�	
Q+BK*6e���L�bg7.3*$��E�		�!B:">6.��b��y$0<")0
��+,<��s�4F�K�%PX@&;B@&;BYK�%PX@*hSC	SCSD@.hSC
C	SCSDY@65><5F6F1/('$"44
+2#"&54>7.5#".54>32#32>2>7&#",	
Q+BK-8!&[gr=?^? ,Qp��R<h3u3+3*$�09odY#2;EC~o]D%[�!B:#@7/
4P�^41Z�PW��~\4�?$0<")0
6@u�d�-Pn��L���������&&���H��F�&Fv����++���?�'T@Q	B
		hYQCQ
C		SD$"''+2#"&54>7!!!!!!#32>X	
Q+BK*6����WG7��I�p3+3*$�!B:">6.�R��P��R$0<")0
F��F�L]e@bR9@?Bh	h
SCSCSDNMM]N]IG>=750.LL+2#"&54>7"#".54>3232>32732>">54.C	
Q+BK$/S�X.;Wp�OIe?8`�Ќ��5UC3(	/XZ_6)-3+3*$P�cC��O,,G�!B:93-7e�ZK��zZ4)=G)JB;1')��$($
1H0
$0<")0
�Dq�Q%)0361(xN�@C
D+#Ny]y��0��!@BCR
D+%!!7>?3g��~Dh�6H�	
�[c��=
��UMf@
^�S8�@BC
D+46?37#S�L]H��_\Z��
Tv��W2V���V���!�&1���^��&Qv���++���� 46@
BK�PX@*YSCQ
C	S
DK�PX@4YSCQ
CS
C		S
DK�#PX@*YSCQ
C	S
DK�%PX@4YSCQ
CS
C		S
D@2YSCQ
CQ
C		SDYYYY@1/'%  (%+!!!!!#".54>324.#"32>	�ZG2	��H��'+q��Vo�}Ce��W�rQ,]7g�]w̕U8h�\x̔T�R��P��R>N{U-W�އ�6�z5a�Vg��x‰Kk��x‰Ij�6����8N]S@PT6$BhS	C
SDPO:9O]P]FD9N:N42*(" 88+232>32#"&'#".54>32>2>54.#"">54.�=aD#8^�ƃ�y5UD3(	0\`g:y�Ui~GOtK$M��ix�:�8GrW>(:W;Z�h88Z~H{_?��{-0J� 9O0%F@80'��$($
3K1��EnL):aE���Z�uv��I2Vs��?CoO+T�ۈ6fP0q:k�_:EN'6)��'����&6��!����&Vv����++��'����&6
��!����&V�����++�����&<
&��,��&=F��	<�&]v����++��,��&=F��	<�&]�����++��,��&=F��	<�&]�����++��U�%SK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSDK�PX@ YSCSD@ YSCSDYYYYYYY@%%""	+#763>7'&546737>3#"!��Vw�W%3eWE���//�"5dWE1f	��b�\+/FqS
���1 FqR�Eo�R�
@BkD' +#"/+73R=	{�A�S������r�
@BkD' +32?6;#�A{�?�S������r�q$q��a� @WD+".547332>73e5K.C 3&,?+C#=Y�5H*4%3B&2ZD'2���@SD($+#".54>32�    F!!�s�=K�'PX@WSD@[OSGY�$&($+4>32#".732654&#"�/?##?//?##?/:@32@@23@$<++<$$;,,;$2@@22@@7��\
+@(B@jSD+2#"&54>732>F	
Q+BK1>-3+3*$�!B:%C:/
$0<")0
|�nhQK�PX@WSD@[OSGY@
+2673#".#"#>32�(.9(6 1-+&0:)5 2,*�7/$>.!(!:-$?-!'!����	#@ SD



	#++7>3!+7>3��)�=�-�
�������Y�\�BK�1PX@SCS
D@SC
CSDY@!$##	++#!#"&'7632327#7>3Y�q]q�VVsb0	�V��$�d��;ns	&
��!
�ld@MQE+!!���+dE�Bd@MQE+!!��	�VdE�#���(+&5467�\H):#7;X�B
1v?/*�\��(+'&5467>54&'&547E\H*8
�7;X�A		1v?,
����(+7'&5467>54&'&547�\H*8
�7;X�A		1v?,�#��)�(+&5467&5467�\H):�\H):#7;X�B
1v?/*7;X�B
1v?/*�e�+�(+'&5467>54&'&547%'&5467>54&'&547T\H*8
8\H*8
�7;X�A		1v?,7;X�A		1v?,����+�(+7'&5467>54&'&547%'&5467>54&'&547|\H*8
8\H*8
�7;X�A		1v?,7;X�A		1v?,����"YK�PX@#CSCSCD@OCSCDY@
$!#"+>3>32>72!#"'!�F�K/	GL�F��=O
h=�����&
����f����6��*
BK�PX@6		`

[CSCSC


D@1		`O

[CSC


DY@661.,+)'$##!##+%!7>3>32>72!!#.'#"'"&5467�X��F�K/	GL�F��Z_F�K,
G&OOM$�� ��&
�+�'�
91�|@OSG($+4>32#".9.Pi<=lP..Pl=<iP.T=lQ..Ql=<iP..Pi:����!1@SD&&(&&$+74>32#"&%4>32#"&%4>32#"&:!#7''5�!""'5�!#7''5M""'55'""!5'""'55}����'0DXl��K�PX@/[	[SC
C
		S
D@3[	[CSC
C
		S
DY@}{sqig_]US((%"&((($+#".54>324.#"32>>;+#".54>324.#"32>%#".54>324.#"32>�7Zt>3W?#4XvA3V?$J.>$0XC'-?$0WC(XA��B�7Zt>3W>#4XuA3V?$J.=$0XC(.?$0WB(�6Zt?3W>#4XuA3V?$J.=$0WC'->$0WC'qg�h4&ImGg�i5&JmI<W9)W�]<V8(V�b
���g�h5&JlGg�i5&KmH<W9)W�];V8(V�]g�h5&JlGg�i5&KmH<W9)W�];V8(V������(+7�

�			� z
����	����(+7'&54767&'&54?�	�	���
'	'
�����@C
D""+'+6;�&�$(d#)����J[@X9	Bh		h
[	[SC
S


DJIFEDC?=75$##%'$+3>32#".#"!#!!#!32>32#".5#73>7#L�q��r@jWI %,@W:_��`e��	�4a�Y>cM:)	 )^l|Fn�u<���^�ғN,A*$$@}�u*X0z��C%+%	!.K5Q�ه9/Y*�H�&9@6BhiS	D&&!4)
+>7>;#7+"'#32'###7��

6E<6	�	
�7<F7

��?E?�

n���'��|)�B?
:��:(;�:3@0 BSCS
D::***+!>54.#"!"504>7!7.54>32!�,d�yDCv�]p˛[0Y|L+�3�N�]4l��rÍPK��g�hY��yj�n7I�׎V�hF��
�Rw�\��YF��v}͛h�3W����/AC@@5"Bh[SCSD10;90A1A#)**$+>32#".54>32>54&#"#"'2>7.#"�%BBD&EjH&	k�ԂClM)&Eaw�K1WG4ol-G6%
NK�v_!7V?f�r=t=#5d�^AI����,SvKR��tT/7T:N�V���&F��x4dN0`��`y���i�@	BCR
D+)3!.'i�j�Y�j�������%&���w�$@!QCD+##!##7w	��_���_��	�P�i��i�P���*@'BQCQD+!!!767	&5467	�I��R�
�����R����R$2-
�{��@MQE+!!�<	���GES�"@Bj[
D+%!+!##"&5467!267>;RM��9�
�7�	��)#(�L��';OL@IK-B[
	O
	SG=<)(GE<O=O31(;);	''+".'#".54>32>32%2>7.#"!2>54.#"�3O?3"HPX30T>$3Un<3O?3"GPX31U?$2Up��(IDA -4@(-P=$-<m0Q;"-<$(ICA!,5?'BV..VB'$C`<N�_5'BV..VB'$C`<L�`7N&?T--T@&'Ge=.F0*Id:-F0&@S--T@&�e����'*@'BSCSD!%'U$+>32#"&#"#"&'7>3232>7�EZl;$4

	`�"�Kas@;
 6[J7>W�U+
,
����d�Z)	' GrQ����7d@a!0"/B[[[	O	SG42+)&$77

+2>7#".#"'>322>7#".#"'>3243-%#i83a]\.3,%#h<4a][2-&#h84a]\/3,$$h<5a]Z(8+.$,$6-/$,$��8*/$,$6-0%+%��	pkK�	PX@)^_	ZMQE@'jk	ZMQEY@

+!3!!!!#!7!7!��F��͇�	�F�E���Z��>c
��G�G��G�gP�O@@MQE+!!���&)$�@A�
��v>��	��
x��IuP�Q@@MQE+%!7!7>767.'&5<>7c�	�A��G&)$���PI��>	
����f�"@
BMQE+3	#	>7	.'��B��nB��L		M��		�@����@�S�����~�@ja+3v���0@�T�%k@BK�!PX@"kSCQC
D@ k[SC
DY@!&%$	+!#!+'&5737>32#"&#"8w^n�Fl*"�~�Dl�X%$ 	
,"���<}���v	*U\�e6.��@���$�@

BK�!PX@$kSC
	QC
DK�%PX@"k
	[SC
DK�)PX@&k
	[CSC
D@-hk
	[CSC
DYYY@$$!!%$++'&5737>32;#.#"!3l*"�~�Bj�YE�94�]�/h0EqU7	~���v	*BX�m>
�nL/X~NBFS�����-K�1PX@jD@
jaY@	+#�n;N[��{��	@ja		+2#"&/��I	��	
���6��@OSG$$$"+#"&54632#"&546324/../O.--.�,, -- ,, --�6�p@MQE+!!�	��p:,��	@ja	#++7>3���I����
	���@Bja+ +#"&/.'+73�G��G�W������@Bja+ +326?>;#�G��G�W��������(@%jOSG
+"&547332673�gc>DNXU?
{�XT9AQHcr@8��@OSG($+#".54>32�  ���1�!@[OSG$&($+4>32#".732654&#"�-<"">-->""<-5?32@@23?^";**;"#:**:#2@@22@@���1@.[OSG
+2673#".#"#>32&/4&4 3/-&/7'4 4.-O7+"<, & 9*"<, % ��	+@(OSG



	#++7>3!+7>3�-�Z�3���������@kD	+2+�	$U�
!;XB
-��M�_<�	�ʓ^p�ӡ���	��V �����/�T����P�r�}�M��(�(�����?dc�:����Z���F�q�>�g����f���:�<+���+���a�������v�?��`�p�&�B������n���F������'5�E���T��S��,(D�q(����<�f]H�@F8Bq��f�x��mxc�u^^�G�2�<�^!�l�r�SSVV���VF	(GX�(�P�T��������X��XvMkk�2���dcMqr���<������y�����2��������������������������������?�?�?�?�&�&�&�&��En��������������OE�E�E�E�S�F�;�<�<�<�<�<�<�2]HFFFF�a�x�B�I�I^�G�G�G�G�G��� �r�r�r�r�V�;�V����<�]H?�F�x�02Sn�^��6�'!�'!S��,F	�,F	�,F	�o�r�2�7|�<������n�n��
g�g�g��,�,f�9`: }E�E��)!�l(+W���T�����bE�L�e����+g+u�����@@S{��,���@���g�P`�	�[�j�y�j�[$�[9>:A</?>D��F��G��H��R��T��m�yo�yy�y}�y��[��[��[��[��[��[��[�/����������������������������������������������������������[���������/�y�y�j�j�y�j�y�y��[
	�[
�j
�y
�j
�[
$�[
9>
:A
</
?>
D��
F��
G��
H��
R��
T��
m�y
o�y
y�y
}�y
��[
��[
��[
��[
��[
��[
��[
�/
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�[
��
��
��
��
�/
�y
�y
�j
�j
�y
�j
�y
�y
��[#��&��*��2��4��D��F��G��H��R��T��k��p��������������������������������������������������������������������������������������������
	�[
�j
�y
�j
�[
$�[
9>
:A
</
?>
D��
F��
G��
H��
R��
T��
m�y
o�y
y�y
}�y
��[
��[
��[
��[
��[
��[
��[
�/
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
���
�[
��
��
��
��
�/
�y
�y
�j
�j
�y
�j
�y
�y
��[�=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I�y	��
�y
�y�j�j��$��7�G9��;��<�Q=��?��l�yr�y|�y�����������������������Q���Q�������y�y�j�y�y�j�j����=
�=
�=�I#��&��*��2��4��7�A9�=:�m<�d?�=Y�~Z��\��k��l�=m�Io�Ip��r�=y�I|�=}�I�����������������������d��~��~�����d�I�I�=�=�=�=�I�I�I>	��
>
>�G���G������"F#��$��&��*��-�o2��4��D��F��G��H��P��Q��R��S��T��U��V��X��Y��Z��\��]��k��l>m��o��p��r>tPuPw��y��{P|>}�������������������������������������������������������������������������������������������������������������������������������������������������������>�>�G�>�>�G��G�����#��#	��#
��#��#
��#��#$��#7��#9��#;��#<��#=��#?��#@��#`��#l��#r��#|��#���#���#���#���#���#���#���#���#��#��#��#��#��#��#��#��#��#���$�V$
�V$
�V$��$#��$&��$*��$-2$2��$4��$7��$8��$9��$:��$<�y$?��$W��$Y��$Z��$\��$k��$l�V$m��$o��$p��$r�V$t�`$u�`$y��${�`$|�V$}��$���$���$���$���$���$���$���$���$���$���$���$��y$���$���$��$��$�y$��$��$�V$�V$�V$�V$��$��$��&�o&m�o&o�o&y�o&}�o&�o&�o&�o&�o&�o'��'	��'
��'��'
��'��'$��'7��'9��';��'<��'=��'?��'@��'`��'l��'r��'|��'���'���'���'���'���'���'���'���'��'��'��'��'��'��'��'��'��'���)	��)�L)�L)��)��)��)")$��)-�.)D��)F��)G��)H��)P��)Q��)R��)S��)T��)U��)X��)w��)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)���)��)��)��)��)��)��)�L)�L)�L)���-	��-��-$��-���-���-���-���-���-���-���-��-���..
.
.��.#��.&��.*��.2��.4��.I��.W��.Y��.Z��.\��.k��.l.m��.o��.p��.r.y��.|.}��.���.���.���.���.���.���.���.���.���.��.��.�.�.�.�.�.�.�.�.�/��/
��/
��/�$/#��/&��/*��/2��/4��/7�8/9�V/:�y/<�=/?�V/Y�z/Z��/\�z/k��/l��/m�$/o�$/p��/r��/t�=/u�=/y�$/{�=/|��/}�$/���/���/���/���/���/���/���/��=/��z/��z/��/��/�=/�$/�$/��/��/��/��/�$/�$/�$2��2	��2
��2��2
��2��2$��27��29��2;��2<��2=��2?��2@��2`��2l��2r��2|��2���2���2���2���2���2���2���2���2��2��2��2��2��2��2��2��2��2���3	��3�=3�=3��3$��3-�V3D��3F��3G��3H��3R��3T��3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3���3��3��3��3��3��3�=3�=3�=3���4��4	��4
��4��4
��4��4$��47��49��4;��4<��4=��4?��4@��4`��4l��4r��4|��4���4���4���4���4���4���4���4���4��4��4��4��4��4��4��4��4��4���5#��5&��5*��52��54��57��58��5k��5p��5���5���5���5���5���5���5���5���5���5���5���5��5��7	��7�L7�L7�L7��7�]7�]7"-7#��7$��7&��7*��7-�872��74��7D�)7F�)7G�)7H�)7J�A7P�]7Q�]7R�)7S�]7T�)7U�]7V�F7X�]7Y�Q7Z�y7[�b7\�L7]�e7k��7m�L7o�L7p��7w�]7y�L7}�L7���7���7���7���7���7���7���7���7���7���7���7���7���7���7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��)7��]7��)7��)7��)7��)7��)7��)7��]7��]7��]7��]7��Q7��Q7��7�)7��7�)7�)7�]7��7�)7�F7�F7�e7�e7�e7�L7�L7�L7�L7�L7�L7�L7�L7���8	��8��8$��8���8���8���8���8���8���8���8��8���9>9	��9
>9
>9�G9��9�G9��9��9��9"F9#��9$��9&��9*��9-�o92��94��9D��9F��9G��9H��9P��9Q��9R��9S��9T��9U��9V��9X��9Y��9Z��9\��9]��9k��9l>9m��9o��9p��9r>9tP9uP9w��9y��9{P9|>9}��9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9���9��9��9��9��9��9��9��9��9��9��9��9��9��9�9�9�>9�>9�G9�>9�>9�G9�9�G9�9�9���:F:	��:
F:
F:��:��:��:��:��:$��:-��:D��:F��:G��:H��:J��:P��:Q��:R��:S��:T��:U��:V��:X��:lF:rF:t<:u<:w��:{<:|F:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:���:��:��:��:��:��:��:��:��:�F:�F:�:�F:�F:�:�:���;;
;
;��;#��;&��;*��;2��;4��;I��;W��;Y��;Z��;\��;k��;l;m��;o��;p��;r;y��;|;}��;���;���;���;���;���;���;���;���;���;��;��;�;�;�;�;�;�;�;�;�<4<	�~<
4<
4<�[<�V<�[<�~<��<��<"2<#��<$�~<&��<*��<-�8<2��<4��<D�G<F�G<G�G<H�G<J�_<P��<Q��<R�G<S��<T�G<U��<V�G<X��<]��<k��<l4<m�V<o�V<p��<r4<t2<u2<w��<y�V<{2<|4<}�V<��~<��~<��~<��~<��~<��~<��~<���<���<���<���<���<���<���<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<��G<���<��G<��G<��G<��G<��G<��G<���<���<���<���<�~<�G<��<�G<�G<��<��<�G<�G<�G<��<��<��<�V<�V<�4<�4<�[<�4<�4<�[<�V<�[<�V<�V<��~=��=" =#��=&��=*��=2��=4��=k��=m��=o��=p��=y��=}��=���=���=���=���=���=���=���=��=��=�=�=�=�=�>#��>&��>*��>2��>4��>D��>F��>G��>H��>R��>T��>k��>p��>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>���>��>��>��>��>��>��?�V?
�V?
�V?��?#��?&��?*��?-2?2��?4��?7��?8��?9��?:��?<�y??��?W��?Y��?Z��?\��?k��?l�V?m��?o��?p��?r�V?t�`?u�`?y��?{�`?|�V?}��?���?���?���?���?���?���?���?���?���?���?���?��y?���?���?��?��?�y?��?��?�V?�V?�V?�V?��?��?��E��E
��E��E
��E@��E[��E`��El��Er��E|��E�E�E�E�H��H
��H��H
��H@��H[��H`��Hl��Hr��H|��H�H�H�H�IKI
KI
KI�yI�yIlKIrKItdIudI{dI|KI�KI�KI�yI�KI�KI�yI�yK��K
��K
��KY��K\��Kl��Kr��Kt��Ku��K{��K|��K���K���K��K��K��K��ND��NF��NG��NH��NR��NT��N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N���N��N��N��N��P��P
��P
��PY��P\��Pl��Pr��Pt��Pu��P{��P|��P���P���P��P��P��P��Q��Q
��Q
��QY��Q\��Ql��Qr��Qt��Qu��Q{��Q|��Q���Q���Q��Q��Q��Q��R��R
��R��R
��R@��R[��R`��Rl��Rr��R|��R�R�R�R�S��S
��S��S
��S@��S[��S`��Sl��Sr��S|��S�S�S�S�U�yU�yUD��UF��UG��UH��UR��UT��U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U���U��U��U��U��U�yU�yU�yY	��Y�~Y�~Y��Y$��YD��YF��YG��YH��YR��YT��Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y���Y��Y��Y��Y��Y��Y�~Y�~Y�~Y���Z	��Z��Z��Z��Z$��Z���Z���Z���Z���Z���Z���Z���Z��Z��Z��Z��Z���[D��[F��[G��[H��[R��[T��[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[���[��[��[��[��\	��\�y\�y\��\$��\D��\F��\G��\H��\R��\T��\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\���\��\��\��\��\��\�y\�y\�y\���^#��^&��^*��^2��^4��^D��^F��^G��^H��^R��^T��^k��^p��^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^���^��^��^��^��^��^��k��k	��k
��k��k
��k��k$��k7��k9��k;��k<��k=��k?��k@��k`��kl��kr��k|��k���k���k���k���k���k���k���k���k��k��k��k��k��k��k��k��k��k���l	�[l�jl�yl�jl�[l$�[l9>l:Al</l?>lD��lF��lG��lH��lR��lT��lm�ylo�yly�yl}�yl��[l��[l��[l��[l��[l��[l��[l�/l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l���l�[l��l��l��l��l�/l�yl�yl�jl�jl�yl�jl�yl�yl��[m�ym	��m
�ym
�ym�jm�jm��m$��m7�Gm9��m;��m<�Qm=��m?��ml�ymr�ym|�ym���m���m���m���m���m���m���m��Qm��m�Qm��m��m��m�ym�ym�jm�ym�ym�jm�jm���o�yo	��o
�yo
�yo�jo�jo��o$��o7�Go9��o;��o<�Qo=��o?��ol�yor�yo|�yo���o���o���o���o���o���o���o��Qo��o�Qo��o��o��o�yo�yo�jo�yo�yo�jo�jo���p��p	��p
��p��p
��p��p$��p7��p9��p;��p<��p=��p?��p@��p`��pl��pr��p|��p���p���p���p���p���p���p���p���p��p��p��p��p��p��p��p��p��p���r	�[r�jr�yr�jr�[r$�[r9>r:Ar</r?>rD��rF��rG��rH��rR��rT��rm�yro�yry�yr}�yr��[r��[r��[r��[r��[r��[r��[r�/r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r���r�[r��r��r��r��r�/r�yr�yr�jr�jr�yr�jr�yr�yr��[t	�et�et$�et9Ft:Ft<(t?Ft��et��et��et��et��et��et��et�(t�et�(t��eu	�eu�eu$�eu9Fu:Fu<(u?Fu��eu��eu��eu��eu��eu��eu��eu�(u�eu�(u��ey�yy	��y
�yy
�yy�jy�jy��y$��y7�Gy9��y;��y<�Qy=��y?��yl�yyr�yy|�yy���y���y���y���y���y���y���y��Qy��y�Qy��y��y��y�yy�yy�jy�yy�yy�jy�jy���{	�e{�e{$�e{9F{:F{<({?F{��e{��e{��e{��e{��e{��e{��e{�({�e{�({��e|	�[|�j|�y|�j|�[|$�[|9>|:A|</|?>|D��|F��|G��|H��|R��|T��|m�y|o�y|y�y|}�y|��[|��[|��[|��[|��[|��[|��[|�/|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|���|�[|��|��|��|��|�/|�y|�y|�j|�j|�y|�j|�y|�y|��[}�y}	��}
�y}
�y}�j}�j}��}$��}7�G}9��};��}<�Q}=��}?��}l�y}r�y}|�y}���}���}���}���}���}���}���}��Q}��}�Q}��}��}��}�y}�y}�j}�y}�y}�j}�j}�����V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������o�m�o�o�o�y�o�}�o��o��o��o��o��o����	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������	���
������
������$���7���9���;���<���=���?���@���`���l���r���|������������������������������������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������	������$��������������������������������������4�	�~�
4�
4��[��V��[��~�������"2�#���$�~�&���*���-�8�2���4���D�G�F�G�G�G�H�G�J�_�P���Q���R�G�S���T�G�U���V�G�X���]���k���l4�m�V�o�V�p���r4�t2�u2�w���y�V�{2�|4�}�V���~���~���~���~���~���~���~�������������������������������G���G���G���G���G���G���G���G���G���G���G���G���G�������G���G���G���G���G���G������������������~��G�����G��G��������G��G��G�����������V��V��4��4��[��4��4��[��V��[��V��V���~����	���
������
������$���7���9���;���<���=���?���@���`���l���r���|���������������������������������������������������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|��������������
������
���@���[���`���l���r���|�����������	����~��~����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������~��~��~��������
������
���@���[���`���l���r���|�����������	����~��~����$���D���F���G���H���R���T���������������������������������������������������������������������������������������������������������������������������~��~��~������V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V�����������o�m�o�o�o�y�o�}�o��o��o��o��o��o����
������
���@���[���`���l���r���|������������o�
�o�
�o��t�9�j�:���<�y�?�j�Y���Z���\���l�o�m�t�o�t�r�o�t���u���y�t�{���|�o�}�t���y����������y��t��t��o��o��o��o��t��t��t����
���
���Y���\���l���r���t���u���{���|��������������������������
������
���@���[���`���l���r���|�����������4�	�~�
4�
4��[��V��[��~�������"2�#���$�~�&���*���-�8�2���4���D�G�F�G�G�G�H�G�J�_�P���Q���R�G�S���T�G�U���V�G�X���]���k���l4�m�V�o�V�p���r4�t2�u2�w���y�V�{2�|4�}�V���~���~���~���~���~���~���~�������������������������������G���G���G���G���G���G���G���G���G���G���G���G���G�������G���G���G���G���G���G������������������~��G�����G��G��������G��G��G�����������V��V��4��4��[��4��4��[��V��[��V��V���~����" �#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������" �#���&���*���2���4���k���m���o���p���y���}��������������������������������������������������" �#���&���*���2���4���k���m���o���p���y���}������������������������������������������������y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j������y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j�����	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[�	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[��=�
�=�
�=��I�#���&���*���2���4���7�A�9�=�:�m�<�d�?�=�Y�~�Z���\���k���l�=�m�I�o�I�p���r�=�y�I�|�=�}�I�������������������������������d���~���~��������d��I��I��=��=��=��=��I��I��I�	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[�	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[��=�
�=�
�=��I�#���&���*���2���4���7�A�9�=�:�m�<�d�?�=�Y�~�Z���\���k���l�=�m�I�o�I�p���r�=�y�I�|�=�}�I�������������������������������d���~���~��������d��I��I��=��=��=��=��I��I��I��y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j������=�
�=�
�=��I�#���&���*���2���4���7�A�9�=�:�m�<�d�?�=�Y�~�Z���\���k���l�=�m�I�o�I�p���r�=�y�I�|�=�}�I�������������������������������d���~���~��������d��I��I��=��=��=��=��I��I��I��y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j������y�	���
�y�
�y��j��j����$���7�G�9���;���<�Q�=���?���l�y�r�y�|�y�������������������������������Q�����Q�����������y��y��j��y��y��j��j�����	�[��j��y��j��[�$�[�9>�:A�</�?>�D���F���G���H���R���T���m�y�o�y�y�y�}�y���[���[���[���[���[���[���[��/������������������������������������������������������������������������������[��������������/��y��y��j��j��y��j��y��y���[��V�
�V�
�V����#���&���*���-2�2���4���7���8���9���:���<�y�?���W���Y���Z���\���k���l�V�m���o���p���r�V�t�`�u�`�y���{�`�|�V�}�������������������������������������������������y����������������y��������V��V��V��V��������������.��B�>t�Tn��<�4t�@x		n	�
 
L
r
��l�

B
l
�"^��N��R�@��P���:j����r�N"j�Pj�@�
j���j����dd�$�  n �!*!|"f"�#&#V#p$@$Z$�$�%`&& &v&�&�'6'|'�((�)$)�*X*d*p*|*�*�*�*�+�+�+�+�+�+�+�+�+�,>,J,V,b,n,z,�,�-<-H-T-`-l-x-�.j.v.�.�.�.�.�/�0<0H0T0`0l0x0�0�0�1 121D1V1h1z1�1�2j2|2�2�2�2�3,3>3�4r4~4�4�5�5�5�6.6:6L7:7�7�888 8,888J8V8h8t8�9l9�9�9�9�:&:t:�;
;>;�;�;�;�<"<J<�<�==�>(>T>�?�?�?�@@�@�AjA�BBBB�B�B�CjC�DBD�D�EE`EzE�F�F�F�GG(GJGxG�G�HHDH�H�H��d"/n�	� ��
��/��(�0B	B
�Q-2E
�w9	S	g	{	^�	 �	P	 �	`U	�		�	
��	0
�	d
�	
�	4�	�	�Copyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightItalictyPolandLukaszDziedzic: Lato Light Italic: 2013Lato Light ItalicVersion 1.105; Western+Polish opensourceLato-LightItalicLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLCopyright (c) 2010-2013 by tyPoland Lukasz Dziedzic with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1.Lato LightItalictyPolandLukaszDziedzic: Lato Light Italic: 2013Lato-LightItalicVersion 1.105; Western+Polish opensourceLato is a trademark of tyPoland Lukasz Dziedzic.Lukasz DziedzicLato is a sanserif typeface family designed in the Summer 2010 by Warsaw-based designer Lukasz Dziedzic ("Lato" means "Summer" in Polish). It tries to carefully balance some potentially conflicting priorities: it should seem quite "transparent" when used in body text but would display some original traits when used in larger sizes. The classical proportions, particularly visible in the uppercase, give the letterforms familiar harmony and elegance. At the same time, its sleek sanserif look makes evident the fact that Lato was designed in 2010, even though it does not follow any current trend. The semi-rounded details of the letters give Lato a feeling of warmth, while the strong structure provides stability and seriousness.http://www.typoland.com/http://www.typoland.com/designers/Lukasz_Dziedzic/Copyright (c) 2013-2013 by tyPoland Lukasz Dziedzic (http://www.typoland.com/) with Reserved Font Name "Lato". Licensed under the SIL Open Font License, Version 1.1 (http://scripts.sil.org/OFL).http://scripts.sil.org/OFLLatoLight Italic���XA	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a��������������������������������bc�d�e�������f����g�����h���jikmln�oqprsutvw�xzy{}|��~�������	
�����
����������������������������������������������� !"#NULLuni00A0uni00ADmacronperiodcenteredAogonekaogonekEogonekeogonekNacutenacuteSacutesacuteZacutezacute
Zdotaccent
zdotaccentuni02C9EuroDeltauni2669undercommaaccent
grave.case
dieresis.casemacron.case
acute.casecircumflex.case
caron.case
breve.casedotaccent.case	ring.case
tilde.casehungarumlaut.case
caron.salt��_K_K�������V��������V�,� `f-�, d ��P�&Z�E[X!#!�X �PPX!�@Y �8PX!�8YY �Ead�(PX!�E �0PX!�0Y ��PX f ��a �
PX` � PX!�
` �6PX!�6``YYY�+YY#�PXeYY-�, E �%ad �CPX�#B�#B!!Y�`-�,#!#! d�bB �#B�*! �C � ��+�0%�QX`PaRYX#Y! �@SX�+!�@Y#�PXeY-�,�C+�C`B-�,�#B# �#Ba��b�`�*-�,  E �Ec�Eb`D�`-�,  E �+#�%` E�#a d � PX!��0PX� �@YY#�PXeY�%#aDD�`-�,�E�aD-�	,�`  �	CJ�PX �	#BY�
CJ�RX �
#BY-�
, �b �c�#a�C` �` �#B#-�,KTX�DY$�
e#x-�,KQXKSX�DY!Y$�e#x-�
,�CUX�C�aB�
+Y�C�%B�	%B�
%B�# �%PX�C`�%B�� �#a�	*!#�a �#a�	*!�C`�%B�%a�	*!Y�	CG�
CG`��b �Ec�Eb`�#D�C�>�C`B-�,�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-�,�	+-�,�+�ETX�#B `�a�

BB�`�
+�m+"Y-�,�+-�,�+-�,�+-�,�+-�,�+-�,�+-� ,�+-�!,�+-�",�+-�#,�	+-�$, <�`-�%, `�
` C#�`C�%a�`�$*!-�&,�%+�%*-�',  G  �Ec�Eb`#a8# �UX G  �Ec�Eb`#a8!Y-�(,�ETX��'*�0"Y-�),�+�ETX��'*�0"Y-�*, 5�`-�+,�Ec�Eb�+�Ec�Eb�+��D>#8�**-�,, < G �Ec�Eb`�Ca8-�-,.<-�., < G �Ec�Eb`�Ca�Cc8-�/,�% . G�#B�%I��G#G#a Xb!Y�#B�.*-�0,��%�%G#G#a�E+e�.#  <�8-�1,��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# �C �#G#G#a#F`�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba#  �&#Fa8#�CF�%�CG#G#a` �C��b`# �+#�C`�+�%a�%��b�&a �%`d#�%`dPX!#!Y#  �&#Fa8Y-�2,�   �& .G#G#a#<8-�3,� �#B   F#G�+#a8-�4,��%�%G#G#a�TX. <#!�%�%G#G#a �%�%G#G#a�%�%I�%a�Ec# Xb!Yc�Eb`#.#  <�8#!Y-�5,� �C .G#G#a `� `f��b#  <�8-�6,# .F�%FRX <Y.�&+-�7,# .F�%FPX <Y.�&+-�8,# .F�%FRX <Y# .F�%FPX <Y.�&+-�9,�0+# .F�%FRX <Y.�&+-�:,�1+�  <�#B�8# .F�%FRX <Y.�&+�C.�&+-�;,��%�& .G#G#a�E+# < .#8�&+-�<,�%B��%�% .G#G#a �#B�E+ �`PX �@QX�  �&YBB# G�C��b` �+ ��a �C`d#�CadPX�Ca�C`Y�%��ba�%Fa8# <#8!  F#G�+#a8!Y�&+-�=,�0+.�&+-�>,�1+!#  <�#B#8�&+�C.�&+-�?,� G�#B�.�,*-�@,� G�#B�.�,*-�A,��-*-�B,�/*-�C,�E# . F�#a8�&+-�D,�#B�C+-�E,�<+-�F,�<+-�G,�<+-�H,�<+-�I,�=+-�J,�=+-�K,�=+-�L,�=+-�M,�9+-�N,�9+-�O,�9+-�P,�9+-�Q,�;+-�R,�;+-�S,�;+-�T,�;+-�U,�>+-�V,�>+-�W,�>+-�X,�>+-�Y,�:+-�Z,�:+-�[,�:+-�\,�:+-�],�2+.�&+-�^,�2+�6+-�_,�2+�7+-�`,��2+�8+-�a,�3+.�&+-�b,�3+�6+-�c,�3+�7+-�d,�3+�8+-�e,�4+.�&+-�f,�4+�6+-�g,�4+�7+-�h,�4+�8+-�i,�5+.�&+-�j,�5+�6+-�k,�5+�7+-�l,�5+�8+-�m,+�e�$Px�0-K�KRX��Y�c �#D�#p�E  �(`f �UX�%a�Ec#b�#D�*�*�*Y�(	ERD�*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK-"#[��I���Vgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfnu�[����pBASEe]���FDSIG�GDEF�����GPOS���\GSUB�]dJOS/2���x`cmapspB3fglyf��M�Q.head��:�6hhea3�4$hmtx���Bloca'`ӄA�BmaxpTaX nameܝ���post+����9	�K�4_<���
��sK�?�:$��X�?�? �*eX��XK�X^2#	 �8ADBO@ ����`��� X> cAWr�5O_Qb�HR0f0dC*O+
6&AQ]P<DgH]Z7jJ:]<]<�GEM3@1G                       ������cAAAAAWWWWrrrrrrrrsrrrrrrrrr555555555OOOO
____________Qbbb|���7�
�HHHRRRRRRRR000000000000000000000000$$!dddddddCCCCCCCCN******OOOOOOOOOOOOOOOOOOOOOOO+



&&&&&&&&AAAAAAe;UpDYQQQQQQQQQQQQQQIQQQQQQQQ]PPPPP6<<<<DDDDDDDDDDDDDDDDDDHHHHHHHH��]]']ZZZZZZZZZZZZ7jjjjJJJJJJJ#:::]]]]]]]]��<<<<<<<<<<<<5<<<<<<<<<<<<<�f����@GGGGGGGGXgEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM311111111GGGGGG<]]7]��P^]]=P<<?<sE[>=7<<N3<M]]]ZV8JJJO�**:��]`<!,???��ccG886E2M319GG;0GYGRT<R<<<<<<<<<<<<<<9<<<<<<<<<<<<<<<<<<ccccccccccccccZcZc8cccccccc-��cc c�+rAO0_b+HRF0OfK*&6,&$_(&9]0A[t]HQd8T/\@]<BO,85"Z]O,%9[]QQ@OO"QOd>[�D����	�������	������������������� cc�r>NNfHO0OfA*/6OA(&7b.,rr�BC__Q��'fN/K0&�<>fOA&&6A[_ ��r;N00//QKh�*D>ddn@]<]]PB1 @^X::#F}=,7DD�PGZZ7��:nd1g)<F�H>n!]P33@X]JQDEd<<11<<Uccc*GaE9'8MFDCGaGaE9'8NFDCGaGaE9'8MFDCGa���� ��my����^f�f���R`UUUPP������u���u�u�<<>�f�z�bxcccT[H�]W^t�b�b�b�b�bp��11Wh���U�����������������������������������������������������������������������F���������4����������������=:UM5:q1`N.*m*T=`l-77*E0SUUfU�UUxkUUUoULLUU`U�����TL�	�>+& FOF4t!!`QVg!!��U<J>WII!>>>>>>**��D3���M				������-<��`1�������������������������5�����	��{�����������������������kj���������#��������������	�����o�����{�?�f�������������5Y����������������������������!!������������������������������������������������������������KK�������������������������������������������,����
,,M49cS-����$�,$
��	����Rkl���������mnopqrstuv�������	

������ !"#$%&'()*+,-./012345����:=R^���
*)+-KJLNipoqsr������VS����������M�����T������&(u�����W�����o69�������������hU������l8_7a]��~������U�������������/9@Z`z~�������������7C\ghnv{~������������������ *,14=E_auz~���������������/_cu��������������CIMPRX[���!+;IScgo���������    " & 0 3 5 : ? D I q y  � � � � � � � � � � � � �!!!! !"!&!.!^!�!�!�!�""""""""")"+"7"H"a"e###!%�%�%�%�%�%�%�%�%�%�&&&<&@&B&`&c&f&k''R'd'�..%������ 0:A[a{�������������7CP^hjox}������������������#,.49@_atz~���������������0br��������������CGMORV[��� $2>RXfl~��������      & / 2 5 9 < D G p t } � � � � � � � � � � � � �!!!! !"!&!.!P!�!�!�!�""""""""")"+"7"H"`"d###%%�%�%�%�%�%�%�%�%�&&&:&@&B&`&c&e&j''R'd'�.."������=������oY���
�����������������x�p�o�%$#$	��;�:�.������������������������������-�i��o�d�c�j�$�~�|�y���������������z�z��������T�i�p�l�G�%����s������޺�ޚޙ�r�m�cݹ�j�q�վջ%y%l������������������������"",028>HNPZ\^bfprxzz||xz�����������������������������������������Rkl��������������������������o�VSQT����&���������������(�mno�6789:=MR]^_a~������������������
)*+-JKLN�iopqrs���������;<	@
S T!V#U"W$[(b.c/d1e0`,p<q=r>s?xC}I�M�O�T�Q�U��V�WZ�[�]�\�b�a�f�j�hn���t��u����������������������������������������������Ww����?�P�v����������Ot@�wo;�g>N�����������������������������2:?A��������H4;@I��	
 "-./02467�C#JE��v�wxy|~�z}�������������������JKLMNOPQRS	T
UVW
XYZ[\]^_`abcd*,-358<=QX%Y&Z'n:uAzEyD{G|H�X�Y�^�_�`�c�d�e�k�l�m������������������������������������F�ABCDEFGHIJKLf2g3h4i5j6k7l8m9�R�S�x�y�z�{�|�}�~����������������������������������������������������������������l��������1��6gY]Uebck�x}~pqrstuvwyz{|����������������������������������������������������������$�  !!�""�##�$$R%%k&&l''�()�**�++�,,�--�..�//�09m:;�<<�==�>>�??�@@�AZ[[�\\�]]�^^�__�``�az{{�||�}}�~~���o�����V��S��Q��T��������������&��������������������������������������������(�����m�����6��=��M��R��]��a��~�������������������������������������
������)��-��J��N�����i��o���������������������;<	@
S T		!

V#U

"W$[(b.c/d1e0`,p<q=  r!!>""s##?$$x%%C&&}''I((�))M**�++O,,�--T..�//Q00�11U2233�44�55V66�77W88Z99�::[;;�<<]==�>>\??�@@bAA�BBaCC�DDfEE�FFjGG�HHhIInJJ�KK�LL�MMtNN�OOPP�QQuRR�SS�TT�UU�VV�WW�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�dd�ee�ff�gg�hh�ii�jj�kk�ll�mm�nn�oo�pp�qq�rr�ss�tt�uu�vv�ww�xx�yy�zz�{{�||�}}�~~������\�����W��w����������������?�������P�����v��������������������������������O����t��@�����w��o��;�����g��>����N������������77�CCPPP�QQ�RX�Y\�^g�hh�jj�kn�ov�x{�}~����������������������������0��2��:��?��A�����������������������������������������H��4��;��@��I��	
		

 " $#&-''2((4)*6,,8.1944=9=>@@�AABBCCC#DDJEEE__FaaGtu�zz�~~���������v�����w��{��|��~�����^��o��z��}������������������������������������������������/�0_bb�ccJrrssKttuuL����M����N����O����P����Q����R����S��	��T��
��U����V����W��
��X����Y����Z��[����\����]����^����_����`����a����b����c����dCC)GG*HI,MM/OO3PP5RR7VV8WX<[[>��+��.��BQX

%Y&Z'n:  u!!A$$z%%E&&y''D(({))G**|++H22�33X44�55Y66�77^88�99_::�;;`>>�??c@@�AAdBB�CCeDD�EEkFF�GGlHH�IImRR�SS�XX�YY�ZZ�[[�\\�]]�^^�__�``�aa�bb�cc�ff�gg�ll�mm�nn�oo�~~����������������������������������������������F��������A����B����C����D����E����F����G����H����I����J����K����L����f��2��g��3��h��4��i��5��j��6��k��7��l��8��m��9�����R�����S�����x�����y�����z�����{�����|�����}�����~���������������������������������������������������������������������������������������������������������������������������������������������  p  �  �  �  �  �  �  �  �  �  �  �   !� " "� & &� / / 0 0l 2 3� 5 5� 9 :� < <� = =� > ?� D Dh G G� H H� I I� p p� q q1 t y� } ~�  6 � �� � � � �F � �X � �g � �Y � �Z � �\ � �] � �U � �d � �^ � �` � �e � �b � �f!!�!!�!!k!!�! ! �!"!"�!&!&�!.!.�!P!Px!Q!R}!S!Zp![!^y!�!�!�!��!�!��!�!��!�!��!�!��""�""�""�""�""�""�""�""i""�""�""�""�")")�"+"+�"7"7�"H"H�"`"`�"a"a�"d"e�##�##�##�# #!�%%�s%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��%�%��&&�&&�&:&;�&<&<�&@&@�&B&B�&`&`�&c&c�&e&e�&f&f�&j&k�''�'R'R�'d'd�'�'��..�.".%����������������������**M�����'>St����<x���4q���Bq���g�����*V���Ac���$/:EP[fq|��			!	,	7	B	M	[	f	q	|	�	�	�	�	�


"
-
8
C
N
Y
d
o
z
�
�
�
�
�
�
�
�
�:EP[fq|�����������?JU`lw���������
#
.
9
D
O
Z
e
p
{
�
�
�
�
�
�
�
�
�
�(3>IT_ju�������'2=K�������	;FQ\gr����������)4?JUp{���������"-8CNY�����������'2=HS^it����Hj����������Ze�������
 +6D����
#.9u��������	mx������������
 +6BNYdp{���������	.9DOZs~��������$/:EP[f���������>IT_ju�������[f�������
 +6ALWb������
<GR]hs~�������    & Z e p { � � � � � � � � � � � �!!!!!,!7!B!M!X!c!�!�""6"y"�"�#+#^#�#�$$]$�$�%	%%F%�%�%�&&?&�&�''E'�'�'�(!()(4(I(T(n(z(�(�)))N)�)�)�*)*P*�*�*�++7+g+�+�+�+�,N,z,�,�,�-(-a-�-�-�..2.[.�.�/+/o/�/�0	060c0�0�0�0�1111"1-181C1N1�1�1�1�1�1�1�1�2222!2,2:2�2�2�2�2�2�2�2�2�2�2�33
33#3.393D3O3Z3e3p3{3�3�3�3�44H4Z4e4q4|4�4�4�4�4�4�5585@5H5W5w55�5�5�5�5�5�5�5�66!636;6S6[6c6�6�6�6�7%7B7`7}7�7�7�7�88c8�8�9$9d9�9�9�::O:v:�:�;%;Q;�;�;�<<D<~<�<�==P=�=�=�>(>3>>>I>T>_>j>u>�>�>�>�>�??D?\?�?�?�?�?�?�?�?�?�?�@@@@#@+@3@;@C@K@S@[@c@k@s@{@�@�@�@�@�@�AA3ATA�A�A�A�A�BB6B>B�B�B�B�CCGCOCWC_CgCoCwCC�C�C�C�DD4DPDtD�D�D�EEDELETE�E�E�E�E�E�E�F$FNFqF|F�F�F�F�GG/GAGYG�G�HHDHaH�H�H�H�II<IDIOIZIbImIuI�I�I�I�I�I�I�J(J7J`JhJ�J�KKK8K_K�K�K�K�K�K�K�K�LBLJLaL�L�L�L�L�MMEMsM�M�M�M�M�N!N)N1N9NAN}N�N�N�N�N�N�O	OO<ONOeO�O�PP8PRP�P�P�P�Q Q(Q3Q;QFQNQYQaQlQwQQ�Q�Q�Q�Q�Q�RRRkR�SSSBS�S�S�TT3T�T�T�UUCUZU�U�U�VV!V<VDV�V�V�V�WW@W~W�W�XX1X�X�X�Y	YY?YKYWY�Y�Y�ZZ>ZOZZZzZ�Z�Z�Z�Z�Z�Z�[[[[%[-[5[A[M[Y[a[j[�[�[�[�[�[�\\\.\D\U\k\�\�\�\�\�\�\�]]!]2]s]�]�]�]�]�^^)^O^�^�^�^�_L_�_�`/`m`|`�`�`�`�`�`�`�aaama�bb2b�b�c#cScqc}c�c�c�c�c�dddd#d,d5d>dGdPdYdbdkd�d�d�ee!eMe�e�e�f#f?f\frf�f�f�f�g$g<gjg�g�g�h7hRhmh�h�h�h�h�h�h�h�h�h�h�h�iiii i(i0i8ipi�i�i�j0jSj�j�j�k#k<kZk�k�k�l	l;lZl�l�l�l�m mLmzm�m�nnLn~n�n�oo@o�o�o�o�o�o�ppVp�p�qq>qyq�rr\r�r�ssWs�s�ttDtzt�t�t�uuu!u)u9u�u�u�u�u�u�vvv&v6vFvVvfvvv�v�v�v�v�ww w-wFwsw|w�w�w�w�w�w�xx$xDxlxwx�x�x�x�yy<yLyWygyoy�y�zzz>zFzNzqz�z�z�z�{{Y{�{�{�{�{�||3|N|h|�|�|�|�}}$}H}d}�}�}�}�}�}�~~~-~>~U~f~}~�~�~�5m�����e�z���'�����@���(�h����;�\�y���������Ą���*�2�:�B�J�Y�a�i�q������������������dž����������Ɇ׆��%�K�X�e�m�u�����Ї���A�f�����ʈ���A�V�k��������̉��(�B�b�j�z�������͊݊��
���(�B�]�z�����݋���
���(�O�h�x�����Ќ،��	�$�P�|���Վ�.�r���Ɏ��-�G�a�{�������C�k�����ّ�>�{���ܒ��+�N�q�������0�j�j�j�j�j�w���������͓��!�>�]�{���������͔ݔ����.�=�M�]�m�|�������Ε����1�D�Y�n���������і���!�7�L�_�r�������×ח���0�H�`�y�����Řߘ���+�C�\�t�������řٙ���*�C�X�m�������Țݚ��#�<�[�s�����›ٛ���)�H�j�����Ҝ��"�2�C�g�t�����������ÝН����&�2�?�L�Y�f�s�������������Ξ۞����(���ͦۦ����'�8�I�W�m�~�~�~�����ŧ��)�L�T�a�t����>�	3!%!''#7'377#>��I46u���1B�Ba��l:�ggP��^ww��� 8�	3'&&'#3#'#��! ��^�X>�?odd7m99m�Z��p��c#�"332#32654&##32654&##c�Ce98;HP�nvYTIML]jT][Vj� F:1ONDa_|675,��;C=5A��*�"&&546632&&#"3267_Q�LL�U;\/B)?]44]?-H/'cQ�kj�R0 5!AvRRyB&#3-2W)�332#'32654&##W�����SIqooqI�����D�||�r�3!!!!!r�����L�F�G�G��	3!!!!�������F�F��5���"&&546632&&#"3275#53QR�IK�UAX/?/=\3iaI)��eQ�kj�R35"AvR|�'�E��-O	�33!3#!OTTT������p5��_��353#5!#3_�����GFF��GQ����"&'73265!5!7j"4K&GA��f)^583,+KQrF�A=e<bD�3333#bT_��^�q���I��iX����33!�RE���GH�33373#4667##'#Hf\ ]fP%^<\&���jj�pH WU����UW ��R�333&&53#'#R\�?	P\�?	��d�1k4T�p��2h3��0��(�"&&546632'2654&#",Jr@@rJJr@@rJK[[KK[[R�lj�PP�jl�RI�~|��|~�f�332##32654&##f�Im==nHsiVSTUi�$UHEZ,��HAFG70�]+�&%2654&#""&'&&5466323267,K[[KK[[Wn_u@rJJr@p\J3	%9��|��|���XB��j�PP�j��+*Cd)�332##32654&##d�Cg;PC�_�umMQQMm�#QDL]����Y?@A4C���-"&'732654&&''.546632&&#"1Hz,2%c8DK5"^!A,7a?>h$, N39F#6\)A'8h5,:%-:.#*)
*B02O--$6!4,((-A14U2*.�!#5!#��JFF��O��	�"&&53326653-@e9T$?'(>%Q9c4r^��fDQ$$QD��h^r4+-�
3336673��XjiU����:e::e:b�p
N�%333>7733>73#&&'#nd^0

@P>
	.Z`h@
@��d-/!!/,��,/!!/,��o::��6"�33366773#'&&'#6ķ\\
ZX��\c

bS=�,,������33�&2�!53366773�Xc$&_V����%L((L&�Z�A�	35!5!!An�����t2F2��GQ���'"&&54667.#"'6632#'#'2675�-K-G�}8//Y" %s@daC(d)S)hw1A!>+7I,
!7"%8.m[��B/B&"�!1 )%]���!"&'##336632'2654&#"@#Q#BR!W+bh>dG@T@I I&#G#6��^"(�qSv>EgZPc#&�P���"&&546632&&#"3267ZLxFJ|I;X)A&8U0/T8-K%(c<rPRr<*5/U87T/$5$(<����!"&5466323'53#'#'275&&#"_t?e9,FRDSHA!? *E)L�yOs>!Z��8@-EI�/S8WcD���"!&&"&&546632!3267><^6N2IwFFqAiu��iL,G!$]�MHKJ�C<sQOr=}g
RT6"gB�3#5754632&&#"3#�`dHD3 A:���>)Yl>	D;,C�]H� 6�0<L"&5475&&54675&&5466323##"&'3322654&#"2654&##"&'(jvP#5W3)�~2U5+50m^[ByX/AA/.BB9Ub78_%"Q�G@>.&1@+5N+C44K(		4>-N/�?43??34?��<%#)&-]�3336632#4&#"]R&W9VRR4<+D+��s)6d`��#EC,,����Z��&U
0��7�'��&�
0j>�3333#'jR^��\�s����q�J���"&5#53327�MS��5++0"8YV�C��50=:.�!33366326632#4#"#4&#":B2*G3*39R4!L%�@"*T'-MI��VU%&��V*+%&��]�3336632#4&#"]D&X9VRR4<+D+�S)6d`��#EC,,��<���"&&546632'2654&#",@mCCm@@mCCm@FUUFFUU<rPRr<<rRPr<DgSThhTSg]�3�!336632#"&'#2654&#"]D"Y-bg>d;"O �AU@I I&#F��> *�qRv>!\�gZPc#&�<�3��!57##"&546632373275&&#"�Q-^t?e9,H"B�HA!? *E)LͱZ+�yOs>" 6�MI�/S8Wc��3336632&&#"�D&pC/$7e,�s;D	G	?L��G���("&'732654&&'&&54632&&#"6G|,&*fC>=AB^`fd8h$("R/>2CJQW!2`-6$-
C7;O%5*"*6%'B(E��"�"&&55#57733#3267�GR#��D��5F#8!I3Z<�>��C�AD
<M����"&5332673#'#�WRS3=*E(RC%Xd`.��EC+/Q�U+63%�
!336673�Sp

pO���%G##G%�P�3336677336673#'&'#rjR:<R:	:Lhj86��"A##A"��"A##A"��3]]3�@�37'3366773#'&&'#@��[M

IW��ZU!P��k+,i�p.+p1�/'�"'732677336673�$
3@�Sw
jN�6O�
A;-$�� J##I!
��0L-G�	35!5!!GM�����W,wC,��C�� 8c&��� 8c&��� 8F&�� 8I&�� 80&�� 8&�� 8J&�� 8p& 8�
+"&54773'&&'#3#'#2654&#",*7%�%O%8m�! ��^�X>�?��2(0i2*.!(2��dd7m99m�Z��p����� 8M& �_�	%3'&&'#"&54667#'##33267��! 
+<(>�?U�^�&5 	.odd7m99m�y-.3'
����p>%
+�� �)8�&-�� 8h&�� 8x&T�� 8x&V�� 8�&X�� 8�&Z�� �)8F&&-�� 8�&\�� 8�&^�� 8�&`�� 8�&b�� �)8J&&-��O�3#!#3#3!5#�.�+�?�����IywL6j�R�F�G�G������Oc&M�x����O&Mx)�!*35#5732#'32654&##3#532654&##iOO�Ce98;HP�nvjT][Vj��YTIML]�8� F:1ONDa_F;C=5V>�675,��c�V#�&<��A�*�&32��A��*c&�.��A��*F&.��A��*M&.��A��*;&.��W)M&��W�))�&-���W�V)�&<���W�)�&3���)��7�3&&546632#'32654&'�9:'%(3;8oR���zRVZcSP70::XEAd:����D��z���rc&���rc&���rF&��rM&��r0&��r&��rJ&��r;&s�)� "&5467!!!!!!#3267�,;5!�������K0"
-�-.-F�F�G�G#2
+��r�)�&-!��rh&��rI&��r*x&T��rx&V��r�&X��r�&Z��r�)F&&-!��r�&f��5��c&���5��F&��5��J&��5��;&��5��&0��5��M&��5��&��5��I&5��M$1&&#"3275#53#"&&546632&54632&&#"
/?/=\3iaI)��e@R�IK�U'>1L5"AvR|�'�E��-Q�kj�R/:?'��O	F&	��O	0&	��O�)	�&	-���	�&	3�N��O�	�&	9
N�3#5753!533##!!5!OEETTEET�����8nnnn>�5��}g��_�c&
���_�c&
���_�F&
��_�I&
��_�0&
��_�&
��_�;&
��_�M&
_���"&5467#53#5!#3#32677+<.�������&$"	-�-.*DGFF��G<
+��_�h&
��_�)��&
-��_�J&
��Q���F&��b�D�&0&��b�)D�&-&��b�VD�&<&��|c&
�����&
|�����&
01����)�&
-1��7�)&
&�-1����V�&
<1
�
35'737!�_|R��E�45Bd��q5��G����&

����Hc&���H;&��H�)�&-��Rc&�
��Rc&�
��RM&
��RI&
��R��&0��R;&
��R�)�&-��R�V�&<��0��(c&���0��(c&���0��(F&��0��(I&��0��(0&��0��(&��0��(l&��0��(J&��0��(M&0�(�!-"&5467.54663232672654&#">,;+Mk6@rJJr@^W.."
-/K[[KK[[�-.(<\�^i�QQ�i��%@
+��|��|����0�)(�&-��0��(h&��0��(x&T��0��(x&V��0��(�&X��0��(�&Z��0�)(F&&-0��2-'"&&546632654'7'2654&#",Jr@@rJ>1NA80,2@rJK[[KK[[R�lj�PF*3?+�]l�RI�~|��|~���0��2c&����0��2c&����0��2h&���0��2I&����0�)2-&�-��0��(�&f$��0�'77&&5466327#"'&#"2654'$C@rJWA48@@rJYA6*�,>K[�K[�+b+tFj�P9M$^*rGl�R<PkW?l2��v�~Y<��6��$��0c&��!O�!"&5463!#3#3%3#"(|��|”���UUU����F�G�GD�}}���d)c&���d)M&��d);&��d�)�&0��d�))�&-��d�))&&-��d�V)�&<��C��c&���C��F&��C��M&��C���&h��C��&3��C��&0
��C��;&��C�)�&-
N��9�&"&'732654&&''7&&#"#4632�1T(6#.5JE|?+@OTziSgycL+P'"5>/ 7+
6�)([_�c�n�TF�bD3Q/��*.M&��*�.�&3��*�.�&0��*�).�&-��*�V.�&<*.�!#5735#5!#3#�Z4�؎�2:�FF�>����O��	c&���O��	c&���O��	F&��O��	I&��O��	0&��O��	&��O��	J&��O��	p&��O��	l&��O��	M&O�	�%"&5467&&533266533267>,;/]nTN;(?%QFD;-"
-�-.+>~���ffS$QD��hjs>
+��O��	�&P��O��	�&I��O��	�&R��O��	�&L��O�)	�&-��O��	h&O��v9!"&&533266536654'7-@e9T$?'(>%!)+A?.9c4r^��fDQ$$QD�$*):8��^r4��O��vc&����O��vc&����O��vh&���O��vI&���O�)v9&�-��+�)-�&-��
Nc&���
Nc&���
NF&��
N0&��&2c&���&2c&���&2F&��&20&��&2;&��&�)2�&-��&2h&��&2I&��Ac&���AM&��A;&��AF&��A�)�&-
��A�V�&<
)�3#5732#'32654&##3#WKK�����SIpoopI��:8����D�||��>e!�3332##532654&##eTvIl==mHvkVTUUk�n%THEZ,��AFG6;��&� "&&5447!&&#"'6632'267!,Im;�VP(C(W:No<?qJEY��ST�fv� 9 )R�ii�THsoqqU��%�!"&'7326654&&#"#36632z*	+%B-%RSQ W0>b8)LK/uhcq06(��M%4@�{~�Ep�[��33"&'732653pS�%
&S?��p�B4,��mJXD*�333"&5463233DL�!--!!//EL����G-''++''-�����G��Y�[9c&'��n����Q��	&���Q��	&���Q���&��Q���&��Q���&��Q���&��Q���&	��Q���&Q��K
*5A"&5477"&&54667.#"'6632#'#'26752654&#"@4:/�#I%):~-K-G�}8//Y" %s@daC(d)S)hw1A^!!!!98(6a2#3"(8��!>+7I,
!7"%8.m[��B/B&"�!1 )%("!!"��Q���&Q�%�.9"&5467'##"&&54667.#"'663232672675�+<8'(d4-K-G�}8//Y" %s@da6/%	/�)S)hw1A�./-D=/!>+7I,
!7"%8.m[��=	'&"�!1 )%��Q�)�&-��Q���&��Q��+&S��I��&U��Q��&W��Q��#&Y��Q�)�&&-��Q��@&[��Q��@&]��Q��P&_��Q��"&a��Q�)�&&	-��U�3@"3&"&'#"&5467&&#"'66326632!3267%3267&55�%A�H3K#P,7Iu�0&=O+,>K(3B ��@90A�q)!>CL�DQ��C.)).G=J\G98 /55/=e<
LY
8�#'#"6A
"/����U	&�����U�&���)"&'###57533#36632'2654&#"@#Q#BIIR��!W+bh>dG@T@I I&#G#62;VV@C["(�lPq<EbUL]#&���]�V�&<
��P��&2.��P��	&�.��P���&.��P���&.��P���&
.6��k0!&"&5466323'53#'#'275&&#"3�Zn;`7)BO@NA@ :(B'HUJ�yOs>"Z��8@.EI�/S8Wc�Q���<�)��&-��<�V��&<��<���&2�<��D�)"&5466323'5#53533#'#'275&&#"_t?e9,F��RIIDSHA!?*F)LuLn<"Z9@VV:��@-EI�-O4R^��D��	& ���D��	& ���D���& ��D���& ��D���& ��D���& ��D���& 	D��3"!&&"&5467#"&&546632!32673267><^6N*-:+! IwFFqAiu��iL,G!3=$
/�MHKJ�n./(?	<rPPs=}g
RT6$5/	'��D���& 
��D�)�& -��D���& ��D���& ��D��'& S��D��& U��D��& W��D��#& Y��D�)�& &-��D��K& e��H� 6	&"���H� 6�&"��H� 6�&"	��H� 6�&"
��H� 6�&"1��H� 6�&"��H� 6�&"��H� 6�&"�����&#�W<����l&#�W<��]�)�&#-��]�V�&#<��'��&#2�Z��]��&#9�3#57533#36632#4&#"]IIR��&W9VRR4<+D+2:VV@@s)6d`��EC,,����Z�	&U�0��Z�	&U�0��Z��&U0��Z	�&U0��Z��&U0��Z��&U0��Z��&U0��Z���&M
0��Z��&U0��Z�)��&$-0��Z��&U	0Z��!#5!<�4�C���7�'��&�0��j�>�&&0#��j�)>�&&-#��j�V>�&&<#j>�337%3#'jR^��\�s������n���J���&'��<��J��0&'���J��&'0U��J�)�&'-U��J�)T&'&�<-U��J�V�&'<UJ���"&55'75#537327�MSl�����5++0"8YV�@6P�C��T6d�50=��#��{�&'�

���:.	&(���:.�&(
��:�).�&(-��]	&)���]	&)���]�&)��]�&)��]��&)0
��]�&)
��]�)�&)-
��]�V�&)<
��V�&3336632#4&#"'667#"&54632�D#P5OLS.4'='��/6(* (2L�L%3a]��)B@)(��^0P4(#+@9Kv��<��	&*���<��	&*���<���&*��<���&*��<���&*��<���&*��<���&*��<���&*<��"."&5467.54663232672654&#"D+:*Bi<Cm@@mC+L4(-$	/7FUUFFUU�./'=?pKRr<<rRC]>@
'gTThhTTg��<�)�&*-��<���&*��<��&*S��5��&*U��<��&*W��<��#&*Y��<�)�&*&-��<���&*	��<��K&*e<��/�)"&&5466326654&'7'2654&#",@mCCm@7.)-@?,(0Cm@FUUFFUU<rPRr<	/+*:A gDPr<DgSThhTSg��<��/	&����<��/	&����<��/�&���<��/�&����<�)/�&�-<��(7&#"'7&&5466327#"'72654'��&6FU%.5Cm@O=4.5Cm@O=�FU�/�<.!j��*> T4Rr<+=*>V5Pr<+iS?,����<��	&����U�772654&#""3&"&&5466326632#3267#"&'�,44,1333'6���1N-.N1.BH.0@ �A1)=#1NB8hSShgUSgyKJ��C<rPRr<:>>:=e<
SR
88==8���	&-�.��f��&-0�����&-.����&-
.����)�&--�����)�&-&.-���@�V�&-<���G��	&.���G���&.��G���&.��G��-&.g��G��&.2��G��&.0	��G���&.
��G�)�&.-	X��4�3"&'732654.54>54&#"#4632�*F !4*-)<<)$-)7?Rk^5I&$)<;)(I:/#*"2*"2+0 %1LJ�\q)C(%6+*$%:/*C(gB�3#5754632&&#"�`dHD3 A:�>)Yl>	D;����E��"0&/���E�"�&/2Y��E�"�&/0O��E�)"�&/-O��E�V"�&/<O��E��"C&/���E��"� "&&55#575#57733#3#3267�GR#����D����5F#8!I3Z<:�>��C�@ AD
<��M���	&0����M���	&0����M����&0���M����&0���M����&0���M����&0���M����&0	���M����&0���M����&0���M����&0�M��&"&5467'##"&53326733267�+<8'%X8WRS3=*E(R6/%	/�./+AU+6d`.��EC+/Q�:	'��M���&0O���M���L&0H���M���H&0Q���M���L&0K���M�)��&0-��M����&0�M��V�!"&53326736654&'7#'#�WRS3=*E($2@:#C%Xd`.��EC+/Q*1+:;�7U+6��M��V	&�����M��V	&�����M��V�&����M��V�&����M�)V�&�-��3�)%�&1-��P	&2���P	&2���P�&2��P�&2��1�/'	&4���1�/'	&4���1�/'�&4��1�/'�&4��1�/'�&4
��1�-'�&4-���1�/'�&4��1�/'�&4��G	&5���G�&5��G�&5
��G�&5��G�)�&5-��G�V�&5<<���17326544'&&#""&&546632&&''7&&'77�,J-PM#R'PS�?mB;gB/T
:,��: &&I!�v?M:k�2K)oW
/&\��9iHDe8*&Bd'N4B 4)F2==�wPyD]�3�"336632#"&'#2654&#"]R"U+bi?d:$L �@VAI H&#F���W"(�qRv>#\�gZPc#&�]�I� "&'732654&#"#336632�(&4<+D+RD&X9VR?�	?7/1EC,,���S)6d`��N[7�'��"&'73265#5!�&H9I2�4%X�=
F>�C�<\5]�'�+33"&54632"&'732653"&54632pR(##""�$


%R<##""�J    ��>3,��JX#    ����l�/"&5#533267"&54632"&5#533267�@Ck�$#(!--!!//�?Cl�$#YV�C��50>-''++''-��YV�C��50>P�'N	33"&'732653'7'7pR�$


%R<��+�:�+�:��>3,��JX)�8�)�8^���%"&53366323267'>54&#"$dbD(d3.K-��8F0Y" %s�hw1A**R)m[*B . >,RU2I%8.�	 1 )%%#]��� "&'##336632'2654&#"@$P#BDZ1bg>dH@UAI$J #E#6�@-�qSv>EfXSc%$�]���+"&'##4632&#"36632'2654&#"A$Q#BY[0!!62!W+bh>dG?UAH J%#G#6Sh?>8z"(�oRt=EeXOa#&�=���"&'7326654&&#"'66328e'%M-8S/.O4+G*_BFtGFw($5$/T78U/5*<rRPr<P���
1%"32654&'667&&546632&&#"6632#"'�H"&.78��C,4JyF>Z(E*5U1/g/:>YYC:�,' � < eBRr<(30V9,G486-4H9<�P_� -"&57##"&5466323'533267%275&&#"">;R-^s?d9,ES

 ��F@!@)D(L�I@d+�yOs>"Z��#)/?�I�/S8Wc<��b� -"&5466323'54632&&#"#'#'275&&#"
^s>d9+F@B	!DSFA!@ (D(K�yOs>!Z8DM?2*��@-EI�/S8Wc?��� "!&&"&'73267!&&546632">U6
WP:]$"H+Kj��:iE@kAGv�JKHM�C"6TR	
Ef9>rPOr=<���� "&546632373#'#'275&&#"^t>f:+H"BDTHA!? *E)L�yOs>" 6�@-EI�/S8Wc��s&�E��� "&&5467!&&#"'6632'267!)If5}^J+I!%]:Jp?@mEAW��P<kE
	OP6"=qPQs<BOMMO��m�(2"&&'%&&#"'663273267#"&'74&'326�=T-1D+&8 K1DdI+
6
52[?�@,9D8_:�818GD 9"
+	(6!Gq@�h<5][���)"&54675&&546632&&#"33#"3267>e~B0)06_==a'!#K2@D�5CLRRL1S$$.iMF48
8$,:"6%&J@%)+- 6(��>���!=���+"&&546632'2654&##532654&#"GLxFIwD6W2+),Ar_=BG6#4:;13Q0c9qSUr::-$:
;4FLB-*('@("&%.U=\_7�'4�"&'732655#575#5!3#�&H9I2���4��%X�=
F>�<�C�B�<\5<�(cu*7"&'732677##"&5466323'4632&#"275&&#"/`)%O%FHQ-^s?e9+F@C
!xaEA!@)D(L�:F:a)�sLo="0AQ?2*�Zf!I� .P4R`<�'�� -"&'732677##"&&546632373275&&#"/b(&P%FLS->_5>e;+J BwdFC!@ )E*M�;G:a);nLLo=#6�[k"I�.P4R`N���!"&&546632&&#"32675#53SHwFIzGAU)?/2U3/R4!9��a;rRPr=*4"-T=;U-p;�(3� %�%"&5467336673'2654&'#.7=#�TqpP�#<8�B4#G4���"7""7"
�N4G#4B9";""="<���#/"&5467&&#"'66326632&#"'2654&',UeH92-)K('M(-28IdV29</.=:ZO8f0"!<-**-<!"0f8OZD:-,Q((Q,-:M�3��57#"&5332673�'X9VRR4<,C+Rͮr(7d`.��EC-+S�M]�34632&#"36632#4&#"]Y[0!!62&W9VRR4<+D+Sh?>8�(7da��EB+,��]�I�+"&'732654&#"#4632&#"36632�((4<+D+RY[0" 62&W9VR?�	?7/*EB+,��Sh?>8�(7da��N[��]��'��Z4�&O
0V�353#5!#3V�����C`CC��C��8���&Q
0�3��##73753���c�U�rR����i��M��J���&'=���J���	)354&#""&55#"&546325#533#327�!#&
	MSTH3'(
����5++0"8n)&��YV�<.&0�C��@�50=J�I�"&5#533267�MR��4+,!:�YV�C�*5/
>O�';�#33!6#"&'7326654&#"'!OR��E_1=a7K` )J7&=%F>"����,�2Y7Fb304%%C->F,�]��33!�R.�]C*���!#'##"'#"&53326733267B2*G3*39R4!L$�@"*T'-MI\��U&%`��*+&%`*�3�"57##"'#"&533267332673�1*G3*39R4!L$Rͬd%*T'-MI\��U&%`��*+&%`�M:�I.�-"&'732654#"#4&#"#3366326632�# 4!L%RB2*G3*39:�?0(rU%&��V*+%&���@"*T'-MI��FQ���I� "&'73265336632#4&#"8
D&W7VQR49+C*8�?/)S)6d`��#GA,,��HS]�Im� "&54&#"#33663232670C84:+B+RD&V7VR

 �SH?GA,,���S)6d`��)/?`��333&&553#&&'#`O�$NO�%��;/['�:/['�<���"&&546632"!&&267!,@nBBn@AmBBmA?U>
V?DW��X9rSUq::qUSr9�OGGO��XOOX!��K�%"&&5466323#3#3#'267&&#"�8]88]8-񾙙�.##5JJ:rSTq:D�@�DC_\_a[,�3,�#5.54667534&'66:b<<b:P:b<<b:�K99KXK99K��<oNNn<��<nNNo<��UataTTa��a?����#'##"&'73267�D&oD.$7f+�s:E	G	?L?����"&'732673#'#�.$7f+RD&o	G	?L��8s:E?�I�"&55##"&'7326733267�I=K1+%IR&.�SKu08	G	5B1�50	>��I�"&&5336632&&#"3267MFR#D&pC/$7e,5F#8!H�3Z<�s;D	G	?L��AD
<��354632&&#"��uQ700S3�y�G(UD�c!�332#'#532654&##c�5S0H3�]���7==7��?6?Gľ��++,$c!�732654&#73##33��7==7]�3H0S5�S��%+++��G?5@�G�I�7"&'3267#"&55732654&&'&&54632&&#"6-T$$
	$C;&*fC>=AB^`fd8h$("R/>2CJQW!2`5'0=SOU6$-
C7;O%5*"*6%'B(8�'�"&'732654632&&#"�(>/3 LZ$4&7&F�=
B77Xd=B7��Xc8�'�#"&'732655#5754632&&#"3#�(>/3 ��LZ$4&7&��F�=
B7�:�Xd=B7�@�Xc6�d�23#5#5354&#"'66�GR#��D��4G"9!I�2[<�>��C�AD
<E�I"�"&&5#57733#3267�FR#��D��5F#9!P�3Z<�>��C�nAD
<��J� "&55#57533533##'#'32675#�LH``R�RffD"Nt,0&:"�a]L:����@�L(0�C='+p2��&�'"&&546675#53326654&'53#,Kk8+j�+8#D33E"8+�j+8j?f82N;C5$bI-N//N-Ib$5C;N28f?M���"&&53326654&#"'6632)?c:SR:2E$+-


GU7l/dM��XK;f@JM@diX�O3%�
#&&'##X�Sp

pO��%H""H%���P�#&&'##'&&'##33677�jR:
<R:	:Lhj86�#A""B"��#A""A#����3]]3�1'�3>32&&#"#&&'#1�4L4"
	0=�Sw
j*0M-A<.?�
 J#"J!��9!�!53366773�YU#!TXˤB�:!!9 ����G�Il�"&55!5!5!!3267/D8��F�����I

 �QB$,wC,��_)/?G��F�&%"2232654&'667#5!5!3632##�+%&�>�D�����,N%9`'3NN-�*2$��
5,wC,���1)6H9;�'�!"&&'7326654&#"'!5!632 8U?(!U@-J,WP $!�����esDm�,50&E.AI
.C,�kWGd4�'j�6C"&5466323'53!6232#"&'732654&#"'7##'#'2675&&#"�CX.K+-L
�0C#-L/1C'- )3-,!��;5'"+5.�xNs?]��,�5Y6Ea3"4JK?E4��]:+E*!�gSVd��:� 0"&&55#57733632&&#"'2654.547#HVe+IL
E�&%A *#'99'l�\G':;'}C,S=�>��0#(?2CN@-%%/"$4)�A:0�'[�3"&'73265#3267#"&5#5773354632&&#"a#
	
"�'
-L=HKE�AL
(<�>3,��-1>ZH
>��PIW?4,��JXG��3>54&#"'6632�BR'NG9O,!gL?g=1U77%@D+=H1 5%;-YB:UF$��Y�!.546632&&#"7V0=f?Mg +O9FO'TA$FU:BY-;%5 1H=+D@%��G�35#5736654&#"'66323#�LfS[KF:P,!iN>e<(B&��:/f<=H25$<-YB/L=?�R�!5#573.546632&&#"3#�LL&B(;e?Nh",P:FL\R���:=L/BY-<$52H=<f/?�T�3�#575#5733#3#����P�����g:l:F��>l>��<���%"&54632'26654&#"7"&54632,m��mn��n.I+]EE]+I.%%%%��������D;�o����o�;�$##$R�[� "&'73265#'##33&&53�#	 �?	P\�?	P9�B5+��2h3����d�1k4T�mKW��<�������<���	&���<���	&���<����&��<����&��<����&��<����&��<����&	��<����&<���K
!.:"&5477"&546632373#'#'275&&#"2654&#"04:(�$J&):V^t>f:+H"BDTHA!? *E)LS!!!!98(3e2#3"(8���yOs>" 6�@-EI�/S8Wc%"!!"��<����&��<�)��&-��<����&��<��&S��9���&U��<��&W��<���#&Y��<�)��&&-��<���@&[��<���@&]��<���P&_��<���"&a��<�)��&&	-<��%2"&5467'##"&5466323733267275&&#"�*94$T.^t>f:+H"B4*!	-�HA!? *E)L�./+B@-�yOs>" 6�;
'I�/S8Wc��<�'�����<�'�	&6�
��<�'��&6
��<�'��&6	
��<�'��&6
��<�'��&61
��<�'��&6
��<�'��&6
��<�'��&6
��c4�&@
c4�	353#533cŭ��C`C�]C��c4	&@���c4	&@���c4�&@��c4�&@��c4�&@��c4�&@��c4�&@��c�4�&N
��c4�&@��c�)4�&?-��c4�&@	��c4�&P
Z���"&5467##5!3267a,<3#�4,,$
/�./*B�C�;	'c�4�"&5467#53#533#3267Y+</�ŭ���)'$
/�./)BC`C�]C<	'Z4�
!5#575#5!3#<���4���8�C�>�c4�3535#575#533#3cŴ������C�:�C�@�C8���&3267&&#"&&'#"&546325#5!z)%(0: (M5FKB? B!�4
/i�/!B-,8�C�)?)c4�	353#533cŭ��CBC�{C��c4�&R�"<��c40&R���c�4�&R0��c�)4�&R-��c�)4T&R&"<-��c�V4�&R<c4�353'75#5373c�l������C@6P�C��T6d��C��-{�&R�

����\�	#53#533353#533"&54632qk�fil�m��####CBC�{CCBC�{C$"!!"��c4�&R=%�c4�
#354&#"535#"&546325#533#3!"#!x�JA1'$�����f
*��C�4%!-
�C��/�C�� 8���c#���3!!�����F��+-�353%!&&'#+�`�YKa!!2^��2G%5o99o5��r���A���O	�	0��(�!"&&546632'26654&#"'53,Jr@@rJJr@@rJ2K)[KK[)K1�T�ii�QQ�ii�TICyRz��zRyC�HH��_��
��bD�+-�
33#&&'#+�a�Xji��pc:e::e:����H���R�F�35!5!5!F�6���GG5GGFF��0��(�O	�3!#!O�T����pJ����f�K�355!!!K�������_21F���G��*.���&2���>�5&&5467534&'66k��kLk��k�SIIS�THHTX�wu�WW�uw�XbVm�hTTh�um��6"�,,�!5&&55336553drP�T�Prd�us���
Z��
���su�&2�'3535.5466323#56654&&#"&y3!=rMNq=!2y�1A&J66J&A1DPjB\�RR�\BjPD=/�gGqAAqGg�/=$8�	3'&&'#3#'#'����^�X;�;.9$Oodd7c;;c�Z��p���
#
�3!#3#3'�@����?9$O�F�G�G�
#
�3333##'�L�LL��9$O����p5���
#
��353#5!#3'�vv@ww�X9$OGFF��G�
#
��_�0���(�"&&54632'2654&#"'\;\4rYZrrZ8CC87CC�9$OQ�l������I��������H
#
(Z�!53366773'e�MI

KJ���9$O���)J&&L'�Z��
#
��&20�0�#'3535&&5466323#56654&#"'�c)/2[=>[1/)c�')?::?)'�9$OD<�^X�OO�X^�<D=;�_n��n_�;=�
#
9��?� 0"&5466323733267#"&5#'26677.#"�Wm=d92[R

 +4@O">*
,3%C*DwTv>8Gs@��-?	03cE)E)[68,V@U]]�M �346632#"&'72654&#"'>54&#"],ZD1W664J[8Z3.]&�8OFG
5@@,8B#S��Bg<&L;6RdMA\0!)=v>�JC:N?1> 88XYX�W.0�M�6654.'736673�#<K)R#D96N
R 0E0�!0(:���2+��M_�e>no{K+c*A���$1"&&54667.54632&&#"'32654&',<lC5Y6(A'QU5vFIl),()J11N.8i�,H)KML5U_5cE;[?4<%,AA./CU;Eh:�/F&YI>U"a[���,"&54675&&546632&#"3267&"#"3267@j{A.+,6_=6b)!IU=EDI%�MO-R+#5cND57
:"-: 74&&!(DP(/"7(t�H�('6654&&'.54>7""5!#�B945]86Yo9HPKy;q[6(K3PM� $
/]O<yqa%CC#brv69C"
+2G]�M�>54&#"#4&'336632�,2-G-RK)Y;NE�P��FD>*=��aB&_83a]�H���"&54632"!&&2667!,jzzjjzzj=Q&R=)@(��'A���������|��|��4yffy4Q��
�"&5#533267�QH��0.,<YVCR�H41

=d��A� 34&'33>7.'nR(o}>	/c1MV(]FC#!%aH > �FrNN
8*3nh,"V_0&-6]8��)�''&&#"'6632##�Y�9-
+ 3G5�Y��G?
D
,ZG���T�E'�&33266733267#"&'##"&'TR1611S&'P,!7����CE.,Bb�W>.:42 2JB(/�!&&'73>73tCR&H9
"=,S
7Q5��]4��H?��AT��W\�H�:'6654&&'.546675&&5467"5!#"3267&&#"�B858`9,I*0?)%+-��7Q)@!!%-R4.P2SG� $
)L@0O7H4)?CC>:#6H"B/05	*2F@���"&&546632'2654&#",@kAAk@@kAAk@FQQFFQQ<rPRr<<rRPr<DgSThhTSg��=�""&54>5#'665#57!#327�:0�ReE�\-?;FX[(f�kk�b?D)_ZF0?]�M�!46632#"&'726654&#"]=g>kr=a6*Q#�'@&AJ&B(#I��Un7�tRv>(AjA�.W<Pc(Q=|+<��<�!"&&54663!&&''2654&&#"">i?Bk=+I*/5<e??P!>.?TS:pPUn5FcDKk9D`R1S4Y[TbB���"&5#57!#3267xA4�F��0GD$>CN�E"@	O���!"&54654&'332654&'7&bqP&=$@TP;ihi'N'B&8 &e*1<bg3l?;w=Wy?,�M,n#5.54667534&'66:b<<b:P:b<<b:�K99KXK99K��<oNNn<<nNNo<��UataTTa��a8�A0�
'7373#�S��R��W��P��V:�������5�M)n$5&&554&'3336654&'7hbP=@P?ELod��}d�B&8 ?6GU7��ba8eB>qA|��"��6�."&546732654&'332654&&'7#"&'#�BZ5&H)*.#(U($,"I&1UE#;8xyM�9!=qMLR7C=''=F4TW2MH):{Uzz'**'Z�L�%'6654&&'.546632&&#"�B./9hAHvC=U*<)2P./Q2:?�!,	4aONm9'5,O59D%+"M]�� �)5".546632'2654&#"6654&#"I(TE+-[E/V6<5P\:a?;MEHH? 15��g@*;@7ZBBh;%M;6TiO>Z1HL:;Q#6E'�!6W@88YO���
+7&&""&54&'332667.546632�@pVZH5E�\hMH3)@'k�S#6Z6|:g >.�x>��c_'/3"J>0|qBR&7R-����H��,�M,n�%�M3�)6654&#"5.546754632S>N'&#O:f?=.@+/P>S@JR>e;+=y>fWS`;�۪9nQK�604dDQ\�k_�qPs?+V*��9��?&��[��&�$��]�M&���Q��
&����Q��
�&����@��&���O��&����O���&����"��6&���Q��
&�J���O��&�J�d�EA�&34&'33>7'667.'nR(o}>	/c1MV(!I_'FFB#!%aH > �FrNN
8*3nh,4d#)X+"U_0&-6]>�M� %2654&#"5.546632,HQQHHQQ#8\5AlAAlA4Y86gUUggUUg�?kIRr<<rRHj@	.G5[�L�"'6654&&'.546633&"#"�A.1:g@FyK�N*Ue-P4:?�!,

4\JSj4FVW3A%+"M��M�!!!!�y��
����C�;Q�XD�M
�'6654&''%&''%&&'7�P
?zD"E�K"*uJ3t�T�
0\. ?:#Ez?8>&E}Gx+=F��2`���+�����T}��`���}���h�73Q#��\��W�3773�#6\����	/���c�')9$O�
#
���4�J���7���E�����"&53327Z3,S

;61P�H>���<|�#���<|�#���>p�!���.M���	/����/�m���/�j���/�l���/�i���2�'n���2�'k��A�����3�M���4�J���L�&N��x�'6654&'7	
!*)BI3�&	/.,#-��w�.5467S3IA	)*!�-#,./	��_�'7(2L������c������'6654'7'7�B6@9�2K�&5/0.,5������&&5467'7"9A5	Cl2K�5,.0/5&������'6654'7'7�B6@9�7L�&5/0.,5�����&&54677"9A5	C9L2�5,.0/5������#"&&#"'66323267'6654&'7]* !* m %;?:P####�!
'!����
#&&54677"&&#"'66323267G$:@:% * !* �!'
x####�� 8�c#�
3!!32#'32654&##c���~Fk>l�tTSUTr�F�$OBg`F9C?5��c#�����`�DB�	!#'53>7>7!3#5!�"�	�	

9I	I�x%Tk8ZZ���2-cWAimF��2Ѽ���r�W�/3'&&#"'66323337>32&&#"####�+
	,%/5L5/#*	
+�Zn<L<n_�5P34���43P5���5��5��>���+"&'7326654&##532654&#"'6632-Hu2/,Y:,G+^VJ6XNK8.P-$k=^u3/9K@l.39+&:)?<@:745"8#-YO4OSD?X/N
�33373#467#NP	?�\P	?����4k1���pW3h2��d��N
E&�fD�3337>32&&#"##fSkX-/Q�\�k���25N$$���5����	�"&'732667667!##:
":T�+6MKNj�n�pJZ�Zdk(��H���O	�	��0��(���O	�m��f���A��*���*.�/��,�"&'7326773373� '
�Yz2/pU�LK#��܁�$��=F��>�5&&5467534&'66p||pLq{{q�MOOM�MOOM_�qo}]]}oq�_XR`l]PP]��`��6"�O�DM�33!33#5OSSG	D���I��2ѼA�!#"&&55332673�<(Km:RWP':T&)_P��S@%�p(0�333333(L�L�L���I��I�p&�DP�3333333#5&J�J�J@	B���I��I��2Ѽ=�
3#5!32#'32654&##ɶ
7Ci=zh>3MPTP,JF��'QAiaD>F<<7!�
3332#'32654&##37L$byvd%KMMMRL���WbiaD>F>:����pb!�3332#'32654&##bTyHm=�nzoSWVVm���&QBiaD>F>:.���"&'73267!5!&&#"'6632Ch)."O3Vh��	dV+K.h=S|EG}2-4"(||Gho!6 1N�oo�M,��4�%2654&#""&'##336632|/33/-55-O_JTTK^LTdd=~��ww��~I������핊������!##&&54663335#"�y�`�AT;hC��nnLRR��[ODQ#�pY�4A@?��rc]��r0a��@�#"&'7326654&#"##5!#6632�$
,ND2*T���7>a80KC;4JC
��JFF�+\JNY%���c&��B��*�"&&546632&&#"!!3267`S�IK�T<^.D)Xl��l]/J.'cM�oo�N1 6"ohG||("4-2��C�����_��
��_�0���Q��������>� )"&'732667667332###%32654&###
		�Wml[_\
!0A?@C
MFIl�j��WbiaJY�h\b%P>F>:'=�333332###732654&##'L�L#WliYp��?@AA�����Wbia5��D=G@87�5!#6632#54&#"#��7bmRED2*SJFF�Zf��C8
��J��fDc&����N
c&����/��,E&�K�D
�33!3##5KTT�E���I�p��'�3#53533#32#'32654&##���S��BHm=~nH>SQSX7�D}}D�"L?i]B;E>50��(�"&&546632"!&&267!,Jr@@rJKq@@qKFYNYFJ[��[P�mm�NN�mm�Pbqjjq��zz�&W�33366776632&&#"��Yj@:4
����:e::e:�IB	M%%���<3!73!�9F	�����<�
3#57!!3#�PP��Ҩ�,:&F�>���Dg�43'&&#"'66323337>32&&#"3#5####�+
	,%/5L5/#*	
+o-	;'n<L<n_�5P34���43P5���2Ѽ5��5��>�D�-5&'7326654&##532654&#"'6632uU/,Y:,G+^VJ6XNK8.P-$k=^u3/9K3X8��	V9+&:)?<@:745"8#-YO4OSD8R2�f�DL�3337>32&&#"3#5##fSkX-/Q�5	B�k���25N$$���2Ѽ5��X�3#5!37>32&#"##ͺBK'*
	
I�Q�@JF��44M#%���5��O�DM�33!33#5#!OTSG	@Q�������2Ѽ5��A�D*� 5.546632&&#"32679Hp@L�U;\/B)?]44]?-H/ N2��
U�cj�R0 5!AvRRyB&#3%/���&2�&2�!5#57333667733#�Y&�Xc$&_V���:v�%L((L&��>�6�D4�333667733#5#'&&'#6ķ\\
ZX��<A%c

bS=�,,�����2Ѽ�33�A�DF�!#"&&553326733#5�;(Jl9RVO&8TG	F&)_P��S@%��2Ѽ[�336632#54&#"[S9&Kk9RTP%7���)^O��S>����_��
��WE&��� 8E&�����O�M��rE&���;��&����N
&���0��(0&���0��(���/��,&���/��,l&���Q���K���.32654&#""&54>7>76632�NMAGGB%P%�p|,RrG#6!;W;!!Z/<[39dd{gRKY&2	�ӥ�y�T)	K

	.WI()6fGMr>h� 332#32654&##32654##h�Ti.'+?qY��B97>��B?���9B(4
65HC%""��&(L��3!!�y���C�]*�T-�73#'53>77!3#5!����		FG	G���HZ`���4#SN�]4�����D��� R�,3'&&#""'6632353376632&"#"#'##5#�"	'<*7P7*;' "�Vi?P?i])M*<p��p<*M)]������>���&"&'732654&##53254#"'6632;k4$*X-LRMITH��4L&"*c@\vW2=�*6"-*)&@KJ7"@CK!
75FLd��3336673#5467#dP%
�LP
%���']/;��'^/<��d��&"
n0�3337>32&#"#'#nR�;&*

5�[����l*-M)a�������"&'73267667!##J

 
	GS�L16O�O��C�C�@�#33366773#54667##'&&'#@d\

ZdN
X>\��::��;>=��=>;�]��33353#5#]R�RR�������<���*]��3!##]�R����]��]�3�+��P���B�!#5!#���CC�]��1�/'�4 �38�#.:57#"&546632'536632#"&'27&#"32654&#"'CS*E''P.DJ*E()� #%.+�),#/!!!͛J
�yOs>J��L�qRv>J�#0!gTVcgZPc"����@�3^�T8�33333#5^R�RGG�]��]4��X��!5#"&553326753�*&dmREK+R�Sazz=4�:�333333:RzLzR�]��]��:�TR�3333333#5:RvLvR<A�]��]��]4��#'�3#5332#'3254&##ɦ�JWkkWJBy;>B�C�HPQJBY.*F�
3332#'3254&##3FKDQbbQD<r8:<6K�HPQJBY.*��}�
3332#'3254&##}SqYllYqh}=@h�HPQJBY.*=���"&'73267#53&&#"'66329d&#N.Sg��cH0F' \BGuGEw&"3SS@KJ2(7rWUq8,��4�%2654&#""&'##336632~,66,.880HcQRRR	aFOee8\^_]]_^\Dqp���ki~��~7��!5##7&&546633'35#"���]�3H0T4�⏏7==���G?6?���$,++��D��	)��D���-�'�*"&'7326654&#"##57533#36632N#8!CD%@*RIIR��$S4^d5L�>5�|�q,,��49VV>Br(6��q�X%���	&�1P���"&&546632&&#"!!3267ZLyEJ|I<W'E*Jg��gT.M"Q8qUVr8&4KJ@RT!4H��G���.��Z��$��Z��N��7�'��%����,�'"&'73267667332###%32654&##%
	 �QddQ_`

B=77=L07M�R�HPQJ�C�GLJN+..*:(�3335332##5#732654&##:P�PS``Sk��;77;��ųHPQJ��B+./)���I��n0	&$���d�	&"���1�/'�&-
g�T��3333##'gR�R�	F�]����)!n3#53533#32#'3254&##™�R��LVkkVLCz<>C�CttC�HPQJBY.*��<����F0�33366776632&#"��Ta	
051	p��#I##H$�HDJ$%�����3!73#�B���]H�
35#575!!3#�JJy�٬��8�C�>��T_�13'&&#""'6632353376632&"#"3#5#'##5#�"	'<*7P7*;' "b/:!i?P?i])M*<p��p<*M)]�4������>�T�)'&&'732654&##53254#"'6632�1[,$*X-LRMITH��4L&"*c@\vW2=eT	�� $6"-*)&@KJ7"@CK!
75=K�n�T=�3337>32&#"3#5#'#nR�;&*

5�<?!����l*-M)a�4����!F�3#53376632&#"#'#ʩ�_*:%

'�O�_�C�lA'M+e���]�T8�333533#5#5#]R�RGGJ����]4����P�T�'.546632&&#"3267/@c9J|I;X)A&8U0/T8-K%FX	��	@jHRr<*5/U87T/$5>�3�3%�5336673�Tn

nP�����%J""J%
��3�3%�5#5733366733#�N9�Tn

nP�����8���%J""J%
�X>�@�T0�37'33667733#5#'&&'#@��[M

IW��LG$U!P��k+,i�4��p.+pX�T+�!5#"&5533267533#5�(&blRDI)RGG�R^~~:3�]4����]�#��R�& 
��J���'��Q���&
����U���D���&
��E������d��&"��<���&(��<������1�/'�&-��1�/'�&-��<������<����&e
U���&3"&&5467.54667>7'32654&''7`;iW"?(9iH(-6FT%(@$-E(6c�&>#BJ=.NZ4aB\n-12/		K
	#BT;Dj;�-C&]I<N"b��c4�?��c4�E��c4�R��^�)5=A"&''26533.55432"#&&'#"&54632'254#"53#Wu	DXu	�.DD..BB.224"�A�nQ?dZ/�cA���P?dY0�b OSSMMSSO7kjjk�66*��A�3?6654&#""&&54667&&5466326673&''3267&&'�*=!"'.:X2#8 $A+=B*@# S-)L4$<5AH$W�J4;/V"+:A++6��/R5+C7)O#,F)H:*C82_'(`8@w4.D7")�7B*e5=G���#"&54632'2654&#"7"&54632,j{{jkzzkCUUCCUUC%%%%��������B���}}����$##$a~353#566733a��8M=�D�5��DE
�35>54&#"'66326633Il�MDG-M/+dC`pJ�W=�1`�t57F- /,5gU<{�OG9���*"&'732654&#52654&#"'6632Rq#* Z=AXj~q`G;-P ,(g=<_8M;+G,?h7#6.@59F?E2/6$4#-&H4:J	+B,8R,'!~	735667#5!533#��"A��?Xcc��=/�4�7��tB�8��
~!"&'7326654&#"'!!6632Ul%) T@-J+VG(8",i��5%=c;Cl6!6-$B,BJ3G�+XEEa2M���)"32654&"&&54>32&&#"6632@&W&	UF9NFAEo@,K`4;X.B$3W7'^0Yn;aH(.\aM?AF��D�f`�U''34wg&-cb=\4F~3>7!5!�1M7���?S0[��CG3H���^D���*7"&&546675&&546632654&#"2654&&'.Hi9(?"(93Y9^h9(#9!6fPB?5C-MGM5[8.?X-P2,@.J21J)`J-O+<./N-h:F/B8/&2#��?1-3"B05EC���)3267&&#""&'732667#"&546632�EC&V'
SG9Np:X .B%3V7']1Xn;a8FnA,K`�AF(-]aM��'44xf&,cb=\4D�g`�U'G���"&54632"6654&267,j{{jkzzkC(�UC 8�	U��������W;��E)�~��[F)��a~
353'733a�t*�@�D�V0���DG��J#"&54632'2654&#"7"&54632,j{{jkzzkCUUCCUUC%%%%��������Bsywnnwys�$##$a>353#566733a��8M=�D�5�DE
J356654&#"'66326633I��DG-M/+dC`p��>�1n�@:H- /,5iXL�\G9��J*"&'732654&#52654&#"'6632Rq#* Z=AXj~q`G;-P ,(g=<_8M;+G,?hV7#6-A7;E@E4/8$4#-'I4:L	+C-:S-'��!>	735667#5!533#��!@��?Xcc��=1�.�7��cC�8��
>!"&'7326654&#"'!!6632Ul%) T@-J+VG(8",i��5%=c;ClV6"5,$C.DJ7G�

*YGFb4��N���sF��>>7!5!�1M7���?S0J\���DG3I���`��D���uC��J)3267&&#""&'732667#"&546632�EC&V'UH9Np:X .B%2V7']1Xn;a8FnA,K`zCJ(.aeN��'33xg%-gd>^4D�gc�W(G��J"&54632"654&27,j{{jkzzk2�UC;'�U����������7Syp�(+K4S|sa>
353'733a�n*�@�D�R/��DG���#"&54632'2654&#"7"&54632,j{{jkzzkCUUCCUUC%%%%��������B���������# "" #a�353#566733a��8M=�D�4��DE
�35>54&#"'66326633Im�MDG-M/+dC`pJ�W>�1`�v5>N, .,5p\<{�PG9���*"&'732654&#52654&#"'6632Rq#* Z=AXj~q`G;-P ,(g=<_8M;+G,?h7#6.B9;G?H418$4#,'J5<M	-D-:T-'!�	735667#5!533#��#A��?Xcc��>0�%�7��fB�8��
�!"&'7326654&#"'!!6632Ul%) T@-J+VG(8",i��5%=c;Cl6!90%D.DL<F�+ZFGc4M���)"32654&"&&54>32&&#"6632@&W'
UF9NFAEo@,K`4;X.B$3W7&_0Yn;aQ(.aePADG��F�ic�V(&36|j',ed>_5F�3>7!5!�1M8���@S0^���EF2J���aD���*7"&&546675&&546632654&#"2654&&'.Hi9(?"(93Y9^h8)#9!6fPB?5C-MGM5[8/>X/R4-B/M42K*aL/S+>/1P/q<I2C:0'5%��A4.5#D27HC���)3267&&#""&'732667#"&546632�EC&V'	TG9Np:X .B%3V7']1Xn;a8FnA,K`�CH(-bfQ��'46|i%-ed?_4F�jb�W(G���"&54632"654&267,j{{jkzzkD(�UC!8�U��������j?��<X���� "i<W��a�
353'733a�n*�@�D�R/���D��}�"&54632,"//""///%&//&%/�+��'667#"&54632�>>
 .0 ,.]�4P;&%%'E;Xy����}'�f����+�'�f� ��8�#"&546323"&546323"&54632f))((�))))�))))*!"))"!**!"))"!**!"))"!*��u�%'3"&54632
P
++++�X^^���*$#))#$*�Hu�73"&54632
8
(++++�^X��^)$#**#$)m����%7&>54&#"'6632"&54632�13$77&A1"\:Sg$52++++�+@3/1)8-#.UG);10:'�*$#))#$*y�<��%"&54>'33267"&546323Sg$52I13$77&A1"\3++++�UG);10:'+@3/1)7-#.)$#**#$)�`c�''3n`�nn����`��&���s�^|�"&5467632+'3MC.6'*^@8Kx"0O4( "+�^��'667#"&54632�/6(* (2L^0P4(#+@9Kv��^^��&���s��f^��&���s����{�����f��{'������s���^�&&54632#"'cCL2( *' 7.^#vK9@+#(4P�4��%'57^��'4�P�#���4��7'7'7�''�4"��#�P��R4��&���s��`4�&���s��U+i���U+i���U+i�P� 75!P��HH�X 55!X�HHP� 75!P��HH���X ����}���s��%"&&546632,'D**D'(C**Cs%B,,B%%B,,B%�g��%"&&546632'2654&#",/I))I//I))I//;;/.<<g*H--H**H--H*0>11>>11>����7!��
���u��7!'35#�$���u"��-�����753����%��uu��753%3'u�����muF��+��e��73�%��eD���O��7377'�G��)��Oo��Kml�c��%5!+�B�c%��uN��%5!'7#+�n�m�NF��T��e��%%5%3���%e����uO��%%5%3'5���G+�O����K�l�s��7!'2654&#"�(�;MM;:NNs&��M:;LL;:M�X455!X�pp<�t��5!<�GG<���5!5!<� �>>z==>Aw5!>�A66�f��
"&'73267,�e_�mm�_d��B>):55:)>B�P��
&&5467�hyyh-d``d�Q䑑�Q*U�~~�Uz�P��
'6654&'7�-e__e-hyy�*U�~~�U*Q䑑��h��!#3��Ә\/�/b�hw�53#5!b���/�/��x�h��/"&54654&&#5>54&54633#"33�^[	?;;?	[^=436'44'634�8M7X2#4$/^4M8/(!+[/13		313T. )/c�h��/5326654&54675&&54654&&##532"#c336&44&633=^Z	?;;?	Z^�/) .T313		31/[+!(/8M4^/$4#2X7M8c�`��3cHJ���f���Q�3J��c�`��3���JH�f���Q�33JJJ���H0��HTo,7'7'7737'�*l��	0	��l*xo�F.7��7.F������5'37'	��F��P;G��G������75'75'37'7'	����F����P�G��G��G��G�[����3C"&'732654.5467&&54632&&#"6654.'7\ 2=*)-)@H@)3(LK2Q(9#*&)@I@)2)Z�)@H  #(@H %@&!-)%)>.,A(4N"5%%*>.0<';N�!+ &"", )H����
%"&&5466333>Fp@>jC+6Q�.`KO])�R��� ������&ȕ�k��]����'��z�y��;�%?K7&>54&#"'6632"&546327&>54&#"'6632"&54632f"&$%')D*>L'&++++�"&$%')D*>L'&++++�*C746!!.1!"K9*B76>'�*$#))#$*�*C746!!.1!"K9*B76>'�*$#))#$*W��;�%+7%&>54&#"'6632"&54632%'3"&54632~"&$%')D*>L'&++++��
P
++++�*C746!!.1!"K9*B76>'�*$#))#$*�X^^���*$#))#$*���%+77&>54&#"'6632"&546327'3"&54632f"&$%')D*>L'&++++�
P
++++�*C746!!.1!"K9*B76>'�*$#))#$*�X^^���*$#))#$*^����)7''3>54&#"'6632"&54632�F0"?=)F0#f:;W1%55 ))))��LLk,6'-< ,&.)F./B0,4$�)""))"")t�<��)%#773267#"&&54>'72#"&546ZF0"?=)F0#e;:X1%55 ))**��LLk-6'-< ,&.)G-/B0,4$�)""))"")���3!#���/�xbw�!#5!5��/�I��~33�B�V�[/b��w~533b�BV/��,��h��!#3%3#�<����++�\/�//�b�h��53#5!'3#b��<_++�/�/��/����!#���/��bw�#5!5�r/�_�h�33�BӘ���/b�hw533b�B�/�R��:�;"&&546632'26654&&#"7"&&546632&&#"3267,L{GG{LMzGGzMCe88eCCe88eK-I,.L+#2".86,&5R�ff�PP�ff�R*I�WX�HH�XW�I^/Y>:U.'K;BM*��:�*3"&&546632'26654&&#"'32##532654&##,L{GG{LMzGGzMCe88eCCe88e(r9OP81''*+&'R�ff�PP�ff�R*I�WX�HH�XW�Ijk8=BAs�&)$ p?��-6"&&546632'26654&&#"'532#'#532654&##,4U33U44U33U4*C''C**C((CL /..#)?2Y:;X22X;:Y2%(I//I))I//I(=�$SFFf��nD�#53#333773#57##'#[`�`�G-,G7G*Hn66�6rPPr�ʉi��i�bD�&:"&'73254&''&&54632&&#"733773#57##'#}!6!%1.%9/2#. :tG-,G7G*Hb%''#'1'	
'##86rPPr�ʉi��i�1�p"{,5"&&546632#'##"&546754&&#"3267275UO�PN�REZ,2G'5L�A5<g@=iA-C'R88gY+�Z����V?kD��:*F=MN0P0J�ok�O-"@~7.#(1��"�,5"&&546632#'##"&546754&&#"3267'275UO�PO�SDY+2G'5L�@3<iA=iA-C'R88gY+N�os�M7]9��:*F=LO
&?'A�bZ~C-�@~6/#'W�37#7#537#53733733#3##7#��hPWU\5�5PWU\6���g�9�:����:�9���h<��'7'7737'�*\��	0	��\*g<�9.,��*.9����� 75!�L�HH����� ������ �U���	5?7&"#"'7&&'77.54663227&&'#""'74&'2326�9)
2<?8)I'9 $)K03X98!5,%!+O45_?�?-";>�&�-���$9	�(:+/E%��
"0�)?00H)�$,�1�����<������<������<�����<�����<����<����<�����<����<����<���<�^<���<l^<����]�<���g�	<��C��"&54632'2654&#",HWWHHWWH+66++66�ldbllbdl3NONMMNON��O��535#566733�{i)54r�6�)��6��O��'>54&#"'66323�C[/.'1&K+>N+J0��%9P>&, ##)A>%CH-6��C��&"&'732654#52654&#"'6632)3Q*9!$4�;9+%0&D+7P'(+3(C�*"!$!F()"""81#.2&$4��O��53533##5��/��::::I!	�tt.hh��C��"&'732654&#"'73#632+7N*(G'36*% �
 (9QU�*"!:1%(.�8`C@<J��C��%%"32654&"&546632&&#"6324/6)#.,$JX0R2&1%0D,@@D%>9:,$#,�i[Ja/,
HK)E8%<#��O��>7#5!�6)�%18�Dmf87$>nrD��C��%2"&54675&&54632'6654&#"2654&&'+GM-'!#H<>H(*(O-)#"&6).3",�?,&7'.98/"-0%.?�# �'))��C��%73267&&#""&'73267#"&546632�+*.6)#.>%3&0C,@?E%?(JX0Q^#-:;-��
-
GK(E7&<#i\Ia/��".5467X&02:-5&'4�,RZ9T|A>wBAw?�l"'6654&'7.5&&5.92/�?wABw>A|T9ZR��D]��"&54632,���g��'66'#"&54632#5��'&&%-E����="&54632'2654&#",=NN==NN= ..  ..XNNUUNNX2::<66<::�a1!5#56673"R!)2�*����=356654&#"'66323�NS&';$6>G2�$;N! !#52(L-5����=$"&'732654#52654&#"'6632+"D 1#`)((>"/;8 'F'3&&,(7',1��=7573533##5�q.ad9229J��aa*JJ����1"&'732654&#"'73#632-)= -%$��
 2>G'�6F4//;����=
#%"32654&"&54632&&#"66327(#,:OVD,
+3-34A�#&"�RFV[)
;95*+=��13>7#53�* ��*-4RM)5$.SW5����=%0"&54675&&54632'6654&#"2654&',8E( D.2A!%H!,)5"/'5# %%//%!%!%3��
%����=$73267&&#""&'73267#"&54632�#,(-)3-33A2;NV�'#�(

995*,<QGU\���
&&5467U1881.-((-L1oKKp1!-c;:d-��l�
'6654&'7.-((-.277L -d:;c-!1pKKo���]Z"&54632,�gZ'66'#"&54632#5u'&&&-E����]
 ��� aQ ��� �] ����]
 ��� �] ����Q ����] ��� �Q ����] ����] ������ ����l� ���]z ����gz ������)������J������7����#"&5467&&#"'6632#'#'2675
-=kp!)7L(A?5</UH$�1+59	,+G?�&1S%���b"&'##36632'2654&#"G22@5AE)B3(4'.'.)� ׁ8YK7M)5>:3<(�����"&546632&&#"3267ZF_0M-#2 !/=;/)2�YO6L')@54@))���b"&546632'53#'#'275&&#"?L)B'+@56,'&'5.�XP5K)7|�)$5(�>57=����"3&&"&&546632#32678$=�20P//K*HM�F./6�+-/)��(K54L)SD
24
("���i#5754632&#"3#OOAE/-!&)%���0;G/
*#2������*6F%"&5475&&5475&&546323##"'3322654&#"2654&##"&'*FO5
'M5
�RI5?G@>cV(((($5@%#;4�,+("
*6>0
 5:"$)/B!%! (( !%�%
���b36632#54&#"�@8$85@$(�ׁE!A>��)(����g#53"&54632<��%�2�����|g7"&'73265#53"&54632�.!!/ ��=1�
	/+(2��'?$
���b3373#'�@�H}�GkF��ʠ���CT���b"&5#53327}53Q�#�<883�� 
1F�� 3366326632#54&#"#54&#"F21 E5!5/>#!,>#",�A-<$F8��&,/��&,/�����336632#54&#"�57%85@$(�A0!A>��)(�����"&&546632'2654&#",*H,,H*+G,,G++11++11�(K56L''L65K(4@45@@54@��� 336632#"&'72654&#"�46AD)B&.N(4'.*)�$YK7M)7j�>:3<����57#"&546632373'275&&#"v4?L)B'-4�,'&'5.o8XP5K)�:�(�>57=����336632&&#"�6B'#
=�AK',
6(2�����'"&'732654&'.54632&&#"4+L7%(&8 7%G@$?-%"4 9%I�)		#(5(

	$(9���0"&55#57733#3267qH8MP5��#,
1�J=�0dd2�)+/����"&553326753#'#
74@#)@49�A=��('�2!����
3366773zB>>>w�A�00���4���337733773#''#�Y@,082+;WK*,�A�[[��[[����[[�����7'3366773#'&&'#�ofD+&DhoE/
	+���B

B��E

E���"&'7326773366773�
	
&
�@E	<>�<2$@�//���2A����	57#5!3�ս���!�2!�2����
"'7"3&&"&&546632#3267Ip-f4$=�20P//K*HM�F./6�n)x{+-/)��(K54L)SD
24
("����
"'7"3&&"&&546632#3267'"f-`$=�20P//K*HM�F./6�x)�+-/)��(K54L)SD
24
("����2"3&&"&5467#"&&546632#326732678$=�2%*
0P//K*HM�F./.%
 �+-/)�R!*(K54L)SD
24
(/	
����"&54673&&#"'6632'267#*IS�?-/>$G_,G,$7�7�XD11
(YP4L*2./1,���g4632&&#"6632#54&#"�;?#
"8$85@$(�Z;G0*#Q!A>ļ)(�����$%"&54673366773'2654'#-'*rA;;?q)'
�+$0"�&&���"1$+*
"/*
���g5&&546632&&#"2H+G)/D"/ +5<=�� M:*:$(*%)B �����"&546632373#'#'275&&#"?L)B'.456.%(%6/�XP5K)��$5(�>57=����*%"&'732677#"&546632373'275&&#"A4--3?L*C%-5QB,'(&60�,+$8WJ3I(��=C�*�<23;���g	535#533"&54632��r�|��2�2��2�����]�'<�zG53ޜ//��E5!�**=E5!=�**:SA)7'7&5467'76327'#"'72654&#"f,T$S,W0?>1W,T$T,X/?>1o1EE11EES-U1C#;V-Z%%Z-V1D";U-Y&&J<<JJ<<JU���-7732654.546753&&#"#5&&U'&\8;>.HQH.YI<7J,"?22<.HRH.aO<7eq9)1&) ';+?Q��+0-&%)=.@W��,M�(356654&'#57&&54632&&#"3#!N>>ucs_>U0;*AF��$$H2`8
4 >Uc+ /A4< 84GG5#~!5#535#5333667733#3#�����U\!"\R������0A/@�!C##C!���/A0�:��6�1"&'#57&45447#576632&&#"!!!#3267vb�@;;@�j3X1<&I[&���XE+A1%]�u,,v�-!/!bV1		1Ua%",+2q����"5&&5466753&&'667:Yp5\83,@(. 4$H'�@87A!h
{jEe<jg"4��4"gWCX
O
X1���&"&'732677#57376632&&#"3#�*4-
hF)
PT1
 !*��&Ga>PL�;8dh>%;"??�=\4`��"�/5""&7&&5467722327&'667'7&'m
<>�=Ip_
00
+!1:21 N20
S<67;H��R{%�l��k\iq$/�
",%0d[
n��H��N�635665445#573&&'#57&&54632&&#"3#3#!N>>|W^Ms_>U0;*AF���$$H2`8,!.!Uc+ /A4 1!14GG.(~#'+3'5#575#57533533#3##'#73'#'3'#3'#�	;@5KKKKT^sAIIIIT]t�	:�bL�Ja3�����+D+����0D0���J�0DDD*G~3#575323###3&&#327#�]]�<a=LL
}YF�PD;;���3� I<8XT�El;1��s:~!'3'#573373333###'377#377#* �$LE"L;b<G?F p", 4/
�
1����(4������:��(��D�bb��bbm"�)-%"&5466323'5#53533#'#'2675&&#"5!L[2P,'5��GNN:>4-.C9vznb[7P,S"1CC,�S.;�D2=F�11*H~'-23#575#575323#3###4&'#366'3&&#327#�]]]]�MrXNMWtMF�����G3;;k#�t(:(t5?.
.@?��	:
�; ��FT���#5.546753&&#"32675#537Cf:|g<.O1<&W_]S :t�CXndR�`��ec,.!�y{��E��>	d=���:"&5467#573667#5736654&#"'66323#3!3267CZo
	PE.-�F�!8/)6,!N=5Q.a�3��>;-I!&$dXO(+ ,.&4!/%.(G/-1 0)+6) 7%/`��"�"5.546753&&'667JEj;�j5/O13 "71!P2�NGHMncR�a��a`+/��#,&0d�p�

�l
~753267!573&&##5!#3##'lOS`��L�]LO��EJH]J�]�C:<,.&D1H1LX���-��~"'75'75377>54&'7�]s]sT�«�%NB(Ed�++5H+*6ǞQ+[HQ+[�)='
To57!~!5'75'75#5!#77������ˊ����A+KHA+K�@@�@(MH@(L�7!~!#57!#5!�R�����,0�&M11*1~!35#575#5732##!!32654&##�tttt�Bh<=hA^��TMTTMT�,C,6$N>@P&C1�HABC7E~35#57!!3#3#�OO������|4�G�Fx8| <p7'77'7M1�!�!�1 -���-�� <ph�� <ph����=�'
�zM&h
�0��?�'3?K"&54632'2654&#"'%"&54632'2654&#""&54632'2654&#"�4AA44AA4##$$��f4AA44AA4##$$*4AA44AA4##$$�F>=DD=>F*,.-**-.,��:�0F>=DD=>F*,.-)*,.,*F>=DD=>F*,.-)*,.,��?~'�sM&h���<~'�sM&h���U�'
�sM&h�����<~'�sM&h
�����<�'�sM&h
�����<~'�sM&h�����<�'�sM&h�����<�'
�sM&h�����<�'�sM&h�����<~'�sM&h�����<~'�sM&h���<~'�sM&h�����<~'�sM&h�����<�'
�sM&h�����<~'�sM&h�����<~'�sM&h�����<~'�sM&h�S��?~!-5#56673'%5#56673"&54632'2654&#"�R!)2m��fR!)2�4AA44AA4##$$��*
�{�:�<�*
�F>=DD=>F*,.-)*,.,����<�'
�zM&h
�Uh,%5#53533#��B��h�>��>�U+i5!U�+>>f~�7'7'77'�,��,��,��,�~-��-��-��-�U`3"&54632"&54632'5!,������>>���y������U��&�k����UT@'��&���)x0�h%%5%�u��-0�>�O��k0�h75%5%5k-��u0O��O�>U
35!5%5%U��R�҇��>>��J�GI,,IU
35!%5775''5U��R҇���>>�GI,,IG�JU,%5#53533#5!��B�����>��>�>>o��	3#''#o�H�HB11B��~����UAS77#537#5!733#3!pLg�[�
L=Lg�[�LA>�>>�>L��".#"'66323267�/)')5H&/)')5H""4G6""4F6��L�&�k��Uhi%5!5!����h�>��Uhi7!!U���h>�`h�:7546632#54&#"`5\;;\5AL??Lh�Aa55aA��MTTM�Uh,73!UBlh�z>���\�'3%"&'##"&&5463236632%27&&#"2654&#"�7O&)5#$=%U=2DO6-E(W��@(4$+/R,15/#=!>�:=-)F+NY<)5@,M2TfSX1+-)(6=+0?17=2����"&&54632'2654&#",!9#K2"9##9""**"!**�:&;F 9(&:..#%..%#.�h�3Q"�d�������&���X��W�''3!"Q��d���T�E'��L���*73267&&#""&&5466326454&#"'6632�C-AY!F!IIh0S34bC)OKA9& P.asCw�;Fmc*"Y��.W;Bf:&"}p4 #��p�_��b�#"'732654.546632&&#"�	*<9
)

;�>RN7~�7Ag<>UM6~�~8Ah<	�p�#46632&&#"TK<9	)�p�Ag<>UM��bT�"'732653�
*K<�>RN��_Ah<>��G4'736673/�G�t�<�_� -;��  ��m��+-�a��&2�u 8�#33736677#8�^�X>�?� �!��p����9m7dd7mF��35!5!5!5!5!FL�����G�G�F�p��OC	R'��tO��OF��%~
55!!!F�������wx5FF5G���G4��$~!#!4�U��x��
��S��=�".:"&546632&&#"3267'77'7"&54632'2654&#"�;P)B% . 
$1.%%
6v1�!�!�1�=NN==NN= ..  ..AVN4J''@33?'��-���-��XNNUUNNX2::<66<::t����	'6654&#""&''66746323267;C!)O<Z!+T>9Ih\5%+!C�;�F2*C��P[4tePK^�NM<3(��>�1".54>32!"32673!2554'&&#",9cK++Kc99cK+�b6T5_"&(r�
G&(H4\zFFz\44\zF�	<=3<HZ�

���9	5!!!��+���J�		.�D�!��7	'3'
�.		.���*��*�I��F	'7!5!'75*�I��*.�D�.��!��7	737*��.�D�.��*���J�*��`!�	%7%��
?|��6!6��|?
��Q ��	7''%'�06��|?
 06	>��V7��	%%777���06	>7?
60����g7�	7'%j?
60��7|��6/��
?��95!!!!!��+p]�hCC���p		.g6>>6g!��77'3'#'##O.		.g6>>6�*��*o���CC�h]��F'7!5!75'!5!'75*o���CC�h]o*.g6>>6g.��!��7733737*��.g6>>6g.��*o\�iCC���o*����%d�%'7!'57!'7d�-~�T~-��-~�~-��&��&��&��&U��0#'7'73'7.�&��&��&��&9�.~�~-��-~�[~.<�v05!'#'7'73'7<���&��&��&��&�@@Q�.~�~-��-~�[~.Ji+%"&&546632,Af;;fAAf;;fi;f@Ae;;eA@f;>^6%"&&546632'26654&&#",Ek>>kEEk>>kE4R//R44R//R^>kCCk>>kCCk>20T66T00T66T0Wu7!W�u��VIg-7!%!!I�o\��g�:1dIg-	77!%!!I;�3��X��g�1�q7(]!K7b%	,��K��>iX753>��i�>iX753%!>��oF�i�,[>m.H73>�m���>m.H737%%>�,Y��m���M��>UD%5!+���U��>UD%5!'!+������U��h[*mH%%5%3��m��%*mH%%5%3'��/��m��%MA�mqH73Y��m�����mCH%%5%3@��Ym��%Dd0#7!'26654&&#"7"&&546632D��Cf;;fCBg;;gB1N,,N12M,,Md�4;g@Af;;fA@g;1.P34O..O43P.3[%R/%"&&546632'26654&&#"7"&&546632,DqDDqDDqDDqD4Y88Y43Z88Z3%@''@%%@''@[=qNMq==qMNq=20Z@@Z00Z@@Z0:#A,+@$$@+,A#��q�	7!%!!=M4����
v3��=+4���7!667%!&&'73667!=�66)4��Cp#VE+8%= jA�'
v3#=2*��=+^�
M�@&:~?n�a����b�&'73>7�;\8)D$r�N6O�u&��&>�Cw��M2I��M���!"&5466323'6654&'�(=(G."2
D.#A<0N'%5!
0[9'E
)/T�i7J&��Q�!"&546632%#"&546632h(<&D,"z.L-(;%D,"��.L'%5!<��7J%'%5!k*�|7J&	��O�#.5463236632.Zr>T=1JK0>S>ra�yj6bd5CC5db6jy�	O�47"&546327&&5466326632#"&'#!5>7#�;JS:"2'C))C'2";RI<%G/F,�z,F0F�UCFG	-O%8  8%O-	GFCU&1KV((((VK1&��S�#53.��%%om��	O�#%#"&54>73#"&'#!5>7F)7J@qUVp@I8)E/F,�z,F0�4&BF-Q]{XX{]Q-FB&4KV((((VK	'Om+7EMU%"&&546632'26654&&#""&546323"&54632"&'73267'254#"3254#",U�KK�UU�KK�UGl==lGGl==l�fBQ"?,,@
"R�


�

'K�TU�KK�UT�K->oIIo>>oIIo>$##$$##$�E=
'$$'
=E�;;Y'5AM%"&&5466322654&#"32654&#"267'#"&''"&546323"&54632,P{DD{PQzDDz��:DQ
"@..@"Q



�



;F{NOzFFzON{F$$$$$$$$�C>
'&&'
>C�			

						

			��	��%#.5463236632.HSRC)oVBWWBVo)CRSH	/@23CaGbg;JJ;gbGaC32@��'�m$8DPY&&#"3262672654&#4&#""&&54632#32654&#""&'663266726+<

<=cTQ:;zqpz;jEU~E��y�:E3U3#p"		"Y]crWXrbt

.�
��28P6.@GQWKw�F)S��^cPJ
ED2M*:6|

k,(/78.(,L8!��\�#*8F%"&&547&5467&&54>7'267!'66327&&#"66327&&#",j�@[$>/	*0/�
/>$[@�j>K��KZ! !�  "@;_?6;			'O	;6?_;@_9::9�##A77A##A77��'rm%;IW%"&54632'"&5463226654&#""&'&5467663266327&&#"66327&&#",a`hYYh_bDm?�oo�?mDY�"?�mn�?"��  # #�  # #�
		
m*6SMMS6*�9v[zhhz[v9-VS�&%b__b%&�SV%!!A77A!!A77-��+X!*'73546323%37'6654&#"354&#"U((.YPPY.((��,,1##1I�2332F$$�W``W�$��$��)#00#)$�;CC;<���*26654&&#"5#535.5466323#,1N--N11O--O��<^5>mEEm>5]=��+-P34N--N43P-���>e?c<Bi==iB<c?e>���	e�)726654&&#""&&54663275%#7�1N..N11O--O1El??lE%A��;�:>lB-O43O--O34O-9=jBBi=�:��?[Bj=��[}8%2654&#"'7&&'#53667'76675373#'#5&&',;MM;;MM�+X
ll
V+W+@*Y+XllW+X%/@*�M==MM==Mm,W+>)X,X
tt
W,V$0>.%Y,Ztt`����3'377''#��L��(@AA@@AA
SR����E�������1'�
33%!''#1�H�PjaRRah3���<�}}����h�����^|�����^�����=
52654&#56�:<<:[]]22,-21ODDO�v=
&546"3v[]][:<<:ODDO12-,2���;5&&546632&&#"2H+G)/D"/ +5<=�[!L:+:$(*%)B v���373'3�]
]g]�]��W���W��'3']�]W������%"&'573267I3i�
 �+5+?<36	+	���8l	����8�	����8�����>����_�3f�?�����Y�����8�	����8l	���_B3�8�@����A�����L�����Y�����;��	���9�����8�����Ln�
���z2����45��#�".9EQ\gs�"&54632'"&546323"&54632%"&54632!"&54632%"&54632!"&54632%"&54632!"&54632%"&54632"&54632'"&54632+z�

��

`�P

��d

M���

{&R$mn&%R�8l	'7A�:�8�8���mc'7I�/��s7��.M'7CU'.���8�	'7+�:8)�8���c'7$�/�*�7	/�'7B9/U/
��8��'73'#�#rRr#v8 �� q���F'73'#�$iVi$n�qq]A��".#"'66323267t&7/4& 7/A",#;M"-":M{��I".#"'6632327w)86-)(86�" 9BB:A�Y��5!�
Y99���5!��99���Y��������;��"&&'732667,6B!3, !+3"B;-E%00%E-�<��"&&'73267,8DD&12&D C<*E&+>>+&E*���J
"&'73267,FF2/++/2F�M4#11#4M���E"&&'73267,7AH#**$H@�$;!#33#!;$�Ln�"&54632,&&&&L####��g;"&54632,""""�  �L��"&546323"&54632��L !!  !! ���0"&546323"&54632����<|�'6654'7	 SDKD<(+61,++��{h'6654'7	 S	AIC�&'0)&+*�;�-"&&'732667'"&54632,6E#00""00#D7    ;-E%2  2%E-�����
"&'73267'"&54632,HJ.5..6.KH�M4%33%4Mt�9��"&54632'2654&#",4::44::4!!!!98()77)(8%"!!"���p"&54632'2654&#",*77*)88)�2()22)(2$�8��'7'7�.W:4.W:8������l'7'7�+\96+]8�� �� �>��'737r#vv#r>� qq ����M'737i$nn$i�q\\q�$I03J$Q�k8��'7'7�c:Wic:W8����j��l'7'7�j8]uj9\�� �� ��8��'>32.#"�3!B66B"3+! ,8%E--E%//���I
'6632&&#"�2FFFF2/++/�5LL5#11�)a�"&54676632/ +/ )'$%?"$�>p�&&5467L+EKDS >)+-06+�)c�'665#"&54632	  +)"%'$%?���<|�����5#5353Sss5�H/H��x��533#�5ss��H/H�=��5#53Oo�=^/�#���'654&'7+T@

W�)L
&?B�j��
&546"3jEEEE&''&��3-.4$  ��-���53533�Y6Y�/jj/�����5#53#Y�Y�j//j�����5#53533#YY6YY�H/HH/H��j���53��//���)n��
�����0������������z��
'6654&'7�?.$#A4U�(&$"+,�?��
&&5467SA4VO?.%"?#",,)�z'6654&'73�?."+(6#&U�(`H +,�z'6654&'73�?."+(6#&U�(`H +,��"&54667332678+;':%-$	0�./2(;!
'��"&5466733267:,;'=%,"	-�-.3(<!
+	��O��73	:���������53#5#��0�␐aa���� ��������	�����������!������V�����o��=%".#"'66323267�!1(&7+1!1(&7+�"+#
6J"+"	6J�x��
52654&#56�&''&EEE��$  $4.-3�����53353�0�0�``������53'35#��Ɩ��(T����'&632366324&#"#54&#"�43/''0240�NF  FN<(*&&*(�5��'7'77'� == >> == >599::99:��A����{��I�7���"5533267XM@
	
�\/
1�?�U��5!�ګ::�fX�
'6632&&#"�e��d_�mm�X*>AA>*:55�L�L"&546323"&54632''7��{#R1Lus"����"&546323"&54632''7��|%_5�lw$�4�"&5463277"&54632�51DKsS�
��L�L"&546323"&54632''7��m`1RLui"s����"&546323"&54632''7��zo5_�lm$w�3�"&54632'77"&54632�]@B)IS ���L�&-"&546323"&54632'"&&#"'66323267��-#+$**&#+$**Lw'5'5�L�"&546323"&54632'5!���L�//����"&546323"&54632%5!������..�L�H"&546323"&54632''737���^``^L�\II\����"&546323"&54632''737���c!dd!c�|`KK`�:'73'#'7�dDdg�#W1:"\\"Hx"��x'73'#'7�"]H]"]{a#�ZZE ]'5:�'73'#'7�dDdg�q0d:"\\"Hp$uY��x'73'#'7�"]H]"]wZ#U�ZZEX%_�:�'73'#'6654&'7�dDdgv	 %;?::"\\"H#)%#(#����'73'#'6654&'7�"]H]"]u!&	x8�ZZE#*D&#�:�#'73'#7"&&#"'66323267�dDdgC*$+!#*#+!:"XX"EG'2&3����'73'#7"&&#"'66323267�"]H]"]D *!-%( *"-$�WWBJ&5'5�;�@"&&'732667''7,6B!0.!"-0"B;'X4;-E%2  2%E-l|(����
"&'73267''7,FF/1,,1/FC)_5�M4%33%4Mbt$�;�@"&&'732667''7,6B!0.!"-0"B1e4X;-E%2  2%E-lq(|����
"&'73267''7,FF/1,,1/FIk5_�M4%33%4Mbm$t�;�P"&&'732667''6654&'7,6B!0.!"-0"BQ#)=D>;-E%2  2%E-o$2)((&����
"&'73267''6654&'7,FF/1,,1/F]
!%;>9�M4%33%4M_#*$#&#�;�"%"&&'732677"&&#"'66323267,1=//././=*$/#%*#/#; 2++2 �&2&2����
#"&'73267'"&&#"'66323267,FD......D *!-%( *"-$�@****@�'5&5�:�$'73'#7"&'73267�_D_`>;&(**(&;:SS>I8!
  
!8����'73'#7"&'73267�!\H\!]BB.++,*.C�WWEI9%""%9�Y�K5!''7�
� �&Y99h'c1����5!''7��y'�99\&g0�>�-"&54632'737,    Arzzr��ss�����"&54632'737,Alyyl5sm\\m�/�
.54677�-G:I3+JCA&)*3'.���/�
.5467'7�-G:Is@K&A&)*3'8���2�'
#&&5467'66323267#"&&#"G$:@:% �#%*#/#%*$2"'
|&2&2�/�
'6654'7'7�
I;F-�2*JA&'3*)&
��/�
'6654'7'7�
I;F-�?J'A&'3*)&���2�'#"&&#"'66323267'6654&'7m*$/#%*#/#� %;?:�&2&2�!
'"��S5!'�NN���z'5!'�ޜ��pS�3N�px���pz�3ޜ�px��!7S53!53!53��������NNNNNN!�7z%53!53!53��������ޜ������SA333NNNNN7
���p
���p
���zA333ޜ����7
���p
���p
��ES53!53!53!53�p��p��p��pNNNNNNNN�Ez%53!53!53!53�p��p��p��pޜ���������S_53535353NNNNNNN~�������������z_53535353ޜ������~������������pS!#!��Nz�k��pz%!#!��Nz��
�pS!#!�����k��pz%!#!������
��pSS#!5!SN��z�p�N��pSz#!5!SN��z�pn���pzS#!5!z�����p�N��pzz#!5!z�����pn��!3!��N,�k��%!3!��N,�
����3!ޜ�kN���73!ޜ�
�����S�!5!3S��,NN����S�%!5!3S��,Nޜn��z�5!3'�N�����z�'5!3'�ޜn���p�!#3!��NN,�kx�k�p�%!#3!��NN,��x���p�	!##3!��N'��k��k�p�	!#33!���'N,�k���k�p�!#3!�����kx�k�p�	%!##3!��N'���n
���p�	%!#33!���'N,��
n���p�%!#3!������x����pS�#!5!3SN��,N�p�N���pS�#!5!3SN��,N�pn�n��pz�	#!5!3#SN���'�p�N����pz�	#!5!33z���,N'�p�N��k��pz�#!5!3z�����p�N���pz�	#!5!3#SN���'�pn�n����pz�	#!5!33z���,N'�pn�n����pz�#!5!3z�����pn�n��pS!#!5!��N����k�N��pz	#!5!!!SN��z,��pn�'N��pz	%!#!5!5!��N��,z���N'��pz%!#!5!��N�����n���pS!#!5!�������k�N��pz	!#!5!!�������kn�'��pz	%!#!5!5!���������N'��pz%!#!5!��������n����!5!3!�Z,N,N��k����	!!5!3!���,N,'�n�k����	%!5!5!3!����,N,�'N�������%!5!3!�Z,N,ޜn�����!5!3!�Z�N��k����	'5!3!!'���ޜn�kN'����	75!5!3!����'N��������%!5!3!�Z�ޜn����p�!#!5!3!��N��,N,�k�N��k��p�!#!5!3!��N��,N,�kn�n�k��p�%!#!5!3!��N��,N,���N�����p�%!#!5!3!��N��,N,��n�n����p�!#!5!3!��N����k�N��k��p�!#!5!3!�����,N,�k�N��k��p�!#!5!3!�������k�N��k��p�
%##!5!3!!z'N�������n�n�kN��p�
%!##5!5!3!��N'�����n'N�����p�
#!5!33!!z���,N'���pn�n��'N��p�
%!#!5!533!�����'N,���N'n����p�%!#!5!3!��N�����n�n����p�%!#!5!3!�����,N,��n�n����p�!#!5!3!�������kn�n�k��p�%!#!5!3!���������N�����p�%!#!5!3!��������n�n��K
S53!53w��>�NNNNK�
z%53!53w��>�ޜ����jS�33NNN�,���,���jz�33ޜ���,���,������5!5!'��Z�SNN�NN��p��3#3SN�N�px��x���p�	%!#!!!��Nz��,���1NN��pS	##!#SNN��p��k�N�k��p�!#!##!��N��N,S�1����pS�	#!5!5!5!SN��,��z�pGNNN��p�S	###5!SNN��p��k�N���p��#!5!##5!�N��ȜN�,�p�N��GN��	%3!!!N,��,�1��NNN��	3333�NNN��k��kN���333!SN�8NzS���N�1�N���S�	%!5!5!5!3S��,��,N�NNNG����	!53333��8�NNNN��k������!533!5!3���N��8zNSNG��N��p�%!#3!!!��NN,��,���x��NN��p�3##33�Nz�NN�px����kx�k��p�	333##!�NNN��N,�px������N������pS�#!5!5!5!3SN��,��,N�pGNNNG��p��3###533SN�N��N�px���N���p��	3!533##5!SN����NN�,�px���NG��GN��p�5!!#!5!'���N���SNN���GN��pS###5!#SNN���p��k�NN�k��p�	5!##!##5!'��N,��N�,SNN�����kGN����!5!3!5!�Z,N,�Z�SNG���NN���!533333�Z�NNN�N��k��k����33!!5335!SN�����N���S���NNG��NN��p�%!#!5!5!5!3!!!��N��,��,N,��,���GNNNG��NN��p�###533333#SNN��NNN��p��k�N��k��kN�k��p�33!!533##!##5!SN�����Nz�N,��N�,S���NNG�����kGN�pS4>33#"5]{F''HwF�p�F{]5NGvH�p��pSS!#4&&##532SNGvH''F{]5�p�HvGN5]{��S�##532665S5]{F''HvG�pF{]5NFwH��333#".NFwH''F{]5X��pHwFN5]{��X�3#-+��+�YW����X�#5+-+�����WYW��X�	#5533-����+��++������WW��W����W��SS5!'zNNS�3N�S5!zNN�pSS3N�p����Sz'5!'zޜ��z�3ޜ��z%5!zޜ��pzS3ޜ�p����z%!5!5!5!����,z�'N'�pz�#333z�'N'�p���k���z!!5!!���z,'�'�pz�###3z'N'��k��,X�!X,��D�pX�5!X�p���pX��!X�p^���pX}!X�p
���pX,!X�p��D�pX�!X�pk���pX�!X�p���pX9!X�p�7�pX�!X�px���p
�!
�px���p��!�px���pw�!w�px���p,�!,�px���p��3�px���p��3��px���pK�3K�px��,�pX�!,,�px��*��X�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



���8



�



�



�U










ZU










ZU










ZU










ZU










ZU










ZU










*��L*�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���  �  �  >���      NU      NU      NU      NU      NU      NU      N*��:E�#/;GS_kw�����������+7CO[gs����������4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&4632#"&'4632#"&'4632#"&�/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �/""//""/�/""//""/�/""//""/G  �  �  �"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      N"//""//""//""//""//""//B      9X�5!X9��
�pX�3
K�px���p,,!,�p��D,�pX,!,,�p��D,,�!,,��D�pX�!!,,�px�D�D�pX�!!,,,��D�D��D�pX�!!!X���X,�Dx�pX�!!!X���X�p��,,X�!,,,��D�pX�!!,,��,,��D�D��D�pX�!!!X��,,�p����M��������Q��4
�%3#5754632&#"3#33"&54632vBBEI*Egg�R(&&&&�>MJW	?^MC�]�L####9���%"&533267%#5754632&#"3#�.)R		��BBEI*Dgg95f��>�>MJW	?^MC�]c��d$#4>55#7#3�Q"8DC8"t��u"8CD8"QQ��DY;+)5O<����EZ<+(4N<�3�S�Z�3333'53##SJ�R�JT���^>���yװ�"�Ǽ��-��+X���XX��(�l���c�'7*1��19�0--0����e	e��e�������_�.��91���]]0���Hf$<HT`l&~	&�
*�6�D*:n�2�$�D*	�	�	�	L	�	dP	*�	��	4�		4�	2	
 8	4X	�	�	�	�	�	�	�			$			 	>	
,	^	0	�	.	�	
2	�	8
	&
R	<
x	�	"
�	.	�	2	�
�
�"
�0Jd~0�	(�
,�48J<�0�H�"
�2
68J���� a���� gi & l �� ������������� J���� ����� ����� �������� 1��������� ����� [�]����� �� ������ [0]����������� ����� [-]������������ ���������� [*]������� ��� �������� �� ������ [$]����������� ����������� [-,*]���� �, ���� a���� �, ���� g, ������� 1���� �, ���� J� 2010 - 2020 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name  Source .Source Code ProRegular2.038;ADBO;SourceCodePro-Regular;ADOBEVersion 2.038;hotconv 1.0.116;makeotfexe 2.5.65601SourceCodePro-RegularSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunt, Teo Tuominenhttp://www.adobe.com/typeThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL. This Font Software is distributed on an  AS IS  BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the SIL Open Font License for the specific language, permissions and limitations governing your use of this Font Software.http://scripts.sil.org/OFLsimple asimple gserifed i & lSami Jcursive �cursive �cursive �Serbian �Cyrillic breve [�]slashed zero [0]typographic hyphen [-]typographic asterisk [*]slashed dollar sign [$]alternate numeral one [1]typographic alternates [-,*]simple a, cursive �simple g, cursive �, Serbian 1Sami J, cursive �?@>AB>9 0?@>AB>9 gV 8 � A 70A5G:0<8A00<A:89 JA:>@>?8A=K9 �A:>@>?8A=K9 �A:>@>?8A=K9 �A5@1A:89 1:8@8;;8G5A:0O :@0B:0 [�]70G5@:=CBK9 =>;L [0]B8?>3@0DA:89 45D8A [-]B8?>3@0DA:0O 72574>G:0 [*]70G5@:=CBK9 7=0: 4>;;0@0 [$]B8?>3@0DA:85 70<5AB8B5;8 [-,*]?@>AB>9 0, A:>@>?8A=K9 �A5@1A:89 1, ?@>AB>9 g, A:>@>?8A=K9 �A00<A:89 J, A:>@>?8A=K9 ���2 $%&'()*+,-./0123456789:;<=DEFGHIJKLMNOPQRSTUVWXYZ[\]����bc	

�d���e�� !"#$%&'()*+,-.�/0123456789:���;�<�=>?@ABCDEFGHIJK�LMNOPQRfSTUV����gWXYZ[\]^_`abcdefghi�j�klmnopqrs�tuvwxyz{|}~����h��������������������������������������������jikml��n��������������������o�������qpr�s����������������������������utv�w��������������������������x�����zy{}|���	

���� !"#$%&~�'�()*+,-./0123456789:;<=>?�@�ABCDE�FGHI��JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	�

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~�������������������������������������������������������������������������������������������������������	���������������������������"�
��������������	

B>@^`_?�
���� !"#$%&�'��(#)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef�g�hijklmnopqrstuvwxyz{|}~����������������������������������������������������������������� �!���A�a�������������������������������������������������������������������������������������C������������	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������	

 !"#$%&'()*+,-.AmacronAbreve
Aringacuteuni01CDAogonekuni1EA0uni1EA2uni1EA4uni1EA6uni1EA8uni1EAAuni1EACuni1EAEuni1EB0uni1EB2uni1EB4uni1EB6AEacuteuni01E2uni0243uni1E06Ccircumflex
CdotaccentDcaronuni1E0Cuni1E0Euni1E10Dcroatuni018AEcaronEmacronEbreve
EdotaccentEogonekuni1EB8uni1EBAuni1EBCuni1EBEuni1EC0uni1EC2uni1EC4uni1EC6uni1E16uni01F4Gcircumflex
Gdotaccentuni0122Gcaronuni1E20uni00470303uni0193Hcircumflexuni1E26uni1E24uni1E28uni1E2AHbarItildeImacronuni01CFIogonekuni1EC8uni1ECAIbreveJcircumflexuni0136uni1E32uni1E34LacuteLcaronuni013Buni1E36uni1E38uni1E3ALdotuni1E3Euni1E40uni1E42Nacuteuni01F8Ncaronuni0145uni1E44uni1E46uni1E48Omacron
OhungarumlautObreveuni01D1uni01EAuni1ECCuni1ECEuni1ED0uni1ED2uni1ED4uni1ED6uni1ED8Ohornuni1EDAuni1EDCuni1EDEuni1EE0uni1EE2uni1E52OslashacuteRacuteRcaronuni1E58uni0156uni1E5Auni1E5Cuni1E5ESacuteScircumflexuni1E66uni015Euni0218uni1E60uni1E62uni1E9ETcaronuni0162uni021Auni1E6Cuni1E6ETbarUtildeUmacronUbreveUring
Uhungarumlautuni01D3Uogonekuni01D5uni01D7uni01D9uni01DBuni1EE4uni1EE6Uhornuni1EE8uni1EEAuni1EECuni1EEEuni1EF0uni1E7EWgraveWacuteWcircumflex	WdieresisYgraveYcircumflexuni1E8Euni1EF4uni1EF6uni1EF8Zacute
Zdotaccentuni1E90uni1E92uni1E94uni018FEngIJuni004C00B7004Cuni01320301amacronabreve
aringacuteuni01CEaogonekuni1EA1uni1EA3uni1EA5uni1EA7uni1EA9uni1EABuni1EADuni1EAFuni1EB1uni1EB3uni1EB5uni1EB7aeacuteuni01E3uni0180uni1E07ccircumflex
cdotaccentdcaronuni1E0Duni1E0Funi1E11ecaronemacronebreveeogonek
edotaccentuni1EB9uni1EBBuni1EBDuni1EBFuni1EC1uni1EC3uni1EC5uni1EC7uni1E17uni01F5gcircumflex
gdotaccentuni0123gcaronuni1E21uni00670303hcircumflexuni1E27uni1E25uni1E96uni1E29uni1E2Bhbaritildeimacronuni01D0iogonekuni1EC9uni1ECBibrevejcircumflexuni0137uni1E33uni1E35kgreenlandiclacutelcaronuni013Cuni1E37uni1E39uni1E3Bldotuni1E3Funi1E41uni1E43nacuteuni01F9ncaronuni0146uni1E45uni1E47uni1E49napostropheomacron
ohungarumlautuni01D2uni01EBuni1ECDuni1ECFuni1ED1uni1ED3uni1ED5uni1ED7uni1ED9obreveuni1E53ohornuni1EDBuni1EDDuni1EDFuni1EE1uni1EE3oslashacuteracuteuni0157rcaronuni1E59uni1E5Buni1E5Duni1E5Fsacutescircumflexuni1E67uni015Funi0219uni1E61uni1E63longstcaronuni0163uni021Buni1E6Duni1E6Funi1E97tbarutildeumacronubreveuring
uhungarumlautuni01D4uogonekuni01D6uni01D8uni01DAuni01DCuni1EE5uni1EE7uhornuni1EE9uni1EEBuni1EEDuni1EEFuni1EF1uni1E7Fwgravewacutewcircumflex	wdieresisygraveycircumflexuni1E8Funi1EF5uni1EF7uni1EF9zacute
zdotaccentuni1E91uni1E93uni1E95enguni0237ijuni006C00B7006Cuni01330301uni0250uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0251uni0299uni0259uni025Auni025Buni025Cuni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni029Cuni0268uni026Auni029Duni029Euni026Buni026Cuni026Duni026Euni029Funi026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0278uni0279uni027Auni027Buni027Duni027Euni0280uni0281uni0282uni0283uni0284uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni02A4uni02A6uni02A7uni0294uni0295uni02A1uni02A2uni01C2uni0298	uni014A.aa.aagrave.aaacute.a
acircumflex.aatilde.aadieresis.a	amacron.aabreve.aaring.aaringacute.a	uni01CE.a	uni1EA1.a	uni1EA3.a	uni1EA5.a	uni1EA7.a	uni1EA9.a	uni1EAB.a	uni1EAD.a	uni1EAF.a	uni1EB1.a	uni1EB3.a	uni1EB5.a	uni1EB7.a	aogonek.ag.a	uni01F5.a
gcircumflex.agbreve.agdotaccent.a	uni0123.agcaron.a	uni1E21.a
uni00670303.ai.a
dotlessi.aigrave.aiacute.a
icircumflex.aitilde.aidieresis.a	imacron.a	uni01D0.a	iogonek.a	uni1EC9.a	uni1ECB.a	uni012D.a	uni0268.a	iogonek.d
iogonek.da	uni0268.d
uni0268.da	uni029D.dl.alacute.alcaron.a	uni013C.a	uni1E37.a	uni1E39.a	uni1E3B.alslash.aldot.auni006C00B7006C.a	uni026B.a	uni026C.aAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9
AlphatonosEpsilontonosEtatonos	IotatonosIotadieresisOmicrontonosUpsilontonosUpsilondieresis
Omegatonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigmatauupsilonphichipsiomegauni03C2uni03D0uni03D1uni03D5phi.a
alphatonosepsilontonosetatonos	iotatonosiotadieresisomicrontonosupsilontonosupsilondieresis
omegatonosiotadieresistonosupsilondieresistonosuni03D7uni03D9uni03DBuni03DDuni03E1uni037E	anoteleia
anoteleia.capuni0374uni0375tonos	tonos.cap
dieresistonosuni037Auni1FBEuni1FBDuni1FBFuni1FFEuni1FEFuni1FFDuni1FCDuni1FDDuni1FCEuni1FDEuni1FCFuni1FDFuni1FC0uni1FEDuni1FEEuni1FC1uni1FBD.capuni1FFE.capuni1FEF.capuni1FFD.capuni1FCD.capuni1FDD.capuni1FCE.capuni1FDE.capuni1FCF.capuni1FDF.capuni0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0462uni0472uni0474uni0490uni0492uni0496uni0498uni049Auni04A0uni04A2uni04AAuni04AEuni04B0uni04B2uni04B6uni04BAuni04C0uni04C1uni04D0uni04D4uni04D6uni04D8uni04E2uni04E6uni04E8uni04EEuni04F2uni0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0463uni0473uni0475uni0491uni0493uni0497uni0499uni049Buni04A1uni04A3uni04ABuni04AFuni04B1uni04B3uni04B7uni04BBuni04C2uni04CFuni04D1uni04D5uni04D7uni04D9uni04E3uni04E7uni04E9uni04EFuni04F3	uni0430.a	uni04D1.auni0431.srb	uni0456.a	uni0457.a	uni04CF.auni2116zero.aone.a	zero.onumone.onumtwo.onum
three.onum	four.onum	five.onumsix.onum
seven.onum
eight.onum	nine.onumzero.bone.bzero.capone.captwo.cap	three.capfour.capfive.capsix.cap	seven.cap	eight.capnine.capzero.cone.c
quotereverseduni00ADuni2010
figuredashuni2015uni25E6uni25AAuni25ABuni25B4uni25B5uni25B8uni25B9uni25BEuni25BFuni25C2uni25C3	invbullet
filledrect
underscoredbluni203Euni203Funi2016	exclamdbluni2047uni2049uni2048uni203Duni2E18uni231Cuni231Duni231Euni231Funi27E6uni27E7uni2E22uni2E23uni2E24uni2E25uni2117uni2120at.case
asterisk.ahyphen.a	uni00AD.a	uni2010.adollar.a	zero.supsone.supstwo.sups
three.sups	four.sups	five.supssix.sups
seven.sups
eight.sups	nine.supsparenleft.supsparenright.supsperiod.sups
comma.sups	zero.subsone.substwo.subs
three.subs	four.subs	five.subssix.subs
seven.subs
eight.subs	nine.subsparenleft.subsparenright.subsperiod.subs
comma.subs	zero.dnomone.dnomtwo.dnom
three.dnom	four.dnom	five.dnomsix.dnom
seven.dnom
eight.dnom	nine.dnomparenleft.dnomparenright.dnomperiod.dnom
comma.dnom	zero.numrone.numrtwo.numr
three.numr	four.numr	five.numrsix.numr
seven.numr
eight.numr	nine.numrparenleft.numrparenright.numrperiod.numr
comma.numr
ordfeminine.aa.supsb.supsc.supsd.supse.supsf.supsg.supsh.supsi.supsj.supsk.supsl.supsm.supsn.supso.supsp.supsq.supsr.supss.supst.supsu.supsv.supsw.supsx.supsy.supsz.supsegrave.supseacute.supseogonek.supsuni0259.supsuni0266.supsuni02E0uni02E4a.supag.supai.supa
colon.supshyphen.supsendash.supsemdash.supsEurouni0192
colonmonetarylirauni20A6pesetauni20A9donguni20B1uni20B2uni20B4uni20B5uni20B9uni20BAuni20AEuni20B8uni20BDuni2215
slash.fraconethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215Auni2150	oneeighththreeeighthsfiveeighthsseveneighthsuni2151uni2152uni2189uni2219equivalence
revlogicalnotintersection
orthogonaluni2032uni2033uni2035uni00B5
integraltp
integralbtuni2206uni2126uni2200uni2203uni2237uni2105uni2113	estimateduni2190arrowupuni2192	arrowdownuni2196uni2197uni2198uni2199uni21D0uni21D1uni21D2uni21D3	arrowboth	arrowupdnarrowupdnbseuni25CFuni25CBuni25A0uni25A1uni2752uni25C6triagupuni25B3uni25B6uni25B7triagdnuni25BDuni25C0uni25C1triagrttriaglf	invcircleuni25C9uni2610uni2611uni2713musicalnotemusicalnotedblheartclubdiamondspade	smilefaceinvsmilefaceuni2764uni2615u1F4A9u1F916u1F512femalemalesunhouseuni02B9uni02BBuni02BCuni02BEuni02BFuni02C1uni02D0uni02D1uni02DEuni02C8uni02C9uni02CAuni02CBuni02CCuni25CCuni0300uni0300.capuni0340uni0301uni0301.cap	uni0301.guni0302uni0302.capuni0303uni0303.capuni0304uni0304.capuni0305uni0305.capuni0306	uni0306.cuni0306.capuni0306.ccapuni0307uni0307.capuni0308uni0308.capuni0309uni0309.capuni0310uni0310.capuni030Auni030A.capuni030Buni030B.capuni030Cuni030C.cap	uni030C.auni030Funi030F.capuni0311uni0311.capuni0312	uni0312.guni0313uni0343uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0323uni0324uni0325uni0326	uni0326.auni0327uni0327.capuni0328uni0328.capuni0329uni032Auni032Cuni032Euni032Funi0330uni0331uni0334uni0339uni033Auni033Buni033Cuni033Duni0342uni0342.capuni0345uni035Funi0361uni03080301uni03080301.cap
uni03080301.guni03080300uni03080300.cap
uni03080300.guni03080303uni03080304uni03080304.capuni0308030Cuni0308030C.capuni03020301uni03020301.capuni03020300uni03020300.capuni03020309uni03020309.capuni03020303uni03020303.capuni03060301uni03060301.capuni03060300uni03060300.capuni03060309uni03060309.capuni03060303uni03060303.capuni03020306uni03020306.capuni03040301uni03040301.capuni030C0307uni030C0307.capuni03120301uni03120300uni03120303uni03130301uni03130300uni03130303uni00A0uni2007
space.fracnbspace.fracuni2500uni2501uni2502uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250Buni250Cuni250Duni250Euni250Funi2510uni2511uni2512uni2513uni2514uni2515uni2516uni2517uni2518uni2519uni251Auni251Buni251Cuni251Duni251Euni251Funi2520uni2521uni2522uni2523uni2524uni2525uni2526uni2527uni2528uni2529uni252Auni252Buni252Cuni252Duni252Euni252Funi2530uni2531uni2532uni2533uni2534uni2535uni2536uni2537uni2538uni2539uni253Auni253Buni253Cuni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254Funi2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cuni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Funi2580uni2581uni2582uni2583uni2584uni2585uni2586uni2587uni2588uni2589uni258Auni258Buni258Cuni258Duni258Euni258Funi2590uni2591uni2592uni2593uni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259Funi202FuniFEFFu1F3B5u1F3B6f_if_luniE0A0uniE0A1uniE0A2uniE0B0uniE0B1uniE0B2uniE0B3ideoromnDFLTcyrlgreklatn�V�t
  !!""#')13577::==@@MM[[^^eevv������������������



$$**00??BBQQUU\\aassww�����������������������������	  ##&&56;;?@HHLNQRYY\^bbddffllnnqquu����������������������������

$%'-0146KLee�����EHn�#11BDHn
�(DFLTcyrl.grekXlatnl�� 
SRB ��	!��
"��#ATH &NSM 6SKS F��$��
%��&��'(ccmp�ccmp�ccmpccmp
ccmpccmpccmp"ccmp*frac2frac8frac>fracDfracJfracPfracVfrac\markbmarkvmark�mark�mark�mark�mark�mark�mkmkmkmkmkmkmkmkmkmkmkmk mkmk&mkmk,size2size6size:size>sizeBsizeFsizeJsizeN	
	
	
	
	
	
	
	








 d&.8BJT\dlt|��vxz�������b|�	n	�	�
Z
P���
�t�����2�� X���X���V��v�ZS������������������������������������������������������������������������������������x~x���xx���x����xxxxx������������r rr&x,2�x�xx8xx�>��D�rr  ��DJPV\bhn�tz��rr���r�r�������J�������rrr�r����������D
Dx�xxx�xxJ�r"x�(�x�x.(x�x,x�4:@�Frrr�rLrRr�r,�,�Z�K�V�J�D�F���@�.�0�<�=�@���Z�������\����>�A�0�d�/��'�B���+��B�\�D�?�%�"�T�`�n���-�6�N�#���{���&�G�����F�j�������J�%�,�2�2�H�H�HN��P�(�:��]�M�<�X�����	Z	`

,���	D	Lhh.djpv|�^�^��^^����������^������������^,^F�z]�?�@�Z'*�bk��:���6�N��jZZZZZZZZZZZZZZZZZZZZZZZ}���� &�,28��>��D�JPV\bhntz8����������b��&��V�hz����n�DD����V2��������D��h���z�
"(��.4:@�F����LRX^2V�ddd�dddd���jp�,��X��&��M�����J��R��]�����@��9��.��<��6��T��0��#��:��\���%O�������%�%���5��|���%P��"��2��i�%��h��3�%����&�%F��,�a���%�%��%e�%W����%��%��0�%H�%6�%�%`��|�%/���N��K�%��H���������
,��Q �Q���",�����������HHDJ>>>>PV>\bDDDh>nPPPtV>JJJJzz>,���d����6�P�2ZShnhhnhhnhnhnhnhhnnhnhnhnhnhnhnhnhnhnhhhhhhhnhnhhnhhhnhnhnhnhnhnhnhnhnhnhnhnhnhhhhhh&&,28822>DJP,�,�,j,�,L,>,�,i,[,TGF,!#$%&'/(a�������������������	#"%+,4�������������������	hjFG�E JJJMMKinLR�# 11(BD)Hn,�	

!#$%&')*+,-./01345@M[e���������
QUaw��������������������������������������	
56?@HLMNQRY\]^bdflnqu��������������
$%'()*+,-01456KLe�&�23.	

!#$')*-./035M��U���?@LRY\]�$%(06<>AEE}	

!#$%&')*+,-./01345M[�����Ua��������������������������������������	
6?@LQRY\]^du��=
'R�'*�45
$*047:=^��
*Us #&?@���	


��DFLTcyrlfgreklatnR��! (08@HPX`hpx����������������
SRB T��"	!)19AIQYaiqy�������������������"
"*2:BJRZbjrz�������������������"#+3;CKS[cks{����������������ATH ^NSM �SKS ���!$,4<DLT\dlt|���������������	��!
%-5=EMU]emu}���������������
��"&.6>FNV^fnv~������������������"'/7?GOW_gow����������������
casePcaseVcase\casebcasehcasencasetcasezccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�ccmp�cv01�cv01�cv01�cv01cv01cv01cv01cv01cv02 cv02&cv02,cv022cv028cv02>cv02Dcv02Jcv04Pcv04Vcv04\cv04bcv04hcv04ncv04tcv04zcv06�cv06�cv06�cv06�cv06�cv06�cv06�cv06�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv07�cv08�cv08�cv08�cv08�cv08�cv08�cv08cv08
cv09cv09cv09cv09"cv09(cv09.cv094cv09:cv10@cv10Fcv10Lcv10Rcv10Xcv10^cv10dcv10jcv11pcv11vcv11|cv11�cv11�cv11�cv11�cv11�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv12�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv14�cv15	cv15	cv15	cv15	cv15	cv15	cv15	$cv15	*cv16	0cv16	6cv16	<cv16	Bcv16	Hcv16	Ncv16	Tcv16	Zcv17	`cv17	fcv17	lcv17	rcv17	xcv17	~cv17	�cv17	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�dnom	�frac	�frac	�frac	�frac	�frac	�frac	�frac
frac
locl
 locl
&locl
.locl
4locl
:numr
@numr
Fnumr
Lnumr
Rnumr
Xnumr
^numr
dnumr
jonum
ponum
vonum
|onum
�onum
�onum
�onum
�onum
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�ordn
�salt
�salt
�saltsalt$salt@salt\saltxsalt�sinf�sinf�sinf�sinf�sinf�sinf�sinf�sinf�ss01�ss01�ss01�ss01�ss01ss01ss01ss01ss02 ss02(ss020ss028ss02@ss02Hss02Pss02Xss03`ss03jss03tss03~ss03�ss03�ss03�ss03�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss04�ss05�ss05�ss05�ss05�ss05
ss05
ss05
ss05
ss06
 ss06
&ss06
,ss06
2ss06
8ss06
>ss06
Dss06
Jss07
Pss07
Vss07
\ss07
bss07
hss07
nss07
tss07
zsubs
�subs
�subs
�subs
�subs
�subs
�subs
�subs
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�sups
�zerozerozerozerozerozerozero$zero*								@:4.("������������������������������~xrltnhb\VPJRLF@:4.(0*$����������������������������~��ztnhb\























        ����������������~tj`VPJD>82,&$������������ � � � � � � � 	

$JRZbjr~���������������&.6>FNV^fn,*0.,z����������� 2<x���� Vh�������������!#L
 &,28>DJP  **
U���������!��!��"�:d��$U�S�Yc	W$]�[�a_aC$*06<K�M�H�JNOQNC &,j�j�i�ikkC &,m�m�l�lnnC�,6@JT`jt~����������@4e4v�4�
�4�4
4$04B?2Q4��'\w4��4���;2*v"�d"� !$%"#�

����#��#���#�)*+,-./0123456789:;<=>?@ABCDEFG��������������rMNOP�����	NR9�������������������������35CILPRTVXZ\^`bdfP !"#$%&'(5)*+,-./01234ef'J:
6789:;<=>K6 ?RABCDEFGHIJK@STUVWXYZ[L\]NPhijL4444
8C<<��<
<
@
M4N4*(U�MOQNP��35CILPRTVXZ\^`bdf(q

r��� "	
_b��+.qt�A_�+q	b�.t��A$4��	

CHKOQSUWY[]_ace?$%Q��HL	!#

 "$'*/0�66Y[[>]x?zz[|�\�����������^~���!��	

24CHKOQSUWY[]_ace!��35CILPRTVXZ\^`bdfmv��
���!o
hj%
qr5)*00��������mv9��mnopqrstuvxyz{|}~������	

24CHKOQSUWY[]_ace\\&&))"";B//	 $'JKLMNOPQRSTU[\]^_`ab����MO@A[1���my����Rnnz�$?($%Q��HL��	

24CHKOQSUWY[]_ace%ooPK-"#[�TB��Ngems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtmlnu�[���<div id="file-list-section" class="nav-section">
  <h3>Defined In</h3>

  <ul>
<%- klass.in_files.each do |tl| -%>
    <li><%= h tl.relative_name %>
<%- end -%>
  </ul>
</div>
PK-"#[[�L�>>Bgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/index.rhtmlnu�[���<body id="top" role="document" class="file">
<nav role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>

    <%= render '_sidebar_search.rhtml' %>
  </div>

  <div id="project-metadata">
    <%= render '_sidebar_pages.rhtml' %>
    <%= render '_sidebar_classes.rhtml' %>
  </div>
</nav>

<main role="main">
<%- if @options.main_page and
      main_page = @files.find { |f| f.full_name == @options.main_page } then %>
<%= main_page.description %>
<%- else -%>
<p>This is the API documentation for <%= @title %>.
<%- end -%>
</main>
PK-"#[�3�^^Dgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_footer.rhtmlnu�[���<footer id="validator-badges" role="contentinfo">
  <p><a href="https://validator.w3.org/check/referer">Validate</a>
  <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> <%= RDoc::VERSION %>.
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>
PK-"#[B�Y��Bgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/class.rhtmlnu�[���<body id="top" role="document" class="<%= klass.type %>">
<nav role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>
    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_table_of_contents.rhtml' %>

  <div id="class-metadata">
    <%= render '_sidebar_sections.rhtml' %>
    <%= render '_sidebar_parent.rhtml' %>
    <%= render '_sidebar_includes.rhtml' %>
    <%= render '_sidebar_extends.rhtml' %>
    <%= render '_sidebar_methods.rhtml' %>
  </div>
</nav>

<main role="main" aria-labelledby="<%=h klass.aref %>">
  <h1 id="<%=h klass.aref %>" class="<%= klass.type %>">
    <%= klass.type %> <%= klass.full_name %>
  </h1>

  <section class="description">
    <%= klass.description %>
  </section>

  <%- klass.each_section do |section, constants, attributes| -%>
  <section id="<%= section.aref %>" class="documentation-section">
    <%- if section.title then -%>
    <header class="documentation-section-title">
      <h2>
        <%= section.title %>
      </h2>
      <span class="section-click-top">
        <a href="#top">&uarr; top</a>
      </span>
    </header>
    <%- end -%>

    <%- if section.comment then -%>
    <div>
      <%= section.description %>
    </div>
    <%- end -%>

    <%- unless constants.empty? then -%>
    <section class="constants-list">
      <header>
        <h3>Constants</h3>
      </header>
      <dl>
      <%- constants.each do |const| -%>
        <dt id="<%= const.name %>"><%= const.name %>
        <%- if const.comment then -%>
        <dd><%= const.description.strip %>
        <%- else -%>
        <dd class="missing-docs">(Not documented)
        <%- end -%>
      <%- end -%>
      </dl>
    </section>
    <%- end -%>

    <%- unless attributes.empty? then -%>
    <section class="attribute-method-details" class="method-section">
      <header>
        <h3>Attributes</h3>
      </header>

      <%- attributes.each do |attrib| -%>
      <div id="<%= attrib.aref %>" class="method-detail">
        <div class="method-heading attribute-method-heading">
          <span class="method-name"><%= h attrib.name %></span><span
            class="attribute-access-type">[<%= attrib.rw %>]</span>
        </div>

        <div class="method-description">
        <%- if attrib.comment then -%>
        <%= attrib.description.strip %>
        <%- else -%>
        <p class="missing-docs">(Not documented)
        <%- end -%>
        </div>
      </div>
      <%- end -%>
    </section>
    <%- end -%>

    <%- klass.methods_by_type(section).each do |type, visibilities|
       next if visibilities.empty?
       visibilities.each do |visibility, methods|
         next if methods.empty? %>
     <section id="<%= visibility %>-<%= type %>-<%= section.aref %>-method-details" class="method-section">
       <header>
         <h3><%= visibility.to_s.capitalize %> <%= type.capitalize %> Methods</h3>
       </header>

    <%- methods.each do |method| -%>
      <div id="<%= method.aref %>" class="method-detail <%= method.is_alias_for ? "method-alias" : '' %>">
        <%- if (call_seq = method.call_seq) then -%>
        <%-   call_seq.strip.split("\n").each_with_index do |call_seq, i| -%>
        <div class="method-heading">
          <span class="method-callseq">
            <%= h(call_seq.strip.
                  gsub( /^\w+\./m, '')).
                  gsub(/(.*)[-=]&gt;/, '\1&rarr;') %>
          </span>
          <%- if i == 0 and method.token_stream then -%>
          <span class="method-click-advice">click to toggle source</span>
          <%- end -%>
        </div>
        <%-   end -%>
        <%- else -%>
        <div class="method-heading">
          <span class="method-name"><%= h method.name %></span><span
            class="method-args"><%= h method.param_seq %></span>
          <%- if method.token_stream then -%>
          <span class="method-click-advice">click to toggle source</span>
          <%- end -%>
        </div>
        <%- end -%>

        <div class="method-description">
          <%- if method.comment then -%>
          <%= method.description.strip %>
          <%- else -%>
          <p class="missing-docs">(Not documented)
          <%- end -%>
          <%- if method.calls_super then -%>
            <div class="method-calls-super">
              Calls superclass method
              <%=
                  method.superclass_method ?
                  method.formatter.link(method.superclass_method.full_name, method.superclass_method.full_name) : nil
              %>
            </div>
          <%- end -%>

          <%- if method.token_stream then -%>
          <div class="method-source-code" id="<%= method.html_name %>-source">
            <pre><%= method.markup_code %></pre>
          </div>
          <%- end -%>
        </div>

        <%- unless method.aliases.empty? then -%>
        <div class="aliases">
          Also aliased as: <%= method.aliases.map do |aka|
            if aka.parent then # HACK lib/rexml/encodings
              %{<a href="#{klass.aref_to aka.path}">#{h aka.name}</a>}
            else
              h aka.name
            end
          end.join ", " %>
        </div>
        <%- end -%>

        <%- if method.is_alias_for then -%>
        <div class="aliases">
          Alias for: <a href="<%= klass.aref_to method.is_alias_for.path %>"><%= h method.is_alias_for.name %></a>
        </div>
        <%- end -%>
      </div>

    <%- end -%>
    </section>
  <%- end
     end %>
  </section>
<%- end -%>
</main>
PK-"#[	O2]]Ogems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtmlnu�[���<div id="home-section" class="nav-section">
  <h3>Documentation</h3>

  <ul>
  <%- installed.each do |name, href, exists, type, _| -%>
    <%- next if type == :extra -%>
    <li class="folder">
    <%- if exists then -%>
      <a href="<%= href %>"><%= h name %></a>
    <%- else -%>
      <%= h name %>
    <%- end -%>
  <%- end -%>
  </ul>
</div>
PK-"#[
N��NNNgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtmlnu�[���<body role="document">
<nav role="navigation">
  <%= render '_sidebar_navigation.rhtml' %>

  <%= render '_sidebar_search.rhtml' %>

  <div id="project-metadata">
    <%= render '_sidebar_pages.rhtml' %>
    <%= render '_sidebar_classes.rhtml' %>
  </div>
</nav>

<main role="main">
  <h1>Not Found</h1>

  <p><%= message %>
</main>

PK-"#[��QCCNgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtmlnu�[���<%- unless klass.sections.length == 1 then %>
<div id="sections-section" class="nav-section">
  <h3>Sections</h3>

  <ul class="link-list" role="directory">
    <%- klass.sort_sections.each do |section| -%>
      <li><a href="#<%= section.aref %>"><%= h section.title %></a></li>
    <%- end -%>
  </ul>
</div>
<%- end -%>
PK-"#[鿶�Ngems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/table_of_contents.rhtmlnu�[���<body id="top" class="table-of-contents">
<main role="main">
<h1 class="class"><%= h @title %></h1>

<%- simple_files = @files.select { |f| f.text? } -%>
<%- unless simple_files.empty? then -%>
<h2 id="pages">Pages</h2>
<ul>
<%- simple_files.sort.each do |file| -%>
  <li class="file">
    <a href="<%= file.path %>"><%= h file.page_name %></a>
<%
   # HACK table_of_contents should not exist on Document
   table = file.parse(file.comment).table_of_contents
   unless table.empty? then %>
    <ul>
<%- table.each do |heading| -%>
      <li><a href="<%= file.path %>#<%= heading.aref %>"><%= heading.plain_html %></a>
<%-   end -%>
    </ul>
<%- end -%>
  </li>
  <%- end -%>
</ul>
<%- end -%>

<h2 id="classes">Classes and Modules</h2>
<ul>
<%- @modsort.each do |klass| -%>
  <li class="<%= klass.type %>">
    <a href="<%= klass.path %>"><%= klass.full_name %></a>
<%- table = []
   table.concat klass.parse(klass.comment_location).table_of_contents
   table.concat klass.section_contents

   unless table.empty? then %>
    <ul>
<%- table.each do |item| -%>
      <li><a href="<%= klass.path %>#<%= item.aref %>"><%= item.plain_html %></a>
<%-   end -%>
    </ul>
<%- end -%>
  </li>
<%- end -%>
</ul>

<h2 id="methods">Methods</h2>
<ul>
<%- @store.all_classes_and_modules.map do |mod|
     mod.method_list
   end.flatten.sort.each do |method| %>
  <li class="method">
    <a href="<%= method.path %>"><%= h method.pretty_name %></a>
    &mdash;
    <span class="container"><%= method.parent.full_name %></span>
<%- end -%>
</ul>
</main>
PK-"#[^mqMgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtmlnu�[���<div id="classindex-section" class="nav-section">
  <h3>Class and Module Index</h3>

  <ul class="link-list">
  <%- @modsort.each do |index_klass| -%>
    <li><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.full_name %></a>
  <%- end -%>
  </ul>
</div>
PK-"#[E`��Mgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtmlnu�[���<%- unless klass.method_list.empty? then %>
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    <%- klass.each_method do |meth| -%>
    <li <%- if meth.calls_super %>class="calls-super" <%- end %>><a href="#<%= meth.aref %>"><%= meth.singleton ? '::' : '#' %><%= h meth.name -%></a>
    <%- end -%>
  </ul>
</div>
<%- end -%>
PK-"#[5����Ngems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtmlnu�[���<%- unless klass.includes.empty? then %>
<div id="includes-section" class="nav-section">
  <h3>Included Modules</h3>

  <ul class="link-list">
  <%- klass.each_include do |inc| -%>
  <%- unless String === inc.module then -%>
    <li><a class="include" href="<%= klass.aref_to inc.module.path %>"><%= inc.module.full_name %></a>
  <%- else -%>
    <li><span class="include"><%= inc.name %></span>
  <%- end -%>
  <%- end -%>
  </ul>
</div>
<%- end -%>
PK-"#[��Cgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/js/search.jsnu�[���Search = function(data, input, result) {
  this.data = data;
  this.input = input;
  this.result = result;

  this.current = null;
  this.view = this.result.parentNode;
  this.searcher = new Searcher(data.index);
  this.init();
}

Search.prototype = Object.assign({}, Navigation, new function() {
  var suid = 1;

  this.init = function() {
    var _this = this;
    var observer = function(e) {
      switch(e.keyCode) {
        case 38: // Event.KEY_UP
        case 40: // Event.KEY_DOWN
          return;
      }
      _this.search(_this.input.value);
    };
    this.input.addEventListener('keyup', observer);
    this.input.addEventListener('click', observer); // mac's clear field

    this.searcher.ready(function(results, isLast) {
      _this.addResults(results, isLast);
    })

    this.initNavigation();
    this.setNavigationActive(false);
  }

  this.search = function(value, selectFirstMatch) {
    value = value.trim().toLowerCase();
    if (value) {
      this.setNavigationActive(true);
    } else {
      this.setNavigationActive(false);
    }

    if (value == '') {
      this.lastQuery = value;
      this.result.innerHTML = '';
      this.result.setAttribute('aria-expanded', 'false');
      this.setNavigationActive(false);
    } else if (value != this.lastQuery) {
      this.lastQuery = value;
      this.result.setAttribute('aria-busy',     'true');
      this.result.setAttribute('aria-expanded', 'true');
      this.firstRun = true;
      this.searcher.find(value);
    }
  }

  this.addResults = function(results, isLast) {
    var target = this.result;
    if (this.firstRun && (results.length > 0 || isLast)) {
      this.current = null;
      this.result.innerHTML = '';
    }

    for (var i=0, l = results.length; i < l; i++) {
      var item = this.renderItem.call(this, results[i]);
      item.setAttribute('id', 'search-result-' + target.childElementCount);
      target.appendChild(item);
    };

    if (this.firstRun && results.length > 0) {
      this.firstRun = false;
      this.current = target.firstChild;
      this.current.classList.add('search-selected');
    }
    //TODO: ECMAScript
    //if (jQuery.browser.msie) this.$element[0].className += '';

    if (isLast) this.result.setAttribute('aria-busy', 'false');
  }

  this.move = function(isDown) {
    if (!this.current) return;
    var next = isDown ? this.current.nextElementSibling : this.current.previousElementSibling;
    if (next) {
      this.current.classList.remove('search-selected');
      next.classList.add('search-selected');
      this.input.setAttribute('aria-activedescendant', next.getAttribute('id'));
      this.scrollIntoView(next, this.view);
      this.current = next;
      this.input.value = next.firstChild.firstChild.text;
      this.input.select();
    }
    return true;
  }

  this.hlt = function(html) {
    return this.escapeHTML(html).
      replace(/\u0001/g, '<em>').
      replace(/\u0002/g, '</em>');
  }

  this.escapeHTML = function(html) {
    return html.replace(/[&<>]/g, function(c) {
      return '&#' + c.charCodeAt(0) + ';';
    });
  }

});

PK-"#[��13	3	Egems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/js/darkfish.jsnu�[���/**
 *
 * Darkfish Page Functions
 * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
 *
 * Author: Michael Granger <mgranger@laika.com>
 *
 */

/* Provide console simulation for firebug-less environments */
/*
if (!("console" in window) || !("firebug" in console)) {
  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() {};
};
*/


function showSource( e ) {
  var target = e.target;
  while (!target.classList.contains('method-detail')) {
    target = target.parentNode;
  }
  if (typeof target !== "undefined" && target !== null) {
    target = target.querySelector('.method-source-code');
  }
  if (typeof target !== "undefined" && target !== null) {
    target.classList.toggle('active-menu')
  }
};

function hookSourceViews() {
  document.querySelectorAll('.method-heading').forEach(function (codeObject) {
    codeObject.addEventListener('click', showSource);
  });
};

function hookSearch() {
  var input  = document.querySelector('#search-field');
  var result = document.querySelector('#search-results');
  result.classList.remove("initially-hidden");

  var search_section = document.querySelector('#search-section');
  search_section.classList.remove("initially-hidden");

  var search = new Search(search_data, input, result);

  search.renderItem = function(result) {
    var li = document.createElement('li');
    var html = '';

    // TODO add relative path to <script> per-page
    html += '<p class="search-match"><a href="' + index_rel_prefix + result.path + '">' + this.hlt(result.title);
    if (result.params)
      html += '<span class="params">' + result.params + '</span>';
    html += '</a>';


    if (result.namespace)
      html += '<p class="search-namespace">' + this.hlt(result.namespace);

    if (result.snippet)
      html += '<div class="search-snippet">' + result.snippet + '</div>';

    li.innerHTML = html;

    return li;
  }

  search.select = function(result) {
    window.location.href = result.firstChild.firstChild.href;
  }

  search.scrollIntoView = search.scrollInWindow;
};

document.addEventListener('DOMContentLoaded', function() {
  hookSourceViews();
  hookSearch();
});
PK-"#[g:��Ngems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtmlnu�[���<%- if !svninfo.empty? then %>
<div id="file-svninfo-section" class="nav-section">
  <h3>VCS Info</h3>

  <div class="section-body">
    <dl class="svninfo">
      <dt>Rev
      <dd><%= svninfo[:rev] %>

      <dt>Last Checked In
      <dd><%= svninfo[:commitdate].strftime('%Y-%m-%d %H:%M:%S') %>
        (<%= svninfo[:commitdelta] %> ago)

      <dt>Checked in by
      <dd><%= svninfo[:committer] %>
    </dl>
  </div>
</div>
<%- end -%>
PK-"#[{wj�Igems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/servlet_root.rhtmlnu�[���<body role="document">
<nav role="navigation">
  <div id="project-navigation">
    <div id="home-section" class="nav-section">
      <h2>
        <a href="<%= rel_prefix %>/" rel="home">Home</a>
      </h2>
    </div>

    <%= render '_sidebar_search.rhtml' %>
  </div>

<%= render '_sidebar_installed.rhtml' %>
</nav>

<main role="main">
  <h1>Local RDoc Documentation</h1>

  <p>Here you can browse local documentation from the ruby standard library and
  your installed gems.

<%- extra_dirs = installed.select { |_, _, _, type,| type == :extra } -%>
<%- unless extra_dirs.empty? -%>
  <h2>Extra Documentation Directories</h2>

  <p>The following additional documentation directories are available:</p>

  <ol>
  <%- extra_dirs.each do |name, href, exists, _, path| -%>
    <li>
    <%- if exists -%>
      <a href="<%= href %>"><%= h name %></a> (<%= h path %>)
    <%- else -%>
      <%= h name %> (<%= h path %>; <i>not available</i>)
    <%- end -%>
    </li>
  <%- end -%>
  </ol>
<%- end -%>

<%- gems = installed.select { |_, _, _, type,| type == :gem } -%>
<%- missing = gems.reject { |_, _, exists,| exists } -%>
<%- unless missing.empty? then -%>
  <h2>Missing Gem Documentation</h2>

  <p>You are missing documentation for some of your installed gems.
  You can install missing documentation for gems by running
  <kbd>gem rdoc --all</kbd>.  After installing the missing documentation you
  only need to reload this page.  The newly created documentation will
  automatically appear.

  <p>You can also install documentation for a specific gem by running one of
  the following commands.

  <ul>
  <%- names = missing.map { |name,| name.sub(/-([^-]*)$/, '') }.uniq -%>
  <%- names.each do |name| -%>
    <li><kbd>gem rdoc <%=h name %></kbd>
  <%- end -%>
  </ul>
<%- end -%>
</main>
PK-"#[h˟�eeKgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/tag_green.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˅�I�a��O�Uÿ �{�bFc�N4FMt�n����-=�6c li4�BH!�(�dX�՗���.U�>����B�ZE�RA�\F�TB�XD�P�������}!���r��^�C2��^�@�I`�&���tl�$�ɝ�,S3M�D.��'�	��9�0�NCӴ�������Y6��)F?��2���m$	�b�
�@�W��H<���N��t͐x��j�D"�5��v���1o��f�����^���g��V�f�I.l���f����hě��9<��V��O�C|8��i4�>��C8%�J�lGk8�z����#�S�mȉr�X���Z�\@��{�x<.���`����^o�r�Ō��B�x<��^��'��j��}���U�����1���}Q�W��hT��]"�k�L|�s���n���ێ#�~�ߢK\}b���x'�BQ'{i��^�o�PȲ��z��].�c�)��weS�L|iW��(��SIEND�B`�PK-"#[�=V��Ugems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<aIDAT(�c�π2�Q��������+�/ދE����p�,
�%ւ��)X���C�۱)X�dB=6���P�M��u]�[�z+����_70!I�ȓzS5��IEND�B`�PK-"#[�S�Egems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bug.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˝��OSQ�\^[�تtz��%l$�*�**�2:�
iRp�����
�c0���ąKw&&`44���(�e��K�ɽ�w�wrO��X�\���Hi�s�cUQz@��������;քId�Taˀ���)j���C'يKT��8=����ʯ�9ނ^z�����Θ���1OF�Z�[��W�-G�z�?���&�%*��M���Gn�N!�aO>Nc��[ɨX·��0N��qg*�1Su��b|�{g|�fz)̾����&\
��5\	�0	�3�i�D��;`|�0>A?Tx4^���`�o�qs��`>ʦ�`��fC��v�@m�X����[r\���At.��)�G�[Ì�����`��N1���)�B������W�s+�:�Nd��s�V�a�*D�X.pB�&B�]���H@T�3@�Pڏڠ	wV�P6��3yp-�����4�Ǽ

�$�H�'��9��{m@�U�$�ZjC���X�:T��g����L�:�:�?��[#��{1��P=.2���F\�i���A-D
7�7q��XI��פb4�ka��Aj�%
ͼj&Q˫H��&�s.��
`�j������KLE3�*ΫXw�6��_�l���=�@�����h�ߊv��,qq��IEND�B`�PK-"#[0���Ggems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/brick.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<VIDAT�?HT��ݝ��^ٟ�
ju
��ɥ����pOhi/���8ԩ�!�p*��0��Ў��;��}E�,tn�M2��|13 "by��K�$i�^NFD��Й�;��4eZ|�U�j|��jf^��$ig)kY�b�I��u�K��W��P�cJ'U>�4�MK����B݆�eS��J���tO9�iԄ
�ʆ���n#2����u`� *�����_�
�R4���+�*����B����u���Ϙ�MY�U׷o���AaL��G��۽�kE�|"�2w��9�m�[�y�Gw�S��B�3{��e�r�~�㫹��<�{
@���%
�@�IEND�B`�PK-"#[$V���Mgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngnu�[����PNG


IHDR��csBIT|d�	pHYs��~�tEXtSoftwareAdobe Fireworks CS3��FtEXtCreation Time7/16/07Z��(IDATH���A0!��U[
Gϱ�JJJJJJJJJ�Y�����IEND�B`�PK-"#[�Z�mmLgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/page_green.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT�?��s��~~���TI�!!�b�F� ,H8���b�1a5�l�
�N�QB� b`�^8M�A��~����y*��޿�����\�)(��0���k��������J�������i�ΆIH ���q�����~����{�СM�кOg��Ԫ(2X2�s��,�}�O>�};���x��3o}~�W�tܠ��$��S�j�bjLEMa8�����y�޿��ww>�����J�Ҫ�*m*��u�=g6=W�|�v�jz
:@B�(%U�Z��4�\��1���m��f��j"�j��A�ƚ6��hT��*J	�V��ZJZ$@�1�0PHZ�(}
)B�e����� @)zc�Ԋe����0�2FH����d�#�����W?�9��</����;���C�9�A��x�y���轍y3t�-�;��w^�t'I����WM����eС*>��W����i!�Gc��{s��ގl6�IEND�B`�PK-"#[���(VVQgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/page_white_text.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT�1nSA��Ǟ�4A����(�I�Sp.KPp"��Q�A�7%����1Ӣ�;���+���Z######����DWk=�C��?����|��X��j�9昇���S�ekMs9���NNV��G@���kD)��4�hn�������.Q�@�nJ)1]:�;1@���T��:�t���i��:���I�$fM��-�+g�]����^LvIEND�B`�PK-"#[�P��Hgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/delete.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<]IDAT8˥��KSa�[���n��QP��2w��ܦγL�[,bi��a�A��\�C��v��_2Ml�ZFjס���NMjm��kʷ�`&.#z�����<ϓ ���bV��P�T3�%�I��{G��qRiv�ȅ�
�tz�#E��6����Edd���J�`���DR�2<]N��;�4�Ѿ;���m>�7��8��ɀQe6�L�I���t��殷c�q!z�|v��j�/Xi���@��
�%1|h���l� !���|������!
�Y#�u�U�N�w]�˼H3��u�	t]E��>k%�I�f��o���R��D:�0��`�~�|�
���(r�
�on�3oG0!�$����V��
�*[W0_������-+���� d��W�&�2�ZfMF��VJp�iF&B��
>��R���g�-� �~	C�m��ڴ���ER�
ឫ� p�5ްy����+��21���K�aw�h�`� ��#���a�Z񽞆�T�Zo���L��ѓ���`"�(?��'��ˎJv�K�ކ��|�:�G9[�a�w8�2
Jw��f'��y����m�zsӘ��Tsw��_��_��ιIr�IEND�B`�PK-"#[Os~���Egems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/add.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<oIDAT8˥��K�a��[�/���Y(�)%X(o�l��Nۖsk��n.���-����h�;8�f���E��P��"jï��MGˈ�}yພ羹�$I���.t�u���lu���	AX��:�𼂒Z�H�h1�D�nZJ�OJB��{�Z����?�`2`��S���=�N$��ő�=;��a��&j�w��q�JG�#�<"N���2h8�޵`��6���x�ցn_+~��Zto��}`���x%XЛ͈	hXѿ�ƻ/��}���B�J�_G�&�|Q�r-��6��AރEL�⬡\�U3:WUh[�C6+�	6.f� �*��K͸ܝF��q�����ou4܄?�d�|X���ҥ�Mv��D`�
*_���[
���#A���2��0li��R�|x�q`4w=\������u�Q	��m+G��|%$��5��Թ���5�RO*�YGM��UO��G�qj4ְ(X�&
s1�c�˭(LV�f�
R���d�j��Q	'-1��A�TA>U	�j4,�p�V�"4L$e�@.ArB���Y a~m�y���Y])Q8tN�L���ܞt2��"��I	���
�o=C�S��d�)�_��_�AF�(�IEND�B`�PK-"#[�CCJUUIgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/package.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8�}�Kh\u��{g�̝4�L���)�B�1>�n\��F��)��PAD��Q�TWf!�"؍�����`�HC0ijC�1ͳ��L�fw���(v!�g}�6�9���)wyc�/T4�"����Գ�X�8ѫ������̛v���כ*��������WGU}[E>����7�&����t�Ji�G�+*rQE�>�{�	`�����=�����9o/ror��g�aw=MЪ�U��Q��VcƏ�;}ź;q�D�>��r��7j�T�1a��U&m�8�6��l7K���Vio{�Ǥ9s���VԨ�,O"a��Wū���mpt�k��.h-��V}�����֯K��*�R�\�M�-Юޡ�'O�'C�U0)�7����9Ms�&�3�P#����V
'w'�ů� �
N,�o��p���#�LRi4�Q�j��h�]��G�S\���;Q���Ƥ��B�H��`�1����@<Ѐd�^�{�9�]� �!���"���dlǁD�	@|0mp��
���Q���
a+��k��K7����
�"$���� h$?$�B�r�N#&Cif
�N�7�S���V[�6��l�a�L/Hb�F�6�t����X�=�ֽɕد}��GO�|뻗zU�C5r���h�8�D>��)4V�w���ͦ�|�"������L\>2�FΫ�[�^y�jW��?�'q{�g�Bi��o�.��ȧ��T��c��t�ܲ^&��IEND�B`�PK-"#[(?�Y��Ngems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bullet_black.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<eIDAT(�c�π2.�R�
�We��7JaWА�����\
X�]��?���XH^��?���
��7��3`��[����*60H
ڐ��s���VIEND�B`�PK-"#[���<XXJgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/tag_blue.pngnu�[����PNG


IHDR�agAMA��7��iCCPICC Profilex�T�k�P��e���:g	>h�ndStC��kW��Z�6�!H��m\��$�~�ًo:�w�>�كo{�
�a���"L�"���4M'S�����9'��^��qZ�/USO������^C+�hM��J&G@Ӳy���lt�o߫�c՚�� ��5�"�Y�i\�t�։�15��LsX�	g8oc�ግ#�f45@�	��B:K�@8�i��
�΁�'&��.�<�ER/�dE���s��_���雭��m�N�|��9}p���?_�A��pX6�5~B�$�&���ti��e��Y)%$�bT�3li�������P���4�43Y���P��1��KF��ۑ��5>�)�@����r��y������[�:V���ͦ#��wQ?HB��d(�Ba�cĪ�L"J��itTy�8�;(���Gx�_�^�[�����%׎��ŷ��Q�麲�ua��n�7��m�Q���H^e�O�Q�u6�S��u�2��%vX���^�*l
O�—����ޭˀq,>��S���%�L��d����B���1CZ��$M��9��P'w����\/����]��.r#���E|!�3�>_�o�a�۾�d�1Z�ӑ���z���'�=������~V+��cjJ�tO%mN�����|��-���bW�O+
o�^�I�H�.�;���S�]�i_s9�*p����.7U^��s.�3u�	�|^,��<����;�c�=ma��>V��t.[��՟Ϫ����x���#
�¡_2	pHYs��diTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xmp="http://ns.adobe.com/xap/1.0/">
         <xmp:CreatorTool>Adobe ImageReady</xmp:CreatorTool>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
�z`IDAT8}RMka~vW#�j-�V�&ZjR
��B��"�Q�����!z�R!��JA��"��T	~zi*U��̶��G_�ݝ}g��yEQp�:::�+��z2��t�~&΍�o*��L�o�$��d2�e�e�
'�V @4�3H6��DX�0O���@(R���m���F�ٍ��od��F���ɾ͇xU�p:<"��N�����T�d�}����\��3��,@��A�Z�������r��r��7�!��� ��tZ����W�w��F��_�Z�>���lhR���lޢl�k1��<\�ؼ
��*��q:����Z�UB:������{ے�ܡP�@M���elۀ^��z�>�:�D"1�iX��Z
{�e<��)iJl�
E�n)�ev��`PO�y����db=;;C��X��.�c���k�1k&8�j���ר_���d��{~?j�c�fi�R�ԡs�b��O����A����9��&�yd�V;�8�����$�p.r�=�XL���v�}�@!Oa�X,*�C�;���z�����J��n���Y�T��a�B��!�^�L{n�7��k���IEND�B`�PK-"#[��AaaMgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/transparent.pngnu�[����PNG


IHDR%=m"PLTE������tRNS@��fIDATc` 
0���zIEND�B`�PK-"#[��Q��Rgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifnu�[���GIF89a�
���������������������������������������������������������������!�NETSCAPE2.0!�
,�
� �@Ri�h��l�p,�tm�#6N���+�r��rD4�h��@F�Cjz]L�����j�]﹬�R���3-���H$w�Py���|KI��������\K�������Q\���]P��I������������~$�
~�	
��������������������������J�������������������%:`���@X�P@AO	2|�(�D��**�H�E�}l�F�=��$��Ƌ@\9��L�J(��)?�

``��C�=�4�RO@�>}5�TDU�^=�U�Q�H�~���X�e���֫��:<��!���b`�^O�v��y':<�/%Ƅ��E��n`ʎ3A�����Ɗ�~�`�۸Rf*�4�L����E3��DZ�[�����FU��պ�g*>|Ao��G��4Q�]���V;��ޙ
<��G)��}����SvO�<}��&p���y��]�Xg
X�
�`�"1���A� fJh!�B2�8'�m
��uљtbj)򖜊��H	s6.7�L;jԣJ?���p6���l�@k[���-)��P��V�X���fQ9�{f�ĥZ^v	&��0�
l���p�)g9P!�
,�� EMb��T��5+��k��sl�y���[�J;��w3iH�ʒ:�Q��X�R$�Á��511��@��eg;=��(g�ڙ��n%pf�"�|��w}��zv[xE%`	+�%		�����1"	
��������1������������������Ʒ�1��++�'i1֘~���~������%�t����"�����������ݫ'�$|dЉ'N�7o%p�Dz�:�)�D����H�$��D��E��tl���̑5żlP�4	#��y��5��S�RzC>� j��U���z�ҧ]�$�j�QM
ʆķ��772�1@ܒ�DH�;܋%Ѕ���q��ۛX���M�g����Nά�g�MWz!`���d���ѥ]���uj��a��}�aݸ�6;�5լD�zT�h,5�~�z~�@y[�:�3M�7�g�G�]�����q�=@c5

4�u����흃�5_���_9���_A�Mt�B\���Kⵘ}" @l��D�i��Qu�+b�aq&��{#'�L�H�jz��"$&�� �$B!�
,�� EI���@*�P�R*;ò[������L���l7DҎ�%�G�I�0)���m��IԲ�����`��I��}>ă�}-R�wFu�}y�|O�(p�*�"�rt�{R��A>(
�^(		�"��4���	
����3������������3��3���.�.����Чɞ

v.*o3��u���z���z����(�	����D���.��z�Ha ���р�P����*6���=�%������8��A%ϤH�]J��Q&����2�L��z�녆Aɔ>50j�(�]�T�.�s
�*�I�@m:n�Tx^7�}�v(�H�y�!8�/�
��4^ֹ��Gi`z��A�"��?l�8�]�'STҧX�*3��@X��MS<@�蜮-�.���/A��y5��|��U�v�۬�ϰ�V�r�4<A:\�4��bm��dv�i��{˿�ӛ�W��'7��n�����a��q{�"8V�_��u_^���2���_��[k��o�Tpbp
:��M
�s�k�x_"Vؓ��!�
,�� %R�4�y�ԬԢ���\�K���٩��l'#���Q�<�P:��A*�4� G����Z����L���nq�,���I�\��EoI�Uzqx#)��_"�"
����0��0���+�0�#��#�I�"����'�����2�0��	q�+��t�'����k���`���n�����܀�#�����|�2�aq�Vk������oE�f
NC��})Tǐ`���R8��ć=��5��&�D9�ۦZ�{�@滗1M�۴��͇)�Ty��N39]Ʊ�A�o���V
j�>Z0ՠV�T�y����ïe�]U���4�f!P�c0z��kW+_��^��ў`v�"�Ŋa@x:@O,��Ȭt�K5�z�sR�tH5�y3�ʥ�>yz=�3[/�Z|��&�����x@��7n��Gd�n� �B�^��|{Z�C�N�3�Z�&$�p�{f�;^C}C���o� ���%!�
,�� %�$5��,%�:��k��.]�#>�����	�B"�ZRp�]2�S���hk�9�E�-�e<ͩ��k�Gj6�-��t������wsz|m���OQti����x��41
)
�U"		���	�B������Q
��������B������)��������#����B+u���	�)�ێ����#��������"�����p��g�߿=�Q�Ǎ��P�aQ��*֑X�b<88����l$�����Q,?�	y2��=0յT#r�Η5��
�9`jLmgT�J�2��M�Wy6�jukիK�y�0�i��P0J�Cg&(`���oq]�혗']u}C* ���^\sx�a��GtKpeÈa�@��j�v�l�g�V�D�z$�ͣQ�>m�b��1�����6�}�4 @�l�`Ѫ�zvs�Gt�2y֐��/V+��S��NJ=^����"�+Y �	09ڛ>0}���Lj��`���ab�q�O
��'8^�X�d����|5 [��ahW�Y��7֑W6!��i���!��qHX�&�(@�3�&B!�
,�� Q$�@RS��"��	�k;��	S�]�3X'���+�ζS
���tUi���k���`��m��0���c�]���w��l��dt$v}��k~zq,l��ryu�x��?)B��		����
�����;	�0��0�����;�����+	��­�����G�0-g��+�	���.z�����%�������$��z��������+�l�(jx�9hN����t�<�; 8O��7�y�xH#�|�����bH�$ѼLip�ȅѐ�
��2"��-��A��(���P�$��tj�@{��s(W��$( ��=�!u�5��(�jm�nwmĸo����A���@w/��������d�1+:'���l��1�f��#�|,z2�0Hg�������@1}�թٯ�[��3�S�+|�7U�ǃ�.�{��P卵0ʶc=+PL�0�3�:~���p��'����v{��O��n<����~)�@��u�P6
��k(����àK'v�K
V�`I�9(Z�L�G!!�
,�� �PeRN*�'�,Ԣ���v*�o<�����bK�s M��3�k>o�����R��sAE1f�m):��k��v���v�M{w�l
��r�tqPm�|��uF~�?W	a3�&
���A�6��������6	�-�����3���-	����.�,����6o3/h��-��o���	������'�d�����z���z��&�����(�CGo߉O���a��9ќD=
�kOOEuj(�Ǒ�L����ʏ�T��IR&K�.��H���=�����
�t��tI��£B�0E:qjԪP������h�Y��‰	ʾ�B�F�dÎT0@�ܝK!Aݽ_�aw�9��hP�(�!Ѣ,�f�ʓmZ�,r��Ɲ[|.��1鑣wZ���h%�.�:�^m�Ri綽7V޿}c\����u�;o�>o���ü��u+],E�b��d]/\��.������*h�3�;��߯��~�����
��|H�oXg���6�]����	!!�
,�� E9�$�#%5(�,Ԓr��(i�0.����݊�`lXt��D%�ydJ�6���H�^�.�p���l��[k�=.˿�(>�S�x~�gypv}�lNtj�x�{e>	�(	�~~	
�����-������-����,-�(���������������'�e-/p��(��u�'����"�	�����u�������������GN�
����šL��1��:�I<���9u���G '��9��cɕ-Q�$��L�'lD���7U�T��T��ׄ �t�Ѧ�BU�@%J��JŪ�)W?L�S��Y	�b��Zvm��މ���Б]x�F�0�I�{�V�Xg�|��-Bf�E��#��|.@�4O���P4�u8S
g֥_�n�;Ө՞�(�բQ�)����wǮ<.�(��ʳ2?�����eG��|L�Յ"x�/��-���/�y��+,�p=E��1�� �d�Q��ٷ�~��2Kꔛ$���r
`m*Ys�C
zFn� ak}��nn��I#�����Q!�
,�� %R�4��Ԝ"CA,���(~ں8׼د��DA֐���2hs��݌�+�p]���ˤ�Ob��K��w8^>��u�z�`�H~htkv"x�m��|1Z,
���-���#�5��1"�1�����'���'�[�#����,�
��,},�'�	p�#��h�1�w���a�������"��������w��#�p�"b�1��V-��ak�c���B�)��P@�;�]Xq�Č#N�-A�"߲Syr����L�4eM�ʚph�\@�e�q/o��	���D2(𯘳q��s:g��u@��Fu+��Q�AU���ӯZ��#xbR����4�v�G1��
M�����ɻ���;8F�P`B۩3he�11O~�	�˟��>z�(�C�3���A=��\���Z-�ڇ�A����a��-qiS�R�����Ym�G�(�1���;��Ž��=dt�q�B�[���!�	
,�
� %�di�h��l�p,�4�0T:�Ԕ��n琘�9␄\����<
�P)�J�Z���+^�f�(��-N	�Ǥ4��an��t#o~$z|u�#��Svx��@��������"�'�������%	�#m#	���S���%�
���	��$��%�§	������#���ְ��ͽ�$�&	A��"����%���$��#��H݃'/�9�����BH
Ed�O�C�)L��q#F�o�	��g�B��b�DIʤC������'C��Rg̙G��	4^M=<iEj0�ћM�-0��R=��jB+î��{u,H�YÖ$+vhP�z�z�$W-]���&������=���-�>F\�dd��3 X�堙Kl��٣�̊@��@���T��?}��IV�UT+��������o�l�|gr�
T�e��lu�ӭ��ޒ�v��G�]l<ݑ�sg��_D
�)4E�Q����_i���)�Pi#���!h Da
%���.@��q�M��OQ	`�pn��yHW��C�"�$�s*
��]hp$��V
8��<��c!;PK-"#[J���Fgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/find.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<%IDAT8�c���?%���4��y�dÞ����'/Xf�Ʀ�"ʀ��G�vi�QT�o���@���5 )����%�k;��o�4�����7��Y%u��Z�bV����Ty�E��,X�����ݣ�o6ة��m�=���x��)k����?"����e�KZ��帹y�����L���e����?��	��'��?e���}K��j���m�ѹ�Ó�.dfay����6�\V���o��]Z�������9�մ�6�\�K/�b�Ĭ`�
*Y�Bc~Z�:��
��ola�_[�����S1qI��bR����/*.�����?##�;�L�@�	�:
�]��_����@�$������e��;��@1��/x%�|���W4�
��|F�=c� 9��WA12 5��za�N�?(8����S����SQE�QBZ�(�`�‚���?�֎n�x% �P`�����_IU�
�P,��a�j(��X���@��K�*��п�9����}�c�e&R1�2h�Z<uIEND�B`�PK-"#[
�OOHgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/plugin.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˥�=H�q��f~\?��,��yoX�{KC��7�PcM�5�4EkS$�8V*w����J�B%��{�s^1㪋g9�����9IDp�8��ラ�%w%I�
=���@]m�v�bS?��|b��~��?��Gժi�lT70��������p��,�@ۙ�ܘ^�Y3�$ՙO�<o�a ��x8A�܉�BW!�����!JB�x8K?�Y�\����z܃S�<f����R�DKC�������Pf'� ��h����af��WãI��n�]�BW��)䎇�p��!Gos�A�MN���X���	�0eY[�ra�B�A���m����h=ڊ�I#͘�0���6�1;����Ū���3Q�@s�e
���p�k_�;+���?R15�S_?q���9�*�H�3��ɞ����`�!w������2/��L.�\��c�Ie��صf|��Ĕ�b��`���M �o��w=��_��m�6E�XIEND�B`�PK-"#[=k��Tgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<cIDAT(�c�π2�Q��������+�/ދE����p�,
�%��ć�O��`
P�oǦ`1�	���BrC6�u�o�_�?��$�
}J ƦgIEND�B`�PK-"#[>�)oHHOgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/wrench_orange.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˕��kSQ��8H)N]uA,����w��j�azcbb6���&�	Qcn^b4b2e	�l� x�W�
}$�����9�X��t:�$��n"�0����T8�J)N��!��h4ʉ�F��|�p8|2�X,f��[����͵`0������S���~�O�Z%
}
��i�z=�n���H�X��t:4
��"�B�r�L�R��tv�_�T'�-�l��u��&f_���u�R�����l6� �u]e�
�5~lޢ�n����z�{�e�j���jU��i�w��|}�������?��$����&������x
�r��|TN��%��*4�Ç l��;'T�^�ٗG<����"pF�ୌw��!y��h�ݔ��e��E���6��	�
ܙצ���P���J��:�C\DW�^���,<<�4���A����	�ѹ�]��s��6�ޑ�����IEND�B`�PK-"#[7��Fgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/zoom.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<FIDAT8ˍ�KH�A���̪-��K�C=�
�Cm�fu�P��)D��B�"�K�$A�
e��t�����J��Z�yu�m���0�}f~3#�sL��|!!|g-V�9��Q�鎺��c�`��T���C8*�����5�b�F'��R!D�Ћ�
�kb�^sP��!��������Loc��g�ע≣�.=^u��֘����[�
���65�޶FG��� �!�� P
�%wN5�\��q=(�t@ȀѶ(t2)է�"�L?B�2�uXcY��V$�����&����a]c��t����<��*����Q��1��}E	)h��Y����ҁ�갎����6`�D�Xr<:=UR���̞��O���9��8�*}�V&b==h��ցq�ف�+;�˜�JT<������������A�!C�:����̼�}�nAH��~0b�M���36��+�/痗����s�IĢ̾�����Ek����J{�v��!���=_�M�yK�b]�ö�a��{6W�03�<U��=�c�@_��@,�/fg�kM�q�?)�+��H�IEND�B`�PK-"#["�55Rgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/page_white_width.pngnu�[����PNG


IHDR��7�gAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT(υ�A�0E��֕n\x���qob♼��R�w(���g�I�u2�U��5�S����6�VX���ʲJ6Yhl�Oe<�Ƥj�56�S&����5���n�2 ��,��be�%,r�[;�z�ֳ��
X`���<�Ɛ�dz�B����7|�!A��/�n2=V����Y����r�o� v��ZdIEND�B`�PK-"#[��U�ttJgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/arrow_up.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<IDAT8˥�?/Q�ϲ��hg5��j%�'��F,[
���LH��	3�(���v��w�=�fcoN{O~9���VM4Q7ܿ�)v/�WQ����=��&���b����p�S�O�������^��'&^:\˨6���eND!&� ���9꒣�_|�?\����s���r�x�,�����g�*,(F�#d[�O���aAA�*�P
p1����O+C�$`�)����*�w`A��#�0�$���	�*�?�����b&N�RIEND�B`�PK-"#[R�7���Lgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/brick_link.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8�mR�K�Q����	-f=��?�I�ZT�v��rpm�EDR-*"+RJ,+"ZLR�.JŢ��>DÔ��?��R;��c����}��s�}W��b{{����Jlff�`��[��%��n�Js.��Û/�ZA���8>>F�P@>������5�}q$	{�_���Kx<�B!���y�+q�����IE���auuN�S�1st���ppp�LMM���;99���G ��T/=/����������
LNN�aO�d2H$8;;��9�pzzZt�xgg�p^�W"bbbBU���$A:����-"������W�U9D6nnnJ����JUUqss�d2�X,&U����]�H�tF'$���fS����4
�x\>C����v����XZZ������d�j�r��*���^�G�Q�R)������ג�c���t�]��l6G�M��r�����������8��������d���0���e\SS���$immMW��p�544�zzz�Ipuu�^���u90�_�9�������>�������^WTT|�	������P]]���:	�$����A����W���Ã��w�{5n���ZZZ���&c��]�5�}EP^^�����`�0��,˃�ccc�W�/"֘�kX����Y�j�IEND�B`�PK-"#[��bbHgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/wrench.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8˕��oQ�_�[�c�+W.]�х�i��5 g�m���J[F�q����#_�)�qո��;,��@��{�;���upL�TʙH$�(Z� X��M��ɤ���n�i"��\nt:�}��yD���	�<o��u]�q�}���,���5Q�X��j�P*��DޅB!5�ɠ�l�����X�2�|X��P�VQ( IEA�X���k�
ί���:�lU*h�{-��PU�,����n�	�Y���>�����0�\�ږIU���4(�r�����
�HM�k̈��_���4��_z����iy�'�"[�
��n1��rM���_�A�`b���=$Ik�_p-�q�S~����=li~3�Bv"q�Z�A���ԧ̸�r�[��G���]<&�e�!�'ڸ67	�y��q�$O�X!�=_��~1�Gs�~�E��ZQ�x&qW��K3��!ޤ�u��n�kz�Grj�Q�n�IEND�B`�PK-"#[�ErrFgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/date.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<IDAT8˕RmkA~�ԋ�K$��5X�%� �ǂ!��#�?P��@P�Z(*E�A�#�ܹۙ�w��:�0�;3ϼ�@J	���f?W��o�L����`
�O�Z�+���M������<�ww�
^�I���ś�K�����Z��Rj�F�NV0+�v�E8�q ���+��bF"�v���s��;�4t��� ��>9�ck��t���yx�	��D��7��гm\P���S�t�]�Io�@��#�/�د���)�[�f����^ѻ�#dHk��b�G"������uݿ�q�\.X��c8�Y��h��H������|�r��}�/�!�F���s�R�B�(�������]���j�T5���V��?ZxY�l6���s�d2Qg��wp�d����C2���p8�A���厊����*��X,¢��<�}"�W����
����
8s"��j�R-�-tiM�1�e�K�
���l�T*=L��/�F�#�C�7~��
-:MW1��IEND�B`�PK."#[#۸�PPFgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/ruby.pngnu�[����PNG


IHDR�agAMA��7��tEXtSoftwareAdobe ImageReadyq�e<�IDAT8�͓�K�Q���&*z��(	z�2��4��r�!��\e7�7�V"�x!bT7�R*�c�
�<��|���|:[WAD�>���9���{L�i'�v����%IID=z�/�;��"�\k��޸)�k�u�9��x�]2��$��W0=
��������$��Q��H�>}F|`���n6ϜϤkN7
>��9LL��(,.�������}>ּ^��
��OMM|��%꿏�:/T]�F$�6VW)��)t��5����F�K�����ò�Qq"��r�f ��y_�O�a|	���p�HJ�*MT��X8��[^D��r���-|��|[��v(33���!�.���44���NJ�e�bʡr�טu�͚�d�+��@� S[K���o~TK��r�j�k������ora��P�DP��y5�@Y�?i�܅��Sg��@'�˼Zj��_M�5���̻��w��.�;�'5�ڿ_���IEND�B`�PK."#[���zzLgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtmlnu�[���<%- if klass.type == 'class' then %>
<div id="parent-class-section" class="nav-section">
  <h3>Parent</h3>

  <%- if klass.superclass and not String === klass.superclass then -%>
  <p class="link"><a href="<%= klass.aref_to klass.superclass.path %>"><%= klass.superclass.full_name %></a>
  <%- else -%>
  <p class="link"><%= klass.superclass %>
  <%- end -%>
</div>
<%- end -%>
PK."#[�޹�Pgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtmlnu�[���<div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2>
    <a href="<%= rel_prefix %>/index.html" rel="home">Home</a>
  </h2>

  <div id="table-of-contents-navigation">
    <a href="<%= rel_prefix %>/table_of_contents.html#pages">Pages</a>
    <a href="<%= rel_prefix %>/table_of_contents.html#classes">Classes</a>
    <a href="<%= rel_prefix %>/table_of_contents.html#methods">Methods</a>
  </div>
</div>
PK."#[3����Mgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtmlnu�[���<%- unless klass.extends.empty? then %>
<div id="extends-section" class="nav-section">
  <h3>Extended With Modules</h3>

  <ul class="link-list">
    <%- klass.each_extend do |ext| -%>
  <%- unless String === ext.module then -%>
    <li><a class="extend" href="<%= klass.aref_to ext.module.path %>"><%= ext.module.full_name %></a>
  <%- else -%>
    <li><span class="extend"><%= ext.name %></span>
  <%- end -%>
  <%- end -%>
  </ul>
</div>
<%- end -%>
PK."#[��o�'�'Cgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/css/rdoc.cssnu�[���/*
 * "Darkfish" Rdoc CSS
 * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
 *
 * Author: Michael Granger <ged@FaerieMUD.org>
 *
 */

/* vim: ft=css et sw=2 ts=2 sts=2 */
/* Base Green is: #6C8C22 */

.hide { display: none !important; }

* { padding: 0; margin: 0; }

body {
  background: #fafafa;
  font-family: Lato, sans-serif;
  font-weight: 300;
}

h1 span,
h2 span,
h3 span,
h4 span,
h5 span,
h6 span {
  position: relative;

  display: none;
  padding-left: 1em;
  line-height: 0;
  vertical-align: baseline;
  font-size: 10px;
}

h1 span { top: -1.3em; }
h2 span { top: -1.2em; }
h3 span { top: -1.0em; }
h4 span { top: -0.8em; }
h5 span { top: -0.5em; }
h6 span { top: -0.5em; }

h1:hover span,
h2:hover span,
h3:hover span,
h4:hover span,
h5:hover span,
h6:hover span {
  display: inline;
}

h1:target,
h2:target,
h3:target,
h4:target,
h5:target,
h6:target {
  margin-left: -10px;
  border-left: 10px solid #f1edba;
}

:link,
:visited {
  color: #6C8C22;
  text-decoration: none;
}

:link:hover,
:visited:hover {
  border-bottom: 1px dotted #6C8C22;
}

code,
pre {
  font-family: "Source Code Pro", Monaco, monospace;
  background-color: rgba(27,31,35,0.05);
  padding: 0em 0.2em;
  border-radius: 0.2em;
}

table {
  margin: 0;
  border-spacing: 0;
  border-collapse: collapse;
}

table tr th, table tr td {
  padding: 0.2em 0.4em;
  border: 1px solid #ccc;
}

table tr th {
  background-color: #eceaed;
}

table tr:nth-child(even) td {
  background-color: #f5f4f6;
}

/* @group Generic Classes */

.initially-hidden {
  display: none;
}

#search-field {
  width: 98%;
  background: white;
  border: none;
  height: 1.5em;
  -webkit-border-radius: 4px;
  -moz-border-radius: 4px;
  border-radius: 4px;
  text-align: left;
}
#search-field:focus {
  background: #f1edba;
}
#search-field:-moz-placeholder,
#search-field::-webkit-input-placeholder {
  font-weight: bold;
  color: #666;
}

.missing-docs {
  font-size: 120%;
  background: white url(../images/wrench_orange.png) no-repeat 4px center;
  color: #ccc;
  line-height: 2em;
  border: 1px solid #d00;
  opacity: 1;
  padding-left: 20px;
  text-indent: 24px;
  letter-spacing: 3px;
  font-weight: bold;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
}

.target-section {
  border: 2px solid #dcce90;
  border-left-width: 8px;
  padding: 0 1em;
  background: #fff3c2;
}

/* @end */

/* @group Index Page, Standalone file pages */
.table-of-contents ul {
  margin: 1em;
  list-style: none;
}

.table-of-contents ul ul {
  margin-top: 0.25em;
}

.table-of-contents ul :link,
.table-of-contents ul :visited {
  font-size: 16px;
}

.table-of-contents li {
  margin-bottom: 0.25em;
}

.table-of-contents li .toc-toggle {
  width: 16px;
  height: 16px;
  background: url(../images/add.png) no-repeat;
}

.table-of-contents li .toc-toggle.open {
  background: url(../images/delete.png) no-repeat;
}

/* @end */

/* @group Top-Level Structure */

nav {
  float: left;
  width: 260px;
  font-family: Helvetica, sans-serif;
  font-size: 14px;
  border-right: 1px solid #ccc;
}

main {
  display: block;
  margin: 0 2em 5em 260px;
  padding-left: 20px;
  min-width: 340px;
  font-size: 16px;
}

main h1,
main h2,
main h3,
main h4,
main h5,
main h6 {
  font-family: Helvetica, sans-serif;
}

.table-of-contents main {
  margin-left: 2em;
}

#validator-badges {
  clear: both;
  margin: 1em 1em 2em;
  font-size: smaller;
}

/* @end */

/* @group navigation */
nav {
  margin-bottom: 1em;
}

nav .nav-section {
  margin-top: 2em;
  border-top: 2px solid #aaa;
  font-size: 90%;
  overflow: hidden;
}

nav h2 {
  margin: 0;
  padding: 2px 8px 2px 8px;
  background-color: #e8e8e8;
  color: #555;
  font-size: 125%;
  text-align: center;
}

nav h3,
#table-of-contents-navigation {
  margin: 0;
  padding: 2px 8px 2px 8px;
  text-align: right;
  background-color: #e8e8e8;
  color: #555;
}

nav ul,
nav dl,
nav p {
  padding: 4px 8px 0;
  list-style: none;
}

#project-navigation .nav-section {
  margin: 0;
  border-top: 0;
}

#home-section h2 {
  text-align: center;
}

#table-of-contents-navigation {
  font-size: 1.2em;
  font-weight: bold;
  text-align: center;
}

#search-section {
  margin-top: 0;
  border-top: 0;
}

#search-field-wrapper {
  border-top: 1px solid #aaa;
  border-bottom: 1px solid #aaa;
  padding: 3px 8px;
  background-color: #e8e8e8;
  color: #555;
}

ul.link-list li {
  white-space: nowrap;
  line-height: 1.4em;
}

ul.link-list .type {
  font-size: 8px;
  text-transform: uppercase;
  color: white;
  background: #969696;
  padding: 2px 4px;
  -webkit-border-radius: 5px;
}

dl.note-list dt {
  float: left;
  margin-right: 1em;
}

.calls-super {
  background: url(../images/arrow_up.png) no-repeat right center;
}

/* @end */

/* @group Documentation Section */
main {
  color: #333;
}

main > h1:first-child,
main > h2:first-child,
main > h3:first-child,
main > h4:first-child,
main > h5:first-child,
main > h6:first-child {
  margin-top: 0px;
}

main sup {
  vertical-align: super;
  font-size: 0.8em;
}

/* The heading with the class name */
main h1[class] {
  margin-top: 0;
  margin-bottom: 1em;
  font-size: 2em;
  color: #6C8C22;
}

main h1 {
  margin: 2em 0 0.5em;
  font-size: 1.7em;
}

main h2 {
  margin: 2em 0 0.5em;
  font-size: 1.5em;
}

main h3 {
  margin: 2em 0 0.5em;
  font-size: 1.2em;
}

main h4 {
  margin: 2em 0 0.5em;
  font-size: 1.1em;
}

main h5 {
  margin: 2em 0 0.5em;
  font-size: 1em;
}

main h6 {
  margin: 2em 0 0.5em;
  font-size: 1em;
}

main p {
  margin: 0 0 0.5em;
  line-height: 1.4em;
}

main pre {
  margin: 1.2em 0.5em;
  padding: 1em;
  font-size: 0.8em;
}

main hr {
  margin: 1.5em 1em;
  border: 2px solid #ddd;
}

main blockquote {
  margin: 0 2em 1.2em 1.2em;
  padding-left: 0.5em;
  border-left: 2px solid #ddd;
}

main ol,
main ul {
  margin: 1em 2em;
}

main li > p {
  margin-bottom: 0.5em;
}

main dl {
  margin: 1em 0.5em;
}

main dt {
  margin-bottom: 0.5em;
  font-weight: bold;
}

main dd {
  margin: 0 1em 1em 0.5em;
}

main header h2 {
  margin-top: 2em;
  border-width: 0;
  border-top: 4px solid #bbb;
  font-size: 130%;
}

main header h3 {
  margin: 2em 0 1.5em;
  border-width: 0;
  border-top: 3px solid #bbb;
  font-size: 120%;
}

.documentation-section-title {
  position: relative;
}
.documentation-section-title .section-click-top {
  position: absolute;
  top: 6px;
  left: 12px;
  font-size: 10px;
  color: #9b9877;
  visibility: hidden;
  padding-left: 0.5px;
}

.documentation-section-title:hover .section-click-top {
  visibility: visible;
}

.constants-list > dl {
  margin: 1em 0 2em;
  border: 0;
}

.constants-list > dl dt {
  margin-bottom: 0.75em;
  padding-left: 0;
  font-family: "Source Code Pro", Monaco, monospace;
  font-size: 110%;
}

.constants-list > dl dt a {
  color: inherit;
}

.constants-list > dl dd {
  margin: 0 0 2em 0;
  padding: 0;
  color: #666;
}

.documentation-section h2 {
  position: relative;
}

.documentation-section h2 a {
  position: absolute;
  top: 8px;
  right: 10px;
  font-size: 12px;
  color: #9b9877;
  visibility: hidden;
}

.documentation-section h2:hover a {
  visibility: visible;
}

/* @group Method Details */

main .method-source-code {
  max-height: 0;
  overflow: hidden;
  transition-duration: 200ms;
  transition-delay: 0ms;
  transition-property: all;
  transition-timing-function: ease-in-out;
}

main .method-source-code.active-menu {
  max-height: 100vh;
}

main .method-description .method-calls-super {
  color: #333;
  font-weight: bold;
}

main .method-detail {
  margin-bottom: 2.5em;
  cursor: pointer;
}

main .method-detail:target {
  margin-left: -10px;
  border-left: 10px solid #f1edba;
}

main .method-heading {
  position: relative;
  font-family: "Source Code Pro", Monaco, monospace;
  font-size: 110%;
  font-weight: bold;
  color: #333;
}
main .method-heading :link,
main .method-heading :visited {
  color: inherit;
}
main .method-click-advice {
  position: absolute;
  top: 2px;
  right: 5px;
  font-size: 12px;
  color: #9b9877;
  visibility: hidden;
  padding-right: 20px;
  line-height: 20px;
  background: url(../images/zoom.png) no-repeat right top;
}
main .method-heading:hover .method-click-advice {
  visibility: visible;
}

main .method-alias .method-heading {
  color: #666;
}

main .method-description,
main .aliases {
  margin-top: 0.75em;
  color: #333;
}

main .aliases {
  padding-top: 4px;
  font-style: italic;
  cursor: default;
}
main .method-description ul {
  margin-left: 1.5em;
}

main #attribute-method-details .method-detail:hover {
  background-color: transparent;
  cursor: default;
}
main .attribute-access-type {
  text-transform: uppercase;
  padding: 0 1em;
}
/* @end */

/* @end */

/* @group Source Code */

pre {
  margin: 0.5em 0;
  border: 1px dashed #999;
  padding: 0.5em;
  background: #262626;
  color: white;
  overflow: auto;
}

.ruby-constant   { color: #7fffd4; background: transparent; }
.ruby-keyword    { color: #00ffff; background: transparent; }
.ruby-ivar       { color: #eedd82; background: transparent; }
.ruby-operator   { color: #00ffee; background: transparent; }
.ruby-identifier { color: #ffdead; background: transparent; }
.ruby-node       { color: #ffa07a; background: transparent; }
.ruby-comment    { color: #dc0000; background: transparent; }
.ruby-regexp     { color: #ffa07a; background: transparent; }
.ruby-value      { color: #7fffd4; background: transparent; }

/* @end */


/* @group search results */
#search-results {
  font-family: Lato, sans-serif;
  font-weight: 300;
}

#search-results .search-match {
  font-family: Helvetica, sans-serif;
  font-weight: normal;
}

#search-results .search-selected {
  background: #e8e8e8;
  border-bottom: 1px solid transparent;
}

#search-results li {
  list-style: none;
  border-bottom: 1px solid #aaa;
  margin-bottom: 0.5em;
}

#search-results li:last-child {
  border-bottom: none;
  margin-bottom: 0;
}

#search-results li p {
  padding: 0;
  margin: 0.5em;
}

#search-results .search-namespace {
  font-weight: bold;
}

#search-results li em {
  background: yellow;
  font-style: normal;
}

#search-results pre {
  margin: 0.5em;
  font-family: "Source Code Pro", Monaco, monospace;
}

/* @end */

PK."#[;9Iv��Dgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/css/fonts.cssnu�[���/*
 * Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
 * with Reserved Font Name "Source". All Rights Reserved. Source is a
 * trademark of Adobe Systems Incorporated in the United States and/or other
 * countries.
 *
 * This Font Software is licensed under the SIL Open Font License, Version
 * 1.1.
 *
 * This license is copied below, and is also available with a FAQ at:
 * http://scripts.sil.org/OFL
 */

@font-face {
  font-family: "Source Code Pro";
  font-style: normal;
  font-weight: 400;
  src: local("Source Code Pro"),
       local("SourceCodePro-Regular"),
       url("../fonts/SourceCodePro-Regular.ttf") format("truetype");
}

@font-face {
  font-family: "Source Code Pro";
  font-style: normal;
  font-weight: 700;
  src: local("Source Code Pro Bold"),
       local("SourceCodePro-Bold"),
       url("../fonts/SourceCodePro-Bold.ttf") format("truetype");
}

/*
 * Copyright (c) 2010, Łukasz Dziedzic (dziedzic@typoland.com),
 * with Reserved Font Name Lato.
 *
 * This Font Software is licensed under the SIL Open Font License, Version
 * 1.1.
 *
 * This license is copied below, and is also available with a FAQ at:
 * http://scripts.sil.org/OFL
 */

@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 300;
  src: local("Lato Light"),
       local("Lato-Light"),
       url("../fonts/Lato-Light.ttf") format("truetype");
}

@font-face {
  font-family: "Lato";
  font-style: italic;
  font-weight: 300;
  src: local("Lato Light Italic"),
       local("Lato-LightItalic"),
       url("../fonts/Lato-LightItalic.ttf") format("truetype");
}

@font-face {
  font-family: "Lato";
  font-style: normal;
  font-weight: 700;
  src: local("Lato Regular"),
       local("Lato-Regular"),
       url("../fonts/Lato-Regular.ttf") format("truetype");
}

@font-face {
  font-family: "Lato";
  font-style: italic;
  font-weight: 700;
  src: local("Lato Italic"),
       local("Lato-Italic"),
       url("../fonts/Lato-RegularItalic.ttf") format("truetype");
}

/*
 * -----------------------------------------------------------
 * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
 * -----------------------------------------------------------
 *
 * PREAMBLE
 * The goals of the Open Font License (OFL) are to stimulate worldwide
 * development of collaborative font projects, to support the font creation
 * efforts of academic and linguistic communities, and to provide a free and
 * open framework in which fonts may be shared and improved in partnership
 * with others.
 *
 * The OFL allows the licensed fonts to be used, studied, modified and
 * redistributed freely as long as they are not sold by themselves. The
 * fonts, including any derivative works, can be bundled, embedded,
 * redistributed and/or sold with any software provided that any reserved
 * names are not used by derivative works. The fonts and derivatives,
 * however, cannot be released under any other type of license. The
 * requirement for fonts to remain under this license does not apply
 * to any document created using the fonts or their derivatives.
 *
 * DEFINITIONS
 * "Font Software" refers to the set of files released by the Copyright
 * Holder(s) under this license and clearly marked as such. This may
 * include source files, build scripts and documentation.
 *
 * "Reserved Font Name" refers to any names specified as such after the
 * copyright statement(s).
 *
 * "Original Version" refers to the collection of Font Software components as
 * distributed by the Copyright Holder(s).
 *
 * "Modified Version" refers to any derivative made by adding to, deleting,
 * or substituting -- in part or in whole -- any of the components of the
 * Original Version, by changing formats or by porting the Font Software to a
 * new environment.
 *
 * "Author" refers to any designer, engineer, programmer, technical
 * writer or other person who contributed to the Font Software.
 *
 * PERMISSION & CONDITIONS
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of the Font Software, to use, study, copy, merge, embed, modify,
 * redistribute, and sell modified and unmodified copies of the Font
 * Software, subject to the following conditions:
 *
 * 1) Neither the Font Software nor any of its individual components,
 * in Original or Modified Versions, may be sold by itself.
 *
 * 2) Original or Modified Versions of the Font Software may be bundled,
 * redistributed and/or sold with any software, provided that each copy
 * contains the above copyright notice and this license. These can be
 * included either as stand-alone text files, human-readable headers or
 * in the appropriate machine-readable metadata fields within text or
 * binary files as long as those fields can be easily viewed by the user.
 *
 * 3) No Modified Version of the Font Software may use the Reserved Font
 * Name(s) unless explicit written permission is granted by the corresponding
 * Copyright Holder. This restriction only applies to the primary font name as
 * presented to the users.
 *
 * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
 * Software shall not be used to promote, endorse or advertise any
 * Modified Version, except to acknowledge the contribution(s) of the
 * Copyright Holder(s) and the Author(s) or with their explicit written
 * permission.
 *
 * 5) The Font Software, modified or unmodified, in part or in whole,
 * must be distributed entirely under this license, and must not be
 * distributed under any other license. The requirement for fonts to
 * remain under this license does not apply to any document created
 * using the Font Software.
 *
 * TERMINATION
 * This license becomes null and void if any of the above conditions are
 * not met.
 *
 * DISCLAIMER
 * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
 * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
 * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
 * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
 * OTHER DEALINGS IN THE FONT SOFTWARE.
 */

PK."#[`	e��Agems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/page.rhtmlnu�[���<body id="top" role="document" class="file">
<nav role="navigation">
  <div id="project-navigation">
    <%= render '_sidebar_navigation.rhtml' %>
    <%= render '_sidebar_search.rhtml' %>
  </div>

  <%= render '_sidebar_table_of_contents.rhtml' %>

  <div id="project-metadata">
    <%= render '_sidebar_pages.rhtml' %>
  </div>
</nav>

<main role="main" aria-label="Page <%=h file.full_name%>">
<%= file.description %>
</main>

PK."#[����OOKgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtmlnu�[���<%- simple_files = @files.select { |f| f.text? } %>
<%- unless simple_files.empty? then -%>
<div id="fileindex-section" class="nav-section">
  <h3>Pages</h3>

  <ul class="link-list">
  <%- simple_files.each do |f| -%>
    <li><a href="<%= rel_prefix %>/<%= f.path %>"><%= h f.page_name %></a>
  <%- end -%>
  </ul>
</div>
<%- end -%>
PK."#[��e]]Bgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_head.rhtmlnu�[���<meta charset="<%= @options.charset %>">

<title><%= h @title %></title>

<script type="text/javascript">
  var rdoc_rel_prefix = "<%= asset_rel_prefix %>/";
  var index_rel_prefix = "<%= rel_prefix %>/";
</script>

<script src="<%= asset_rel_prefix %>/js/navigation.js" defer></script>
<script src="<%= asset_rel_prefix %>/js/search.js" defer></script>
<script src="<%= asset_rel_prefix %>/js/search_index.js" defer></script>
<script src="<%= asset_rel_prefix %>/js/searcher.js" defer></script>
<script src="<%= asset_rel_prefix %>/js/darkfish.js" defer></script>

<link href="<%= asset_rel_prefix %>/css/fonts.css" rel="stylesheet">
<link href="<%= asset_rel_prefix %>/css/rdoc.css" rel="stylesheet">
<%- @options.template_stylesheets.each do |stylesheet| -%>
<link href="<%= asset_rel_prefix %>/<%= File.basename stylesheet %>" rel="stylesheet">
<%- end -%>
PK."#[*�f���Lgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtmlnu�[���<div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>
PK."#[ДU�



.gems/rdoc-6.4.1.1/lib/rdoc/generator/markup.rbnu�[���# frozen_string_literal: true
##
# Handle common RDoc::Markup tasks for various CodeObjects
#
# This module is loaded by generators.  It allows RDoc's CodeObject tree to
# avoid loading generator code to improve startup time for +ri+.

module RDoc::Generator::Markup

  ##
  # Generates a relative URL from this object's path to +target_path+

  def aref_to(target_path)
    RDoc::Markup::ToHtml.gen_relative_url path, target_path
  end

  ##
  # Generates a relative URL from +from_path+ to this object's path

  def as_href(from_path)
    RDoc::Markup::ToHtml.gen_relative_url from_path, path
  end

  ##
  # Handy wrapper for marking up this object's comment

  def description
    markup @comment
  end

  ##
  # Creates an RDoc::Markup::ToHtmlCrossref formatter

  def formatter
    return @formatter if defined? @formatter

    options = @store.rdoc.options
    this = RDoc::Context === self ? self : @parent

    @formatter = RDoc::Markup::ToHtmlCrossref.new options, this.path, this
    @formatter.code_object = self
    @formatter
  end

  ##
  # Build a webcvs URL starting for the given +url+ with +full_path+ appended
  # as the destination path.  If +url+ contains '%s' +full_path+ will be
  # will replace the %s using sprintf on the +url+.

  def cvs_url(url, full_path)
    if /%s/ =~ url then
      sprintf url, full_path
    else
      url + full_path
    end
  end

end

class RDoc::CodeObject

  include RDoc::Generator::Markup

end

class RDoc::MethodAttr

  ##
  # Prepend +src+ with line numbers.  Relies on the first line of a source
  # code listing having:
  #
  #   # File xxxxx, line dddd
  #
  # If it has this comment then line numbers are added to +src+ and the <tt>,
  # line dddd</tt> portion of the comment is removed.

  def add_line_numbers(src)
    return unless src.sub!(/\A(.*)(, line (\d+))/, '\1')
    first = $3.to_i - 1
    last  = first + src.count("\n")
    size = last.to_s.length

    line = first
    src.gsub!(/^/) do
      res = if line == first then
              " " * (size + 1)
            else
              "<span class=\"line-num\">%2$*1$d</span> " % [size, line]
            end

      line += 1
      res
    end
  end

  ##
  # Turns the method's token stream into HTML.
  #
  # Prepends line numbers if +options.line_numbers+ is true.

  def markup_code
    return '' unless @token_stream

    src = RDoc::TokenStream.to_html @token_stream

    # dedent the source
    indent = src.length
    lines = src.lines.to_a
    lines.shift if src =~ /\A.*#\ *File/i # remove '# File' comment
    lines.each do |line|
      if line =~ /^ *(?=\S)/
        n = $&.length
        indent = n if n < indent
        break if n == 0
      end
    end
    src.gsub!(/^#{' ' * indent}/, '') if indent > 0

    add_line_numbers(src) if options.line_numbers

    src
  end

end

class RDoc::ClassModule

  ##
  # Handy wrapper for marking up this class or module's comment

  def description
    markup @comment_location
  end

end

class RDoc::Context::Section

  include RDoc::Generator::Markup

end

class RDoc::TopLevel

  ##
  # Returns a URL for this source file on some web repository.  Use the -W
  # command line option to set.

  def cvs_url
    url = @store.rdoc.options.webcvs

    if /%s/ =~ url then
      url % @relative_name
    else
      url + @relative_name
    end
  end

end

PK."#[�q���2gems/rdoc-6.4.1.1/lib/rdoc/generator/json_index.rbnu�[���# frozen_string_literal: true
require 'json'
begin
  require 'zlib'
rescue LoadError
end

##
# The JsonIndex generator is designed to complement an HTML generator and
# produces a JSON search index.  This generator is derived from sdoc by
# Vladimir Kolesnikov and contains verbatim code written by him.
#
# This generator is designed to be used with a regular HTML generator:
#
#   class RDoc::Generator::Darkfish
#     def initialize options
#       # ...
#       @base_dir = Pathname.pwd.expand_path
#
#       @json_index = RDoc::Generator::JsonIndex.new self, options
#     end
#
#     def generate
#       # ...
#       @json_index.generate
#     end
#   end
#
# == Index Format
#
# The index is output as a JSON file assigned to the global variable
# +search_data+.  The structure is:
#
#   var search_data = {
#     "index": {
#       "searchIndex":
#         ["a", "b", ...],
#       "longSearchIndex":
#         ["a", "a::b", ...],
#       "info": [
#         ["A", "A", "A.html", "", ""],
#         ["B", "A::B", "A::B.html", "", ""],
#         ...
#       ]
#     }
#   }
#
# The same item is described across the +searchIndex+, +longSearchIndex+ and
# +info+ fields.  The +searchIndex+ field contains the item's short name, the
# +longSearchIndex+ field contains the full_name (when appropriate) and the
# +info+ field contains the item's name, full_name, path, parameters and a
# snippet of the item's comment.
#
# == LICENSE
#
# Copyright (c) 2009 Vladimir Kolesnikov
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

class RDoc::Generator::JsonIndex

  include RDoc::Text

  ##
  # Where the search index lives in the generated output

  SEARCH_INDEX_FILE = File.join 'js', 'search_index.js'

  attr_reader :index # :nodoc:

  ##
  # Creates a new generator.  +parent_generator+ is used to determine the
  # class_dir and file_dir of links in the output index.
  #
  # +options+ are the same options passed to the parent generator.

  def initialize parent_generator, options
    @parent_generator = parent_generator
    @store            = parent_generator.store
    @options          = options

    @template_dir = File.expand_path '../template/json_index', __FILE__
    @base_dir = @parent_generator.base_dir

    @classes = nil
    @files   = nil
    @index   = nil
  end

  ##
  # Builds the JSON index as a Hash.

  def build_index
    reset @store.all_files.sort, @store.all_classes_and_modules.sort

    index_classes
    index_methods
    index_pages

    { :index => @index }
  end

  ##
  # Output progress information if debugging is enabled

  def debug_msg *msg
    return unless $DEBUG_RDOC
    $stderr.puts(*msg)
  end

  ##
  # Writes the JSON index to disk

  def generate
    debug_msg "Generating JSON index"

    debug_msg "  writing search index to %s" % SEARCH_INDEX_FILE
    data = build_index

    return if @options.dry_run

    out_dir = @base_dir + @options.op_dir
    index_file = out_dir + SEARCH_INDEX_FILE

    FileUtils.mkdir_p index_file.dirname, :verbose => $DEBUG_RDOC

    index_file.open 'w', 0644 do |io|
      io.set_encoding Encoding::UTF_8
      io.write 'var search_data = '

      JSON.dump data, io, 0
    end
    unless ENV['SOURCE_DATE_EPOCH'].nil?
      index_file.utime index_file.atime, Time.at(ENV['SOURCE_DATE_EPOCH'].to_i).gmtime
    end

    Dir.chdir @template_dir do
      Dir['**/*.js'].each do |source|
        dest = File.join out_dir, source

        FileUtils.install source, dest, :mode => 0644, :preserve => true, :verbose => $DEBUG_RDOC
      end
    end
  end

  ##
  # Compress the search_index.js file using gzip

  def generate_gzipped
    return if @options.dry_run or not defined?(Zlib)

    debug_msg "Compressing generated JSON index"
    out_dir = @base_dir + @options.op_dir

    search_index_file = out_dir + SEARCH_INDEX_FILE
    outfile           = out_dir + "#{search_index_file}.gz"

    debug_msg "Reading the JSON index file from %s" % search_index_file
    search_index = search_index_file.read(mode: 'r:utf-8')

    debug_msg "Writing gzipped search index to %s" % outfile

    Zlib::GzipWriter.open(outfile) do |gz|
      gz.mtime = File.mtime(search_index_file)
      gz.orig_name = search_index_file.basename.to_s
      gz.write search_index
      gz.close
    end

    # GZip the rest of the js files
    Dir.chdir @template_dir do
      Dir['**/*.js'].each do |source|
        dest = out_dir + source
        outfile = out_dir + "#{dest}.gz"

        debug_msg "Reading the original js file from %s" % dest
        data = dest.read

        debug_msg "Writing gzipped file to %s" % outfile

        Zlib::GzipWriter.open(outfile) do |gz|
          gz.mtime = File.mtime(dest)
          gz.orig_name = dest.basename.to_s
          gz.write data
          gz.close
        end
      end
    end
  end

  ##
  # Adds classes and modules to the index

  def index_classes
    debug_msg "  generating class search index"

    documented = @classes.uniq.select do |klass|
      klass.document_self_or_methods
    end

    documented.each do |klass|
      debug_msg "    #{klass.full_name}"
      record = klass.search_record
      @index[:searchIndex]     << search_string(record.shift)
      @index[:longSearchIndex] << search_string(record.shift)
      @index[:info]            << record
    end
  end

  ##
  # Adds methods to the index

  def index_methods
    debug_msg "  generating method search index"

    list = @classes.uniq.map do |klass|
      klass.method_list
    end.flatten.sort_by do |method|
      [method.name, method.parent.full_name]
    end

    list.each do |method|
      debug_msg "    #{method.full_name}"
      record = method.search_record
      @index[:searchIndex]     << "#{search_string record.shift}()"
      @index[:longSearchIndex] << "#{search_string record.shift}()"
      @index[:info]            << record
    end
  end

  ##
  # Adds pages to the index

  def index_pages
    debug_msg "  generating pages search index"

    pages = @files.select do |file|
      file.text?
    end

    pages.each do |page|
      debug_msg "    #{page.page_name}"
      record = page.search_record
      @index[:searchIndex]     << search_string(record.shift)
      @index[:longSearchIndex] << ''
      record.shift
      @index[:info]            << record
    end
  end

  ##
  # The directory classes are written to

  def class_dir
    @parent_generator.class_dir
  end

  ##
  # The directory files are written to

  def file_dir
    @parent_generator.file_dir
  end

  def reset files, classes # :nodoc:
    @files   = files
    @classes = classes

    @index = {
      :searchIndex => [],
      :longSearchIndex => [],
      :info => []
    }
  end

  ##
  # Removes whitespace and downcases +string+

  def search_string string
    string.downcase.gsub(/\s/, '')
  end

end
PK."#[��P�
Q
Q0gems/rdoc-6.4.1.1/lib/rdoc/generator/darkfish.rbnu�[���# frozen_string_literal: true
# -*- mode: ruby; ruby-indent-level: 2; tab-width: 2 -*-

require 'erb'
require 'fileutils'
require 'pathname'
require_relative 'markup'

##
# Darkfish RDoc HTML Generator
#
# $Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $
#
# == Author/s
# * Michael Granger (ged@FaerieMUD.org)
#
# == Contributors
# * Mahlon E. Smith (mahlon@martini.nu)
# * Eric Hodel (drbrain@segment7.net)
#
# == License
#
# Copyright (c) 2007, 2008, Michael Granger. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
#   this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
#
# * Neither the name of the author/s, nor the names of the project's
#   contributors may be used to endorse or promote products derived from this
#   software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# == Attributions
#
# Darkfish uses the {Silk Icons}[http://www.famfamfam.com/lab/icons/silk/] set
# by Mark James.

class RDoc::Generator::Darkfish

  RDoc::RDoc.add_generator self

  include ERB::Util

  ##
  # Stylesheets, fonts, etc. that are included in RDoc.

  BUILTIN_STYLE_ITEMS = # :nodoc:
    %w[
      css/fonts.css
      fonts/Lato-Light.ttf
      fonts/Lato-LightItalic.ttf
      fonts/Lato-Regular.ttf
      fonts/Lato-RegularItalic.ttf
      fonts/SourceCodePro-Bold.ttf
      fonts/SourceCodePro-Regular.ttf
      css/rdoc.css
  ]

  ##
  # Path to this file's parent directory. Used to find templates and other
  # resources.

  GENERATOR_DIR = File.join 'rdoc', 'generator'

  ##
  # Release Version

  VERSION = '3'

  ##
  # Description of this generator

  DESCRIPTION = 'HTML generator, written by Michael Granger'

  ##
  # The relative path to style sheets and javascript.  By default this is set
  # the same as the rel_prefix.

  attr_accessor :asset_rel_path

  ##
  # The path to generate files into, combined with <tt>--op</tt> from the
  # options for a full path.

  attr_reader :base_dir

  ##
  # Classes and modules to be used by this generator, not necessarily
  # displayed.  See also #modsort

  attr_reader :classes

  ##
  # No files will be written when dry_run is true.

  attr_accessor :dry_run

  ##
  # When false the generate methods return a String instead of writing to a
  # file.  The default is true.

  attr_accessor :file_output

  ##
  # Files to be displayed by this generator

  attr_reader :files

  ##
  # The JSON index generator for this Darkfish generator

  attr_reader :json_index

  ##
  # Methods to be displayed by this generator

  attr_reader :methods

  ##
  # Sorted list of classes and modules to be displayed by this generator

  attr_reader :modsort

  ##
  # The RDoc::Store that is the source of the generated content

  attr_reader :store

  ##
  # The directory where the template files live

  attr_reader :template_dir # :nodoc:

  ##
  # The output directory

  attr_reader :outputdir

  ##
  # Initialize a few instance variables before we start

  def initialize store, options
    @store   = store
    @options = options

    @asset_rel_path = ''
    @base_dir       = Pathname.pwd.expand_path
    @dry_run        = @options.dry_run
    @file_output    = true
    @template_dir   = Pathname.new options.template_dir
    @template_cache = {}

    @classes = nil
    @context = nil
    @files   = nil
    @methods = nil
    @modsort = nil

    @json_index = RDoc::Generator::JsonIndex.new self, options
  end

  ##
  # Output progress information if debugging is enabled

  def debug_msg *msg
    return unless $DEBUG_RDOC
    $stderr.puts(*msg)
  end

  ##
  # Directory where generated class HTML files live relative to the output
  # dir.

  def class_dir
    nil
  end

  ##
  # Directory where generated class HTML files live relative to the output
  # dir.

  def file_dir
    nil
  end

  ##
  # Create the directories the generated docs will live in if they don't
  # already exist.

  def gen_sub_directories
    @outputdir.mkpath
  end

  ##
  # Copy over the stylesheet into the appropriate place in the output
  # directory.

  def write_style_sheet
    debug_msg "Copying static files"
    options = { :verbose => $DEBUG_RDOC, :noop => @dry_run }

    BUILTIN_STYLE_ITEMS.each do |item|
      install_rdoc_static_file @template_dir + item, "./#{item}", options
    end

    unless @options.template_stylesheets.empty?
      FileUtils.cp @options.template_stylesheets, '.', **options
    end

    Dir[(@template_dir + "{js,images}/**/*").to_s].each do |path|
      next if File.directory? path
      next if File.basename(path) =~ /^\./

      dst = Pathname.new(path).relative_path_from @template_dir

      install_rdoc_static_file @template_dir + path, dst, options
    end
  end

  ##
  # Build the initial indices and output objects based on an array of TopLevel
  # objects containing the extracted information.

  def generate
    setup

    write_style_sheet
    generate_index
    generate_class_files
    generate_file_files
    generate_table_of_contents
    @json_index.generate
    @json_index.generate_gzipped

    copy_static

  rescue => e
    debug_msg "%s: %s\n  %s" % [
      e.class.name, e.message, e.backtrace.join("\n  ")
    ]

    raise
  end

  ##
  # Copies static files from the static_path into the output directory

  def copy_static
    return if @options.static_path.empty?

    fu_options = { :verbose => $DEBUG_RDOC, :noop => @dry_run }

    @options.static_path.each do |path|
      unless File.directory? path then
        FileUtils.install path, @outputdir, **fu_options.merge(:mode => 0644)
        next
      end

      Dir.chdir path do
        Dir[File.join('**', '*')].each do |entry|
          dest_file = @outputdir + entry

          if File.directory? entry then
            FileUtils.mkdir_p entry, **fu_options
          else
            FileUtils.install entry, dest_file, **fu_options.merge(:mode => 0644)
          end
        end
      end
    end
  end

  ##
  # Return a list of the documented modules sorted by salience first, then
  # by name.

  def get_sorted_module_list classes
    classes.select do |klass|
      klass.display?
    end.sort
  end

  ##
  # Generate an index page which lists all the classes which are documented.

  def generate_index
    setup

    template_file = @template_dir + 'index.rhtml'
    return unless template_file.exist?

    debug_msg "Rendering the index page..."

    out_file = @base_dir + @options.op_dir + 'index.html'
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = rel_prefix + @asset_rel_path

    @title = @options.title

    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating index.html: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generates a class file for +klass+

  def generate_class klass, template_file = nil
    setup

    current = klass

    template_file ||= @template_dir + 'class.rhtml'

    debug_msg "  working on %s (%s)" % [klass.full_name, klass.path]
    out_file   = @outputdir + klass.path
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = rel_prefix + @asset_rel_path
    svninfo          = get_svninfo(current)

    @title = "#{klass.type} #{klass.full_name} - #{@options.title}"

    debug_msg "  rendering #{out_file}"
    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here.local_variable_set(:svninfo, svninfo)
      here
    end
  end

  ##
  # Generate a documentation file for each class and module

  def generate_class_files
    setup

    template_file = @template_dir + 'class.rhtml'
    template_file = @template_dir + 'classpage.rhtml' unless
      template_file.exist?
    return unless template_file.exist?
    debug_msg "Generating class documentation in #{@outputdir}"

    current = nil

    @classes.each do |klass|
      current = klass

      generate_class klass, template_file
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating #{current.path}: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generate a documentation file for each file

  def generate_file_files
    setup

    page_file     = @template_dir + 'page.rhtml'
    fileinfo_file = @template_dir + 'fileinfo.rhtml'

    # for legacy templates
    filepage_file = @template_dir + 'filepage.rhtml' unless
      page_file.exist? or fileinfo_file.exist?

    return unless
      page_file.exist? or fileinfo_file.exist? or filepage_file.exist?

    debug_msg "Generating file documentation in #{@outputdir}"

    out_file = nil
    current = nil

    @files.each do |file|
      current = file

      if file.text? and page_file.exist? then
        generate_page file
        next
      end

      template_file = nil
      out_file = @outputdir + file.path
      debug_msg "  working on %s (%s)" % [file.full_name, out_file]
      rel_prefix = @outputdir.relative_path_from out_file.dirname
      search_index_rel_prefix = rel_prefix
      search_index_rel_prefix += @asset_rel_path if @file_output

      asset_rel_prefix = rel_prefix + @asset_rel_path

      unless filepage_file then
        if file.text? then
          next unless page_file.exist?
          template_file = page_file
          @title = file.page_name
        else
          next unless fileinfo_file.exist?
          template_file = fileinfo_file
          @title = "File: #{file.base_name}"
        end
      end

      @title += " - #{@options.title}"
      template_file ||= filepage_file

      render_template template_file, out_file do |io|
        here = binding
        # suppress 1.9.3 warning
        here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
        here.local_variable_set(:current, current)
        here
      end
    end
  rescue => e
    error =
      RDoc::Error.new "error generating #{out_file}: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generate a page file for +file+

  def generate_page file
    setup

    template_file = @template_dir + 'page.rhtml'

    out_file = @outputdir + file.path
    debug_msg "  working on %s (%s)" % [file.full_name, out_file]
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    current          = file
    asset_rel_prefix = rel_prefix + @asset_rel_path

    @title = "#{file.page_name} - #{@options.title}"

    debug_msg "  rendering #{out_file}"
    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:current, current)
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  end

  ##
  # Generates the 404 page for the RDoc servlet

  def generate_servlet_not_found message
    setup

    template_file = @template_dir + 'servlet_not_found.rhtml'
    return unless template_file.exist?

    debug_msg "Rendering the servlet 404 Not Found page..."

    rel_prefix = rel_prefix = ''
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = ''

    @title = 'Not Found'

    render_template template_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating servlet_not_found: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generates the servlet root page for the RDoc servlet

  def generate_servlet_root installed
    setup

    template_file = @template_dir + 'servlet_root.rhtml'
    return unless template_file.exist?

    debug_msg 'Rendering the servlet root page...'

    rel_prefix = '.'
    asset_rel_prefix = rel_prefix
    search_index_rel_prefix = asset_rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    @title = 'Local RDoc Documentation'

    render_template template_file do |io| binding end
  rescue => e
    error = RDoc::Error.new \
      "error generating servlet_root: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  ##
  # Generate an index page which lists all the classes which are documented.

  def generate_table_of_contents
    setup

    template_file = @template_dir + 'table_of_contents.rhtml'
    return unless template_file.exist?

    debug_msg "Rendering the Table of Contents..."

    out_file = @outputdir + 'table_of_contents.html'
    rel_prefix = @outputdir.relative_path_from out_file.dirname
    search_index_rel_prefix = rel_prefix
    search_index_rel_prefix += @asset_rel_path if @file_output

    asset_rel_prefix = rel_prefix + @asset_rel_path

    @title = "Table of Contents - #{@options.title}"

    render_template template_file, out_file do |io|
      here = binding
      # suppress 1.9.3 warning
      here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
      here
    end
  rescue => e
    error = RDoc::Error.new \
      "error generating table_of_contents.html: #{e.message} (#{e.class})"
    error.set_backtrace e.backtrace

    raise error
  end

  def install_rdoc_static_file source, destination, options # :nodoc:
    return unless source.exist?

    begin
      FileUtils.mkdir_p File.dirname(destination), **options

      begin
        FileUtils.ln source, destination, **options
      rescue Errno::EEXIST
        FileUtils.rm destination
        retry
      end
    rescue
      FileUtils.cp source, destination, **options
    end
  end

  ##
  # Prepares for generation of output from the current directory

  def setup
    return if instance_variable_defined? :@outputdir

    @outputdir = Pathname.new(@options.op_dir).expand_path @base_dir

    return unless @store

    @classes = @store.all_classes_and_modules.sort
    @files   = @store.all_files.sort
    @methods = @classes.map { |m| m.method_list }.flatten.sort
    @modsort = get_sorted_module_list @classes
  end

  ##
  # Return a string describing the amount of time in the given number of
  # seconds in terms a human can understand easily.

  def time_delta_string seconds
    return 'less than a minute'          if seconds < 60
    return "#{seconds / 60} minute#{seconds / 60 == 1 ? '' : 's'}" if
                                            seconds < 3000     # 50 minutes
    return 'about one hour'              if seconds < 5400     # 90 minutes
    return "#{seconds / 3600} hours"     if seconds < 64800    # 18 hours
    return 'one day'                     if seconds < 86400    #  1 day
    return 'about one day'               if seconds < 172800   #  2 days
    return "#{seconds / 86400} days"     if seconds < 604800   #  1 week
    return 'about one week'              if seconds < 1209600  #  2 week
    return "#{seconds / 604800} weeks"   if seconds < 7257600  #  3 months
    return "#{seconds / 2419200} months" if seconds < 31536000 #  1 year
    return "#{seconds / 31536000} years"
  end

  # %q$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $"
  SVNID_PATTERN = /
    \$Id:\s
    (\S+)\s                # filename
    (\d+)\s                # rev
    (\d{4}-\d{2}-\d{2})\s  # Date (YYYY-MM-DD)
    (\d{2}:\d{2}:\d{2}Z)\s # Time (HH:MM:SSZ)
    (\w+)\s                # committer
    \$$
  /x

  ##
  # Try to extract Subversion information out of the first constant whose
  # value looks like a subversion Id tag. If no matching constant is found,
  # and empty hash is returned.

  def get_svninfo klass
    constants = klass.constants or return {}

    constants.find { |c| c.value =~ SVNID_PATTERN } or return {}

    filename, rev, date, time, committer = $~.captures
    commitdate = Time.parse "#{date} #{time}"

    return {
      :filename    => filename,
      :rev         => Integer(rev),
      :commitdate  => commitdate,
      :commitdelta => time_delta_string(Time.now - commitdate),
      :committer   => committer,
    }
  end

  ##
  # Creates a template from its components and the +body_file+.
  #
  # For backwards compatibility, if +body_file+ contains "<html" the body is
  # used directly.

  def assemble_template body_file
    body = body_file.read
    return body if body =~ /<html/

    head_file = @template_dir + '_head.rhtml'
    footer_file = @template_dir + '_footer.rhtml'

    <<-TEMPLATE
<!DOCTYPE html>

<html>
<head>
#{head_file.read}

#{body}

#{footer_file.read}
    TEMPLATE
  end

  ##
  # Renders the ERb contained in +file_name+ relative to the template
  # directory and returns the result based on the current context.

  def render file_name
    template_file = @template_dir + file_name

    template = template_for template_file, false, RDoc::ERBPartial

    template.filename = template_file.to_s

    template.result @context
  end

  ##
  # Load and render the erb template in the given +template_file+ and write
  # it out to +out_file+.
  #
  # Both +template_file+ and +out_file+ should be Pathname-like objects.
  #
  # An io will be yielded which must be captured by binding in the caller.

  def render_template template_file, out_file = nil # :yield: io
    io_output = out_file && !@dry_run && @file_output
    erb_klass = io_output ? RDoc::ERBIO : ERB

    template = template_for template_file, true, erb_klass

    if io_output then
      debug_msg "Outputting to %s" % [out_file.expand_path]

      out_file.dirname.mkpath
      out_file.open 'w', 0644 do |io|
        io.set_encoding @options.encoding

        @context = yield io

        template_result template, @context, template_file
      end
    else
      @context = yield nil

      output = template_result template, @context, template_file

      debug_msg "  would have written %d characters to %s" % [
        output.length, out_file.expand_path
      ] if @dry_run

      output
    end
  end

  ##
  # Creates the result for +template+ with +context+.  If an error is raised a
  # Pathname +template_file+ will indicate the file where the error occurred.

  def template_result template, context, template_file
    template.filename = template_file.to_s
    template.result context
  rescue NoMethodError => e
    raise RDoc::Error, "Error while evaluating %s: %s" % [
      template_file.expand_path,
      e.message,
    ], e.backtrace
  end

  ##
  # Retrieves a cache template for +file+, if present, or fills the cache.

  def template_for file, page = true, klass = ERB
    template = @template_cache[file]

    return template if template

    if page then
      template = assemble_template file
      erbout = 'io'
    else
      template = file.read
      template = template.encode @options.encoding

      file_var = File.basename(file).sub(/\..*/, '')

      erbout = "_erbout_#{file_var}"
    end

    if RUBY_VERSION >= '2.6'
      template = klass.new template, trim_mode: '-', eoutvar: erbout
    else
      template = klass.new template, nil, '-', erbout
    end
    @template_cache[file] = template
    template
  end

end
PK."#[f�=w��*gems/rdoc-6.4.1.1/lib/rdoc/generator/ri.rbnu�[���# frozen_string_literal: true
##
# Generates ri data files

class RDoc::Generator::RI

  RDoc::RDoc.add_generator self

  ##
  # Description of this generator

  DESCRIPTION = 'creates ri data files'

  ##
  # Set up a new ri generator

  def initialize store, options #:not-new:
    @options    = options
    @store      = store
    @store.path = '.'
  end

  ##
  # Writes the parsed data store to disk for use by ri.

  def generate
    @store.save
  end

end

PK."#[�I��#$#$)gems/rdoc-6.4.1.1/lib/rdoc/method_attr.rbnu�[���# frozen_string_literal: true
##
# Abstract class representing either a method or an attribute.

class RDoc::MethodAttr < RDoc::CodeObject

  include Comparable

  ##
  # Name of this method/attribute.

  attr_accessor :name

  ##
  # public, protected, private

  attr_accessor :visibility

  ##
  # Is this a singleton method/attribute?

  attr_accessor :singleton

  ##
  # Source file token stream

  attr_reader :text

  ##
  # Array of other names for this method/attribute

  attr_reader :aliases

  ##
  # The method/attribute we're aliasing

  attr_accessor :is_alias_for

  #--
  # The attributes below are for AnyMethod only.
  # They are left here for the time being to
  # allow ri to operate.
  # TODO modify ri to avoid calling these on attributes.
  #++

  ##
  # Parameters yielded by the called block

  attr_reader :block_params

  ##
  # Parameters for this method

  attr_accessor :params

  ##
  # Different ways to call this method

  attr_accessor :call_seq

  ##
  # The call_seq or the param_seq with method name, if there is no call_seq.

  attr_reader :arglists

  ##
  # Pretty parameter list for this method

  attr_reader :param_seq


  ##
  # Creates a new MethodAttr from token stream +text+ and method or attribute
  # name +name+.
  #
  # Usually this is called by super from a subclass.

  def initialize text, name
    super()

    @text = text
    @name = name

    @aliases      = []
    @is_alias_for = nil
    @parent_name  = nil
    @singleton    = nil
    @visibility   = :public
    @see = false

    @arglists     = nil
    @block_params = nil
    @call_seq     = nil
    @param_seq    = nil
    @params       = nil
  end

  ##
  # Resets cached data for the object so it can be rebuilt by accessor methods

  def initialize_copy other # :nodoc:
    @full_name = nil
  end

  def initialize_visibility # :nodoc:
    super
    @see = nil
  end

  ##
  # Order by #singleton then #name

  def <=>(other)
    return unless other.respond_to?(:singleton) &&
                  other.respond_to?(:name)

    [     @singleton ? 0 : 1,       name] <=>
    [other.singleton ? 0 : 1, other.name]
  end

  def == other # :nodoc:
    equal?(other) or self.class == other.class and full_name == other.full_name
  end

  ##
  # A method/attribute is documented if any of the following is true:
  # - it was marked with :nodoc:;
  # - it has a comment;
  # - it is an alias for a documented method;
  # - it has a +#see+ method that is documented.

  def documented?
    super or
      (is_alias_for and is_alias_for.documented?) or
      (see and see.documented?)
  end

  ##
  # A method/attribute to look at,
  # in particular if this method/attribute has no documentation.
  #
  # It can be a method/attribute of the superclass or of an included module,
  # including the Kernel module, which is always appended to the included
  # modules.
  #
  # Returns +nil+ if there is no such method/attribute.
  # The +#is_alias_for+ method/attribute, if any, is not included.
  #
  # Templates may generate a "see also ..." if this method/attribute
  # has documentation, and "see ..." if it does not.

  def see
    @see = find_see if @see == false
    @see
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  def find_see # :nodoc:
    return nil if singleton || is_alias_for

    # look for the method
    other = find_method_or_attribute name
    return other if other

    # if it is a setter, look for a getter
    return nil unless name =~ /[a-z_]=$/i   # avoid == or ===
    return find_method_or_attribute name[0..-2]
  end

  def find_method_or_attribute name # :nodoc:
    return nil unless parent.respond_to? :ancestors

    searched = parent.ancestors
    kernel = @store.modules_hash['Kernel']

    searched << kernel if kernel &&
      parent != kernel && !searched.include?(kernel)

    searched.each do |ancestor|
      next if String === ancestor
      next if parent == ancestor

      other = ancestor.find_method_named('#' + name) ||
              ancestor.find_attribute_named(name)

      return other if other
    end

    nil
  end

  ##
  # Abstract method. Contexts in their building phase call this
  # to register a new alias for this known method/attribute.
  #
  # - creates a new AnyMethod/Attribute named <tt>an_alias.new_name</tt>;
  # - adds +self+ as an alias for the new method or attribute
  # - adds the method or attribute to #aliases
  # - adds the method or attribute to +context+.

  def add_alias(an_alias, context)
    raise NotImplementedError
  end

  ##
  # HTML fragment reference for this method

  def aref
    type = singleton ? 'c' : 'i'
    # % characters are not allowed in html names => dash instead
    "#{aref_prefix}-#{type}-#{html_name}"
  end

  ##
  # Prefix for +aref+, defined by subclasses.

  def aref_prefix
    raise NotImplementedError
  end

  ##
  # Attempts to sanitize the content passed by the Ruby parser:
  # remove outer parentheses, etc.

  def block_params=(value)
    # 'yield.to_s' or 'assert yield, msg'
    return @block_params = '' if value =~ /^[\.,]/

    # remove trailing 'if/unless ...'
    return @block_params = '' if value =~ /^(if|unless)\s/

    value = $1.strip if value =~ /^(.+)\s(if|unless)\s/

    # outer parentheses
    value = $1 if value =~ /^\s*\((.*)\)\s*$/
    value = value.strip

    # proc/lambda
    return @block_params = $1 if value =~ /^(proc|lambda)(\s*\{|\sdo)/

    # surrounding +...+ or [...]
    value = $1.strip if value =~ /^\+(.*)\+$/
    value = $1.strip if value =~ /^\[(.*)\]$/

    return @block_params = '' if value.empty?

    # global variable
    return @block_params = 'str' if value =~ /^\$[&0-9]$/

    # wipe out array/hash indices
    value.gsub!(/(\w)\[[^\[]+\]/, '\1')

    # remove @ from class/instance variables
    value.gsub!(/@@?([a-z0-9_]+)/, '\1')

    # method calls => method name
    value.gsub!(/([A-Z:a-z0-9_]+)\.([a-z0-9_]+)(\s*\(\s*[a-z0-9_.,\s]*\s*\)\s*)?/) do
      case $2
      when 'to_s'      then $1
      when 'const_get' then 'const'
      when 'new' then
        $1.split('::').last.  # ClassName => class_name
          gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
          gsub(/([a-z\d])([A-Z])/,'\1_\2').
          downcase
      else
        $2
      end
    end

    # class prefixes
    value.gsub!(/[A-Za-z0-9_:]+::/, '')

    # simple expressions
    value = $1 if value =~ /^([a-z0-9_]+)\s*[-*+\/]/

    @block_params = value.strip
  end

  ##
  # HTML id-friendly method/attribute name

  def html_name
    require 'cgi'

    CGI.escape(@name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '')
  end

  ##
  # Full method/attribute name including namespace

  def full_name
    @full_name ||= "#{parent_name}#{pretty_name}"
  end

  def inspect # :nodoc:
    alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
    visibility = self.visibility
    visibility = "forced #{visibility}" if force_documentation
    "#<%s:0x%x %s (%s)%s>" % [
      self.class, object_id,
      full_name,
      visibility,
      alias_for,
    ]
  end

  ##
  # '::' for a class method/attribute, '#' for an instance method.

  def name_prefix
    @singleton ? '::' : '#'
  end

  ##
  # Name for output to HTML.  For class methods the full name with a "." is
  # used like +SomeClass.method_name+.  For instance methods the class name is
  # used if +context+ does not match the parent.
  #
  # This is to help prevent people from using :: to call class methods.

  def output_name context
    return "#{name_prefix}#{@name}" if context == parent

    "#{parent_name}#{@singleton ? '.' : '#'}#{@name}"
  end

  ##
  # Method/attribute name with class/instance indicator

  def pretty_name
    "#{name_prefix}#{@name}"
  end

  ##
  # Type of method/attribute (class or instance)

  def type
    singleton ? 'class' : 'instance'
  end

  ##
  # Path to this method for use with HTML generator output.

  def path
    "#{@parent.path}##{aref}"
  end

  ##
  # Name of our parent with special handling for un-marshaled methods

  def parent_name
    @parent_name || super
  end

  def pretty_print q # :nodoc:
    alias_for =
      if @is_alias_for.respond_to? :name then
        "alias for #{@is_alias_for.name}"
      elsif Array === @is_alias_for then
        "alias for #{@is_alias_for.last}"
      end

    q.group 2, "[#{self.class.name} #{full_name} #{visibility}", "]" do
      if alias_for then
        q.breakable
        q.text alias_for
      end

      if text then
        q.breakable
        q.text "text:"
        q.breakable
        q.pp @text
      end

      unless comment.empty? then
        q.breakable
        q.text "comment:"
        q.breakable
        q.pp @comment
      end
    end
  end

  ##
  # Used by RDoc::Generator::JsonIndex to create a record for the search
  # engine.

  def search_record
    [
      @name,
      full_name,
      @name,
      @parent.full_name,
      path,
      params,
      snippet(@comment),
    ]
  end

  def to_s # :nodoc:
    if @is_alias_for
      "#{self.class.name}: #{full_name} -> #{is_alias_for}"
    else
      "#{self.class.name}: #{full_name}"
    end
  end

end

PK."#[ʥ9e��%gems/rdoc-6.4.1.1/lib/rdoc/tom_doc.rbnu�[���# frozen_string_literal: true
# :markup: tomdoc

# A parser for TomDoc based on TomDoc 1.0.0-rc1 (02adef9b5a)
#
# The TomDoc specification can be found at:
#
# http://tomdoc.org
#
# The latest version of the TomDoc specification can be found at:
#
# https://github.com/mojombo/tomdoc/blob/master/tomdoc.md
#
# To choose TomDoc as your only default format see RDoc::Options@Saved+Options
# for instructions on setting up a <code>.rdoc_options</code> file to store
# your project default.
#
# There are a few differences between this parser and the specification.  A
# best-effort was made to follow the specification as closely as possible but
# some choices to deviate were made.
#
# A future version of RDoc will warn when a MUST or MUST NOT is violated and
# may warn when a SHOULD or SHOULD NOT is violated.  RDoc will always try
# to emit documentation even if given invalid TomDoc.
#
# Here are some implementation choices this parser currently makes:
#
# This parser allows rdoc-style inline markup but you should not depended on
# it.
#
# This parser allows a space between the comment and the method body.
#
# This parser does not require the default value to be described for an
# optional argument.
#
# This parser does not examine the order of sections.  An Examples section may
# precede the Arguments section.
#
# This class is documented in TomDoc format.  Since this is a subclass of the
# RDoc markup parser there isn't much to see here, unfortunately.

class RDoc::TomDoc < RDoc::Markup::Parser

  # Internal: Token accessor

  attr_reader :tokens

  # Internal: Adds a post-processor which sets the RDoc section based on the
  # comment's status.
  #
  # Returns nothing.

  def self.add_post_processor # :nodoc:
    RDoc::Markup::PreProcess.post_process do |comment, code_object|
      next unless code_object and
                  RDoc::Comment === comment and comment.format == 'tomdoc'

      comment.text.gsub!(/(\A\s*# )(Public|Internal|Deprecated):\s+/) do
        section = code_object.add_section $2
        code_object.temporary_section = section

        $1
      end
    end
  end

  add_post_processor

  # Public: Parses TomDoc from text
  #
  # text - A String containing TomDoc-format text.
  #
  # Examples
  #
  #   RDoc::TomDoc.parse <<-TOMDOC
  #   This method does some things
  #
  #   Returns nothing.
  #   TOMDOC
  #   # => #<RDoc::Markup::Document:0xXXX @parts=[...], @file=nil>
  #
  # Returns an RDoc::Markup::Document representing the TomDoc format.

  def self.parse text
    parser = new

    parser.tokenize text
    doc = RDoc::Markup::Document.new
    parser.parse doc
    doc
  end

  # Internal: Extracts the Signature section's method signature
  #
  # comment - An RDoc::Comment that will be parsed and have the signature
  #           extracted
  #
  # Returns a String containing the signature and nil if not

  def self.signature comment
    return unless comment.tomdoc?

    document = comment.parse

    signature = nil
    found_heading = false
    found_signature = false

    document.parts.delete_if do |part|
      next false if found_signature

      found_heading ||=
        RDoc::Markup::Heading === part && part.text == 'Signature'

      next false unless found_heading

      next true if RDoc::Markup::BlankLine === part

      if RDoc::Markup::Verbatim === part then
        signature = part
        found_signature = true
      end
    end

    signature and signature.text
  end

  # Public: Creates a new TomDoc parser.  See also RDoc::Markup::parse

  def initialize
    super

    @section      = nil
    @seen_returns = false
  end

  # Internal: Builds a heading from the token stream
  #
  # level - The level of heading to create
  #
  # Returns an RDoc::Markup::Heading

  def build_heading level
    heading = super

    @section = heading.text

    heading
  end

  # Internal: Builds a verbatim from the token stream.  A verbatim in the
  # Examples section will be marked as in Ruby format.
  #
  # margin - The indentation from the margin for lines that belong to this
  #          verbatim section.
  #
  # Returns an RDoc::Markup::Verbatim

  def build_verbatim margin
    verbatim = super

    verbatim.format = :ruby if @section == 'Examples'

    verbatim
  end

  # Internal: Builds a paragraph from the token stream
  #
  # margin - Unused
  #
  # Returns an RDoc::Markup::Paragraph.

  def build_paragraph margin
    p :paragraph_start => margin if @debug

    paragraph = RDoc::Markup::Paragraph.new

    until @tokens.empty? do
      type, data, = get

      case type
      when :TEXT then
        @section = 'Returns' if data =~ /\A(Returns|Raises)/

        paragraph << data
      when :NEWLINE then
        if :TEXT == peek_token[0] then
          # Lines beginning with 'Raises' in the Returns section should not be
          # treated as multiline text
          if 'Returns' == @section and
            peek_token[1].start_with?('Raises') then
            break
          else
            paragraph << ' '
          end
        else
          break
        end
      else
        unget
        break
      end
    end

    p :paragraph_end => margin if @debug

    paragraph
  end

  ##
  # Detects a section change to "Returns" and adds a heading

  def parse_text parent, indent # :nodoc:
    paragraph = build_paragraph indent

    if false == @seen_returns and 'Returns' == @section then
      @seen_returns = true
      parent << RDoc::Markup::Heading.new(3, 'Returns')
      parent << RDoc::Markup::BlankLine.new
    end

    parent << paragraph
  end

  # Internal: Turns text into an Array of tokens
  #
  # text - A String containing TomDoc-format text.
  #
  # Returns self.

  def tokenize text
    text = text.sub(/\A(Public|Internal|Deprecated):\s+/, '')

    setup_scanner text

    until @s.eos? do
      pos = @s.pos

      # leading spaces will be reflected by the column of the next token
      # the only thing we loose are trailing spaces at the end of the file
      next if @s.scan(/ +/)

      @tokens << case
                 when @s.scan(/\r?\n/) then
                   token = [:NEWLINE, @s.matched, *pos]
                   @s.newline!
                   token
                 when @s.scan(/(Examples|Signature)$/) then
                   @tokens << [:HEADER, 3, *pos]

                   [:TEXT, @s[1], *pos]
                 when @s.scan(/([:\w][\w\[\]]*)[ ]+- /) then
                   [:NOTE, @s[1], *pos]
                 else
                   @s.scan(/.*/)
                   [:TEXT, @s.matched.sub(/\r$/, ''), *pos]
                 end
    end

    self
  end

end
PK."#[x�����"gems/rdoc-6.4.1.1/lib/rdoc/task.rbnu�[���# frozen_string_literal: true
#--
# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#++

begin
  gem 'rdoc'
rescue Gem::LoadError
end unless defined?(RDoc)

begin
  gem 'rake'
rescue Gem::LoadError
end unless defined?(Rake)

require 'rdoc'
require 'rake'
require 'rake/tasklib'

##
# RDoc::Task creates the following rake tasks to generate and clean up RDoc
# output:
#
# [rdoc]
#   Main task for this RDoc task.
#
# [clobber_rdoc]
#   Delete all the rdoc files.  This target is automatically added to the main
#   clobber target.
#
# [rerdoc]
#   Rebuild the rdoc files from scratch, even if they are not out of date.
#
# Simple Example:
#
#   require 'rdoc/task'
#
#   RDoc::Task.new do |rdoc|
#     rdoc.main = "README.rdoc"
#     rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
#   end
#
# The +rdoc+ object passed to the block is an RDoc::Task object. See the
# attributes list for the RDoc::Task class for available customization options.
#
# == Specifying different task names
#
# You may wish to give the task a different name, such as if you are
# generating two sets of documentation.  For instance, if you want to have a
# development set of documentation including private methods:
#
#   require 'rdoc/task'
#
#   RDoc::Task.new :rdoc_dev do |rdoc|
#     rdoc.main = "README.doc"
#     rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
#     rdoc.options << "--all"
#   end
#
# The tasks would then be named :<em>rdoc_dev</em>,
# :clobber_<em>rdoc_dev</em>, and :re<em>rdoc_dev</em>.
#
# If you wish to have completely different task names, then pass a Hash as
# first argument. With the <tt>:rdoc</tt>, <tt>:clobber_rdoc</tt> and
# <tt>:rerdoc</tt> options, you can customize the task names to your liking.
#
# For example:
#
#   require 'rdoc/task'
#
#   RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean",
#                  :rerdoc => "rdoc:force")
#
# This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt> and
# <tt>:rdoc:force</tt>.

class RDoc::Task < Rake::TaskLib

  ##
  # Name of the main, top level task.  (default is :rdoc)

  attr_accessor :name

  ##
  # Comment markup format.  rdoc, rd and tomdoc are supported.  (default is
  # 'rdoc')

  attr_accessor :markup

  ##
  # Name of directory to receive the html output files. (default is "html")

  attr_accessor :rdoc_dir

  ##
  # Title of RDoc documentation. (defaults to rdoc's default)

  attr_accessor :title

  ##
  # Name of file to be used as the main, top level file of the RDoc. (default
  # is none)

  attr_accessor :main

  ##
  # Name of template to be used by rdoc. (defaults to rdoc's default)

  attr_accessor :template

  ##
  # Name of format generator (<tt>--format</tt>) used by rdoc. (defaults to
  # rdoc's default)

  attr_accessor :generator

  ##
  # List of files to be included in the rdoc generation. (default is [])

  attr_accessor :rdoc_files

  ##
  # Additional list of options to be passed rdoc.  (default is [])

  attr_accessor :options

  ##
  # Whether to run the rdoc process as an external shell (default is false)

  attr_accessor :external

  ##
  # Create an RDoc task with the given name. See the RDoc::Task class overview
  # for documentation.

  def initialize name = :rdoc # :yield: self
    defaults

    check_names name

    @name = name

    yield self if block_given?

    define
  end

  ##
  # Ensures that +names+ only includes names for the :rdoc, :clobber_rdoc and
  # :rerdoc.  If other names are given an ArgumentError is raised.

  def check_names names
    return unless Hash === names

    invalid_options =
      names.keys.map { |k| k.to_sym } - [:rdoc, :clobber_rdoc, :rerdoc]

    unless invalid_options.empty? then
      raise ArgumentError, "invalid options: #{invalid_options.join ', '}"
    end
  end

  ##
  # Task description for the clobber rdoc task or its renamed equivalent

  def clobber_task_description
    "Remove RDoc HTML files"
  end

  ##
  # Sets default task values

  def defaults
    @name = :rdoc
    @rdoc_files = Rake::FileList.new
    @rdoc_dir = 'html'
    @main = nil
    @title = nil
    @template = nil
    @generator = nil
    @options = []
  end

  ##
  # All source is inline now.  This method is deprecated

  def inline_source # :nodoc:
    warn "RDoc::Task#inline_source is deprecated"
    true
  end

  ##
  # All source is inline now.  This method is deprecated

  def inline_source=(value) # :nodoc:
    warn "RDoc::Task#inline_source is deprecated"
  end

  ##
  # Create the tasks defined by this task lib.

  def define
    desc rdoc_task_description
    task rdoc_task_name

    desc rerdoc_task_description
    task rerdoc_task_name => [clobber_task_name, rdoc_task_name]

    desc clobber_task_description
    task clobber_task_name do
      rm_r @rdoc_dir rescue nil
    end

    task :clobber => [clobber_task_name]

    directory @rdoc_dir

    rdoc_target_deps = [
      @rdoc_files,
      Rake.application.rakefile
    ].flatten.compact

    task rdoc_task_name => [rdoc_target]
    file rdoc_target => rdoc_target_deps do
      @before_running_rdoc.call if @before_running_rdoc
      args = option_list + @rdoc_files

      $stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
      RDoc::RDoc.new.document args
    end

    self
  end

  ##
  # List of options that will be supplied to RDoc

  def option_list
    result = @options.dup
    result << "-o"       << @rdoc_dir
    result << "--main"   << main      if main
    result << "--markup" << markup    if markup
    result << "--title"  << title     if title
    result << "-T"       << template  if template
    result << '-f'       << generator if generator
    result
  end

  ##
  # The block passed to this method will be called just before running the
  # RDoc generator. It is allowed to modify RDoc::Task attributes inside the
  # block.

  def before_running_rdoc(&block)
    @before_running_rdoc = block
  end

  ##
  # Task description for the rdoc task or its renamed equivalent

  def rdoc_task_description
    'Build RDoc HTML files'
  end

  ##
  # Task description for the rerdoc task or its renamed description

  def rerdoc_task_description
    "Rebuild RDoc HTML files"
  end

  private

  def rdoc_target
    "#{rdoc_dir}/created.rid"
  end

  def rdoc_task_name
    case name
    when Hash then (name[:rdoc] || "rdoc").to_s
    else           name.to_s
    end
  end

  def clobber_task_name
    case name
    when Hash then (name[:clobber_rdoc] || "clobber_rdoc").to_s
    else           "clobber_#{name}"
    end
  end

  def rerdoc_task_name
    case name
    when Hash then (name[:rerdoc] || "rerdoc").to_s
    else           "re#{name}"
    end
  end

end

# :stopdoc:
module Rake

  ##
  # For backwards compatibility

  RDocTask = RDoc::Task

end
# :startdoc:
PK."#[�-�%%)gems/rdoc-6.4.1.1/lib/rdoc/code_object.rbnu�[���# frozen_string_literal: true
##
# Base class for the RDoc code tree.
#
# We contain the common stuff for contexts (which are containers) and other
# elements (methods, attributes and so on)
#
# Here's the tree of the CodeObject subclasses:
#
# * RDoc::Context
#   * RDoc::TopLevel
#   * RDoc::ClassModule
#     * RDoc::AnonClass (never used so far)
#     * RDoc::NormalClass
#     * RDoc::NormalModule
#     * RDoc::SingleClass
# * RDoc::MethodAttr
#   * RDoc::Attr
#   * RDoc::AnyMethod
#     * RDoc::GhostMethod
#     * RDoc::MetaMethod
# * RDoc::Alias
# * RDoc::Constant
# * RDoc::Mixin
#   * RDoc::Require
#   * RDoc::Include

class RDoc::CodeObject

  include RDoc::Text

  ##
  # Our comment

  attr_reader :comment

  ##
  # Do we document our children?

  attr_reader :document_children

  ##
  # Do we document ourselves?

  attr_reader :document_self

  ##
  # Are we done documenting (ie, did we come across a :enddoc:)?

  attr_reader :done_documenting

  ##
  # Which file this code object was defined in

  attr_reader :file

  ##
  # Force documentation of this CodeObject

  attr_reader :force_documentation

  ##
  # Line in #file where this CodeObject was defined

  attr_accessor :line

  ##
  # Hash of arbitrary metadata for this CodeObject

  attr_reader :metadata

  ##
  # Sets the parent CodeObject

  attr_writer :parent

  ##
  # Did we ever receive a +:nodoc:+ directive?

  attr_reader :received_nodoc

  ##
  # Set the section this CodeObject is in

  attr_writer :section

  ##
  # The RDoc::Store for this object.

  attr_reader :store

  ##
  # We are the model of the code, but we know that at some point we will be
  # worked on by viewers. By implementing the Viewable protocol, viewers can
  # associated themselves with these objects.

  attr_accessor :viewer

  ##
  # Creates a new CodeObject that will document itself and its children

  def initialize
    @metadata         = {}
    @comment          = ''
    @parent           = nil
    @parent_name      = nil # for loading
    @parent_class     = nil # for loading
    @section          = nil
    @section_title    = nil # for loading
    @file             = nil
    @full_name        = nil
    @store            = nil
    @track_visibility = true

    initialize_visibility
  end

  ##
  # Initializes state for visibility of this CodeObject and its children.

  def initialize_visibility # :nodoc:
    @document_children   = true
    @document_self       = true
    @done_documenting    = false
    @force_documentation = false
    @received_nodoc      = false
    @ignored             = false
    @suppressed          = false
    @track_visibility    = true
  end

  ##
  # Replaces our comment with +comment+, unless it is empty.

  def comment=(comment)
    @comment = case comment
               when NilClass               then ''
               when RDoc::Markup::Document then comment
               when RDoc::Comment          then comment.normalize
               else
                 if comment and not comment.empty? then
                   normalize_comment comment
                 else
                   # HACK correct fix is to have #initialize create @comment
                   #      with the correct encoding
                   if String === @comment and @comment.empty? then
                     @comment = RDoc::Encoding.change_encoding @comment, comment.encoding
                   end
                   @comment
                 end
               end
  end

  ##
  # Should this CodeObject be displayed in output?
  #
  # A code object should be displayed if:
  #
  # * The item didn't have a nodoc or wasn't in a container that had nodoc
  # * The item wasn't ignored
  # * The item has documentation and was not suppressed

  def display?
    @document_self and not @ignored and
      (documented? or not @suppressed)
  end

  ##
  # Enables or disables documentation of this CodeObject's children unless it
  # has been turned off by :enddoc:

  def document_children=(document_children)
    return unless @track_visibility

    @document_children = document_children unless @done_documenting
  end

  ##
  # Enables or disables documentation of this CodeObject unless it has been
  # turned off by :enddoc:.  If the argument is +nil+ it means the
  # documentation is turned off by +:nodoc:+.

  def document_self=(document_self)
    return unless @track_visibility
    return if @done_documenting

    @document_self = document_self
    @received_nodoc = true if document_self.nil?
  end

  ##
  # Does this object have a comment with content or is #received_nodoc true?

  def documented?
    @received_nodoc or !@comment.empty?
  end

  ##
  # Turns documentation on/off, and turns on/off #document_self
  # and #document_children.
  #
  # Once documentation has been turned off (by +:enddoc:+),
  # the object will refuse to turn #document_self or
  # #document_children on, so +:doc:+ and +:start_doc:+ directives
  # will have no effect in the current file.

  def done_documenting=(value)
    return unless @track_visibility
    @done_documenting  = value
    @document_self     = !value
    @document_children = @document_self
  end

  ##
  # Yields each parent of this CodeObject.  See also
  # RDoc::ClassModule#each_ancestor

  def each_parent
    code_object = self

    while code_object = code_object.parent do
      yield code_object
    end

    self
  end

  ##
  # File name where this CodeObject was found.
  #
  # See also RDoc::Context#in_files

  def file_name
    return unless @file

    @file.absolute_name
  end

  ##
  # Force the documentation of this object unless documentation
  # has been turned off by :enddoc:
  #--
  # HACK untested, was assigning to an ivar

  def force_documentation=(value)
    @force_documentation = value unless @done_documenting
  end

  ##
  # Sets the full_name overriding any computed full name.
  #
  # Set to +nil+ to clear RDoc's cached value

  def full_name= full_name
    @full_name = full_name
  end

  ##
  # Use this to ignore a CodeObject and all its children until found again
  # (#record_location is called).  An ignored item will not be displayed in
  # documentation.
  #
  # See github issue #55
  #
  # The ignored status is temporary in order to allow implementation details
  # to be hidden.  At the end of processing a file RDoc allows all classes
  # and modules to add new documentation to previously created classes.
  #
  # If a class was ignored (via stopdoc) then reopened later with additional
  # documentation it should be displayed.  If a class was ignored and never
  # reopened it should not be displayed.  The ignore flag allows this to
  # occur.

  def ignore
    return unless @track_visibility

    @ignored = true

    stop_doc
  end

  ##
  # Has this class been ignored?
  #
  # See also #ignore

  def ignored?
    @ignored
  end

  ##
  # The options instance from the store this CodeObject is attached to, or a
  # default options instance if the CodeObject is not attached.
  #
  # This is used by Text#snippet

  def options
    if @store and @store.rdoc then
      @store.rdoc.options
    else
      RDoc::Options.new
    end
  end

  ##
  # Our parent CodeObject.  The parent may be missing for classes loaded from
  # legacy RI data stores.

  def parent
    return @parent if @parent
    return nil unless @parent_name

    if @parent_class == RDoc::TopLevel then
      @parent = @store.add_file @parent_name
    else
      @parent = @store.find_class_or_module @parent_name

      return @parent if @parent

      begin
        @parent = @store.load_class @parent_name
      rescue RDoc::Store::MissingFileError
        nil
      end
    end
  end

  ##
  # File name of our parent

  def parent_file_name
    @parent ? @parent.base_name : '(unknown)'
  end

  ##
  # Name of our parent

  def parent_name
    @parent ? @parent.full_name : '(unknown)'
  end

  ##
  # Records the RDoc::TopLevel (file) where this code object was defined

  def record_location top_level
    @ignored    = false
    @suppressed = false
    @file       = top_level
  end

  ##
  # The section this CodeObject is in.  Sections allow grouping of constants,
  # attributes and methods inside a class or module.

  def section
    return @section if @section

    @section = parent.add_section @section_title if parent
  end

  ##
  # Enable capture of documentation unless documentation has been
  # turned off by :enddoc:

  def start_doc
    return if @done_documenting

    @document_self = true
    @document_children = true
    @ignored    = false
    @suppressed = false
  end

  ##
  # Disable capture of documentation

  def stop_doc
    return unless @track_visibility

    @document_self = false
    @document_children = false
  end

  ##
  # Sets the +store+ that contains this CodeObject

  def store= store
    @store = store

    return unless @track_visibility

    if :nodoc == options.visibility then
      initialize_visibility
      @track_visibility = false
    end
  end

  ##
  # Use this to suppress a CodeObject and all its children until the next file
  # it is seen in or documentation is discovered.  A suppressed item with
  # documentation will be displayed while an ignored item with documentation
  # may not be displayed.

  def suppress
    return unless @track_visibility

    @suppressed = true

    stop_doc
  end

  ##
  # Has this class been suppressed?
  #
  # See also #suppress

  def suppressed?
    @suppressed
  end

end
PK."#[S�2��'gems/rdoc-6.4.1.1/lib/rdoc/i18n/text.rbnu�[���# frozen_string_literal: true
##
# An i18n supported text.
#
# This object provides the following two features:
#
#   * Extracts translation messages from wrapped raw text.
#   * Translates wrapped raw text in specified locale.
#
# Wrapped raw text is one of String, RDoc::Comment or Array of them.

class RDoc::I18n::Text

  ##
  # Creates a new i18n supported text for +raw+ text.

  def initialize(raw)
    @raw = raw
  end

  ##
  # Extracts translation target messages and yields each message.
  #
  # Each yielded message is a Hash. It consists of the followings:
  #
  # :type      :: :paragraph
  # :paragraph :: String (The translation target message itself.)
  # :line_no   :: Integer (The line number of the :paragraph is started.)
  #
  # The above content may be added in the future.

  def extract_messages
    parse do |part|
      case part[:type]
      when :empty_line
        # ignore
      when :paragraph
        yield(part)
      end
    end
  end

  # Translates raw text into +locale+.
  def translate(locale)
    translated_text = ''
    parse do |part|
      case part[:type]
      when :paragraph
        translated_text += locale.translate(part[:paragraph])
      when :empty_line
        translated_text += part[:line]
      else
        raise "should not reach here: unexpected type: #{type}"
      end
    end
    translated_text
  end

  private
  def parse(&block)
    paragraph = ''
    paragraph_start_line = 0
    line_no = 0

    each_line(@raw) do |line|
      line_no += 1
      case line
      when /\A\s*\z/
        if paragraph.empty?
          emit_empty_line_event(line, line_no, &block)
        else
          paragraph += line
          emit_paragraph_event(paragraph, paragraph_start_line, line_no,
                               &block)
          paragraph = ''
        end
      else
        paragraph_start_line = line_no if paragraph.empty?
        paragraph += line
      end
    end

    unless paragraph.empty?
      emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
    end
  end

  def each_line(raw, &block)
    case raw
    when RDoc::Comment
      raw.text.each_line(&block)
    when Array
      raw.each do |comment, location|
        each_line(comment, &block)
      end
    else
      raw.each_line(&block)
    end
  end

  def emit_empty_line_event(line, line_no)
    part = {
      :type => :empty_line,
      :line => line,
      :line_no => line_no,
    }
    yield(part)
  end

  def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
    paragraph_part = {
      :type => :paragraph,
      :line_no => paragraph_start_line,
    }
    match_data = /(\s*)\z/.match(paragraph)
    if match_data
      paragraph_part[:paragraph] = match_data.pre_match
      yield(paragraph_part)
      emit_empty_line_event(match_data[1], line_no, &block)
    else
      paragraph_part[:paragraph] = paragraph
      yield(paragraph_part)
    end
  end

end
PK."#[KzVf	f	)gems/rdoc-6.4.1.1/lib/rdoc/i18n/locale.rbnu�[���# frozen_string_literal: true
##
# A message container for a locale.
#
# This object provides the following two features:
#
#   * Loads translated messages from .po file.
#   * Translates a message into the locale.

class RDoc::I18n::Locale

  @@locales = {} # :nodoc:

  class << self

    ##
    # Returns the locale object for +locale_name+.

    def [](locale_name)
      @@locales[locale_name] ||= new(locale_name)
    end

    ##
    # Sets the locale object for +locale_name+.
    #
    # Normally, this method is not used. This method is useful for
    # testing.

    def []=(locale_name, locale)
      @@locales[locale_name] = locale
    end

  end

  ##
  # The name of the locale. It uses IETF language tag format
  # +[language[_territory][.codeset][@modifier]]+.
  #
  # See also {BCP 47 - Tags for Identifying
  # Languages}[http://tools.ietf.org/rfc/bcp/bcp47.txt].

  attr_reader :name

  ##
  # Creates a new locale object for +name+ locale. +name+ must
  # follow IETF language tag format.

  def initialize(name)
    @name = name
    @messages = {}
  end

  ##
  # Loads translation messages from +locale_directory+/+@name+/rdoc.po
  # or +locale_directory+/+@name+.po. The former has high priority.
  #
  # This method requires gettext gem for parsing .po file. If you
  # don't have gettext gem, this method doesn't load .po file. This
  # method warns and returns +false+.
  #
  # Returns +true+ if succeeded, +false+ otherwise.

  def load(locale_directory)
    return false if @name.nil?

    po_file_candidates = [
      File.join(locale_directory, @name, 'rdoc.po'),
      File.join(locale_directory, "#{@name}.po"),
    ]
    po_file = po_file_candidates.find do |po_file_candidate|
      File.exist?(po_file_candidate)
    end
    return false unless po_file

    begin
      require 'gettext/po_parser'
      require 'gettext/mo'
    rescue LoadError
      warn('Need gettext gem for i18n feature:')
      warn('  gem install gettext')
      return false
    end

    po_parser = GetText::POParser.new
    messages = GetText::MO.new
    po_parser.report_warning = false
    po_parser.parse_file(po_file, messages)

    @messages.merge!(messages)

    true
  end

  ##
  # Translates the +message+ into locale. If there is no translation
  # messages for +message+ in locale, +message+ itself is returned.

  def translate(message)
    @messages[message] || message
  end

end
PK."#[(�.�Z�Z#gems/rdoc-6.4.1.1/lib/rdoc/store.rbnu�[���# frozen_string_literal: true
require 'fileutils'

##
# A set of rdoc data for a single project (gem, path, etc.).
#
# The store manages reading and writing ri data for a project and maintains a
# cache of methods, classes and ancestors in the store.
#
# The store maintains a #cache of its contents for faster lookup.  After
# adding items to the store it must be flushed using #save_cache.  The cache
# contains the following structures:
#
#    @cache = {
#      :ancestors        => {}, # class name => ancestor names
#      :attributes       => {}, # class name => attributes
#      :class_methods    => {}, # class name => class methods
#      :instance_methods => {}, # class name => instance methods
#      :modules          => [], # classes and modules in this store
#      :pages            => [], # page names
#    }
#--
# TODO need to prune classes

class RDoc::Store

  ##
  # Errors raised from loading or saving the store

  class Error < RDoc::Error
  end

  ##
  # Raised when a stored file for a class, module, page or method is missing.

  class MissingFileError < Error

    ##
    # The store the file should exist in

    attr_reader :store

    ##
    # The file the #name should be saved as

    attr_reader :file

    ##
    # The name of the object the #file would be loaded from

    attr_reader :name

    ##
    # Creates a new MissingFileError for the missing +file+ for the given
    # +name+ that should have been in the +store+.

    def initialize store, file, name
      @store = store
      @file  = file
      @name  = name
    end

    def message # :nodoc:
      "store at #{@store.path} missing file #{@file} for #{@name}"
    end

  end

  ##
  # Stores the name of the C variable a class belongs to.  This helps wire up
  # classes defined from C across files.

  attr_reader :c_enclosure_classes # :nodoc:

  attr_reader :c_enclosure_names # :nodoc:

  ##
  # Maps C variables to class or module names for each parsed C file.

  attr_reader :c_class_variables

  ##
  # Maps C variables to singleton class names for each parsed C file.

  attr_reader :c_singleton_class_variables

  ##
  # If true this Store will not write any files

  attr_accessor :dry_run

  ##
  # Path this store reads or writes

  attr_accessor :path

  ##
  # The RDoc::RDoc driver for this parse tree.  This allows classes consulting
  # the documentation tree to access user-set options, for example.

  attr_accessor :rdoc

  ##
  # Type of ri datastore this was loaded from.  See RDoc::RI::Driver,
  # RDoc::RI::Paths.

  attr_accessor :type

  ##
  # The contents of the Store

  attr_reader :cache

  ##
  # The encoding of the contents in the Store

  attr_accessor :encoding

  ##
  # The lazy constants alias will be discovered in passing

  attr_reader :unmatched_constant_alias

  ##
  # Creates a new Store of +type+ that will load or save to +path+

  def initialize path = nil, type = nil
    @dry_run  = false
    @encoding = nil
    @path     = path
    @rdoc     = nil
    @type     = type

    @cache = {
      :ancestors                   => {},
      :attributes                  => {},
      :class_methods               => {},
      :c_class_variables           => {},
      :c_singleton_class_variables => {},
      :encoding                    => @encoding,
      :instance_methods            => {},
      :main                        => nil,
      :modules                     => [],
      :pages                       => [],
      :title                       => nil,
    }

    @classes_hash = {}
    @modules_hash = {}
    @files_hash   = {}
    @text_files_hash = {}

    @c_enclosure_classes = {}
    @c_enclosure_names   = {}

    @c_class_variables           = {}
    @c_singleton_class_variables = {}

    @unique_classes = nil
    @unique_modules = nil

    @unmatched_constant_alias = {}
  end

  ##
  # Adds +module+ as an enclosure (namespace) for the given +variable+ for C
  # files.

  def add_c_enclosure variable, namespace
    @c_enclosure_classes[variable] = namespace
  end

  ##
  # Adds C variables from an RDoc::Parser::C

  def add_c_variables c_parser
    filename = c_parser.top_level.relative_name

    @c_class_variables[filename] = make_variable_map c_parser.classes

    @c_singleton_class_variables[filename] = c_parser.singleton_classes
  end

  ##
  # Adds the file with +name+ as an RDoc::TopLevel to the store.  Returns the
  # created RDoc::TopLevel.

  def add_file absolute_name, relative_name: absolute_name, parser: nil
    unless top_level = @files_hash[relative_name] then
      top_level = RDoc::TopLevel.new absolute_name, relative_name
      top_level.parser = parser if parser
      top_level.store = self
      @files_hash[relative_name] = top_level
      @text_files_hash[relative_name] = top_level if top_level.text?
    end

    top_level
  end

  def update_parser_of_file(absolute_name, parser)
    if top_level = @files_hash[absolute_name] then
      @text_files_hash[absolute_name] = top_level if top_level.text?
    end
  end

  ##
  # Returns all classes discovered by RDoc

  def all_classes
    @classes_hash.values
  end

  ##
  # Returns all classes and modules discovered by RDoc

  def all_classes_and_modules
    @classes_hash.values + @modules_hash.values
  end

  ##
  # All TopLevels known to RDoc

  def all_files
    @files_hash.values
  end

  ##
  # Returns all modules discovered by RDoc

  def all_modules
    modules_hash.values
  end

  ##
  # Ancestors cache accessor.  Maps a klass name to an Array of its ancestors
  # in this store.  If Foo in this store inherits from Object, Kernel won't be
  # listed (it will be included from ruby's ri store).

  def ancestors
    @cache[:ancestors]
  end

  ##
  # Attributes cache accessor.  Maps a class to an Array of its attributes.

  def attributes
    @cache[:attributes]
  end

  ##
  # Path to the cache file

  def cache_path
    File.join @path, 'cache.ri'
  end

  ##
  # Path to the ri data for +klass_name+

  def class_file klass_name
    name = klass_name.split('::').last
    File.join class_path(klass_name), "cdesc-#{name}.ri"
  end

  ##
  # Class methods cache accessor.  Maps a class to an Array of its class
  # methods (not full name).

  def class_methods
    @cache[:class_methods]
  end

  ##
  # Path where data for +klass_name+ will be stored (methods or class data)

  def class_path klass_name
    File.join @path, *klass_name.split('::')
  end

  ##
  # Hash of all classes known to RDoc

  def classes_hash
    @classes_hash
  end

  ##
  # Removes empty items and ensures item in each collection are unique and
  # sorted

  def clean_cache_collection collection # :nodoc:
    collection.each do |name, item|
      if item.empty? then
        collection.delete name
      else
        # HACK mongrel-1.1.5 documents its files twice
        item.uniq!
        item.sort!
      end
    end
  end

  ##
  # Prepares the RDoc code object tree for use by a generator.
  #
  # It finds unique classes/modules defined, and replaces classes/modules that
  # are aliases for another one by a copy with RDoc::ClassModule#is_alias_for
  # set.
  #
  # It updates the RDoc::ClassModule#constant_aliases attribute of "real"
  # classes or modules.
  #
  # It also completely removes the classes and modules that should be removed
  # from the documentation and the methods that have a visibility below
  # +min_visibility+, which is the <tt>--visibility</tt> option.
  #
  # See also RDoc::Context#remove_from_documentation?

  def complete min_visibility
    fix_basic_object_inheritance

    # cache included modules before they are removed from the documentation
    all_classes_and_modules.each { |cm| cm.ancestors }

    unless min_visibility == :nodoc then
      remove_nodoc @classes_hash
      remove_nodoc @modules_hash
    end

    @unique_classes = find_unique @classes_hash
    @unique_modules = find_unique @modules_hash

    unique_classes_and_modules.each do |cm|
      cm.complete min_visibility
    end

    @files_hash.each_key do |file_name|
      tl = @files_hash[file_name]

      unless tl.text? then
        tl.modules_hash.clear
        tl.classes_hash.clear

        tl.classes_or_modules.each do |cm|
          name = cm.full_name
          if cm.type == 'class' then
            tl.classes_hash[name] = cm if @classes_hash[name]
          else
            tl.modules_hash[name] = cm if @modules_hash[name]
          end
        end
      end
    end
  end

  ##
  # Hash of all files known to RDoc

  def files_hash
    @files_hash
  end

  ##
  # Finds the enclosure (namespace) for the given C +variable+.

  def find_c_enclosure variable
    @c_enclosure_classes.fetch variable do
      break unless name = @c_enclosure_names[variable]

      mod = find_class_or_module name

      unless mod then
        loaded_mod = load_class_data name

        file = loaded_mod.in_files.first

        return unless file # legacy data source

        file.store = self

        mod = file.add_module RDoc::NormalModule, name
      end

      @c_enclosure_classes[variable] = mod
    end
  end

  ##
  # Finds the class with +name+ in all discovered classes

  def find_class_named name
    @classes_hash[name]
  end

  ##
  # Finds the class with +name+ starting in namespace +from+

  def find_class_named_from name, from
    from = find_class_named from unless RDoc::Context === from

    until RDoc::TopLevel === from do
      return nil unless from

      klass = from.find_class_named name
      return klass if klass

      from = from.parent
    end

    find_class_named name
  end

  ##
  # Finds the class or module with +name+

  def find_class_or_module name
    name = $' if name =~ /^::/
    @classes_hash[name] || @modules_hash[name]
  end

  ##
  # Finds the file with +name+ in all discovered files

  def find_file_named name
    @files_hash[name]
  end

  ##
  # Finds the module with +name+ in all discovered modules

  def find_module_named name
    @modules_hash[name]
  end

  ##
  # Returns the RDoc::TopLevel that is a text file and has the given
  # +file_name+

  def find_text_page file_name
    @text_files_hash.each_value.find do |file|
      file.full_name == file_name
    end
  end

  ##
  # Finds unique classes/modules defined in +all_hash+,
  # and returns them as an array. Performs the alias
  # updates in +all_hash+: see ::complete.
  #--
  # TODO  aliases should be registered by Context#add_module_alias

  def find_unique all_hash
    unique = []

    all_hash.each_pair do |full_name, cm|
      unique << cm if full_name == cm.full_name
    end

    unique
  end

  ##
  # Fixes the erroneous <tt>BasicObject < Object</tt> in 1.9.
  #
  # Because we assumed all classes without a stated superclass
  # inherit from Object, we have the above wrong inheritance.
  #
  # We fix BasicObject right away if we are running in a Ruby
  # version >= 1.9.

  def fix_basic_object_inheritance
    basic = classes_hash['BasicObject']
    return unless basic
    basic.superclass = nil
  end

  ##
  # Friendly rendition of #path

  def friendly_path
    case type
    when :gem    then
      parent = File.expand_path '..', @path
      "gem #{File.basename parent}"
    when :home   then RDoc.home
    when :site   then 'ruby site'
    when :system then 'ruby core'
    else @path
    end
  end

  def inspect # :nodoc:
    "#<%s:0x%x %s %p>" % [self.class, object_id, @path, module_names.sort]
  end

  ##
  # Instance methods cache accessor.  Maps a class to an Array of its
  # instance methods (not full name).

  def instance_methods
    @cache[:instance_methods]
  end

  ##
  # Loads all items from this store into memory.  This recreates a
  # documentation tree for use by a generator

  def load_all
    load_cache

    module_names.each do |module_name|
      mod = find_class_or_module(module_name) || load_class(module_name)

      # load method documentation since the loaded class/module does not have
      # it
      loaded_methods = mod.method_list.map do |method|
        load_method module_name, method.full_name
      end

      mod.method_list.replace loaded_methods

      loaded_attributes = mod.attributes.map do |attribute|
        load_method module_name, attribute.full_name
      end

      mod.attributes.replace loaded_attributes
    end

    all_classes_and_modules.each do |mod|
      descendent_re = /^#{mod.full_name}::[^:]+$/

      module_names.each do |name|
        next unless name =~ descendent_re

        descendent = find_class_or_module name

        case descendent
        when RDoc::NormalClass then
          mod.classes_hash[name] = descendent
        when RDoc::NormalModule then
          mod.modules_hash[name] = descendent
        end
      end
    end

    @cache[:pages].each do |page_name|
      page = load_page page_name
      @files_hash[page_name] = page
      @text_files_hash[page_name] = page if page.text?
    end
  end

  ##
  # Loads cache file for this store

  def load_cache
    #orig_enc = @encoding

    @cache = marshal_load(cache_path)

    load_enc = @cache[:encoding]

    # TODO this feature will be time-consuming to add:
    # a) Encodings may be incompatible but transcodeable
    # b) Need to warn in the appropriate spots, wherever they may be
    # c) Need to handle cross-cache differences in encodings
    # d) Need to warn when generating into a cache with different encodings
    #
    #if orig_enc and load_enc != orig_enc then
    #  warn "Cached encoding #{load_enc} is incompatible with #{orig_enc}\n" \
    #       "from #{path}/cache.ri" unless
    #    Encoding.compatible? orig_enc, load_enc
    #end

    @encoding = load_enc unless @encoding

    @cache[:pages]                       ||= []
    @cache[:main]                        ||= nil
    @cache[:c_class_variables]           ||= {}
    @cache[:c_singleton_class_variables] ||= {}

    @cache[:c_class_variables].each do |_, map|
      map.each do |variable, name|
        @c_enclosure_names[variable] = name
      end
    end

    @cache
  rescue Errno::ENOENT
  end

  ##
  # Loads ri data for +klass_name+ and hooks it up to this store.

  def load_class klass_name
    obj = load_class_data klass_name

    obj.store = self

    case obj
    when RDoc::NormalClass then
      @classes_hash[klass_name] = obj
    when RDoc::SingleClass then
      @classes_hash[klass_name] = obj
    when RDoc::NormalModule then
      @modules_hash[klass_name] = obj
    end
  end

  ##
  # Loads ri data for +klass_name+

  def load_class_data klass_name
    file = class_file klass_name

    marshal_load(file)
  rescue Errno::ENOENT => e
    error = MissingFileError.new(self, file, klass_name)
    error.set_backtrace e.backtrace
    raise error
  end

  ##
  # Loads ri data for +method_name+ in +klass_name+

  def load_method klass_name, method_name
    file = method_file klass_name, method_name

    obj = marshal_load(file)
    obj.store = self
    obj.parent ||= find_class_or_module(klass_name) || load_class(klass_name)
    obj
  rescue Errno::ENOENT => e
    error = MissingFileError.new(self, file, klass_name + method_name)
    error.set_backtrace e.backtrace
    raise error
  end

  ##
  # Loads ri data for +page_name+

  def load_page page_name
    file = page_file page_name

    obj = marshal_load(file)
    obj.store = self
    obj
  rescue Errno::ENOENT => e
    error = MissingFileError.new(self, file, page_name)
    error.set_backtrace e.backtrace
    raise error
  end

  ##
  # Gets the main page for this RDoc store.  This page is used as the root of
  # the RDoc server.

  def main
    @cache[:main]
  end

  ##
  # Sets the main page for this RDoc store.

  def main= page
    @cache[:main] = page
  end

  ##
  # Converts the variable => ClassModule map +variables+ from a C parser into
  # a variable => class name map.

  def make_variable_map variables
    map = {}

    variables.each { |variable, class_module|
      map[variable] = class_module.full_name
    }

    map
  end

  ##
  # Path to the ri data for +method_name+ in +klass_name+

  def method_file klass_name, method_name
    method_name = method_name.split('::').last
    method_name =~ /#(.*)/
    method_type = $1 ? 'i' : 'c'
    method_name = $1 if $1
    method_name = method_name.gsub(/\W/) { "%%%02x" % $&[0].ord }

    File.join class_path(klass_name), "#{method_name}-#{method_type}.ri"
  end

  ##
  # Modules cache accessor.  An Array of all the module (and class) names in
  # the store.

  def module_names
    @cache[:modules]
  end

  ##
  # Hash of all modules known to RDoc

  def modules_hash
    @modules_hash
  end

  ##
  # Returns the RDoc::TopLevel that is a text file and has the given +name+

  def page name
    @text_files_hash.each_value.find do |file|
      file.page_name == name or file.base_name == name
    end
  end

  ##
  # Path to the ri data for +page_name+

  def page_file page_name
    file_name = File.basename(page_name).gsub('.', '_')

    File.join @path, File.dirname(page_name), "page-#{file_name}.ri"
  end

  ##
  # Removes from +all_hash+ the contexts that are nodoc or have no content.
  #
  # See RDoc::Context#remove_from_documentation?

  def remove_nodoc all_hash
    all_hash.keys.each do |name|
      context = all_hash[name]
      all_hash.delete(name) if context.remove_from_documentation?
    end
  end

  ##
  # Saves all entries in the store

  def save
    load_cache

    all_classes_and_modules.each do |klass|
      save_class klass

      klass.each_method do |method|
        save_method klass, method
      end

      klass.each_attribute do |attribute|
        save_method klass, attribute
      end
    end

    all_files.each do |file|
      save_page file
    end

    save_cache
  end

  ##
  # Writes the cache file for this store

  def save_cache
    clean_cache_collection @cache[:ancestors]
    clean_cache_collection @cache[:attributes]
    clean_cache_collection @cache[:class_methods]
    clean_cache_collection @cache[:instance_methods]

    @cache[:modules].uniq!
    @cache[:modules].sort!

    @cache[:pages].uniq!
    @cache[:pages].sort!

    @cache[:encoding] = @encoding # this gets set twice due to assert_cache

    @cache[:c_class_variables].merge!           @c_class_variables
    @cache[:c_singleton_class_variables].merge! @c_singleton_class_variables

    return if @dry_run

    File.open cache_path, 'wb' do |io|
      Marshal.dump @cache, io
    end
  end

  ##
  # Writes the ri data for +klass+ (or module)

  def save_class klass
    full_name = klass.full_name

    FileUtils.mkdir_p class_path(full_name) unless @dry_run

    @cache[:modules] << full_name

    path = class_file full_name

    begin
      disk_klass = load_class full_name

      klass = disk_klass.merge klass
    rescue MissingFileError
    end

    # BasicObject has no ancestors
    ancestors = klass.direct_ancestors.compact.map do |ancestor|
      # HACK for classes we don't know about (class X < RuntimeError)
      String === ancestor ? ancestor : ancestor.full_name
    end

    @cache[:ancestors][full_name] ||= []
    @cache[:ancestors][full_name].concat ancestors

    attribute_definitions = klass.attributes.map do |attribute|
      "#{attribute.definition} #{attribute.name}"
    end

    unless attribute_definitions.empty? then
      @cache[:attributes][full_name] ||= []
      @cache[:attributes][full_name].concat attribute_definitions
    end

    to_delete = []

    unless klass.method_list.empty? then
      @cache[:class_methods][full_name]    ||= []
      @cache[:instance_methods][full_name] ||= []

      class_methods, instance_methods =
        klass.method_list.partition { |meth| meth.singleton }

      class_methods    = class_methods.   map { |method| method.name }
      instance_methods = instance_methods.map { |method| method.name }
      attribute_names  = klass.attributes.map { |attr|   attr.name }

      old = @cache[:class_methods][full_name] - class_methods
      to_delete.concat old.map { |method|
        method_file full_name, "#{full_name}::#{method}"
      }

      old = @cache[:instance_methods][full_name] -
        instance_methods - attribute_names
      to_delete.concat old.map { |method|
        method_file full_name, "#{full_name}##{method}"
      }

      @cache[:class_methods][full_name]    = class_methods
      @cache[:instance_methods][full_name] = instance_methods
    end

    return if @dry_run

    FileUtils.rm_f to_delete

    File.open path, 'wb' do |io|
      Marshal.dump klass, io
    end
  end

  ##
  # Writes the ri data for +method+ on +klass+

  def save_method klass, method
    full_name = klass.full_name

    FileUtils.mkdir_p class_path(full_name) unless @dry_run

    cache = if method.singleton then
              @cache[:class_methods]
            else
              @cache[:instance_methods]
            end
    cache[full_name] ||= []
    cache[full_name] << method.name

    return if @dry_run

    File.open method_file(full_name, method.full_name), 'wb' do |io|
      Marshal.dump method, io
    end
  end

  ##
  # Writes the ri data for +page+

  def save_page page
    return unless page.text?

    path = page_file page.full_name

    FileUtils.mkdir_p File.dirname(path) unless @dry_run

    cache[:pages] ||= []
    cache[:pages] << page.full_name

    return if @dry_run

    File.open path, 'wb' do |io|
      Marshal.dump page, io
    end
  end

  ##
  # Source of the contents of this store.
  #
  # For a store from a gem the source is the gem name.  For a store from the
  # home directory the source is "home".  For system ri store (the standard
  # library documentation) the source is"ruby".  For a store from the site
  # ri directory the store is "site".  For other stores the source is the
  # #path.

  def source
    case type
    when :gem    then File.basename File.expand_path '..', @path
    when :home   then 'home'
    when :site   then 'site'
    when :system then 'ruby'
    else @path
    end
  end

  ##
  # Gets the title for this RDoc store.  This is used as the title in each
  # page on the RDoc server

  def title
    @cache[:title]
  end

  ##
  # Sets the title page for this RDoc store.

  def title= title
    @cache[:title] = title
  end

  ##
  # Returns the unique classes discovered by RDoc.
  #
  # ::complete must have been called prior to using this method.

  def unique_classes
    @unique_classes
  end

  ##
  # Returns the unique classes and modules discovered by RDoc.
  # ::complete must have been called prior to using this method.

  def unique_classes_and_modules
    @unique_classes + @unique_modules
  end

  ##
  # Returns the unique modules discovered by RDoc.
  # ::complete must have been called prior to using this method.

  def unique_modules
    @unique_modules
  end

  private
  def marshal_load(file)
    File.open(file, 'rb') {|io| Marshal.load(io, MarshalFilter)}
  end

  MarshalFilter = proc do |obj|
    case obj
    when true, false, nil, Array, Class, Encoding, Hash, Integer, String, Symbol, RDoc::Text
    else
      unless obj.class.name.start_with?("RDoc::")
        raise TypeError, "not permitted class: #{obj.class.name}"
      end
    end
    obj
  end
  private_constant :MarshalFilter

end
PK."#[X�yъp�p$gems/rdoc-6.4.1.1/lib/rdoc/markup.rbnu�[���# frozen_string_literal: true
##
# RDoc::Markup parses plain text documents and attempts to decompose them into
# their constituent parts.  Some of these parts are high-level: paragraphs,
# chunks of verbatim text, list entries and the like.  Other parts happen at
# the character level: a piece of bold text, a word in code font.  This markup
# is similar in spirit to that used on WikiWiki webs, where folks create web
# pages using a simple set of formatting rules.
#
# RDoc::Markup and other markup formats do no output formatting, this is
# handled by the RDoc::Markup::Formatter subclasses.
#
# = Supported Formats
#
# Besides the RDoc::Markup format, the following formats are built in to RDoc:
#
# markdown::
#   The markdown format as described by
#   http://daringfireball.net/projects/markdown/.  See RDoc::Markdown for
#   details on the parser and supported extensions.
# rd::
#   The rdtool format.  See RDoc::RD for details on the parser and format.
# tomdoc::
#   The TomDoc format as described by http://tomdoc.org/.  See RDoc::TomDoc
#   for details on the parser and supported extensions.
#
# You can choose a markup format using the following methods:
#
# per project::
#   If you build your documentation with rake use RDoc::Task#markup.
#
#   If you build your documentation by hand run:
#
#      rdoc --markup your_favorite_format --write-options
#
#   and commit <tt>.rdoc_options</tt> and ship it with your packaged gem.
# per file::
#   At the top of the file use the <tt>:markup:</tt> directive to set the
#   default format for the rest of the file.
# per comment::
#   Use the <tt>:markup:</tt> directive at the top of a comment you want
#   to write in a different format.
#
# = RDoc::Markup
#
# RDoc::Markup is extensible at runtime: you can add \new markup elements to
# be recognized in the documents that RDoc::Markup parses.
#
# RDoc::Markup is intended to be the basis for a family of tools which share
# the common requirement that simple, plain-text should be rendered in a
# variety of different output formats and media.  It is envisaged that
# RDoc::Markup could be the basis for formatting RDoc style comment blocks,
# Wiki entries, and online FAQs.
#
# == Synopsis
#
# This code converts +input_string+ to HTML.  The conversion takes place in
# the +convert+ method, so you can use the same RDoc::Markup converter to
# convert multiple input strings.
#
#   require 'rdoc'
#
#   h = RDoc::Markup::ToHtml.new(RDoc::Options.new)
#
#   puts h.convert(input_string)
#
# You can extend the RDoc::Markup parser to recognize new markup
# sequences, and to add regexp handling. Here we make WikiWords significant to
# the parser, and also make the sequences {word} and \<no>text...</no> signify
# strike-through text.  We then subclass the HTML output class to deal
# with these:
#
#   require 'rdoc'
#
#   class WikiHtml < RDoc::Markup::ToHtml
#     def handle_regexp_WIKIWORD(target)
#       "<font color=red>" + target.text + "</font>"
#     end
#   end
#
#   markup = RDoc::Markup.new
#   markup.add_word_pair("{", "}", :STRIKE)
#   markup.add_html("no", :STRIKE)
#
#   markup.add_regexp_handling(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
#
#   wh = WikiHtml.new RDoc::Options.new, markup
#   wh.add_tag(:STRIKE, "<strike>", "</strike>")
#
#   puts "<body>#{wh.convert ARGF.read}</body>"
#
# == Encoding
#
# Where Encoding support is available, RDoc will automatically convert all
# documents to the same output encoding.  The output encoding can be set via
# RDoc::Options#encoding and defaults to Encoding.default_external.
#
# = \RDoc Markup Reference
#
# == Block Markup
#
# === Paragraphs and Verbatim
#
# The markup engine looks for a document's natural left margin.  This is
# used as the initial margin for the document.
#
# Consecutive lines starting at this margin are considered to be a
# paragraph. Empty lines separate paragraphs.
#
# Any line that starts to the right of the current margin is treated
# as verbatim text.  This is useful for code listings:
#
#   3.times { puts "Ruby" }
#
# In verbatim text, two or more blank lines are collapsed into one,
# and trailing blank lines are removed:
#
#   This is the first line
#
#
#   This is the second non-blank line,
#   after 2 blank lines in the source markup.
#
#
# There were two trailing blank lines right above this paragraph, that
# have been removed. In addition, the verbatim text has been shifted
# left, so the amount of indentation of verbatim text is unimportant.
#
# For HTML output RDoc makes a small effort to determine if a verbatim section
# contains Ruby source code.  If so, the verbatim block will be marked up as
# HTML.  Triggers include "def", "class", "module", "require", the "hash
# rocket"# (=>) or a block call with a parameter.
#
# === Headers
#
# A line starting with an equal sign (=) is treated as a
# heading.  Level one headings have one equals sign, level two headings
# have two, and so on until level six, which is the maximum
# (seven hyphens or more result in a level six heading).
#
# For example, the above header was obtained with:
#
#   === Headers
#
# In HTML output headers have an id matching their name.  The above example's
# HTML is:
#
#   <h3 id="label-Headers">Headers</h3>
#
# If a heading is inside a method body the id will be prefixed with the
# method's id.  If the above header where in the documentation for a method
# such as:
#
#   ##
#   # This method does fun things
#   #
#   # = Example
#   #
#   #   Example of fun things goes here ...
#
#   def do_fun_things
#   end
#
# The header's id would be:
#
#   <h1 id="method-i-do_fun_things-label-Example">Example</h1>
#
# The label can be linked-to using <tt>SomeClass@Headers</tt>.  See
# {Links}[RDoc::Markup@Links] for further details.
#
# === Rules
#
# A line starting with three or more hyphens (at the current indent)
# generates a horizontal rule.
#
#   ---
#
# produces:
#
# ---
#
# === Simple Lists
#
# If a paragraph starts with a "*", "-", "<digit>." or "<letter>.",
# then it is taken to be the start of a list.  The margin is increased to be
# the first non-space following the list start flag.  Subsequent lines
# should be indented to this new margin until the list ends.  For example:
#
#   * this is a list with three paragraphs in
#     the first item.  This is the first paragraph.
#
#     And this is the second paragraph.
#
#     1. This is an indented, numbered list.
#     2. This is the second item in that list
#
#     This is the third conventional paragraph in the
#     first list item.
#
#   * This is the second item in the original list
#
# produces:
#
# * this is a list with three paragraphs in
#   the first item.  This is the first paragraph.
#
#   And this is the second paragraph.
#
#   1. This is an indented, numbered list.
#   2. This is the second item in that list
#
#   This is the third conventional paragraph in the
#   first list item.
#
# * This is the second item in the original list
#
# === Labeled Lists
#
# You can also construct labeled lists, sometimes called description
# or definition lists.  Do this by putting the label in square brackets
# and indenting the list body:
#
#   [cat]  a small furry mammal
#          that seems to sleep a lot
#
#   [ant]  a little insect that is known
#          to enjoy picnics
#
# produces:
#
# [cat]  a small furry mammal
#        that seems to sleep a lot
#
# [ant]  a little insect that is known
#        to enjoy picnics
#
# If you want the list bodies to line up to the left of the labels,
# use two colons:
#
#   cat::  a small furry mammal
#          that seems to sleep a lot
#
#   ant::  a little insect that is known
#          to enjoy picnics
#
# produces:
#
# cat::  a small furry mammal
#        that seems to sleep a lot
#
# ant::  a little insect that is known
#        to enjoy picnics
#
# Notice that blank lines right after the label are ignored in labeled lists:
#
#   [one]
#
#       definition 1
#
#   [two]
#
#       definition 2
#
# produces the same output as
#
#   [one]  definition 1
#   [two]  definition 2
#
#
# === Lists and Verbatim
#
# If you want to introduce a verbatim section right after a list, it has to be
# less indented than the list item bodies, but more indented than the list
# label, letter, digit or bullet. For instance:
#
#   *   point 1
#
#   *   point 2, first paragraph
#
#       point 2, second paragraph
#         verbatim text inside point 2
#       point 2, third paragraph
#     verbatim text outside of the list (the list is therefore closed)
#   regular paragraph after the list
#
# produces:
#
# *   point 1
#
# *   point 2, first paragraph
#
#     point 2, second paragraph
#       verbatim text inside point 2
#     point 2, third paragraph
#   verbatim text outside of the list (the list is therefore closed)
# regular paragraph after the list
#
# == Text Markup
#
# === Bold, Italic, Typewriter Text
#
# You can use markup within text (except verbatim) to change the
# appearance of parts of that text.  Out of the box, RDoc::Markup
# supports word-based and general markup.
#
# Word-based markup uses flag characters around individual words:
#
# <tt>\*_word_\*</tt>::  displays _word_ in a *bold* font
# <tt>\__word_\_</tt>::  displays _word_ in an _emphasized_ font
# <tt>\+_word_\+</tt>::  displays _word_ in a +code+ font
#
# General markup affects text between a start delimiter and an end
# delimiter.  Not surprisingly, these delimiters look like HTML markup.
#
# <tt>\<b>_text_</b></tt>::    displays _text_ in a *bold* font
# <tt>\<em>_text_</em></tt>::  displays _text_ in an _emphasized_ font
#                              (alternate tag: <tt>\<i></tt>)
# <tt>\<tt>_text_\</tt></tt>:: displays _text_ in a +code+ font
#                              (alternate tag: <tt>\<code></tt>)
#
# Unlike conventional Wiki markup, general markup can cross line
# boundaries.  You can turn off the interpretation of markup by
# preceding the first character with a backslash (see <i>Escaping
# Text Markup</i>, below).
#
# === Links
#
# Links to starting with +http:+, +https:+, +mailto:+, +ftp:+ or +www.+
# are recognized.  An HTTP url that references an external image is converted
# into an inline image element.
#
# Classes and methods will be automatically linked to their definition.  For
# example, <tt>RDoc::Markup</tt> will link to this documentation.  By default
# methods will only be automatically linked if they contain an <tt>_</tt> (all
# methods can be automatically linked through the <tt>--hyperlink-all</tt>
# command line option).
#
# Single-word methods can be linked by using the <tt>#</tt> character for
# instance methods or <tt>::</tt> for class methods.  For example,
# <tt>#convert</tt> links to #convert.  A class or method may be combined like
# <tt>RDoc::Markup#convert</tt>.
#
# A heading inside the documentation can be linked by following the class
# or method by an <tt>@</tt> then the heading name.
# <tt>RDoc::Markup@Links</tt> will link to this section like this:
# RDoc::Markup@Links.  Spaces in headings with multiple words must be escaped
# with <tt>+</tt> like <tt>RDoc::Markup@Escaping+Text+Markup</tt>.
# Punctuation and other special characters must be escaped like CGI.escape.
#
# The <tt>@</tt> can also be used to link to sections.  If a section and a
# heading share the same name the section is preferred for the link.
#
# Links can also be of the form <tt>label[url]</tt>, in which case +label+ is
# used in the displayed text, and +url+ is used as the target.  If +label+
# contains multiple words, put it in braces: <tt>{multi word label}[url]</tt>.
# The +url+ may be an +http:+-type link or a cross-reference to a class,
# module or method with a label.
#
# Links with the <code>rdoc-image:</code> scheme will create an image tag for
# HTML output.  Only fully-qualified URLs are supported.
#
# Links with the <tt>rdoc-ref:</tt> scheme will link to the referenced class,
# module, method, file, etc.  If the referenced item is does not exist
# no link will be generated and <tt>rdoc-ref:</tt> will be removed from the
# resulting text.
#
# Links starting with <tt>rdoc-label:label_name</tt> will link to the
# +label_name+.  You can create a label for the current link (for
# bidirectional links) by supplying a name for the current link like
# <tt>rdoc-label:label-other:label-mine</tt>.
#
# Links starting with +link:+ refer to local files whose path is relative to
# the <tt>--op</tt> directory.  Use <tt>rdoc-ref:</tt> instead of
# <tt>link:</tt> to link to files generated by RDoc as the link target may
# be different across RDoc generators.
#
# Example links:
#
#   https://github.com/ruby/rdoc
#   mailto:user@example.com
#   {RDoc Documentation}[http://rdoc.rubyforge.org]
#   {RDoc Markup}[rdoc-ref:RDoc::Markup]
#
# === Escaping Text Markup
#
# Text markup can be escaped with a backslash, as in \<tt>, which was obtained
# with <tt>\\<tt></tt>.  Except in verbatim sections and between \<tt> tags,
# to produce a backslash you have to double it unless it is followed by a
# space, tab or newline. Otherwise, the HTML formatter will discard it, as it
# is used to escape potential links:
#
#   * The \ must be doubled if not followed by white space: \\.
#   * But not in \<tt> tags: in a Regexp, <tt>\S</tt> matches non-space.
#   * This is a link to {ruby-lang}[www.ruby-lang.org].
#   * This is not a link, however: \{ruby-lang.org}[www.ruby-lang.org].
#   * This will not be linked to \RDoc::RDoc#document
#
# generates:
#
# * The \ must be doubled if not followed by white space: \\.
# * But not in \<tt> tags: in a Regexp, <tt>\S</tt> matches non-space.
# * This is a link to {ruby-lang}[www.ruby-lang.org]
# * This is not a link, however: \{ruby-lang.org}[www.ruby-lang.org]
# * This will not be linked to \RDoc::RDoc#document
#
# Inside \<tt> tags, more precisely, leading backslashes are removed only if
# followed by a markup character (<tt><*_+</tt>), a backslash, or a known link
# reference (a known class or method). So in the example above, the backslash
# of <tt>\S</tt> would be removed if there was a class or module named +S+ in
# the current context.
#
# This behavior is inherited from RDoc version 1, and has been kept for
# compatibility with existing RDoc documentation.
#
# === Conversion of characters
#
# HTML will convert two/three dashes to an em-dash. Other common characters are
# converted as well:
#
#   em-dash::  -- or ---
#   ellipsis:: ...
#
#   single quotes:: 'text' or `text'
#   double quotes:: "text" or ``text''
#
#   copyright:: (c)
#   registered trademark:: (r)
#
# produces:
#
# em-dash::  -- or ---
# ellipsis:: ...
#
# single quotes:: 'text' or `text'
# double quotes:: "text" or ``text''
#
# copyright:: (c)
# registered trademark:: (r)
#
#
# == Documenting Source Code
#
# Comment blocks can be written fairly naturally, either using <tt>#</tt> on
# successive lines of the comment, or by including the comment in
# a <tt>=begin</tt>/<tt>=end</tt> block.  If you use the latter form,
# the <tt>=begin</tt> line _must_ be flagged with an +rdoc+ tag:
#
#   =begin rdoc
#   Documentation to be processed by RDoc.
#
#   ...
#   =end
#
# RDoc stops processing comments if it finds a comment line starting
# with <tt>--</tt> right after the <tt>#</tt> character (otherwise,
# it will be treated as a rule if it has three dashes or more).
# This can be used to separate external from internal comments,
# or to stop a comment being associated with a method, class, or module.
# Commenting can be turned back on with a line that starts with <tt>++</tt>.
#
#   ##
#   # Extract the age and calculate the date-of-birth.
#   #--
#   # FIXME: fails if the birthday falls on February 29th
#   #++
#   # The DOB is returned as a Time object.
#
#   def get_dob(person)
#     # ...
#   end
#
# Names of classes, files, and any method names containing an underscore or
# preceded by a hash character are automatically linked from comment text to
# their description. This linking works inside the current class or module,
# and with ancestor methods (in included modules or in the superclass).
#
# Method parameter lists are extracted and displayed with the method
# description.  If a method calls +yield+, then the parameters passed to yield
# will also be displayed:
#
#   def fred
#     ...
#     yield line, address
#
# This will get documented as:
#
#   fred() { |line, address| ... }
#
# You can override this using a comment containing ':yields: ...' immediately
# after the method definition
#
#   def fred # :yields: index, position
#     # ...
#
#     yield line, address
#
# which will get documented as
#
#    fred() { |index, position| ... }
#
# +:yields:+ is an example of a documentation directive.  These appear
# immediately after the start of the document element they are modifying.
#
# RDoc automatically cross-references words with underscores or camel-case.
# To suppress cross-references, prefix the word with a \ character.  To
# include special characters like "<tt>\n</tt>", you'll need to use
# two \ characters in normal text, but only one in \<tt> text:
#
#   "\\n" or "<tt>\n</tt>"
#
# produces:
#
# "\\n" or "<tt>\n</tt>"
#
# == Directives
#
# Directives are keywords surrounded by ":" characters.
#
# === Controlling what is documented
#
# [+:nodoc:+ / <tt>:nodoc: all</tt>]
#   This directive prevents documentation for the element from
#   being generated.  For classes and modules, methods, aliases,
#   constants, and attributes directly within the affected class or
#   module also will be omitted.  By default, though, modules and
#   classes within that class or module _will_ be documented.  This is
#   turned off by adding the +all+ modifier.
#
#     module MyModule # :nodoc:
#       class Input
#       end
#     end
#
#     module OtherModule # :nodoc: all
#       class Output
#       end
#     end
#
#   In the above code, only class <tt>MyModule::Input</tt> will be documented.
#
#   The +:nodoc:+ directive, like +:enddoc:+, +:stopdoc:+ and +:startdoc:+
#   presented below, is local to the current file: if you do not want to
#   document a module that appears in several files, specify +:nodoc:+ on each
#   appearance, at least once per file.
#
# [+:stopdoc:+ / +:startdoc:+]
#   Stop and start adding new documentation elements to the current container.
#   For example, if a class has a number of constants that you don't want to
#   document, put a +:stopdoc:+ before the first, and a +:startdoc:+ after the
#   last.  If you don't specify a +:startdoc:+ by the end of the container,
#   disables documentation for the rest of the current file.
#
# [+:doc:+]
#   Forces a method or attribute to be documented even if it wouldn't be
#   otherwise.  Useful if, for example, you want to include documentation of a
#   particular private method.
#
# [+:enddoc:+]
#   Document nothing further at the current level: directives +:startdoc:+ and
#   +:doc:+ that appear after this will not be honored for the current container
#   (file, class or module), in the current file.
#
# [+:notnew:+ / +:not_new:+ / +:not-new:+ ]
#   Only applicable to the +initialize+ instance method.  Normally RDoc
#   assumes that the documentation and parameters for +initialize+ are
#   actually for the +new+ method, and so fakes out a +new+ for the class.
#   The +:notnew:+ directive stops this.  Remember that +initialize+ is private,
#   so you won't see the documentation unless you use the +-a+ command line
#   option.
#
# === Method arguments
#
# [+:arg:+ or +:args:+ _parameters_]
#   Overrides the default argument handling with exactly these parameters.
#
#     ##
#     #  :args: a, b
#
#     def some_method(*a)
#     end
#
# [+:yield:+ or +:yields:+ _parameters_]
#   Overrides the default yield discovery with these parameters.
#
#     ##
#     # :yields: key, value
#
#     def each_thing &block
#       @things.each(&block)
#     end
#
# [+:call-seq:+]
#   Lines up to the next blank line or lines with a common prefix in the
#   comment are treated as the method's calling sequence, overriding the
#   default parsing of method parameters and yield arguments.
#
#   Multiple lines may be used.
#
#     # :call-seq:
#     #   ARGF.readlines(sep=$/)     -> array
#     #   ARGF.readlines(limit)      -> array
#     #   ARGF.readlines(sep, limit) -> array
#     #
#     #   ARGF.to_a(sep=$/)     -> array
#     #   ARGF.to_a(limit)      -> array
#     #   ARGF.to_a(sep, limit) -> array
#     #
#     # The remaining lines are documentation ...
#
# === Sections
#
# Sections allow you to group methods in a class into sensible containers.  If
# you use the sections 'Public', 'Internal' and 'Deprecated' (the three
# allowed method statuses from TomDoc) the sections will be displayed in that
# order placing the most useful methods at the top.  Otherwise, sections will
# be displayed in alphabetical order.
#
# [+:category:+ _section_]
#   Adds this item to the named +section+ overriding the current section.  Use
#   this to group methods by section in RDoc output while maintaining a
#   sensible ordering (like alphabetical).
#
#     # :category: Utility Methods
#     #
#     # CGI escapes +text+
#
#     def convert_string text
#       CGI.escapeHTML text
#     end
#
#   An empty category will place the item in the default category:
#
#     # :category:
#     #
#     # This method is in the default category
#
#     def some_method
#       # ...
#     end
#
#   Unlike the :section: directive, :category: is not sticky.  The category
#   only applies to the item immediately following the comment.
#
#   Use the :section: directive to provide introductory text for a section of
#   documentation.
#
# [+:section:+ _title_]
#   Provides section introductory text in RDoc output.  The title following
#   +:section:+ is used as the section name and the remainder of the comment
#   containing the section is used as introductory text.  A section's comment
#   block must be separated from following comment blocks.  Use an empty title
#   to switch to the default section.
#
#   The :section: directive is sticky, so subsequent methods, aliases,
#   attributes, and classes will be contained in this section until the
#   section is changed.  The :category: directive will override the :section:
#   directive.
#
#   A :section: comment block may have one or more lines before the :section:
#   directive.  These will be removed, and any identical lines at the end of
#   the block are also removed.  This allows you to add visual cues to the
#   section.
#
#   Example:
#
#     # ----------------------------------------
#     # :section: My Section
#     # This is the section that I wrote.
#     # See it glisten in the noon-day sun.
#     # ----------------------------------------
#
#     ##
#     # Comment for some_method
#
#     def some_method
#       # ...
#     end
#
# === Other directives
#
# [+:markup:+ _type_]
#   Overrides the default markup type for this comment with the specified
#   markup type.  For Ruby files, if the first comment contains this directive
#   it is applied automatically to all comments in the file.
#
#   Unless you are converting between markup formats you should use a
#   <code>.rdoc_options</code> file to specify the default documentation
#   format for your entire project.  See RDoc::Options@Saved+Options for
#   instructions.
#
#   At the top of a file the +:markup:+ directive applies to the entire file:
#
#     # coding: UTF-8
#     # :markup: TomDoc
#
#     # TomDoc comment here ...
#
#     class MyClass
#       # ...
#
#   For just one comment:
#
#       # ...
#     end
#
#     # :markup: RDoc
#     #
#     # This is a comment in RDoc markup format ...
#
#     def some_method
#       # ...
#
#   See Markup@CONTRIBUTING for instructions on adding a new markup format.
#
# [+:include:+ _filename_]
#   Include the contents of the named file at this point. This directive
#   must appear alone on one line, possibly preceded by spaces. In this
#   position, it can be escaped with a \ in front of the first colon.
#
#   The file will be searched for in the directories listed by the +--include+
#   option, or in the current directory by default.  The contents of the file
#   will be shifted to have the same indentation as the ':' at the start of
#   the +:include:+ directive.
#
# [+:title:+ _text_]
#   Sets the title for the document.  Equivalent to the <tt>--title</tt>
#   command line parameter.  (The command line parameter overrides any :title:
#   directive in the source).
#
# [+:main:+ _name_]
#   Equivalent to the <tt>--main</tt> command line parameter.
#
#--
# Original Author:: Dave Thomas,  dave@pragmaticprogrammer.com
# License:: Ruby license

class RDoc::Markup

  ##
  # An AttributeManager which handles inline markup.

  attr_reader :attribute_manager

  ##
  # Parses +str+ into an RDoc::Markup::Document.

  def self.parse str
    RDoc::Markup::Parser.parse str
  rescue RDoc::Markup::Parser::Error => e
    $stderr.puts <<-EOF
While parsing markup, RDoc encountered a #{e.class}:

#{e}
\tfrom #{e.backtrace.join "\n\tfrom "}

---8<---
#{text}
---8<---

RDoc #{RDoc::VERSION}

Ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} #{RUBY_RELEASE_DATE}

Please file a bug report with the above information at:

https://github.com/ruby/rdoc/issues

    EOF
    raise
  end

  ##
  # Take a block of text and use various heuristics to determine its
  # structure (paragraphs, lists, and so on).  Invoke an event handler as we
  # identify significant chunks.

  def initialize attribute_manager = nil
    @attribute_manager = attribute_manager || RDoc::Markup::AttributeManager.new
    @output = nil
  end

  ##
  # Add to the sequences used to add formatting to an individual word (such
  # as *bold*).  Matching entries will generate attributes that the output
  # formatters can recognize by their +name+.

  def add_word_pair(start, stop, name)
    @attribute_manager.add_word_pair(start, stop, name)
  end

  ##
  # Add to the sequences recognized as general markup.

  def add_html(tag, name)
    @attribute_manager.add_html(tag, name)
  end

  ##
  # Add to other inline sequences.  For example, we could add WikiWords using
  # something like:
  #
  #    parser.add_regexp_handling(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
  #
  # Each wiki word will be presented to the output formatter.

  def add_regexp_handling(pattern, name)
    @attribute_manager.add_regexp_handling(pattern, name)
  end

  ##
  # We take +input+, parse it if necessary, then invoke the output +formatter+
  # using a Visitor to render the result.

  def convert input, formatter
    document = case input
               when RDoc::Markup::Document then
                 input
               else
                 RDoc::Markup::Parser.parse input
               end

    document.accept formatter
  end

  autoload :Parser,                'rdoc/markup/parser'
  autoload :PreProcess,            'rdoc/markup/pre_process'

  # Inline markup classes
  autoload :AttrChanger,           'rdoc/markup/attr_changer'
  autoload :AttrSpan,              'rdoc/markup/attr_span'
  autoload :Attributes,            'rdoc/markup/attributes'
  autoload :AttributeManager,      'rdoc/markup/attribute_manager'
  autoload :RegexpHandling,        'rdoc/markup/regexp_handling'

  # RDoc::Markup AST
  autoload :BlankLine,             'rdoc/markup/blank_line'
  autoload :BlockQuote,            'rdoc/markup/block_quote'
  autoload :Document,              'rdoc/markup/document'
  autoload :HardBreak,             'rdoc/markup/hard_break'
  autoload :Heading,               'rdoc/markup/heading'
  autoload :Include,               'rdoc/markup/include'
  autoload :IndentedParagraph,     'rdoc/markup/indented_paragraph'
  autoload :List,                  'rdoc/markup/list'
  autoload :ListItem,              'rdoc/markup/list_item'
  autoload :Paragraph,             'rdoc/markup/paragraph'
  autoload :Table,                 'rdoc/markup/table'
  autoload :Raw,                   'rdoc/markup/raw'
  autoload :Rule,                  'rdoc/markup/rule'
  autoload :Verbatim,              'rdoc/markup/verbatim'

  # Formatters
  autoload :Formatter,             'rdoc/markup/formatter'

  autoload :ToAnsi,                'rdoc/markup/to_ansi'
  autoload :ToBs,                  'rdoc/markup/to_bs'
  autoload :ToHtml,                'rdoc/markup/to_html'
  autoload :ToHtmlCrossref,        'rdoc/markup/to_html_crossref'
  autoload :ToHtmlSnippet,         'rdoc/markup/to_html_snippet'
  autoload :ToLabel,               'rdoc/markup/to_label'
  autoload :ToMarkdown,            'rdoc/markup/to_markdown'
  autoload :ToRdoc,                'rdoc/markup/to_rdoc'
  autoload :ToTableOfContents,     'rdoc/markup/to_table_of_contents'
  autoload :ToTest,                'rdoc/markup/to_test'
  autoload :ToTtOnly,              'rdoc/markup/to_tt_only'

end

PK."#[v�T�DODO*gems/rdoc-6.4.1.1/lib/rdoc/class_module.rbnu�[���# frozen_string_literal: true
##
# ClassModule is the base class for objects representing either a class or a
# module.

class RDoc::ClassModule < RDoc::Context

  ##
  # 1::
  #   RDoc 3.7
  #   * Added visibility, singleton and file to attributes
  #   * Added file to constants
  #   * Added file to includes
  #   * Added file to methods
  # 2::
  #   RDoc 3.13
  #   * Added extends
  # 3::
  #   RDoc 4.0
  #   * Added sections
  #   * Added in_files
  #   * Added parent name
  #   * Complete Constant dump

  MARSHAL_VERSION = 3 # :nodoc:

  ##
  # Constants that are aliases for this class or module

  attr_accessor :constant_aliases

  ##
  # Comment and the location it came from.  Use #add_comment to add comments

  attr_accessor :comment_location

  attr_accessor :diagram # :nodoc:

  ##
  # Class or module this constant is an alias for

  attr_accessor :is_alias_for

  ##
  # Return a RDoc::ClassModule of class +class_type+ that is a copy
  # of module +module+. Used to promote modules to classes.
  #--
  # TODO move to RDoc::NormalClass (I think)

  def self.from_module class_type, mod
    klass = class_type.new mod.name

    mod.comment_location.each do |comment, location|
      klass.add_comment comment, location
    end

    klass.parent = mod.parent
    klass.section = mod.section
    klass.viewer = mod.viewer

    klass.attributes.concat mod.attributes
    klass.method_list.concat mod.method_list
    klass.aliases.concat mod.aliases
    klass.external_aliases.concat mod.external_aliases
    klass.constants.concat mod.constants
    klass.includes.concat mod.includes
    klass.extends.concat mod.extends

    klass.methods_hash.update mod.methods_hash
    klass.constants_hash.update mod.constants_hash

    klass.current_section = mod.current_section
    klass.in_files.concat mod.in_files
    klass.sections.concat mod.sections
    klass.unmatched_alias_lists = mod.unmatched_alias_lists
    klass.current_section = mod.current_section
    klass.visibility = mod.visibility

    klass.classes_hash.update mod.classes_hash
    klass.modules_hash.update mod.modules_hash
    klass.metadata.update mod.metadata

    klass.document_self = mod.received_nodoc ? nil : mod.document_self
    klass.document_children = mod.document_children
    klass.force_documentation = mod.force_documentation
    klass.done_documenting = mod.done_documenting

    # update the parent of all children

    (klass.attributes +
     klass.method_list +
     klass.aliases +
     klass.external_aliases +
     klass.constants +
     klass.includes +
     klass.extends +
     klass.classes +
     klass.modules).each do |obj|
      obj.parent = klass
      obj.full_name = nil
    end

    klass
  end

  ##
  # Creates a new ClassModule with +name+ with optional +superclass+
  #
  # This is a constructor for subclasses, and must never be called directly.

  def initialize(name, superclass = nil)
    @constant_aliases = []
    @diagram          = nil
    @is_alias_for     = nil
    @name             = name
    @superclass       = superclass
    @comment_location = [] # [[comment, location]]

    super()
  end

  ##
  # Adds +comment+ to this ClassModule's list of comments at +location+.  This
  # method is preferred over #comment= since it allows ri data to be updated
  # across multiple runs.

  def add_comment comment, location
    return unless document_self

    original = comment

    comment = case comment
              when RDoc::Comment then
                comment.normalize
              else
                normalize_comment comment
              end

    if location.parser == RDoc::Parser::C
      @comment_location.delete_if { |(_, l)| l == location }
    end

    @comment_location << [comment, location]

    self.comment = original
  end

  def add_things my_things, other_things # :nodoc:
    other_things.each do |group, things|
      my_things[group].each { |thing| yield false, thing } if
        my_things.include? group

      things.each do |thing|
        yield true, thing
      end
    end
  end

  ##
  # Ancestors list for this ClassModule: the list of included modules
  # (classes will add their superclass if any).
  #
  # Returns the included classes or modules, not the includes
  # themselves. The returned values are either String or
  # RDoc::NormalModule instances (see RDoc::Include#module).
  #
  # The values are returned in reverse order of their inclusion,
  # which is the order suitable for searching methods/attributes
  # in the ancestors. The superclass, if any, comes last.

  def ancestors
    includes.map { |i| i.module }.reverse
  end

  def aref_prefix # :nodoc:
    raise NotImplementedError, "missing aref_prefix for #{self.class}"
  end

  ##
  # HTML fragment reference for this module or class.  See
  # RDoc::NormalClass#aref and RDoc::NormalModule#aref

  def aref
    "#{aref_prefix}-#{full_name}"
  end

  ##
  # Ancestors of this class or module only

  alias direct_ancestors ancestors

  ##
  # Clears the comment. Used by the Ruby parser.

  def clear_comment
    @comment = ''
  end

  ##
  # This method is deprecated, use #add_comment instead.
  #
  # Appends +comment+ to the current comment, but separated by a rule.  Works
  # more like <tt>+=</tt>.

  def comment= comment # :nodoc:
    comment = case comment
              when RDoc::Comment then
                comment.normalize
              else
                normalize_comment comment
              end

    comment = "#{@comment.to_s}\n---\n#{comment.to_s}" unless @comment.empty?

    super comment
  end

  ##
  # Prepares this ClassModule for use by a generator.
  #
  # See RDoc::Store#complete

  def complete min_visibility
    update_aliases
    remove_nodoc_children
    update_includes
    remove_invisible min_visibility
  end

  ##
  # Does this ClassModule or any of its methods have document_self set?

  def document_self_or_methods
    document_self || method_list.any?{ |m| m.document_self }
  end

  ##
  # Does this class or module have a comment with content or is
  # #received_nodoc true?

  def documented?
    return true if @received_nodoc
    return false if @comment_location.empty?
    @comment_location.any? { |comment, _| not comment.empty? }
  end

  ##
  # Iterates the ancestors of this class or module for which an
  # RDoc::ClassModule exists.

  def each_ancestor # :yields: module
    return enum_for __method__ unless block_given?

    ancestors.each do |mod|
      next if String === mod
      next if self == mod
      yield mod
    end
  end

  ##
  # Looks for a symbol in the #ancestors. See Context#find_local_symbol.

  def find_ancestor_local_symbol symbol
    each_ancestor do |m|
      res = m.find_local_symbol(symbol)
      return res if res
    end

    nil
  end

  ##
  # Finds a class or module with +name+ in this namespace or its descendants

  def find_class_named name
    return self if full_name == name
    return self if @name == name

    @classes.values.find do |klass|
      next if klass == self
      klass.find_class_named name
    end
  end

  ##
  # Return the fully qualified name of this class or module

  def full_name
    @full_name ||= if RDoc::ClassModule === parent then
                     "#{parent.full_name}::#{@name}"
                   else
                     @name
                   end
  end

  ##
  # TODO: filter included items by #display?

  def marshal_dump # :nodoc:
    attrs = attributes.sort.map do |attr|
      next unless attr.display?
      [ attr.name, attr.rw,
        attr.visibility, attr.singleton, attr.file_name,
      ]
    end.compact

    method_types = methods_by_type.map do |type, visibilities|
      visibilities = visibilities.map do |visibility, methods|
        method_names = methods.map do |method|
          next unless method.display?
          [method.name, method.file_name]
        end.compact

        [visibility, method_names.uniq]
      end

      [type, visibilities]
    end

    [ MARSHAL_VERSION,
      @name,
      full_name,
      @superclass,
      parse(@comment_location),
      attrs,
      constants.select { |constant| constant.display? },
      includes.map do |incl|
        next unless incl.display?
        [incl.name, parse(incl.comment), incl.file_name]
      end.compact,
      method_types,
      extends.map do |ext|
        next unless ext.display?
        [ext.name, parse(ext.comment), ext.file_name]
      end.compact,
      @sections.values,
      @in_files.map do |tl|
        tl.relative_name
      end,
      parent.full_name,
      parent.class,
    ]
  end

  def marshal_load array # :nodoc:
    initialize_visibility
    initialize_methods_etc
    @current_section   = nil
    @document_self     = true
    @done_documenting  = false
    @parent            = nil
    @temporary_section = nil
    @visibility        = nil
    @classes           = {}
    @modules           = {}

    @name       = array[1]
    @full_name  = array[2]
    @superclass = array[3]
    @comment    = array[4]

    @comment_location = if RDoc::Markup::Document === @comment.parts.first then
                          @comment
                        else
                          RDoc::Markup::Document.new @comment
                        end

    array[5].each do |name, rw, visibility, singleton, file|
      singleton  ||= false
      visibility ||= :public

      attr = RDoc::Attr.new nil, name, rw, nil, singleton

      add_attribute attr
      attr.visibility = visibility
      attr.record_location RDoc::TopLevel.new file
    end

    array[6].each do |constant, comment, file|
      case constant
      when RDoc::Constant then
        add_constant constant
      else
        constant = add_constant RDoc::Constant.new(constant, nil, comment)
        constant.record_location RDoc::TopLevel.new file
      end
    end

    array[7].each do |name, comment, file|
      incl = add_include RDoc::Include.new(name, comment)
      incl.record_location RDoc::TopLevel.new file
    end

    array[8].each do |type, visibilities|
      visibilities.each do |visibility, methods|
        @visibility = visibility

        methods.each do |name, file|
          method = RDoc::AnyMethod.new nil, name
          method.singleton = true if type == 'class'
          method.record_location RDoc::TopLevel.new file
          add_method method
        end
      end
    end

    array[9].each do |name, comment, file|
      ext = add_extend RDoc::Extend.new(name, comment)
      ext.record_location RDoc::TopLevel.new file
    end if array[9] # Support Marshal version 1

    sections = (array[10] || []).map do |section|
      [section.title, section]
    end

    @sections = Hash[*sections.flatten]
    @current_section = add_section nil

    @in_files = []

    (array[11] || []).each do |filename|
      record_location RDoc::TopLevel.new filename
    end

    @parent_name  = array[12]
    @parent_class = array[13]
  end

  ##
  # Merges +class_module+ into this ClassModule.
  #
  # The data in +class_module+ is preferred over the receiver.

  def merge class_module
    @parent      = class_module.parent
    @parent_name = class_module.parent_name

    other_document = parse class_module.comment_location

    if other_document then
      document = parse @comment_location

      document = document.merge other_document

      @comment = @comment_location = document
    end

    cm = class_module
    other_files = cm.in_files

    merge_collections attributes, cm.attributes, other_files do |add, attr|
      if add then
        add_attribute attr
      else
        @attributes.delete attr
        @methods_hash.delete attr.pretty_name
      end
    end

    merge_collections constants, cm.constants, other_files do |add, const|
      if add then
        add_constant const
      else
        @constants.delete const
        @constants_hash.delete const.name
      end
    end

    merge_collections includes, cm.includes, other_files do |add, incl|
      if add then
        add_include incl
      else
        @includes.delete incl
      end
    end

    @includes.uniq! # clean up

    merge_collections extends, cm.extends, other_files do |add, ext|
      if add then
        add_extend ext
      else
        @extends.delete ext
      end
    end

    @extends.uniq! # clean up

    merge_collections method_list, cm.method_list, other_files do |add, meth|
      if add then
        add_method meth
      else
        @method_list.delete meth
        @methods_hash.delete meth.pretty_name
      end
    end

    merge_sections cm

    self
  end

  ##
  # Merges collection +mine+ with +other+ preferring other.  +other_files+ is
  # used to help determine which items should be deleted.
  #
  # Yields whether the item should be added or removed (true or false) and the
  # item to be added or removed.
  #
  #   merge_collections things, other.things, other.in_files do |add, thing|
  #     if add then
  #       # add the thing
  #     else
  #       # remove the thing
  #     end
  #   end

  def merge_collections mine, other, other_files, &block # :nodoc:
    my_things    = mine. group_by { |thing| thing.file }
    other_things = other.group_by { |thing| thing.file }

    remove_things my_things, other_files,  &block
    add_things    my_things, other_things, &block
  end

  ##
  # Merges the comments in this ClassModule with the comments in the other
  # ClassModule +cm+.

  def merge_sections cm # :nodoc:
    my_sections    =    sections.group_by { |section| section.title }
    other_sections = cm.sections.group_by { |section| section.title }

    other_files = cm.in_files

    remove_things my_sections, other_files do |_, section|
      @sections.delete section.title
    end

    other_sections.each do |group, sections|
      if my_sections.include? group
        my_sections[group].each do |my_section|
          other_section = cm.sections_hash[group]

          my_comments    = my_section.comments
          other_comments = other_section.comments

          other_files = other_section.in_files

          merge_collections my_comments, other_comments, other_files do |add, comment|
            if add then
              my_section.add_comment comment
            else
              my_section.remove_comment comment
            end
          end
        end
      else
        sections.each do |section|
          add_section group, section.comments
        end
      end
    end
  end

  ##
  # Does this object represent a module?

  def module?
    false
  end

  ##
  # Allows overriding the initial name.
  #
  # Used for modules and classes that are constant aliases.

  def name= new_name
    @name = new_name
  end

  ##
  # Parses +comment_location+ into an RDoc::Markup::Document composed of
  # multiple RDoc::Markup::Documents with their file set.

  def parse comment_location
    case comment_location
    when String then
      super
    when Array then
      docs = comment_location.map do |comment, location|
        doc = super comment
        doc.file = location
        doc
      end

      RDoc::Markup::Document.new(*docs)
    when RDoc::Comment then
      doc = super comment_location.text, comment_location.format
      doc.file = comment_location.location
      doc
    when RDoc::Markup::Document then
      return comment_location
    else
      raise ArgumentError, "unknown comment class #{comment_location.class}"
    end
  end

  ##
  # Path to this class or module for use with HTML generator output.

  def path
    http_url @store.rdoc.generator.class_dir
  end

  ##
  # Name to use to generate the url:
  # modules and classes that are aliases for another
  # module or class return the name of the latter.

  def name_for_path
    is_alias_for ? is_alias_for.full_name : full_name
  end

  ##
  # Returns the classes and modules that are not constants
  # aliasing another class or module. For use by formatters
  # only (caches its result).

  def non_aliases
    @non_aliases ||= classes_and_modules.reject { |cm| cm.is_alias_for }
  end

  ##
  # Updates the child modules or classes of class/module +parent+ by
  # deleting the ones that have been removed from the documentation.
  #
  # +parent_hash+ is either <tt>parent.modules_hash</tt> or
  # <tt>parent.classes_hash</tt> and +all_hash+ is ::all_modules_hash or
  # ::all_classes_hash.

  def remove_nodoc_children
    prefix = self.full_name + '::'

    modules_hash.each_key do |name|
      full_name = prefix + name
      modules_hash.delete name unless @store.modules_hash[full_name]
    end

    classes_hash.each_key do |name|
      full_name = prefix + name
      classes_hash.delete name unless @store.classes_hash[full_name]
    end
  end

  def remove_things my_things, other_files # :nodoc:
    my_things.delete_if do |file, things|
      next false unless other_files.include? file

      things.each do |thing|
        yield false, thing
      end

      true
    end
  end

  ##
  # Search record used by RDoc::Generator::JsonIndex

  def search_record
    [
      name,
      full_name,
      full_name,
      '',
      path,
      '',
      snippet(@comment_location),
    ]
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @attributes .each do |attr|  attr.store  = store end
    @constants  .each do |const| const.store = store end
    @includes   .each do |incl|  incl.store  = store end
    @extends    .each do |ext|   ext.store   = store end
    @method_list.each do |meth|  meth.store  = store end
  end

  ##
  # Get the superclass of this class.  Attempts to retrieve the superclass
  # object, returns the name if it is not known.

  def superclass
    @store.find_class_named(@superclass) || @superclass
  end

  ##
  # Set the superclass of this class to +superclass+

  def superclass=(superclass)
    raise NoMethodError, "#{full_name} is a module" if module?
    @superclass = superclass
  end

  def to_s # :nodoc:
    if is_alias_for then
      "#{self.class.name} #{self.full_name} -> #{is_alias_for}"
    else
      super
    end
  end

  ##
  # 'module' or 'class'

  def type
    module? ? 'module' : 'class'
  end

  ##
  # Updates the child modules & classes by replacing the ones that are
  # aliases through a constant.
  #
  # The aliased module/class is replaced in the children and in
  # RDoc::Store#modules_hash or RDoc::Store#classes_hash
  # by a copy that has <tt>RDoc::ClassModule#is_alias_for</tt> set to
  # the aliased module/class, and this copy is added to <tt>#aliases</tt>
  # of the aliased module/class.
  #
  # Formatters can use the #non_aliases method to retrieve children that
  # are not aliases, for instance to list the namespace content, since
  # the aliased modules are included in the constants of the class/module,
  # that are listed separately.

  def update_aliases
    constants.each do |const|
      next unless cm = const.is_alias_for
      cm_alias = cm.dup
      cm_alias.name = const.name

      # Don't move top-level aliases under Object, they look ugly there
      unless RDoc::TopLevel === cm_alias.parent then
        cm_alias.parent = self
        cm_alias.full_name = nil # force update for new parent
      end

      cm_alias.aliases.clear
      cm_alias.is_alias_for = cm

      if cm.module? then
        @store.modules_hash[cm_alias.full_name] = cm_alias
        modules_hash[const.name] = cm_alias
      else
        @store.classes_hash[cm_alias.full_name] = cm_alias
        classes_hash[const.name] = cm_alias
      end

      cm.aliases << cm_alias
    end
  end

  ##
  # Deletes from #includes those whose module has been removed from the
  # documentation.
  #--
  # FIXME: includes are not reliably removed, see _possible_bug test case

  def update_includes
    includes.reject! do |include|
      mod = include.module
      !(String === mod) && @store.modules_hash[mod.full_name].nil?
    end

    includes.uniq!
  end

  ##
  # Deletes from #extends those whose module has been removed from the
  # documentation.
  #--
  # FIXME: like update_includes, extends are not reliably removed

  def update_extends
    extends.reject! do |ext|
      mod = ext.module

      !(String === mod) && @store.modules_hash[mod.full_name].nil?
    end

    extends.uniq!
  end

end

PK."#[�刊--'gems/rdoc-6.4.1.1/lib/rdoc/generator.rbnu�[���# frozen_string_literal: true
##
# RDoc uses generators to turn parsed source code in the form of an
# RDoc::CodeObject tree into some form of output.  RDoc comes with the HTML
# generator RDoc::Generator::Darkfish and an ri data generator
# RDoc::Generator::RI.
#
# == Registering a Generator
#
# Generators are registered by calling RDoc::RDoc.add_generator with the class
# of the generator:
#
#   class My::Awesome::Generator
#     RDoc::RDoc.add_generator self
#   end
#
# == Adding Options to +rdoc+
#
# Before option processing in +rdoc+, RDoc::Options will call ::setup_options
# on the generator class with an RDoc::Options instance.  The generator can
# use RDoc::Options#option_parser to add command-line options to the +rdoc+
# tool.  See RDoc::Options@Custom+Options for an example and see OptionParser
# for details on how to add options.
#
# You can extend the RDoc::Options instance with additional accessors for your
# generator.
#
# == Generator Instantiation
#
# After parsing, RDoc::RDoc will instantiate a generator by calling
# #initialize with an RDoc::Store instance and an RDoc::Options instance.
#
# The RDoc::Store instance holds documentation for parsed source code.  In
# RDoc 3 and earlier the RDoc::TopLevel class held this data.  When upgrading
# a generator from RDoc 3 and earlier you should only need to replace
# RDoc::TopLevel with the store instance.
#
# RDoc will then call #generate on the generator instance.  You can use the
# various methods on RDoc::Store and in the RDoc::CodeObject tree to create
# your desired output format.

module RDoc::Generator

  autoload :Markup,   'rdoc/generator/markup'

  autoload :Darkfish,  'rdoc/generator/darkfish'
  autoload :JsonIndex, 'rdoc/generator/json_index'
  autoload :RI,        'rdoc/generator/ri'
  autoload :POT,       'rdoc/generator/pot'

end
PK."#[�/��%gems/rdoc-6.4.1.1/lib/rdoc/include.rbnu�[���# frozen_string_literal: true
##
# A Module included in a class with \#include
#
#   RDoc::Include.new 'Enumerable', 'comment ...'

class RDoc::Include < RDoc::Mixin

end

PK."#[����$gems/rdoc-6.4.1.1/lib/rdoc/extend.rbnu�[���# frozen_string_literal: true
##
# A Module extension to a class with \#extend
#
#   RDoc::Extend.new 'Enumerable', 'comment ...'

class RDoc::Extend < RDoc::Mixin

end

PK."#[Wud<)	)	&gems/rdoc-6.4.1.1/lib/rdoc/markdown.rbnu�[���# coding: UTF-8
# frozen_string_literal: true
# :markup: markdown

##
# RDoc::Markdown as described by the [markdown syntax][syntax].
#
# To choose Markdown as your only default format see
# RDoc::Options@Saved+Options for instructions on setting up a `.doc_options`
# file to store your project default.
#
# ## Usage
#
# Here is a brief example of using this parse to read a markdown file by hand.
#
#     data = File.read("README.md")
#     formatter = RDoc::Markup::ToHtml.new(RDoc::Options.new, nil)
#     html = RDoc::Markdown.parse(data).accept(formatter)
#
#     # do something with html
#
# ## Extensions
#
# The following markdown extensions are supported by the parser, but not all
# are used in RDoc output by default.
#
# ### RDoc
#
# The RDoc Markdown parser has the following built-in behaviors that cannot be
# disabled.
#
# Underscores embedded in words are never interpreted as emphasis.  (While the
# [markdown dingus][dingus] emphasizes in-word underscores, neither the
# Markdown syntax nor MarkdownTest mention this behavior.)
#
# For HTML output, RDoc always auto-links bare URLs.
#
# ### Break on Newline
#
# The break_on_newline extension converts all newlines into hard line breaks
# as in [Github Flavored Markdown][GFM].  This extension is disabled by
# default.
#
# ### CSS
#
# The #css extension enables CSS blocks to be included in the output, but they
# are not used for any built-in RDoc output format.  This extension is disabled
# by default.
#
# Example:
#
#     <style type="text/css">
#     h1 { font-size: 3em }
#     </style>
#
# ### Definition Lists
#
# The definition_lists extension allows definition lists using the [PHP
# Markdown Extra syntax][PHPE], but only one label and definition are supported
# at this time.  This extension is enabled by default.
#
# Example:
#
# ```
# cat
# :   A small furry mammal
# that seems to sleep a lot
#
# ant
# :   A little insect that is known
# to enjoy picnics
#
# ```
#
# Produces:
#
# cat
# :   A small furry mammal
# that seems to sleep a lot
#
# ant
# :   A little insect that is known
# to enjoy picnics
#
# ### Strike
#
# Example:
#
# ```
# This is ~~striked~~.
# ```
#
# Produces:
#
# This is ~~striked~~.
#
# ### Github
#
# The #github extension enables a partial set of [Github Flavored Markdown]
# [GFM].  This extension is enabled by default.
#
# Supported github extensions include:
#
# #### Fenced code blocks
#
# Use ` ``` ` around a block of code instead of indenting it four spaces.
#
# #### Syntax highlighting
#
# Use ` ``` ruby ` as the start of a code fence to add syntax highlighting.
# (Currently only `ruby` syntax is supported).
#
# ### HTML
#
# Enables raw HTML to be included in the output.  This extension is enabled by
# default.
#
# Example:
#
#     <table>
#     ...
#     </table>
#
# ### Notes
#
# The #notes extension enables footnote support.  This extension is enabled by
# default.
#
# Example:
#
#     Here is some text[^1] including an inline footnote ^[for short footnotes]
#
#     ...
#
#     [^1]: With the footnote text down at the bottom
#
# Produces:
#
# Here is some text[^1] including an inline footnote ^[for short footnotes]
#
# [^1]: With the footnote text down at the bottom
#
# ## Limitations
#
# * Link titles are not used
# * Footnotes are collapsed into a single paragraph
#
# ## Author
#
# This markdown parser is a port to kpeg from [peg-markdown][pegmarkdown] by
# John MacFarlane.
#
# It is used under the MIT license:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
# The port to kpeg was performed by Eric Hodel and Evan Phoenix
#
# [dingus]: http://daringfireball.net/projects/markdown/dingus
# [GFM]: https://github.github.com/gfm/
# [pegmarkdown]: https://github.com/jgm/peg-markdown
# [PHPE]: http://michelf.com/projects/php-markdown/extra/#def-list
# [syntax]: http://daringfireball.net/projects/markdown/syntax
#--
# Last updated to jgm/peg-markdown commit 8f8fc22ef0
class RDoc::Markdown
  # :stopdoc:

    # This is distinct from setup_parser so that a standalone parser
    # can redefine #initialize and still have access to the proper
    # parser setup code.
    def initialize(str, debug=false)
      setup_parser(str, debug)
    end



    # Prepares for parsing +str+.  If you define a custom initialize you must
    # call this method before #parse
    def setup_parser(str, debug=false)
      set_string str, 0
      @memoizations = Hash.new { |h,k| h[k] = {} }
      @result = nil
      @failed_rule = nil
      @failing_rule_offset = -1

      setup_foreign_grammar
    end

    attr_reader :string
    attr_reader :failing_rule_offset
    attr_accessor :result, :pos

    def current_column(target=pos)
      if c = string.rindex("\n", target-1)
        return target - c - 1
      end

      target + 1
    end

    def current_line(target=pos)
      cur_offset = 0
      cur_line = 0

      string.each_line do |line|
        cur_line += 1
        cur_offset += line.size
        return cur_line if cur_offset >= target
      end

      -1
    end

    def lines
      lines = []
      string.each_line { |l| lines << l }
      lines
    end



    def get_text(start)
      @string[start..@pos-1]
    end

    # Sets the string and current parsing position for the parser.
    def set_string string, pos
      @string = string
      @string_size = string ? string.size : 0
      @pos = pos
    end

    def show_pos
      width = 10
      if @pos < width
        "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
      else
        "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
      end
    end

    def failure_info
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
      else
        "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
      end
    end

    def failure_caret
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      line = lines[l-1]
      "#{line}\n#{' ' * (c - 1)}^"
    end

    def failure_character
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset
      lines[l-1][c-1, 1]
    end

    def failure_oneline
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      char = lines[l-1][c-1, 1]

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "@#{l}:#{c} failed rule '#{info.name}', got '#{char}'"
      else
        "@#{l}:#{c} failed rule '#{@failed_rule}', got '#{char}'"
      end
    end

    class ParseError < RuntimeError
    end

    def raise_error
      raise ParseError, failure_oneline
    end

    def show_error(io=STDOUT)
      error_pos = @failing_rule_offset
      line_no = current_line(error_pos)
      col_no = current_column(error_pos)

      io.puts "On line #{line_no}, column #{col_no}:"

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
      else
        io.puts "Failed to match rule '#{@failed_rule}'"
      end

      io.puts "Got: #{string[error_pos,1].inspect}"
      line = lines[line_no-1]
      io.puts "=> #{line}"
      io.print(" " * (col_no + 3))
      io.puts "^"
    end

    def set_failed_rule(name)
      if @pos > @failing_rule_offset
        @failed_rule = name
        @failing_rule_offset = @pos
      end
    end

    attr_reader :failed_rule

    def match_string(str)
      len = str.size
      if @string[pos,len] == str
        @pos += len
        return str
      end

      return nil
    end

    def scan(reg)
      if m = reg.match(@string, @pos)
        @pos = m.end(0)
        return true
      end

      return nil
    end

    if "".respond_to? :ord
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos].ord
        @pos += 1
        s
      end
    else
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos]
        @pos += 1
        s
      end
    end

    def parse(rule=nil)
      # We invoke the rules indirectly via apply
      # instead of by just calling them as methods because
      # if the rules use left recursion, apply needs to
      # manage that.

      if !rule
        apply(:_root)
      else
        method = rule.gsub("-","_hyphen_")
        apply :"_#{method}"
      end
    end

    class MemoEntry
      def initialize(ans, pos)
        @ans = ans
        @pos = pos
        @result = nil
        @set = false
        @left_rec = false
      end

      attr_reader :ans, :pos, :result, :set
      attr_accessor :left_rec

      def move!(ans, pos, result)
        @ans = ans
        @pos = pos
        @result = result
        @set = true
        @left_rec = false
      end
    end

    def external_invoke(other, rule, *args)
      old_pos = @pos
      old_string = @string

      set_string other.string, other.pos

      begin
        if val = __send__(rule, *args)
          other.pos = @pos
          other.result = @result
        else
          other.set_failed_rule "#{self.class}##{rule}"
        end
        val
      ensure
        set_string old_string, old_pos
      end
    end

    def apply_with_args(rule, *args)
      memo_key = [rule, args]
      if m = @memoizations[memo_key][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[memo_key][@pos] = m
        start_pos = @pos

        ans = __send__ rule, *args

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, args, start_pos, m)
        else
          return ans
        end
      end
    end

    def apply(rule)
      if m = @memoizations[rule][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[rule][@pos] = m
        start_pos = @pos

        ans = __send__ rule

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, nil, start_pos, m)
        else
          return ans
        end
      end
    end

    def grow_lr(rule, args, start_pos, m)
      while true
        @pos = start_pos
        @result = m.result

        if args
          ans = __send__ rule, *args
        else
          ans = __send__ rule
        end
        return nil unless ans

        break if @pos <= m.pos

        m.move! ans, @pos, @result
      end

      @result = m.result
      @pos = m.pos
      return m.ans
    end

    class RuleInfo
      def initialize(name, rendered)
        @name = name
        @rendered = rendered
      end

      attr_reader :name, :rendered
    end

    def self.rule_info(name, rendered)
      RuleInfo.new(name, rendered)
    end


  # :startdoc:



  require 'rdoc'
  require 'rdoc/markup/to_joined_paragraph'
  require 'rdoc/markdown/entities'

  require 'rdoc/markdown/literals'

  ##
  # Supported extensions

  EXTENSIONS = []

  ##
  # Extensions enabled by default

  DEFAULT_EXTENSIONS = [
    :definition_lists,
    :github,
    :html,
    :notes,
    :strike,
  ]

  # :section: Extensions

  ##
  # Creates extension methods for the `name` extension to enable and disable
  # the extension and to query if they are active.

  def self.extension name
    EXTENSIONS << name

    define_method "#{name}?" do
      extension? name
    end

    define_method "#{name}=" do |enable|
      extension name, enable
    end
  end

  ##
  # Converts all newlines into hard breaks

  extension :break_on_newline

  ##
  # Allow style blocks

  extension :css

  ##
  # Allow PHP Markdown Extras style definition lists

  extension :definition_lists

  ##
  # Allow Github Flavored Markdown

  extension :github

  ##
  # Allow HTML

  extension :html

  ##
  # Enables the notes extension

  extension :notes

  ##
  # Enables the strike extension

  extension :strike

  # :section:

  ##
  # Parses the `markdown` document into an RDoc::Document using the default
  # extensions.

  def self.parse markdown
    parser = new

    parser.parse markdown
  end

  # TODO remove when kpeg 0.10 is released
  alias orig_initialize initialize # :nodoc:

  ##
  # Creates a new markdown parser that enables the given +extensions+.

  def initialize extensions = DEFAULT_EXTENSIONS, debug = false
    @debug      = debug
    @formatter  = RDoc::Markup::ToJoinedParagraph.new
    @extensions = extensions

    @references          = nil
    @unlinked_references = nil

    @footnotes       = nil
    @note_order      = nil
  end

  ##
  # Wraps `text` in emphasis for rdoc inline formatting

  def emphasis text
    if text =~ /\A[a-z\d.\/]+\z/i then
      "_#{text}_"
    else
      "<em>#{text}</em>"
    end
  end

  ##
  # :category: Extensions
  #
  # Is the extension `name` enabled?

  def extension? name
    @extensions.include? name
  end

  ##
  # :category: Extensions
  #
  # Enables or disables the extension with `name`

  def extension name, enable
    if enable then
      @extensions |= [name]
    else
      @extensions -= [name]
    end
  end

  ##
  # Parses `text` in a clone of this parser.  This is used for handling nested
  # lists the same way as markdown_parser.

  def inner_parse text # :nodoc:
    parser = clone

    parser.setup_parser text, @debug

    parser.peg_parse

    doc = parser.result

    doc.accept @formatter

    doc.parts
  end

  ##
  # Finds a link reference for `label` and creates a new link to it with
  # `content` as the link text.  If `label` was not encountered in the
  # reference-gathering parser pass the label and content are reconstructed
  # with the linking `text` (usually whitespace).

  def link_to content, label = content, text = nil
    raise ParseError, 'enable notes extension' if
      content.start_with? '^' and label.equal? content

    if ref = @references[label] then
      "{#{content}}[#{ref}]"
    elsif label.equal? content then
      "[#{content}]#{text}"
    else
      "[#{content}]#{text}[#{label}]"
    end
  end

  ##
  # Creates an RDoc::Markup::ListItem by parsing the `unparsed` content from
  # the first parsing pass.

  def list_item_from unparsed
    parsed = inner_parse unparsed.join
    RDoc::Markup::ListItem.new nil, *parsed
  end

  ##
  # Stores `label` as a note and fills in previously unknown note references.

  def note label
    #foottext = "rdoc-label:foottext-#{label}:footmark-#{label}"

    #ref.replace foottext if ref = @unlinked_notes.delete(label)

    @notes[label] = foottext

    #"{^1}[rdoc-label:footmark-#{label}:foottext-#{label}] "
  end

  ##
  # Creates a new link for the footnote `reference` and adds the reference to
  # the note order list for proper display at the end of the document.

  def note_for ref
    @note_order << ref

    label = @note_order.length

    "{*#{label}}[rdoc-label:foottext-#{label}:footmark-#{label}]"
  end

  ##
  # The internal kpeg parse method

  alias peg_parse parse # :nodoc:

  ##
  # Creates an RDoc::Markup::Paragraph from `parts` and including
  # extension-specific behavior

  def paragraph parts
    parts = parts.map do |part|
      if "\n" == part then
        RDoc::Markup::HardBreak.new
      else
        part
      end
    end if break_on_newline?

    RDoc::Markup::Paragraph.new(*parts)
  end

  ##
  # Parses `markdown` into an RDoc::Document

  def parse markdown
    @references          = {}
    @unlinked_references = {}

    markdown += "\n\n"

    setup_parser markdown, @debug
    peg_parse 'References'

    if notes? then
      @footnotes       = {}

      setup_parser markdown, @debug
      peg_parse 'Notes'

      # using note_order on the first pass would be a bug
      @note_order      = []
    end

    setup_parser markdown, @debug
    peg_parse

    doc = result

    if notes? and not @footnotes.empty? then
      doc << RDoc::Markup::Rule.new(1)

      @note_order.each_with_index do |ref, index|
        label = index + 1
        note = @footnotes[ref]

        link = "{^#{label}}[rdoc-label:footmark-#{label}:foottext-#{label}] "
        note.parts.unshift link

        doc << note
      end
    end

    doc.accept @formatter

    doc
  end

  ##
  # Stores `label` as a reference to `link` and fills in previously unknown
  # link references.

  def reference label, link
    if ref = @unlinked_references.delete(label) then
      ref.replace link
    end

    @references[label] = link
  end

  ##
  # Wraps `text` in strong markup for rdoc inline formatting

  def strong text
    if text =~ /\A[a-z\d.\/-]+\z/i then
      "*#{text}*"
    else
      "<b>#{text}</b>"
    end
  end

  ##
  # Wraps `text` in strike markup for rdoc inline formatting

  def strike text
    if text =~ /\A[a-z\d.\/-]+\z/i then
      "~#{text}~"
    else
      "<s>#{text}</s>"
    end
  end


  # :stopdoc:
  def setup_foreign_grammar
    @_grammar_literals = RDoc::Markdown::Literals.new(nil)
  end

  # root = Doc
  def _root
    _tmp = apply(:_Doc)
    set_failed_rule :_root unless _tmp
    return _tmp
  end

  # Doc = BOM? Block*:a { RDoc::Markup::Document.new(*a.compact) }
  def _Doc

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_BOM)
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _ary = []
      while true
        _tmp = apply(:_Block)
        _ary << @result if _tmp
        break unless _tmp
      end
      _tmp = true
      @result = _ary
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Document.new(*a.compact) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Doc unless _tmp
    return _tmp
  end

  # Block = @BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)
  def _Block

    _save = self.pos
    while true # sequence
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_BlockQuote)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Verbatim)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_CodeFence)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Table)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Note)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Reference)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_HorizontalRule)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Heading)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_OrderedList)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_BulletList)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_DefinitionList)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_HtmlBlock)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_StyleBlock)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Para)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_Plain)
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Block unless _tmp
    return _tmp
  end

  # Para = @NonindentSpace Inlines:a @BlankLine+ { paragraph a }
  def _Para

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Inlines)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  paragraph a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Para unless _tmp
    return _tmp
  end

  # Plain = Inlines:a { paragraph a }
  def _Plain

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Inlines)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  paragraph a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Plain unless _tmp
    return _tmp
  end

  # AtxInline = !@Newline !(@Sp /#*/ @Sp @Newline) Inline
  def _AtxInline

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _Newline()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = scan(/\G(?-mix:#*)/)
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = _Newline()
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Inline)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AtxInline unless _tmp
    return _tmp
  end

  # AtxStart = < /\#{1,6}/ > { text.length }
  def _AtxStart

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:\#{1,6})/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text.length ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AtxStart unless _tmp
    return _tmp
  end

  # AtxHeading = AtxStart:s @Sp AtxInline+:a (@Sp /#*/ @Sp)? @Newline { RDoc::Markup::Heading.new(s, a.join) }
  def _AtxHeading

    _save = self.pos
    while true # sequence
      _tmp = apply(:_AtxStart)
      s = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_AtxInline)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_AtxInline)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = scan(/\G(?-mix:#*)/)
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Heading.new(s, a.join) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AtxHeading unless _tmp
    return _tmp
  end

  # SetextHeading = (SetextHeading1 | SetextHeading2)
  def _SetextHeading

    _save = self.pos
    while true # choice
      _tmp = apply(:_SetextHeading1)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_SetextHeading2)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_SetextHeading unless _tmp
    return _tmp
  end

  # SetextBottom1 = /={1,}/ @Newline
  def _SetextBottom1

    _save = self.pos
    while true # sequence
      _tmp = scan(/\G(?-mix:={1,})/)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextBottom1 unless _tmp
    return _tmp
  end

  # SetextBottom2 = /-{1,}/ @Newline
  def _SetextBottom2

    _save = self.pos
    while true # sequence
      _tmp = scan(/\G(?-mix:-{1,})/)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextBottom2 unless _tmp
    return _tmp
  end

  # SetextHeading1 = &(@RawLine SetextBottom1) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom1 { RDoc::Markup::Heading.new(1, a.join) }
  def _SetextHeading1

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = _RawLine()
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_SetextBottom1)
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _save5 = self.pos
        _tmp = _Endline()
        _tmp = _tmp ? nil : true
        self.pos = _save5
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save4
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      if _tmp
        while true

          _save6 = self.pos
          while true # sequence
            _save7 = self.pos
            _tmp = _Endline()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save6
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save6
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save6
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_SetextBottom1)
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Heading.new(1, a.join) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextHeading1 unless _tmp
    return _tmp
  end

  # SetextHeading2 = &(@RawLine SetextBottom2) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom2 { RDoc::Markup::Heading.new(2, a.join) }
  def _SetextHeading2

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = _RawLine()
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_SetextBottom2)
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _save5 = self.pos
        _tmp = _Endline()
        _tmp = _tmp ? nil : true
        self.pos = _save5
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save4
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      if _tmp
        while true

          _save6 = self.pos
          while true # sequence
            _save7 = self.pos
            _tmp = _Endline()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save6
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save6
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save6
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_SetextBottom2)
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Heading.new(2, a.join) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_SetextHeading2 unless _tmp
    return _tmp
  end

  # Heading = (SetextHeading | AtxHeading)
  def _Heading

    _save = self.pos
    while true # choice
      _tmp = apply(:_SetextHeading)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_AtxHeading)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Heading unless _tmp
    return _tmp
  end

  # BlockQuote = BlockQuoteRaw:a { RDoc::Markup::BlockQuote.new(*a) }
  def _BlockQuote

    _save = self.pos
    while true # sequence
      _tmp = apply(:_BlockQuoteRaw)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::BlockQuote.new(*a) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BlockQuote unless _tmp
    return _tmp
  end

  # BlockQuoteRaw = @StartList:a (">" " "? Line:l { a << l } (!">" !@BlankLine Line:c { a << c })* (@BlankLine:n { a << n })*)+ { inner_parse a.join }
  def _BlockQuoteRaw

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = match_string(">")
        unless _tmp
          self.pos = _save2
          break
        end
        _save3 = self.pos
        _tmp = match_string(" ")
        unless _tmp
          _tmp = true
          self.pos = _save3
        end
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_Line)
        l = @result
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  a << l ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
          break
        end
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string(">")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _save7 = self.pos
            _tmp = _BlankLine()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Line)
            c = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << c ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save2
          break
        end
        while true

          _save9 = self.pos
          while true # sequence
            _tmp = _BlankLine()
            n = @result
            unless _tmp
              self.pos = _save9
              break
            end
            @result = begin;  a << n ; end
            _tmp = true
            unless _tmp
              self.pos = _save9
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save10 = self.pos
          while true # sequence
            _tmp = match_string(">")
            unless _tmp
              self.pos = _save10
              break
            end
            _save11 = self.pos
            _tmp = match_string(" ")
            unless _tmp
              _tmp = true
              self.pos = _save11
            end
            unless _tmp
              self.pos = _save10
              break
            end
            _tmp = apply(:_Line)
            l = @result
            unless _tmp
              self.pos = _save10
              break
            end
            @result = begin;  a << l ; end
            _tmp = true
            unless _tmp
              self.pos = _save10
              break
            end
            while true

              _save13 = self.pos
              while true # sequence
                _save14 = self.pos
                _tmp = match_string(">")
                _tmp = _tmp ? nil : true
                self.pos = _save14
                unless _tmp
                  self.pos = _save13
                  break
                end
                _save15 = self.pos
                _tmp = _BlankLine()
                _tmp = _tmp ? nil : true
                self.pos = _save15
                unless _tmp
                  self.pos = _save13
                  break
                end
                _tmp = apply(:_Line)
                c = @result
                unless _tmp
                  self.pos = _save13
                  break
                end
                @result = begin;  a << c ; end
                _tmp = true
                unless _tmp
                  self.pos = _save13
                end
                break
              end # end sequence

              break unless _tmp
            end
            _tmp = true
            unless _tmp
              self.pos = _save10
              break
            end
            while true

              _save17 = self.pos
              while true # sequence
                _tmp = _BlankLine()
                n = @result
                unless _tmp
                  self.pos = _save17
                  break
                end
                @result = begin;  a << n ; end
                _tmp = true
                unless _tmp
                  self.pos = _save17
                end
                break
              end # end sequence

              break unless _tmp
            end
            _tmp = true
            unless _tmp
              self.pos = _save10
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  inner_parse a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BlockQuoteRaw unless _tmp
    return _tmp
  end

  # NonblankIndentedLine = !@BlankLine IndentedLine
  def _NonblankIndentedLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_IndentedLine)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NonblankIndentedLine unless _tmp
    return _tmp
  end

  # VerbatimChunk = @BlankLine*:a NonblankIndentedLine+:b { a.concat b }
  def _VerbatimChunk

    _save = self.pos
    while true # sequence
      _ary = []
      while true
        _tmp = _BlankLine()
        _ary << @result if _tmp
        break unless _tmp
      end
      _tmp = true
      @result = _ary
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_NonblankIndentedLine)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_NonblankIndentedLine)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      b = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a.concat b ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_VerbatimChunk unless _tmp
    return _tmp
  end

  # Verbatim = VerbatimChunk+:a { RDoc::Markup::Verbatim.new(*a.flatten) }
  def _Verbatim

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_VerbatimChunk)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_VerbatimChunk)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Verbatim.new(*a.flatten) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Verbatim unless _tmp
    return _tmp
  end

  # HorizontalRule = @NonindentSpace ("*" @Sp "*" @Sp "*" (@Sp "*")* | "-" @Sp "-" @Sp "-" (@Sp "-")* | "_" @Sp "_" @Sp "_" (@Sp "_")*) @Sp @Newline @BlankLine+ { RDoc::Markup::Rule.new 1 }
  def _HorizontalRule

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = match_string("*")
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = match_string("*")
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = match_string("*")
          unless _tmp
            self.pos = _save2
            break
          end
          while true

            _save4 = self.pos
            while true # sequence
              _tmp = _Sp()
              unless _tmp
                self.pos = _save4
                break
              end
              _tmp = match_string("*")
              unless _tmp
                self.pos = _save4
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save5 = self.pos
        while true # sequence
          _tmp = match_string("-")
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = match_string("-")
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save5
            break
          end
          _tmp = match_string("-")
          unless _tmp
            self.pos = _save5
            break
          end
          while true

            _save7 = self.pos
            while true # sequence
              _tmp = _Sp()
              unless _tmp
                self.pos = _save7
                break
              end
              _tmp = match_string("-")
              unless _tmp
                self.pos = _save7
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save8 = self.pos
        while true # sequence
          _tmp = match_string("_")
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = match_string("_")
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save8
            break
          end
          _tmp = match_string("_")
          unless _tmp
            self.pos = _save8
            break
          end
          while true

            _save10 = self.pos
            while true # sequence
              _tmp = _Sp()
              unless _tmp
                self.pos = _save10
                break
              end
              _tmp = match_string("_")
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save8
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _save11 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save11
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::Rule.new 1 ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HorizontalRule unless _tmp
    return _tmp
  end

  # Bullet = !HorizontalRule @NonindentSpace /[+*-]/ @Spacechar+
  def _Bullet

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_HorizontalRule)
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = scan(/\G(?-mix:[+*-])/)
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Bullet unless _tmp
    return _tmp
  end

  # BulletList = &Bullet (ListTight | ListLoose):a { RDoc::Markup::List.new(:BULLET, *a) }
  def _BulletList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_Bullet)
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_ListTight)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_ListLoose)
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::List.new(:BULLET, *a) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BulletList unless _tmp
    return _tmp
  end

  # ListTight = ListItemTight+:a @BlankLine* !(Bullet | Enumerator) { a }
  def _ListTight

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_ListItemTight)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_ListItemTight)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # choice
        _tmp = apply(:_Bullet)
        break if _tmp
        self.pos = _save4
        _tmp = apply(:_Enumerator)
        break if _tmp
        self.pos = _save4
        break
      end # end choice

      _tmp = _tmp ? nil : true
      self.pos = _save3
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListTight unless _tmp
    return _tmp
  end

  # ListLoose = @StartList:a (ListItem:b @BlankLine* { a << b })+ { a }
  def _ListLoose

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = apply(:_ListItem)
        b = @result
        unless _tmp
          self.pos = _save2
          break
        end
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save4 = self.pos
          while true # sequence
            _tmp = apply(:_ListItem)
            b = @result
            unless _tmp
              self.pos = _save4
              break
            end
            while true
              _tmp = _BlankLine()
              break unless _tmp
            end
            _tmp = true
            unless _tmp
              self.pos = _save4
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListLoose unless _tmp
    return _tmp
  end

  # ListItem = (Bullet | Enumerator) @StartList:a ListBlock:b { a << b } (ListContinuationBlock:c { a.push(*c) })* { list_item_from a }
  def _ListItem

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Bullet)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_Enumerator)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_ListBlock)
      b = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a << b ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _tmp = apply(:_ListContinuationBlock)
          c = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a.push(*c) ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  list_item_from a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListItem unless _tmp
    return _tmp
  end

  # ListItemTight = (Bullet | Enumerator) ListBlock:a (!@BlankLine ListContinuationBlock:b { a.push(*b) })* !ListContinuationBlock { list_item_from a }
  def _ListItemTight

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Bullet)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_Enumerator)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_ListBlock)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = _BlankLine()
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_ListContinuationBlock)
          b = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a.push(*b) ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save5 = self.pos
      _tmp = apply(:_ListContinuationBlock)
      _tmp = _tmp ? nil : true
      self.pos = _save5
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  list_item_from a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListItemTight unless _tmp
    return _tmp
  end

  # ListBlock = !@BlankLine Line:a ListBlockLine*:c { [a, *c] }
  def _ListBlock

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Line)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _ary = []
      while true
        _tmp = apply(:_ListBlockLine)
        _ary << @result if _tmp
        break unless _tmp
      end
      _tmp = true
      @result = _ary
      c = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [a, *c] ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListBlock unless _tmp
    return _tmp
  end

  # ListContinuationBlock = @StartList:a @BlankLine* { a << "\n" } (Indent ListBlock:b { a.concat b })+ { a }
  def _ListContinuationBlock

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a << "\n" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = apply(:_Indent)
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_ListBlock)
        b = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a.concat b ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save4 = self.pos
          while true # sequence
            _tmp = apply(:_Indent)
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = apply(:_ListBlock)
            b = @result
            unless _tmp
              self.pos = _save4
              break
            end
            @result = begin;  a.concat b ; end
            _tmp = true
            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListContinuationBlock unless _tmp
    return _tmp
  end

  # Enumerator = @NonindentSpace [0-9]+ "." @Spacechar+
  def _Enumerator

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _save2 = self.pos
      _tmp = get_byte
      if _tmp
        unless _tmp >= 48 and _tmp <= 57
          self.pos = _save2
          _tmp = nil
        end
      end
      if _tmp
        while true
          _save3 = self.pos
          _tmp = get_byte
          if _tmp
            unless _tmp >= 48 and _tmp <= 57
              self.pos = _save3
              _tmp = nil
            end
          end
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(".")
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save4
      end
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Enumerator unless _tmp
    return _tmp
  end

  # OrderedList = &Enumerator (ListTight | ListLoose):a { RDoc::Markup::List.new(:NUMBER, *a) }
  def _OrderedList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_Enumerator)
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_ListTight)
        break if _tmp
        self.pos = _save2
        _tmp = apply(:_ListLoose)
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::List.new(:NUMBER, *a) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_OrderedList unless _tmp
    return _tmp
  end

  # ListBlockLine = !@BlankLine !(Indent? (Bullet | Enumerator)) !HorizontalRule OptionallyIndentedLine
  def _ListBlockLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = apply(:_Indent)
        unless _tmp
          _tmp = true
          self.pos = _save4
        end
        unless _tmp
          self.pos = _save3
          break
        end

        _save5 = self.pos
        while true # choice
          _tmp = apply(:_Bullet)
          break if _tmp
          self.pos = _save5
          _tmp = apply(:_Enumerator)
          break if _tmp
          self.pos = _save5
          break
        end # end choice

        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _save6 = self.pos
      _tmp = apply(:_HorizontalRule)
      _tmp = _tmp ? nil : true
      self.pos = _save6
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_OptionallyIndentedLine)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ListBlockLine unless _tmp
    return _tmp
  end

  # HtmlOpenAnchor = "<" Spnl ("a" | "A") Spnl HtmlAttribute* ">"
  def _HtmlOpenAnchor

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("a")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("A")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlOpenAnchor unless _tmp
    return _tmp
  end

  # HtmlCloseAnchor = "<" Spnl "/" ("a" | "A") Spnl ">"
  def _HtmlCloseAnchor

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("a")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("A")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlCloseAnchor unless _tmp
    return _tmp
  end

  # HtmlAnchor = HtmlOpenAnchor (HtmlAnchor | !HtmlCloseAnchor .)* HtmlCloseAnchor
  def _HtmlAnchor

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlOpenAnchor)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlAnchor)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlCloseAnchor)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlCloseAnchor)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlAnchor unless _tmp
    return _tmp
  end

  # HtmlBlockOpenAddress = "<" Spnl ("address" | "ADDRESS") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenAddress

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("address")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("ADDRESS")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenAddress unless _tmp
    return _tmp
  end

  # HtmlBlockCloseAddress = "<" Spnl "/" ("address" | "ADDRESS") Spnl ">"
  def _HtmlBlockCloseAddress

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("address")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("ADDRESS")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseAddress unless _tmp
    return _tmp
  end

  # HtmlBlockAddress = HtmlBlockOpenAddress (HtmlBlockAddress | !HtmlBlockCloseAddress .)* HtmlBlockCloseAddress
  def _HtmlBlockAddress

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenAddress)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockAddress)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseAddress)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseAddress)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockAddress unless _tmp
    return _tmp
  end

  # HtmlBlockOpenBlockquote = "<" Spnl ("blockquote" | "BLOCKQUOTE") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenBlockquote

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("blockquote")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("BLOCKQUOTE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenBlockquote unless _tmp
    return _tmp
  end

  # HtmlBlockCloseBlockquote = "<" Spnl "/" ("blockquote" | "BLOCKQUOTE") Spnl ">"
  def _HtmlBlockCloseBlockquote

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("blockquote")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("BLOCKQUOTE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseBlockquote unless _tmp
    return _tmp
  end

  # HtmlBlockBlockquote = HtmlBlockOpenBlockquote (HtmlBlockBlockquote | !HtmlBlockCloseBlockquote .)* HtmlBlockCloseBlockquote
  def _HtmlBlockBlockquote

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenBlockquote)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockBlockquote)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseBlockquote)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseBlockquote)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockBlockquote unless _tmp
    return _tmp
  end

  # HtmlBlockOpenCenter = "<" Spnl ("center" | "CENTER") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenCenter

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("center")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("CENTER")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenCenter unless _tmp
    return _tmp
  end

  # HtmlBlockCloseCenter = "<" Spnl "/" ("center" | "CENTER") Spnl ">"
  def _HtmlBlockCloseCenter

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("center")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("CENTER")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseCenter unless _tmp
    return _tmp
  end

  # HtmlBlockCenter = HtmlBlockOpenCenter (HtmlBlockCenter | !HtmlBlockCloseCenter .)* HtmlBlockCloseCenter
  def _HtmlBlockCenter

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenCenter)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockCenter)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseCenter)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseCenter)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCenter unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDir = "<" Spnl ("dir" | "DIR") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDir

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dir")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDir unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDir = "<" Spnl "/" ("dir" | "DIR") Spnl ">"
  def _HtmlBlockCloseDir

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dir")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDir unless _tmp
    return _tmp
  end

  # HtmlBlockDir = HtmlBlockOpenDir (HtmlBlockDir | !HtmlBlockCloseDir .)* HtmlBlockCloseDir
  def _HtmlBlockDir

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDir)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDir)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDir)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDir)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDir unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDiv = "<" Spnl ("div" | "DIV") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDiv

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("div")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIV")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDiv unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDiv = "<" Spnl "/" ("div" | "DIV") Spnl ">"
  def _HtmlBlockCloseDiv

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("div")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DIV")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDiv unless _tmp
    return _tmp
  end

  # HtmlBlockDiv = HtmlBlockOpenDiv (HtmlBlockDiv | !HtmlBlockCloseDiv .)* HtmlBlockCloseDiv
  def _HtmlBlockDiv

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDiv)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDiv)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDiv)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDiv)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDiv unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDl = "<" Spnl ("dl" | "DL") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dl")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDl unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDl = "<" Spnl "/" ("dl" | "DL") Spnl ">"
  def _HtmlBlockCloseDl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dl")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDl unless _tmp
    return _tmp
  end

  # HtmlBlockDl = HtmlBlockOpenDl (HtmlBlockDl | !HtmlBlockCloseDl .)* HtmlBlockCloseDl
  def _HtmlBlockDl

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDl)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDl)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDl)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDl unless _tmp
    return _tmp
  end

  # HtmlBlockOpenFieldset = "<" Spnl ("fieldset" | "FIELDSET") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenFieldset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("fieldset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FIELDSET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenFieldset unless _tmp
    return _tmp
  end

  # HtmlBlockCloseFieldset = "<" Spnl "/" ("fieldset" | "FIELDSET") Spnl ">"
  def _HtmlBlockCloseFieldset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("fieldset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FIELDSET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseFieldset unless _tmp
    return _tmp
  end

  # HtmlBlockFieldset = HtmlBlockOpenFieldset (HtmlBlockFieldset | !HtmlBlockCloseFieldset .)* HtmlBlockCloseFieldset
  def _HtmlBlockFieldset

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenFieldset)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockFieldset)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseFieldset)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseFieldset)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockFieldset unless _tmp
    return _tmp
  end

  # HtmlBlockOpenForm = "<" Spnl ("form" | "FORM") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenForm

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("form")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FORM")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenForm unless _tmp
    return _tmp
  end

  # HtmlBlockCloseForm = "<" Spnl "/" ("form" | "FORM") Spnl ">"
  def _HtmlBlockCloseForm

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("form")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FORM")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseForm unless _tmp
    return _tmp
  end

  # HtmlBlockForm = HtmlBlockOpenForm (HtmlBlockForm | !HtmlBlockCloseForm .)* HtmlBlockCloseForm
  def _HtmlBlockForm

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenForm)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockForm)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseForm)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseForm)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockForm unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH1 = "<" Spnl ("h1" | "H1") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH1

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h1")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H1")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH1 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH1 = "<" Spnl "/" ("h1" | "H1") Spnl ">"
  def _HtmlBlockCloseH1

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h1")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H1")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH1 unless _tmp
    return _tmp
  end

  # HtmlBlockH1 = HtmlBlockOpenH1 (HtmlBlockH1 | !HtmlBlockCloseH1 .)* HtmlBlockCloseH1
  def _HtmlBlockH1

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH1)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH1)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH1)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH1)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH1 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH2 = "<" Spnl ("h2" | "H2") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH2

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h2")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H2")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH2 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH2 = "<" Spnl "/" ("h2" | "H2") Spnl ">"
  def _HtmlBlockCloseH2

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h2")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H2")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH2 unless _tmp
    return _tmp
  end

  # HtmlBlockH2 = HtmlBlockOpenH2 (HtmlBlockH2 | !HtmlBlockCloseH2 .)* HtmlBlockCloseH2
  def _HtmlBlockH2

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH2)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH2)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH2)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH2)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH2 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH3 = "<" Spnl ("h3" | "H3") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH3

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h3")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H3")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH3 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH3 = "<" Spnl "/" ("h3" | "H3") Spnl ">"
  def _HtmlBlockCloseH3

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h3")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H3")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH3 unless _tmp
    return _tmp
  end

  # HtmlBlockH3 = HtmlBlockOpenH3 (HtmlBlockH3 | !HtmlBlockCloseH3 .)* HtmlBlockCloseH3
  def _HtmlBlockH3

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH3)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH3)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH3)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH3)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH3 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH4 = "<" Spnl ("h4" | "H4") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH4

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h4")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H4")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH4 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH4 = "<" Spnl "/" ("h4" | "H4") Spnl ">"
  def _HtmlBlockCloseH4

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h4")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H4")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH4 unless _tmp
    return _tmp
  end

  # HtmlBlockH4 = HtmlBlockOpenH4 (HtmlBlockH4 | !HtmlBlockCloseH4 .)* HtmlBlockCloseH4
  def _HtmlBlockH4

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH4)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH4)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH4)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH4)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH4 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH5 = "<" Spnl ("h5" | "H5") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH5

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h5")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H5")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH5 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH5 = "<" Spnl "/" ("h5" | "H5") Spnl ">"
  def _HtmlBlockCloseH5

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h5")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H5")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH5 unless _tmp
    return _tmp
  end

  # HtmlBlockH5 = HtmlBlockOpenH5 (HtmlBlockH5 | !HtmlBlockCloseH5 .)* HtmlBlockCloseH5
  def _HtmlBlockH5

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH5)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH5)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH5)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH5)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH5 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenH6 = "<" Spnl ("h6" | "H6") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenH6

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h6")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H6")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenH6 unless _tmp
    return _tmp
  end

  # HtmlBlockCloseH6 = "<" Spnl "/" ("h6" | "H6") Spnl ">"
  def _HtmlBlockCloseH6

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("h6")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("H6")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseH6 unless _tmp
    return _tmp
  end

  # HtmlBlockH6 = HtmlBlockOpenH6 (HtmlBlockH6 | !HtmlBlockCloseH6 .)* HtmlBlockCloseH6
  def _HtmlBlockH6

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenH6)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockH6)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseH6)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseH6)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockH6 unless _tmp
    return _tmp
  end

  # HtmlBlockOpenMenu = "<" Spnl ("menu" | "MENU") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenMenu

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("menu")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("MENU")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenMenu unless _tmp
    return _tmp
  end

  # HtmlBlockCloseMenu = "<" Spnl "/" ("menu" | "MENU") Spnl ">"
  def _HtmlBlockCloseMenu

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("menu")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("MENU")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseMenu unless _tmp
    return _tmp
  end

  # HtmlBlockMenu = HtmlBlockOpenMenu (HtmlBlockMenu | !HtmlBlockCloseMenu .)* HtmlBlockCloseMenu
  def _HtmlBlockMenu

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenMenu)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockMenu)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseMenu)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseMenu)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockMenu unless _tmp
    return _tmp
  end

  # HtmlBlockOpenNoframes = "<" Spnl ("noframes" | "NOFRAMES") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenNoframes

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noframes")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOFRAMES")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenNoframes unless _tmp
    return _tmp
  end

  # HtmlBlockCloseNoframes = "<" Spnl "/" ("noframes" | "NOFRAMES") Spnl ">"
  def _HtmlBlockCloseNoframes

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noframes")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOFRAMES")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseNoframes unless _tmp
    return _tmp
  end

  # HtmlBlockNoframes = HtmlBlockOpenNoframes (HtmlBlockNoframes | !HtmlBlockCloseNoframes .)* HtmlBlockCloseNoframes
  def _HtmlBlockNoframes

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenNoframes)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockNoframes)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseNoframes)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseNoframes)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockNoframes unless _tmp
    return _tmp
  end

  # HtmlBlockOpenNoscript = "<" Spnl ("noscript" | "NOSCRIPT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenNoscript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noscript")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOSCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenNoscript unless _tmp
    return _tmp
  end

  # HtmlBlockCloseNoscript = "<" Spnl "/" ("noscript" | "NOSCRIPT") Spnl ">"
  def _HtmlBlockCloseNoscript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("noscript")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("NOSCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseNoscript unless _tmp
    return _tmp
  end

  # HtmlBlockNoscript = HtmlBlockOpenNoscript (HtmlBlockNoscript | !HtmlBlockCloseNoscript .)* HtmlBlockCloseNoscript
  def _HtmlBlockNoscript

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenNoscript)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockNoscript)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseNoscript)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseNoscript)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockNoscript unless _tmp
    return _tmp
  end

  # HtmlBlockOpenOl = "<" Spnl ("ol" | "OL") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenOl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ol")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("OL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenOl unless _tmp
    return _tmp
  end

  # HtmlBlockCloseOl = "<" Spnl "/" ("ol" | "OL") Spnl ">"
  def _HtmlBlockCloseOl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ol")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("OL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseOl unless _tmp
    return _tmp
  end

  # HtmlBlockOl = HtmlBlockOpenOl (HtmlBlockOl | !HtmlBlockCloseOl .)* HtmlBlockCloseOl
  def _HtmlBlockOl

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenOl)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockOl)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseOl)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseOl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOl unless _tmp
    return _tmp
  end

  # HtmlBlockOpenP = "<" Spnl ("p" | "P") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenP

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("p")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("P")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenP unless _tmp
    return _tmp
  end

  # HtmlBlockCloseP = "<" Spnl "/" ("p" | "P") Spnl ">"
  def _HtmlBlockCloseP

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("p")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("P")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseP unless _tmp
    return _tmp
  end

  # HtmlBlockP = HtmlBlockOpenP (HtmlBlockP | !HtmlBlockCloseP .)* HtmlBlockCloseP
  def _HtmlBlockP

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenP)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockP)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseP)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseP)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockP unless _tmp
    return _tmp
  end

  # HtmlBlockOpenPre = "<" Spnl ("pre" | "PRE") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenPre

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("pre")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("PRE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenPre unless _tmp
    return _tmp
  end

  # HtmlBlockClosePre = "<" Spnl "/" ("pre" | "PRE") Spnl ">"
  def _HtmlBlockClosePre

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("pre")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("PRE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockClosePre unless _tmp
    return _tmp
  end

  # HtmlBlockPre = HtmlBlockOpenPre (HtmlBlockPre | !HtmlBlockClosePre .)* HtmlBlockClosePre
  def _HtmlBlockPre

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenPre)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockPre)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockClosePre)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockClosePre)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockPre unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTable = "<" Spnl ("table" | "TABLE") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTable

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("table")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TABLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTable unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTable = "<" Spnl "/" ("table" | "TABLE") Spnl ">"
  def _HtmlBlockCloseTable

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("table")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TABLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTable unless _tmp
    return _tmp
  end

  # HtmlBlockTable = HtmlBlockOpenTable (HtmlBlockTable | !HtmlBlockCloseTable .)* HtmlBlockCloseTable
  def _HtmlBlockTable

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTable)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTable)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTable)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTable)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTable unless _tmp
    return _tmp
  end

  # HtmlBlockOpenUl = "<" Spnl ("ul" | "UL") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ul")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("UL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenUl unless _tmp
    return _tmp
  end

  # HtmlBlockCloseUl = "<" Spnl "/" ("ul" | "UL") Spnl ">"
  def _HtmlBlockCloseUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("ul")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("UL")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseUl unless _tmp
    return _tmp
  end

  # HtmlBlockUl = HtmlBlockOpenUl (HtmlBlockUl | !HtmlBlockCloseUl .)* HtmlBlockCloseUl
  def _HtmlBlockUl

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenUl)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockUl)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseUl)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseUl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockUl unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDd = "<" Spnl ("dd" | "DD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dd")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDd unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDd = "<" Spnl "/" ("dd" | "DD") Spnl ">"
  def _HtmlBlockCloseDd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dd")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDd unless _tmp
    return _tmp
  end

  # HtmlBlockDd = HtmlBlockOpenDd (HtmlBlockDd | !HtmlBlockCloseDd .)* HtmlBlockCloseDd
  def _HtmlBlockDd

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDd)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDd)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDd)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDd)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDd unless _tmp
    return _tmp
  end

  # HtmlBlockOpenDt = "<" Spnl ("dt" | "DT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenDt

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dt")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenDt unless _tmp
    return _tmp
  end

  # HtmlBlockCloseDt = "<" Spnl "/" ("dt" | "DT") Spnl ">"
  def _HtmlBlockCloseDt

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("dt")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("DT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseDt unless _tmp
    return _tmp
  end

  # HtmlBlockDt = HtmlBlockOpenDt (HtmlBlockDt | !HtmlBlockCloseDt .)* HtmlBlockCloseDt
  def _HtmlBlockDt

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenDt)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockDt)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseDt)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseDt)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockDt unless _tmp
    return _tmp
  end

  # HtmlBlockOpenFrameset = "<" Spnl ("frameset" | "FRAMESET") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenFrameset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("frameset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FRAMESET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenFrameset unless _tmp
    return _tmp
  end

  # HtmlBlockCloseFrameset = "<" Spnl "/" ("frameset" | "FRAMESET") Spnl ">"
  def _HtmlBlockCloseFrameset

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("frameset")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("FRAMESET")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseFrameset unless _tmp
    return _tmp
  end

  # HtmlBlockFrameset = HtmlBlockOpenFrameset (HtmlBlockFrameset | !HtmlBlockCloseFrameset .)* HtmlBlockCloseFrameset
  def _HtmlBlockFrameset

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenFrameset)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockFrameset)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseFrameset)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseFrameset)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockFrameset unless _tmp
    return _tmp
  end

  # HtmlBlockOpenLi = "<" Spnl ("li" | "LI") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenLi

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("li")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("LI")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenLi unless _tmp
    return _tmp
  end

  # HtmlBlockCloseLi = "<" Spnl "/" ("li" | "LI") Spnl ">"
  def _HtmlBlockCloseLi

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("li")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("LI")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseLi unless _tmp
    return _tmp
  end

  # HtmlBlockLi = HtmlBlockOpenLi (HtmlBlockLi | !HtmlBlockCloseLi .)* HtmlBlockCloseLi
  def _HtmlBlockLi

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenLi)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockLi)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseLi)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseLi)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockLi unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTbody = "<" Spnl ("tbody" | "TBODY") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTbody

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tbody")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TBODY")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTbody unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTbody = "<" Spnl "/" ("tbody" | "TBODY") Spnl ">"
  def _HtmlBlockCloseTbody

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tbody")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TBODY")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTbody unless _tmp
    return _tmp
  end

  # HtmlBlockTbody = HtmlBlockOpenTbody (HtmlBlockTbody | !HtmlBlockCloseTbody .)* HtmlBlockCloseTbody
  def _HtmlBlockTbody

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTbody)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTbody)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTbody)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTbody)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTbody unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTd = "<" Spnl ("td" | "TD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("td")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTd unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTd = "<" Spnl "/" ("td" | "TD") Spnl ">"
  def _HtmlBlockCloseTd

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("td")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTd unless _tmp
    return _tmp
  end

  # HtmlBlockTd = HtmlBlockOpenTd (HtmlBlockTd | !HtmlBlockCloseTd .)* HtmlBlockCloseTd
  def _HtmlBlockTd

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTd)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTd)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTd)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTd)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTd unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTfoot = "<" Spnl ("tfoot" | "TFOOT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTfoot

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tfoot")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TFOOT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTfoot unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTfoot = "<" Spnl "/" ("tfoot" | "TFOOT") Spnl ">"
  def _HtmlBlockCloseTfoot

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tfoot")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TFOOT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTfoot unless _tmp
    return _tmp
  end

  # HtmlBlockTfoot = HtmlBlockOpenTfoot (HtmlBlockTfoot | !HtmlBlockCloseTfoot .)* HtmlBlockCloseTfoot
  def _HtmlBlockTfoot

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTfoot)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTfoot)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTfoot)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTfoot)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTfoot unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTh = "<" Spnl ("th" | "TH") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTh

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("th")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TH")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTh unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTh = "<" Spnl "/" ("th" | "TH") Spnl ">"
  def _HtmlBlockCloseTh

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("th")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TH")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTh unless _tmp
    return _tmp
  end

  # HtmlBlockTh = HtmlBlockOpenTh (HtmlBlockTh | !HtmlBlockCloseTh .)* HtmlBlockCloseTh
  def _HtmlBlockTh

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTh)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTh)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTh)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTh)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTh unless _tmp
    return _tmp
  end

  # HtmlBlockOpenThead = "<" Spnl ("thead" | "THEAD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenThead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("thead")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("THEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenThead unless _tmp
    return _tmp
  end

  # HtmlBlockCloseThead = "<" Spnl "/" ("thead" | "THEAD") Spnl ">"
  def _HtmlBlockCloseThead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("thead")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("THEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseThead unless _tmp
    return _tmp
  end

  # HtmlBlockThead = HtmlBlockOpenThead (HtmlBlockThead | !HtmlBlockCloseThead .)* HtmlBlockCloseThead
  def _HtmlBlockThead

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenThead)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockThead)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseThead)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseThead)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockThead unless _tmp
    return _tmp
  end

  # HtmlBlockOpenTr = "<" Spnl ("tr" | "TR") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenTr

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tr")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenTr unless _tmp
    return _tmp
  end

  # HtmlBlockCloseTr = "<" Spnl "/" ("tr" | "TR") Spnl ">"
  def _HtmlBlockCloseTr

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("tr")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("TR")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseTr unless _tmp
    return _tmp
  end

  # HtmlBlockTr = HtmlBlockOpenTr (HtmlBlockTr | !HtmlBlockCloseTr .)* HtmlBlockCloseTr
  def _HtmlBlockTr

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenTr)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # choice
          _tmp = apply(:_HtmlBlockTr)
          break if _tmp
          self.pos = _save2

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = apply(:_HtmlBlockCloseTr)
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break if _tmp
          self.pos = _save2
          break
        end # end choice

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseTr)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockTr unless _tmp
    return _tmp
  end

  # HtmlBlockOpenScript = "<" Spnl ("script" | "SCRIPT") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenScript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("script")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("SCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenScript unless _tmp
    return _tmp
  end

  # HtmlBlockCloseScript = "<" Spnl "/" ("script" | "SCRIPT") Spnl ">"
  def _HtmlBlockCloseScript

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("script")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("SCRIPT")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseScript unless _tmp
    return _tmp
  end

  # HtmlBlockScript = HtmlBlockOpenScript (!HtmlBlockCloseScript .)* HtmlBlockCloseScript
  def _HtmlBlockScript

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenScript)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = apply(:_HtmlBlockCloseScript)
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseScript)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockScript unless _tmp
    return _tmp
  end

  # HtmlBlockOpenHead = "<" Spnl ("head" | "HEAD") Spnl HtmlAttribute* ">"
  def _HtmlBlockOpenHead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("head")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("HEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockOpenHead unless _tmp
    return _tmp
  end

  # HtmlBlockCloseHead = "<" Spnl "/" ("head" | "HEAD") Spnl ">"
  def _HtmlBlockCloseHead

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("head")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("HEAD")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockCloseHead unless _tmp
    return _tmp
  end

  # HtmlBlockHead = HtmlBlockOpenHead (!HtmlBlockCloseHead .)* HtmlBlockCloseHead
  def _HtmlBlockHead

    _save = self.pos
    while true # sequence
      _tmp = apply(:_HtmlBlockOpenHead)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = apply(:_HtmlBlockCloseHead)
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockCloseHead)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockHead unless _tmp
    return _tmp
  end

  # HtmlBlockInTags = (HtmlAnchor | HtmlBlockAddress | HtmlBlockBlockquote | HtmlBlockCenter | HtmlBlockDir | HtmlBlockDiv | HtmlBlockDl | HtmlBlockFieldset | HtmlBlockForm | HtmlBlockH1 | HtmlBlockH2 | HtmlBlockH3 | HtmlBlockH4 | HtmlBlockH5 | HtmlBlockH6 | HtmlBlockMenu | HtmlBlockNoframes | HtmlBlockNoscript | HtmlBlockOl | HtmlBlockP | HtmlBlockPre | HtmlBlockTable | HtmlBlockUl | HtmlBlockDd | HtmlBlockDt | HtmlBlockFrameset | HtmlBlockLi | HtmlBlockTbody | HtmlBlockTd | HtmlBlockTfoot | HtmlBlockTh | HtmlBlockThead | HtmlBlockTr | HtmlBlockScript | HtmlBlockHead)
  def _HtmlBlockInTags

    _save = self.pos
    while true # choice
      _tmp = apply(:_HtmlAnchor)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockAddress)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockBlockquote)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockCenter)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDir)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDiv)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockFieldset)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockForm)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH1)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH2)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH3)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH4)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH5)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockH6)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockMenu)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockNoframes)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockNoscript)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockOl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockP)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockPre)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTable)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockUl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDd)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockDt)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockFrameset)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockLi)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTbody)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTd)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTfoot)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTh)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockThead)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockTr)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockScript)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_HtmlBlockHead)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_HtmlBlockInTags unless _tmp
    return _tmp
  end

  # HtmlBlock = < (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then                 RDoc::Markup::Raw.new text               end }
  def _HtmlBlock

    _save = self.pos
    while true # sequence
      _text_start = self.pos

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_HtmlBlockInTags)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlComment)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlBlockSelfClosing)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlUnclosed)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if html? then
                RDoc::Markup::Raw.new text
              end ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlock unless _tmp
    return _tmp
  end

  # HtmlUnclosed = "<" Spnl HtmlUnclosedType Spnl HtmlAttribute* Spnl ">"
  def _HtmlUnclosed

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlUnclosedType)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlUnclosed unless _tmp
    return _tmp
  end

  # HtmlUnclosedType = ("HR" | "hr")
  def _HtmlUnclosedType

    _save = self.pos
    while true # choice
      _tmp = match_string("HR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("hr")
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_HtmlUnclosedType unless _tmp
    return _tmp
  end

  # HtmlBlockSelfClosing = "<" Spnl HtmlBlockType Spnl HtmlAttribute* "/" Spnl ">"
  def _HtmlBlockSelfClosing

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_HtmlBlockType)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlBlockSelfClosing unless _tmp
    return _tmp
  end

  # HtmlBlockType = ("ADDRESS" | "BLOCKQUOTE" | "CENTER" | "DD" | "DIR" | "DIV" | "DL" | "DT" | "FIELDSET" | "FORM" | "FRAMESET" | "H1" | "H2" | "H3" | "H4" | "H5" | "H6" | "HR" | "ISINDEX" | "LI" | "MENU" | "NOFRAMES" | "NOSCRIPT" | "OL" | "P" | "PRE" | "SCRIPT" | "TABLE" | "TBODY" | "TD" | "TFOOT" | "TH" | "THEAD" | "TR" | "UL" | "address" | "blockquote" | "center" | "dd" | "dir" | "div" | "dl" | "dt" | "fieldset" | "form" | "frameset" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "hr" | "isindex" | "li" | "menu" | "noframes" | "noscript" | "ol" | "p" | "pre" | "script" | "table" | "tbody" | "td" | "tfoot" | "th" | "thead" | "tr" | "ul")
  def _HtmlBlockType

    _save = self.pos
    while true # choice
      _tmp = match_string("ADDRESS")
      break if _tmp
      self.pos = _save
      _tmp = match_string("BLOCKQUOTE")
      break if _tmp
      self.pos = _save
      _tmp = match_string("CENTER")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DD")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DIR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DIV")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DL")
      break if _tmp
      self.pos = _save
      _tmp = match_string("DT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("FIELDSET")
      break if _tmp
      self.pos = _save
      _tmp = match_string("FORM")
      break if _tmp
      self.pos = _save
      _tmp = match_string("FRAMESET")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H1")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H2")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H3")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H4")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H5")
      break if _tmp
      self.pos = _save
      _tmp = match_string("H6")
      break if _tmp
      self.pos = _save
      _tmp = match_string("HR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("ISINDEX")
      break if _tmp
      self.pos = _save
      _tmp = match_string("LI")
      break if _tmp
      self.pos = _save
      _tmp = match_string("MENU")
      break if _tmp
      self.pos = _save
      _tmp = match_string("NOFRAMES")
      break if _tmp
      self.pos = _save
      _tmp = match_string("NOSCRIPT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("OL")
      break if _tmp
      self.pos = _save
      _tmp = match_string("P")
      break if _tmp
      self.pos = _save
      _tmp = match_string("PRE")
      break if _tmp
      self.pos = _save
      _tmp = match_string("SCRIPT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TABLE")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TBODY")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TD")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TFOOT")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TH")
      break if _tmp
      self.pos = _save
      _tmp = match_string("THEAD")
      break if _tmp
      self.pos = _save
      _tmp = match_string("TR")
      break if _tmp
      self.pos = _save
      _tmp = match_string("UL")
      break if _tmp
      self.pos = _save
      _tmp = match_string("address")
      break if _tmp
      self.pos = _save
      _tmp = match_string("blockquote")
      break if _tmp
      self.pos = _save
      _tmp = match_string("center")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dd")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dir")
      break if _tmp
      self.pos = _save
      _tmp = match_string("div")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dl")
      break if _tmp
      self.pos = _save
      _tmp = match_string("dt")
      break if _tmp
      self.pos = _save
      _tmp = match_string("fieldset")
      break if _tmp
      self.pos = _save
      _tmp = match_string("form")
      break if _tmp
      self.pos = _save
      _tmp = match_string("frameset")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h1")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h2")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h3")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h4")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h5")
      break if _tmp
      self.pos = _save
      _tmp = match_string("h6")
      break if _tmp
      self.pos = _save
      _tmp = match_string("hr")
      break if _tmp
      self.pos = _save
      _tmp = match_string("isindex")
      break if _tmp
      self.pos = _save
      _tmp = match_string("li")
      break if _tmp
      self.pos = _save
      _tmp = match_string("menu")
      break if _tmp
      self.pos = _save
      _tmp = match_string("noframes")
      break if _tmp
      self.pos = _save
      _tmp = match_string("noscript")
      break if _tmp
      self.pos = _save
      _tmp = match_string("ol")
      break if _tmp
      self.pos = _save
      _tmp = match_string("p")
      break if _tmp
      self.pos = _save
      _tmp = match_string("pre")
      break if _tmp
      self.pos = _save
      _tmp = match_string("script")
      break if _tmp
      self.pos = _save
      _tmp = match_string("table")
      break if _tmp
      self.pos = _save
      _tmp = match_string("tbody")
      break if _tmp
      self.pos = _save
      _tmp = match_string("td")
      break if _tmp
      self.pos = _save
      _tmp = match_string("tfoot")
      break if _tmp
      self.pos = _save
      _tmp = match_string("th")
      break if _tmp
      self.pos = _save
      _tmp = match_string("thead")
      break if _tmp
      self.pos = _save
      _tmp = match_string("tr")
      break if _tmp
      self.pos = _save
      _tmp = match_string("ul")
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_HtmlBlockType unless _tmp
    return _tmp
  end

  # StyleOpen = "<" Spnl ("style" | "STYLE") Spnl HtmlAttribute* ">"
  def _StyleOpen

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("style")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("STYLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StyleOpen unless _tmp
    return _tmp
  end

  # StyleClose = "<" Spnl "/" ("style" | "STYLE") Spnl ">"
  def _StyleClose

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("/")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = match_string("style")
        break if _tmp
        self.pos = _save1
        _tmp = match_string("STYLE")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StyleClose unless _tmp
    return _tmp
  end

  # InStyleTags = StyleOpen (!StyleClose .)* StyleClose
  def _InStyleTags

    _save = self.pos
    while true # sequence
      _tmp = apply(:_StyleOpen)
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = apply(:_StyleClose)
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_StyleClose)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_InStyleTags unless _tmp
    return _tmp
  end

  # StyleBlock = < InStyleTags > @BlankLine* { if css? then                     RDoc::Markup::Raw.new text                   end }
  def _StyleBlock

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = apply(:_InStyleTags)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if css? then
                    RDoc::Markup::Raw.new text
                  end ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StyleBlock unless _tmp
    return _tmp
  end

  # Inlines = (!@Endline Inline:i { i } | @Endline:c !(&{ github? } Ticks3 /[^`\n]*$/) &Inline { c })+:chunks @Endline? { chunks }
  def _Inlines

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []

      _save2 = self.pos
      while true # choice

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = _Endline()
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_Inline)
          i = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  i ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save2

        _save5 = self.pos
        while true # sequence
          _tmp = _Endline()
          c = @result
          unless _tmp
            self.pos = _save5
            break
          end
          _save6 = self.pos

          _save7 = self.pos
          while true # sequence
            _save8 = self.pos
            _tmp = begin;  github? ; end
            self.pos = _save8
            unless _tmp
              self.pos = _save7
              break
            end
            _tmp = apply(:_Ticks3)
            unless _tmp
              self.pos = _save7
              break
            end
            _tmp = scan(/\G(?-mix:[^`\n]*$)/)
            unless _tmp
              self.pos = _save7
            end
            break
          end # end sequence

          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save5
            break
          end
          _save9 = self.pos
          _tmp = apply(:_Inline)
          self.pos = _save9
          unless _tmp
            self.pos = _save5
            break
          end
          @result = begin;  c ; end
          _tmp = true
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save2
        break
      end # end choice

      if _tmp
        _ary << @result
        while true

          _save10 = self.pos
          while true # choice

            _save11 = self.pos
            while true # sequence
              _save12 = self.pos
              _tmp = _Endline()
              _tmp = _tmp ? nil : true
              self.pos = _save12
              unless _tmp
                self.pos = _save11
                break
              end
              _tmp = apply(:_Inline)
              i = @result
              unless _tmp
                self.pos = _save11
                break
              end
              @result = begin;  i ; end
              _tmp = true
              unless _tmp
                self.pos = _save11
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save10

            _save13 = self.pos
            while true # sequence
              _tmp = _Endline()
              c = @result
              unless _tmp
                self.pos = _save13
                break
              end
              _save14 = self.pos

              _save15 = self.pos
              while true # sequence
                _save16 = self.pos
                _tmp = begin;  github? ; end
                self.pos = _save16
                unless _tmp
                  self.pos = _save15
                  break
                end
                _tmp = apply(:_Ticks3)
                unless _tmp
                  self.pos = _save15
                  break
                end
                _tmp = scan(/\G(?-mix:[^`\n]*$)/)
                unless _tmp
                  self.pos = _save15
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save14
              unless _tmp
                self.pos = _save13
                break
              end
              _save17 = self.pos
              _tmp = apply(:_Inline)
              self.pos = _save17
              unless _tmp
                self.pos = _save13
                break
              end
              @result = begin;  c ; end
              _tmp = true
              unless _tmp
                self.pos = _save13
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save10
            break
          end # end choice

          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      chunks = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save18 = self.pos
      _tmp = _Endline()
      unless _tmp
        _tmp = true
        self.pos = _save18
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  chunks ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Inlines unless _tmp
    return _tmp
  end

  # Inline = (Str | @Endline | UlOrStarLine | @Space | Strong | Emph | Strike | Image | Link | NoteReference | InlineNote | Code | RawHtml | Entity | EscapedChar | Symbol)
  def _Inline

    _save = self.pos
    while true # choice
      _tmp = apply(:_Str)
      break if _tmp
      self.pos = _save
      _tmp = _Endline()
      break if _tmp
      self.pos = _save
      _tmp = apply(:_UlOrStarLine)
      break if _tmp
      self.pos = _save
      _tmp = _Space()
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Strong)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Emph)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Strike)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Image)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Link)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_NoteReference)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_InlineNote)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Code)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_RawHtml)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Entity)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_EscapedChar)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_Symbol)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Inline unless _tmp
    return _tmp
  end

  # Space = @Spacechar+ { " " }
  def _Space

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _Spacechar()
      if _tmp
        while true
          _tmp = _Spacechar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  " " ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Space unless _tmp
    return _tmp
  end

  # Str = @StartList:a < @NormalChar+ > { a = text } (StrChunk:c { a << c })* { a }
  def _Str

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos
      _tmp = _NormalChar()
      if _tmp
        while true
          _tmp = _NormalChar()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a = text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _tmp = apply(:_StrChunk)
          c = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a << c ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Str unless _tmp
    return _tmp
  end

  # StrChunk = < (@NormalChar | /_+/ &Alphanumeric)+ > { text }
  def _StrChunk

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # choice
        _tmp = _NormalChar()
        break if _tmp
        self.pos = _save2

        _save3 = self.pos
        while true # sequence
          _tmp = scan(/\G(?-mix:_+)/)
          unless _tmp
            self.pos = _save3
            break
          end
          _save4 = self.pos
          _tmp = apply(:_Alphanumeric)
          self.pos = _save4
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save2
        break
      end # end choice

      if _tmp
        while true

          _save5 = self.pos
          while true # choice
            _tmp = _NormalChar()
            break if _tmp
            self.pos = _save5

            _save6 = self.pos
            while true # sequence
              _tmp = scan(/\G(?-mix:_+)/)
              unless _tmp
                self.pos = _save6
                break
              end
              _save7 = self.pos
              _tmp = apply(:_Alphanumeric)
              self.pos = _save7
              unless _tmp
                self.pos = _save6
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save5
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StrChunk unless _tmp
    return _tmp
  end

  # EscapedChar = "\\" !@Newline < /[:\\`|*_{}\[\]()#+.!><-]/ > { text }
  def _EscapedChar

    _save = self.pos
    while true # sequence
      _tmp = match_string("\\")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Newline()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[:\\`|*_{}\[\]()#+.!><-])/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_EscapedChar unless _tmp
    return _tmp
  end

  # Entity = (HexEntity | DecEntity | CharEntity):a { a }
  def _Entity

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_HexEntity)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_DecEntity)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_CharEntity)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Entity unless _tmp
    return _tmp
  end

  # Endline = (@LineBreak | @TerminalEndline | @NormalEndline)
  def _Endline

    _save = self.pos
    while true # choice
      _tmp = _LineBreak()
      break if _tmp
      self.pos = _save
      _tmp = _TerminalEndline()
      break if _tmp
      self.pos = _save
      _tmp = _NormalEndline()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Endline unless _tmp
    return _tmp
  end

  # NormalEndline = @Sp @Newline !@BlankLine !">" !AtxStart !(Line /={1,}|-{1,}/ @Newline) { "\n" }
  def _NormalEndline

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _BlankLine()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = match_string(">")
      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos
      _tmp = apply(:_AtxStart)
      _tmp = _tmp ? nil : true
      self.pos = _save3
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos

      _save5 = self.pos
      while true # sequence
        _tmp = apply(:_Line)
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = scan(/\G(?-mix:={1,}|-{1,})/)
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = _Newline()
        unless _tmp
          self.pos = _save5
        end
        break
      end # end sequence

      _tmp = _tmp ? nil : true
      self.pos = _save4
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "\n" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NormalEndline unless _tmp
    return _tmp
  end

  # TerminalEndline = @Sp @Newline @Eof
  def _TerminalEndline

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Eof()
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TerminalEndline unless _tmp
    return _tmp
  end

  # LineBreak = "  " @NormalEndline { RDoc::Markup::HardBreak.new }
  def _LineBreak

    _save = self.pos
    while true # sequence
      _tmp = match_string("  ")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _NormalEndline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::HardBreak.new ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_LineBreak unless _tmp
    return _tmp
  end

  # Symbol = < @SpecialChar > { text }
  def _Symbol

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _tmp = _SpecialChar()
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Symbol unless _tmp
    return _tmp
  end

  # UlOrStarLine = (UlLine | StarLine):a { a }
  def _UlOrStarLine

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_UlLine)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_StarLine)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_UlOrStarLine unless _tmp
    return _tmp
  end

  # StarLine = (< /\*{4,}/ > { text } | < @Spacechar /\*+/ &@Spacechar > { text })
  def _StarLine

    _save = self.pos
    while true # choice

      _save1 = self.pos
      while true # sequence
        _text_start = self.pos
        _tmp = scan(/\G(?-mix:\*{4,})/)
        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save1
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save

      _save2 = self.pos
      while true # sequence
        _text_start = self.pos

        _save3 = self.pos
        while true # sequence
          _tmp = _Spacechar()
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = scan(/\G(?-mix:\*+)/)
          unless _tmp
            self.pos = _save3
            break
          end
          _save4 = self.pos
          _tmp = _Spacechar()
          self.pos = _save4
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_StarLine unless _tmp
    return _tmp
  end

  # UlLine = (< /_{4,}/ > { text } | < @Spacechar /_+/ &@Spacechar > { text })
  def _UlLine

    _save = self.pos
    while true # choice

      _save1 = self.pos
      while true # sequence
        _text_start = self.pos
        _tmp = scan(/\G(?-mix:_{4,})/)
        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save1
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save

      _save2 = self.pos
      while true # sequence
        _text_start = self.pos

        _save3 = self.pos
        while true # sequence
          _tmp = _Spacechar()
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = scan(/\G(?-mix:_+)/)
          unless _tmp
            self.pos = _save3
            break
          end
          _save4 = self.pos
          _tmp = _Spacechar()
          self.pos = _save4
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          text = get_text(_text_start)
        end
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  text ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_UlLine unless _tmp
    return _tmp
  end

  # Emph = (EmphStar | EmphUl)
  def _Emph

    _save = self.pos
    while true # choice
      _tmp = apply(:_EmphStar)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_EmphUl)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Emph unless _tmp
    return _tmp
  end

  # Whitespace = (@Spacechar | @Newline)
  def _Whitespace

    _save = self.pos
    while true # choice
      _tmp = _Spacechar()
      break if _tmp
      self.pos = _save
      _tmp = _Newline()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Whitespace unless _tmp
    return _tmp
  end

  # EmphStar = "*" !@Whitespace @StartList:a (!"*" Inline:b { a << b } | StrongStar:b { a << b })+ "*" { emphasis a.join }
  def _EmphStar

    _save = self.pos
    while true # sequence
      _tmp = match_string("*")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # choice

        _save4 = self.pos
        while true # sequence
          _save5 = self.pos
          _tmp = match_string("*")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save4
            break
          end
          _tmp = apply(:_Inline)
          b = @result
          unless _tmp
            self.pos = _save4
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save4
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3

        _save6 = self.pos
        while true # sequence
          _tmp = apply(:_StrongStar)
          b = @result
          unless _tmp
            self.pos = _save6
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save6
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3
        break
      end # end choice

      if _tmp
        while true

          _save7 = self.pos
          while true # choice

            _save8 = self.pos
            while true # sequence
              _save9 = self.pos
              _tmp = match_string("*")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save8
                break
              end
              _tmp = apply(:_Inline)
              b = @result
              unless _tmp
                self.pos = _save8
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save8
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7

            _save10 = self.pos
            while true # sequence
              _tmp = apply(:_StrongStar)
              b = @result
              unless _tmp
                self.pos = _save10
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("*")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  emphasis a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_EmphStar unless _tmp
    return _tmp
  end

  # EmphUl = "_" !@Whitespace @StartList:a (!"_" Inline:b { a << b } | StrongUl:b { a << b })+ "_" { emphasis a.join }
  def _EmphUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("_")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # choice

        _save4 = self.pos
        while true # sequence
          _save5 = self.pos
          _tmp = match_string("_")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save4
            break
          end
          _tmp = apply(:_Inline)
          b = @result
          unless _tmp
            self.pos = _save4
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save4
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3

        _save6 = self.pos
        while true # sequence
          _tmp = apply(:_StrongUl)
          b = @result
          unless _tmp
            self.pos = _save6
            break
          end
          @result = begin;  a << b ; end
          _tmp = true
          unless _tmp
            self.pos = _save6
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save3
        break
      end # end choice

      if _tmp
        while true

          _save7 = self.pos
          while true # choice

            _save8 = self.pos
            while true # sequence
              _save9 = self.pos
              _tmp = match_string("_")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save8
                break
              end
              _tmp = apply(:_Inline)
              b = @result
              unless _tmp
                self.pos = _save8
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save8
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7

            _save10 = self.pos
            while true # sequence
              _tmp = apply(:_StrongUl)
              b = @result
              unless _tmp
                self.pos = _save10
                break
              end
              @result = begin;  a << b ; end
              _tmp = true
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save7
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("_")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  emphasis a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_EmphUl unless _tmp
    return _tmp
  end

  # Strong = (StrongStar | StrongUl)
  def _Strong

    _save = self.pos
    while true # choice
      _tmp = apply(:_StrongStar)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_StrongUl)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Strong unless _tmp
    return _tmp
  end

  # StrongStar = "**" !@Whitespace @StartList:a (!"**" Inline:b { a << b })+ "**" { strong a.join }
  def _StrongStar

    _save = self.pos
    while true # sequence
      _tmp = match_string("**")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = match_string("**")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("**")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("**")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  strong a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StrongStar unless _tmp
    return _tmp
  end

  # StrongUl = "__" !@Whitespace @StartList:a (!"__" Inline:b { a << b })+ "__" { strong a.join }
  def _StrongUl

    _save = self.pos
    while true # sequence
      _tmp = match_string("__")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = match_string("__")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("__")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("__")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  strong a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StrongUl unless _tmp
    return _tmp
  end

  # Strike = &{ strike? } "~~" !@Whitespace @StartList:a (!"~~" Inline:b { a << b })+ "~~" { strike a.join }
  def _Strike

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  strike? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("~~")
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _Whitespace()
      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save3 = self.pos

      _save4 = self.pos
      while true # sequence
        _save5 = self.pos
        _tmp = match_string("~~")
        _tmp = _tmp ? nil : true
        self.pos = _save5
        unless _tmp
          self.pos = _save4
          break
        end
        _tmp = apply(:_Inline)
        b = @result
        unless _tmp
          self.pos = _save4
          break
        end
        @result = begin;  a << b ; end
        _tmp = true
        unless _tmp
          self.pos = _save4
        end
        break
      end # end sequence

      if _tmp
        while true

          _save6 = self.pos
          while true # sequence
            _save7 = self.pos
            _tmp = match_string("~~")
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save6
              break
            end
            _tmp = apply(:_Inline)
            b = @result
            unless _tmp
              self.pos = _save6
              break
            end
            @result = begin;  a << b ; end
            _tmp = true
            unless _tmp
              self.pos = _save6
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save3
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("~~")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  strike a.join ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Strike unless _tmp
    return _tmp
  end

  # Image = "!" (ExplicitLink | ReferenceLink):a { "rdoc-image:#{a[/\[(.*)\]/, 1]}" }
  def _Image

    _save = self.pos
    while true # sequence
      _tmp = match_string("!")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_ExplicitLink)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_ReferenceLink)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "rdoc-image:#{a[/\[(.*)\]/, 1]}" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Image unless _tmp
    return _tmp
  end

  # Link = (ExplicitLink | ReferenceLink | AutoLink)
  def _Link

    _save = self.pos
    while true # choice
      _tmp = apply(:_ExplicitLink)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_ReferenceLink)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_AutoLink)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Link unless _tmp
    return _tmp
  end

  # ReferenceLink = (ReferenceLinkDouble | ReferenceLinkSingle)
  def _ReferenceLink

    _save = self.pos
    while true # choice
      _tmp = apply(:_ReferenceLinkDouble)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_ReferenceLinkSingle)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_ReferenceLink unless _tmp
    return _tmp
  end

  # ReferenceLinkDouble = Label:content < Spnl > !"[]" Label:label { link_to content, label, text }
  def _ReferenceLinkDouble

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Label)
      content = @result
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = apply(:_Spnl)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("[]")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Label)
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  link_to content, label, text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ReferenceLinkDouble unless _tmp
    return _tmp
  end

  # ReferenceLinkSingle = Label:content < (Spnl "[]")? > { link_to content, content, text }
  def _ReferenceLinkSingle

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Label)
      content = @result
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = apply(:_Spnl)
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = match_string("[]")
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  link_to content, content, text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ReferenceLinkSingle unless _tmp
    return _tmp
  end

  # ExplicitLink = Label:l "(" @Sp Source:s Spnl Title @Sp ")" { "{#{l}}[#{s}]" }
  def _ExplicitLink

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Label)
      l = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("(")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Source)
      s = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Title)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(")")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "{#{l}}[#{s}]" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ExplicitLink unless _tmp
    return _tmp
  end

  # Source = ("<" < SourceContents > ">" | < SourceContents >) { text }
  def _Source

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = match_string("<")
          unless _tmp
            self.pos = _save2
            break
          end
          _text_start = self.pos
          _tmp = apply(:_SourceContents)
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = match_string(">")
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        _text_start = self.pos
        _tmp = apply(:_SourceContents)
        if _tmp
          text = get_text(_text_start)
        end
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Source unless _tmp
    return _tmp
  end

  # SourceContents = ((!"(" !")" !">" Nonspacechar)+ | "(" SourceContents ")")*
  def _SourceContents
    while true

      _save1 = self.pos
      while true # choice
        _save2 = self.pos

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = match_string("(")
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _save5 = self.pos
          _tmp = match_string(")")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save3
            break
          end
          _save6 = self.pos
          _tmp = match_string(">")
          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_Nonspacechar)
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          while true

            _save7 = self.pos
            while true # sequence
              _save8 = self.pos
              _tmp = match_string("(")
              _tmp = _tmp ? nil : true
              self.pos = _save8
              unless _tmp
                self.pos = _save7
                break
              end
              _save9 = self.pos
              _tmp = match_string(")")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save7
                break
              end
              _save10 = self.pos
              _tmp = match_string(">")
              _tmp = _tmp ? nil : true
              self.pos = _save10
              unless _tmp
                self.pos = _save7
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save7
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save2
        end
        break if _tmp
        self.pos = _save1

        _save11 = self.pos
        while true # sequence
          _tmp = match_string("(")
          unless _tmp
            self.pos = _save11
            break
          end
          _tmp = apply(:_SourceContents)
          unless _tmp
            self.pos = _save11
            break
          end
          _tmp = match_string(")")
          unless _tmp
            self.pos = _save11
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_SourceContents unless _tmp
    return _tmp
  end

  # Title = (TitleSingle | TitleDouble | ""):a { a }
  def _Title

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_TitleSingle)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_TitleDouble)
        break if _tmp
        self.pos = _save1
        _tmp = match_string("")
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Title unless _tmp
    return _tmp
  end

  # TitleSingle = "'" (!("'" @Sp (")" | @Newline)) .)* "'"
  def _TitleSingle

    _save = self.pos
    while true # sequence
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # sequence
            _tmp = match_string("'")
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = _Sp()
            unless _tmp
              self.pos = _save4
              break
            end

            _save5 = self.pos
            while true # choice
              _tmp = match_string(")")
              break if _tmp
              self.pos = _save5
              _tmp = _Newline()
              break if _tmp
              self.pos = _save5
              break
            end # end choice

            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TitleSingle unless _tmp
    return _tmp
  end

  # TitleDouble = "\"" (!("\"" @Sp (")" | @Newline)) .)* "\""
  def _TitleDouble

    _save = self.pos
    while true # sequence
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # sequence
            _tmp = match_string("\"")
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = _Sp()
            unless _tmp
              self.pos = _save4
              break
            end

            _save5 = self.pos
            while true # choice
              _tmp = match_string(")")
              break if _tmp
              self.pos = _save5
              _tmp = _Newline()
              break if _tmp
              self.pos = _save5
              break
            end # end choice

            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TitleDouble unless _tmp
    return _tmp
  end

  # AutoLink = (AutoLinkUrl | AutoLinkEmail)
  def _AutoLink

    _save = self.pos
    while true # choice
      _tmp = apply(:_AutoLinkUrl)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_AutoLinkEmail)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_AutoLink unless _tmp
    return _tmp
  end

  # AutoLinkUrl = "<" < /[A-Za-z]+/ "://" (!@Newline !">" .)+ > ">" { text }
  def _AutoLinkUrl

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos

      _save1 = self.pos
      while true # sequence
        _tmp = scan(/\G(?-mix:[A-Za-z]+)/)
        unless _tmp
          self.pos = _save1
          break
        end
        _tmp = match_string("://")
        unless _tmp
          self.pos = _save1
          break
        end
        _save2 = self.pos

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = _Newline()
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _save5 = self.pos
          _tmp = match_string(">")
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          while true

            _save6 = self.pos
            while true # sequence
              _save7 = self.pos
              _tmp = _Newline()
              _tmp = _tmp ? nil : true
              self.pos = _save7
              unless _tmp
                self.pos = _save6
                break
              end
              _save8 = self.pos
              _tmp = match_string(">")
              _tmp = _tmp ? nil : true
              self.pos = _save8
              unless _tmp
                self.pos = _save6
                break
              end
              _tmp = get_byte
              unless _tmp
                self.pos = _save6
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save2
        end
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AutoLinkUrl unless _tmp
    return _tmp
  end

  # AutoLinkEmail = "<" "mailto:"? < /[\w+.\/!%~$-]+/i "@" (!@Newline !">" .)+ > ">" { "mailto:#{text}" }
  def _AutoLinkEmail

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("mailto:")
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = scan(/\G(?i-mx:[\w+.\/!%~$-]+)/)
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = match_string("@")
        unless _tmp
          self.pos = _save2
          break
        end
        _save3 = self.pos

        _save4 = self.pos
        while true # sequence
          _save5 = self.pos
          _tmp = _Newline()
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save4
            break
          end
          _save6 = self.pos
          _tmp = match_string(">")
          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save4
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save4
          end
          break
        end # end sequence

        if _tmp
          while true

            _save7 = self.pos
            while true # sequence
              _save8 = self.pos
              _tmp = _Newline()
              _tmp = _tmp ? nil : true
              self.pos = _save8
              unless _tmp
                self.pos = _save7
                break
              end
              _save9 = self.pos
              _tmp = match_string(">")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save7
                break
              end
              _tmp = get_byte
              unless _tmp
                self.pos = _save7
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save3
        end
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "mailto:#{text}" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_AutoLinkEmail unless _tmp
    return _tmp
  end

  # Reference = @NonindentSpace !"[]" Label:label ":" Spnl RefSrc:link RefTitle @BlankLine+ { # TODO use title               reference label, link               nil             }
  def _Reference

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("[]")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Label)
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(":")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RefSrc)
      link = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RefTitle)
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  # TODO use title
              reference label, link
              nil
            ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Reference unless _tmp
    return _tmp
  end

  # Label = "[" (!"^" &{ notes? } | &. &{ !notes? }) @StartList:a (!"]" Inline:l { a << l })* "]" { a.join.gsub(/\s+/, ' ') }
  def _Label

    _save = self.pos
    while true # sequence
      _tmp = match_string("[")
      unless _tmp
        self.pos = _save
        break
      end

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = match_string("^")
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _save4 = self.pos
          _tmp = begin;  notes? ; end
          self.pos = _save4
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save5 = self.pos
        while true # sequence
          _save6 = self.pos
          _tmp = get_byte
          self.pos = _save6
          unless _tmp
            self.pos = _save5
            break
          end
          _save7 = self.pos
          _tmp = begin;  !notes? ; end
          self.pos = _save7
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save9 = self.pos
        while true # sequence
          _save10 = self.pos
          _tmp = match_string("]")
          _tmp = _tmp ? nil : true
          self.pos = _save10
          unless _tmp
            self.pos = _save9
            break
          end
          _tmp = apply(:_Inline)
          l = @result
          unless _tmp
            self.pos = _save9
            break
          end
          @result = begin;  a << l ; end
          _tmp = true
          unless _tmp
            self.pos = _save9
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("]")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a.join.gsub(/\s+/, ' ') ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Label unless _tmp
    return _tmp
  end

  # RefSrc = < Nonspacechar+ > { text }
  def _RefSrc

    _save = self.pos
    while true # sequence
      _text_start = self.pos
      _save1 = self.pos
      _tmp = apply(:_Nonspacechar)
      if _tmp
        while true
          _tmp = apply(:_Nonspacechar)
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefSrc unless _tmp
    return _tmp
  end

  # RefTitle = (RefTitleSingle | RefTitleDouble | RefTitleParens | EmptyTitle)
  def _RefTitle

    _save = self.pos
    while true # choice
      _tmp = apply(:_RefTitleSingle)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_RefTitleDouble)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_RefTitleParens)
      break if _tmp
      self.pos = _save
      _tmp = apply(:_EmptyTitle)
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_RefTitle unless _tmp
    return _tmp
  end

  # EmptyTitle = ""
  def _EmptyTitle
    _tmp = match_string("")
    set_failed_rule :_EmptyTitle unless _tmp
    return _tmp
  end

  # RefTitleSingle = Spnl "'" < (!("'" @Sp @Newline | @Newline) .)* > "'" { text }
  def _RefTitleSingle

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # choice

            _save5 = self.pos
            while true # sequence
              _tmp = match_string("'")
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Sp()
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Newline()
              unless _tmp
                self.pos = _save5
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            _tmp = _Newline()
            break if _tmp
            self.pos = _save4
            break
          end # end choice

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("'")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefTitleSingle unless _tmp
    return _tmp
  end

  # RefTitleDouble = Spnl "\"" < (!("\"" @Sp @Newline | @Newline) .)* > "\"" { text }
  def _RefTitleDouble

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # choice

            _save5 = self.pos
            while true # sequence
              _tmp = match_string("\"")
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Sp()
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Newline()
              unless _tmp
                self.pos = _save5
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            _tmp = _Newline()
            break if _tmp
            self.pos = _save4
            break
          end # end choice

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("\"")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefTitleDouble unless _tmp
    return _tmp
  end

  # RefTitleParens = Spnl "(" < (!(")" @Sp @Newline | @Newline) .)* > ")" { text }
  def _RefTitleParens

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("(")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos

          _save4 = self.pos
          while true # choice

            _save5 = self.pos
            while true # sequence
              _tmp = match_string(")")
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Sp()
              unless _tmp
                self.pos = _save5
                break
              end
              _tmp = _Newline()
              unless _tmp
                self.pos = _save5
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            _tmp = _Newline()
            break if _tmp
            self.pos = _save4
            break
          end # end choice

          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(")")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RefTitleParens unless _tmp
    return _tmp
  end

  # References = (Reference | SkipBlock)*
  def _References
    while true

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Reference)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_SkipBlock)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_References unless _tmp
    return _tmp
  end

  # Ticks1 = "`" !"`"
  def _Ticks1

    _save = self.pos
    while true # sequence
      _tmp = match_string("`")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks1 unless _tmp
    return _tmp
  end

  # Ticks2 = "``" !"`"
  def _Ticks2

    _save = self.pos
    while true # sequence
      _tmp = match_string("``")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks2 unless _tmp
    return _tmp
  end

  # Ticks3 = "```" !"`"
  def _Ticks3

    _save = self.pos
    while true # sequence
      _tmp = match_string("```")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks3 unless _tmp
    return _tmp
  end

  # Ticks4 = "````" !"`"
  def _Ticks4

    _save = self.pos
    while true # sequence
      _tmp = match_string("````")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks4 unless _tmp
    return _tmp
  end

  # Ticks5 = "`````" !"`"
  def _Ticks5

    _save = self.pos
    while true # sequence
      _tmp = match_string("`````")
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("`")
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Ticks5 unless _tmp
    return _tmp
  end

  # Code = (Ticks1 @Sp < ((!"`" Nonspacechar)+ | !Ticks1 /`+/ | !(@Sp Ticks1) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks1 | Ticks2 @Sp < ((!"`" Nonspacechar)+ | !Ticks2 /`+/ | !(@Sp Ticks2) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks2 | Ticks3 @Sp < ((!"`" Nonspacechar)+ | !Ticks3 /`+/ | !(@Sp Ticks3) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks3 | Ticks4 @Sp < ((!"`" Nonspacechar)+ | !Ticks4 /`+/ | !(@Sp Ticks4) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks4 | Ticks5 @Sp < ((!"`" Nonspacechar)+ | !Ticks5 /`+/ | !(@Sp Ticks5) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks5) { "<code>#{text}</code>" }
  def _Code

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks1)
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _text_start = self.pos
          _save3 = self.pos

          _save4 = self.pos
          while true # choice
            _save5 = self.pos

            _save6 = self.pos
            while true # sequence
              _save7 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save7
              unless _tmp
                self.pos = _save6
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save6
              end
              break
            end # end sequence

            if _tmp
              while true

                _save8 = self.pos
                while true # sequence
                  _save9 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save9
                  unless _tmp
                    self.pos = _save8
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save8
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save5
            end
            break if _tmp
            self.pos = _save4

            _save10 = self.pos
            while true # sequence
              _save11 = self.pos
              _tmp = apply(:_Ticks1)
              _tmp = _tmp ? nil : true
              self.pos = _save11
              unless _tmp
                self.pos = _save10
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save10
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4

            _save12 = self.pos
            while true # sequence
              _save13 = self.pos

              _save14 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save14
                  break
                end
                _tmp = apply(:_Ticks1)
                unless _tmp
                  self.pos = _save14
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save13
              unless _tmp
                self.pos = _save12
                break
              end

              _save15 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save15

                _save16 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save16
                    break
                  end
                  _save17 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save17
                  unless _tmp
                    self.pos = _save16
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save15
                break
              end # end choice

              unless _tmp
                self.pos = _save12
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save4
            break
          end # end choice

          if _tmp
            while true

              _save18 = self.pos
              while true # choice
                _save19 = self.pos

                _save20 = self.pos
                while true # sequence
                  _save21 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save21
                  unless _tmp
                    self.pos = _save20
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save20
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save22 = self.pos
                    while true # sequence
                      _save23 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save23
                      unless _tmp
                        self.pos = _save22
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save22
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save19
                end
                break if _tmp
                self.pos = _save18

                _save24 = self.pos
                while true # sequence
                  _save25 = self.pos
                  _tmp = apply(:_Ticks1)
                  _tmp = _tmp ? nil : true
                  self.pos = _save25
                  unless _tmp
                    self.pos = _save24
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save24
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save18

                _save26 = self.pos
                while true # sequence
                  _save27 = self.pos

                  _save28 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save28
                      break
                    end
                    _tmp = apply(:_Ticks1)
                    unless _tmp
                      self.pos = _save28
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save27
                  unless _tmp
                    self.pos = _save26
                    break
                  end

                  _save29 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save29

                    _save30 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save30
                        break
                      end
                      _save31 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save31
                      unless _tmp
                        self.pos = _save30
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save29
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save26
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save18
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save3
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = apply(:_Ticks1)
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save32 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks2)
          unless _tmp
            self.pos = _save32
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save32
            break
          end
          _text_start = self.pos
          _save33 = self.pos

          _save34 = self.pos
          while true # choice
            _save35 = self.pos

            _save36 = self.pos
            while true # sequence
              _save37 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save37
              unless _tmp
                self.pos = _save36
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save36
              end
              break
            end # end sequence

            if _tmp
              while true

                _save38 = self.pos
                while true # sequence
                  _save39 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save39
                  unless _tmp
                    self.pos = _save38
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save38
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save35
            end
            break if _tmp
            self.pos = _save34

            _save40 = self.pos
            while true # sequence
              _save41 = self.pos
              _tmp = apply(:_Ticks2)
              _tmp = _tmp ? nil : true
              self.pos = _save41
              unless _tmp
                self.pos = _save40
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save40
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save34

            _save42 = self.pos
            while true # sequence
              _save43 = self.pos

              _save44 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save44
                  break
                end
                _tmp = apply(:_Ticks2)
                unless _tmp
                  self.pos = _save44
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save43
              unless _tmp
                self.pos = _save42
                break
              end

              _save45 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save45

                _save46 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save46
                    break
                  end
                  _save47 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save47
                  unless _tmp
                    self.pos = _save46
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save45
                break
              end # end choice

              unless _tmp
                self.pos = _save42
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save34
            break
          end # end choice

          if _tmp
            while true

              _save48 = self.pos
              while true # choice
                _save49 = self.pos

                _save50 = self.pos
                while true # sequence
                  _save51 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save51
                  unless _tmp
                    self.pos = _save50
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save50
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save52 = self.pos
                    while true # sequence
                      _save53 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save53
                      unless _tmp
                        self.pos = _save52
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save52
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save49
                end
                break if _tmp
                self.pos = _save48

                _save54 = self.pos
                while true # sequence
                  _save55 = self.pos
                  _tmp = apply(:_Ticks2)
                  _tmp = _tmp ? nil : true
                  self.pos = _save55
                  unless _tmp
                    self.pos = _save54
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save54
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save48

                _save56 = self.pos
                while true # sequence
                  _save57 = self.pos

                  _save58 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save58
                      break
                    end
                    _tmp = apply(:_Ticks2)
                    unless _tmp
                      self.pos = _save58
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save57
                  unless _tmp
                    self.pos = _save56
                    break
                  end

                  _save59 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save59

                    _save60 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save60
                        break
                      end
                      _save61 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save61
                      unless _tmp
                        self.pos = _save60
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save59
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save56
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save48
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save33
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save32
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save32
            break
          end
          _tmp = apply(:_Ticks2)
          unless _tmp
            self.pos = _save32
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save62 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks3)
          unless _tmp
            self.pos = _save62
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save62
            break
          end
          _text_start = self.pos
          _save63 = self.pos

          _save64 = self.pos
          while true # choice
            _save65 = self.pos

            _save66 = self.pos
            while true # sequence
              _save67 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save67
              unless _tmp
                self.pos = _save66
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save66
              end
              break
            end # end sequence

            if _tmp
              while true

                _save68 = self.pos
                while true # sequence
                  _save69 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save69
                  unless _tmp
                    self.pos = _save68
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save68
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save65
            end
            break if _tmp
            self.pos = _save64

            _save70 = self.pos
            while true # sequence
              _save71 = self.pos
              _tmp = apply(:_Ticks3)
              _tmp = _tmp ? nil : true
              self.pos = _save71
              unless _tmp
                self.pos = _save70
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save70
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save64

            _save72 = self.pos
            while true # sequence
              _save73 = self.pos

              _save74 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save74
                  break
                end
                _tmp = apply(:_Ticks3)
                unless _tmp
                  self.pos = _save74
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save73
              unless _tmp
                self.pos = _save72
                break
              end

              _save75 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save75

                _save76 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save76
                    break
                  end
                  _save77 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save77
                  unless _tmp
                    self.pos = _save76
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save75
                break
              end # end choice

              unless _tmp
                self.pos = _save72
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save64
            break
          end # end choice

          if _tmp
            while true

              _save78 = self.pos
              while true # choice
                _save79 = self.pos

                _save80 = self.pos
                while true # sequence
                  _save81 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save81
                  unless _tmp
                    self.pos = _save80
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save80
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save82 = self.pos
                    while true # sequence
                      _save83 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save83
                      unless _tmp
                        self.pos = _save82
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save82
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save79
                end
                break if _tmp
                self.pos = _save78

                _save84 = self.pos
                while true # sequence
                  _save85 = self.pos
                  _tmp = apply(:_Ticks3)
                  _tmp = _tmp ? nil : true
                  self.pos = _save85
                  unless _tmp
                    self.pos = _save84
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save84
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save78

                _save86 = self.pos
                while true # sequence
                  _save87 = self.pos

                  _save88 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save88
                      break
                    end
                    _tmp = apply(:_Ticks3)
                    unless _tmp
                      self.pos = _save88
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save87
                  unless _tmp
                    self.pos = _save86
                    break
                  end

                  _save89 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save89

                    _save90 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save90
                        break
                      end
                      _save91 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save91
                      unless _tmp
                        self.pos = _save90
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save89
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save86
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save78
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save63
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save62
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save62
            break
          end
          _tmp = apply(:_Ticks3)
          unless _tmp
            self.pos = _save62
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save92 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks4)
          unless _tmp
            self.pos = _save92
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save92
            break
          end
          _text_start = self.pos
          _save93 = self.pos

          _save94 = self.pos
          while true # choice
            _save95 = self.pos

            _save96 = self.pos
            while true # sequence
              _save97 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save97
              unless _tmp
                self.pos = _save96
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save96
              end
              break
            end # end sequence

            if _tmp
              while true

                _save98 = self.pos
                while true # sequence
                  _save99 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save99
                  unless _tmp
                    self.pos = _save98
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save98
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save95
            end
            break if _tmp
            self.pos = _save94

            _save100 = self.pos
            while true # sequence
              _save101 = self.pos
              _tmp = apply(:_Ticks4)
              _tmp = _tmp ? nil : true
              self.pos = _save101
              unless _tmp
                self.pos = _save100
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save100
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save94

            _save102 = self.pos
            while true # sequence
              _save103 = self.pos

              _save104 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save104
                  break
                end
                _tmp = apply(:_Ticks4)
                unless _tmp
                  self.pos = _save104
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save103
              unless _tmp
                self.pos = _save102
                break
              end

              _save105 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save105

                _save106 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save106
                    break
                  end
                  _save107 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save107
                  unless _tmp
                    self.pos = _save106
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save105
                break
              end # end choice

              unless _tmp
                self.pos = _save102
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save94
            break
          end # end choice

          if _tmp
            while true

              _save108 = self.pos
              while true # choice
                _save109 = self.pos

                _save110 = self.pos
                while true # sequence
                  _save111 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save111
                  unless _tmp
                    self.pos = _save110
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save110
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save112 = self.pos
                    while true # sequence
                      _save113 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save113
                      unless _tmp
                        self.pos = _save112
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save112
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save109
                end
                break if _tmp
                self.pos = _save108

                _save114 = self.pos
                while true # sequence
                  _save115 = self.pos
                  _tmp = apply(:_Ticks4)
                  _tmp = _tmp ? nil : true
                  self.pos = _save115
                  unless _tmp
                    self.pos = _save114
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save114
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save108

                _save116 = self.pos
                while true # sequence
                  _save117 = self.pos

                  _save118 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save118
                      break
                    end
                    _tmp = apply(:_Ticks4)
                    unless _tmp
                      self.pos = _save118
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save117
                  unless _tmp
                    self.pos = _save116
                    break
                  end

                  _save119 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save119

                    _save120 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save120
                        break
                      end
                      _save121 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save121
                      unless _tmp
                        self.pos = _save120
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save119
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save116
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save108
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save93
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save92
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save92
            break
          end
          _tmp = apply(:_Ticks4)
          unless _tmp
            self.pos = _save92
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save122 = self.pos
        while true # sequence
          _tmp = apply(:_Ticks5)
          unless _tmp
            self.pos = _save122
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save122
            break
          end
          _text_start = self.pos
          _save123 = self.pos

          _save124 = self.pos
          while true # choice
            _save125 = self.pos

            _save126 = self.pos
            while true # sequence
              _save127 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save127
              unless _tmp
                self.pos = _save126
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save126
              end
              break
            end # end sequence

            if _tmp
              while true

                _save128 = self.pos
                while true # sequence
                  _save129 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save129
                  unless _tmp
                    self.pos = _save128
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save128
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save125
            end
            break if _tmp
            self.pos = _save124

            _save130 = self.pos
            while true # sequence
              _save131 = self.pos
              _tmp = apply(:_Ticks5)
              _tmp = _tmp ? nil : true
              self.pos = _save131
              unless _tmp
                self.pos = _save130
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save130
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save124

            _save132 = self.pos
            while true # sequence
              _save133 = self.pos

              _save134 = self.pos
              while true # sequence
                _tmp = _Sp()
                unless _tmp
                  self.pos = _save134
                  break
                end
                _tmp = apply(:_Ticks5)
                unless _tmp
                  self.pos = _save134
                end
                break
              end # end sequence

              _tmp = _tmp ? nil : true
              self.pos = _save133
              unless _tmp
                self.pos = _save132
                break
              end

              _save135 = self.pos
              while true # choice
                _tmp = _Spacechar()
                break if _tmp
                self.pos = _save135

                _save136 = self.pos
                while true # sequence
                  _tmp = _Newline()
                  unless _tmp
                    self.pos = _save136
                    break
                  end
                  _save137 = self.pos
                  _tmp = _BlankLine()
                  _tmp = _tmp ? nil : true
                  self.pos = _save137
                  unless _tmp
                    self.pos = _save136
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save135
                break
              end # end choice

              unless _tmp
                self.pos = _save132
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save124
            break
          end # end choice

          if _tmp
            while true

              _save138 = self.pos
              while true # choice
                _save139 = self.pos

                _save140 = self.pos
                while true # sequence
                  _save141 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save141
                  unless _tmp
                    self.pos = _save140
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save140
                  end
                  break
                end # end sequence

                if _tmp
                  while true

                    _save142 = self.pos
                    while true # sequence
                      _save143 = self.pos
                      _tmp = match_string("`")
                      _tmp = _tmp ? nil : true
                      self.pos = _save143
                      unless _tmp
                        self.pos = _save142
                        break
                      end
                      _tmp = apply(:_Nonspacechar)
                      unless _tmp
                        self.pos = _save142
                      end
                      break
                    end # end sequence

                    break unless _tmp
                  end
                  _tmp = true
                else
                  self.pos = _save139
                end
                break if _tmp
                self.pos = _save138

                _save144 = self.pos
                while true # sequence
                  _save145 = self.pos
                  _tmp = apply(:_Ticks5)
                  _tmp = _tmp ? nil : true
                  self.pos = _save145
                  unless _tmp
                    self.pos = _save144
                    break
                  end
                  _tmp = scan(/\G(?-mix:`+)/)
                  unless _tmp
                    self.pos = _save144
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save138

                _save146 = self.pos
                while true # sequence
                  _save147 = self.pos

                  _save148 = self.pos
                  while true # sequence
                    _tmp = _Sp()
                    unless _tmp
                      self.pos = _save148
                      break
                    end
                    _tmp = apply(:_Ticks5)
                    unless _tmp
                      self.pos = _save148
                    end
                    break
                  end # end sequence

                  _tmp = _tmp ? nil : true
                  self.pos = _save147
                  unless _tmp
                    self.pos = _save146
                    break
                  end

                  _save149 = self.pos
                  while true # choice
                    _tmp = _Spacechar()
                    break if _tmp
                    self.pos = _save149

                    _save150 = self.pos
                    while true # sequence
                      _tmp = _Newline()
                      unless _tmp
                        self.pos = _save150
                        break
                      end
                      _save151 = self.pos
                      _tmp = _BlankLine()
                      _tmp = _tmp ? nil : true
                      self.pos = _save151
                      unless _tmp
                        self.pos = _save150
                      end
                      break
                    end # end sequence

                    break if _tmp
                    self.pos = _save149
                    break
                  end # end choice

                  unless _tmp
                    self.pos = _save146
                  end
                  break
                end # end sequence

                break if _tmp
                self.pos = _save138
                break
              end # end choice

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save123
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save122
            break
          end
          _tmp = _Sp()
          unless _tmp
            self.pos = _save122
            break
          end
          _tmp = apply(:_Ticks5)
          unless _tmp
            self.pos = _save122
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "<code>#{text}</code>" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Code unless _tmp
    return _tmp
  end

  # RawHtml = < (HtmlComment | HtmlBlockScript | HtmlTag) > { if html? then text else '' end }
  def _RawHtml

    _save = self.pos
    while true # sequence
      _text_start = self.pos

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_HtmlComment)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlBlockScript)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_HtmlTag)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if html? then text else '' end ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawHtml unless _tmp
    return _tmp
  end

  # BlankLine = @Sp @Newline { "\n" }
  def _BlankLine

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  "\n" ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_BlankLine unless _tmp
    return _tmp
  end

  # Quoted = ("\"" (!"\"" .)* "\"" | "'" (!"'" .)* "'")
  def _Quoted

    _save = self.pos
    while true # choice

      _save1 = self.pos
      while true # sequence
        _tmp = match_string("\"")
        unless _tmp
          self.pos = _save1
          break
        end
        while true

          _save3 = self.pos
          while true # sequence
            _save4 = self.pos
            _tmp = match_string("\"")
            _tmp = _tmp ? nil : true
            self.pos = _save4
            unless _tmp
              self.pos = _save3
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save3
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save1
          break
        end
        _tmp = match_string("\"")
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save

      _save5 = self.pos
      while true # sequence
        _tmp = match_string("'")
        unless _tmp
          self.pos = _save5
          break
        end
        while true

          _save7 = self.pos
          while true # sequence
            _save8 = self.pos
            _tmp = match_string("'")
            _tmp = _tmp ? nil : true
            self.pos = _save8
            unless _tmp
              self.pos = _save7
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save7
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = match_string("'")
        unless _tmp
          self.pos = _save5
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_Quoted unless _tmp
    return _tmp
  end

  # HtmlAttribute = (AlphanumericAscii | "-")+ Spnl ("=" Spnl (Quoted | (!">" Nonspacechar)+))? Spnl
  def _HtmlAttribute

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # choice
        _tmp = apply(:_AlphanumericAscii)
        break if _tmp
        self.pos = _save2
        _tmp = match_string("-")
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      if _tmp
        while true

          _save3 = self.pos
          while true # choice
            _tmp = apply(:_AlphanumericAscii)
            break if _tmp
            self.pos = _save3
            _tmp = match_string("-")
            break if _tmp
            self.pos = _save3
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos

      _save5 = self.pos
      while true # sequence
        _tmp = match_string("=")
        unless _tmp
          self.pos = _save5
          break
        end
        _tmp = apply(:_Spnl)
        unless _tmp
          self.pos = _save5
          break
        end

        _save6 = self.pos
        while true # choice
          _tmp = apply(:_Quoted)
          break if _tmp
          self.pos = _save6
          _save7 = self.pos

          _save8 = self.pos
          while true # sequence
            _save9 = self.pos
            _tmp = match_string(">")
            _tmp = _tmp ? nil : true
            self.pos = _save9
            unless _tmp
              self.pos = _save8
              break
            end
            _tmp = apply(:_Nonspacechar)
            unless _tmp
              self.pos = _save8
            end
            break
          end # end sequence

          if _tmp
            while true

              _save10 = self.pos
              while true # sequence
                _save11 = self.pos
                _tmp = match_string(">")
                _tmp = _tmp ? nil : true
                self.pos = _save11
                unless _tmp
                  self.pos = _save10
                  break
                end
                _tmp = apply(:_Nonspacechar)
                unless _tmp
                  self.pos = _save10
                end
                break
              end # end sequence

              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save7
          end
          break if _tmp
          self.pos = _save6
          break
        end # end choice

        unless _tmp
          self.pos = _save5
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save4
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlAttribute unless _tmp
    return _tmp
  end

  # HtmlComment = "<!--" (!"-->" .)* "-->"
  def _HtmlComment

    _save = self.pos
    while true # sequence
      _tmp = match_string("<!--")
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = match_string("-->")
          _tmp = _tmp ? nil : true
          self.pos = _save3
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = get_byte
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("-->")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlComment unless _tmp
    return _tmp
  end

  # HtmlTag = "<" Spnl "/"? AlphanumericAscii+ Spnl HtmlAttribute* "/"? Spnl ">"
  def _HtmlTag

    _save = self.pos
    while true # sequence
      _tmp = match_string("<")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = match_string("/")
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = apply(:_AlphanumericAscii)
      if _tmp
        while true
          _tmp = apply(:_AlphanumericAscii)
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = apply(:_HtmlAttribute)
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      _save4 = self.pos
      _tmp = match_string("/")
      unless _tmp
        _tmp = true
        self.pos = _save4
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(">")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HtmlTag unless _tmp
    return _tmp
  end

  # Eof = !.
  def _Eof
    _save = self.pos
    _tmp = get_byte
    _tmp = _tmp ? nil : true
    self.pos = _save
    set_failed_rule :_Eof unless _tmp
    return _tmp
  end

  # Nonspacechar = !@Spacechar !@Newline .
  def _Nonspacechar

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = _Spacechar()
      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _tmp = _Newline()
      _tmp = _tmp ? nil : true
      self.pos = _save2
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = get_byte
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Nonspacechar unless _tmp
    return _tmp
  end

  # Sp = @Spacechar*
  def _Sp
    while true
      _tmp = _Spacechar()
      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_Sp unless _tmp
    return _tmp
  end

  # Spnl = @Sp (@Newline @Sp)?
  def _Spnl

    _save = self.pos
    while true # sequence
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _tmp = _Newline()
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = _Sp()
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Spnl unless _tmp
    return _tmp
  end

  # SpecialChar = (/[~*_`&\[\]()<!#\\'"]/ | @ExtendedSpecialChar)
  def _SpecialChar

    _save = self.pos
    while true # choice
      _tmp = scan(/\G(?-mix:[~*_`&\[\]()<!#\\'"])/)
      break if _tmp
      self.pos = _save
      _tmp = _ExtendedSpecialChar()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_SpecialChar unless _tmp
    return _tmp
  end

  # NormalChar = !(@SpecialChar | @Spacechar | @Newline) .
  def _NormalChar

    _save = self.pos
    while true # sequence
      _save1 = self.pos

      _save2 = self.pos
      while true # choice
        _tmp = _SpecialChar()
        break if _tmp
        self.pos = _save2
        _tmp = _Spacechar()
        break if _tmp
        self.pos = _save2
        _tmp = _Newline()
        break if _tmp
        self.pos = _save2
        break
      end # end choice

      _tmp = _tmp ? nil : true
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = get_byte
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NormalChar unless _tmp
    return _tmp
  end

  # Digit = [0-9]
  def _Digit
    _save = self.pos
    _tmp = get_byte
    if _tmp
      unless _tmp >= 48 and _tmp <= 57
        self.pos = _save
        _tmp = nil
      end
    end
    set_failed_rule :_Digit unless _tmp
    return _tmp
  end

  # Alphanumeric = %literals.Alphanumeric
  def _Alphanumeric
    _tmp = @_grammar_literals.external_invoke(self, :_Alphanumeric)
    set_failed_rule :_Alphanumeric unless _tmp
    return _tmp
  end

  # AlphanumericAscii = %literals.AlphanumericAscii
  def _AlphanumericAscii
    _tmp = @_grammar_literals.external_invoke(self, :_AlphanumericAscii)
    set_failed_rule :_AlphanumericAscii unless _tmp
    return _tmp
  end

  # BOM = %literals.BOM
  def _BOM
    _tmp = @_grammar_literals.external_invoke(self, :_BOM)
    set_failed_rule :_BOM unless _tmp
    return _tmp
  end

  # Newline = %literals.Newline
  def _Newline
    _tmp = @_grammar_literals.external_invoke(self, :_Newline)
    set_failed_rule :_Newline unless _tmp
    return _tmp
  end

  # Spacechar = %literals.Spacechar
  def _Spacechar
    _tmp = @_grammar_literals.external_invoke(self, :_Spacechar)
    set_failed_rule :_Spacechar unless _tmp
    return _tmp
  end

  # HexEntity = /&#x/i < /[0-9a-fA-F]+/ > ";" { [text.to_i(16)].pack 'U' }
  def _HexEntity

    _save = self.pos
    while true # sequence
      _tmp = scan(/\G(?i-mx:&#x)/)
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[0-9a-fA-F]+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(";")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [text.to_i(16)].pack 'U' ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_HexEntity unless _tmp
    return _tmp
  end

  # DecEntity = "&#" < /[0-9]+/ > ";" { [text.to_i].pack 'U' }
  def _DecEntity

    _save = self.pos
    while true # sequence
      _tmp = match_string("&#")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[0-9]+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(";")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [text.to_i].pack 'U' ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DecEntity unless _tmp
    return _tmp
  end

  # CharEntity = "&" < /[A-Za-z0-9]+/ > ";" { if entity = HTML_ENTITIES[text] then                  entity.pack 'U*'                else                  "&#{text};"                end              }
  def _CharEntity

    _save = self.pos
    while true # sequence
      _tmp = match_string("&")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _tmp = scan(/\G(?-mix:[A-Za-z0-9]+)/)
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(";")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  if entity = HTML_ENTITIES[text] then
                 entity.pack 'U*'
               else
                 "&#{text};"
               end
             ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_CharEntity unless _tmp
    return _tmp
  end

  # NonindentSpace = / {0,3}/
  def _NonindentSpace
    _tmp = scan(/\G(?-mix: {0,3})/)
    set_failed_rule :_NonindentSpace unless _tmp
    return _tmp
  end

  # Indent = /\t|    /
  def _Indent
    _tmp = scan(/\G(?-mix:\t|    )/)
    set_failed_rule :_Indent unless _tmp
    return _tmp
  end

  # IndentedLine = Indent Line
  def _IndentedLine

    _save = self.pos
    while true # sequence
      _tmp = apply(:_Indent)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Line)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_IndentedLine unless _tmp
    return _tmp
  end

  # OptionallyIndentedLine = Indent? Line
  def _OptionallyIndentedLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = apply(:_Indent)
      unless _tmp
        _tmp = true
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Line)
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_OptionallyIndentedLine unless _tmp
    return _tmp
  end

  # StartList = &. { [] }
  def _StartList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = get_byte
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  [] ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_StartList unless _tmp
    return _tmp
  end

  # Line = @RawLine:a { a }
  def _Line

    _save = self.pos
    while true # sequence
      _tmp = _RawLine()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Line unless _tmp
    return _tmp
  end

  # RawLine = (< (!"\r" !"\n" .)* @Newline > | < .+ > @Eof) { text }
  def _RawLine

    _save = self.pos
    while true # sequence

      _save1 = self.pos
      while true # choice
        _text_start = self.pos

        _save2 = self.pos
        while true # sequence
          while true

            _save4 = self.pos
            while true # sequence
              _save5 = self.pos
              _tmp = match_string("\r")
              _tmp = _tmp ? nil : true
              self.pos = _save5
              unless _tmp
                self.pos = _save4
                break
              end
              _save6 = self.pos
              _tmp = match_string("\n")
              _tmp = _tmp ? nil : true
              self.pos = _save6
              unless _tmp
                self.pos = _save4
                break
              end
              _tmp = get_byte
              unless _tmp
                self.pos = _save4
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save2
            break
          end
          _tmp = _Newline()
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        if _tmp
          text = get_text(_text_start)
        end
        break if _tmp
        self.pos = _save1

        _save7 = self.pos
        while true # sequence
          _text_start = self.pos
          _save8 = self.pos
          _tmp = get_byte
          if _tmp
            while true
              _tmp = get_byte
              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save8
          end
          if _tmp
            text = get_text(_text_start)
          end
          unless _tmp
            self.pos = _save7
            break
          end
          _tmp = _Eof()
          unless _tmp
            self.pos = _save7
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawLine unless _tmp
    return _tmp
  end

  # SkipBlock = (HtmlBlock | (!"#" !SetextBottom1 !SetextBottom2 !@BlankLine @RawLine)+ @BlankLine* | @BlankLine+ | @RawLine)
  def _SkipBlock

    _save = self.pos
    while true # choice
      _tmp = apply(:_HtmlBlock)
      break if _tmp
      self.pos = _save

      _save1 = self.pos
      while true # sequence
        _save2 = self.pos

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = match_string("#")
          _tmp = _tmp ? nil : true
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _save5 = self.pos
          _tmp = apply(:_SetextBottom1)
          _tmp = _tmp ? nil : true
          self.pos = _save5
          unless _tmp
            self.pos = _save3
            break
          end
          _save6 = self.pos
          _tmp = apply(:_SetextBottom2)
          _tmp = _tmp ? nil : true
          self.pos = _save6
          unless _tmp
            self.pos = _save3
            break
          end
          _save7 = self.pos
          _tmp = _BlankLine()
          _tmp = _tmp ? nil : true
          self.pos = _save7
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = _RawLine()
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        if _tmp
          while true

            _save8 = self.pos
            while true # sequence
              _save9 = self.pos
              _tmp = match_string("#")
              _tmp = _tmp ? nil : true
              self.pos = _save9
              unless _tmp
                self.pos = _save8
                break
              end
              _save10 = self.pos
              _tmp = apply(:_SetextBottom1)
              _tmp = _tmp ? nil : true
              self.pos = _save10
              unless _tmp
                self.pos = _save8
                break
              end
              _save11 = self.pos
              _tmp = apply(:_SetextBottom2)
              _tmp = _tmp ? nil : true
              self.pos = _save11
              unless _tmp
                self.pos = _save8
                break
              end
              _save12 = self.pos
              _tmp = _BlankLine()
              _tmp = _tmp ? nil : true
              self.pos = _save12
              unless _tmp
                self.pos = _save8
                break
              end
              _tmp = _RawLine()
              unless _tmp
                self.pos = _save8
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save2
        end
        unless _tmp
          self.pos = _save1
          break
        end
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
        unless _tmp
          self.pos = _save1
        end
        break
      end # end sequence

      break if _tmp
      self.pos = _save
      _save14 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save14
      end
      break if _tmp
      self.pos = _save
      _tmp = _RawLine()
      break if _tmp
      self.pos = _save
      break
    end # end choice

    set_failed_rule :_SkipBlock unless _tmp
    return _tmp
  end

  # ExtendedSpecialChar = &{ notes? } "^"
  def _ExtendedSpecialChar

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("^")
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_ExtendedSpecialChar unless _tmp
    return _tmp
  end

  # NoteReference = &{ notes? } RawNoteReference:ref { note_for ref }
  def _NoteReference

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RawNoteReference)
      ref = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  note_for ref ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_NoteReference unless _tmp
    return _tmp
  end

  # RawNoteReference = "[^" < (!@Newline !"]" .)+ > "]" { text }
  def _RawNoteReference

    _save = self.pos
    while true # sequence
      _tmp = match_string("[^")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _save3 = self.pos
        _tmp = _Newline()
        _tmp = _tmp ? nil : true
        self.pos = _save3
        unless _tmp
          self.pos = _save2
          break
        end
        _save4 = self.pos
        _tmp = match_string("]")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = get_byte
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = _Newline()
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _save7 = self.pos
            _tmp = match_string("]")
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("]")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawNoteReference unless _tmp
    return _tmp
  end

  # Note = &{ notes? } @NonindentSpace RawNoteReference:ref ":" @Sp @StartList:a RawNoteBlock:i { a.concat i } (&Indent RawNoteBlock:i { a.concat i })* { @footnotes[ref] = paragraph a                    nil                 }
  def _Note

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RawNoteReference)
      ref = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(":")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_RawNoteBlock)
      i = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a.concat i ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      while true

        _save3 = self.pos
        while true # sequence
          _save4 = self.pos
          _tmp = apply(:_Indent)
          self.pos = _save4
          unless _tmp
            self.pos = _save3
            break
          end
          _tmp = apply(:_RawNoteBlock)
          i = @result
          unless _tmp
            self.pos = _save3
            break
          end
          @result = begin;  a.concat i ; end
          _tmp = true
          unless _tmp
            self.pos = _save3
          end
          break
        end # end sequence

        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  @footnotes[ref] = paragraph a

                  nil
                ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Note unless _tmp
    return _tmp
  end

  # InlineNote = &{ notes? } "^[" @StartList:a (!"]" Inline:l { a << l })+ "]" { ref = [:inline, @note_order.length]                @footnotes[ref] = paragraph a                 note_for ref              }
  def _InlineNote

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  notes? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("^[")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _save4 = self.pos
        _tmp = match_string("]")
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_Inline)
        l = @result
        unless _tmp
          self.pos = _save3
          break
        end
        @result = begin;  a << l ; end
        _tmp = true
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("]")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = apply(:_Inline)
            l = @result
            unless _tmp
              self.pos = _save5
              break
            end
            @result = begin;  a << l ; end
            _tmp = true
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("]")
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  ref = [:inline, @note_order.length]
               @footnotes[ref] = paragraph a

               note_for ref
             ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_InlineNote unless _tmp
    return _tmp
  end

  # Notes = (Note | SkipBlock)*
  def _Notes
    while true

      _save1 = self.pos
      while true # choice
        _tmp = apply(:_Note)
        break if _tmp
        self.pos = _save1
        _tmp = apply(:_SkipBlock)
        break if _tmp
        self.pos = _save1
        break
      end # end choice

      break unless _tmp
    end
    _tmp = true
    set_failed_rule :_Notes unless _tmp
    return _tmp
  end

  # RawNoteBlock = @StartList:a (!@BlankLine OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }
  def _RawNoteBlock

    _save = self.pos
    while true # sequence
      _tmp = _StartList()
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _save3 = self.pos
        _tmp = _BlankLine()
        _tmp = _tmp ? nil : true
        self.pos = _save3
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = apply(:_OptionallyIndentedLine)
        l = @result
        unless _tmp
          self.pos = _save2
          break
        end
        @result = begin;  a << l ; end
        _tmp = true
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save4 = self.pos
          while true # sequence
            _save5 = self.pos
            _tmp = _BlankLine()
            _tmp = _tmp ? nil : true
            self.pos = _save5
            unless _tmp
              self.pos = _save4
              break
            end
            _tmp = apply(:_OptionallyIndentedLine)
            l = @result
            unless _tmp
              self.pos = _save4
              break
            end
            @result = begin;  a << l ; end
            _tmp = true
            unless _tmp
              self.pos = _save4
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      while true
        _tmp = _BlankLine()
        break unless _tmp
      end
      _tmp = true
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a << text ; end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_RawNoteBlock unless _tmp
    return _tmp
  end

  # CodeFence = &{ github? } Ticks3 (@Sp StrChunk:format)? Spnl < ((!"`" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text               verbatim.format = format.intern if format.instance_of?(String)               verbatim             }
  def _CodeFence

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  github? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Ticks3)
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos

      _save3 = self.pos
      while true # sequence
        _tmp = _Sp()
        unless _tmp
          self.pos = _save3
          break
        end
        _tmp = apply(:_StrChunk)
        format = @result
        unless _tmp
          self.pos = _save3
        end
        break
      end # end sequence

      unless _tmp
        _tmp = true
        self.pos = _save2
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Spnl)
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save4 = self.pos

      _save5 = self.pos
      while true # choice
        _save6 = self.pos

        _save7 = self.pos
        while true # sequence
          _save8 = self.pos
          _tmp = match_string("`")
          _tmp = _tmp ? nil : true
          self.pos = _save8
          unless _tmp
            self.pos = _save7
            break
          end
          _tmp = apply(:_Nonspacechar)
          unless _tmp
            self.pos = _save7
          end
          break
        end # end sequence

        if _tmp
          while true

            _save9 = self.pos
            while true # sequence
              _save10 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save10
              unless _tmp
                self.pos = _save9
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save9
              end
              break
            end # end sequence

            break unless _tmp
          end
          _tmp = true
        else
          self.pos = _save6
        end
        break if _tmp
        self.pos = _save5

        _save11 = self.pos
        while true # sequence
          _save12 = self.pos
          _tmp = apply(:_Ticks3)
          _tmp = _tmp ? nil : true
          self.pos = _save12
          unless _tmp
            self.pos = _save11
            break
          end
          _tmp = scan(/\G(?-mix:`+)/)
          unless _tmp
            self.pos = _save11
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save5
        _tmp = apply(:_Spacechar)
        break if _tmp
        self.pos = _save5
        _tmp = _Newline()
        break if _tmp
        self.pos = _save5
        break
      end # end choice

      if _tmp
        while true

          _save13 = self.pos
          while true # choice
            _save14 = self.pos

            _save15 = self.pos
            while true # sequence
              _save16 = self.pos
              _tmp = match_string("`")
              _tmp = _tmp ? nil : true
              self.pos = _save16
              unless _tmp
                self.pos = _save15
                break
              end
              _tmp = apply(:_Nonspacechar)
              unless _tmp
                self.pos = _save15
              end
              break
            end # end sequence

            if _tmp
              while true

                _save17 = self.pos
                while true # sequence
                  _save18 = self.pos
                  _tmp = match_string("`")
                  _tmp = _tmp ? nil : true
                  self.pos = _save18
                  unless _tmp
                    self.pos = _save17
                    break
                  end
                  _tmp = apply(:_Nonspacechar)
                  unless _tmp
                    self.pos = _save17
                  end
                  break
                end # end sequence

                break unless _tmp
              end
              _tmp = true
            else
              self.pos = _save14
            end
            break if _tmp
            self.pos = _save13

            _save19 = self.pos
            while true # sequence
              _save20 = self.pos
              _tmp = apply(:_Ticks3)
              _tmp = _tmp ? nil : true
              self.pos = _save20
              unless _tmp
                self.pos = _save19
                break
              end
              _tmp = scan(/\G(?-mix:`+)/)
              unless _tmp
                self.pos = _save19
              end
              break
            end # end sequence

            break if _tmp
            self.pos = _save13
            _tmp = apply(:_Spacechar)
            break if _tmp
            self.pos = _save13
            _tmp = _Newline()
            break if _tmp
            self.pos = _save13
            break
          end # end choice

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save4
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Ticks3)
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      while true
        _tmp = _Newline()
        break unless _tmp
      end
      _tmp = true
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  verbatim = RDoc::Markup::Verbatim.new text
              verbatim.format = format.intern if format.instance_of?(String)
              verbatim
            ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_CodeFence unless _tmp
    return _tmp
  end

  # Table = &{ github? } TableRow:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) }
  def _Table

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  github? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_TableRow)
      header = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_TableLine)
      line = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_TableRow)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_TableRow)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      body = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  table = RDoc::Markup::Table.new(header, line, body) ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_Table unless _tmp
    return _tmp
  end

  # TableRow = TableItem+:row "|" @Newline { row }
  def _TableRow

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_TableItem)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_TableItem)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      row = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("|")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  row ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableRow unless _tmp
    return _tmp
  end

  # TableItem = "|" < (!"|" !@Newline .)+ > { text.strip }
  def _TableItem

    _save = self.pos
    while true # sequence
      _tmp = match_string("|")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos
      _save1 = self.pos

      _save2 = self.pos
      while true # sequence
        _save3 = self.pos
        _tmp = match_string("|")
        _tmp = _tmp ? nil : true
        self.pos = _save3
        unless _tmp
          self.pos = _save2
          break
        end
        _save4 = self.pos
        _tmp = _Newline()
        _tmp = _tmp ? nil : true
        self.pos = _save4
        unless _tmp
          self.pos = _save2
          break
        end
        _tmp = get_byte
        unless _tmp
          self.pos = _save2
        end
        break
      end # end sequence

      if _tmp
        while true

          _save5 = self.pos
          while true # sequence
            _save6 = self.pos
            _tmp = match_string("|")
            _tmp = _tmp ? nil : true
            self.pos = _save6
            unless _tmp
              self.pos = _save5
              break
            end
            _save7 = self.pos
            _tmp = _Newline()
            _tmp = _tmp ? nil : true
            self.pos = _save7
            unless _tmp
              self.pos = _save5
              break
            end
            _tmp = get_byte
            unless _tmp
              self.pos = _save5
            end
            break
          end # end sequence

          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text.strip ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableItem unless _tmp
    return _tmp
  end

  # TableLine = TableColumn+:line "|" @Newline { line }
  def _TableLine

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_TableColumn)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_TableColumn)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      line = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string("|")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  line ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableLine unless _tmp
    return _tmp
  end

  # TableColumn = "|" < ("-"+ ":"? | ":" "-"*) > { text.start_with?(":") ? :left :                 text.end_with?(":") ? :right : nil               }
  def _TableColumn

    _save = self.pos
    while true # sequence
      _tmp = match_string("|")
      unless _tmp
        self.pos = _save
        break
      end
      _text_start = self.pos

      _save1 = self.pos
      while true # choice

        _save2 = self.pos
        while true # sequence
          _save3 = self.pos
          _tmp = match_string("-")
          if _tmp
            while true
              _tmp = match_string("-")
              break unless _tmp
            end
            _tmp = true
          else
            self.pos = _save3
          end
          unless _tmp
            self.pos = _save2
            break
          end
          _save4 = self.pos
          _tmp = match_string(":")
          unless _tmp
            _tmp = true
            self.pos = _save4
          end
          unless _tmp
            self.pos = _save2
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1

        _save5 = self.pos
        while true # sequence
          _tmp = match_string(":")
          unless _tmp
            self.pos = _save5
            break
          end
          while true
            _tmp = match_string("-")
            break unless _tmp
          end
          _tmp = true
          unless _tmp
            self.pos = _save5
          end
          break
        end # end sequence

        break if _tmp
        self.pos = _save1
        break
      end # end choice

      if _tmp
        text = get_text(_text_start)
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  text.start_with?(":") ? :left :
                text.end_with?(":") ? :right : nil
              ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_TableColumn unless _tmp
    return _tmp
  end

  # DefinitionList = &{ definition_lists? } DefinitionListItem+:list { RDoc::Markup::List.new :NOTE, *list.flatten }
  def _DefinitionList

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _tmp = begin;  definition_lists? ; end
      self.pos = _save1
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_DefinitionListItem)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_DefinitionListItem)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      list = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  RDoc::Markup::List.new :NOTE, *list.flatten ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionList unless _tmp
    return _tmp
  end

  # DefinitionListItem = DefinitionListLabel+:label DefinitionListDefinition+:defns { list_items = []                        list_items <<                          RDoc::Markup::ListItem.new(label, defns.shift)                         list_items.concat defns.map { |defn|                          RDoc::Markup::ListItem.new nil, defn                        } unless list_items.empty?                         list_items                      }
  def _DefinitionListItem

    _save = self.pos
    while true # sequence
      _save1 = self.pos
      _ary = []
      _tmp = apply(:_DefinitionListLabel)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_DefinitionListLabel)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save1
      end
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save2 = self.pos
      _ary = []
      _tmp = apply(:_DefinitionListDefinition)
      if _tmp
        _ary << @result
        while true
          _tmp = apply(:_DefinitionListDefinition)
          _ary << @result if _tmp
          break unless _tmp
        end
        _tmp = true
        @result = _ary
      else
        self.pos = _save2
      end
      defns = @result
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  list_items = []
                       list_items <<
                         RDoc::Markup::ListItem.new(label, defns.shift)

                       list_items.concat defns.map { |defn|
                         RDoc::Markup::ListItem.new nil, defn
                       } unless list_items.empty?

                       list_items
                     ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionListItem unless _tmp
    return _tmp
  end

  # DefinitionListLabel = StrChunk:label @Sp @Newline { label }
  def _DefinitionListLabel

    _save = self.pos
    while true # sequence
      _tmp = apply(:_StrChunk)
      label = @result
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Sp()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Newline()
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  label ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionListLabel unless _tmp
    return _tmp
  end

  # DefinitionListDefinition = @NonindentSpace ":" @Space Inlines:a @BlankLine+ { paragraph a }
  def _DefinitionListDefinition

    _save = self.pos
    while true # sequence
      _tmp = _NonindentSpace()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = match_string(":")
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = _Space()
      unless _tmp
        self.pos = _save
        break
      end
      _tmp = apply(:_Inlines)
      a = @result
      unless _tmp
        self.pos = _save
        break
      end
      _save1 = self.pos
      _tmp = _BlankLine()
      if _tmp
        while true
          _tmp = _BlankLine()
          break unless _tmp
        end
        _tmp = true
      else
        self.pos = _save1
      end
      unless _tmp
        self.pos = _save
        break
      end
      @result = begin;  paragraph a ; end
      _tmp = true
      unless _tmp
        self.pos = _save
      end
      break
    end # end sequence

    set_failed_rule :_DefinitionListDefinition unless _tmp
    return _tmp
  end

  Rules = {}
  Rules[:_root] = rule_info("root", "Doc")
  Rules[:_Doc] = rule_info("Doc", "BOM? Block*:a { RDoc::Markup::Document.new(*a.compact) }")
  Rules[:_Block] = rule_info("Block", "@BlankLine* (BlockQuote | Verbatim | CodeFence | Table | Note | Reference | HorizontalRule | Heading | OrderedList | BulletList | DefinitionList | HtmlBlock | StyleBlock | Para | Plain)")
  Rules[:_Para] = rule_info("Para", "@NonindentSpace Inlines:a @BlankLine+ { paragraph a }")
  Rules[:_Plain] = rule_info("Plain", "Inlines:a { paragraph a }")
  Rules[:_AtxInline] = rule_info("AtxInline", "!@Newline !(@Sp /\#*/ @Sp @Newline) Inline")
  Rules[:_AtxStart] = rule_info("AtxStart", "< /\\\#{1,6}/ > { text.length }")
  Rules[:_AtxHeading] = rule_info("AtxHeading", "AtxStart:s @Sp AtxInline+:a (@Sp /\#*/ @Sp)? @Newline { RDoc::Markup::Heading.new(s, a.join) }")
  Rules[:_SetextHeading] = rule_info("SetextHeading", "(SetextHeading1 | SetextHeading2)")
  Rules[:_SetextBottom1] = rule_info("SetextBottom1", "/={1,}/ @Newline")
  Rules[:_SetextBottom2] = rule_info("SetextBottom2", "/-{1,}/ @Newline")
  Rules[:_SetextHeading1] = rule_info("SetextHeading1", "&(@RawLine SetextBottom1) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom1 { RDoc::Markup::Heading.new(1, a.join) }")
  Rules[:_SetextHeading2] = rule_info("SetextHeading2", "&(@RawLine SetextBottom2) @StartList:a (!@Endline Inline:b { a << b })+ @Sp @Newline SetextBottom2 { RDoc::Markup::Heading.new(2, a.join) }")
  Rules[:_Heading] = rule_info("Heading", "(SetextHeading | AtxHeading)")
  Rules[:_BlockQuote] = rule_info("BlockQuote", "BlockQuoteRaw:a { RDoc::Markup::BlockQuote.new(*a) }")
  Rules[:_BlockQuoteRaw] = rule_info("BlockQuoteRaw", "@StartList:a (\">\" \" \"? Line:l { a << l } (!\">\" !@BlankLine Line:c { a << c })* (@BlankLine:n { a << n })*)+ { inner_parse a.join }")
  Rules[:_NonblankIndentedLine] = rule_info("NonblankIndentedLine", "!@BlankLine IndentedLine")
  Rules[:_VerbatimChunk] = rule_info("VerbatimChunk", "@BlankLine*:a NonblankIndentedLine+:b { a.concat b }")
  Rules[:_Verbatim] = rule_info("Verbatim", "VerbatimChunk+:a { RDoc::Markup::Verbatim.new(*a.flatten) }")
  Rules[:_HorizontalRule] = rule_info("HorizontalRule", "@NonindentSpace (\"*\" @Sp \"*\" @Sp \"*\" (@Sp \"*\")* | \"-\" @Sp \"-\" @Sp \"-\" (@Sp \"-\")* | \"_\" @Sp \"_\" @Sp \"_\" (@Sp \"_\")*) @Sp @Newline @BlankLine+ { RDoc::Markup::Rule.new 1 }")
  Rules[:_Bullet] = rule_info("Bullet", "!HorizontalRule @NonindentSpace /[+*-]/ @Spacechar+")
  Rules[:_BulletList] = rule_info("BulletList", "&Bullet (ListTight | ListLoose):a { RDoc::Markup::List.new(:BULLET, *a) }")
  Rules[:_ListTight] = rule_info("ListTight", "ListItemTight+:a @BlankLine* !(Bullet | Enumerator) { a }")
  Rules[:_ListLoose] = rule_info("ListLoose", "@StartList:a (ListItem:b @BlankLine* { a << b })+ { a }")
  Rules[:_ListItem] = rule_info("ListItem", "(Bullet | Enumerator) @StartList:a ListBlock:b { a << b } (ListContinuationBlock:c { a.push(*c) })* { list_item_from a }")
  Rules[:_ListItemTight] = rule_info("ListItemTight", "(Bullet | Enumerator) ListBlock:a (!@BlankLine ListContinuationBlock:b { a.push(*b) })* !ListContinuationBlock { list_item_from a }")
  Rules[:_ListBlock] = rule_info("ListBlock", "!@BlankLine Line:a ListBlockLine*:c { [a, *c] }")
  Rules[:_ListContinuationBlock] = rule_info("ListContinuationBlock", "@StartList:a @BlankLine* { a << \"\\n\" } (Indent ListBlock:b { a.concat b })+ { a }")
  Rules[:_Enumerator] = rule_info("Enumerator", "@NonindentSpace [0-9]+ \".\" @Spacechar+")
  Rules[:_OrderedList] = rule_info("OrderedList", "&Enumerator (ListTight | ListLoose):a { RDoc::Markup::List.new(:NUMBER, *a) }")
  Rules[:_ListBlockLine] = rule_info("ListBlockLine", "!@BlankLine !(Indent? (Bullet | Enumerator)) !HorizontalRule OptionallyIndentedLine")
  Rules[:_HtmlOpenAnchor] = rule_info("HtmlOpenAnchor", "\"<\" Spnl (\"a\" | \"A\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlCloseAnchor] = rule_info("HtmlCloseAnchor", "\"<\" Spnl \"/\" (\"a\" | \"A\") Spnl \">\"")
  Rules[:_HtmlAnchor] = rule_info("HtmlAnchor", "HtmlOpenAnchor (HtmlAnchor | !HtmlCloseAnchor .)* HtmlCloseAnchor")
  Rules[:_HtmlBlockOpenAddress] = rule_info("HtmlBlockOpenAddress", "\"<\" Spnl (\"address\" | \"ADDRESS\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseAddress] = rule_info("HtmlBlockCloseAddress", "\"<\" Spnl \"/\" (\"address\" | \"ADDRESS\") Spnl \">\"")
  Rules[:_HtmlBlockAddress] = rule_info("HtmlBlockAddress", "HtmlBlockOpenAddress (HtmlBlockAddress | !HtmlBlockCloseAddress .)* HtmlBlockCloseAddress")
  Rules[:_HtmlBlockOpenBlockquote] = rule_info("HtmlBlockOpenBlockquote", "\"<\" Spnl (\"blockquote\" | \"BLOCKQUOTE\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseBlockquote] = rule_info("HtmlBlockCloseBlockquote", "\"<\" Spnl \"/\" (\"blockquote\" | \"BLOCKQUOTE\") Spnl \">\"")
  Rules[:_HtmlBlockBlockquote] = rule_info("HtmlBlockBlockquote", "HtmlBlockOpenBlockquote (HtmlBlockBlockquote | !HtmlBlockCloseBlockquote .)* HtmlBlockCloseBlockquote")
  Rules[:_HtmlBlockOpenCenter] = rule_info("HtmlBlockOpenCenter", "\"<\" Spnl (\"center\" | \"CENTER\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseCenter] = rule_info("HtmlBlockCloseCenter", "\"<\" Spnl \"/\" (\"center\" | \"CENTER\") Spnl \">\"")
  Rules[:_HtmlBlockCenter] = rule_info("HtmlBlockCenter", "HtmlBlockOpenCenter (HtmlBlockCenter | !HtmlBlockCloseCenter .)* HtmlBlockCloseCenter")
  Rules[:_HtmlBlockOpenDir] = rule_info("HtmlBlockOpenDir", "\"<\" Spnl (\"dir\" | \"DIR\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDir] = rule_info("HtmlBlockCloseDir", "\"<\" Spnl \"/\" (\"dir\" | \"DIR\") Spnl \">\"")
  Rules[:_HtmlBlockDir] = rule_info("HtmlBlockDir", "HtmlBlockOpenDir (HtmlBlockDir | !HtmlBlockCloseDir .)* HtmlBlockCloseDir")
  Rules[:_HtmlBlockOpenDiv] = rule_info("HtmlBlockOpenDiv", "\"<\" Spnl (\"div\" | \"DIV\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDiv] = rule_info("HtmlBlockCloseDiv", "\"<\" Spnl \"/\" (\"div\" | \"DIV\") Spnl \">\"")
  Rules[:_HtmlBlockDiv] = rule_info("HtmlBlockDiv", "HtmlBlockOpenDiv (HtmlBlockDiv | !HtmlBlockCloseDiv .)* HtmlBlockCloseDiv")
  Rules[:_HtmlBlockOpenDl] = rule_info("HtmlBlockOpenDl", "\"<\" Spnl (\"dl\" | \"DL\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDl] = rule_info("HtmlBlockCloseDl", "\"<\" Spnl \"/\" (\"dl\" | \"DL\") Spnl \">\"")
  Rules[:_HtmlBlockDl] = rule_info("HtmlBlockDl", "HtmlBlockOpenDl (HtmlBlockDl | !HtmlBlockCloseDl .)* HtmlBlockCloseDl")
  Rules[:_HtmlBlockOpenFieldset] = rule_info("HtmlBlockOpenFieldset", "\"<\" Spnl (\"fieldset\" | \"FIELDSET\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseFieldset] = rule_info("HtmlBlockCloseFieldset", "\"<\" Spnl \"/\" (\"fieldset\" | \"FIELDSET\") Spnl \">\"")
  Rules[:_HtmlBlockFieldset] = rule_info("HtmlBlockFieldset", "HtmlBlockOpenFieldset (HtmlBlockFieldset | !HtmlBlockCloseFieldset .)* HtmlBlockCloseFieldset")
  Rules[:_HtmlBlockOpenForm] = rule_info("HtmlBlockOpenForm", "\"<\" Spnl (\"form\" | \"FORM\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseForm] = rule_info("HtmlBlockCloseForm", "\"<\" Spnl \"/\" (\"form\" | \"FORM\") Spnl \">\"")
  Rules[:_HtmlBlockForm] = rule_info("HtmlBlockForm", "HtmlBlockOpenForm (HtmlBlockForm | !HtmlBlockCloseForm .)* HtmlBlockCloseForm")
  Rules[:_HtmlBlockOpenH1] = rule_info("HtmlBlockOpenH1", "\"<\" Spnl (\"h1\" | \"H1\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH1] = rule_info("HtmlBlockCloseH1", "\"<\" Spnl \"/\" (\"h1\" | \"H1\") Spnl \">\"")
  Rules[:_HtmlBlockH1] = rule_info("HtmlBlockH1", "HtmlBlockOpenH1 (HtmlBlockH1 | !HtmlBlockCloseH1 .)* HtmlBlockCloseH1")
  Rules[:_HtmlBlockOpenH2] = rule_info("HtmlBlockOpenH2", "\"<\" Spnl (\"h2\" | \"H2\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH2] = rule_info("HtmlBlockCloseH2", "\"<\" Spnl \"/\" (\"h2\" | \"H2\") Spnl \">\"")
  Rules[:_HtmlBlockH2] = rule_info("HtmlBlockH2", "HtmlBlockOpenH2 (HtmlBlockH2 | !HtmlBlockCloseH2 .)* HtmlBlockCloseH2")
  Rules[:_HtmlBlockOpenH3] = rule_info("HtmlBlockOpenH3", "\"<\" Spnl (\"h3\" | \"H3\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH3] = rule_info("HtmlBlockCloseH3", "\"<\" Spnl \"/\" (\"h3\" | \"H3\") Spnl \">\"")
  Rules[:_HtmlBlockH3] = rule_info("HtmlBlockH3", "HtmlBlockOpenH3 (HtmlBlockH3 | !HtmlBlockCloseH3 .)* HtmlBlockCloseH3")
  Rules[:_HtmlBlockOpenH4] = rule_info("HtmlBlockOpenH4", "\"<\" Spnl (\"h4\" | \"H4\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH4] = rule_info("HtmlBlockCloseH4", "\"<\" Spnl \"/\" (\"h4\" | \"H4\") Spnl \">\"")
  Rules[:_HtmlBlockH4] = rule_info("HtmlBlockH4", "HtmlBlockOpenH4 (HtmlBlockH4 | !HtmlBlockCloseH4 .)* HtmlBlockCloseH4")
  Rules[:_HtmlBlockOpenH5] = rule_info("HtmlBlockOpenH5", "\"<\" Spnl (\"h5\" | \"H5\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH5] = rule_info("HtmlBlockCloseH5", "\"<\" Spnl \"/\" (\"h5\" | \"H5\") Spnl \">\"")
  Rules[:_HtmlBlockH5] = rule_info("HtmlBlockH5", "HtmlBlockOpenH5 (HtmlBlockH5 | !HtmlBlockCloseH5 .)* HtmlBlockCloseH5")
  Rules[:_HtmlBlockOpenH6] = rule_info("HtmlBlockOpenH6", "\"<\" Spnl (\"h6\" | \"H6\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseH6] = rule_info("HtmlBlockCloseH6", "\"<\" Spnl \"/\" (\"h6\" | \"H6\") Spnl \">\"")
  Rules[:_HtmlBlockH6] = rule_info("HtmlBlockH6", "HtmlBlockOpenH6 (HtmlBlockH6 | !HtmlBlockCloseH6 .)* HtmlBlockCloseH6")
  Rules[:_HtmlBlockOpenMenu] = rule_info("HtmlBlockOpenMenu", "\"<\" Spnl (\"menu\" | \"MENU\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseMenu] = rule_info("HtmlBlockCloseMenu", "\"<\" Spnl \"/\" (\"menu\" | \"MENU\") Spnl \">\"")
  Rules[:_HtmlBlockMenu] = rule_info("HtmlBlockMenu", "HtmlBlockOpenMenu (HtmlBlockMenu | !HtmlBlockCloseMenu .)* HtmlBlockCloseMenu")
  Rules[:_HtmlBlockOpenNoframes] = rule_info("HtmlBlockOpenNoframes", "\"<\" Spnl (\"noframes\" | \"NOFRAMES\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseNoframes] = rule_info("HtmlBlockCloseNoframes", "\"<\" Spnl \"/\" (\"noframes\" | \"NOFRAMES\") Spnl \">\"")
  Rules[:_HtmlBlockNoframes] = rule_info("HtmlBlockNoframes", "HtmlBlockOpenNoframes (HtmlBlockNoframes | !HtmlBlockCloseNoframes .)* HtmlBlockCloseNoframes")
  Rules[:_HtmlBlockOpenNoscript] = rule_info("HtmlBlockOpenNoscript", "\"<\" Spnl (\"noscript\" | \"NOSCRIPT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseNoscript] = rule_info("HtmlBlockCloseNoscript", "\"<\" Spnl \"/\" (\"noscript\" | \"NOSCRIPT\") Spnl \">\"")
  Rules[:_HtmlBlockNoscript] = rule_info("HtmlBlockNoscript", "HtmlBlockOpenNoscript (HtmlBlockNoscript | !HtmlBlockCloseNoscript .)* HtmlBlockCloseNoscript")
  Rules[:_HtmlBlockOpenOl] = rule_info("HtmlBlockOpenOl", "\"<\" Spnl (\"ol\" | \"OL\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseOl] = rule_info("HtmlBlockCloseOl", "\"<\" Spnl \"/\" (\"ol\" | \"OL\") Spnl \">\"")
  Rules[:_HtmlBlockOl] = rule_info("HtmlBlockOl", "HtmlBlockOpenOl (HtmlBlockOl | !HtmlBlockCloseOl .)* HtmlBlockCloseOl")
  Rules[:_HtmlBlockOpenP] = rule_info("HtmlBlockOpenP", "\"<\" Spnl (\"p\" | \"P\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseP] = rule_info("HtmlBlockCloseP", "\"<\" Spnl \"/\" (\"p\" | \"P\") Spnl \">\"")
  Rules[:_HtmlBlockP] = rule_info("HtmlBlockP", "HtmlBlockOpenP (HtmlBlockP | !HtmlBlockCloseP .)* HtmlBlockCloseP")
  Rules[:_HtmlBlockOpenPre] = rule_info("HtmlBlockOpenPre", "\"<\" Spnl (\"pre\" | \"PRE\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockClosePre] = rule_info("HtmlBlockClosePre", "\"<\" Spnl \"/\" (\"pre\" | \"PRE\") Spnl \">\"")
  Rules[:_HtmlBlockPre] = rule_info("HtmlBlockPre", "HtmlBlockOpenPre (HtmlBlockPre | !HtmlBlockClosePre .)* HtmlBlockClosePre")
  Rules[:_HtmlBlockOpenTable] = rule_info("HtmlBlockOpenTable", "\"<\" Spnl (\"table\" | \"TABLE\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTable] = rule_info("HtmlBlockCloseTable", "\"<\" Spnl \"/\" (\"table\" | \"TABLE\") Spnl \">\"")
  Rules[:_HtmlBlockTable] = rule_info("HtmlBlockTable", "HtmlBlockOpenTable (HtmlBlockTable | !HtmlBlockCloseTable .)* HtmlBlockCloseTable")
  Rules[:_HtmlBlockOpenUl] = rule_info("HtmlBlockOpenUl", "\"<\" Spnl (\"ul\" | \"UL\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseUl] = rule_info("HtmlBlockCloseUl", "\"<\" Spnl \"/\" (\"ul\" | \"UL\") Spnl \">\"")
  Rules[:_HtmlBlockUl] = rule_info("HtmlBlockUl", "HtmlBlockOpenUl (HtmlBlockUl | !HtmlBlockCloseUl .)* HtmlBlockCloseUl")
  Rules[:_HtmlBlockOpenDd] = rule_info("HtmlBlockOpenDd", "\"<\" Spnl (\"dd\" | \"DD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDd] = rule_info("HtmlBlockCloseDd", "\"<\" Spnl \"/\" (\"dd\" | \"DD\") Spnl \">\"")
  Rules[:_HtmlBlockDd] = rule_info("HtmlBlockDd", "HtmlBlockOpenDd (HtmlBlockDd | !HtmlBlockCloseDd .)* HtmlBlockCloseDd")
  Rules[:_HtmlBlockOpenDt] = rule_info("HtmlBlockOpenDt", "\"<\" Spnl (\"dt\" | \"DT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseDt] = rule_info("HtmlBlockCloseDt", "\"<\" Spnl \"/\" (\"dt\" | \"DT\") Spnl \">\"")
  Rules[:_HtmlBlockDt] = rule_info("HtmlBlockDt", "HtmlBlockOpenDt (HtmlBlockDt | !HtmlBlockCloseDt .)* HtmlBlockCloseDt")
  Rules[:_HtmlBlockOpenFrameset] = rule_info("HtmlBlockOpenFrameset", "\"<\" Spnl (\"frameset\" | \"FRAMESET\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseFrameset] = rule_info("HtmlBlockCloseFrameset", "\"<\" Spnl \"/\" (\"frameset\" | \"FRAMESET\") Spnl \">\"")
  Rules[:_HtmlBlockFrameset] = rule_info("HtmlBlockFrameset", "HtmlBlockOpenFrameset (HtmlBlockFrameset | !HtmlBlockCloseFrameset .)* HtmlBlockCloseFrameset")
  Rules[:_HtmlBlockOpenLi] = rule_info("HtmlBlockOpenLi", "\"<\" Spnl (\"li\" | \"LI\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseLi] = rule_info("HtmlBlockCloseLi", "\"<\" Spnl \"/\" (\"li\" | \"LI\") Spnl \">\"")
  Rules[:_HtmlBlockLi] = rule_info("HtmlBlockLi", "HtmlBlockOpenLi (HtmlBlockLi | !HtmlBlockCloseLi .)* HtmlBlockCloseLi")
  Rules[:_HtmlBlockOpenTbody] = rule_info("HtmlBlockOpenTbody", "\"<\" Spnl (\"tbody\" | \"TBODY\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTbody] = rule_info("HtmlBlockCloseTbody", "\"<\" Spnl \"/\" (\"tbody\" | \"TBODY\") Spnl \">\"")
  Rules[:_HtmlBlockTbody] = rule_info("HtmlBlockTbody", "HtmlBlockOpenTbody (HtmlBlockTbody | !HtmlBlockCloseTbody .)* HtmlBlockCloseTbody")
  Rules[:_HtmlBlockOpenTd] = rule_info("HtmlBlockOpenTd", "\"<\" Spnl (\"td\" | \"TD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTd] = rule_info("HtmlBlockCloseTd", "\"<\" Spnl \"/\" (\"td\" | \"TD\") Spnl \">\"")
  Rules[:_HtmlBlockTd] = rule_info("HtmlBlockTd", "HtmlBlockOpenTd (HtmlBlockTd | !HtmlBlockCloseTd .)* HtmlBlockCloseTd")
  Rules[:_HtmlBlockOpenTfoot] = rule_info("HtmlBlockOpenTfoot", "\"<\" Spnl (\"tfoot\" | \"TFOOT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTfoot] = rule_info("HtmlBlockCloseTfoot", "\"<\" Spnl \"/\" (\"tfoot\" | \"TFOOT\") Spnl \">\"")
  Rules[:_HtmlBlockTfoot] = rule_info("HtmlBlockTfoot", "HtmlBlockOpenTfoot (HtmlBlockTfoot | !HtmlBlockCloseTfoot .)* HtmlBlockCloseTfoot")
  Rules[:_HtmlBlockOpenTh] = rule_info("HtmlBlockOpenTh", "\"<\" Spnl (\"th\" | \"TH\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTh] = rule_info("HtmlBlockCloseTh", "\"<\" Spnl \"/\" (\"th\" | \"TH\") Spnl \">\"")
  Rules[:_HtmlBlockTh] = rule_info("HtmlBlockTh", "HtmlBlockOpenTh (HtmlBlockTh | !HtmlBlockCloseTh .)* HtmlBlockCloseTh")
  Rules[:_HtmlBlockOpenThead] = rule_info("HtmlBlockOpenThead", "\"<\" Spnl (\"thead\" | \"THEAD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseThead] = rule_info("HtmlBlockCloseThead", "\"<\" Spnl \"/\" (\"thead\" | \"THEAD\") Spnl \">\"")
  Rules[:_HtmlBlockThead] = rule_info("HtmlBlockThead", "HtmlBlockOpenThead (HtmlBlockThead | !HtmlBlockCloseThead .)* HtmlBlockCloseThead")
  Rules[:_HtmlBlockOpenTr] = rule_info("HtmlBlockOpenTr", "\"<\" Spnl (\"tr\" | \"TR\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseTr] = rule_info("HtmlBlockCloseTr", "\"<\" Spnl \"/\" (\"tr\" | \"TR\") Spnl \">\"")
  Rules[:_HtmlBlockTr] = rule_info("HtmlBlockTr", "HtmlBlockOpenTr (HtmlBlockTr | !HtmlBlockCloseTr .)* HtmlBlockCloseTr")
  Rules[:_HtmlBlockOpenScript] = rule_info("HtmlBlockOpenScript", "\"<\" Spnl (\"script\" | \"SCRIPT\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseScript] = rule_info("HtmlBlockCloseScript", "\"<\" Spnl \"/\" (\"script\" | \"SCRIPT\") Spnl \">\"")
  Rules[:_HtmlBlockScript] = rule_info("HtmlBlockScript", "HtmlBlockOpenScript (!HtmlBlockCloseScript .)* HtmlBlockCloseScript")
  Rules[:_HtmlBlockOpenHead] = rule_info("HtmlBlockOpenHead", "\"<\" Spnl (\"head\" | \"HEAD\") Spnl HtmlAttribute* \">\"")
  Rules[:_HtmlBlockCloseHead] = rule_info("HtmlBlockCloseHead", "\"<\" Spnl \"/\" (\"head\" | \"HEAD\") Spnl \">\"")
  Rules[:_HtmlBlockHead] = rule_info("HtmlBlockHead", "HtmlBlockOpenHead (!HtmlBlockCloseHead .)* HtmlBlockCloseHead")
  Rules[:_HtmlBlockInTags] = rule_info("HtmlBlockInTags", "(HtmlAnchor | HtmlBlockAddress | HtmlBlockBlockquote | HtmlBlockCenter | HtmlBlockDir | HtmlBlockDiv | HtmlBlockDl | HtmlBlockFieldset | HtmlBlockForm | HtmlBlockH1 | HtmlBlockH2 | HtmlBlockH3 | HtmlBlockH4 | HtmlBlockH5 | HtmlBlockH6 | HtmlBlockMenu | HtmlBlockNoframes | HtmlBlockNoscript | HtmlBlockOl | HtmlBlockP | HtmlBlockPre | HtmlBlockTable | HtmlBlockUl | HtmlBlockDd | HtmlBlockDt | HtmlBlockFrameset | HtmlBlockLi | HtmlBlockTbody | HtmlBlockTd | HtmlBlockTfoot | HtmlBlockTh | HtmlBlockThead | HtmlBlockTr | HtmlBlockScript | HtmlBlockHead)")
  Rules[:_HtmlBlock] = rule_info("HtmlBlock", "< (HtmlBlockInTags | HtmlComment | HtmlBlockSelfClosing | HtmlUnclosed) > @BlankLine+ { if html? then                 RDoc::Markup::Raw.new text               end }")
  Rules[:_HtmlUnclosed] = rule_info("HtmlUnclosed", "\"<\" Spnl HtmlUnclosedType Spnl HtmlAttribute* Spnl \">\"")
  Rules[:_HtmlUnclosedType] = rule_info("HtmlUnclosedType", "(\"HR\" | \"hr\")")
  Rules[:_HtmlBlockSelfClosing] = rule_info("HtmlBlockSelfClosing", "\"<\" Spnl HtmlBlockType Spnl HtmlAttribute* \"/\" Spnl \">\"")
  Rules[:_HtmlBlockType] = rule_info("HtmlBlockType", "(\"ADDRESS\" | \"BLOCKQUOTE\" | \"CENTER\" | \"DD\" | \"DIR\" | \"DIV\" | \"DL\" | \"DT\" | \"FIELDSET\" | \"FORM\" | \"FRAMESET\" | \"H1\" | \"H2\" | \"H3\" | \"H4\" | \"H5\" | \"H6\" | \"HR\" | \"ISINDEX\" | \"LI\" | \"MENU\" | \"NOFRAMES\" | \"NOSCRIPT\" | \"OL\" | \"P\" | \"PRE\" | \"SCRIPT\" | \"TABLE\" | \"TBODY\" | \"TD\" | \"TFOOT\" | \"TH\" | \"THEAD\" | \"TR\" | \"UL\" | \"address\" | \"blockquote\" | \"center\" | \"dd\" | \"dir\" | \"div\" | \"dl\" | \"dt\" | \"fieldset\" | \"form\" | \"frameset\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"hr\" | \"isindex\" | \"li\" | \"menu\" | \"noframes\" | \"noscript\" | \"ol\" | \"p\" | \"pre\" | \"script\" | \"table\" | \"tbody\" | \"td\" | \"tfoot\" | \"th\" | \"thead\" | \"tr\" | \"ul\")")
  Rules[:_StyleOpen] = rule_info("StyleOpen", "\"<\" Spnl (\"style\" | \"STYLE\") Spnl HtmlAttribute* \">\"")
  Rules[:_StyleClose] = rule_info("StyleClose", "\"<\" Spnl \"/\" (\"style\" | \"STYLE\") Spnl \">\"")
  Rules[:_InStyleTags] = rule_info("InStyleTags", "StyleOpen (!StyleClose .)* StyleClose")
  Rules[:_StyleBlock] = rule_info("StyleBlock", "< InStyleTags > @BlankLine* { if css? then                     RDoc::Markup::Raw.new text                   end }")
  Rules[:_Inlines] = rule_info("Inlines", "(!@Endline Inline:i { i } | @Endline:c !(&{ github? } Ticks3 /[^`\\n]*$/) &Inline { c })+:chunks @Endline? { chunks }")
  Rules[:_Inline] = rule_info("Inline", "(Str | @Endline | UlOrStarLine | @Space | Strong | Emph | Strike | Image | Link | NoteReference | InlineNote | Code | RawHtml | Entity | EscapedChar | Symbol)")
  Rules[:_Space] = rule_info("Space", "@Spacechar+ { \" \" }")
  Rules[:_Str] = rule_info("Str", "@StartList:a < @NormalChar+ > { a = text } (StrChunk:c { a << c })* { a }")
  Rules[:_StrChunk] = rule_info("StrChunk", "< (@NormalChar | /_+/ &Alphanumeric)+ > { text }")
  Rules[:_EscapedChar] = rule_info("EscapedChar", "\"\\\\\" !@Newline < /[:\\\\`|*_{}\\[\\]()\#+.!><-]/ > { text }")
  Rules[:_Entity] = rule_info("Entity", "(HexEntity | DecEntity | CharEntity):a { a }")
  Rules[:_Endline] = rule_info("Endline", "(@LineBreak | @TerminalEndline | @NormalEndline)")
  Rules[:_NormalEndline] = rule_info("NormalEndline", "@Sp @Newline !@BlankLine !\">\" !AtxStart !(Line /={1,}|-{1,}/ @Newline) { \"\\n\" }")
  Rules[:_TerminalEndline] = rule_info("TerminalEndline", "@Sp @Newline @Eof")
  Rules[:_LineBreak] = rule_info("LineBreak", "\"  \" @NormalEndline { RDoc::Markup::HardBreak.new }")
  Rules[:_Symbol] = rule_info("Symbol", "< @SpecialChar > { text }")
  Rules[:_UlOrStarLine] = rule_info("UlOrStarLine", "(UlLine | StarLine):a { a }")
  Rules[:_StarLine] = rule_info("StarLine", "(< /\\*{4,}/ > { text } | < @Spacechar /\\*+/ &@Spacechar > { text })")
  Rules[:_UlLine] = rule_info("UlLine", "(< /_{4,}/ > { text } | < @Spacechar /_+/ &@Spacechar > { text })")
  Rules[:_Emph] = rule_info("Emph", "(EmphStar | EmphUl)")
  Rules[:_Whitespace] = rule_info("Whitespace", "(@Spacechar | @Newline)")
  Rules[:_EmphStar] = rule_info("EmphStar", "\"*\" !@Whitespace @StartList:a (!\"*\" Inline:b { a << b } | StrongStar:b { a << b })+ \"*\" { emphasis a.join }")
  Rules[:_EmphUl] = rule_info("EmphUl", "\"_\" !@Whitespace @StartList:a (!\"_\" Inline:b { a << b } | StrongUl:b { a << b })+ \"_\" { emphasis a.join }")
  Rules[:_Strong] = rule_info("Strong", "(StrongStar | StrongUl)")
  Rules[:_StrongStar] = rule_info("StrongStar", "\"**\" !@Whitespace @StartList:a (!\"**\" Inline:b { a << b })+ \"**\" { strong a.join }")
  Rules[:_StrongUl] = rule_info("StrongUl", "\"__\" !@Whitespace @StartList:a (!\"__\" Inline:b { a << b })+ \"__\" { strong a.join }")
  Rules[:_Strike] = rule_info("Strike", "&{ strike? } \"~~\" !@Whitespace @StartList:a (!\"~~\" Inline:b { a << b })+ \"~~\" { strike a.join }")
  Rules[:_Image] = rule_info("Image", "\"!\" (ExplicitLink | ReferenceLink):a { \"rdoc-image:\#{a[/\\[(.*)\\]/, 1]}\" }")
  Rules[:_Link] = rule_info("Link", "(ExplicitLink | ReferenceLink | AutoLink)")
  Rules[:_ReferenceLink] = rule_info("ReferenceLink", "(ReferenceLinkDouble | ReferenceLinkSingle)")
  Rules[:_ReferenceLinkDouble] = rule_info("ReferenceLinkDouble", "Label:content < Spnl > !\"[]\" Label:label { link_to content, label, text }")
  Rules[:_ReferenceLinkSingle] = rule_info("ReferenceLinkSingle", "Label:content < (Spnl \"[]\")? > { link_to content, content, text }")
  Rules[:_ExplicitLink] = rule_info("ExplicitLink", "Label:l \"(\" @Sp Source:s Spnl Title @Sp \")\" { \"{\#{l}}[\#{s}]\" }")
  Rules[:_Source] = rule_info("Source", "(\"<\" < SourceContents > \">\" | < SourceContents >) { text }")
  Rules[:_SourceContents] = rule_info("SourceContents", "((!\"(\" !\")\" !\">\" Nonspacechar)+ | \"(\" SourceContents \")\")*")
  Rules[:_Title] = rule_info("Title", "(TitleSingle | TitleDouble | \"\"):a { a }")
  Rules[:_TitleSingle] = rule_info("TitleSingle", "\"'\" (!(\"'\" @Sp (\")\" | @Newline)) .)* \"'\"")
  Rules[:_TitleDouble] = rule_info("TitleDouble", "\"\\\"\" (!(\"\\\"\" @Sp (\")\" | @Newline)) .)* \"\\\"\"")
  Rules[:_AutoLink] = rule_info("AutoLink", "(AutoLinkUrl | AutoLinkEmail)")
  Rules[:_AutoLinkUrl] = rule_info("AutoLinkUrl", "\"<\" < /[A-Za-z]+/ \"://\" (!@Newline !\">\" .)+ > \">\" { text }")
  Rules[:_AutoLinkEmail] = rule_info("AutoLinkEmail", "\"<\" \"mailto:\"? < /[\\w+.\\/!%~$-]+/i \"@\" (!@Newline !\">\" .)+ > \">\" { \"mailto:\#{text}\" }")
  Rules[:_Reference] = rule_info("Reference", "@NonindentSpace !\"[]\" Label:label \":\" Spnl RefSrc:link RefTitle @BlankLine+ { \# TODO use title               reference label, link               nil             }")
  Rules[:_Label] = rule_info("Label", "\"[\" (!\"^\" &{ notes? } | &. &{ !notes? }) @StartList:a (!\"]\" Inline:l { a << l })* \"]\" { a.join.gsub(/\\s+/, ' ') }")
  Rules[:_RefSrc] = rule_info("RefSrc", "< Nonspacechar+ > { text }")
  Rules[:_RefTitle] = rule_info("RefTitle", "(RefTitleSingle | RefTitleDouble | RefTitleParens | EmptyTitle)")
  Rules[:_EmptyTitle] = rule_info("EmptyTitle", "\"\"")
  Rules[:_RefTitleSingle] = rule_info("RefTitleSingle", "Spnl \"'\" < (!(\"'\" @Sp @Newline | @Newline) .)* > \"'\" { text }")
  Rules[:_RefTitleDouble] = rule_info("RefTitleDouble", "Spnl \"\\\"\" < (!(\"\\\"\" @Sp @Newline | @Newline) .)* > \"\\\"\" { text }")
  Rules[:_RefTitleParens] = rule_info("RefTitleParens", "Spnl \"(\" < (!(\")\" @Sp @Newline | @Newline) .)* > \")\" { text }")
  Rules[:_References] = rule_info("References", "(Reference | SkipBlock)*")
  Rules[:_Ticks1] = rule_info("Ticks1", "\"`\" !\"`\"")
  Rules[:_Ticks2] = rule_info("Ticks2", "\"``\" !\"`\"")
  Rules[:_Ticks3] = rule_info("Ticks3", "\"```\" !\"`\"")
  Rules[:_Ticks4] = rule_info("Ticks4", "\"````\" !\"`\"")
  Rules[:_Ticks5] = rule_info("Ticks5", "\"`````\" !\"`\"")
  Rules[:_Code] = rule_info("Code", "(Ticks1 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks1 /`+/ | !(@Sp Ticks1) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks1 | Ticks2 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks2 /`+/ | !(@Sp Ticks2) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks2 | Ticks3 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks3 /`+/ | !(@Sp Ticks3) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks3 | Ticks4 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks4 /`+/ | !(@Sp Ticks4) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks4 | Ticks5 @Sp < ((!\"`\" Nonspacechar)+ | !Ticks5 /`+/ | !(@Sp Ticks5) (@Spacechar | @Newline !@BlankLine))+ > @Sp Ticks5) { \"<code>\#{text}</code>\" }")
  Rules[:_RawHtml] = rule_info("RawHtml", "< (HtmlComment | HtmlBlockScript | HtmlTag) > { if html? then text else '' end }")
  Rules[:_BlankLine] = rule_info("BlankLine", "@Sp @Newline { \"\\n\" }")
  Rules[:_Quoted] = rule_info("Quoted", "(\"\\\"\" (!\"\\\"\" .)* \"\\\"\" | \"'\" (!\"'\" .)* \"'\")")
  Rules[:_HtmlAttribute] = rule_info("HtmlAttribute", "(AlphanumericAscii | \"-\")+ Spnl (\"=\" Spnl (Quoted | (!\">\" Nonspacechar)+))? Spnl")
  Rules[:_HtmlComment] = rule_info("HtmlComment", "\"<!--\" (!\"-->\" .)* \"-->\"")
  Rules[:_HtmlTag] = rule_info("HtmlTag", "\"<\" Spnl \"/\"? AlphanumericAscii+ Spnl HtmlAttribute* \"/\"? Spnl \">\"")
  Rules[:_Eof] = rule_info("Eof", "!.")
  Rules[:_Nonspacechar] = rule_info("Nonspacechar", "!@Spacechar !@Newline .")
  Rules[:_Sp] = rule_info("Sp", "@Spacechar*")
  Rules[:_Spnl] = rule_info("Spnl", "@Sp (@Newline @Sp)?")
  Rules[:_SpecialChar] = rule_info("SpecialChar", "(/[~*_`&\\[\\]()<!\#\\\\'\"]/ | @ExtendedSpecialChar)")
  Rules[:_NormalChar] = rule_info("NormalChar", "!(@SpecialChar | @Spacechar | @Newline) .")
  Rules[:_Digit] = rule_info("Digit", "[0-9]")
  Rules[:_Alphanumeric] = rule_info("Alphanumeric", "%literals.Alphanumeric")
  Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "%literals.AlphanumericAscii")
  Rules[:_BOM] = rule_info("BOM", "%literals.BOM")
  Rules[:_Newline] = rule_info("Newline", "%literals.Newline")
  Rules[:_Spacechar] = rule_info("Spacechar", "%literals.Spacechar")
  Rules[:_HexEntity] = rule_info("HexEntity", "/&\#x/i < /[0-9a-fA-F]+/ > \";\" { [text.to_i(16)].pack 'U' }")
  Rules[:_DecEntity] = rule_info("DecEntity", "\"&\#\" < /[0-9]+/ > \";\" { [text.to_i].pack 'U' }")
  Rules[:_CharEntity] = rule_info("CharEntity", "\"&\" < /[A-Za-z0-9]+/ > \";\" { if entity = HTML_ENTITIES[text] then                  entity.pack 'U*'                else                  \"&\#{text};\"                end              }")
  Rules[:_NonindentSpace] = rule_info("NonindentSpace", "/ {0,3}/")
  Rules[:_Indent] = rule_info("Indent", "/\\t|    /")
  Rules[:_IndentedLine] = rule_info("IndentedLine", "Indent Line")
  Rules[:_OptionallyIndentedLine] = rule_info("OptionallyIndentedLine", "Indent? Line")
  Rules[:_StartList] = rule_info("StartList", "&. { [] }")
  Rules[:_Line] = rule_info("Line", "@RawLine:a { a }")
  Rules[:_RawLine] = rule_info("RawLine", "(< (!\"\\r\" !\"\\n\" .)* @Newline > | < .+ > @Eof) { text }")
  Rules[:_SkipBlock] = rule_info("SkipBlock", "(HtmlBlock | (!\"\#\" !SetextBottom1 !SetextBottom2 !@BlankLine @RawLine)+ @BlankLine* | @BlankLine+ | @RawLine)")
  Rules[:_ExtendedSpecialChar] = rule_info("ExtendedSpecialChar", "&{ notes? } \"^\"")
  Rules[:_NoteReference] = rule_info("NoteReference", "&{ notes? } RawNoteReference:ref { note_for ref }")
  Rules[:_RawNoteReference] = rule_info("RawNoteReference", "\"[^\" < (!@Newline !\"]\" .)+ > \"]\" { text }")
  Rules[:_Note] = rule_info("Note", "&{ notes? } @NonindentSpace RawNoteReference:ref \":\" @Sp @StartList:a RawNoteBlock:i { a.concat i } (&Indent RawNoteBlock:i { a.concat i })* { @footnotes[ref] = paragraph a                    nil                 }")
  Rules[:_InlineNote] = rule_info("InlineNote", "&{ notes? } \"^[\" @StartList:a (!\"]\" Inline:l { a << l })+ \"]\" { ref = [:inline, @note_order.length]                @footnotes[ref] = paragraph a                 note_for ref              }")
  Rules[:_Notes] = rule_info("Notes", "(Note | SkipBlock)*")
  Rules[:_RawNoteBlock] = rule_info("RawNoteBlock", "@StartList:a (!@BlankLine OptionallyIndentedLine:l { a << l })+ < @BlankLine* > { a << text } { a }")
  Rules[:_CodeFence] = rule_info("CodeFence", "&{ github? } Ticks3 (@Sp StrChunk:format)? Spnl < ((!\"`\" Nonspacechar)+ | !Ticks3 /`+/ | Spacechar | @Newline)+ > Ticks3 @Sp @Newline* { verbatim = RDoc::Markup::Verbatim.new text               verbatim.format = format.intern if format.instance_of?(String)               verbatim             }")
  Rules[:_Table] = rule_info("Table", "&{ github? } TableRow:header TableLine:line TableRow+:body { table = RDoc::Markup::Table.new(header, line, body) }")
  Rules[:_TableRow] = rule_info("TableRow", "TableItem+:row \"|\" @Newline { row }")
  Rules[:_TableItem] = rule_info("TableItem", "\"|\" < (!\"|\" !@Newline .)+ > { text.strip }")
  Rules[:_TableLine] = rule_info("TableLine", "TableColumn+:line \"|\" @Newline { line }")
  Rules[:_TableColumn] = rule_info("TableColumn", "\"|\" < (\"-\"+ \":\"? | \":\" \"-\"*) > { text.start_with?(\":\") ? :left :                 text.end_with?(\":\") ? :right : nil               }")
  Rules[:_DefinitionList] = rule_info("DefinitionList", "&{ definition_lists? } DefinitionListItem+:list { RDoc::Markup::List.new :NOTE, *list.flatten }")
  Rules[:_DefinitionListItem] = rule_info("DefinitionListItem", "DefinitionListLabel+:label DefinitionListDefinition+:defns { list_items = []                        list_items <<                          RDoc::Markup::ListItem.new(label, defns.shift)                         list_items.concat defns.map { |defn|                          RDoc::Markup::ListItem.new nil, defn                        } unless list_items.empty?                         list_items                      }")
  Rules[:_DefinitionListLabel] = rule_info("DefinitionListLabel", "StrChunk:label @Sp @Newline { label }")
  Rules[:_DefinitionListDefinition] = rule_info("DefinitionListDefinition", "@NonindentSpace \":\" @Space Inlines:a @BlankLine+ { paragraph a }")
  # :startdoc:
end
PK."#[e�3��*gems/rdoc-6.4.1.1/lib/rdoc/token_stream.rbnu�[���# frozen_string_literal: true
##
# A TokenStream is a list of tokens, gathered during the parse of some entity
# (say a method). Entities populate these streams by being registered with the
# lexer. Any class can collect tokens by including TokenStream. From the
# outside, you use such an object by calling the start_collecting_tokens
# method, followed by calls to add_token and pop_token.

module RDoc::TokenStream

  ##
  # Converts +token_stream+ to HTML wrapping various tokens with
  # <tt><span></tt> elements. Some tokens types are wrapped in spans
  # with the given class names. Other token types are not wrapped in spans.

  def self.to_html token_stream
    starting_title = false

    token_stream.map do |t|
      next unless t

      style = case t[:kind]
              when :on_const   then 'ruby-constant'
              when :on_kw      then 'ruby-keyword'
              when :on_ivar    then 'ruby-ivar'
              when :on_cvar    then 'ruby-identifier'
              when :on_gvar    then 'ruby-identifier'
              when '=' != t[:text] && :on_op
                               then 'ruby-operator'
              when :on_tlambda then 'ruby-operator'
              when :on_ident   then 'ruby-identifier'
              when :on_label   then 'ruby-value'
              when :on_backref, :on_dstring
                               then 'ruby-node'
              when :on_comment then 'ruby-comment'
              when :on_embdoc  then 'ruby-comment'
              when :on_regexp  then 'ruby-regexp'
              when :on_tstring then 'ruby-string'
              when :on_int, :on_float,
                   :on_rational, :on_imaginary,
                   :on_heredoc,
                   :on_symbol, :on_CHAR then 'ruby-value'
              when :on_heredoc_beg, :on_heredoc_end
                               then 'ruby-identifier'
              end

      comment_with_nl = false
      if :on_comment == t[:kind] or :on_embdoc == t[:kind] or :on_heredoc_end == t[:kind]
        comment_with_nl = true if "\n" == t[:text][-1]
        text = t[:text].rstrip
      else
        text = t[:text]
      end

      if :on_ident == t[:kind] && starting_title
        starting_title = false
        style = 'ruby-identifier ruby-title'
      end

      if :on_kw == t[:kind] and 'def' == t[:text]
        starting_title = true
      end

      text = CGI.escapeHTML text

      if style then
        "<span class=\"#{style}\">#{text}</span>#{"\n" if comment_with_nl}"
      else
        text
      end
    end.join
  end

  ##
  # Adds +tokens+ to the collected tokens

  def add_tokens(tokens)
    @token_stream.concat(tokens)
  end

  ##
  # Adds one +token+ to the collected tokens

  def add_token(token)
    @token_stream.push(token)
  end

  ##
  # Starts collecting tokens

  def collect_tokens
    @token_stream = []
  end

  alias start_collecting_tokens collect_tokens

  ##
  # Remove the last token from the collected tokens

  def pop_token
    @token_stream.pop
  end

  ##
  # Current token stream

  def token_stream
    @token_stream
  end

  ##
  # Returns a string representation of the token stream

  def tokens_to_s
    token_stream.compact.map { |token| token[:text] }.join ''
  end

end

PK."#[�H"--'gems/rdoc-6.4.1.1/lib/rdoc/top_level.rbnu�[���# frozen_string_literal: true
##
# A TopLevel context is a representation of the contents of a single file

class RDoc::TopLevel < RDoc::Context

  MARSHAL_VERSION = 0 # :nodoc:

  ##
  # This TopLevel's File::Stat struct

  attr_accessor :file_stat

  ##
  # Relative name of this file

  attr_accessor :relative_name

  ##
  # Absolute name of this file

  attr_accessor :absolute_name

  ##
  # All the classes or modules that were declared in
  # this file. These are assigned to either +#classes_hash+
  # or +#modules_hash+ once we know what they really are.

  attr_reader :classes_or_modules

  attr_accessor :diagram # :nodoc:

  ##
  # The parser class that processed this file

  attr_reader :parser

  ##
  # Creates a new TopLevel for the file at +absolute_name+.  If documentation
  # is being generated outside the source dir +relative_name+ is relative to
  # the source directory.

  def initialize absolute_name, relative_name = absolute_name
    super()
    @name = nil
    @absolute_name = absolute_name
    @relative_name = relative_name
    @file_stat     = File.stat(absolute_name) rescue nil # HACK for testing
    @diagram       = nil
    @parser        = nil

    @classes_or_modules = []
  end

  def parser=(val)
    @parser = val
    @store.update_parser_of_file(absolute_name, val) if @store
    @parser
  end

  ##
  # An RDoc::TopLevel is equal to another with the same relative_name

  def == other
    self.class === other and @relative_name == other.relative_name
  end

  alias eql? ==

  ##
  # Adds +an_alias+ to +Object+ instead of +self+.

  def add_alias(an_alias)
    object_class.record_location self
    return an_alias unless @document_self
    object_class.add_alias an_alias
  end

  ##
  # Adds +constant+ to +Object+ instead of +self+.

  def add_constant constant
    object_class.record_location self
    return constant unless @document_self
    object_class.add_constant constant
  end

  ##
  # Adds +include+ to +Object+ instead of +self+.

  def add_include(include)
    object_class.record_location self
    return include unless @document_self
    object_class.add_include include
  end

  ##
  # Adds +method+ to +Object+ instead of +self+.

  def add_method(method)
    object_class.record_location self
    return method unless @document_self
    object_class.add_method method
  end

  ##
  # Adds class or module +mod+. Used in the building phase
  # by the Ruby parser.

  def add_to_classes_or_modules mod
    @classes_or_modules << mod
  end

  ##
  # Base name of this file

  def base_name
    File.basename @relative_name
  end

  alias name base_name

  ##
  # Only a TopLevel that contains text file) will be displayed.  See also
  # RDoc::CodeObject#display?

  def display?
    text? and super
  end

  ##
  # See RDoc::TopLevel::find_class_or_module
  #--
  # TODO Why do we search through all classes/modules found, not just the
  #       ones of this instance?

  def find_class_or_module name
    @store.find_class_or_module name
  end

  ##
  # Finds a class or module named +symbol+

  def find_local_symbol(symbol)
    find_class_or_module(symbol) || super
  end

  ##
  # Finds a module or class with +name+

  def find_module_named(name)
    find_class_or_module(name)
  end

  ##
  # Returns the relative name of this file

  def full_name
    @relative_name
  end

  ##
  # An RDoc::TopLevel has the same hash as another with the same
  # relative_name

  def hash
    @relative_name.hash
  end

  ##
  # URL for this with a +prefix+

  def http_url(prefix)
    path = [prefix, @relative_name.tr('.', '_')]

    File.join(*path.compact) + '.html'
  end

  def inspect # :nodoc:
    "#<%s:0x%x %p modules: %p classes: %p>" % [
      self.class, object_id,
      base_name,
      @modules.map { |n,m| m },
      @classes.map { |n,c| c }
    ]
  end

  ##
  # Time this file was last modified, if known

  def last_modified
    @file_stat ? file_stat.mtime : nil
  end

  ##
  # Dumps this TopLevel for use by ri.  See also #marshal_load

  def marshal_dump
    [
      MARSHAL_VERSION,
      @relative_name,
      @parser,
      parse(@comment),
    ]
  end

  ##
  # Loads this TopLevel from +array+.

  def marshal_load array # :nodoc:
    initialize array[1]

    @parser  = array[2]
    @comment = array[3]

    @file_stat          = nil
  end

  ##
  # Returns the NormalClass "Object", creating it if not found.
  #
  # Records +self+ as a location in "Object".

  def object_class
    @object_class ||= begin
      oc = @store.find_class_named('Object') || add_class(RDoc::NormalClass, 'Object')
      oc.record_location self
      oc
    end
  end

  ##
  # Base name of this file without the extension

  def page_name
    basename = File.basename @relative_name
    basename =~ /\.(rb|rdoc|txt|md)$/i

    $` || basename
  end

  ##
  # Path to this file for use with HTML generator output.

  def path
    http_url @store.rdoc.generator.file_dir
  end

  def pretty_print q # :nodoc:
    q.group 2, "[#{self.class}: ", "]" do
      q.text "base name: #{base_name.inspect}"
      q.breakable

      items = @modules.map { |n,m| m }
      items.concat @modules.map { |n,c| c }
      q.seplist items do |mod| q.pp mod end
    end
  end

  ##
  # Search record used by RDoc::Generator::JsonIndex

  def search_record
    return unless @parser < RDoc::Parser::Text

    [
      page_name,
      '',
      page_name,
      '',
      path,
      '',
      snippet(@comment),
    ]
  end

  ##
  # Is this TopLevel from a text file instead of a source code file?

  def text?
    @parser and @parser.include? RDoc::Parser::Text
  end

  def to_s # :nodoc:
    "file #{full_name}"
  end

end

PK."#[#��@@)gems/rdoc-6.4.1.1/lib/rdoc/stats/quiet.rbnu�[���# frozen_string_literal: true
##
# Stats printer that prints nothing

class RDoc::Stats::Quiet

  ##
  # Creates a new Quiet that will print nothing

  def initialize num_files
    @num_files = num_files
  end

  ##
  # Prints a message at the beginning of parsing

  def begin_adding(*) end

  ##
  # Prints when an alias is added

  def print_alias(*) end

  ##
  # Prints when an attribute is added

  def print_attribute(*) end

  ##
  # Prints when a class is added

  def print_class(*) end

  ##
  # Prints when a constant is added

  def print_constant(*) end

  ##
  # Prints when a file is added

  def print_file(*) end

  ##
  # Prints when a method is added

  def print_method(*) end

  ##
  # Prints when a module is added

  def print_module(*) end

  ##
  # Prints when RDoc is done

  def done_adding(*) end

end

PK."#[�
����+gems/rdoc-6.4.1.1/lib/rdoc/stats/verbose.rbnu�[���# frozen_string_literal: true
##
# Stats printer that prints everything documented, including the documented
# status

class RDoc::Stats::Verbose < RDoc::Stats::Normal

  ##
  # Returns a marker for RDoc::CodeObject +co+ being undocumented

  def nodoc co
    " (undocumented)" unless co.documented?
  end

  def print_alias as # :nodoc:
    puts "    alias #{as.new_name} #{as.old_name}#{nodoc as}"
  end

  def print_attribute attribute # :nodoc:
    puts "    #{attribute.definition} #{attribute.name}#{nodoc attribute}"
  end

  def print_class(klass) # :nodoc:
    puts "  class #{klass.full_name}#{nodoc klass}"
  end

  def print_constant(constant) # :nodoc:
    puts "    #{constant.name}#{nodoc constant}"
  end

  def print_file(files_so_far, file) # :nodoc:
    super
    puts
  end

  def print_method(method) # :nodoc:
    puts "    #{method.singleton ? '::' : '#'}#{method.name}#{nodoc method}"
  end

  def print_module(mod) # :nodoc:
    puts "  module #{mod.full_name}#{nodoc mod}"
  end

end


PK."#[9)-$00*gems/rdoc-6.4.1.1/lib/rdoc/stats/normal.rbnu�[���# frozen_string_literal: true
begin
  require 'io/console/size'
rescue LoadError
  # for JRuby
  require 'io/console'
end

##
# Stats printer that prints just the files being documented with a progress
# bar

class RDoc::Stats::Normal < RDoc::Stats::Quiet

  def begin_adding # :nodoc:
    puts "Parsing sources..."
    @last_width = 0
  end

  ##
  # Prints a file with a progress bar

  def print_file files_so_far, filename
    progress_bar = sprintf("%3d%% [%2d/%2d]  ",
                           100 * files_so_far / @num_files,
                           files_so_far,
                           @num_files)

    if $stdout.tty?
      # Print a progress bar, but make sure it fits on a single line. Filename
      # will be truncated if necessary.
      size = IO.respond_to?(:console_size) ? IO.console_size : IO.console.winsize
      terminal_width = size[1].to_i.nonzero? || 80
      max_filename_size = (terminal_width - progress_bar.size) - 1

      if filename.size > max_filename_size then
        # Turn "some_long_filename.rb" to "...ong_filename.rb"
        filename = filename[(filename.size - max_filename_size) .. -1]
        filename[0..2] = "..."
      end

      # Clean the line with whitespaces so that leftover output from the
      # previous line doesn't show up.
      $stdout.print("\r\e[K") if @last_width && @last_width > 0
      @last_width = progress_bar.size + filename.size
      term = "\r"
    else
      term = "\n"
    end
    $stdout.print(progress_bar, filename, term)
    $stdout.flush
  end

  def done_adding # :nodoc:
    puts
  end

end
PK."#[�M���-gems/rdoc-6.4.1.1/lib/rdoc/context/section.rbnu�[���# frozen_string_literal: true
##
# A section of documentation like:
#
#   # :section: The title
#   # The body
#
# Sections can be referenced multiple times and will be collapsed into a
# single section.

class RDoc::Context::Section

  include RDoc::Text

  MARSHAL_VERSION = 0 # :nodoc:

  ##
  # Section comment

  attr_reader :comment

  ##
  # Section comments

  attr_reader :comments

  ##
  # Context this Section lives in

  attr_reader :parent

  ##
  # Section title

  attr_reader :title

  ##
  # Creates a new section with +title+ and +comment+

  def initialize parent, title, comment
    @parent = parent
    @title = title ? title.strip : title

    @comments = []

    add_comment comment
  end

  ##
  # Sections are equal when they have the same #title

  def == other
    self.class === other and @title == other.title
  end

  alias eql? ==

  ##
  # Adds +comment+ to this section

  def add_comment comment
    comment = extract_comment comment

    return if comment.empty?

    case comment
    when RDoc::Comment then
      @comments << comment
    when RDoc::Markup::Document then
      @comments.concat comment.parts
    when Array then
      @comments.concat comment
    else
      raise TypeError, "unknown comment type: #{comment.inspect}"
    end
  end

  ##
  # Anchor reference for linking to this section

  def aref
    title = @title || '[untitled]'

    CGI.escape(title).gsub('%', '-').sub(/^-/, '')
  end

  ##
  # Extracts the comment for this section from the original comment block.
  # If the first line contains :section:, strip it and use the rest.
  # Otherwise remove lines up to the line containing :section:, and look
  # for those lines again at the end and remove them. This lets us write
  #
  #   # :section: The title
  #   # The body

  def extract_comment comment
    case comment
    when Array then
      comment.map do |c|
        extract_comment c
      end
    when nil
      RDoc::Comment.new ''
    when RDoc::Comment then
      if comment.text =~ /^#[ \t]*:section:.*\n/ then
        start = $`
        rest = $'

        comment.text = if start.empty? then
                         rest
                       else
                         rest.sub(/#{start.chomp}\Z/, '')
                       end
      end

      comment
    when RDoc::Markup::Document then
      comment
    else
      raise TypeError, "unknown comment #{comment.inspect}"
    end
  end

  def inspect # :nodoc:
    "#<%s:0x%x %p>" % [self.class, object_id, title]
  end

  def hash # :nodoc:
    @title.hash
  end

  ##
  # The files comments in this section come from

  def in_files
    return [] if @comments.empty?

    case @comments
    when Array then
      @comments.map do |comment|
        comment.file
      end
    when RDoc::Markup::Document then
      @comment.parts.map do |document|
        document.file
      end
    else
      raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
    end
  end

  ##
  # Serializes this Section.  The title and parsed comment are saved, but not
  # the section parent which must be restored manually.

  def marshal_dump
    [
      MARSHAL_VERSION,
      @title,
      parse,
    ]
  end

  ##
  # De-serializes this Section.  The section parent must be restored manually.

  def marshal_load array
    @parent  = nil

    @title    = array[1]
    @comments = array[2]
  end

  ##
  # Parses +comment_location+ into an RDoc::Markup::Document composed of
  # multiple RDoc::Markup::Documents with their file set.

  def parse
    case @comments
    when String then
      super
    when Array then
      docs = @comments.map do |comment, location|
        doc = super comment
        doc.file = location if location
        doc
      end

      RDoc::Markup::Document.new(*docs)
    when RDoc::Comment then
      doc = super @comments.text, comments.format
      doc.file = @comments.location
      doc
    when RDoc::Markup::Document then
      return @comments
    else
      raise ArgumentError, "unknown comment class #{comments.class}"
    end
  end

  ##
  # The section's title, or 'Top Section' if the title is nil.
  #
  # This is used by the table of contents template so the name is silly.

  def plain_html
    @title || 'Top Section'
  end

  ##
  # Removes a comment from this section if it is from the same file as
  # +comment+

  def remove_comment comment
    return if @comments.empty?

    case @comments
    when Array then
      @comments.delete_if do |my_comment|
        my_comment.file == comment.file
      end
    when RDoc::Markup::Document then
      @comments.parts.delete_if do |document|
        document.file == comment.file.name
      end
    else
      raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
    end
  end

end

PK."#[g�*���*gems/rdoc-6.4.1.1/lib/rdoc/code_objects.rbnu�[���# frozen_string_literal: true
# This file was used to load all the RDoc::CodeObject subclasses at once.  Now
# autoload handles this.

require 'rdoc'

PK."#[�R5���*gems/rdoc-6.4.1.1/lib/rdoc/ghost_method.rbnu�[���# frozen_string_literal: true
##
# GhostMethod represents a method referenced only by a comment

class RDoc::GhostMethod < RDoc::AnyMethod
end

PK."#[zk�3� � (gems/rdoc-6.4.1.1/lib/rdoc/any_method.rbnu�[���# frozen_string_literal: true
##
# AnyMethod is the base class for objects representing methods

class RDoc::AnyMethod < RDoc::MethodAttr

  ##
  # 2::
  #   RDoc 4
  #   Added calls_super
  #   Added parent name and class
  #   Added section title
  # 3::
  #   RDoc 4.1
  #   Added is_alias_for

  MARSHAL_VERSION = 3 # :nodoc:

  ##
  # Don't rename \#initialize to \::new

  attr_accessor :dont_rename_initialize

  ##
  # The C function that implements this method (if it was defined in a C file)

  attr_accessor :c_function

  # The section title of the method (if defined in a C file via +:category:+)
  attr_accessor :section_title

  # Parameters for this method

  attr_accessor :params

  ##
  # If true this method uses +super+ to call a superclass version

  attr_accessor :calls_super

  include RDoc::TokenStream

  ##
  # Creates a new AnyMethod with a token stream +text+ and +name+

  def initialize text, name
    super

    @c_function = nil
    @dont_rename_initialize = false
    @token_stream = nil
    @calls_super = false
    @superclass_method = nil
  end

  ##
  # Adds +an_alias+ as an alias for this method in +context+.

  def add_alias an_alias, context = nil
    method = self.class.new an_alias.text, an_alias.new_name

    method.record_location an_alias.file
    method.singleton = self.singleton
    method.params = self.params
    method.visibility = self.visibility
    method.comment = an_alias.comment
    method.is_alias_for = self
    @aliases << method
    context.add_method method if context
    method
  end

  ##
  # Prefix for +aref+ is 'method'.

  def aref_prefix
    'method'
  end

  ##
  # The call_seq or the param_seq with method name, if there is no call_seq.
  #
  # Use this for displaying a method's argument lists.

  def arglists
    if @call_seq then
      @call_seq
    elsif @params then
      "#{name}#{param_seq}"
    end
  end

  ##
  # Different ways to call this method

  def call_seq
    unless call_seq = _call_seq
      call_seq = is_alias_for._call_seq if is_alias_for
    end

    return unless call_seq

    deduplicate_call_seq(call_seq)
  end

  ##
  # Sets the different ways you can call this method.  If an empty +call_seq+
  # is given nil is assumed.
  #
  # See also #param_seq

  def call_seq= call_seq
    return if call_seq.empty?

    @call_seq = call_seq
  end

  ##
  # Loads is_alias_for from the internal name.  Returns nil if the alias
  # cannot be found.

  def is_alias_for # :nodoc:
    case @is_alias_for
    when RDoc::MethodAttr then
      @is_alias_for
    when Array then
      return nil unless @store

      klass_name, singleton, method_name = @is_alias_for

      return nil unless klass = @store.find_class_or_module(klass_name)

      @is_alias_for = klass.find_method method_name, singleton
    end
  end

  ##
  # Dumps this AnyMethod for use by ri.  See also #marshal_load

  def marshal_dump
    aliases = @aliases.map do |a|
      [a.name, parse(a.comment)]
    end

    is_alias_for = [
      @is_alias_for.parent.full_name,
      @is_alias_for.singleton,
      @is_alias_for.name
    ] if @is_alias_for

    [ MARSHAL_VERSION,
      @name,
      full_name,
      @singleton,
      @visibility,
      parse(@comment),
      @call_seq,
      @block_params,
      aliases,
      @params,
      @file.relative_name,
      @calls_super,
      @parent.name,
      @parent.class,
      @section.title,
      is_alias_for,
    ]
  end

  ##
  # Loads this AnyMethod from +array+.  For a loaded AnyMethod the following
  # methods will return cached values:
  #
  # * #full_name
  # * #parent_name

  def marshal_load array
    initialize_visibility

    @dont_rename_initialize = nil
    @token_stream           = nil
    @aliases                = []
    @parent                 = nil
    @parent_name            = nil
    @parent_class           = nil
    @section                = nil
    @file                   = nil

    version        = array[0]
    @name          = array[1]
    @full_name     = array[2]
    @singleton     = array[3]
    @visibility    = array[4]
    @comment       = array[5]
    @call_seq      = array[6]
    @block_params  = array[7]
    #                      8 handled below
    @params        = array[9]
    #                      10 handled below
    @calls_super   = array[11]
    @parent_name   = array[12]
    @parent_title  = array[13]
    @section_title = array[14]
    @is_alias_for  = array[15]

    array[8].each do |new_name, comment|
      add_alias RDoc::Alias.new(nil, @name, new_name, comment, @singleton)
    end

    @parent_name ||= if @full_name =~ /#/ then
                       $`
                     else
                       name = @full_name.split('::')
                       name.pop
                       name.join '::'
                     end

    @file = RDoc::TopLevel.new array[10] if version > 0
  end

  ##
  # Method name
  #
  # If the method has no assigned name, it extracts it from #call_seq.

  def name
    return @name if @name

    @name =
      @call_seq[/^.*?\.(\w+)/, 1] ||
      @call_seq[/^.*?(\w+)/, 1] ||
      @call_seq if @call_seq
  end

  ##
  # A list of this method's method and yield parameters.  +call-seq+ params
  # are preferred over parsed method and block params.

  def param_list
    if @call_seq then
      params = @call_seq.split("\n").last
      params = params.sub(/.*?\((.*)\)/, '\1')
      params = params.sub(/(\{|do)\s*\|([^|]*)\|.*/, ',\2')
    elsif @params then
      params = @params.sub(/\((.*)\)/, '\1')

      params << ",#{@block_params}" if @block_params
    elsif @block_params then
      params = @block_params
    else
      return []
    end

    if @block_params then
      # If this method has explicit block parameters, remove any explicit
      # &block
      params = params.sub(/,?\s*&\w+/, '')
    else
      params = params.sub(/\&(\w+)/, '\1')
    end

    params = params.gsub(/\s+/, '').split(',').reject(&:empty?)

    params.map { |param| param.sub(/=.*/, '') }
  end

  ##
  # Pretty parameter list for this method.  If the method's parameters were
  # given by +call-seq+ it is preferred over the parsed values.

  def param_seq
    if @call_seq then
      params = @call_seq.split("\n").last
      params = params.sub(/[^( ]+/, '')
      params = params.sub(/(\|[^|]+\|)\s*\.\.\.\s*(end|\})/, '\1 \2')
    elsif @params then
      params = @params.gsub(/\s*\#.*/, '')
      params = params.tr_s("\n ", " ")
      params = "(#{params})" unless params[0] == ?(
    else
      params = ''
    end

    if @block_params then
      # If this method has explicit block parameters, remove any explicit
      # &block
      params = params.sub(/,?\s*&\w+/, '')

      block = @block_params.tr_s("\n ", " ")
      if block[0] == ?(
        block = block.sub(/^\(/, '').sub(/\)/, '')
      end
      params << " { |#{block}| ... }"
    end

    params
  end

  ##
  # Sets the store for this method and its referenced code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  ##
  # For methods that +super+, find the superclass method that would be called.

  def superclass_method
    return unless @calls_super
    return @superclass_method if @superclass_method

    parent.each_ancestor do |ancestor|
      if method = ancestor.method_list.find { |m| m.name == @name } then
        @superclass_method = method
        break
      end
    end

    @superclass_method
  end

  protected

  ##
  # call_seq without deduplication and alias lookup.

  def _call_seq
    @call_seq if defined?(@call_seq) && @call_seq
  end

  private

  ##
  # call_seq with alias examples information removed, if this
  # method is an alias method.

  def deduplicate_call_seq(call_seq)
    return call_seq unless is_alias_for || !aliases.empty?

    method_name = self.name
    method_name = method_name[0, 1] if method_name =~ /\A\[/

    entries = call_seq.split "\n"

    ignore = aliases.map(&:name)
    if is_alias_for
      ignore << is_alias_for.name
      ignore.concat is_alias_for.aliases.map(&:name)
    end
    ignore.map! { |n| n =~ /\A\[/ ? n[0, 1] : n}
    ignore.delete(method_name)
    ignore = Regexp.union(ignore)

    matching = entries.reject do |entry|
      entry =~ /^\w*\.?#{ignore}/ or
        entry =~ /\s#{ignore}\s/
    end

    matching.empty? ? nil : matching.join("\n")
  end
end
PK."#[c��7��%gems/rdoc-6.4.1.1/lib/rdoc/comment.rbnu�[���# frozen_string_literal: true
##
# A comment holds the text comment for a RDoc::CodeObject and provides a
# unified way of cleaning it up and parsing it into an RDoc::Markup::Document.
#
# Each comment may have a different markup format set by #format=.  By default
# 'rdoc' is used.  The :markup: directive tells RDoc which format to use.
#
# See RDoc::Markup@Other+directives for instructions on adding an alternate
# format.

class RDoc::Comment

  include RDoc::Text

  ##
  # The format of this comment.  Defaults to RDoc::Markup

  attr_reader :format

  ##
  # The RDoc::TopLevel this comment was found in

  attr_accessor :location

  ##
  # Line where this Comment was written

  attr_accessor :line

  ##
  # For duck-typing when merging classes at load time

  alias file location # :nodoc:

  ##
  # The text for this comment

  attr_reader :text

  ##
  # Alias for text

  alias to_s text

  ##
  # Overrides the content returned by #parse.  Use when there is no #text
  # source for this comment

  attr_writer   :document

  ##
  # Creates a new comment with +text+ that is found in the RDoc::TopLevel
  # +location+.

  def initialize text = nil, location = nil, language = nil
    @location = location
    @text     = text.nil? ? nil : text.dup
    @language = language

    @document   = nil
    @format     = 'rdoc'
    @normalized = false
  end

  ##
  #--
  # TODO deep copy @document

  def initialize_copy copy # :nodoc:
    @text = copy.text.dup
  end

  def == other # :nodoc:
    self.class === other and
      other.text == @text and other.location == @location
  end

  ##
  # Look for a 'call-seq' in the comment to override the normal parameter
  # handling.  The :call-seq: is indented from the baseline.  All lines of the
  # same indentation level and prefix are consumed.
  #
  # For example, all of the following will be used as the :call-seq:
  #
  #   # :call-seq:
  #   #   ARGF.readlines(sep=$/)     -> array
  #   #   ARGF.readlines(limit)      -> array
  #   #   ARGF.readlines(sep, limit) -> array
  #   #
  #   #   ARGF.to_a(sep=$/)     -> array
  #   #   ARGF.to_a(limit)      -> array
  #   #   ARGF.to_a(sep, limit) -> array

  def extract_call_seq method
    # we must handle situations like the above followed by an unindented first
    # comment.  The difficulty is to make sure not to match lines starting
    # with ARGF at the same indent, but that are after the first description
    # paragraph.
    if @text =~ /^\s*:?call-seq:(.*?(?:\S).*?)^\s*$/m then
      all_start, all_stop = $~.offset(0)
      seq_start, seq_stop = $~.offset(1)

      # we get the following lines that start with the leading word at the
      # same indent, even if they have blank lines before
      if $1 =~ /(^\s*\n)+^(\s*\w+)/m then
        leading = $2 # ' *    ARGF' in the example above
        re = %r%
          \A(
             (^\s*\n)+
             (^#{Regexp.escape leading}.*?\n)+
            )+
          ^\s*$
        %xm

        if @text[seq_stop..-1] =~ re then
          all_stop = seq_stop + $~.offset(0).last
          seq_stop = seq_stop + $~.offset(1).last
        end
      end

      seq = @text[seq_start..seq_stop]
      seq.gsub!(/^\s*(\S|\n)/m, '\1')
      @text.slice! all_start...all_stop

      method.call_seq = seq.chomp

    else
      regexp = /^\s*:?call-seq:(.*?)(^\s*$|\z)/m
      if regexp =~ @text then
        @text = @text.sub(regexp, '')
        seq = $1
        seq.gsub!(/^\s*/, '')
        method.call_seq = seq
      end
    end

    method
  end

  ##
  # A comment is empty if its text String is empty.

  def empty?
    @text.empty?
  end

  ##
  # HACK dubious

  def encode! encoding
    # TODO: Remove this condition after Ruby 2.2 EOL
    if RUBY_VERSION < '2.3.0'
      @text = @text.force_encoding encoding
    else
      @text = String.new @text, encoding: encoding
    end
    self
  end

  ##
  # Sets the format of this comment and resets any parsed document

  def format= format
    @format = format
    @document = nil
  end

  def inspect # :nodoc:
    location = @location ? @location.relative_name : '(unknown)'

    "#<%s:%x %s %p>" % [self.class, object_id, location, @text]
  end

  ##
  # Normalizes the text.  See RDoc::Text#normalize_comment for details

  def normalize
    return self unless @text
    return self if @normalized # TODO eliminate duplicate normalization

    @text = normalize_comment @text

    @normalized = true

    self
  end

  ##
  # Was this text normalized?

  def normalized? # :nodoc:
    @normalized
  end

  ##
  # Parses the comment into an RDoc::Markup::Document.  The parsed document is
  # cached until the text is changed.

  def parse
    return @document if @document

    @document = super @text, @format
    @document.file = @location
    @document
  end

  ##
  # Removes private sections from this comment.  Private sections are flush to
  # the comment marker and start with <tt>--</tt> and end with <tt>++</tt>.
  # For C-style comments, a private marker may not start at the opening of the
  # comment.
  #
  #   /*
  #    *--
  #    * private
  #    *++
  #    * public
  #    */

  def remove_private
    # Workaround for gsub encoding for Ruby 1.9.2 and earlier
    empty = ''
    empty = RDoc::Encoding.change_encoding empty, @text.encoding

    @text = @text.gsub(%r%^\s*([#*]?)--.*?^\s*(\1)\+\+\n?%m, empty)
    @text = @text.sub(%r%^\s*[#*]?--.*%m, '')
  end

  ##
  # Replaces this comment's text with +text+ and resets the parsed document.
  #
  # An error is raised if the comment contains a document but no text.

  def text= text
    raise RDoc::Error, 'replacing document-only comment is not allowed' if
      @text.nil? and @document

    @document = nil
    @text = text.nil? ? nil : text.dup
  end

  ##
  # Returns true if this comment is in TomDoc format.

  def tomdoc?
    @format == 'tomdoc'
  end

end
PK."#[|y����*gems/rdoc-6.4.1.1/lib/rdoc/single_class.rbnu�[���# frozen_string_literal: true
##
# A singleton class

class RDoc::SingleClass < RDoc::ClassModule

  ##
  # Adds the superclass to the included modules.

  def ancestors
    superclass ? super + [superclass] : super
  end

  def aref_prefix # :nodoc:
    'sclass'
  end

  ##
  # The definition of this singleton class, <tt>class << MyClassName</tt>

  def definition
    "class << #{full_name}"
  end

end

PK."#[OG�!�!�/gems/rdoc-6.4.1.1/lib/rdoc/markdown/entities.rbnu�[���# frozen_string_literal: true
##
# HTML entity name map for RDoc::Markdown

RDoc::Markdown::HTML_ENTITIES = {
  "AElig" => [0x000C6],
  "AMP" => [0x00026],
  "Aacute" => [0x000C1],
  "Abreve" => [0x00102],
  "Acirc" => [0x000C2],
  "Acy" => [0x00410],
  "Afr" => [0x1D504],
  "Agrave" => [0x000C0],
  "Alpha" => [0x00391],
  "Amacr" => [0x00100],
  "And" => [0x02A53],
  "Aogon" => [0x00104],
  "Aopf" => [0x1D538],
  "ApplyFunction" => [0x02061],
  "Aring" => [0x000C5],
  "Ascr" => [0x1D49C],
  "Assign" => [0x02254],
  "Atilde" => [0x000C3],
  "Auml" => [0x000C4],
  "Backslash" => [0x02216],
  "Barv" => [0x02AE7],
  "Barwed" => [0x02306],
  "Bcy" => [0x00411],
  "Because" => [0x02235],
  "Bernoullis" => [0x0212C],
  "Beta" => [0x00392],
  "Bfr" => [0x1D505],
  "Bopf" => [0x1D539],
  "Breve" => [0x002D8],
  "Bscr" => [0x0212C],
  "Bumpeq" => [0x0224E],
  "CHcy" => [0x00427],
  "COPY" => [0x000A9],
  "Cacute" => [0x00106],
  "Cap" => [0x022D2],
  "CapitalDifferentialD" => [0x02145],
  "Cayleys" => [0x0212D],
  "Ccaron" => [0x0010C],
  "Ccedil" => [0x000C7],
  "Ccirc" => [0x00108],
  "Cconint" => [0x02230],
  "Cdot" => [0x0010A],
  "Cedilla" => [0x000B8],
  "CenterDot" => [0x000B7],
  "Cfr" => [0x0212D],
  "Chi" => [0x003A7],
  "CircleDot" => [0x02299],
  "CircleMinus" => [0x02296],
  "CirclePlus" => [0x02295],
  "CircleTimes" => [0x02297],
  "ClockwiseContourIntegral" => [0x02232],
  "CloseCurlyDoubleQuote" => [0x0201D],
  "CloseCurlyQuote" => [0x02019],
  "Colon" => [0x02237],
  "Colone" => [0x02A74],
  "Congruent" => [0x02261],
  "Conint" => [0x0222F],
  "ContourIntegral" => [0x0222E],
  "Copf" => [0x02102],
  "Coproduct" => [0x02210],
  "CounterClockwiseContourIntegral" => [0x02233],
  "Cross" => [0x02A2F],
  "Cscr" => [0x1D49E],
  "Cup" => [0x022D3],
  "CupCap" => [0x0224D],
  "DD" => [0x02145],
  "DDotrahd" => [0x02911],
  "DJcy" => [0x00402],
  "DScy" => [0x00405],
  "DZcy" => [0x0040F],
  "Dagger" => [0x02021],
  "Darr" => [0x021A1],
  "Dashv" => [0x02AE4],
  "Dcaron" => [0x0010E],
  "Dcy" => [0x00414],
  "Del" => [0x02207],
  "Delta" => [0x00394],
  "Dfr" => [0x1D507],
  "DiacriticalAcute" => [0x000B4],
  "DiacriticalDot" => [0x002D9],
  "DiacriticalDoubleAcute" => [0x002DD],
  "DiacriticalGrave" => [0x00060],
  "DiacriticalTilde" => [0x002DC],
  "Diamond" => [0x022C4],
  "DifferentialD" => [0x02146],
  "Dopf" => [0x1D53B],
  "Dot" => [0x000A8],
  "DotDot" => [0x020DC],
  "DotEqual" => [0x02250],
  "DoubleContourIntegral" => [0x0222F],
  "DoubleDot" => [0x000A8],
  "DoubleDownArrow" => [0x021D3],
  "DoubleLeftArrow" => [0x021D0],
  "DoubleLeftRightArrow" => [0x021D4],
  "DoubleLeftTee" => [0x02AE4],
  "DoubleLongLeftArrow" => [0x027F8],
  "DoubleLongLeftRightArrow" => [0x027FA],
  "DoubleLongRightArrow" => [0x027F9],
  "DoubleRightArrow" => [0x021D2],
  "DoubleRightTee" => [0x022A8],
  "DoubleUpArrow" => [0x021D1],
  "DoubleUpDownArrow" => [0x021D5],
  "DoubleVerticalBar" => [0x02225],
  "DownArrow" => [0x02193],
  "DownArrowBar" => [0x02913],
  "DownArrowUpArrow" => [0x021F5],
  "DownBreve" => [0x00311],
  "DownLeftRightVector" => [0x02950],
  "DownLeftTeeVector" => [0x0295E],
  "DownLeftVector" => [0x021BD],
  "DownLeftVectorBar" => [0x02956],
  "DownRightTeeVector" => [0x0295F],
  "DownRightVector" => [0x021C1],
  "DownRightVectorBar" => [0x02957],
  "DownTee" => [0x022A4],
  "DownTeeArrow" => [0x021A7],
  "Downarrow" => [0x021D3],
  "Dscr" => [0x1D49F],
  "Dstrok" => [0x00110],
  "ENG" => [0x0014A],
  "ETH" => [0x000D0],
  "Eacute" => [0x000C9],
  "Ecaron" => [0x0011A],
  "Ecirc" => [0x000CA],
  "Ecy" => [0x0042D],
  "Edot" => [0x00116],
  "Efr" => [0x1D508],
  "Egrave" => [0x000C8],
  "Element" => [0x02208],
  "Emacr" => [0x00112],
  "EmptySmallSquare" => [0x025FB],
  "EmptyVerySmallSquare" => [0x025AB],
  "Eogon" => [0x00118],
  "Eopf" => [0x1D53C],
  "Epsilon" => [0x00395],
  "Equal" => [0x02A75],
  "EqualTilde" => [0x02242],
  "Equilibrium" => [0x021CC],
  "Escr" => [0x02130],
  "Esim" => [0x02A73],
  "Eta" => [0x00397],
  "Euml" => [0x000CB],
  "Exists" => [0x02203],
  "ExponentialE" => [0x02147],
  "Fcy" => [0x00424],
  "Ffr" => [0x1D509],
  "FilledSmallSquare" => [0x025FC],
  "FilledVerySmallSquare" => [0x025AA],
  "Fopf" => [0x1D53D],
  "ForAll" => [0x02200],
  "Fouriertrf" => [0x02131],
  "Fscr" => [0x02131],
  "GJcy" => [0x00403],
  "GT" => [0x0003E],
  "Gamma" => [0x00393],
  "Gammad" => [0x003DC],
  "Gbreve" => [0x0011E],
  "Gcedil" => [0x00122],
  "Gcirc" => [0x0011C],
  "Gcy" => [0x00413],
  "Gdot" => [0x00120],
  "Gfr" => [0x1D50A],
  "Gg" => [0x022D9],
  "Gopf" => [0x1D53E],
  "GreaterEqual" => [0x02265],
  "GreaterEqualLess" => [0x022DB],
  "GreaterFullEqual" => [0x02267],
  "GreaterGreater" => [0x02AA2],
  "GreaterLess" => [0x02277],
  "GreaterSlantEqual" => [0x02A7E],
  "GreaterTilde" => [0x02273],
  "Gscr" => [0x1D4A2],
  "Gt" => [0x0226B],
  "HARDcy" => [0x0042A],
  "Hacek" => [0x002C7],
  "Hat" => [0x0005E],
  "Hcirc" => [0x00124],
  "Hfr" => [0x0210C],
  "HilbertSpace" => [0x0210B],
  "Hopf" => [0x0210D],
  "HorizontalLine" => [0x02500],
  "Hscr" => [0x0210B],
  "Hstrok" => [0x00126],
  "HumpDownHump" => [0x0224E],
  "HumpEqual" => [0x0224F],
  "IEcy" => [0x00415],
  "IJlig" => [0x00132],
  "IOcy" => [0x00401],
  "Iacute" => [0x000CD],
  "Icirc" => [0x000CE],
  "Icy" => [0x00418],
  "Idot" => [0x00130],
  "Ifr" => [0x02111],
  "Igrave" => [0x000CC],
  "Im" => [0x02111],
  "Imacr" => [0x0012A],
  "ImaginaryI" => [0x02148],
  "Implies" => [0x021D2],
  "Int" => [0x0222C],
  "Integral" => [0x0222B],
  "Intersection" => [0x022C2],
  "InvisibleComma" => [0x02063],
  "InvisibleTimes" => [0x02062],
  "Iogon" => [0x0012E],
  "Iopf" => [0x1D540],
  "Iota" => [0x00399],
  "Iscr" => [0x02110],
  "Itilde" => [0x00128],
  "Iukcy" => [0x00406],
  "Iuml" => [0x000CF],
  "Jcirc" => [0x00134],
  "Jcy" => [0x00419],
  "Jfr" => [0x1D50D],
  "Jopf" => [0x1D541],
  "Jscr" => [0x1D4A5],
  "Jsercy" => [0x00408],
  "Jukcy" => [0x00404],
  "KHcy" => [0x00425],
  "KJcy" => [0x0040C],
  "Kappa" => [0x0039A],
  "Kcedil" => [0x00136],
  "Kcy" => [0x0041A],
  "Kfr" => [0x1D50E],
  "Kopf" => [0x1D542],
  "Kscr" => [0x1D4A6],
  "LJcy" => [0x00409],
  "LT" => [0x0003C],
  "Lacute" => [0x00139],
  "Lambda" => [0x0039B],
  "Lang" => [0x027EA],
  "Laplacetrf" => [0x02112],
  "Larr" => [0x0219E],
  "Lcaron" => [0x0013D],
  "Lcedil" => [0x0013B],
  "Lcy" => [0x0041B],
  "LeftAngleBracket" => [0x027E8],
  "LeftArrow" => [0x02190],
  "LeftArrowBar" => [0x021E4],
  "LeftArrowRightArrow" => [0x021C6],
  "LeftCeiling" => [0x02308],
  "LeftDoubleBracket" => [0x027E6],
  "LeftDownTeeVector" => [0x02961],
  "LeftDownVector" => [0x021C3],
  "LeftDownVectorBar" => [0x02959],
  "LeftFloor" => [0x0230A],
  "LeftRightArrow" => [0x02194],
  "LeftRightVector" => [0x0294E],
  "LeftTee" => [0x022A3],
  "LeftTeeArrow" => [0x021A4],
  "LeftTeeVector" => [0x0295A],
  "LeftTriangle" => [0x022B2],
  "LeftTriangleBar" => [0x029CF],
  "LeftTriangleEqual" => [0x022B4],
  "LeftUpDownVector" => [0x02951],
  "LeftUpTeeVector" => [0x02960],
  "LeftUpVector" => [0x021BF],
  "LeftUpVectorBar" => [0x02958],
  "LeftVector" => [0x021BC],
  "LeftVectorBar" => [0x02952],
  "Leftarrow" => [0x021D0],
  "Leftrightarrow" => [0x021D4],
  "LessEqualGreater" => [0x022DA],
  "LessFullEqual" => [0x02266],
  "LessGreater" => [0x02276],
  "LessLess" => [0x02AA1],
  "LessSlantEqual" => [0x02A7D],
  "LessTilde" => [0x02272],
  "Lfr" => [0x1D50F],
  "Ll" => [0x022D8],
  "Lleftarrow" => [0x021DA],
  "Lmidot" => [0x0013F],
  "LongLeftArrow" => [0x027F5],
  "LongLeftRightArrow" => [0x027F7],
  "LongRightArrow" => [0x027F6],
  "Longleftarrow" => [0x027F8],
  "Longleftrightarrow" => [0x027FA],
  "Longrightarrow" => [0x027F9],
  "Lopf" => [0x1D543],
  "LowerLeftArrow" => [0x02199],
  "LowerRightArrow" => [0x02198],
  "Lscr" => [0x02112],
  "Lsh" => [0x021B0],
  "Lstrok" => [0x00141],
  "Lt" => [0x0226A],
  "Map" => [0x02905],
  "Mcy" => [0x0041C],
  "MediumSpace" => [0x0205F],
  "Mellintrf" => [0x02133],
  "Mfr" => [0x1D510],
  "MinusPlus" => [0x02213],
  "Mopf" => [0x1D544],
  "Mscr" => [0x02133],
  "Mu" => [0x0039C],
  "NJcy" => [0x0040A],
  "Nacute" => [0x00143],
  "Ncaron" => [0x00147],
  "Ncedil" => [0x00145],
  "Ncy" => [0x0041D],
  "NegativeMediumSpace" => [0x0200B],
  "NegativeThickSpace" => [0x0200B],
  "NegativeThinSpace" => [0x0200B],
  "NegativeVeryThinSpace" => [0x0200B],
  "NestedGreaterGreater" => [0x0226B],
  "NestedLessLess" => [0x0226A],
  "NewLine" => [0x0000A],
  "Nfr" => [0x1D511],
  "NoBreak" => [0x02060],
  "NonBreakingSpace" => [0x000A0],
  "Nopf" => [0x02115],
  "Not" => [0x02AEC],
  "NotCongruent" => [0x02262],
  "NotCupCap" => [0x0226D],
  "NotDoubleVerticalBar" => [0x02226],
  "NotElement" => [0x02209],
  "NotEqual" => [0x02260],
  "NotEqualTilde" => [0x02242, 0x00338],
  "NotExists" => [0x02204],
  "NotGreater" => [0x0226F],
  "NotGreaterEqual" => [0x02271],
  "NotGreaterFullEqual" => [0x02267, 0x00338],
  "NotGreaterGreater" => [0x0226B, 0x00338],
  "NotGreaterLess" => [0x02279],
  "NotGreaterSlantEqual" => [0x02A7E, 0x00338],
  "NotGreaterTilde" => [0x02275],
  "NotHumpDownHump" => [0x0224E, 0x00338],
  "NotHumpEqual" => [0x0224F, 0x00338],
  "NotLeftTriangle" => [0x022EA],
  "NotLeftTriangleBar" => [0x029CF, 0x00338],
  "NotLeftTriangleEqual" => [0x022EC],
  "NotLess" => [0x0226E],
  "NotLessEqual" => [0x02270],
  "NotLessGreater" => [0x02278],
  "NotLessLess" => [0x0226A, 0x00338],
  "NotLessSlantEqual" => [0x02A7D, 0x00338],
  "NotLessTilde" => [0x02274],
  "NotNestedGreaterGreater" => [0x02AA2, 0x00338],
  "NotNestedLessLess" => [0x02AA1, 0x00338],
  "NotPrecedes" => [0x02280],
  "NotPrecedesEqual" => [0x02AAF, 0x00338],
  "NotPrecedesSlantEqual" => [0x022E0],
  "NotReverseElement" => [0x0220C],
  "NotRightTriangle" => [0x022EB],
  "NotRightTriangleBar" => [0x029D0, 0x00338],
  "NotRightTriangleEqual" => [0x022ED],
  "NotSquareSubset" => [0x0228F, 0x00338],
  "NotSquareSubsetEqual" => [0x022E2],
  "NotSquareSuperset" => [0x02290, 0x00338],
  "NotSquareSupersetEqual" => [0x022E3],
  "NotSubset" => [0x02282, 0x020D2],
  "NotSubsetEqual" => [0x02288],
  "NotSucceeds" => [0x02281],
  "NotSucceedsEqual" => [0x02AB0, 0x00338],
  "NotSucceedsSlantEqual" => [0x022E1],
  "NotSucceedsTilde" => [0x0227F, 0x00338],
  "NotSuperset" => [0x02283, 0x020D2],
  "NotSupersetEqual" => [0x02289],
  "NotTilde" => [0x02241],
  "NotTildeEqual" => [0x02244],
  "NotTildeFullEqual" => [0x02247],
  "NotTildeTilde" => [0x02249],
  "NotVerticalBar" => [0x02224],
  "Nscr" => [0x1D4A9],
  "Ntilde" => [0x000D1],
  "Nu" => [0x0039D],
  "OElig" => [0x00152],
  "Oacute" => [0x000D3],
  "Ocirc" => [0x000D4],
  "Ocy" => [0x0041E],
  "Odblac" => [0x00150],
  "Ofr" => [0x1D512],
  "Ograve" => [0x000D2],
  "Omacr" => [0x0014C],
  "Omega" => [0x003A9],
  "Omicron" => [0x0039F],
  "Oopf" => [0x1D546],
  "OpenCurlyDoubleQuote" => [0x0201C],
  "OpenCurlyQuote" => [0x02018],
  "Or" => [0x02A54],
  "Oscr" => [0x1D4AA],
  "Oslash" => [0x000D8],
  "Otilde" => [0x000D5],
  "Otimes" => [0x02A37],
  "Ouml" => [0x000D6],
  "OverBar" => [0x0203E],
  "OverBrace" => [0x023DE],
  "OverBracket" => [0x023B4],
  "OverParenthesis" => [0x023DC],
  "PartialD" => [0x02202],
  "Pcy" => [0x0041F],
  "Pfr" => [0x1D513],
  "Phi" => [0x003A6],
  "Pi" => [0x003A0],
  "PlusMinus" => [0x000B1],
  "Poincareplane" => [0x0210C],
  "Popf" => [0x02119],
  "Pr" => [0x02ABB],
  "Precedes" => [0x0227A],
  "PrecedesEqual" => [0x02AAF],
  "PrecedesSlantEqual" => [0x0227C],
  "PrecedesTilde" => [0x0227E],
  "Prime" => [0x02033],
  "Product" => [0x0220F],
  "Proportion" => [0x02237],
  "Proportional" => [0x0221D],
  "Pscr" => [0x1D4AB],
  "Psi" => [0x003A8],
  "QUOT" => [0x00022],
  "Qfr" => [0x1D514],
  "Qopf" => [0x0211A],
  "Qscr" => [0x1D4AC],
  "RBarr" => [0x02910],
  "REG" => [0x000AE],
  "Racute" => [0x00154],
  "Rang" => [0x027EB],
  "Rarr" => [0x021A0],
  "Rarrtl" => [0x02916],
  "Rcaron" => [0x00158],
  "Rcedil" => [0x00156],
  "Rcy" => [0x00420],
  "Re" => [0x0211C],
  "ReverseElement" => [0x0220B],
  "ReverseEquilibrium" => [0x021CB],
  "ReverseUpEquilibrium" => [0x0296F],
  "Rfr" => [0x0211C],
  "Rho" => [0x003A1],
  "RightAngleBracket" => [0x027E9],
  "RightArrow" => [0x02192],
  "RightArrowBar" => [0x021E5],
  "RightArrowLeftArrow" => [0x021C4],
  "RightCeiling" => [0x02309],
  "RightDoubleBracket" => [0x027E7],
  "RightDownTeeVector" => [0x0295D],
  "RightDownVector" => [0x021C2],
  "RightDownVectorBar" => [0x02955],
  "RightFloor" => [0x0230B],
  "RightTee" => [0x022A2],
  "RightTeeArrow" => [0x021A6],
  "RightTeeVector" => [0x0295B],
  "RightTriangle" => [0x022B3],
  "RightTriangleBar" => [0x029D0],
  "RightTriangleEqual" => [0x022B5],
  "RightUpDownVector" => [0x0294F],
  "RightUpTeeVector" => [0x0295C],
  "RightUpVector" => [0x021BE],
  "RightUpVectorBar" => [0x02954],
  "RightVector" => [0x021C0],
  "RightVectorBar" => [0x02953],
  "Rightarrow" => [0x021D2],
  "Ropf" => [0x0211D],
  "RoundImplies" => [0x02970],
  "Rrightarrow" => [0x021DB],
  "Rscr" => [0x0211B],
  "Rsh" => [0x021B1],
  "RuleDelayed" => [0x029F4],
  "SHCHcy" => [0x00429],
  "SHcy" => [0x00428],
  "SOFTcy" => [0x0042C],
  "Sacute" => [0x0015A],
  "Sc" => [0x02ABC],
  "Scaron" => [0x00160],
  "Scedil" => [0x0015E],
  "Scirc" => [0x0015C],
  "Scy" => [0x00421],
  "Sfr" => [0x1D516],
  "ShortDownArrow" => [0x02193],
  "ShortLeftArrow" => [0x02190],
  "ShortRightArrow" => [0x02192],
  "ShortUpArrow" => [0x02191],
  "Sigma" => [0x003A3],
  "SmallCircle" => [0x02218],
  "Sopf" => [0x1D54A],
  "Sqrt" => [0x0221A],
  "Square" => [0x025A1],
  "SquareIntersection" => [0x02293],
  "SquareSubset" => [0x0228F],
  "SquareSubsetEqual" => [0x02291],
  "SquareSuperset" => [0x02290],
  "SquareSupersetEqual" => [0x02292],
  "SquareUnion" => [0x02294],
  "Sscr" => [0x1D4AE],
  "Star" => [0x022C6],
  "Sub" => [0x022D0],
  "Subset" => [0x022D0],
  "SubsetEqual" => [0x02286],
  "Succeeds" => [0x0227B],
  "SucceedsEqual" => [0x02AB0],
  "SucceedsSlantEqual" => [0x0227D],
  "SucceedsTilde" => [0x0227F],
  "SuchThat" => [0x0220B],
  "Sum" => [0x02211],
  "Sup" => [0x022D1],
  "Superset" => [0x02283],
  "SupersetEqual" => [0x02287],
  "Supset" => [0x022D1],
  "THORN" => [0x000DE],
  "TRADE" => [0x02122],
  "TSHcy" => [0x0040B],
  "TScy" => [0x00426],
  "Tab" => [0x00009],
  "Tau" => [0x003A4],
  "Tcaron" => [0x00164],
  "Tcedil" => [0x00162],
  "Tcy" => [0x00422],
  "Tfr" => [0x1D517],
  "Therefore" => [0x02234],
  "Theta" => [0x00398],
  "ThickSpace" => [0x0205F, 0x0200A],
  "ThinSpace" => [0x02009],
  "Tilde" => [0x0223C],
  "TildeEqual" => [0x02243],
  "TildeFullEqual" => [0x02245],
  "TildeTilde" => [0x02248],
  "Topf" => [0x1D54B],
  "TripleDot" => [0x020DB],
  "Tscr" => [0x1D4AF],
  "Tstrok" => [0x00166],
  "Uacute" => [0x000DA],
  "Uarr" => [0x0219F],
  "Uarrocir" => [0x02949],
  "Ubrcy" => [0x0040E],
  "Ubreve" => [0x0016C],
  "Ucirc" => [0x000DB],
  "Ucy" => [0x00423],
  "Udblac" => [0x00170],
  "Ufr" => [0x1D518],
  "Ugrave" => [0x000D9],
  "Umacr" => [0x0016A],
  "UnderBar" => [0x0005F],
  "UnderBrace" => [0x023DF],
  "UnderBracket" => [0x023B5],
  "UnderParenthesis" => [0x023DD],
  "Union" => [0x022C3],
  "UnionPlus" => [0x0228E],
  "Uogon" => [0x00172],
  "Uopf" => [0x1D54C],
  "UpArrow" => [0x02191],
  "UpArrowBar" => [0x02912],
  "UpArrowDownArrow" => [0x021C5],
  "UpDownArrow" => [0x02195],
  "UpEquilibrium" => [0x0296E],
  "UpTee" => [0x022A5],
  "UpTeeArrow" => [0x021A5],
  "Uparrow" => [0x021D1],
  "Updownarrow" => [0x021D5],
  "UpperLeftArrow" => [0x02196],
  "UpperRightArrow" => [0x02197],
  "Upsi" => [0x003D2],
  "Upsilon" => [0x003A5],
  "Uring" => [0x0016E],
  "Uscr" => [0x1D4B0],
  "Utilde" => [0x00168],
  "Uuml" => [0x000DC],
  "VDash" => [0x022AB],
  "Vbar" => [0x02AEB],
  "Vcy" => [0x00412],
  "Vdash" => [0x022A9],
  "Vdashl" => [0x02AE6],
  "Vee" => [0x022C1],
  "Verbar" => [0x02016],
  "Vert" => [0x02016],
  "VerticalBar" => [0x02223],
  "VerticalLine" => [0x0007C],
  "VerticalSeparator" => [0x02758],
  "VerticalTilde" => [0x02240],
  "VeryThinSpace" => [0x0200A],
  "Vfr" => [0x1D519],
  "Vopf" => [0x1D54D],
  "Vscr" => [0x1D4B1],
  "Vvdash" => [0x022AA],
  "Wcirc" => [0x00174],
  "Wedge" => [0x022C0],
  "Wfr" => [0x1D51A],
  "Wopf" => [0x1D54E],
  "Wscr" => [0x1D4B2],
  "Xfr" => [0x1D51B],
  "Xi" => [0x0039E],
  "Xopf" => [0x1D54F],
  "Xscr" => [0x1D4B3],
  "YAcy" => [0x0042F],
  "YIcy" => [0x00407],
  "YUcy" => [0x0042E],
  "Yacute" => [0x000DD],
  "Ycirc" => [0x00176],
  "Ycy" => [0x0042B],
  "Yfr" => [0x1D51C],
  "Yopf" => [0x1D550],
  "Yscr" => [0x1D4B4],
  "Yuml" => [0x00178],
  "ZHcy" => [0x00416],
  "Zacute" => [0x00179],
  "Zcaron" => [0x0017D],
  "Zcy" => [0x00417],
  "Zdot" => [0x0017B],
  "ZeroWidthSpace" => [0x0200B],
  "Zeta" => [0x00396],
  "Zfr" => [0x02128],
  "Zopf" => [0x02124],
  "Zscr" => [0x1D4B5],
  "aacute" => [0x000E1],
  "abreve" => [0x00103],
  "ac" => [0x0223E],
  "acE" => [0x0223E, 0x00333],
  "acd" => [0x0223F],
  "acirc" => [0x000E2],
  "acute" => [0x000B4],
  "acy" => [0x00430],
  "aelig" => [0x000E6],
  "af" => [0x02061],
  "afr" => [0x1D51E],
  "agrave" => [0x000E0],
  "alefsym" => [0x02135],
  "aleph" => [0x02135],
  "alpha" => [0x003B1],
  "amacr" => [0x00101],
  "amalg" => [0x02A3F],
  "amp" => [0x00026],
  "and" => [0x02227],
  "andand" => [0x02A55],
  "andd" => [0x02A5C],
  "andslope" => [0x02A58],
  "andv" => [0x02A5A],
  "ang" => [0x02220],
  "ange" => [0x029A4],
  "angle" => [0x02220],
  "angmsd" => [0x02221],
  "angmsdaa" => [0x029A8],
  "angmsdab" => [0x029A9],
  "angmsdac" => [0x029AA],
  "angmsdad" => [0x029AB],
  "angmsdae" => [0x029AC],
  "angmsdaf" => [0x029AD],
  "angmsdag" => [0x029AE],
  "angmsdah" => [0x029AF],
  "angrt" => [0x0221F],
  "angrtvb" => [0x022BE],
  "angrtvbd" => [0x0299D],
  "angsph" => [0x02222],
  "angst" => [0x000C5],
  "angzarr" => [0x0237C],
  "aogon" => [0x00105],
  "aopf" => [0x1D552],
  "ap" => [0x02248],
  "apE" => [0x02A70],
  "apacir" => [0x02A6F],
  "ape" => [0x0224A],
  "apid" => [0x0224B],
  "apos" => [0x00027],
  "approx" => [0x02248],
  "approxeq" => [0x0224A],
  "aring" => [0x000E5],
  "ascr" => [0x1D4B6],
  "ast" => [0x0002A],
  "asymp" => [0x02248],
  "asympeq" => [0x0224D],
  "atilde" => [0x000E3],
  "auml" => [0x000E4],
  "awconint" => [0x02233],
  "awint" => [0x02A11],
  "bNot" => [0x02AED],
  "backcong" => [0x0224C],
  "backepsilon" => [0x003F6],
  "backprime" => [0x02035],
  "backsim" => [0x0223D],
  "backsimeq" => [0x022CD],
  "barvee" => [0x022BD],
  "barwed" => [0x02305],
  "barwedge" => [0x02305],
  "bbrk" => [0x023B5],
  "bbrktbrk" => [0x023B6],
  "bcong" => [0x0224C],
  "bcy" => [0x00431],
  "bdquo" => [0x0201E],
  "becaus" => [0x02235],
  "because" => [0x02235],
  "bemptyv" => [0x029B0],
  "bepsi" => [0x003F6],
  "bernou" => [0x0212C],
  "beta" => [0x003B2],
  "beth" => [0x02136],
  "between" => [0x0226C],
  "bfr" => [0x1D51F],
  "bigcap" => [0x022C2],
  "bigcirc" => [0x025EF],
  "bigcup" => [0x022C3],
  "bigodot" => [0x02A00],
  "bigoplus" => [0x02A01],
  "bigotimes" => [0x02A02],
  "bigsqcup" => [0x02A06],
  "bigstar" => [0x02605],
  "bigtriangledown" => [0x025BD],
  "bigtriangleup" => [0x025B3],
  "biguplus" => [0x02A04],
  "bigvee" => [0x022C1],
  "bigwedge" => [0x022C0],
  "bkarow" => [0x0290D],
  "blacklozenge" => [0x029EB],
  "blacksquare" => [0x025AA],
  "blacktriangle" => [0x025B4],
  "blacktriangledown" => [0x025BE],
  "blacktriangleleft" => [0x025C2],
  "blacktriangleright" => [0x025B8],
  "blank" => [0x02423],
  "blk12" => [0x02592],
  "blk14" => [0x02591],
  "blk34" => [0x02593],
  "block" => [0x02588],
  "bne" => [0x0003D, 0x020E5],
  "bnequiv" => [0x02261, 0x020E5],
  "bnot" => [0x02310],
  "bopf" => [0x1D553],
  "bot" => [0x022A5],
  "bottom" => [0x022A5],
  "bowtie" => [0x022C8],
  "boxDL" => [0x02557],
  "boxDR" => [0x02554],
  "boxDl" => [0x02556],
  "boxDr" => [0x02553],
  "boxH" => [0x02550],
  "boxHD" => [0x02566],
  "boxHU" => [0x02569],
  "boxHd" => [0x02564],
  "boxHu" => [0x02567],
  "boxUL" => [0x0255D],
  "boxUR" => [0x0255A],
  "boxUl" => [0x0255C],
  "boxUr" => [0x02559],
  "boxV" => [0x02551],
  "boxVH" => [0x0256C],
  "boxVL" => [0x02563],
  "boxVR" => [0x02560],
  "boxVh" => [0x0256B],
  "boxVl" => [0x02562],
  "boxVr" => [0x0255F],
  "boxbox" => [0x029C9],
  "boxdL" => [0x02555],
  "boxdR" => [0x02552],
  "boxdl" => [0x02510],
  "boxdr" => [0x0250C],
  "boxh" => [0x02500],
  "boxhD" => [0x02565],
  "boxhU" => [0x02568],
  "boxhd" => [0x0252C],
  "boxhu" => [0x02534],
  "boxminus" => [0x0229F],
  "boxplus" => [0x0229E],
  "boxtimes" => [0x022A0],
  "boxuL" => [0x0255B],
  "boxuR" => [0x02558],
  "boxul" => [0x02518],
  "boxur" => [0x02514],
  "boxv" => [0x02502],
  "boxvH" => [0x0256A],
  "boxvL" => [0x02561],
  "boxvR" => [0x0255E],
  "boxvh" => [0x0253C],
  "boxvl" => [0x02524],
  "boxvr" => [0x0251C],
  "bprime" => [0x02035],
  "breve" => [0x002D8],
  "brvbar" => [0x000A6],
  "bscr" => [0x1D4B7],
  "bsemi" => [0x0204F],
  "bsim" => [0x0223D],
  "bsime" => [0x022CD],
  "bsol" => [0x0005C],
  "bsolb" => [0x029C5],
  "bsolhsub" => [0x027C8],
  "bull" => [0x02022],
  "bullet" => [0x02022],
  "bump" => [0x0224E],
  "bumpE" => [0x02AAE],
  "bumpe" => [0x0224F],
  "bumpeq" => [0x0224F],
  "cacute" => [0x00107],
  "cap" => [0x02229],
  "capand" => [0x02A44],
  "capbrcup" => [0x02A49],
  "capcap" => [0x02A4B],
  "capcup" => [0x02A47],
  "capdot" => [0x02A40],
  "caps" => [0x02229, 0x0FE00],
  "caret" => [0x02041],
  "caron" => [0x002C7],
  "ccaps" => [0x02A4D],
  "ccaron" => [0x0010D],
  "ccedil" => [0x000E7],
  "ccirc" => [0x00109],
  "ccups" => [0x02A4C],
  "ccupssm" => [0x02A50],
  "cdot" => [0x0010B],
  "cedil" => [0x000B8],
  "cemptyv" => [0x029B2],
  "cent" => [0x000A2],
  "centerdot" => [0x000B7],
  "cfr" => [0x1D520],
  "chcy" => [0x00447],
  "check" => [0x02713],
  "checkmark" => [0x02713],
  "chi" => [0x003C7],
  "cir" => [0x025CB],
  "cirE" => [0x029C3],
  "circ" => [0x002C6],
  "circeq" => [0x02257],
  "circlearrowleft" => [0x021BA],
  "circlearrowright" => [0x021BB],
  "circledR" => [0x000AE],
  "circledS" => [0x024C8],
  "circledast" => [0x0229B],
  "circledcirc" => [0x0229A],
  "circleddash" => [0x0229D],
  "cire" => [0x02257],
  "cirfnint" => [0x02A10],
  "cirmid" => [0x02AEF],
  "cirscir" => [0x029C2],
  "clubs" => [0x02663],
  "clubsuit" => [0x02663],
  "colon" => [0x0003A],
  "colone" => [0x02254],
  "coloneq" => [0x02254],
  "comma" => [0x0002C],
  "commat" => [0x00040],
  "comp" => [0x02201],
  "compfn" => [0x02218],
  "complement" => [0x02201],
  "complexes" => [0x02102],
  "cong" => [0x02245],
  "congdot" => [0x02A6D],
  "conint" => [0x0222E],
  "copf" => [0x1D554],
  "coprod" => [0x02210],
  "copy" => [0x000A9],
  "copysr" => [0x02117],
  "crarr" => [0x021B5],
  "cross" => [0x02717],
  "cscr" => [0x1D4B8],
  "csub" => [0x02ACF],
  "csube" => [0x02AD1],
  "csup" => [0x02AD0],
  "csupe" => [0x02AD2],
  "ctdot" => [0x022EF],
  "cudarrl" => [0x02938],
  "cudarrr" => [0x02935],
  "cuepr" => [0x022DE],
  "cuesc" => [0x022DF],
  "cularr" => [0x021B6],
  "cularrp" => [0x0293D],
  "cup" => [0x0222A],
  "cupbrcap" => [0x02A48],
  "cupcap" => [0x02A46],
  "cupcup" => [0x02A4A],
  "cupdot" => [0x0228D],
  "cupor" => [0x02A45],
  "cups" => [0x0222A, 0x0FE00],
  "curarr" => [0x021B7],
  "curarrm" => [0x0293C],
  "curlyeqprec" => [0x022DE],
  "curlyeqsucc" => [0x022DF],
  "curlyvee" => [0x022CE],
  "curlywedge" => [0x022CF],
  "curren" => [0x000A4],
  "curvearrowleft" => [0x021B6],
  "curvearrowright" => [0x021B7],
  "cuvee" => [0x022CE],
  "cuwed" => [0x022CF],
  "cwconint" => [0x02232],
  "cwint" => [0x02231],
  "cylcty" => [0x0232D],
  "dArr" => [0x021D3],
  "dHar" => [0x02965],
  "dagger" => [0x02020],
  "daleth" => [0x02138],
  "darr" => [0x02193],
  "dash" => [0x02010],
  "dashv" => [0x022A3],
  "dbkarow" => [0x0290F],
  "dblac" => [0x002DD],
  "dcaron" => [0x0010F],
  "dcy" => [0x00434],
  "dd" => [0x02146],
  "ddagger" => [0x02021],
  "ddarr" => [0x021CA],
  "ddotseq" => [0x02A77],
  "deg" => [0x000B0],
  "delta" => [0x003B4],
  "demptyv" => [0x029B1],
  "dfisht" => [0x0297F],
  "dfr" => [0x1D521],
  "dharl" => [0x021C3],
  "dharr" => [0x021C2],
  "diam" => [0x022C4],
  "diamond" => [0x022C4],
  "diamondsuit" => [0x02666],
  "diams" => [0x02666],
  "die" => [0x000A8],
  "digamma" => [0x003DD],
  "disin" => [0x022F2],
  "div" => [0x000F7],
  "divide" => [0x000F7],
  "divideontimes" => [0x022C7],
  "divonx" => [0x022C7],
  "djcy" => [0x00452],
  "dlcorn" => [0x0231E],
  "dlcrop" => [0x0230D],
  "dollar" => [0x00024],
  "dopf" => [0x1D555],
  "dot" => [0x002D9],
  "doteq" => [0x02250],
  "doteqdot" => [0x02251],
  "dotminus" => [0x02238],
  "dotplus" => [0x02214],
  "dotsquare" => [0x022A1],
  "doublebarwedge" => [0x02306],
  "downarrow" => [0x02193],
  "downdownarrows" => [0x021CA],
  "downharpoonleft" => [0x021C3],
  "downharpoonright" => [0x021C2],
  "drbkarow" => [0x02910],
  "drcorn" => [0x0231F],
  "drcrop" => [0x0230C],
  "dscr" => [0x1D4B9],
  "dscy" => [0x00455],
  "dsol" => [0x029F6],
  "dstrok" => [0x00111],
  "dtdot" => [0x022F1],
  "dtri" => [0x025BF],
  "dtrif" => [0x025BE],
  "duarr" => [0x021F5],
  "duhar" => [0x0296F],
  "dwangle" => [0x029A6],
  "dzcy" => [0x0045F],
  "dzigrarr" => [0x027FF],
  "eDDot" => [0x02A77],
  "eDot" => [0x02251],
  "eacute" => [0x000E9],
  "easter" => [0x02A6E],
  "ecaron" => [0x0011B],
  "ecir" => [0x02256],
  "ecirc" => [0x000EA],
  "ecolon" => [0x02255],
  "ecy" => [0x0044D],
  "edot" => [0x00117],
  "ee" => [0x02147],
  "efDot" => [0x02252],
  "efr" => [0x1D522],
  "eg" => [0x02A9A],
  "egrave" => [0x000E8],
  "egs" => [0x02A96],
  "egsdot" => [0x02A98],
  "el" => [0x02A99],
  "elinters" => [0x023E7],
  "ell" => [0x02113],
  "els" => [0x02A95],
  "elsdot" => [0x02A97],
  "emacr" => [0x00113],
  "empty" => [0x02205],
  "emptyset" => [0x02205],
  "emptyv" => [0x02205],
  "emsp" => [0x02003],
  "emsp13" => [0x02004],
  "emsp14" => [0x02005],
  "eng" => [0x0014B],
  "ensp" => [0x02002],
  "eogon" => [0x00119],
  "eopf" => [0x1D556],
  "epar" => [0x022D5],
  "eparsl" => [0x029E3],
  "eplus" => [0x02A71],
  "epsi" => [0x003B5],
  "epsilon" => [0x003B5],
  "epsiv" => [0x003F5],
  "eqcirc" => [0x02256],
  "eqcolon" => [0x02255],
  "eqsim" => [0x02242],
  "eqslantgtr" => [0x02A96],
  "eqslantless" => [0x02A95],
  "equals" => [0x0003D],
  "equest" => [0x0225F],
  "equiv" => [0x02261],
  "equivDD" => [0x02A78],
  "eqvparsl" => [0x029E5],
  "erDot" => [0x02253],
  "erarr" => [0x02971],
  "escr" => [0x0212F],
  "esdot" => [0x02250],
  "esim" => [0x02242],
  "eta" => [0x003B7],
  "eth" => [0x000F0],
  "euml" => [0x000EB],
  "euro" => [0x020AC],
  "excl" => [0x00021],
  "exist" => [0x02203],
  "expectation" => [0x02130],
  "exponentiale" => [0x02147],
  "fallingdotseq" => [0x02252],
  "fcy" => [0x00444],
  "female" => [0x02640],
  "ffilig" => [0x0FB03],
  "fflig" => [0x0FB00],
  "ffllig" => [0x0FB04],
  "ffr" => [0x1D523],
  "filig" => [0x0FB01],
  "fjlig" => [0x00066, 0x0006A],
  "flat" => [0x0266D],
  "fllig" => [0x0FB02],
  "fltns" => [0x025B1],
  "fnof" => [0x00192],
  "fopf" => [0x1D557],
  "forall" => [0x02200],
  "fork" => [0x022D4],
  "forkv" => [0x02AD9],
  "fpartint" => [0x02A0D],
  "frac12" => [0x000BD],
  "frac13" => [0x02153],
  "frac14" => [0x000BC],
  "frac15" => [0x02155],
  "frac16" => [0x02159],
  "frac18" => [0x0215B],
  "frac23" => [0x02154],
  "frac25" => [0x02156],
  "frac34" => [0x000BE],
  "frac35" => [0x02157],
  "frac38" => [0x0215C],
  "frac45" => [0x02158],
  "frac56" => [0x0215A],
  "frac58" => [0x0215D],
  "frac78" => [0x0215E],
  "frasl" => [0x02044],
  "frown" => [0x02322],
  "fscr" => [0x1D4BB],
  "gE" => [0x02267],
  "gEl" => [0x02A8C],
  "gacute" => [0x001F5],
  "gamma" => [0x003B3],
  "gammad" => [0x003DD],
  "gap" => [0x02A86],
  "gbreve" => [0x0011F],
  "gcirc" => [0x0011D],
  "gcy" => [0x00433],
  "gdot" => [0x00121],
  "ge" => [0x02265],
  "gel" => [0x022DB],
  "geq" => [0x02265],
  "geqq" => [0x02267],
  "geqslant" => [0x02A7E],
  "ges" => [0x02A7E],
  "gescc" => [0x02AA9],
  "gesdot" => [0x02A80],
  "gesdoto" => [0x02A82],
  "gesdotol" => [0x02A84],
  "gesl" => [0x022DB, 0x0FE00],
  "gesles" => [0x02A94],
  "gfr" => [0x1D524],
  "gg" => [0x0226B],
  "ggg" => [0x022D9],
  "gimel" => [0x02137],
  "gjcy" => [0x00453],
  "gl" => [0x02277],
  "glE" => [0x02A92],
  "gla" => [0x02AA5],
  "glj" => [0x02AA4],
  "gnE" => [0x02269],
  "gnap" => [0x02A8A],
  "gnapprox" => [0x02A8A],
  "gne" => [0x02A88],
  "gneq" => [0x02A88],
  "gneqq" => [0x02269],
  "gnsim" => [0x022E7],
  "gopf" => [0x1D558],
  "grave" => [0x00060],
  "gscr" => [0x0210A],
  "gsim" => [0x02273],
  "gsime" => [0x02A8E],
  "gsiml" => [0x02A90],
  "gt" => [0x0003E],
  "gtcc" => [0x02AA7],
  "gtcir" => [0x02A7A],
  "gtdot" => [0x022D7],
  "gtlPar" => [0x02995],
  "gtquest" => [0x02A7C],
  "gtrapprox" => [0x02A86],
  "gtrarr" => [0x02978],
  "gtrdot" => [0x022D7],
  "gtreqless" => [0x022DB],
  "gtreqqless" => [0x02A8C],
  "gtrless" => [0x02277],
  "gtrsim" => [0x02273],
  "gvertneqq" => [0x02269, 0x0FE00],
  "gvnE" => [0x02269, 0x0FE00],
  "hArr" => [0x021D4],
  "hairsp" => [0x0200A],
  "half" => [0x000BD],
  "hamilt" => [0x0210B],
  "hardcy" => [0x0044A],
  "harr" => [0x02194],
  "harrcir" => [0x02948],
  "harrw" => [0x021AD],
  "hbar" => [0x0210F],
  "hcirc" => [0x00125],
  "hearts" => [0x02665],
  "heartsuit" => [0x02665],
  "hellip" => [0x02026],
  "hercon" => [0x022B9],
  "hfr" => [0x1D525],
  "hksearow" => [0x02925],
  "hkswarow" => [0x02926],
  "hoarr" => [0x021FF],
  "homtht" => [0x0223B],
  "hookleftarrow" => [0x021A9],
  "hookrightarrow" => [0x021AA],
  "hopf" => [0x1D559],
  "horbar" => [0x02015],
  "hscr" => [0x1D4BD],
  "hslash" => [0x0210F],
  "hstrok" => [0x00127],
  "hybull" => [0x02043],
  "hyphen" => [0x02010],
  "iacute" => [0x000ED],
  "ic" => [0x02063],
  "icirc" => [0x000EE],
  "icy" => [0x00438],
  "iecy" => [0x00435],
  "iexcl" => [0x000A1],
  "iff" => [0x021D4],
  "ifr" => [0x1D526],
  "igrave" => [0x000EC],
  "ii" => [0x02148],
  "iiiint" => [0x02A0C],
  "iiint" => [0x0222D],
  "iinfin" => [0x029DC],
  "iiota" => [0x02129],
  "ijlig" => [0x00133],
  "imacr" => [0x0012B],
  "image" => [0x02111],
  "imagline" => [0x02110],
  "imagpart" => [0x02111],
  "imath" => [0x00131],
  "imof" => [0x022B7],
  "imped" => [0x001B5],
  "in" => [0x02208],
  "incare" => [0x02105],
  "infin" => [0x0221E],
  "infintie" => [0x029DD],
  "inodot" => [0x00131],
  "int" => [0x0222B],
  "intcal" => [0x022BA],
  "integers" => [0x02124],
  "intercal" => [0x022BA],
  "intlarhk" => [0x02A17],
  "intprod" => [0x02A3C],
  "iocy" => [0x00451],
  "iogon" => [0x0012F],
  "iopf" => [0x1D55A],
  "iota" => [0x003B9],
  "iprod" => [0x02A3C],
  "iquest" => [0x000BF],
  "iscr" => [0x1D4BE],
  "isin" => [0x02208],
  "isinE" => [0x022F9],
  "isindot" => [0x022F5],
  "isins" => [0x022F4],
  "isinsv" => [0x022F3],
  "isinv" => [0x02208],
  "it" => [0x02062],
  "itilde" => [0x00129],
  "iukcy" => [0x00456],
  "iuml" => [0x000EF],
  "jcirc" => [0x00135],
  "jcy" => [0x00439],
  "jfr" => [0x1D527],
  "jmath" => [0x00237],
  "jopf" => [0x1D55B],
  "jscr" => [0x1D4BF],
  "jsercy" => [0x00458],
  "jukcy" => [0x00454],
  "kappa" => [0x003BA],
  "kappav" => [0x003F0],
  "kcedil" => [0x00137],
  "kcy" => [0x0043A],
  "kfr" => [0x1D528],
  "kgreen" => [0x00138],
  "khcy" => [0x00445],
  "kjcy" => [0x0045C],
  "kopf" => [0x1D55C],
  "kscr" => [0x1D4C0],
  "lAarr" => [0x021DA],
  "lArr" => [0x021D0],
  "lAtail" => [0x0291B],
  "lBarr" => [0x0290E],
  "lE" => [0x02266],
  "lEg" => [0x02A8B],
  "lHar" => [0x02962],
  "lacute" => [0x0013A],
  "laemptyv" => [0x029B4],
  "lagran" => [0x02112],
  "lambda" => [0x003BB],
  "lang" => [0x027E8],
  "langd" => [0x02991],
  "langle" => [0x027E8],
  "lap" => [0x02A85],
  "laquo" => [0x000AB],
  "larr" => [0x02190],
  "larrb" => [0x021E4],
  "larrbfs" => [0x0291F],
  "larrfs" => [0x0291D],
  "larrhk" => [0x021A9],
  "larrlp" => [0x021AB],
  "larrpl" => [0x02939],
  "larrsim" => [0x02973],
  "larrtl" => [0x021A2],
  "lat" => [0x02AAB],
  "latail" => [0x02919],
  "late" => [0x02AAD],
  "lates" => [0x02AAD, 0x0FE00],
  "lbarr" => [0x0290C],
  "lbbrk" => [0x02772],
  "lbrace" => [0x0007B],
  "lbrack" => [0x0005B],
  "lbrke" => [0x0298B],
  "lbrksld" => [0x0298F],
  "lbrkslu" => [0x0298D],
  "lcaron" => [0x0013E],
  "lcedil" => [0x0013C],
  "lceil" => [0x02308],
  "lcub" => [0x0007B],
  "lcy" => [0x0043B],
  "ldca" => [0x02936],
  "ldquo" => [0x0201C],
  "ldquor" => [0x0201E],
  "ldrdhar" => [0x02967],
  "ldrushar" => [0x0294B],
  "ldsh" => [0x021B2],
  "le" => [0x02264],
  "leftarrow" => [0x02190],
  "leftarrowtail" => [0x021A2],
  "leftharpoondown" => [0x021BD],
  "leftharpoonup" => [0x021BC],
  "leftleftarrows" => [0x021C7],
  "leftrightarrow" => [0x02194],
  "leftrightarrows" => [0x021C6],
  "leftrightharpoons" => [0x021CB],
  "leftrightsquigarrow" => [0x021AD],
  "leftthreetimes" => [0x022CB],
  "leg" => [0x022DA],
  "leq" => [0x02264],
  "leqq" => [0x02266],
  "leqslant" => [0x02A7D],
  "les" => [0x02A7D],
  "lescc" => [0x02AA8],
  "lesdot" => [0x02A7F],
  "lesdoto" => [0x02A81],
  "lesdotor" => [0x02A83],
  "lesg" => [0x022DA, 0x0FE00],
  "lesges" => [0x02A93],
  "lessapprox" => [0x02A85],
  "lessdot" => [0x022D6],
  "lesseqgtr" => [0x022DA],
  "lesseqqgtr" => [0x02A8B],
  "lessgtr" => [0x02276],
  "lesssim" => [0x02272],
  "lfisht" => [0x0297C],
  "lfloor" => [0x0230A],
  "lfr" => [0x1D529],
  "lg" => [0x02276],
  "lgE" => [0x02A91],
  "lhard" => [0x021BD],
  "lharu" => [0x021BC],
  "lharul" => [0x0296A],
  "lhblk" => [0x02584],
  "ljcy" => [0x00459],
  "ll" => [0x0226A],
  "llarr" => [0x021C7],
  "llcorner" => [0x0231E],
  "llhard" => [0x0296B],
  "lltri" => [0x025FA],
  "lmidot" => [0x00140],
  "lmoust" => [0x023B0],
  "lmoustache" => [0x023B0],
  "lnE" => [0x02268],
  "lnap" => [0x02A89],
  "lnapprox" => [0x02A89],
  "lne" => [0x02A87],
  "lneq" => [0x02A87],
  "lneqq" => [0x02268],
  "lnsim" => [0x022E6],
  "loang" => [0x027EC],
  "loarr" => [0x021FD],
  "lobrk" => [0x027E6],
  "longleftarrow" => [0x027F5],
  "longleftrightarrow" => [0x027F7],
  "longmapsto" => [0x027FC],
  "longrightarrow" => [0x027F6],
  "looparrowleft" => [0x021AB],
  "looparrowright" => [0x021AC],
  "lopar" => [0x02985],
  "lopf" => [0x1D55D],
  "loplus" => [0x02A2D],
  "lotimes" => [0x02A34],
  "lowast" => [0x02217],
  "lowbar" => [0x0005F],
  "loz" => [0x025CA],
  "lozenge" => [0x025CA],
  "lozf" => [0x029EB],
  "lpar" => [0x00028],
  "lparlt" => [0x02993],
  "lrarr" => [0x021C6],
  "lrcorner" => [0x0231F],
  "lrhar" => [0x021CB],
  "lrhard" => [0x0296D],
  "lrm" => [0x0200E],
  "lrtri" => [0x022BF],
  "lsaquo" => [0x02039],
  "lscr" => [0x1D4C1],
  "lsh" => [0x021B0],
  "lsim" => [0x02272],
  "lsime" => [0x02A8D],
  "lsimg" => [0x02A8F],
  "lsqb" => [0x0005B],
  "lsquo" => [0x02018],
  "lsquor" => [0x0201A],
  "lstrok" => [0x00142],
  "lt" => [0x0003C],
  "ltcc" => [0x02AA6],
  "ltcir" => [0x02A79],
  "ltdot" => [0x022D6],
  "lthree" => [0x022CB],
  "ltimes" => [0x022C9],
  "ltlarr" => [0x02976],
  "ltquest" => [0x02A7B],
  "ltrPar" => [0x02996],
  "ltri" => [0x025C3],
  "ltrie" => [0x022B4],
  "ltrif" => [0x025C2],
  "lurdshar" => [0x0294A],
  "luruhar" => [0x02966],
  "lvertneqq" => [0x02268, 0x0FE00],
  "lvnE" => [0x02268, 0x0FE00],
  "mDDot" => [0x0223A],
  "macr" => [0x000AF],
  "male" => [0x02642],
  "malt" => [0x02720],
  "maltese" => [0x02720],
  "map" => [0x021A6],
  "mapsto" => [0x021A6],
  "mapstodown" => [0x021A7],
  "mapstoleft" => [0x021A4],
  "mapstoup" => [0x021A5],
  "marker" => [0x025AE],
  "mcomma" => [0x02A29],
  "mcy" => [0x0043C],
  "mdash" => [0x02014],
  "measuredangle" => [0x02221],
  "mfr" => [0x1D52A],
  "mho" => [0x02127],
  "micro" => [0x000B5],
  "mid" => [0x02223],
  "midast" => [0x0002A],
  "midcir" => [0x02AF0],
  "middot" => [0x000B7],
  "minus" => [0x02212],
  "minusb" => [0x0229F],
  "minusd" => [0x02238],
  "minusdu" => [0x02A2A],
  "mlcp" => [0x02ADB],
  "mldr" => [0x02026],
  "mnplus" => [0x02213],
  "models" => [0x022A7],
  "mopf" => [0x1D55E],
  "mp" => [0x02213],
  "mscr" => [0x1D4C2],
  "mstpos" => [0x0223E],
  "mu" => [0x003BC],
  "multimap" => [0x022B8],
  "mumap" => [0x022B8],
  "nGg" => [0x022D9, 0x00338],
  "nGt" => [0x0226B, 0x020D2],
  "nGtv" => [0x0226B, 0x00338],
  "nLeftarrow" => [0x021CD],
  "nLeftrightarrow" => [0x021CE],
  "nLl" => [0x022D8, 0x00338],
  "nLt" => [0x0226A, 0x020D2],
  "nLtv" => [0x0226A, 0x00338],
  "nRightarrow" => [0x021CF],
  "nVDash" => [0x022AF],
  "nVdash" => [0x022AE],
  "nabla" => [0x02207],
  "nacute" => [0x00144],
  "nang" => [0x02220, 0x020D2],
  "nap" => [0x02249],
  "napE" => [0x02A70, 0x00338],
  "napid" => [0x0224B, 0x00338],
  "napos" => [0x00149],
  "napprox" => [0x02249],
  "natur" => [0x0266E],
  "natural" => [0x0266E],
  "naturals" => [0x02115],
  "nbsp" => [0x000A0],
  "nbump" => [0x0224E, 0x00338],
  "nbumpe" => [0x0224F, 0x00338],
  "ncap" => [0x02A43],
  "ncaron" => [0x00148],
  "ncedil" => [0x00146],
  "ncong" => [0x02247],
  "ncongdot" => [0x02A6D, 0x00338],
  "ncup" => [0x02A42],
  "ncy" => [0x0043D],
  "ndash" => [0x02013],
  "ne" => [0x02260],
  "neArr" => [0x021D7],
  "nearhk" => [0x02924],
  "nearr" => [0x02197],
  "nearrow" => [0x02197],
  "nedot" => [0x02250, 0x00338],
  "nequiv" => [0x02262],
  "nesear" => [0x02928],
  "nesim" => [0x02242, 0x00338],
  "nexist" => [0x02204],
  "nexists" => [0x02204],
  "nfr" => [0x1D52B],
  "ngE" => [0x02267, 0x00338],
  "nge" => [0x02271],
  "ngeq" => [0x02271],
  "ngeqq" => [0x02267, 0x00338],
  "ngeqslant" => [0x02A7E, 0x00338],
  "nges" => [0x02A7E, 0x00338],
  "ngsim" => [0x02275],
  "ngt" => [0x0226F],
  "ngtr" => [0x0226F],
  "nhArr" => [0x021CE],
  "nharr" => [0x021AE],
  "nhpar" => [0x02AF2],
  "ni" => [0x0220B],
  "nis" => [0x022FC],
  "nisd" => [0x022FA],
  "niv" => [0x0220B],
  "njcy" => [0x0045A],
  "nlArr" => [0x021CD],
  "nlE" => [0x02266, 0x00338],
  "nlarr" => [0x0219A],
  "nldr" => [0x02025],
  "nle" => [0x02270],
  "nleftarrow" => [0x0219A],
  "nleftrightarrow" => [0x021AE],
  "nleq" => [0x02270],
  "nleqq" => [0x02266, 0x00338],
  "nleqslant" => [0x02A7D, 0x00338],
  "nles" => [0x02A7D, 0x00338],
  "nless" => [0x0226E],
  "nlsim" => [0x02274],
  "nlt" => [0x0226E],
  "nltri" => [0x022EA],
  "nltrie" => [0x022EC],
  "nmid" => [0x02224],
  "nopf" => [0x1D55F],
  "not" => [0x000AC],
  "notin" => [0x02209],
  "notinE" => [0x022F9, 0x00338],
  "notindot" => [0x022F5, 0x00338],
  "notinva" => [0x02209],
  "notinvb" => [0x022F7],
  "notinvc" => [0x022F6],
  "notni" => [0x0220C],
  "notniva" => [0x0220C],
  "notnivb" => [0x022FE],
  "notnivc" => [0x022FD],
  "npar" => [0x02226],
  "nparallel" => [0x02226],
  "nparsl" => [0x02AFD, 0x020E5],
  "npart" => [0x02202, 0x00338],
  "npolint" => [0x02A14],
  "npr" => [0x02280],
  "nprcue" => [0x022E0],
  "npre" => [0x02AAF, 0x00338],
  "nprec" => [0x02280],
  "npreceq" => [0x02AAF, 0x00338],
  "nrArr" => [0x021CF],
  "nrarr" => [0x0219B],
  "nrarrc" => [0x02933, 0x00338],
  "nrarrw" => [0x0219D, 0x00338],
  "nrightarrow" => [0x0219B],
  "nrtri" => [0x022EB],
  "nrtrie" => [0x022ED],
  "nsc" => [0x02281],
  "nsccue" => [0x022E1],
  "nsce" => [0x02AB0, 0x00338],
  "nscr" => [0x1D4C3],
  "nshortmid" => [0x02224],
  "nshortparallel" => [0x02226],
  "nsim" => [0x02241],
  "nsime" => [0x02244],
  "nsimeq" => [0x02244],
  "nsmid" => [0x02224],
  "nspar" => [0x02226],
  "nsqsube" => [0x022E2],
  "nsqsupe" => [0x022E3],
  "nsub" => [0x02284],
  "nsubE" => [0x02AC5, 0x00338],
  "nsube" => [0x02288],
  "nsubset" => [0x02282, 0x020D2],
  "nsubseteq" => [0x02288],
  "nsubseteqq" => [0x02AC5, 0x00338],
  "nsucc" => [0x02281],
  "nsucceq" => [0x02AB0, 0x00338],
  "nsup" => [0x02285],
  "nsupE" => [0x02AC6, 0x00338],
  "nsupe" => [0x02289],
  "nsupset" => [0x02283, 0x020D2],
  "nsupseteq" => [0x02289],
  "nsupseteqq" => [0x02AC6, 0x00338],
  "ntgl" => [0x02279],
  "ntilde" => [0x000F1],
  "ntlg" => [0x02278],
  "ntriangleleft" => [0x022EA],
  "ntrianglelefteq" => [0x022EC],
  "ntriangleright" => [0x022EB],
  "ntrianglerighteq" => [0x022ED],
  "nu" => [0x003BD],
  "num" => [0x00023],
  "numero" => [0x02116],
  "numsp" => [0x02007],
  "nvDash" => [0x022AD],
  "nvHarr" => [0x02904],
  "nvap" => [0x0224D, 0x020D2],
  "nvdash" => [0x022AC],
  "nvge" => [0x02265, 0x020D2],
  "nvgt" => [0x0003E, 0x020D2],
  "nvinfin" => [0x029DE],
  "nvlArr" => [0x02902],
  "nvle" => [0x02264, 0x020D2],
  "nvlt" => [0x0003C, 0x020D2],
  "nvltrie" => [0x022B4, 0x020D2],
  "nvrArr" => [0x02903],
  "nvrtrie" => [0x022B5, 0x020D2],
  "nvsim" => [0x0223C, 0x020D2],
  "nwArr" => [0x021D6],
  "nwarhk" => [0x02923],
  "nwarr" => [0x02196],
  "nwarrow" => [0x02196],
  "nwnear" => [0x02927],
  "oS" => [0x024C8],
  "oacute" => [0x000F3],
  "oast" => [0x0229B],
  "ocir" => [0x0229A],
  "ocirc" => [0x000F4],
  "ocy" => [0x0043E],
  "odash" => [0x0229D],
  "odblac" => [0x00151],
  "odiv" => [0x02A38],
  "odot" => [0x02299],
  "odsold" => [0x029BC],
  "oelig" => [0x00153],
  "ofcir" => [0x029BF],
  "ofr" => [0x1D52C],
  "ogon" => [0x002DB],
  "ograve" => [0x000F2],
  "ogt" => [0x029C1],
  "ohbar" => [0x029B5],
  "ohm" => [0x003A9],
  "oint" => [0x0222E],
  "olarr" => [0x021BA],
  "olcir" => [0x029BE],
  "olcross" => [0x029BB],
  "oline" => [0x0203E],
  "olt" => [0x029C0],
  "omacr" => [0x0014D],
  "omega" => [0x003C9],
  "omicron" => [0x003BF],
  "omid" => [0x029B6],
  "ominus" => [0x02296],
  "oopf" => [0x1D560],
  "opar" => [0x029B7],
  "operp" => [0x029B9],
  "oplus" => [0x02295],
  "or" => [0x02228],
  "orarr" => [0x021BB],
  "ord" => [0x02A5D],
  "order" => [0x02134],
  "orderof" => [0x02134],
  "ordf" => [0x000AA],
  "ordm" => [0x000BA],
  "origof" => [0x022B6],
  "oror" => [0x02A56],
  "orslope" => [0x02A57],
  "orv" => [0x02A5B],
  "oscr" => [0x02134],
  "oslash" => [0x000F8],
  "osol" => [0x02298],
  "otilde" => [0x000F5],
  "otimes" => [0x02297],
  "otimesas" => [0x02A36],
  "ouml" => [0x000F6],
  "ovbar" => [0x0233D],
  "par" => [0x02225],
  "para" => [0x000B6],
  "parallel" => [0x02225],
  "parsim" => [0x02AF3],
  "parsl" => [0x02AFD],
  "part" => [0x02202],
  "pcy" => [0x0043F],
  "percnt" => [0x00025],
  "period" => [0x0002E],
  "permil" => [0x02030],
  "perp" => [0x022A5],
  "pertenk" => [0x02031],
  "pfr" => [0x1D52D],
  "phi" => [0x003C6],
  "phiv" => [0x003D5],
  "phmmat" => [0x02133],
  "phone" => [0x0260E],
  "pi" => [0x003C0],
  "pitchfork" => [0x022D4],
  "piv" => [0x003D6],
  "planck" => [0x0210F],
  "planckh" => [0x0210E],
  "plankv" => [0x0210F],
  "plus" => [0x0002B],
  "plusacir" => [0x02A23],
  "plusb" => [0x0229E],
  "pluscir" => [0x02A22],
  "plusdo" => [0x02214],
  "plusdu" => [0x02A25],
  "pluse" => [0x02A72],
  "plusmn" => [0x000B1],
  "plussim" => [0x02A26],
  "plustwo" => [0x02A27],
  "pm" => [0x000B1],
  "pointint" => [0x02A15],
  "popf" => [0x1D561],
  "pound" => [0x000A3],
  "pr" => [0x0227A],
  "prE" => [0x02AB3],
  "prap" => [0x02AB7],
  "prcue" => [0x0227C],
  "pre" => [0x02AAF],
  "prec" => [0x0227A],
  "precapprox" => [0x02AB7],
  "preccurlyeq" => [0x0227C],
  "preceq" => [0x02AAF],
  "precnapprox" => [0x02AB9],
  "precneqq" => [0x02AB5],
  "precnsim" => [0x022E8],
  "precsim" => [0x0227E],
  "prime" => [0x02032],
  "primes" => [0x02119],
  "prnE" => [0x02AB5],
  "prnap" => [0x02AB9],
  "prnsim" => [0x022E8],
  "prod" => [0x0220F],
  "profalar" => [0x0232E],
  "profline" => [0x02312],
  "profsurf" => [0x02313],
  "prop" => [0x0221D],
  "propto" => [0x0221D],
  "prsim" => [0x0227E],
  "prurel" => [0x022B0],
  "pscr" => [0x1D4C5],
  "psi" => [0x003C8],
  "puncsp" => [0x02008],
  "qfr" => [0x1D52E],
  "qint" => [0x02A0C],
  "qopf" => [0x1D562],
  "qprime" => [0x02057],
  "qscr" => [0x1D4C6],
  "quaternions" => [0x0210D],
  "quatint" => [0x02A16],
  "quest" => [0x0003F],
  "questeq" => [0x0225F],
  "quot" => [0x00022],
  "rAarr" => [0x021DB],
  "rArr" => [0x021D2],
  "rAtail" => [0x0291C],
  "rBarr" => [0x0290F],
  "rHar" => [0x02964],
  "race" => [0x0223D, 0x00331],
  "racute" => [0x00155],
  "radic" => [0x0221A],
  "raemptyv" => [0x029B3],
  "rang" => [0x027E9],
  "rangd" => [0x02992],
  "range" => [0x029A5],
  "rangle" => [0x027E9],
  "raquo" => [0x000BB],
  "rarr" => [0x02192],
  "rarrap" => [0x02975],
  "rarrb" => [0x021E5],
  "rarrbfs" => [0x02920],
  "rarrc" => [0x02933],
  "rarrfs" => [0x0291E],
  "rarrhk" => [0x021AA],
  "rarrlp" => [0x021AC],
  "rarrpl" => [0x02945],
  "rarrsim" => [0x02974],
  "rarrtl" => [0x021A3],
  "rarrw" => [0x0219D],
  "ratail" => [0x0291A],
  "ratio" => [0x02236],
  "rationals" => [0x0211A],
  "rbarr" => [0x0290D],
  "rbbrk" => [0x02773],
  "rbrace" => [0x0007D],
  "rbrack" => [0x0005D],
  "rbrke" => [0x0298C],
  "rbrksld" => [0x0298E],
  "rbrkslu" => [0x02990],
  "rcaron" => [0x00159],
  "rcedil" => [0x00157],
  "rceil" => [0x02309],
  "rcub" => [0x0007D],
  "rcy" => [0x00440],
  "rdca" => [0x02937],
  "rdldhar" => [0x02969],
  "rdquo" => [0x0201D],
  "rdquor" => [0x0201D],
  "rdsh" => [0x021B3],
  "real" => [0x0211C],
  "realine" => [0x0211B],
  "realpart" => [0x0211C],
  "reals" => [0x0211D],
  "rect" => [0x025AD],
  "reg" => [0x000AE],
  "rfisht" => [0x0297D],
  "rfloor" => [0x0230B],
  "rfr" => [0x1D52F],
  "rhard" => [0x021C1],
  "rharu" => [0x021C0],
  "rharul" => [0x0296C],
  "rho" => [0x003C1],
  "rhov" => [0x003F1],
  "rightarrow" => [0x02192],
  "rightarrowtail" => [0x021A3],
  "rightharpoondown" => [0x021C1],
  "rightharpoonup" => [0x021C0],
  "rightleftarrows" => [0x021C4],
  "rightleftharpoons" => [0x021CC],
  "rightrightarrows" => [0x021C9],
  "rightsquigarrow" => [0x0219D],
  "rightthreetimes" => [0x022CC],
  "ring" => [0x002DA],
  "risingdotseq" => [0x02253],
  "rlarr" => [0x021C4],
  "rlhar" => [0x021CC],
  "rlm" => [0x0200F],
  "rmoust" => [0x023B1],
  "rmoustache" => [0x023B1],
  "rnmid" => [0x02AEE],
  "roang" => [0x027ED],
  "roarr" => [0x021FE],
  "robrk" => [0x027E7],
  "ropar" => [0x02986],
  "ropf" => [0x1D563],
  "roplus" => [0x02A2E],
  "rotimes" => [0x02A35],
  "rpar" => [0x00029],
  "rpargt" => [0x02994],
  "rppolint" => [0x02A12],
  "rrarr" => [0x021C9],
  "rsaquo" => [0x0203A],
  "rscr" => [0x1D4C7],
  "rsh" => [0x021B1],
  "rsqb" => [0x0005D],
  "rsquo" => [0x02019],
  "rsquor" => [0x02019],
  "rthree" => [0x022CC],
  "rtimes" => [0x022CA],
  "rtri" => [0x025B9],
  "rtrie" => [0x022B5],
  "rtrif" => [0x025B8],
  "rtriltri" => [0x029CE],
  "ruluhar" => [0x02968],
  "rx" => [0x0211E],
  "sacute" => [0x0015B],
  "sbquo" => [0x0201A],
  "sc" => [0x0227B],
  "scE" => [0x02AB4],
  "scap" => [0x02AB8],
  "scaron" => [0x00161],
  "sccue" => [0x0227D],
  "sce" => [0x02AB0],
  "scedil" => [0x0015F],
  "scirc" => [0x0015D],
  "scnE" => [0x02AB6],
  "scnap" => [0x02ABA],
  "scnsim" => [0x022E9],
  "scpolint" => [0x02A13],
  "scsim" => [0x0227F],
  "scy" => [0x00441],
  "sdot" => [0x022C5],
  "sdotb" => [0x022A1],
  "sdote" => [0x02A66],
  "seArr" => [0x021D8],
  "searhk" => [0x02925],
  "searr" => [0x02198],
  "searrow" => [0x02198],
  "sect" => [0x000A7],
  "semi" => [0x0003B],
  "seswar" => [0x02929],
  "setminus" => [0x02216],
  "setmn" => [0x02216],
  "sext" => [0x02736],
  "sfr" => [0x1D530],
  "sfrown" => [0x02322],
  "sharp" => [0x0266F],
  "shchcy" => [0x00449],
  "shcy" => [0x00448],
  "shortmid" => [0x02223],
  "shortparallel" => [0x02225],
  "shy" => [0x000AD],
  "sigma" => [0x003C3],
  "sigmaf" => [0x003C2],
  "sigmav" => [0x003C2],
  "sim" => [0x0223C],
  "simdot" => [0x02A6A],
  "sime" => [0x02243],
  "simeq" => [0x02243],
  "simg" => [0x02A9E],
  "simgE" => [0x02AA0],
  "siml" => [0x02A9D],
  "simlE" => [0x02A9F],
  "simne" => [0x02246],
  "simplus" => [0x02A24],
  "simrarr" => [0x02972],
  "slarr" => [0x02190],
  "smallsetminus" => [0x02216],
  "smashp" => [0x02A33],
  "smeparsl" => [0x029E4],
  "smid" => [0x02223],
  "smile" => [0x02323],
  "smt" => [0x02AAA],
  "smte" => [0x02AAC],
  "smtes" => [0x02AAC, 0x0FE00],
  "softcy" => [0x0044C],
  "sol" => [0x0002F],
  "solb" => [0x029C4],
  "solbar" => [0x0233F],
  "sopf" => [0x1D564],
  "spades" => [0x02660],
  "spadesuit" => [0x02660],
  "spar" => [0x02225],
  "sqcap" => [0x02293],
  "sqcaps" => [0x02293, 0x0FE00],
  "sqcup" => [0x02294],
  "sqcups" => [0x02294, 0x0FE00],
  "sqsub" => [0x0228F],
  "sqsube" => [0x02291],
  "sqsubset" => [0x0228F],
  "sqsubseteq" => [0x02291],
  "sqsup" => [0x02290],
  "sqsupe" => [0x02292],
  "sqsupset" => [0x02290],
  "sqsupseteq" => [0x02292],
  "squ" => [0x025A1],
  "square" => [0x025A1],
  "squarf" => [0x025AA],
  "squf" => [0x025AA],
  "srarr" => [0x02192],
  "sscr" => [0x1D4C8],
  "ssetmn" => [0x02216],
  "ssmile" => [0x02323],
  "sstarf" => [0x022C6],
  "star" => [0x02606],
  "starf" => [0x02605],
  "straightepsilon" => [0x003F5],
  "straightphi" => [0x003D5],
  "strns" => [0x000AF],
  "sub" => [0x02282],
  "subE" => [0x02AC5],
  "subdot" => [0x02ABD],
  "sube" => [0x02286],
  "subedot" => [0x02AC3],
  "submult" => [0x02AC1],
  "subnE" => [0x02ACB],
  "subne" => [0x0228A],
  "subplus" => [0x02ABF],
  "subrarr" => [0x02979],
  "subset" => [0x02282],
  "subseteq" => [0x02286],
  "subseteqq" => [0x02AC5],
  "subsetneq" => [0x0228A],
  "subsetneqq" => [0x02ACB],
  "subsim" => [0x02AC7],
  "subsub" => [0x02AD5],
  "subsup" => [0x02AD3],
  "succ" => [0x0227B],
  "succapprox" => [0x02AB8],
  "succcurlyeq" => [0x0227D],
  "succeq" => [0x02AB0],
  "succnapprox" => [0x02ABA],
  "succneqq" => [0x02AB6],
  "succnsim" => [0x022E9],
  "succsim" => [0x0227F],
  "sum" => [0x02211],
  "sung" => [0x0266A],
  "sup" => [0x02283],
  "sup1" => [0x000B9],
  "sup2" => [0x000B2],
  "sup3" => [0x000B3],
  "supE" => [0x02AC6],
  "supdot" => [0x02ABE],
  "supdsub" => [0x02AD8],
  "supe" => [0x02287],
  "supedot" => [0x02AC4],
  "suphsol" => [0x027C9],
  "suphsub" => [0x02AD7],
  "suplarr" => [0x0297B],
  "supmult" => [0x02AC2],
  "supnE" => [0x02ACC],
  "supne" => [0x0228B],
  "supplus" => [0x02AC0],
  "supset" => [0x02283],
  "supseteq" => [0x02287],
  "supseteqq" => [0x02AC6],
  "supsetneq" => [0x0228B],
  "supsetneqq" => [0x02ACC],
  "supsim" => [0x02AC8],
  "supsub" => [0x02AD4],
  "supsup" => [0x02AD6],
  "swArr" => [0x021D9],
  "swarhk" => [0x02926],
  "swarr" => [0x02199],
  "swarrow" => [0x02199],
  "swnwar" => [0x0292A],
  "szlig" => [0x000DF],
  "target" => [0x02316],
  "tau" => [0x003C4],
  "tbrk" => [0x023B4],
  "tcaron" => [0x00165],
  "tcedil" => [0x00163],
  "tcy" => [0x00442],
  "tdot" => [0x020DB],
  "telrec" => [0x02315],
  "tfr" => [0x1D531],
  "there4" => [0x02234],
  "therefore" => [0x02234],
  "theta" => [0x003B8],
  "thetasym" => [0x003D1],
  "thetav" => [0x003D1],
  "thickapprox" => [0x02248],
  "thicksim" => [0x0223C],
  "thinsp" => [0x02009],
  "thkap" => [0x02248],
  "thksim" => [0x0223C],
  "thorn" => [0x000FE],
  "tilde" => [0x002DC],
  "times" => [0x000D7],
  "timesb" => [0x022A0],
  "timesbar" => [0x02A31],
  "timesd" => [0x02A30],
  "tint" => [0x0222D],
  "toea" => [0x02928],
  "top" => [0x022A4],
  "topbot" => [0x02336],
  "topcir" => [0x02AF1],
  "topf" => [0x1D565],
  "topfork" => [0x02ADA],
  "tosa" => [0x02929],
  "tprime" => [0x02034],
  "trade" => [0x02122],
  "triangle" => [0x025B5],
  "triangledown" => [0x025BF],
  "triangleleft" => [0x025C3],
  "trianglelefteq" => [0x022B4],
  "triangleq" => [0x0225C],
  "triangleright" => [0x025B9],
  "trianglerighteq" => [0x022B5],
  "tridot" => [0x025EC],
  "trie" => [0x0225C],
  "triminus" => [0x02A3A],
  "triplus" => [0x02A39],
  "trisb" => [0x029CD],
  "tritime" => [0x02A3B],
  "trpezium" => [0x023E2],
  "tscr" => [0x1D4C9],
  "tscy" => [0x00446],
  "tshcy" => [0x0045B],
  "tstrok" => [0x00167],
  "twixt" => [0x0226C],
  "twoheadleftarrow" => [0x0219E],
  "twoheadrightarrow" => [0x021A0],
  "uArr" => [0x021D1],
  "uHar" => [0x02963],
  "uacute" => [0x000FA],
  "uarr" => [0x02191],
  "ubrcy" => [0x0045E],
  "ubreve" => [0x0016D],
  "ucirc" => [0x000FB],
  "ucy" => [0x00443],
  "udarr" => [0x021C5],
  "udblac" => [0x00171],
  "udhar" => [0x0296E],
  "ufisht" => [0x0297E],
  "ufr" => [0x1D532],
  "ugrave" => [0x000F9],
  "uharl" => [0x021BF],
  "uharr" => [0x021BE],
  "uhblk" => [0x02580],
  "ulcorn" => [0x0231C],
  "ulcorner" => [0x0231C],
  "ulcrop" => [0x0230F],
  "ultri" => [0x025F8],
  "umacr" => [0x0016B],
  "uml" => [0x000A8],
  "uogon" => [0x00173],
  "uopf" => [0x1D566],
  "uparrow" => [0x02191],
  "updownarrow" => [0x02195],
  "upharpoonleft" => [0x021BF],
  "upharpoonright" => [0x021BE],
  "uplus" => [0x0228E],
  "upsi" => [0x003C5],
  "upsih" => [0x003D2],
  "upsilon" => [0x003C5],
  "upuparrows" => [0x021C8],
  "urcorn" => [0x0231D],
  "urcorner" => [0x0231D],
  "urcrop" => [0x0230E],
  "uring" => [0x0016F],
  "urtri" => [0x025F9],
  "uscr" => [0x1D4CA],
  "utdot" => [0x022F0],
  "utilde" => [0x00169],
  "utri" => [0x025B5],
  "utrif" => [0x025B4],
  "uuarr" => [0x021C8],
  "uuml" => [0x000FC],
  "uwangle" => [0x029A7],
  "vArr" => [0x021D5],
  "vBar" => [0x02AE8],
  "vBarv" => [0x02AE9],
  "vDash" => [0x022A8],
  "vangrt" => [0x0299C],
  "varepsilon" => [0x003F5],
  "varkappa" => [0x003F0],
  "varnothing" => [0x02205],
  "varphi" => [0x003D5],
  "varpi" => [0x003D6],
  "varpropto" => [0x0221D],
  "varr" => [0x02195],
  "varrho" => [0x003F1],
  "varsigma" => [0x003C2],
  "varsubsetneq" => [0x0228A, 0x0FE00],
  "varsubsetneqq" => [0x02ACB, 0x0FE00],
  "varsupsetneq" => [0x0228B, 0x0FE00],
  "varsupsetneqq" => [0x02ACC, 0x0FE00],
  "vartheta" => [0x003D1],
  "vartriangleleft" => [0x022B2],
  "vartriangleright" => [0x022B3],
  "vcy" => [0x00432],
  "vdash" => [0x022A2],
  "vee" => [0x02228],
  "veebar" => [0x022BB],
  "veeeq" => [0x0225A],
  "vellip" => [0x022EE],
  "verbar" => [0x0007C],
  "vert" => [0x0007C],
  "vfr" => [0x1D533],
  "vltri" => [0x022B2],
  "vnsub" => [0x02282, 0x020D2],
  "vnsup" => [0x02283, 0x020D2],
  "vopf" => [0x1D567],
  "vprop" => [0x0221D],
  "vrtri" => [0x022B3],
  "vscr" => [0x1D4CB],
  "vsubnE" => [0x02ACB, 0x0FE00],
  "vsubne" => [0x0228A, 0x0FE00],
  "vsupnE" => [0x02ACC, 0x0FE00],
  "vsupne" => [0x0228B, 0x0FE00],
  "vzigzag" => [0x0299A],
  "wcirc" => [0x00175],
  "wedbar" => [0x02A5F],
  "wedge" => [0x02227],
  "wedgeq" => [0x02259],
  "weierp" => [0x02118],
  "wfr" => [0x1D534],
  "wopf" => [0x1D568],
  "wp" => [0x02118],
  "wr" => [0x02240],
  "wreath" => [0x02240],
  "wscr" => [0x1D4CC],
  "xcap" => [0x022C2],
  "xcirc" => [0x025EF],
  "xcup" => [0x022C3],
  "xdtri" => [0x025BD],
  "xfr" => [0x1D535],
  "xhArr" => [0x027FA],
  "xharr" => [0x027F7],
  "xi" => [0x003BE],
  "xlArr" => [0x027F8],
  "xlarr" => [0x027F5],
  "xmap" => [0x027FC],
  "xnis" => [0x022FB],
  "xodot" => [0x02A00],
  "xopf" => [0x1D569],
  "xoplus" => [0x02A01],
  "xotime" => [0x02A02],
  "xrArr" => [0x027F9],
  "xrarr" => [0x027F6],
  "xscr" => [0x1D4CD],
  "xsqcup" => [0x02A06],
  "xuplus" => [0x02A04],
  "xutri" => [0x025B3],
  "xvee" => [0x022C1],
  "xwedge" => [0x022C0],
  "yacute" => [0x000FD],
  "yacy" => [0x0044F],
  "ycirc" => [0x00177],
  "ycy" => [0x0044B],
  "yen" => [0x000A5],
  "yfr" => [0x1D536],
  "yicy" => [0x00457],
  "yopf" => [0x1D56A],
  "yscr" => [0x1D4CE],
  "yucy" => [0x0044E],
  "yuml" => [0x000FF],
  "zacute" => [0x0017A],
  "zcaron" => [0x0017E],
  "zcy" => [0x00437],
  "zdot" => [0x0017C],
  "zeetrf" => [0x02128],
  "zeta" => [0x003B6],
  "zfr" => [0x1D537],
  "zhcy" => [0x00436],
  "zigrarr" => [0x021DD],
  "zopf" => [0x1D56B],
  "zscr" => [0x1D4CF],
  "zwj" => [0x0200D],
  "zwnj" => [0x0200C],
}

PK."#[�GF�M$M$/gems/rdoc-6.4.1.1/lib/rdoc/markdown/literals.rbnu�[���# coding: UTF-8
# frozen_string_literal: true
# :markup: markdown

##
#--
# This set of literals is for Ruby 1.9 regular expressions and gives full
# unicode support.
#
# Unlike peg-markdown, this set of literals recognizes Unicode alphanumeric
# characters, newlines and spaces.
class RDoc::Markdown::Literals
  # :stopdoc:

    # This is distinct from setup_parser so that a standalone parser
    # can redefine #initialize and still have access to the proper
    # parser setup code.
    def initialize(str, debug=false)
      setup_parser(str, debug)
    end



    # Prepares for parsing +str+.  If you define a custom initialize you must
    # call this method before #parse
    def setup_parser(str, debug=false)
      set_string str, 0
      @memoizations = Hash.new { |h,k| h[k] = {} }
      @result = nil
      @failed_rule = nil
      @failing_rule_offset = -1

      setup_foreign_grammar
    end

    attr_reader :string
    attr_reader :failing_rule_offset
    attr_accessor :result, :pos

    def current_column(target=pos)
      if c = string.rindex("\n", target-1)
        return target - c - 1
      end

      target + 1
    end

    def current_line(target=pos)
      cur_offset = 0
      cur_line = 0

      string.each_line do |line|
        cur_line += 1
        cur_offset += line.size
        return cur_line if cur_offset >= target
      end

      -1
    end

    def lines
      lines = []
      string.each_line { |l| lines << l }
      lines
    end



    def get_text(start)
      @string[start..@pos-1]
    end

    # Sets the string and current parsing position for the parser.
    def set_string string, pos
      @string = string
      @string_size = string ? string.size : 0
      @pos = pos
    end

    def show_pos
      width = 10
      if @pos < width
        "#{@pos} (\"#{@string[0,@pos]}\" @ \"#{@string[@pos,width]}\")"
      else
        "#{@pos} (\"... #{@string[@pos - width, width]}\" @ \"#{@string[@pos,width]}\")"
      end
    end

    def failure_info
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "line #{l}, column #{c}: failed rule '#{info.name}' = '#{info.rendered}'"
      else
        "line #{l}, column #{c}: failed rule '#{@failed_rule}'"
      end
    end

    def failure_caret
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      line = lines[l-1]
      "#{line}\n#{' ' * (c - 1)}^"
    end

    def failure_character
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset
      lines[l-1][c-1, 1]
    end

    def failure_oneline
      l = current_line @failing_rule_offset
      c = current_column @failing_rule_offset

      char = lines[l-1][c-1, 1]

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        "@#{l}:#{c} failed rule '#{info.name}', got '#{char}'"
      else
        "@#{l}:#{c} failed rule '#{@failed_rule}', got '#{char}'"
      end
    end

    class ParseError < RuntimeError
    end

    def raise_error
      raise ParseError, failure_oneline
    end

    def show_error(io=STDOUT)
      error_pos = @failing_rule_offset
      line_no = current_line(error_pos)
      col_no = current_column(error_pos)

      io.puts "On line #{line_no}, column #{col_no}:"

      if @failed_rule.kind_of? Symbol
        info = self.class::Rules[@failed_rule]
        io.puts "Failed to match '#{info.rendered}' (rule '#{info.name}')"
      else
        io.puts "Failed to match rule '#{@failed_rule}'"
      end

      io.puts "Got: #{string[error_pos,1].inspect}"
      line = lines[line_no-1]
      io.puts "=> #{line}"
      io.print(" " * (col_no + 3))
      io.puts "^"
    end

    def set_failed_rule(name)
      if @pos > @failing_rule_offset
        @failed_rule = name
        @failing_rule_offset = @pos
      end
    end

    attr_reader :failed_rule

    def match_string(str)
      len = str.size
      if @string[pos,len] == str
        @pos += len
        return str
      end

      return nil
    end

    def scan(reg)
      if m = reg.match(@string, @pos)
        @pos = m.end(0)
        return true
      end

      return nil
    end

    if "".respond_to? :ord
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos].ord
        @pos += 1
        s
      end
    else
      def get_byte
        if @pos >= @string_size
          return nil
        end

        s = @string[@pos]
        @pos += 1
        s
      end
    end

    def parse(rule=nil)
      # We invoke the rules indirectly via apply
      # instead of by just calling them as methods because
      # if the rules use left recursion, apply needs to
      # manage that.

      if !rule
        apply(:_root)
      else
        method = rule.gsub("-","_hyphen_")
        apply :"_#{method}"
      end
    end

    class MemoEntry
      def initialize(ans, pos)
        @ans = ans
        @pos = pos
        @result = nil
        @set = false
        @left_rec = false
      end

      attr_reader :ans, :pos, :result, :set
      attr_accessor :left_rec

      def move!(ans, pos, result)
        @ans = ans
        @pos = pos
        @result = result
        @set = true
        @left_rec = false
      end
    end

    def external_invoke(other, rule, *args)
      old_pos = @pos
      old_string = @string

      set_string other.string, other.pos

      begin
        if val = __send__(rule, *args)
          other.pos = @pos
          other.result = @result
        else
          other.set_failed_rule "#{self.class}##{rule}"
        end
        val
      ensure
        set_string old_string, old_pos
      end
    end

    def apply_with_args(rule, *args)
      memo_key = [rule, args]
      if m = @memoizations[memo_key][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[memo_key][@pos] = m
        start_pos = @pos

        ans = __send__ rule, *args

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, args, start_pos, m)
        else
          return ans
        end
      end
    end

    def apply(rule)
      if m = @memoizations[rule][@pos]
        @pos = m.pos
        if !m.set
          m.left_rec = true
          return nil
        end

        @result = m.result

        return m.ans
      else
        m = MemoEntry.new(nil, @pos)
        @memoizations[rule][@pos] = m
        start_pos = @pos

        ans = __send__ rule

        lr = m.left_rec

        m.move! ans, @pos, @result

        # Don't bother trying to grow the left recursion
        # if it's failing straight away (thus there is no seed)
        if ans and lr
          return grow_lr(rule, nil, start_pos, m)
        else
          return ans
        end
      end
    end

    def grow_lr(rule, args, start_pos, m)
      while true
        @pos = start_pos
        @result = m.result

        if args
          ans = __send__ rule, *args
        else
          ans = __send__ rule
        end
        return nil unless ans

        break if @pos <= m.pos

        m.move! ans, @pos, @result
      end

      @result = m.result
      @pos = m.pos
      return m.ans
    end

    class RuleInfo
      def initialize(name, rendered)
        @name = name
        @rendered = rendered
      end

      attr_reader :name, :rendered
    end

    def self.rule_info(name, rendered)
      RuleInfo.new(name, rendered)
    end


  # :startdoc:
  # :stopdoc:
  def setup_foreign_grammar; end

  # Alphanumeric = /\p{Word}/
  def _Alphanumeric
    _tmp = scan(/\G(?-mix:\p{Word})/)
    set_failed_rule :_Alphanumeric unless _tmp
    return _tmp
  end

  # AlphanumericAscii = /[A-Za-z0-9]/
  def _AlphanumericAscii
    _tmp = scan(/\G(?-mix:[A-Za-z0-9])/)
    set_failed_rule :_AlphanumericAscii unless _tmp
    return _tmp
  end

  # BOM = "uFEFF"
  def _BOM
    _tmp = match_string("uFEFF")
    set_failed_rule :_BOM unless _tmp
    return _tmp
  end

  # Newline = /\n|\r\n?|\p{Zl}|\p{Zp}/
  def _Newline
    _tmp = scan(/\G(?-mix:\n|\r\n?|\p{Zl}|\p{Zp})/)
    set_failed_rule :_Newline unless _tmp
    return _tmp
  end

  # NonAlphanumeric = /\p{^Word}/
  def _NonAlphanumeric
    _tmp = scan(/\G(?-mix:\p{^Word})/)
    set_failed_rule :_NonAlphanumeric unless _tmp
    return _tmp
  end

  # Spacechar = /\t|\p{Zs}/
  def _Spacechar
    _tmp = scan(/\G(?-mix:\t|\p{Zs})/)
    set_failed_rule :_Spacechar unless _tmp
    return _tmp
  end

  Rules = {}
  Rules[:_Alphanumeric] = rule_info("Alphanumeric", "/\\p{Word}/")
  Rules[:_AlphanumericAscii] = rule_info("AlphanumericAscii", "/[A-Za-z0-9]/")
  Rules[:_BOM] = rule_info("BOM", "\"uFEFF\"")
  Rules[:_Newline] = rule_info("Newline", "/\\n|\\r\\n?|\\p{Zl}|\\p{Zp}/")
  Rules[:_NonAlphanumeric] = rule_info("NonAlphanumeric", "/\\p{^Word}/")
  Rules[:_Spacechar] = rule_info("Spacechar", "/\\t|\\p{Zs}/")
  # :startdoc:
end
PK."#[p��-}}#gems/rdoc-6.4.1.1/lib/rdoc/alias.rbnu�[���# frozen_string_literal: true
##
# Represent an alias, which is an old_name/new_name pair associated with a
# particular context
#--
# TODO implement Alias as a proxy to a method/attribute, inheriting from
#      MethodAttr

class RDoc::Alias < RDoc::CodeObject

  ##
  # Aliased method's name

  attr_reader :new_name

  alias name new_name

  ##
  # Aliasee method's name

  attr_reader :old_name

  ##
  # Is this an alias declared in a singleton context?

  attr_accessor :singleton

  ##
  # Source file token stream

  attr_reader :text

  ##
  # Creates a new Alias with a token stream of +text+ that aliases +old_name+
  # to +new_name+, has +comment+ and is a +singleton+ context.

  def initialize(text, old_name, new_name, comment, singleton = false)
    super()

    @text = text
    @singleton = singleton
    @old_name = old_name
    @new_name = new_name
    self.comment = comment
  end

  ##
  # Order by #singleton then #new_name

  def <=>(other)
    [@singleton ? 0 : 1, new_name] <=> [other.singleton ? 0 : 1, other.new_name]
  end

  ##
  # HTML fragment reference for this alias

  def aref
    type = singleton ? 'c' : 'i'
    "#alias-#{type}-#{html_name}"
  end

  ##
  # Full old name including namespace

  def full_old_name
    @full_name || "#{parent.name}#{pretty_old_name}"
  end

  ##
  # HTML id-friendly version of +#new_name+.

  def html_name
    CGI.escape(@new_name.gsub('-', '-2D')).gsub('%','-').sub(/^-/, '')
  end

  def inspect # :nodoc:
    parent_name = parent ? parent.name : '(unknown)'
    "#<%s:0x%x %s.alias_method %s, %s>" % [
      self.class, object_id,
      parent_name, @old_name, @new_name,
    ]
  end

  ##
  # '::' for the alias of a singleton method/attribute, '#' for instance-level.

  def name_prefix
    singleton ? '::' : '#'
  end

  ##
  # Old name with prefix '::' or '#'.

  def pretty_old_name
    "#{singleton ? '::' : '#'}#{@old_name}"
  end

  ##
  # New name with prefix '::' or '#'.

  def pretty_new_name
    "#{singleton ? '::' : '#'}#{@new_name}"
  end

  alias pretty_name pretty_new_name

  def to_s # :nodoc:
    "alias: #{self.new_name} -> #{self.pretty_old_name} in: #{parent}"
  end

end

PK."#[epC0��)gems/rdoc-6.4.1.1/lib/rdoc/meta_method.rbnu�[���# frozen_string_literal: true
##
# MetaMethod represents a meta-programmed method

class RDoc::MetaMethod < RDoc::AnyMethod
end

PK."#[�W,���*gems/rdoc-6.4.1.1/lib/rdoc/normal_class.rbnu�[���# frozen_string_literal: true
##
# A normal class, neither singleton nor anonymous

class RDoc::NormalClass < RDoc::ClassModule

  ##
  # The ancestors of this class including modules.  Unlike Module#ancestors,
  # this class is not included in the result.  The result will contain both
  # RDoc::ClassModules and Strings.

  def ancestors
    if String === superclass then
      super << superclass
    elsif superclass then
      ancestors = super
      ancestors << superclass
      ancestors.concat superclass.ancestors
    else
      super
    end
  end

  def aref_prefix # :nodoc:
    'class'
  end

  ##
  # The definition of this class, <tt>class MyClassName</tt>

  def definition
    "class #{full_name}"
  end

  def direct_ancestors
    superclass ? super + [superclass] : super
  end

  def inspect # :nodoc:
    superclass = @superclass ? " < #{@superclass}" : nil
    "<%s:0x%x class %s%s includes: %p extends: %p attributes: %p methods: %p aliases: %p>" % [
      self.class, object_id,
      full_name, superclass, @includes, @extends, @attributes, @method_list, @aliases
    ]
  end

  def to_s # :nodoc:
    display = "#{self.class.name} #{self.full_name}"
    if superclass
      display += ' < ' + (superclass.is_a?(String) ? superclass : superclass.full_name)
    end
    display += ' -> ' + is_alias_for.to_s if is_alias_for
    display
  end

  def pretty_print q # :nodoc:
    superclass = @superclass ? " < #{@superclass}" : nil

    q.group 2, "[class #{full_name}#{superclass} ", "]" do
      q.breakable
      q.text "includes:"
      q.breakable
      q.seplist @includes do |inc| q.pp inc end

      q.breakable
      q.text "constants:"
      q.breakable
      q.seplist @constants do |const| q.pp const end

      q.breakable
      q.text "attributes:"
      q.breakable
      q.seplist @attributes do |attr| q.pp attr end

      q.breakable
      q.text "methods:"
      q.breakable
      q.seplist @method_list do |meth| q.pp meth end

      q.breakable
      q.text "aliases:"
      q.breakable
      q.seplist @aliases do |aliaz| q.pp aliaz end

      q.breakable
      q.text "comment:"
      q.breakable
      q.pp comment
    end
  end

end

PK."#[a�g���+gems/rdoc-6.4.1.1/lib/rdoc/rubygems_hook.rbnu�[���# frozen_string_literal: true
require 'rubygems/user_interaction'
require 'fileutils'
require 'rdoc'

##
# Gem::RDoc provides methods to generate RDoc and ri data for installed gems
# upon gem installation.
#
# This file is automatically required by RubyGems 1.9 and newer.

class RDoc::RubygemsHook

  include Gem::UserInteraction
  extend  Gem::UserInteraction

  @rdoc_version = nil
  @specs = []

  ##
  # Force installation of documentation?

  attr_accessor :force

  ##
  # Generate rdoc?

  attr_accessor :generate_rdoc

  ##
  # Generate ri data?

  attr_accessor :generate_ri

  class << self

    ##
    # Loaded version of RDoc.  Set by ::load_rdoc

    attr_reader :rdoc_version

  end

  ##
  # Post installs hook that generates documentation for each specification in
  # +specs+

  def self.generation_hook installer, specs
    start = Time.now
    types = installer.document

    generate_rdoc = types.include? 'rdoc'
    generate_ri   = types.include? 'ri'

    specs.each do |spec|
      new(spec, generate_rdoc, generate_ri).generate
    end

    return unless generate_rdoc or generate_ri

    duration = (Time.now - start).to_i
    names    = specs.map(&:name).join ', '

    say "Done installing documentation for #{names} after #{duration} seconds"
  end

  ##
  # Loads the RDoc generator

  def self.load_rdoc
    return if @rdoc_version

    require_relative 'rdoc'

    @rdoc_version = Gem::Version.new ::RDoc::VERSION
  end

  ##
  # Creates a new documentation generator for +spec+.  RDoc and ri data
  # generation can be enabled or disabled through +generate_rdoc+ and
  # +generate_ri+ respectively.
  #
  # Only +generate_ri+ is enabled by default.

  def initialize spec, generate_rdoc = false, generate_ri = true
    @doc_dir   = spec.doc_dir
    @force     = false
    @rdoc      = nil
    @spec      = spec

    @generate_rdoc = generate_rdoc
    @generate_ri   = generate_ri

    @rdoc_dir = spec.doc_dir 'rdoc'
    @ri_dir   = spec.doc_dir 'ri'
  end

  ##
  # Removes legacy rdoc arguments from +args+
  #--
  # TODO move to RDoc::Options

  def delete_legacy_args args
    args.delete '--inline-source'
    args.delete '--promiscuous'
    args.delete '-p'
    args.delete '--one-file'
  end

  ##
  # Generates documentation using the named +generator+ ("darkfish" or "ri")
  # and following the given +options+.
  #
  # Documentation will be generated into +destination+

  def document generator, options, destination
    generator_name = generator

    options = options.dup
    options.exclude ||= [] # TODO maybe move to RDoc::Options#finish
    options.setup_generator generator
    options.op_dir = destination
    Dir.chdir @spec.full_gem_path do
      options.finish
    end

    generator = options.generator.new @rdoc.store, options

    @rdoc.options = options
    @rdoc.generator = generator

    say "Installing #{generator_name} documentation for #{@spec.full_name}"

    FileUtils.mkdir_p options.op_dir

    Dir.chdir options.op_dir do
      begin
        @rdoc.class.current = @rdoc
        @rdoc.generator.generate
      ensure
        @rdoc.class.current = nil
      end
    end
  end

  ##
  # Generates RDoc and ri data

  def generate
    return if @spec.default_gem?
    return unless @generate_ri or @generate_rdoc

    setup

    options = nil

    args = @spec.rdoc_options
    args.concat @spec.source_paths
    args.concat @spec.extra_rdoc_files

    case config_args = Gem.configuration[:rdoc]
    when String then
      args = args.concat config_args.split(' ')
    when Array then
      args = args.concat config_args
    end

    delete_legacy_args args

    Dir.chdir @spec.full_gem_path do
      options = ::RDoc::Options.new
      options.default_title = "#{@spec.full_name} Documentation"
      options.parse args
    end

    options.quiet = !Gem.configuration.really_verbose

    @rdoc = new_rdoc
    @rdoc.options = options

    store = RDoc::Store.new
    store.encoding = options.encoding
    store.dry_run  = options.dry_run
    store.main     = options.main_page
    store.title    = options.title

    @rdoc.store = store

    say "Parsing documentation for #{@spec.full_name}"

    Dir.chdir @spec.full_gem_path do
      @rdoc.parse_files options.files
    end

    document 'ri',       options, @ri_dir if
      @generate_ri   and (@force or not File.exist? @ri_dir)

    document 'darkfish', options, @rdoc_dir if
      @generate_rdoc and (@force or not File.exist? @rdoc_dir)
  end

  ##
  # #new_rdoc creates a new RDoc instance.  This method is provided only to
  # make testing easier.

  def new_rdoc # :nodoc:
    ::RDoc::RDoc.new
  end

  ##
  # Is rdoc documentation installed?

  def rdoc_installed?
    File.exist? @rdoc_dir
  end

  ##
  # Removes generated RDoc and ri data

  def remove
    base_dir = @spec.base_dir

    raise Gem::FilePermissionError, base_dir unless File.writable? base_dir

    FileUtils.rm_rf @rdoc_dir
    FileUtils.rm_rf @ri_dir
  end

  ##
  # Is ri data installed?

  def ri_installed?
    File.exist? @ri_dir
  end

  ##
  # Prepares the spec for documentation generation

  def setup
    self.class.load_rdoc

    raise Gem::FilePermissionError, @doc_dir if
      File.exist?(@doc_dir) and not File.writable?(@doc_dir)

    FileUtils.mkdir_p @doc_dir unless File.exist? @doc_dir
  end

end
PK."#[��/s-5-5"gems/rdoc-6.4.1.1/lib/rdoc/rdoc.rbnu�[���# frozen_string_literal: true
require 'rdoc'

require 'find'
require 'fileutils'
require 'pathname'
require 'time'

##
# This is the driver for generating RDoc output.  It handles file parsing and
# generation of output.
#
# To use this class to generate RDoc output via the API, the recommended way
# is:
#
#   rdoc = RDoc::RDoc.new
#   options = RDoc::Options.load_options # returns an RDoc::Options instance
#   # set extra options
#   rdoc.document options
#
# You can also generate output like the +rdoc+ executable:
#
#   rdoc = RDoc::RDoc.new
#   rdoc.document argv
#
# Where +argv+ is an array of strings, each corresponding to an argument you'd
# give rdoc on the command line.  See <tt>rdoc --help</tt> for details.

class RDoc::RDoc

  @current = nil

  ##
  # This is the list of supported output generators

  GENERATORS = {}

  ##
  # Generator instance used for creating output

  attr_accessor :generator

  ##
  # Hash of files and their last modified times.

  attr_reader :last_modified

  ##
  # RDoc options

  attr_accessor :options

  ##
  # Accessor for statistics.  Available after each call to parse_files

  attr_reader :stats

  ##
  # The current documentation store

  attr_reader :store

  ##
  # Add +klass+ that can generate output after parsing

  def self.add_generator(klass)
    name = klass.name.sub(/^RDoc::Generator::/, '').downcase
    GENERATORS[name] = klass
  end

  ##
  # Active RDoc::RDoc instance

  def self.current
    @current
  end

  ##
  # Sets the active RDoc::RDoc instance

  def self.current= rdoc
    @current = rdoc
  end

  ##
  # Creates a new RDoc::RDoc instance.  Call #document to parse files and
  # generate documentation.

  def initialize
    @current       = nil
    @generator     = nil
    @last_modified = {}
    @old_siginfo   = nil
    @options       = nil
    @stats         = nil
    @store         = nil
  end

  ##
  # Report an error message and exit

  def error(msg)
    raise RDoc::Error, msg
  end

  ##
  # Gathers a set of parseable files from the files and directories listed in
  # +files+.

  def gather_files files
    files = ["."] if files.empty?

    file_list = normalized_file_list files, true, @options.exclude

    file_list = remove_unparseable(file_list)

    if file_list.count {|name, mtime|
         file_list[name] = @last_modified[name] unless mtime
         mtime
       } > 0
      @last_modified.replace file_list
      file_list.keys.sort
    else
      []
    end
  end

  ##
  # Turns RDoc from stdin into HTML

  def handle_pipe
    @html = RDoc::Markup::ToHtml.new @options

    parser = RDoc::Text::MARKUP_FORMAT[@options.markup]

    document = parser.parse $stdin.read

    out = @html.convert document

    $stdout.write out
  end

  ##
  # Installs a siginfo handler that prints the current filename.

  def install_siginfo_handler
    return unless Signal.list.include? 'INFO'

    @old_siginfo = trap 'INFO' do
      puts @current if @current
    end
  end

  ##
  # Create an output dir if it doesn't exist. If it does exist, but doesn't
  # contain the flag file <tt>created.rid</tt> then we refuse to use it, as
  # we may clobber some manually generated documentation

  def setup_output_dir(dir, force)
    flag_file = output_flag_file dir

    last = {}

    if @options.dry_run then
      # do nothing
    elsif File.exist? dir then
      error "#{dir} exists and is not a directory" unless File.directory? dir

      begin
        File.open flag_file do |io|
          unless force then
            Time.parse io.gets

            io.each do |line|
              file, time = line.split "\t", 2
              time = Time.parse(time) rescue next
              last[file] = time
            end
          end
        end
      rescue SystemCallError, TypeError
        error <<-ERROR

Directory #{dir} already exists, but it looks like it isn't an RDoc directory.

Because RDoc doesn't want to risk destroying any of your existing files,
you'll need to specify a different output directory name (using the --op <dir>
option)

        ERROR
      end unless @options.force_output
    else
      FileUtils.mkdir_p dir
      FileUtils.touch flag_file
    end

    last
  end

  ##
  # Sets the current documentation tree to +store+ and sets the store's rdoc
  # driver to this instance.

  def store= store
    @store = store
    @store.rdoc = self
  end

  ##
  # Update the flag file in an output directory.

  def update_output_dir(op_dir, time, last = {})
    return if @options.dry_run or not @options.update_output_dir
    unless ENV['SOURCE_DATE_EPOCH'].nil?
      time = Time.at(ENV['SOURCE_DATE_EPOCH'].to_i).gmtime
    end

    File.open output_flag_file(op_dir), "w" do |f|
      f.puts time.rfc2822
      last.each do |n, t|
        f.puts "#{n}\t#{t.rfc2822}"
      end
    end
  end

  ##
  # Return the path name of the flag file in an output directory.

  def output_flag_file(op_dir)
    File.join op_dir, "created.rid"
  end

  ##
  # The .document file contains a list of file and directory name patterns,
  # representing candidates for documentation. It may also contain comments
  # (starting with '#')

  def parse_dot_doc_file in_dir, filename
    # read and strip comments
    patterns = File.read(filename).gsub(/#.*/, '')

    result = {}

    patterns.split(' ').each do |patt|
      candidates = Dir.glob(File.join(in_dir, patt))
      result.update normalized_file_list(candidates, false, @options.exclude)
    end

    result
  end

  ##
  # Given a list of files and directories, create a list of all the Ruby
  # files they contain.
  #
  # If +force_doc+ is true we always add the given files, if false, only
  # add files that we guarantee we can parse.  It is true when looking at
  # files given on the command line, false when recursing through
  # subdirectories.
  #
  # The effect of this is that if you want a file with a non-standard
  # extension parsed, you must name it explicitly.

  def normalized_file_list(relative_files, force_doc = false,
                           exclude_pattern = nil)
    file_list = {}

    relative_files.each do |rel_file_name|
      rel_file_name = rel_file_name.sub(/^\.\//, '')
      next if rel_file_name.end_with? 'created.rid'
      next if exclude_pattern && exclude_pattern =~ rel_file_name
      stat = File.stat rel_file_name rescue next

      case type = stat.ftype
      when "file" then
        mtime = (stat.mtime unless (last_modified = @last_modified[rel_file_name] and
                                    stat.mtime.to_i <= last_modified.to_i))

        if force_doc or RDoc::Parser.can_parse(rel_file_name) then
          file_list[rel_file_name] = mtime
        end
      when "directory" then
        next if rel_file_name == "CVS" || rel_file_name == ".svn"

        created_rid = File.join rel_file_name, "created.rid"
        next if File.file? created_rid

        dot_doc = File.join rel_file_name, RDoc::DOT_DOC_FILENAME

        if File.file? dot_doc then
          file_list.update(parse_dot_doc_file(rel_file_name, dot_doc))
        else
          file_list.update(list_files_in_directory(rel_file_name))
        end
      else
        warn "rdoc can't parse the #{type} #{rel_file_name}"
      end
    end

    file_list
  end

  ##
  # Return a list of the files to be processed in a directory. We know that
  # this directory doesn't have a .document file, so we're looking for real
  # files. However we may well contain subdirectories which must be tested
  # for .document files.

  def list_files_in_directory dir
    files = Dir.glob File.join(dir, "*")

    normalized_file_list files, false, @options.exclude
  end

  ##
  # Parses +filename+ and returns an RDoc::TopLevel

  def parse_file filename
    encoding = @options.encoding
    filename = filename.encode encoding

    @stats.add_file filename

    return if RDoc::Parser.binary? filename

    content = RDoc::Encoding.read_file filename, encoding

    return unless content

    filename_path = Pathname(filename).expand_path
    begin
      relative_path = filename_path.relative_path_from @options.root
    rescue ArgumentError
      relative_path = filename_path
    end

    if @options.page_dir and
       relative_path.to_s.start_with? @options.page_dir.to_s then
      relative_path =
        relative_path.relative_path_from @options.page_dir
    end

    top_level = @store.add_file filename, relative_name: relative_path.to_s

    parser = RDoc::Parser.for top_level, filename, content, @options, @stats

    return unless parser

    parser.scan

    # restart documentation for the classes & modules found
    top_level.classes_or_modules.each do |cm|
      cm.done_documenting = false
    end

    top_level

  rescue Errno::EACCES => e
    $stderr.puts <<-EOF
Unable to read #{filename}, #{e.message}

Please check the permissions for this file.  Perhaps you do not have access to
it or perhaps the original author's permissions are to restrictive.  If the
this is not your library please report a bug to the author.
    EOF
  rescue => e
    $stderr.puts <<-EOF
Before reporting this, could you check that the file you're documenting
has proper syntax:

  #{Gem.ruby} -c #{filename}

RDoc is not a full Ruby parser and will fail when fed invalid ruby programs.

The internal error was:

\t(#{e.class}) #{e.message}

    EOF

    $stderr.puts e.backtrace.join("\n\t") if $DEBUG_RDOC

    raise e
    nil
  end

  ##
  # Parse each file on the command line, recursively entering directories.

  def parse_files files
    file_list = gather_files files
    @stats = RDoc::Stats.new @store, file_list.length, @options.verbosity

    return [] if file_list.empty?

    original_options = @options.dup
    @stats.begin_adding

    file_info = file_list.map do |filename|
      @current = filename
      parse_file filename
    end.compact

    @stats.done_adding
    @options = original_options

    file_info
  end

  ##
  # Removes file extensions known to be unparseable from +files+ and TAGS
  # files for emacs and vim.

  def remove_unparseable files
    files.reject do |file, *|
      file =~ /\.(?:class|eps|erb|scpt\.txt|svg|ttf|yml)$/i or
        (file =~ /tags$/i and
         File.open(file, 'rb') { |io|
           io.read(100) =~ /\A(\f\n[^,]+,\d+$|!_TAG_)/
         })
    end
  end

  ##
  # Generates documentation or a coverage report depending upon the settings
  # in +options+.
  #
  # +options+ can be either an RDoc::Options instance or an array of strings
  # equivalent to the strings that would be passed on the command line like
  # <tt>%w[-q -o doc -t My\ Doc\ Title]</tt>.  #document will automatically
  # call RDoc::Options#finish if an options instance was given.
  #
  # For a list of options, see either RDoc::Options or <tt>rdoc --help</tt>.
  #
  # By default, output will be stored in a directory called "doc" below the
  # current directory, so make sure you're somewhere writable before invoking.

  def document options
    self.store = RDoc::Store.new

    if RDoc::Options === options then
      @options = options
      @options.finish
    else
      @options = RDoc::Options.load_options
      @options.parse options
    end

    if @options.pipe then
      handle_pipe
      exit
    end

    unless @options.coverage_report then
      @last_modified = setup_output_dir @options.op_dir, @options.force_update
    end

    @store.encoding = @options.encoding
    @store.dry_run  = @options.dry_run
    @store.main     = @options.main_page
    @store.title    = @options.title
    @store.path     = @options.op_dir

    @start_time = Time.now

    @store.load_cache

    file_info = parse_files @options.files

    @options.default_title = "RDoc Documentation"

    @store.complete @options.visibility

    @stats.coverage_level = @options.coverage_report

    if @options.coverage_report then
      puts

      puts @stats.report.accept RDoc::Markup::ToRdoc.new
    elsif file_info.empty? then
      $stderr.puts "\nNo newer files." unless @options.quiet
    else
      gen_klass = @options.generator

      @generator = gen_klass.new @store, @options

      generate
    end

    if @stats and (@options.coverage_report or not @options.quiet) then
      puts
      puts @stats.summary.accept RDoc::Markup::ToRdoc.new
    end

    exit @stats.fully_documented? if @options.coverage_report
  end

  ##
  # Generates documentation for +file_info+ (from #parse_files) into the
  # output dir using the generator selected
  # by the RDoc options

  def generate
    if @options.dry_run then
      # do nothing
      @generator.generate
    else
      Dir.chdir @options.op_dir do
        unless @options.quiet then
          $stderr.puts "\nGenerating #{@generator.class.name.sub(/^.*::/, '')} format into #{Dir.pwd}..."
        end

        @generator.generate
        update_output_dir '.', @start_time, @last_modified
      end
    end
  end

  ##
  # Removes a siginfo handler and replaces the previous

  def remove_siginfo_handler
    return unless Signal.list.key? 'INFO'

    handler = @old_siginfo || 'DEFAULT'

    trap 'INFO', handler
  end

end

begin
  require 'rubygems'

  rdoc_extensions = Gem.find_files 'rdoc/discover'

  rdoc_extensions.each do |extension|
    begin
      load extension
    rescue => e
      warn "error loading #{extension.inspect}: #{e.message} (#{e.class})"
      warn "\t#{e.backtrace.join "\n\t"}" if $DEBUG
    end
  end
rescue LoadError
end

# require built-in generators after discovery in case they've been replaced
require_relative 'generator/darkfish'
require_relative 'generator/ri'
require_relative 'generator/pot'
PK."#[Pw_�{{-gems/rdoc-6.4.1.1/lib/rdoc/cross_reference.rbnu�[���# frozen_string_literal: true
##
# RDoc::CrossReference is a reusable way to create cross references for names.

class RDoc::CrossReference

  ##
  # Regular expression to match class references
  #
  # 1. There can be a '\\' in front of text to suppress the cross-reference
  # 2. There can be a '::' in front of class names to reference from the
  #    top-level namespace.
  # 3. The method can be followed by parenthesis (not recommended)

  CLASS_REGEXP_STR = '\\\\?((?:\:{2})?[A-Z]\w*(?:\:\:\w+)*)'

  ##
  # Regular expression to match method references.
  #
  # See CLASS_REGEXP_STR

  METHOD_REGEXP_STR = '([A-Za-z]\w*[!?=]?|%|===?|\[\]=?|<<|>>|\+@|-@|-|\+|\*)(?:\([\w.+*/=<>-]*\))?'

  ##
  # Regular expressions matching text that should potentially have
  # cross-reference links generated are passed to add_regexp_handling. Note
  # that these expressions are meant to pick up text for which cross-references
  # have been suppressed, since the suppression characters are removed by the
  # code that is triggered.

  CROSSREF_REGEXP = /(?:^|[\s()])
                     (
                      (?:
                       # A::B::C.meth
                       #{CLASS_REGEXP_STR}(?:[.#]|::)#{METHOD_REGEXP_STR}

                       # A::B::C
                       # The stuff after CLASS_REGEXP_STR is a
                       # nasty hack.  CLASS_REGEXP_STR unfortunately matches
                       # words like dog and cat (these are legal "class"
                       # names in Fortran 95).  When a word is flagged as a
                       # potential cross-reference, limitations in the markup
                       # engine suppress other processing, such as typesetting.
                       # This is particularly noticeable for contractions.
                       # In order that words like "can't" not
                       # be flagged as potential cross-references, only
                       # flag potential class cross-references if the character
                       # after the cross-reference is a space, sentence
                       # punctuation, tag start character, or attribute
                       # marker.
                       | #{CLASS_REGEXP_STR}(?=[@\s).?!,;<\000]|\z)

                       # Stand-alone method (preceded by a #)
                       | \\?\##{METHOD_REGEXP_STR}

                       # Stand-alone method (preceded by ::)
                       | ::#{METHOD_REGEXP_STR}

                       # Things that look like filenames
                       # The key thing is that there must be at least
                       # one special character (period, slash, or
                       # underscore).
                       | (?:\.\.\/)*[-\/\w]+[_\/.][-\w\/.]+

                       # Things that have markup suppressed
                       # Don't process things like '\<' in \<tt>, though.
                       # TODO: including < is a hack, not very satisfying.
                       | \\[^\s<]
                      )

                      # labels for headings
                      (?:@[\w+%-]+(?:\.[\w|%-]+)?)?
                     )/x

  ##
  # Version of CROSSREF_REGEXP used when <tt>--hyperlink-all</tt> is specified.

  ALL_CROSSREF_REGEXP = /
                     (?:^|[\s()])
                     (
                      (?:
                       # A::B::C.meth
                       #{CLASS_REGEXP_STR}(?:[.#]|::)#{METHOD_REGEXP_STR}

                       # A::B::C
                       | #{CLASS_REGEXP_STR}(?=[@\s).?!,;<\000]|\z)

                       # Stand-alone method
                       | \\?#{METHOD_REGEXP_STR}

                       # Things that look like filenames
                       | (?:\.\.\/)*[-\/\w]+[_\/.][-\w\/.]+

                       # Things that have markup suppressed
                       | \\[^\s<]
                      )

                      # labels for headings
                      (?:@[\w+%-]+)?
                     )/x

  ##
  # Hash of references that have been looked-up to their replacements

  attr_accessor :seen

  ##
  # Allows cross-references to be created based on the given +context+
  # (RDoc::Context).

  def initialize context
    @context = context
    @store   = context.store

    @seen = {}
  end

  def resolve_method name
    ref = nil

    if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
      type = $2
      if '.' == type # will find either #method or ::method
        method = $3
      else
        method = "#{type}#{$3}"
      end
      container = @context.find_symbol_module($1)
    elsif /^([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then
      type = $1
      if '.' == type
        method = $2
      else
        method = "#{type}#{$2}"
      end
      container = @context
    else
      type = nil
      container = nil
    end

    if container then
      unless RDoc::TopLevel === container then
        if '.' == type then
          if 'new' == method then # AnyClassName.new will be class method
            ref = container.find_local_symbol method
            ref = container.find_ancestor_local_symbol method unless ref
          else
            ref = container.find_local_symbol "::#{method}"
            ref = container.find_ancestor_local_symbol "::#{method}" unless ref
            ref = container.find_local_symbol "##{method}" unless ref
            ref = container.find_ancestor_local_symbol "##{method}" unless ref
          end
        else
          ref = container.find_local_symbol method
          ref = container.find_ancestor_local_symbol method unless ref
        end
      end
    end

    ref
  end

  ##
  # Returns a reference to +name+.
  #
  # If the reference is found and +name+ is not documented +text+ will be
  # returned.  If +name+ is escaped +name+ is returned.  If +name+ is not
  # found +text+ is returned.

  def resolve name, text
    return @seen[name] if @seen.include? name

    ref = case name
          when /^\\(#{CLASS_REGEXP_STR})$/o then
            @context.find_symbol $1
          else
            @context.find_symbol name
          end

    ref = resolve_method name unless ref

    # Try a page name
    ref = @store.page name if not ref and name =~ /^[\w.]+$/

    ref = nil if RDoc::Alias === ref # external alias, can't link to it

    out = if name == '\\' then
            name
          elsif name =~ /^\\/ then
            # we remove the \ only in front of what we know:
            # other backslashes are treated later, only outside of <tt>
            ref ? $' : name
          elsif ref then
            if ref.display? then
              ref
            else
              text
            end
          else
            text
          end

    @seen[name] = out

    out
  end

end

PK."#[󈗢��+gems/rdoc-6.4.1.1/lib/rdoc/normal_module.rbnu�[���# frozen_string_literal: true
##
# A normal module, like NormalClass

class RDoc::NormalModule < RDoc::ClassModule

  def aref_prefix # :nodoc:
    'module'
  end

  def inspect # :nodoc:
    "#<%s:0x%x module %s includes: %p extends: %p attributes: %p methods: %p aliases: %p>" % [
      self.class, object_id,
      full_name, @includes, @extends, @attributes, @method_list, @aliases
    ]
  end

  ##
  # The definition of this module, <tt>module MyModuleName</tt>

  def definition
    "module #{full_name}"
  end

  ##
  # This is a module, returns true

  def module?
    true
  end

  def pretty_print q # :nodoc:
    q.group 2, "[module #{full_name}: ", "]" do
      q.breakable
      q.text "includes:"
      q.breakable
      q.seplist @includes do |inc| q.pp inc end
      q.breakable

      q.breakable
      q.text "constants:"
      q.breakable
      q.seplist @constants do |const| q.pp const end

      q.text "attributes:"
      q.breakable
      q.seplist @attributes do |attr| q.pp attr end
      q.breakable

      q.text "methods:"
      q.breakable
      q.seplist @method_list do |meth| q.pp meth end
      q.breakable

      q.text "aliases:"
      q.breakable
      q.seplist @aliases do |aliaz| q.pp aliaz end
      q.breakable

      q.text "comment:"
      q.breakable
      q.pp comment
    end
  end

  ##
  # Modules don't have one, raises NoMethodError

  def superclass
    raise NoMethodError, "#{full_name} is a module"
  end

end

PK."#[��y��&gems/rdoc-6.4.1.1/lib/rdoc/encoding.rbnu�[���# coding: US-ASCII
# frozen_string_literal: true

##
# This class is a wrapper around File IO and Encoding that helps RDoc load
# files and convert them to the correct encoding.

module RDoc::Encoding

  HEADER_REGEXP = /^
    (?:
      \A\#!.*\n
      |
      ^\#\s+frozen[-_]string[-_]literal[=:].+\n
      |
      ^\#[^\n]+\b(?:en)?coding[=:]\s*(?<name>[^\s;]+).*\n
      |
      <\?xml[^?]*encoding=(?<quote>["'])(?<name>.*?)\k<quote>.*\n
    )+
  /xi # :nodoc:

  ##
  # Reads the contents of +filename+ and handles any encoding directives in
  # the file.
  #
  # The content will be converted to the +encoding+.  If the file cannot be
  # converted a warning will be printed and nil will be returned.
  #
  # If +force_transcode+ is true the document will be transcoded and any
  # unknown character in the target encoding will be replaced with '?'

  def self.read_file filename, encoding, force_transcode = false
    content = File.open filename, "rb" do |f| f.read end
    content.gsub!("\r\n", "\n") if RUBY_PLATFORM =~ /mswin|mingw/

    utf8 = content.sub!(/\A\xef\xbb\xbf/, '')

    enc = RDoc::Encoding.detect_encoding content
    content = RDoc::Encoding.change_encoding content, enc if enc

    begin
      encoding ||= Encoding.default_external
      orig_encoding = content.encoding

      if not orig_encoding.ascii_compatible? then
        content = content.encode encoding
      elsif utf8 then
        content = RDoc::Encoding.change_encoding content, Encoding::UTF_8
        content = content.encode encoding
      else
        # assume the content is in our output encoding
        content = RDoc::Encoding.change_encoding content, encoding
      end

      unless content.valid_encoding? then
        # revert and try to transcode
        content = RDoc::Encoding.change_encoding content, orig_encoding
        content = content.encode encoding
      end

      unless content.valid_encoding? then
        warn "unable to convert #{filename} to #{encoding}, skipping"
        content = nil
      end
    rescue Encoding::InvalidByteSequenceError,
           Encoding::UndefinedConversionError => e
      if force_transcode then
        content = RDoc::Encoding.change_encoding content, orig_encoding
        content = content.encode(encoding,
                                 :invalid => :replace,
                                 :undef => :replace,
                                 :replace => '?')
        return content
      else
        warn "unable to convert #{e.message} for #{filename}, skipping"
        return nil
      end
    end

    content
  rescue ArgumentError => e
    raise unless e.message =~ /unknown encoding name - (.*)/
    warn "unknown encoding name \"#{$1}\" for #{filename}, skipping"
    nil
  rescue Errno::EISDIR, Errno::ENOENT
    nil
  end

  def self.remove_frozen_string_literal string
    string =~ /\A(?:#!.*\n)?(.*\n)/
    first_line = $1

    if first_line =~ /\A# +frozen[-_]string[-_]literal[=:].+$/i
      string = string.sub first_line, ''
    end

    string
  end

  ##
  # Detects the encoding of +string+ based on the magic comment

  def self.detect_encoding string
    result = HEADER_REGEXP.match string
    name = result && result[:name]

    name ? Encoding.find(name) : nil
  end

  ##
  # Removes magic comments and shebang

  def self.remove_magic_comment string
    string.sub HEADER_REGEXP do |s|
      s.gsub(/[^\n]/, '')
    end
  end

  ##
  # Changes encoding based on +encoding+ without converting and returns new
  # string

  def self.change_encoding text, encoding
    if text.kind_of? RDoc::Comment
      text.encode! encoding
    else
      # TODO: Remove this condition after Ruby 2.2 EOL
      if RUBY_VERSION < '2.3.0'
        text.force_encoding encoding
      else
        String.new text, encoding: encoding
      end
    end
  end

end
PK."#[bb�]]&gems/rdoc-6.4.1.1/lib/rdoc/constant.rbnu�[���# frozen_string_literal: true
##
# A constant

class RDoc::Constant < RDoc::CodeObject

  MARSHAL_VERSION = 0 # :nodoc:

  ##
  # Sets the module or class this is constant is an alias for.

  attr_writer :is_alias_for

  ##
  # The constant's name

  attr_accessor :name

  ##
  # The constant's value

  attr_accessor :value

  ##
  # The constant's visibility

  attr_accessor :visibility

  ##
  # Creates a new constant with +name+, +value+ and +comment+

  def initialize(name, value, comment)
    super()

    @name  = name
    @value = value

    @is_alias_for = nil
    @visibility   = :public

    self.comment = comment
  end

  ##
  # Constants are ordered by name

  def <=> other
    return unless self.class === other

    [parent_name, name] <=> [other.parent_name, other.name]
  end

  ##
  # Constants are equal when their #parent and #name is the same

  def == other
    self.class == other.class and
      @parent == other.parent and
      @name == other.name
  end

  ##
  # A constant is documented if it has a comment, or is an alias
  # for a documented class or module.

  def documented?
    return true if super
    return false unless @is_alias_for
    case @is_alias_for
    when String then
      found = @store.find_class_or_module @is_alias_for
      return false unless found
      @is_alias_for = found
    end
    @is_alias_for.documented?
  end

  ##
  # Full constant name including namespace

  def full_name
    @full_name ||= "#{parent_name}::#{@name}"
  end

  ##
  # The module or class this constant is an alias for

  def is_alias_for
    case @is_alias_for
    when String then
      found = @store.find_class_or_module @is_alias_for
      @is_alias_for = found if found
      @is_alias_for
    else
      @is_alias_for
    end
  end

  def inspect # :nodoc:
    "#<%s:0x%x %s::%s>" % [
      self.class, object_id,
      parent_name, @name,
    ]
  end

  ##
  # Dumps this Constant for use by ri.  See also #marshal_load

  def marshal_dump
    alias_name = case found = is_alias_for
                 when RDoc::CodeObject then found.full_name
                 else                       found
                 end

    [ MARSHAL_VERSION,
      @name,
      full_name,
      @visibility,
      alias_name,
      parse(@comment),
      @file.relative_name,
      parent.name,
      parent.class,
      section.title,
    ]
  end

  ##
  # Loads this Constant from +array+.  For a loaded Constant the following
  # methods will return cached values:
  #
  # * #full_name
  # * #parent_name

  def marshal_load array
    initialize array[1], nil, array[5]

    @full_name     = array[2]
    @visibility    = array[3] || :public
    @is_alias_for  = array[4]
    #                      5 handled above
    #                      6 handled below
    @parent_name   = array[7]
    @parent_class  = array[8]
    @section_title = array[9]

    @file = RDoc::TopLevel.new array[6]
  end

  ##
  # Path to this constant for use with HTML generator output.

  def path
    "#{@parent.path}##{@name}"
  end

  def pretty_print q # :nodoc:
    q.group 2, "[#{self.class.name} #{full_name}", "]" do
      unless comment.empty? then
        q.breakable
        q.text "comment:"
        q.breakable
        q.pp @comment
      end
    end
  end

  ##
  # Sets the store for this class or module and its contained code objects.

  def store= store
    super

    @file = @store.add_file @file.full_name if @file
  end

  def to_s # :nodoc:
    parent_name = parent ? parent.full_name : '(unknown)'
    if is_alias_for
      "constant #{parent_name}::#@name -> #{is_alias_for}"
    else
      "constant #{parent_name}::#@name"
    end
  end

end

PK."#[L���)gems/rdoc-6.4.1.1/lib/rdoc/erb_partial.rbnu�[���# frozen_string_literal: true
##
# Allows an ERB template to be rendered in the context (binding) of an
# existing ERB template evaluation.

class RDoc::ERBPartial < ERB

  ##
  # Overrides +compiler+ startup to set the +eoutvar+ to an empty string only
  # if it isn't already set.

  def set_eoutvar compiler, eoutvar = '_erbout'
    super

    compiler.pre_cmd = ["#{eoutvar} ||= +''"]
  end

end

PK."#[
[>		"gems/rdoc-6.4.1.1/lib/rdoc/attr.rbnu�[���# frozen_string_literal: true
##
# An attribute created by \#attr, \#attr_reader, \#attr_writer or
# \#attr_accessor

class RDoc::Attr < RDoc::MethodAttr

  ##
  # 3::
  #   RDoc 4
  #    Added parent name and class
  #    Added section title

  MARSHAL_VERSION = 3 # :nodoc:

  ##
  # Is the attribute readable ('R'), writable ('W') or both ('RW')?

  attr_accessor :rw

  ##
  # Creates a new Attr with body +text+, +name+, read/write status +rw+ and
  # +comment+.  +singleton+ marks this as a class attribute.

  def initialize(text, name, rw, comment, singleton = false)
    super text, name

    @rw = rw
    @singleton = singleton
    self.comment = comment
  end

  ##
  # Attributes are equal when their names, singleton and rw are identical

  def == other
    self.class == other.class and
      self.name == other.name and
      self.rw == other.rw and
      self.singleton == other.singleton
  end

  ##
  # Add +an_alias+ as an attribute in +context+.

  def add_alias(an_alias, context)
    new_attr = self.class.new(self.text, an_alias.new_name, self.rw,
                              self.comment, self.singleton)

    new_attr.record_location an_alias.file
    new_attr.visibility = self.visibility
    new_attr.is_alias_for = self
    @aliases << new_attr
    context.add_attribute new_attr
    new_attr
  end

  ##
  # The #aref prefix for attributes

  def aref_prefix
    'attribute'
  end

  ##
  # Attributes never call super.  See RDoc::AnyMethod#calls_super
  #
  # An RDoc::Attr can show up in the method list in some situations (see
  # Gem::ConfigFile)

  def calls_super # :nodoc:
    false
  end

  ##
  # Returns attr_reader, attr_writer or attr_accessor as appropriate.

  def definition
    case @rw
    when 'RW' then 'attr_accessor'
    when 'R'  then 'attr_reader'
    when 'W'  then 'attr_writer'
    end
  end

  def inspect # :nodoc:
    alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
    visibility = self.visibility
    visibility = "forced #{visibility}" if force_documentation
    "#<%s:0x%x %s %s (%s)%s>" % [
      self.class, object_id,
      full_name,
      rw,
      visibility,
      alias_for,
    ]
  end

  ##
  # Dumps this Attr for use by ri.  See also #marshal_load

  def marshal_dump
    [ MARSHAL_VERSION,
      @name,
      full_name,
      @rw,
      @visibility,
      parse(@comment),
      singleton,
      @file.relative_name,
      @parent.full_name,
      @parent.class,
      @section.title
    ]
  end

  ##
  # Loads this Attr from +array+.  For a loaded Attr the following
  # methods will return cached values:
  #
  # * #full_name
  # * #parent_name

  def marshal_load array
    initialize_visibility

    @aliases      = []
    @parent       = nil
    @parent_name  = nil
    @parent_class = nil
    @section      = nil
    @file         = nil

    version        = array[0]
    @name          = array[1]
    @full_name     = array[2]
    @rw            = array[3]
    @visibility    = array[4]
    @comment       = array[5]
    @singleton     = array[6] || false # MARSHAL_VERSION == 0
    #                      7 handled below
    @parent_name   = array[8]
    @parent_class  = array[9]
    @section_title = array[10]

    @file = RDoc::TopLevel.new array[7] if version > 1

    @parent_name ||= @full_name.split('#', 2).first
  end

  def pretty_print q # :nodoc:
    q.group 2, "[#{self.class.name} #{full_name} #{rw} #{visibility}", "]" do
      unless comment.empty? then
        q.breakable
        q.text "comment:"
        q.breakable
        q.pp @comment
      end
    end
  end

  def to_s # :nodoc:
    "#{definition} #{name} in: #{parent}"
  end

  ##
  # Attributes do not have token streams.
  #
  # An RDoc::Attr can show up in the method list in some situations (see
  # Gem::ConfigFile)

  def token_stream # :nodoc:
  end

end

PK."#[:�ܶ�'gems/rdoc-6.4.1.1/lib/rdoc/parser/rd.rbnu�[���# frozen_string_literal: true
##
# Parse a RD format file.  The parsed RDoc::Markup::Document is attached as a
# file comment.

class RDoc::Parser::RD < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(/\.rd(?:\.[^.]+)?$/)

  ##
  # Creates an rd-format TopLevel for the given file.

  def scan
    comment = RDoc::Comment.new @content, @top_level
    comment.format = 'rd'

    @top_level.comment = comment
  end

end

PK."#[?�S����&gems/rdoc-6.4.1.1/lib/rdoc/parser/c.rbnu�[���# frozen_string_literal: true
require 'tsort'

##
# RDoc::Parser::C attempts to parse C extension files.  It looks for
# the standard patterns that you find in extensions: +rb_define_class+,
# +rb_define_method+ and so on.  It tries to find the corresponding
# C source for the methods and extract comments, but if we fail
# we don't worry too much.
#
# The comments associated with a Ruby method are extracted from the C
# comment block associated with the routine that _implements_ that
# method, that is to say the method whose name is given in the
# +rb_define_method+ call. For example, you might write:
#
#   /*
#    * Returns a new array that is a one-dimensional flattening of this
#    * array (recursively). That is, for every element that is an array,
#    * extract its elements into the new array.
#    *
#    *    s = [ 1, 2, 3 ]           #=> [1, 2, 3]
#    *    t = [ 4, 5, 6, [7, 8] ]   #=> [4, 5, 6, [7, 8]]
#    *    a = [ s, t, 9, 10 ]       #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
#    *    a.flatten                 #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#    */
#    static VALUE
#    rb_ary_flatten(VALUE ary)
#    {
#        ary = rb_obj_dup(ary);
#        rb_ary_flatten_bang(ary);
#        return ary;
#    }
#
#    ...
#
#    void
#    Init_Array(void)
#    {
#      ...
#      rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);
#
# Here RDoc will determine from the +rb_define_method+ line that there's a
# method called "flatten" in class Array, and will look for the implementation
# in the method +rb_ary_flatten+. It will then use the comment from that
# method in the HTML output. This method must be in the same source file
# as the +rb_define_method+.
#
# The comment blocks may include special directives:
#
# [Document-class: +name+]
#   Documentation for the named class.
#
# [Document-module: +name+]
#   Documentation for the named module.
#
# [Document-const: +name+]
#   Documentation for the named +rb_define_const+.
#
#   Constant values can be supplied on the first line of the comment like so:
#
#     /* 300: The highest possible score in bowling */
#     rb_define_const(cFoo, "PERFECT", INT2FIX(300));
#
#   The value can contain internal colons so long as they are escaped with a \
#
# [Document-global: +name+]
#   Documentation for the named +rb_define_global_const+
#
# [Document-variable: +name+]
#   Documentation for the named +rb_define_variable+
#
# [Document-method\: +method_name+]
#   Documentation for the named method.  Use this when the method name is
#   unambiguous.
#
# [Document-method\: <tt>ClassName::method_name</tt>]
#   Documentation for a singleton method in the given class.  Use this when
#   the method name alone is ambiguous.
#
# [Document-method\: <tt>ClassName#method_name</tt>]
#   Documentation for a instance method in the given class.  Use this when the
#   method name alone is ambiguous.
#
# [Document-attr: +name+]
#   Documentation for the named attribute.
#
# [call-seq:  <i>text up to an empty line</i>]
#   Because C source doesn't give descriptive names to Ruby-level parameters,
#   you need to document the calling sequence explicitly
#
# In addition, RDoc assumes by default that the C method implementing a
# Ruby function is in the same source file as the rb_define_method call.
# If this isn't the case, add the comment:
#
#   rb_define_method(....);  // in filename
#
# As an example, we might have an extension that defines multiple classes
# in its Init_xxx method. We could document them using
#
#   /*
#    * Document-class:  MyClass
#    *
#    * Encapsulate the writing and reading of the configuration
#    * file. ...
#    */
#
#   /*
#    * Document-method: read_value
#    *
#    * call-seq:
#    *   cfg.read_value(key)            -> value
#    *   cfg.read_value(key} { |key| }  -> value
#    *
#    * Return the value corresponding to +key+ from the configuration.
#    * In the second form, if the key isn't found, invoke the
#    * block and return its value.
#    */

class RDoc::Parser::C < RDoc::Parser

  parse_files_matching(/\.(?:([CcHh])\1?|c([+xp])\2|y)\z/)

  include RDoc::Text

  ##
  # Maps C variable names to names of Ruby classes or modules

  attr_reader :classes

  ##
  # C file the parser is parsing

  attr_accessor :content

  ##
  # Dependencies from a missing enclosing class to the classes in
  # missing_dependencies that depend upon it.

  attr_reader :enclosure_dependencies

  ##
  # Maps C variable names to names of Ruby classes (and singleton classes)

  attr_reader :known_classes

  ##
  # Classes found while parsing the C file that were not yet registered due to
  # a missing enclosing class.  These are processed by do_missing

  attr_reader :missing_dependencies

  ##
  # Maps C variable names to names of Ruby singleton classes

  attr_reader :singleton_classes

  ##
  # The TopLevel items in the parsed file belong to

  attr_reader :top_level

  ##
  # Prepares for parsing a C file.  See RDoc::Parser#initialize for details on
  # the arguments.

  def initialize top_level, file_name, content, options, stats
    super

    @known_classes = RDoc::KNOWN_CLASSES.dup
    @content = handle_tab_width handle_ifdefs_in @content
    @file_dir = File.dirname @file_name

    @classes           = load_variable_map :c_class_variables
    @singleton_classes = load_variable_map :c_singleton_class_variables

    @markup = @options.markup

    # class_variable => { function => [method, ...] }
    @methods = Hash.new { |h, f| h[f] = Hash.new { |i, m| i[m] = [] } }

    # missing variable => [handle_class_module arguments]
    @missing_dependencies = {}

    # missing enclosure variable => [dependent handle_class_module arguments]
    @enclosure_dependencies = Hash.new { |h, k| h[k] = [] }
    @enclosure_dependencies.instance_variable_set :@missing_dependencies,
                                                  @missing_dependencies

    @enclosure_dependencies.extend TSort

    def @enclosure_dependencies.tsort_each_node &block
      each_key(&block)
    rescue TSort::Cyclic => e
      cycle_vars = e.message.scan(/"(.*?)"/).flatten

      cycle = cycle_vars.sort.map do |var_name|
        delete var_name

        var_name, type, mod_name, = @missing_dependencies[var_name]

        "#{type} #{mod_name} (#{var_name})"
      end.join ', '

      warn "Unable to create #{cycle} due to a cyclic class or module creation"

      retry
    end

    def @enclosure_dependencies.tsort_each_child node, &block
      fetch(node, []).each(&block)
    end
  end

  ##
  # Scans #content for rb_define_alias

  def do_aliases
    @content.scan(/rb_define_alias\s*\(
                   \s*(\w+),
                   \s*"(.+?)",
                   \s*"(.+?)"
                   \s*\)/xm) do |var_name, new_name, old_name|
      class_name = @known_classes[var_name]

      unless class_name then
        @options.warn "Enclosing class or module %p for alias %s %s is not known" % [
          var_name, new_name, old_name]
        next
      end

      class_obj = find_class var_name, class_name
      comment = find_alias_comment var_name, new_name, old_name
      comment.normalize
      if comment.to_s.empty? and existing_method = class_obj.method_list.find { |m| m.name == old_name}
        comment = existing_method.comment
      end
      add_alias(var_name, class_obj, old_name, new_name, comment)
    end
  end

  ##
  # Add alias, either from a direct alias definition, or from two
  # method that reference the same function.

  def add_alias(var_name, class_obj, old_name, new_name, comment)
    al = RDoc::Alias.new '', old_name, new_name, ''
    al.singleton = @singleton_classes.key? var_name
    al.comment = comment
    al.record_location @top_level
    class_obj.add_alias al
    @stats.add_alias al
    al
  end

  ##
  # Scans #content for rb_attr and rb_define_attr

  def do_attrs
    @content.scan(/rb_attr\s*\(
                   \s*(\w+),
                   \s*([\w"()]+),
                   \s*([01]),
                   \s*([01]),
                   \s*\w+\);/xm) do |var_name, attr_name, read, write|
      handle_attr var_name, attr_name, read, write
    end

    @content.scan(%r%rb_define_attr\(
                             \s*([\w\.]+),
                             \s*"([^"]+)",
                             \s*(\d+),
                             \s*(\d+)\s*\);
                %xm) do |var_name, attr_name, read, write|
      handle_attr var_name, attr_name, read, write
    end
  end

  ##
  # Scans #content for boot_defclass

  def do_boot_defclass
    @content.scan(/(\w+)\s*=\s*boot_defclass\s*\(\s*"(\w+?)",\s*(\w+?)\s*\)/) do
      |var_name, class_name, parent|
      parent = nil if parent == "0"
      handle_class_module(var_name, :class, class_name, parent, nil)
    end
  end

  ##
  # Scans #content for rb_define_class, boot_defclass, rb_define_class_under
  # and rb_singleton_class

  def do_classes_and_modules
    do_boot_defclass if @file_name == "class.c"

    @content.scan(
      %r(
        (?<var_name>[\w\.]+)\s* =
        \s*rb_(?:
          define_(?:
            class(?: # rb_define_class(class_name_1, parent_name_1)
              \s*\(
                \s*"(?<class_name_1>\w+)",
                \s*(?<parent_name_1>\w+)\s*
              \)
            |
              _under\s*\( # rb_define_class_under(class_under, class_name2, parent_name2...)
                \s* (?<class_under>\w+),
                \s* "(?<class_name_2>\w+)",
                \s*
                (?:
                  (?<parent_name_2>[\w\*\s\(\)\.\->]+) |
                  rb_path2class\("(?<path>[\w:]+)"\)
                )
              \s*\)
            )
          |
            module(?: # rb_define_module(module_name_1)
              \s*\(
                \s*"(?<module_name_1>\w+)"\s*
              \)
            |
              _under\s*\( # rb_define_module_under(module_under, module_name_2)
                \s*(?<module_under>\w+),
                \s*"(?<module_name_2>\w+)"
              \s*\)
            )
          )
      |
        struct_define_without_accessor\s*\( # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
          \s*"(?<class_name_3>\w+)",
          \s*(?<parent_name_3>\w+),
          \s*\w+,        # Allocation function
          (?:\s*"\w+",)* # Attributes
          \s*NULL
        \)
      |
        singleton_class\s*\( # rb_singleton_class(target_class_name)
          \s*(?<target_class_name>\w+)
        \)
        )
      )mx
    ) do
      class_name = $~[:class_name_1]
      type = :class
      if class_name
        # rb_define_class(class_name_1, parent_name_1)
        parent_name = $~[:parent_name_1]
        #under = nil
      else
        class_name = $~[:class_name_2]
        if class_name
          # rb_define_class_under(class_under, class_name2, parent_name2...)
          parent_name = $~[:parent_name_2] || $~[:path]
          under = $~[:class_under]
        else
          class_name = $~[:class_name_3]
          if class_name
            # rb_struct_define_without_accessor(class_name_3, parent_name_3, ...)
            parent_name = $~[:parent_name_3]
            #under = nil
          else
            type = :module
            class_name = $~[:module_name_1]
            #parent_name = nil
            if class_name
              # rb_define_module(module_name_1)
              #under = nil
            else
              class_name = $~[:module_name_2]
              if class_name
                # rb_define_module_under(module_under, module_name_1)
                under = $~[:module_under]
              else
                # rb_singleton_class(target_class_name)
                target_class_name = $~[:target_class_name]
                handle_singleton $~[:var_name], target_class_name
                next
              end
            end
          end
        end
      end

      handle_class_module($~[:var_name], type, class_name, parent_name, under)
    end
  end

  ##
  # Scans #content for rb_define_variable, rb_define_readonly_variable,
  # rb_define_const and rb_define_global_const

  def do_constants
    @content.scan(%r%\Wrb_define_
                   ( variable          |
                     readonly_variable |
                     const             |
                     global_const        )
               \s*\(
                 (?:\s*(\w+),)?
                 \s*"(\w+)",
                 \s*(.*?)\s*\)\s*;
                 %xm) do |type, var_name, const_name, definition|
      var_name = "rb_cObject" if !var_name or var_name == "rb_mKernel"
      handle_constants type, var_name, const_name, definition
    end

    @content.scan(%r%
                  \Wrb_curses_define_const
                  \s*\(
                    \s*
                    (\w+)
                    \s*
                  \)
                  \s*;%xm) do |consts|
      const = consts.first

      handle_constants 'const', 'mCurses', const, "UINT2NUM(#{const})"
    end

    @content.scan(%r%
                  \Wrb_file_const
                  \s*\(
                    \s*
                    "([^"]+)",
                    \s*
                    (.*?)
                    \s*
                  \)
                  \s*;%xm) do |name, value|
      handle_constants 'const', 'rb_mFConst', name, value
    end
  end


  ##
  # Scans #content for rb_include_module

  def do_includes
    @content.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c,m|
      next unless cls = @classes[c]
      m = @known_classes[m] || m

      comment = new_comment '', @top_level, :c
      incl = cls.add_include RDoc::Include.new(m, comment)
      incl.record_location @top_level
    end
  end

  ##
  # Scans #content for rb_define_method, rb_define_singleton_method,
  # rb_define_module_function, rb_define_private_method,
  # rb_define_global_function and define_filetest_function

  def do_methods
    @content.scan(%r%rb_define_
                   (
                      singleton_method |
                      method           |
                      module_function  |
                      private_method
                   )
                   \s*\(\s*([\w\.]+),
                     \s*"([^"]+)",
                     \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\(|\(METHOD\))?(\w+)\)?,
                     \s*(-?\w+)\s*\)
                   (?:;\s*/[*/]\s+in\s+(\w+?\.(?:cpp|c|y)))?
                 %xm) do |type, var_name, meth_name, function, param_count, source_file|

      # Ignore top-object and weird struct.c dynamic stuff
      next if var_name == "ruby_top_self"
      next if var_name == "nstr"

      var_name = "rb_cObject" if var_name == "rb_mKernel"
      handle_method(type, var_name, meth_name, function, param_count,
                    source_file)
    end

    @content.scan(%r%rb_define_global_function\s*\(
                             \s*"([^"]+)",
                             \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
                             \s*(-?\w+)\s*\)
                (?:;\s*/[*/]\s+in\s+(\w+?\.[cy]))?
                %xm) do |meth_name, function, param_count, source_file|
      handle_method("method", "rb_mKernel", meth_name, function, param_count,
                    source_file)
    end

    @content.scan(/define_filetest_function\s*\(
                     \s*"([^"]+)",
                     \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
                     \s*(-?\w+)\s*\)/xm) do |meth_name, function, param_count|

      handle_method("method", "rb_mFileTest", meth_name, function, param_count)
      handle_method("singleton_method", "rb_cFile", meth_name, function,
                    param_count)
    end
  end

  ##
  # Creates classes and module that were missing were defined due to the file
  # order being different than the declaration order.

  def do_missing
    return if @missing_dependencies.empty?

    @enclosure_dependencies.tsort.each do |in_module|
      arguments = @missing_dependencies.delete in_module

      next unless arguments # dependency on existing class

      handle_class_module(*arguments)
    end
  end

  ##
  # Finds the comment for an alias on +class_name+ from +new_name+ to
  # +old_name+

  def find_alias_comment class_name, new_name, old_name
    content =~ %r%((?>/\*.*?\*/\s+))
                  rb_define_alias\(\s*#{Regexp.escape class_name}\s*,
                                   \s*"#{Regexp.escape new_name}"\s*,
                                   \s*"#{Regexp.escape old_name}"\s*\);%xm

    new_comment($1 || '', @top_level, :c)
  end

  ##
  # Finds a comment for rb_define_attr, rb_attr or Document-attr.
  #
  # +var_name+ is the C class variable the attribute is defined on.
  # +attr_name+ is the attribute's name.
  #
  # +read+ and +write+ are the read/write flags ('1' or '0').  Either both or
  # neither must be provided.

  def find_attr_comment var_name, attr_name, read = nil, write = nil
    attr_name = Regexp.escape attr_name

    rw = if read and write then
           /\s*#{read}\s*,\s*#{write}\s*/xm
         else
           /.*?/m
         end

    comment = if @content =~ %r%((?>/\*.*?\*/\s+))
                                rb_define_attr\((?:\s*#{var_name},)?\s*
                                                "#{attr_name}"\s*,
                                                #{rw}\)\s*;%xm then
                $1
              elsif @content =~ %r%((?>/\*.*?\*/\s+))
                                   rb_attr\(\s*#{var_name}\s*,
                                            \s*#{attr_name}\s*,
                                            #{rw},.*?\)\s*;%xm then
                $1
              elsif @content =~ %r%(/\*.*?(?:\s*\*\s*)?)
                                   Document-attr:\s#{attr_name}\s*?\n
                                   ((?>(.|\n)*?\*/))%x then
                "#{$1}\n#{$2}"
              else
                ''
              end

    new_comment comment, @top_level, :c
  end

  ##
  # Generate a Ruby-method table

  def gen_body_table file_content
    table = {}
    file_content.scan(%r{
      ((?>/\*.*?\*/\s*)?)
      ((?:(?:\w+)\s+)?
        (?:intern\s+)?VALUE\s+(\w+)
        \s*(?:\([^)]*\))(?:[^\);]|$))
    | ((?>/\*.*?\*/\s*))^\s*(\#\s*define\s+(\w+)\s+(\w+))
    | ^\s*\#\s*define\s+(\w+)\s+(\w+)
    }xm) do
      case
      when $1
        table[$3] = [:func_def, $1, $2, $~.offset(2)] if !table[$3] || table[$3][0] != :func_def
      when $4
        table[$6] = [:macro_def, $4, $5, $~.offset(5), $7] if !table[$6] || table[$6][0] == :macro_alias
      when $8
        table[$8] ||= [:macro_alias, $9]
      end
    end
    table
  end

  ##
  # Find the C code corresponding to a Ruby method

  def find_body class_name, meth_name, meth_obj, file_content, quiet = false
    if file_content
      @body_table ||= {}
      @body_table[file_content] ||= gen_body_table file_content
      type, *args = @body_table[file_content][meth_name]
    end

    case type
    when :func_def
      comment = new_comment args[0], @top_level, :c
      body = args[1]
      offset, = args[2]

      comment.remove_private if comment

      # try to find the whole body
      body = $& if /#{Regexp.escape body}[^(]*?\{.*?^\}/m =~ file_content

      # The comment block may have been overridden with a 'Document-method'
      # block. This happens in the interpreter when multiple methods are
      # vectored through to the same C method but those methods are logically
      # distinct (for example Kernel.hash and Kernel.object_id share the same
      # implementation

      override_comment = find_override_comment class_name, meth_obj
      comment = override_comment if override_comment

      comment.normalize
      find_modifiers comment, meth_obj if comment

      #meth_obj.params = params
      meth_obj.start_collecting_tokens
      tk = { :line_no => 1, :char_no => 1, :text => body }
      meth_obj.add_token tk
      meth_obj.comment = comment
      meth_obj.line    = file_content[0, offset].count("\n") + 1

      body
    when :macro_def
      comment = new_comment args[0], @top_level, :c
      body = args[1]
      offset, = args[2]

      find_body class_name, args[3], meth_obj, file_content, true

      comment.normalize
      find_modifiers comment, meth_obj

      meth_obj.start_collecting_tokens
      tk = { :line_no => 1, :char_no => 1, :text => body }
      meth_obj.add_token tk
      meth_obj.comment = comment
      meth_obj.line    = file_content[0, offset].count("\n") + 1

      body
    when :macro_alias
      # with no comment we hope the aliased definition has it and use it's
      # definition

      body = find_body(class_name, args[0], meth_obj, file_content, true)

      return body if body

      @options.warn "No definition for #{meth_name}"
      false
    else # No body, but might still have an override comment
      comment = find_override_comment class_name, meth_obj

      if comment then
        comment.normalize
        find_modifiers comment, meth_obj
        meth_obj.comment = comment

        ''
      else
        @options.warn "No definition for #{meth_name}"
        false
      end
    end
  end

  ##
  # Finds a RDoc::NormalClass or RDoc::NormalModule for +raw_name+

  def find_class(raw_name, name)
    unless @classes[raw_name]
      if raw_name =~ /^rb_m/
        container = @top_level.add_module RDoc::NormalModule, name
      else
        container = @top_level.add_class RDoc::NormalClass, name
      end

      container.record_location @top_level
      @classes[raw_name] = container
    end
    @classes[raw_name]
  end

  ##
  # Look for class or module documentation above Init_+class_name+(void),
  # in a Document-class +class_name+ (or module) comment or above an
  # rb_define_class (or module).  If a comment is supplied above a matching
  # Init_ and a rb_define_class the Init_ comment is used.
  #
  #   /*
  #    * This is a comment for Foo
  #    */
  #   Init_Foo(void) {
  #       VALUE cFoo = rb_define_class("Foo", rb_cObject);
  #   }
  #
  #   /*
  #    * Document-class: Foo
  #    * This is a comment for Foo
  #    */
  #   Init_foo(void) {
  #       VALUE cFoo = rb_define_class("Foo", rb_cObject);
  #   }
  #
  #   /*
  #    * This is a comment for Foo
  #    */
  #   VALUE cFoo = rb_define_class("Foo", rb_cObject);

  def find_class_comment class_name, class_mod
    comment = nil

    if @content =~ %r%
        ((?>/\*.*?\*/\s+))
        (static\s+)?
        void\s+
        Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)?\)%xmi then
      comment = $1.sub(%r%Document-(?:class|module):\s+#{class_name}%, '')
    elsif @content =~ %r%Document-(?:class|module):\s+#{class_name}\s*?
                         (?:<\s+[:,\w]+)?\n((?>.*?\*/))%xm then
      comment = "/*\n#{$1}"
    elsif @content =~ %r%((?>/\*.*?\*/\s+))
                         ([\w\.\s]+\s* = \s+)?rb_define_(class|module)[\t (]*?"(#{class_name})"%xm then
      comment = $1
    elsif @content =~ %r%((?>/\*.*?\*/\s+))
                         ([\w\. \t]+ = \s+)?rb_define_(class|module)_under[\t\w, (]*?"(#{class_name.split('::').last})"%xm then
      comment = $1
    else
      comment = ''
    end

    comment = new_comment comment, @top_level, :c
    comment.normalize

    look_for_directives_in class_mod, comment

    class_mod.add_comment comment, @top_level
  end

  ##
  # Generate a const table

  def gen_const_table file_content
    table = {}
    @content.scan(%r{
      ((?>^\s*/\*.*?\*/\s+))
        rb_define_(\w+)\((?:\s*(?:\w+),)?\s*
                           "(\w+)"\s*,
                           .*?\)\s*;
    | Document-(?:const|global|variable):\s
        ((?:\w+::)*\w+)
        \s*?\n((?>.*?\*/))
    }mxi) do
      case
      when $1 then table[[$2, $3]] = $1
      when $4 then table[$4] = "/*\n" + $5
      end
    end
    table
  end

  ##
  # Finds a comment matching +type+ and +const_name+ either above the
  # comment or in the matching Document- section.

  def find_const_comment(type, const_name, class_name = nil)
    @const_table ||= {}
    @const_table[@content] ||= gen_const_table @content
    table = @const_table[@content]

    comment =
      table[[type, const_name]] ||
      (class_name && table[class_name + "::" + const_name]) ||
      table[const_name] ||
      ''

    new_comment comment, @top_level, :c
  end

  ##
  # Handles modifiers in +comment+ and updates +meth_obj+ as appropriate.

  def find_modifiers comment, meth_obj
    comment.normalize
    comment.extract_call_seq meth_obj

    look_for_directives_in meth_obj, comment
  end

  ##
  # Finds a <tt>Document-method</tt> override for +meth_obj+ on +class_name+

  def find_override_comment class_name, meth_obj
    name = Regexp.escape meth_obj.name
    prefix = Regexp.escape meth_obj.name_prefix

    comment = if @content =~ %r%Document-method:
                                \s+#{class_name}#{prefix}#{name}
                                \s*?\n((?>.*?\*/))%xm then
                "/*#{$1}"
              elsif @content =~ %r%Document-method:
                                   \s#{name}\s*?\n((?>.*?\*/))%xm then
                "/*#{$1}"
              end

    return unless comment

    new_comment comment, @top_level, :c
  end

  ##
  # Creates a new RDoc::Attr +attr_name+ on class +var_name+ that is either
  # +read+, +write+ or both

  def handle_attr(var_name, attr_name, read, write)
    rw = ''
    rw += 'R' if '1' == read
    rw += 'W' if '1' == write

    class_name = @known_classes[var_name]

    return unless class_name

    class_obj = find_class var_name, class_name

    return unless class_obj

    comment = find_attr_comment var_name, attr_name
    comment.normalize

    name = attr_name.gsub(/rb_intern(?:_const)?\("([^"]+)"\)/, '\1')

    attr = RDoc::Attr.new '', name, rw, comment

    attr.record_location @top_level
    class_obj.add_attribute attr
    @stats.add_attribute attr
  end

  ##
  # Creates a new RDoc::NormalClass or RDoc::NormalModule based on +type+
  # named +class_name+ in +parent+ which was assigned to the C +var_name+.

  def handle_class_module(var_name, type, class_name, parent, in_module)
    parent_name = @known_classes[parent] || parent

    if in_module then
      enclosure = @classes[in_module] || @store.find_c_enclosure(in_module)

      if enclosure.nil? and enclosure = @known_classes[in_module] then
        enc_type = /^rb_m/ =~ in_module ? :module : :class
        handle_class_module in_module, enc_type, enclosure, nil, nil
        enclosure = @classes[in_module]
      end

      unless enclosure then
        @enclosure_dependencies[in_module] << var_name
        @missing_dependencies[var_name] =
          [var_name, type, class_name, parent, in_module]

        return
      end
    else
      enclosure = @top_level
    end

    if type == :class then
      full_name = if RDoc::ClassModule === enclosure then
                    enclosure.full_name + "::#{class_name}"
                  else
                    class_name
                  end

      if @content =~ %r%Document-class:\s+#{full_name}\s*<\s+([:,\w]+)% then
        parent_name = $1
      end

      cm = enclosure.add_class RDoc::NormalClass, class_name, parent_name
    else
      cm = enclosure.add_module RDoc::NormalModule, class_name
    end

    cm.record_location enclosure.top_level

    find_class_comment cm.full_name, cm

    case cm
    when RDoc::NormalClass
      @stats.add_class cm
    when RDoc::NormalModule
      @stats.add_module cm
    end

    @classes[var_name] = cm
    @known_classes[var_name] = cm.full_name
    @store.add_c_enclosure var_name, cm
  end

  ##
  # Adds constants.  By providing some_value: at the start of the comment you
  # can override the C value of the comment to give a friendly definition.
  #
  #   /* 300: The perfect score in bowling */
  #   rb_define_const(cFoo, "PERFECT", INT2FIX(300));
  #
  # Will override <tt>INT2FIX(300)</tt> with the value +300+ in the output
  # RDoc.  Values may include quotes and escaped colons (\:).

  def handle_constants(type, var_name, const_name, definition)
    class_name = @known_classes[var_name]

    return unless class_name

    class_obj = find_class var_name, class_name

    unless class_obj then
      @options.warn 'Enclosing class or module %p is not known' % [const_name]
      return
    end

    comment = find_const_comment type, const_name, class_name
    comment.normalize

    # In the case of rb_define_const, the definition and comment are in
    # "/* definition: comment */" form.  The literal ':' and '\' characters
    # can be escaped with a backslash.
    if type.downcase == 'const' then
      no_match, new_definition, new_comment = comment.text.split(/(\A.*):/)

      if no_match and no_match.empty? then
        if new_definition.empty? then # Default to literal C definition
          new_definition = definition
        else
          new_definition = new_definition.gsub("\:", ":")
          new_definition = new_definition.gsub("\\", '\\')
        end

        new_definition.sub!(/\A(\s+)/, '')

        new_comment = "#{$1}#{new_comment.lstrip}"

        new_comment = self.new_comment(new_comment, @top_level, :c)

        con = RDoc::Constant.new const_name, new_definition, new_comment
      else
        con = RDoc::Constant.new const_name, definition, comment
      end
    else
      con = RDoc::Constant.new const_name, definition, comment
    end

    con.record_location @top_level
    @stats.add_constant con
    class_obj.add_constant con
  end

  ##
  # Removes #ifdefs that would otherwise confuse us

  def handle_ifdefs_in(body)
    body.gsub(/^#ifdef HAVE_PROTOTYPES.*?#else.*?\n(.*?)#endif.*?\n/m, '\1')
  end

  ##
  # Adds an RDoc::AnyMethod +meth_name+ defined on a class or module assigned
  # to +var_name+.  +type+ is the type of method definition function used.
  # +singleton_method+ and +module_function+ create a singleton method.

  def handle_method(type, var_name, meth_name, function, param_count,
                    source_file = nil)
    class_name = @known_classes[var_name]
    singleton  = @singleton_classes.key? var_name

    @methods[var_name][function] << meth_name

    return unless class_name

    class_obj = find_class var_name, class_name

    if existing_method = class_obj.method_list.find { |m| m.c_function == function }
      add_alias(var_name, class_obj, existing_method.name, meth_name, existing_method.comment)
    end

    if class_obj then
      if meth_name == 'initialize' then
        meth_name = 'new'
        singleton = true
        type = 'method' # force public
      end

      meth_obj = RDoc::AnyMethod.new '', meth_name
      meth_obj.c_function = function
      meth_obj.singleton =
        singleton || %w[singleton_method module_function].include?(type)

      p_count = Integer(param_count) rescue -1

      if source_file then
        file_name = File.join @file_dir, source_file

        if File.exist? file_name then
          file_content = File.read file_name
        else
          @options.warn "unknown source #{source_file} for #{meth_name} in #{@file_name}"
        end
      else
        file_content = @content
      end

      body = find_body class_name, function, meth_obj, file_content

      if body and meth_obj.document_self then
        meth_obj.params = if p_count < -1 then # -2 is Array
                            '(*args)'
                          elsif p_count == -1 then # argc, argv
                            rb_scan_args body
                          else
                            "(#{(1..p_count).map { |i| "p#{i}" }.join ', '})"
                          end


        meth_obj.record_location @top_level

        if meth_obj.section_title
          class_obj.temporary_section = class_obj.add_section(meth_obj.section_title)
        end
        class_obj.add_method meth_obj

        @stats.add_method meth_obj
        meth_obj.visibility = :private if 'private_method' == type
      end
    end
  end

  ##
  # Registers a singleton class +sclass_var+ as a singleton of +class_var+

  def handle_singleton sclass_var, class_var
    class_name = @known_classes[class_var]

    @known_classes[sclass_var]     = class_name
    @singleton_classes[sclass_var] = class_name
  end

  ##
  # Normalizes tabs in +body+

  def handle_tab_width(body)
    if /\t/ =~ body
      tab_width = @options.tab_width
      body.split(/\n/).map do |line|
        1 while line.gsub!(/\t+/) do
          ' ' * (tab_width * $&.length - $`.length % tab_width)
        end && $~
        line
      end.join "\n"
    else
      body
    end
  end

  ##
  # Loads the variable map with the given +name+ from the RDoc::Store, if
  # present.

  def load_variable_map map_name
    return {} unless files = @store.cache[map_name]
    return {} unless name_map = files[@file_name]

    class_map = {}

    name_map.each do |variable, name|
      next unless mod = @store.find_class_or_module(name)

      class_map[variable] = if map_name == :c_class_variables then
                              mod
                            else
                              name
                            end
      @known_classes[variable] = name
    end

    class_map
  end

  ##
  # Look for directives in a normal comment block:
  #
  #   /*
  #    * :title: My Awesome Project
  #    */
  #
  # This method modifies the +comment+

  def look_for_directives_in context, comment
    @preprocess.handle comment, context do |directive, param|
      case directive
      when 'main' then
        @options.main_page = param
        ''
      when 'title' then
        @options.default_title = param if @options.respond_to? :default_title=
        ''
      end
    end

    comment
  end

  ##
  # Extracts parameters from the +method_body+ and returns a method
  # parameter string.  Follows 1.9.3dev's scan-arg-spec, see README.EXT

  def rb_scan_args method_body
    method_body =~ /rb_scan_args\((.*?)\)/m
    return '(*args)' unless $1

    $1.split(/,/)[2] =~ /"(.*?)"/ # format argument
    format = $1.split(//)

    lead = opt = trail = 0

    if format.first =~ /\d/ then
      lead = $&.to_i
      format.shift
      if format.first =~ /\d/ then
        opt = $&.to_i
        format.shift
        if format.first =~ /\d/ then
          trail = $&.to_i
          format.shift
          block_arg = true
        end
      end
    end

    if format.first == '*' and not block_arg then
      var = true
      format.shift
      if format.first =~ /\d/ then
        trail = $&.to_i
        format.shift
      end
    end

    if format.first == ':' then
      hash = true
      format.shift
    end

    if format.first == '&' then
      block = true
      format.shift
    end

    # if the format string is not empty there's a bug in the C code, ignore it

    args = []
    position = 1

    (1...(position + lead)).each do |index|
      args << "p#{index}"
    end

    position += lead

    (position...(position + opt)).each do |index|
      args << "p#{index} = v#{index}"
    end

    position += opt

    if var then
      args << '*args'
      position += 1
    end

    (position...(position + trail)).each do |index|
      args << "p#{index}"
    end

    position += trail

    if hash then
      args << "p#{position} = {}"
    end

    args << '&block' if block

    "(#{args.join ', '})"
  end

  ##
  # Removes lines that are commented out that might otherwise get picked up
  # when scanning for classes and methods

  def remove_commented_out_lines
    @content = @content.gsub(%r%//.*rb_define_%, '//')
  end

  ##
  # Extracts the classes, modules, methods, attributes, constants and aliases
  # from a C file and returns an RDoc::TopLevel for this file

  def scan
    remove_commented_out_lines

    do_classes_and_modules
    do_missing

    do_constants
    do_methods
    do_includes
    do_aliases
    do_attrs

    @store.add_c_variables self

    @top_level
  end

  def new_comment text = nil, location = nil, language = nil
    RDoc::Comment.new(text, location, language).tap do |comment|
      comment.format = @markup
    end
  end
end
PK."#[�7��33)gems/rdoc-6.4.1.1/lib/rdoc/parser/text.rbnu�[���# frozen_string_literal: true
##
# Indicates this parser is text and doesn't contain code constructs.
#
# Include this module in a RDoc::Parser subclass to make it show up as a file,
# not as part of a class or module.
#--
# This is not named File to avoid overriding ::File

module RDoc::Parser::Text
end

PK."#[/��>�>5gems/rdoc-6.4.1.1/lib/rdoc/parser/ripper_state_lex.rbnu�[���# frozen_string_literal: true
require 'ripper'

class RDoc::Parser::RipperStateLex
  # TODO: Remove this constants after Ruby 2.4 EOL
  RIPPER_HAS_LEX_STATE = Ripper::Filter.method_defined?(:state)

  Token = Struct.new(:line_no, :char_no, :kind, :text, :state)

  EXPR_NONE = 0
  EXPR_BEG = 1
  EXPR_END = 2
  EXPR_ENDARG = 4
  EXPR_ENDFN = 8
  EXPR_ARG = 16
  EXPR_CMDARG = 32
  EXPR_MID = 64
  EXPR_FNAME = 128
  EXPR_DOT = 256
  EXPR_CLASS = 512
  EXPR_LABEL = 1024
  EXPR_LABELED = 2048
  EXPR_FITEM = 4096
  EXPR_VALUE = EXPR_BEG
  EXPR_BEG_ANY  =  (EXPR_BEG | EXPR_MID | EXPR_CLASS)
  EXPR_ARG_ANY  =  (EXPR_ARG | EXPR_CMDARG)
  EXPR_END_ANY  =  (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)

  class InnerStateLex < Ripper::Filter
    attr_accessor :lex_state

    def initialize(code)
      @lex_state = EXPR_BEG
      @in_fname = false
      @continue = false
      reset
      super(code)
    end

    def reset
      @command_start = false
      @cmd_state = @command_start
    end

    def on_nl(tok, data)
      case @lex_state
      when EXPR_FNAME, EXPR_DOT
        @continue = true
      else
        @continue = false
        @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_ignored_nl(tok, data)
      case @lex_state
      when EXPR_FNAME, EXPR_DOT
        @continue = true
      else
        @continue = false
        @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_op(tok, data)
      case tok
      when '&', '|', '!', '!=', '!~'
        case @lex_state
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      when '<<'
        # TODO next token?
        case @lex_state
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      when '?'
        @lex_state = EXPR_BEG
      when '&&', '||', '+=', '-=', '*=', '**=',
           '&=', '|=', '^=', '<<=', '>>=', '||=', '&&='
        @lex_state = EXPR_BEG
      when '::'
        case @lex_state
        when EXPR_ARG, EXPR_CMDARG
          @lex_state = EXPR_DOT
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      else
        case @lex_state
        when EXPR_FNAME, EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_BEG
        end
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_kw(tok, data)
      case tok
      when 'class'
        @lex_state = EXPR_CLASS
        @in_fname = true
      when 'def'
        @lex_state = EXPR_FNAME
        @continue = true
        @in_fname = true
      when 'if', 'unless', 'while', 'until'
        if ((EXPR_MID | EXPR_END | EXPR_ENDARG | EXPR_ENDFN | EXPR_ARG | EXPR_CMDARG) & @lex_state) != 0 # postfix if
          @lex_state = EXPR_BEG | EXPR_LABEL
        else
          @lex_state = EXPR_BEG
        end
      when 'begin', 'case', 'when'
        @lex_state = EXPR_BEG
      when 'return', 'break'
        @lex_state = EXPR_MID
      else
        if @lex_state == EXPR_FNAME
          @lex_state = EXPR_END
        else
          @lex_state = EXPR_END
        end
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_tstring_beg(tok, data)
      @lex_state = EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_tstring_end(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_CHAR(tok, data)
      @lex_state = EXPR_END
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_period(tok, data)
      @lex_state = EXPR_DOT
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_int(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_float(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_rational(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_imaginary(tok, data)
      @lex_state = EXPR_END | EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_symbeg(tok, data)
      @lex_state = EXPR_FNAME
      @continue = true
      @in_fname = true
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    private def on_variables(event, tok, data)
      if @in_fname
        @lex_state = EXPR_ENDFN
        @in_fname = false
        @continue = false
      elsif @continue
        case @lex_state
        when EXPR_DOT
          @lex_state = EXPR_ARG
        else
          @lex_state = EXPR_ENDFN
          @continue = false
        end
      else
        @lex_state = EXPR_CMDARG
      end
      data << Token.new(lineno, column, event, tok, @lex_state)
    end

    def on_ident(tok, data)
      on_variables(__method__, tok, data)
    end

    def on_ivar(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

    def on_cvar(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

    def on_gvar(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

    def on_backref(tok, data)
      @lex_state = EXPR_END
      on_variables(__method__, tok, data)
    end

    def on_lparen(tok, data)
      @lex_state = EXPR_LABEL | EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_rparen(tok, data)
      @lex_state = EXPR_ENDFN
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_lbrace(tok, data)
      @lex_state = EXPR_LABEL | EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_rbrace(tok, data)
      @lex_state = EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_lbracket(tok, data)
      @lex_state = EXPR_LABEL | EXPR_BEG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_rbracket(tok, data)
      @lex_state = EXPR_ENDARG
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_const(tok, data)
      case @lex_state
      when EXPR_FNAME
        @lex_state = EXPR_ENDFN
      when EXPR_CLASS, EXPR_CMDARG, EXPR_MID
        @lex_state = EXPR_ARG
      else
        @lex_state = EXPR_CMDARG
      end
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_sp(tok, data)
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_comma(tok, data)
      @lex_state = EXPR_BEG | EXPR_LABEL if (EXPR_ARG_ANY & @lex_state) != 0
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_comment(tok, data)
      @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_ignored_sp(tok, data)
      @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
      data << Token.new(lineno, column, __method__, tok, @lex_state)
    end

    def on_heredoc_beg(tok, data)
      data << Token.new(lineno, column, __method__, tok, @lex_state)
      @lex_state = EXPR_END
      data
    end

    def on_heredoc_end(tok, data)
      data << Token.new(lineno, column, __method__, tok, @lex_state)
      @lex_state = EXPR_BEG
      data
    end

    def on_default(event, tok, data)
      reset
      data << Token.new(lineno, column, event, tok, @lex_state)
    end
  end unless RIPPER_HAS_LEX_STATE

  class InnerStateLex < Ripper::Filter
    def initialize(code)
      super(code)
    end

    def on_default(event, tok, data)
      data << Token.new(lineno, column, event, tok, state)
    end
  end if RIPPER_HAS_LEX_STATE

  def get_squashed_tk
    if @buf.empty?
      tk = @tokens.shift
    else
      tk = @buf.shift
    end
    return nil if tk.nil?
    case tk[:kind]
    when :on_symbeg then
      tk = get_symbol_tk(tk)
    when :on_tstring_beg then
      tk = get_string_tk(tk)
    when :on_backtick then
      if (tk[:state] & (EXPR_FNAME | EXPR_ENDFN)) != 0
        @inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE
        tk[:kind] = :on_ident
        tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG
      else
        tk = get_string_tk(tk)
      end
    when :on_regexp_beg then
      tk = get_regexp_tk(tk)
    when :on_embdoc_beg then
      tk = get_embdoc_tk(tk)
    when :on_heredoc_beg then
      @heredoc_queue << retrieve_heredoc_info(tk)
      @inner_lex.lex_state = EXPR_END unless RIPPER_HAS_LEX_STATE
    when :on_nl, :on_ignored_nl, :on_comment, :on_heredoc_end then
      if !@heredoc_queue.empty?
        get_heredoc_tk(*@heredoc_queue.shift)
      elsif tk[:text].nil? # :on_ignored_nl sometimes gives nil
        tk[:text] = ''
      end
    when :on_words_beg then
      tk = get_words_tk(tk)
    when :on_qwords_beg then
      tk = get_words_tk(tk)
    when :on_symbols_beg then
      tk = get_words_tk(tk)
    when :on_qsymbols_beg then
      tk = get_words_tk(tk)
    when :on_op then
      if '&.' == tk[:text]
        tk[:kind] = :on_period
      else
        tk = get_op_tk(tk)
      end
    end
    tk
  end

  private def get_symbol_tk(tk)
    is_symbol = true
    symbol_tk = Token.new(tk.line_no, tk.char_no, :on_symbol)
    if ":'" == tk[:text] or ':"' == tk[:text]
      tk1 = get_string_tk(tk)
      symbol_tk[:text] = tk1[:text]
      symbol_tk[:state] = tk1[:state]
    else
      case (tk1 = get_squashed_tk)[:kind]
      when :on_ident
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_tstring_content
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = get_squashed_tk[:state] # skip :on_tstring_end
      when :on_tstring_end
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_op
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_ivar
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_cvar
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_gvar
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_const
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      when :on_kw
        symbol_tk[:text] = ":#{tk1[:text]}"
        symbol_tk[:state] = tk1[:state]
      else
        is_symbol = false
        tk = tk1
      end
    end
    if is_symbol
      tk = symbol_tk
    end
    tk
  end

  private def get_string_tk(tk)
    string = tk[:text]
    state = nil
    kind = :on_tstring
    loop do
      inner_str_tk = get_squashed_tk
      if inner_str_tk.nil?
        break
      elsif :on_tstring_end == inner_str_tk[:kind]
        string = string + inner_str_tk[:text]
        state = inner_str_tk[:state]
        break
      elsif :on_label_end == inner_str_tk[:kind]
        string = string + inner_str_tk[:text]
        state = inner_str_tk[:state]
        kind = :on_symbol
        break
      else
        string = string + inner_str_tk[:text]
        if :on_embexpr_beg == inner_str_tk[:kind] then
          kind = :on_dstring if :on_tstring == kind
        end
      end
    end
    Token.new(tk.line_no, tk.char_no, kind, string, state)
  end

  private def get_regexp_tk(tk)
    string = tk[:text]
    state = nil
    loop do
      inner_str_tk = get_squashed_tk
      if inner_str_tk.nil?
        break
      elsif :on_regexp_end == inner_str_tk[:kind]
        string = string + inner_str_tk[:text]
        state = inner_str_tk[:state]
        break
      else
        string = string + inner_str_tk[:text]
      end
    end
    Token.new(tk.line_no, tk.char_no, :on_regexp, string, state)
  end

  private def get_embdoc_tk(tk)
    string = tk[:text]
    until :on_embdoc_end == (embdoc_tk = get_squashed_tk)[:kind] do
      string = string + embdoc_tk[:text]
    end
    string = string + embdoc_tk[:text]
    Token.new(tk.line_no, tk.char_no, :on_embdoc, string, embdoc_tk.state)
  end

  private def get_heredoc_tk(heredoc_name, indent)
    string = ''
    start_tk = nil
    prev_tk = nil
    until heredoc_end?(heredoc_name, indent, tk = @tokens.shift) do
      start_tk = tk unless start_tk
      if (prev_tk.nil? or "\n" == prev_tk[:text][-1]) and 0 != tk[:char_no]
        string = string + (' ' * tk[:char_no])
      end
      string = string + tk[:text]
      prev_tk = tk
    end
    start_tk = tk unless start_tk
    prev_tk = tk unless prev_tk
    @buf.unshift tk # closing heredoc
    heredoc_tk = Token.new(start_tk.line_no, start_tk.char_no, :on_heredoc, string, prev_tk.state)
    @buf.unshift heredoc_tk
  end

  private def retrieve_heredoc_info(tk)
    name = tk[:text].gsub(/\A<<[-~]?(['"`]?)(.+)\1\z/, '\2')
    indent = tk[:text] =~ /\A<<[-~]/
    [name, indent]
  end

  private def heredoc_end?(name, indent, tk)
    result = false
    if :on_heredoc_end == tk[:kind] then
      tk_name = tk[:text].chomp
      tk_name.lstrip! if indent
      if name == tk_name
        result = true
      end
    end
    result
  end

  private def get_words_tk(tk)
    string = ''
    start_token = tk[:text]
    start_quote = tk[:text].rstrip[-1]
    line_no = tk[:line_no]
    char_no = tk[:char_no]
    state = tk[:state]
    end_quote =
      case start_quote
      when ?( then ?)
      when ?[ then ?]
      when ?{ then ?}
      when ?< then ?>
      else start_quote
      end
    end_token = nil
    loop do
      tk = get_squashed_tk
      if tk.nil?
        end_token = end_quote
        break
      elsif :on_tstring_content == tk[:kind] then
        string += tk[:text]
      elsif :on_words_sep == tk[:kind] or :on_tstring_end == tk[:kind] then
        if end_quote == tk[:text].strip then
          end_token = tk[:text]
          break
        else
          string += tk[:text]
        end
      else
        string += tk[:text]
      end
    end
    text = "#{start_token}#{string}#{end_token}"
    Token.new(line_no, char_no, :on_dstring, text, state)
  end

  private def get_op_tk(tk)
    redefinable_operators = %w[! != !~ % & * ** + +@ - -@ / < << <= <=> == === =~ > >= >> [] []= ^ ` | ~]
    if redefinable_operators.include?(tk[:text]) and tk[:state] == EXPR_ARG then
      @inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE
      tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG
      tk[:kind] = :on_ident
    elsif tk[:text] =~ /^[-+]$/ then
      tk_ahead = get_squashed_tk
      case tk_ahead[:kind]
      when :on_int, :on_float, :on_rational, :on_imaginary then
        tk[:text] += tk_ahead[:text]
        tk[:kind] = tk_ahead[:kind]
        tk[:state] = tk_ahead[:state]
      when :on_heredoc_beg, :on_tstring, :on_dstring # frozen/non-frozen string literal
        tk[:text] += tk_ahead[:text]
        tk[:kind] = tk_ahead[:kind]
        tk[:state] = tk_ahead[:state]
      else
        @buf.unshift tk_ahead
      end
    end
    tk
  end

  def initialize(code)
    @buf = []
    @heredoc_queue = []
    @inner_lex = InnerStateLex.new(code)
    @tokens = @inner_lex.parse([])
  end

  def self.parse(code)
    lex = self.new(code)
    tokens = []
    begin
      while tk = lex.get_squashed_tk
        tokens.push tk
      end
    rescue StopIteration
    end
    tokens
  end

  def self.end?(token)
    (token[:state] & EXPR_END)
  end
end
PK."#[���U��+gems/rdoc-6.4.1.1/lib/rdoc/parser/simple.rbnu�[���# frozen_string_literal: true
##
# Parse a non-source file. We basically take the whole thing as one big
# comment.

class RDoc::Parser::Simple < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(//)

  attr_reader :content # :nodoc:

  ##
  # Prepare to parse a plain file

  def initialize(top_level, file_name, content, options, stats)
    super

    preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include

    @content = preprocess.handle @content, @top_level
  end

  ##
  # Extract the file contents and attach them to the TopLevel as a comment

  def scan
    comment = remove_coding_comment @content
    comment = remove_private_comment comment

    comment = RDoc::Comment.new comment, @top_level

    @top_level.comment = comment
    @top_level
  end

  ##
  # Removes the encoding magic comment from +text+

  def remove_coding_comment text
    text.sub(/\A# .*coding[=:].*$/, '')
  end

  ##
  # Removes private comments.
  #
  # Unlike RDoc::Comment#remove_private this implementation only looks for two
  # dashes at the beginning of the line.  Three or more dashes are considered
  # to be a rule and ignored.

  def remove_private_comment comment
    # Workaround for gsub encoding for Ruby 1.9.2 and earlier
    empty = ''
    empty = RDoc::Encoding.change_encoding empty, comment.encoding

    comment = comment.gsub(%r%^--\n.*?^\+\+\n?%m, empty)
    comment.sub(%r%^--\n.*%m, empty)
  end

end
PK."#[�4QՆ
�
/gems/rdoc-6.4.1.1/lib/rdoc/parser/ruby_tools.rbnu�[���# frozen_string_literal: true
##
# Collection of methods for writing parsers

module RDoc::Parser::RubyTools

  ##
  # Adds a token listener +obj+, but you should probably use token_listener

  def add_token_listener(obj)
    @token_listeners ||= []
    @token_listeners << obj
  end

  ##
  # Fetches the next token from the scanner

  def get_tk
    tk = nil

    if @tokens.empty? then
      if @scanner_point >= @scanner.size
        return nil
      else
        tk = @scanner[@scanner_point]
        @scanner_point += 1
        @read.push tk[:text]
      end
    else
      @read.push @unget_read.shift
      tk = @tokens.shift
    end

    if tk == nil || :on___end__ == tk[:kind]
      tk = nil
    end

    return nil unless tk

    # inform any listeners of our shiny new token
    @token_listeners.each do |obj|
      obj.add_token(tk)
    end if @token_listeners

    tk
  end

  ##
  # Reads and returns all tokens up to one of +tokens+.  Leaves the matched
  # token in the token list.

  def get_tk_until(*tokens)
    read = []

    loop do
      tk = get_tk

      case tk
      when *tokens then
        unget_tk tk
        break
      end

      read << tk
    end

    read
  end

  ##
  # Retrieves a String representation of the read tokens

  def get_tkread
    read = @read.join("")
    @read = []
    read
  end

  ##
  # Peek equivalent for get_tkread

  def peek_read
    @read.join('')
  end

  ##
  # Peek at the next token, but don't remove it from the stream

  def peek_tk
    unget_tk(tk = get_tk)
    tk
  end

  ##
  # Removes the token listener +obj+

  def remove_token_listener(obj)
    @token_listeners.delete(obj)
  end

  ##
  # Resets the tools

  def reset
    @read       = []
    @tokens     = []
    @unget_read = []
    @nest = 0
    @scanner_point = 0
  end

  ##
  # Skips whitespace tokens including newlines

  def skip_tkspace
    tokens = []

    while (tk = get_tk) and (:on_sp == tk[:kind] or :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]) do
      tokens.push(tk)
    end

    unget_tk(tk)
    tokens
  end

  ##
  # Skips whitespace tokens excluding newlines

  def skip_tkspace_without_nl
    tokens = []

    while (tk = get_tk) and :on_sp == tk[:kind] do
      tokens.push(tk)
    end

    unget_tk(tk)
    tokens
  end

  ##
  # Has +obj+ listen to tokens

  def token_listener(obj)
    add_token_listener obj
    yield
  ensure
    remove_token_listener obj
  end

  ##
  # Returns +tk+ to the scanner

  def unget_tk(tk)
    @tokens.unshift tk
    @unget_read.unshift @read.pop

    # Remove this token from any listeners
    @token_listeners.each do |obj|
      obj.pop_token
    end if @token_listeners

    nil
  end

end


PK."#[�_A��-gems/rdoc-6.4.1.1/lib/rdoc/parser/markdown.rbnu�[���# frozen_string_literal: true
##
# Parse a Markdown format file.  The parsed RDoc::Markup::Document is attached
# as a file comment.

class RDoc::Parser::Markdown < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(/\.(md|markdown)(?:\.[^.]+)?$/)

  ##
  # Creates an Markdown-format TopLevel for the given file.

  def scan
    comment = RDoc::Comment.new @content, @top_level
    comment.format = 'markdown'

    @top_level.comment = comment
  end

end


PK."#[��X�����)gems/rdoc-6.4.1.1/lib/rdoc/parser/ruby.rbnu�[���# frozen_string_literal: true
##
# This file contains stuff stolen outright from:
#
#   rtags.rb -
#   ruby-lex.rb - ruby lexcal analyzer
#   ruby-token.rb - ruby tokens
#       by Keiju ISHITSUKA (Nippon Rational Inc.)
#

##
# Extracts code elements from a source file returning a TopLevel object
# containing the constituent file elements.
#
# This file is based on rtags
#
# RubyParser understands how to document:
# * classes
# * modules
# * methods
# * constants
# * aliases
# * private, public, protected
# * private_class_function, public_class_function
# * private_constant, public_constant
# * module_function
# * attr, attr_reader, attr_writer, attr_accessor
# * extra accessors given on the command line
# * metaprogrammed methods
# * require
# * include
#
# == Method Arguments
#
#--
# NOTE: I don't think this works, needs tests, remove the paragraph following
# this block when known to work
#
# The parser extracts the arguments from the method definition.  You can
# override this with a custom argument definition using the :args: directive:
#
#   ##
#   # This method tries over and over until it is tired
#
#   def go_go_go(thing_to_try, tries = 10) # :args: thing_to_try
#     puts thing_to_try
#     go_go_go thing_to_try, tries - 1
#   end
#
# If you have a more-complex set of overrides you can use the :call-seq:
# directive:
#++
#
# The parser extracts the arguments from the method definition.  You can
# override this with a custom argument definition using the :call-seq:
# directive:
#
#   ##
#   # This method can be called with a range or an offset and length
#   #
#   # :call-seq:
#   #   my_method(Range)
#   #   my_method(offset, length)
#
#   def my_method(*args)
#   end
#
# The parser extracts +yield+ expressions from method bodies to gather the
# yielded argument names.  If your method manually calls a block instead of
# yielding or you want to override the discovered argument names use
# the :yields: directive:
#
#   ##
#   # My method is awesome
#
#   def my_method(&block) # :yields: happy, times
#     block.call 1, 2
#   end
#
# == Metaprogrammed Methods
#
# To pick up a metaprogrammed method, the parser looks for a comment starting
# with '##' before an identifier:
#
#   ##
#   # This is a meta-programmed method!
#
#   add_my_method :meta_method, :arg1, :arg2
#
# The parser looks at the token after the identifier to determine the name, in
# this example, :meta_method.  If a name cannot be found, a warning is printed
# and 'unknown is used.
#
# You can force the name of a method using the :method: directive:
#
#   ##
#   # :method: some_method!
#
# By default, meta-methods are instance methods.  To indicate that a method is
# a singleton method instead use the :singleton-method: directive:
#
#   ##
#   # :singleton-method:
#
# You can also use the :singleton-method: directive with a name:
#
#   ##
#   # :singleton-method: some_method!
#
# You can define arguments for metaprogrammed methods via either the
# :call-seq:, :arg: or :args: directives.
#
# Additionally you can mark a method as an attribute by
# using :attr:, :attr_reader:, :attr_writer: or :attr_accessor:.  Just like
# for :method:, the name is optional.
#
#   ##
#   # :attr_reader: my_attr_name
#
# == Hidden methods and attributes
#
# You can provide documentation for methods that don't appear using
# the :method:, :singleton-method: and :attr: directives:
#
#   ##
#   # :attr_writer: ghost_writer
#   # There is an attribute here, but you can't see it!
#
#   ##
#   # :method: ghost_method
#   # There is a method here, but you can't see it!
#
#   ##
#   # this is a comment for a regular method
#
#   def regular_method() end
#
# Note that by default, the :method: directive will be ignored if there is a
# standard rdocable item following it.

require 'ripper'
require_relative 'ripper_state_lex'

class RDoc::Parser::Ruby < RDoc::Parser

  parse_files_matching(/\.rbw?$/)

  include RDoc::TokenStream
  include RDoc::Parser::RubyTools

  ##
  # RDoc::NormalClass type

  NORMAL = "::"

  ##
  # RDoc::SingleClass type

  SINGLE = "<<"

  ##
  # Creates a new Ruby parser.

  def initialize(top_level, file_name, content, options, stats)
    super

    if /\t/ =~ content then
      tab_width = @options.tab_width
      content = content.split(/\n/).map do |line|
        1 while line.gsub!(/\t+/) {
          ' ' * (tab_width*$&.length - $`.length % tab_width)
        }  && $~
        line
      end.join("\n")
    end

    @size = 0
    @token_listeners = nil
    content = RDoc::Encoding.remove_magic_comment content
    @scanner = RDoc::Parser::RipperStateLex.parse(content)
    @content = content
    @scanner_point = 0
    @prev_seek = nil
    @markup = @options.markup
    @track_visibility = :nodoc != @options.visibility
    @encoding = @options.encoding

    reset
  end

  def tk_nl?(tk)
    :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
  end

  ##
  # Retrieves the read token stream and replaces +pattern+ with +replacement+
  # using gsub.  If the result is only a ";" returns an empty string.

  def get_tkread_clean pattern, replacement # :nodoc:
    read = get_tkread.gsub(pattern, replacement).strip
    return '' if read == ';'
    read
  end

  ##
  # Extracts the visibility information for the visibility token +tk+
  # and +single+ class type identifier.
  #
  # Returns the visibility type (a string), the visibility (a symbol) and
  # +singleton+ if the methods following should be converted to singleton
  # methods.

  def get_visibility_information tk, single # :nodoc:
    vis_type  = tk[:text]
    singleton = single == SINGLE

    vis =
      case vis_type
      when 'private'   then :private
      when 'protected' then :protected
      when 'public'    then :public
      when 'private_class_method' then
        singleton = true
        :private
      when 'public_class_method' then
        singleton = true
        :public
      when 'module_function' then
        singleton = true
        :public
      else
        raise RDoc::Error, "Invalid visibility: #{tk.name}"
      end

    return vis_type, vis, singleton
  end

  ##
  # Look for the first comment in a file that isn't a shebang line.

  def collect_first_comment
    skip_tkspace
    comment = ''.dup
    comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
    first_line = true
    first_comment_tk_kind = nil
    line_no = nil

    tk = get_tk

    while tk && (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])
      comment_body = retrieve_comment_body(tk)
      if first_line and comment_body =~ /\A#!/ then
        skip_tkspace
        tk = get_tk
      elsif first_line and comment_body =~ /\A#\s*-\*-/ then
        first_line = false
        skip_tkspace
        tk = get_tk
      else
        break if first_comment_tk_kind and not first_comment_tk_kind === tk[:kind]
        first_comment_tk_kind = tk[:kind]

        line_no = tk[:line_no] if first_line
        first_line = false
        comment << comment_body
        tk = get_tk

        if :on_nl === tk then
          skip_tkspace_without_nl
          tk = get_tk
        end
      end
    end

    unget_tk tk

    new_comment comment, line_no
  end

  ##
  # Consumes trailing whitespace from the token stream

  def consume_trailing_spaces # :nodoc:
    skip_tkspace_without_nl
  end

  ##
  # Creates a new attribute in +container+ with +name+.

  def create_attr container, single, name, rw, comment # :nodoc:
    att = RDoc::Attr.new get_tkread, name, rw, comment, single == SINGLE
    record_location att

    container.add_attribute att
    @stats.add_attribute att

    att
  end

  ##
  # Creates a module alias in +container+ at +rhs_name+ (or at the top-level
  # for "::") with the name from +constant+.

  def create_module_alias container, constant, rhs_name # :nodoc:
    mod = if rhs_name =~ /^::/ then
            @store.find_class_or_module rhs_name
          else
            container.find_module_named rhs_name
          end

    container.add_module_alias mod, rhs_name, constant, @top_level
  end

  ##
  # Aborts with +msg+

  def error(msg)
    msg = make_message msg

    abort msg
  end

  ##
  # Looks for a true or false token.

  def get_bool
    skip_tkspace
    tk = get_tk
    if :on_kw == tk[:kind] && 'true' == tk[:text]
      true
    elsif :on_kw == tk[:kind] && ('false' == tk[:text] || 'nil' == tk[:text])
      false
    else
      unget_tk tk
      true
    end
  end

  ##
  # Look for the name of a class of module (optionally with a leading :: or
  # with :: separated named) and return the ultimate name, the associated
  # container, and the given name (with the ::).

  def get_class_or_module container, ignore_constants = false
    skip_tkspace
    name_t = get_tk
    given_name = ''.dup

    # class ::A -> A is in the top level
    if :on_op == name_t[:kind] and '::' == name_t[:text] then # bug
      name_t = get_tk
      container = @top_level
      given_name << '::'
    end

    skip_tkspace_without_nl
    given_name << name_t[:text]

    is_self = name_t[:kind] == :on_op && name_t[:text] == '<<'
    new_modules = []
    while !is_self && (tk = peek_tk) and :on_op == tk[:kind] and '::' == tk[:text] do
      prev_container = container
      container = container.find_module_named name_t[:text]
      container ||=
        if ignore_constants then
          c = RDoc::NormalModule.new name_t[:text]
          c.store = @store
          new_modules << [prev_container, c]
          c
        else
          c = prev_container.add_module RDoc::NormalModule, name_t[:text]
          c.ignore unless prev_container.document_children
          @top_level.add_to_classes_or_modules c
          c
        end

      record_location container

      get_tk
      skip_tkspace
      if :on_lparen == peek_tk[:kind] # ProcObjectInConstant::()
        parse_method_or_yield_parameters
        break
      end
      name_t = get_tk
      unless :on_const == name_t[:kind] || :on_ident == name_t[:kind]
        raise RDoc::Error, "Invalid class or module definition: #{given_name}"
      end
      if prev_container == container and !ignore_constants
        given_name = name_t[:text]
      else
        given_name << '::' + name_t[:text]
      end
    end

    skip_tkspace_without_nl

    return [container, name_t, given_name, new_modules]
  end

  ##
  # Return a superclass, which can be either a constant of an expression

  def get_class_specification
    tk = peek_tk
    if tk.nil?
      return ''
    elsif :on_kw == tk[:kind] && 'self' == tk[:text]
      return 'self'
    elsif :on_gvar == tk[:kind]
      return ''
    end

    res = get_constant

    skip_tkspace_without_nl

    get_tkread # empty out read buffer

    tk = get_tk
    return res unless tk

    case tk[:kind]
    when :on_nl, :on_comment, :on_embdoc, :on_semicolon then
      unget_tk(tk)
      return res
    end

    res += parse_call_parameters(tk)
    res
  end

  ##
  # Parse a constant, which might be qualified by one or more class or module
  # names

  def get_constant
    res = ""
    skip_tkspace_without_nl
    tk = get_tk

    while tk && ((:on_op == tk[:kind] && '::' == tk[:text]) || :on_const == tk[:kind]) do
      res += tk[:text]
      tk = get_tk
    end

    unget_tk(tk)
    res
  end

  ##
  # Get an included module that may be surrounded by parens

  def get_included_module_with_optional_parens
    skip_tkspace_without_nl
    get_tkread
    tk = get_tk
    end_token = get_end_token tk
    return '' unless end_token

    nest = 0
    continue = false
    only_constant = true

    while tk != nil do
      is_element_of_constant = false
      case tk[:kind]
      when :on_semicolon then
        break if nest == 0
      when :on_lbracket then
        nest += 1
      when :on_rbracket then
        nest -= 1
      when :on_lbrace then
        nest += 1
      when :on_rbrace then
        nest -= 1
        if nest <= 0
          # we might have a.each { |i| yield i }
          unget_tk(tk) if nest < 0
          break
        end
      when :on_lparen then
        nest += 1
      when end_token[:kind] then
        if end_token[:kind] == :on_rparen
          nest -= 1
          break if nest <= 0
        else
          break if nest <= 0
        end
      when :on_rparen then
        nest -= 1
      when :on_comment, :on_embdoc then
        @read.pop
        if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
          (!continue or (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0) then
          break if !continue and nest <= 0
        end
      when :on_comma then
        continue = true
      when :on_ident then
        continue = false if continue
      when :on_kw then
        case tk[:text]
        when 'def', 'do', 'case', 'for', 'begin', 'class', 'module'
          nest += 1
        when 'if', 'unless', 'while', 'until', 'rescue'
          # postfix if/unless/while/until/rescue must be EXPR_LABEL
          nest += 1 unless (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0
        when 'end'
          nest -= 1
          break if nest == 0
        end
      when :on_const then
        is_element_of_constant = true
      when :on_op then
        is_element_of_constant = true if '::' == tk[:text]
      end
      only_constant = false unless is_element_of_constant
      tk = get_tk
    end

    if only_constant
      get_tkread_clean(/\s+/, ' ')
    else
      ''
    end
  end

  ##
  # Little hack going on here. In the statement:
  #
  #   f = 2*(1+yield)
  #
  # We see the RPAREN as the next token, so we need to exit early.  This still
  # won't catch all cases (such as "a = yield + 1"

  def get_end_token tk # :nodoc:
    case tk[:kind]
    when :on_lparen
      token = RDoc::Parser::RipperStateLex::Token.new
      token[:kind] = :on_rparen
      token[:text] = ')'
      token
    when :on_rparen
      nil
    else
      token = RDoc::Parser::RipperStateLex::Token.new
      token[:kind] = :on_nl
      token[:text] = "\n"
      token
    end
  end

  ##
  # Retrieves the method container for a singleton method.

  def get_method_container container, name_t # :nodoc:
    prev_container = container
    container = container.find_module_named(name_t[:text])

    unless container then
      constant = prev_container.constants.find do |const|
        const.name == name_t[:text]
      end

      if constant then
        parse_method_dummy prev_container
        return
      end
    end

    unless container then
      # TODO seems broken, should starting at Object in @store
      obj = name_t[:text].split("::").inject(Object) do |state, item|
        state.const_get(item)
      end rescue nil

      type = obj.class == Class ? RDoc::NormalClass : RDoc::NormalModule

      unless [Class, Module].include?(obj.class) then
        warn("Couldn't find #{name_t[:text]}. Assuming it's a module")
      end

      if type == RDoc::NormalClass then
        sclass = obj.superclass ? obj.superclass.name : nil
        container = prev_container.add_class type, name_t[:text], sclass
      else
        container = prev_container.add_module type, name_t[:text]
      end

      record_location container
    end

    container
  end

  ##
  # Extracts a name or symbol from the token stream.

  def get_symbol_or_name
    tk = get_tk
    case tk[:kind]
    when :on_symbol then
      text = tk[:text].sub(/^:/, '')

      next_tk = peek_tk
      if next_tk && :on_op == next_tk[:kind] && '=' == next_tk[:text] then
        get_tk
        text << '='
      end

      text
    when :on_ident, :on_const, :on_gvar, :on_cvar, :on_ivar, :on_op, :on_kw then
      tk[:text]
    when :on_tstring, :on_dstring then
      tk[:text][1..-2]
    else
      raise RDoc::Error, "Name or symbol expected (got #{tk})"
    end
  end

  ##
  # Marks containers between +container+ and +ancestor+ as ignored

  def suppress_parents container, ancestor # :nodoc:
    while container and container != ancestor do
      container.suppress unless container.documented?
      container = container.parent
    end
  end

  ##
  # Look for directives in a normal comment block:
  #
  #   # :stopdoc:
  #   # Don't display comment from this point forward
  #
  # This routine modifies its +comment+ parameter.

  def look_for_directives_in container, comment
    @preprocess.handle comment, container do |directive, param|
      case directive
      when 'method', 'singleton-method',
           'attr', 'attr_accessor', 'attr_reader', 'attr_writer' then
        false # handled elsewhere
      when 'section' then
        break unless container.kind_of?(RDoc::Context)
        container.set_current_section param, comment.dup
        comment.text = ''
        break
      end
    end

    comment.remove_private
  end

  ##
  # Adds useful info about the parser to +message+

  def make_message message
    prefix = "#{@file_name}:".dup

    tk = peek_tk
    prefix << "#{tk[:line_no]}:#{tk[:char_no]}:" if tk

    "#{prefix} #{message}"
  end

  ##
  # Creates a comment with the correct format

  def new_comment comment, line_no = nil
    c = RDoc::Comment.new comment, @top_level, :ruby
    c.line = line_no
    c.format = @markup
    c
  end

  ##
  # Creates an RDoc::Attr for the name following +tk+, setting the comment to
  # +comment+.

  def parse_attr(context, single, tk, comment)
    line_no = tk[:line_no]

    args = parse_symbol_arg 1
    if args.size > 0 then
      name = args[0]
      rw = "R"
      skip_tkspace_without_nl
      tk = get_tk

      if :on_comma == tk[:kind] then
        rw = "RW" if get_bool
      else
        unget_tk tk
      end

      att = create_attr context, single, name, rw, comment
      att.line   = line_no

      read_documentation_modifiers att, RDoc::ATTR_MODIFIERS
    else
      warn "'attr' ignored - looks like a variable"
    end
  end

  ##
  # Creates an RDoc::Attr for each attribute listed after +tk+, setting the
  # comment for each to +comment+.

  def parse_attr_accessor(context, single, tk, comment)
    line_no = tk[:line_no]

    args = parse_symbol_arg
    rw = "?"

    tmp = RDoc::CodeObject.new
    read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS
    # TODO In most other places we let the context keep track of document_self
    # and add found items appropriately but here we do not.  I'm not sure why.
    return if @track_visibility and not tmp.document_self

    case tk[:text]
    when "attr_reader"   then rw = "R"
    when "attr_writer"   then rw = "W"
    when "attr_accessor" then rw = "RW"
    else
      rw = '?'
    end

    for name in args
      att = create_attr context, single, name, rw, comment
      att.line   = line_no
    end
  end

  ##
  # Parses an +alias+ in +context+ with +comment+

  def parse_alias(context, single, tk, comment)
    line_no = tk[:line_no]

    skip_tkspace

    if :on_lparen === peek_tk[:kind] then
      get_tk
      skip_tkspace
    end

    new_name = get_symbol_or_name

    skip_tkspace
    if :on_comma === peek_tk[:kind] then
      get_tk
      skip_tkspace
    end

    begin
      old_name = get_symbol_or_name
    rescue RDoc::Error
      return
    end

    al = RDoc::Alias.new(get_tkread, old_name, new_name, comment,
                         single == SINGLE)
    record_location al
    al.line   = line_no

    read_documentation_modifiers al, RDoc::ATTR_MODIFIERS
    context.add_alias al
    @stats.add_alias al

    al
  end

  ##
  # Extracts call parameters from the token stream.

  def parse_call_parameters(tk)
    end_token = case tk[:kind]
                when :on_lparen
                  :on_rparen
                when :on_rparen
                  return ""
                else
                  :on_nl
                end
    nest = 0

    loop do
      break if tk.nil?
      case tk[:kind]
      when :on_semicolon
        break
      when :on_lparen
        nest += 1
      when end_token
        if end_token == :on_rparen
          nest -= 1
          break if RDoc::Parser::RipperStateLex.end?(tk) and nest <= 0
        else
          break if RDoc::Parser::RipperStateLex.end?(tk)
        end
      when :on_comment, :on_embdoc
        unget_tk(tk)
        break
      when :on_op
        if tk[:text] =~ /^(.{1,2})?=$/
          unget_tk(tk)
          break
        end
      end
      tk = get_tk
    end

    get_tkread_clean "\n", " "
  end

  ##
  # Parses a class in +context+ with +comment+

  def parse_class container, single, tk, comment
    line_no = tk[:line_no]

    declaration_context = container
    container, name_t, given_name, = get_class_or_module container

    if name_t[:kind] == :on_const
      cls = parse_class_regular container, declaration_context, single,
        name_t, given_name, comment
    elsif name_t[:kind] == :on_op && name_t[:text] == '<<'
      case name = get_class_specification
      when 'self', container.name
        read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
        parse_statements container, SINGLE
        return # don't update line
      else
        cls = parse_class_singleton container, name, comment
      end
    else
      warn "Expected class name or '<<'. Got #{name_t[:kind]}: #{name_t[:text].inspect}"
      return
    end

    cls.line   = line_no

    # after end modifiers
    read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS

    cls
  end

  ##
  # Parses and creates a regular class

  def parse_class_regular container, declaration_context, single, # :nodoc:
                          name_t, given_name, comment
    superclass = '::Object'

    if given_name =~ /^::/ then
      declaration_context = @top_level
      given_name = $'
    end

    tk = peek_tk
    if tk[:kind] == :on_op && tk[:text] == '<' then
      get_tk
      skip_tkspace
      superclass = get_class_specification
      superclass = '(unknown)' if superclass.empty?
    end

    cls_type = single == SINGLE ? RDoc::SingleClass : RDoc::NormalClass
    cls = declaration_context.add_class cls_type, given_name, superclass
    cls.ignore unless container.document_children

    read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
    record_location cls

    cls.add_comment comment, @top_level

    @top_level.add_to_classes_or_modules cls
    @stats.add_class cls

    suppress_parents container, declaration_context unless cls.document_self

    parse_statements cls

    cls
  end

  ##
  # Parses a singleton class in +container+ with the given +name+ and
  # +comment+.

  def parse_class_singleton container, name, comment # :nodoc:
    other = @store.find_class_named name

    unless other then
      if name =~ /^::/ then
        name = $'
        container = @top_level
      end

      other = container.add_module RDoc::NormalModule, name
      record_location other

      # class << $gvar
      other.ignore if name.empty?

      other.add_comment comment, @top_level
    end

    # notify :nodoc: all if not a constant-named class/module
    # (and remove any comment)
    unless name =~ /\A(::)?[A-Z]/ then
      other.document_self = nil
      other.document_children = false
      other.clear_comment
    end

    @top_level.add_to_classes_or_modules other
    @stats.add_class other

    read_documentation_modifiers other, RDoc::CLASS_MODIFIERS
    parse_statements(other, SINGLE)

    other
  end

  ##
  # Parses a constant in +context+ with +comment+.  If +ignore_constants+ is
  # true, no found constants will be added to RDoc.

  def parse_constant container, tk, comment, ignore_constants = false
    line_no = tk[:line_no]

    name = tk[:text]
    skip_tkspace_without_nl

    return unless name =~ /^\w+$/

    new_modules = []
    if :on_op == peek_tk[:kind] && '::' == peek_tk[:text] then
      unget_tk tk

      container, name_t, _, new_modules = get_class_or_module container, true

      name = name_t[:text]
    end

    is_array_or_hash = false
    if peek_tk && :on_lbracket == peek_tk[:kind]
      get_tk
      nest = 1
      while bracket_tk = get_tk
        case bracket_tk[:kind]
        when :on_lbracket
          nest += 1
        when :on_rbracket
          nest -= 1
          break if nest == 0
        end
      end
      skip_tkspace_without_nl
      is_array_or_hash = true
    end

    unless peek_tk && :on_op == peek_tk[:kind] && '=' == peek_tk[:text] then
      return false
    end
    get_tk

    unless ignore_constants
      new_modules.each do |prev_c, new_module|
        prev_c.add_module_by_normal_module new_module
        new_module.ignore unless prev_c.document_children
        @top_level.add_to_classes_or_modules new_module
      end
    end

    value = ''
    con = RDoc::Constant.new name, value, comment

    body = parse_constant_body container, con, is_array_or_hash

    return unless body

    con.value = body
    record_location con
    con.line   = line_no
    read_documentation_modifiers con, RDoc::CONSTANT_MODIFIERS

    return if is_array_or_hash

    @stats.add_constant con
    container.add_constant con

    true
  end

  def parse_constant_body container, constant, is_array_or_hash # :nodoc:
    nest     = 0
    rhs_name = ''.dup

    get_tkread

    tk = get_tk

    body = nil
    loop do
      break if tk.nil?
      if :on_semicolon == tk[:kind] then
        break if nest <= 0
      elsif [:on_tlambeg, :on_lparen, :on_lbrace, :on_lbracket].include?(tk[:kind]) then
        nest += 1
      elsif (:on_kw == tk[:kind] && 'def' == tk[:text]) then
        nest += 1
      elsif (:on_kw == tk[:kind] && %w{do if unless case begin}.include?(tk[:text])) then
        if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
          nest += 1
        end
      elsif [:on_rparen, :on_rbrace, :on_rbracket].include?(tk[:kind]) ||
            (:on_kw == tk[:kind] && 'end' == tk[:text]) then
        nest -= 1
      elsif (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
        unget_tk tk
        if nest <= 0 and RDoc::Parser::RipperStateLex.end?(tk) then
          body = get_tkread_clean(/^[ \t]+/, '')
          read_documentation_modifiers constant, RDoc::CONSTANT_MODIFIERS
          break
        else
          read_documentation_modifiers constant, RDoc::CONSTANT_MODIFIERS
        end
      elsif :on_const == tk[:kind] then
        rhs_name << tk[:text]

        next_tk = peek_tk
        if nest <= 0 and (next_tk.nil? || :on_nl == next_tk[:kind]) then
          create_module_alias container, constant, rhs_name unless is_array_or_hash
          break
        end
      elsif :on_nl == tk[:kind] then
        if nest <= 0 and RDoc::Parser::RipperStateLex.end?(tk) then
          unget_tk tk
          break
        end
      elsif :on_op == tk[:kind] && '::' == tk[:text]
        rhs_name << '::'
      end
      tk = get_tk
    end

    body ? body : get_tkread_clean(/^[ \t]+/, '')
  end

  ##
  # Generates an RDoc::Method or RDoc::Attr from +comment+ by looking for
  # :method: or :attr: directives in +comment+.

  def parse_comment container, tk, comment
    return parse_comment_tomdoc container, tk, comment if @markup == 'tomdoc'
    column  = tk[:char_no]
    line_no = comment.line.nil? ? tk[:line_no] : comment.line

    comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
    singleton = !!$~

    co =
      if (comment.text = comment.text.sub(/^# +:?method: *(\S*).*?\n/i, '')) && !!$~ then
        line_no += $`.count("\n")
        parse_comment_ghost container, comment.text, $1, column, line_no, comment
      elsif (comment.text = comment.text.sub(/# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '')) && !!$~ then
        parse_comment_attr container, $1, $3, comment
      end

    if co then
      co.singleton = singleton
      co.line      = line_no
    end

    true
  end

  ##
  # Parse a comment that is describing an attribute in +container+ with the
  # given +name+ and +comment+.

  def parse_comment_attr container, type, name, comment # :nodoc:
    return if name.empty?

    rw = case type
         when 'attr_reader' then 'R'
         when 'attr_writer' then 'W'
         else 'RW'
         end

    create_attr container, NORMAL, name, rw, comment
  end

  def parse_comment_ghost container, text, name, column, line_no, # :nodoc:
                          comment
    name = nil if name.empty?

    meth = RDoc::GhostMethod.new get_tkread, name
    record_location meth

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [position_comment, newline, indent]

    meth.params =
      if text.sub!(/^#\s+:?args?:\s*(.*?)\s*$/i, '') then
        $1
      else
        ''
      end

    comment.normalize
    comment.extract_call_seq meth

    return unless meth.name

    container.add_method meth

    meth.comment = comment

    @stats.add_method meth

    meth
  end

  ##
  # Creates an RDoc::Method on +container+ from +comment+ if there is a
  # Signature section in the comment

  def parse_comment_tomdoc container, tk, comment
    return unless signature = RDoc::TomDoc.signature(comment)
    column  = tk[:char_no]
    line_no = tk[:line_no]

    name, = signature.split %r%[ \(]%, 2

    meth = RDoc::GhostMethod.new get_tkread, name
    record_location meth
    meth.line      = line_no

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [position_comment, newline, indent]

    meth.call_seq = signature

    comment.normalize

    return unless meth.name

    container.add_method meth

    meth.comment = comment

    @stats.add_method meth
  end

  ##
  # Parses an +include+ or +extend+, indicated by the +klass+ and adds it to
  # +container+ # with +comment+

  def parse_extend_or_include klass, container, comment # :nodoc:
    loop do
      skip_tkspace_comment

      name = get_included_module_with_optional_parens

      unless name.empty? then
        obj = container.add klass, name, comment
        record_location obj
      end

      return if peek_tk.nil? || :on_comma != peek_tk[:kind]

      get_tk
    end
  end

  ##
  # Parses an +included+ with a block feature of ActiveSupport::Concern.

  def parse_included_with_activesupport_concern container, comment # :nodoc:
    skip_tkspace_without_nl
    tk = get_tk
    unless tk[:kind] == :on_lbracket || (tk[:kind] == :on_kw && tk[:text] == 'do')
      unget_tk tk
      return nil # should be a block
    end

    parse_statements container

    container
  end

  ##
  # Parses identifiers that can create new methods or change visibility.
  #
  # Returns true if the comment was not consumed.

  def parse_identifier container, single, tk, comment # :nodoc:
    case tk[:text]
    when 'private', 'protected', 'public', 'private_class_method',
         'public_class_method', 'module_function' then
      parse_visibility container, single, tk
      return true
    when 'private_constant', 'public_constant'
      parse_constant_visibility container, single, tk
      return true
    when 'attr' then
      parse_attr container, single, tk, comment
    when /^attr_(reader|writer|accessor)$/ then
      parse_attr_accessor container, single, tk, comment
    when 'alias_method' then
      parse_alias container, single, tk, comment
    when 'require', 'include' then
      # ignore
    else
      if comment.text =~ /\A#\#$/ then
        case comment.text
        when /^# +:?attr(_reader|_writer|_accessor)?:/ then
          parse_meta_attr container, single, tk, comment
        else
          method = parse_meta_method container, single, tk, comment
          method.params = container.params if
            container.params
          method.block_params = container.block_params if
            container.block_params
        end
      end
    end

    false
  end

  ##
  # Parses a meta-programmed attribute and creates an RDoc::Attr.
  #
  # To create foo and bar attributes on class C with comment "My attributes":
  #
  #   class C
  #
  #     ##
  #     # :attr:
  #     #
  #     # My attributes
  #
  #     my_attr :foo, :bar
  #
  #   end
  #
  # To create a foo attribute on class C with comment "My attribute":
  #
  #   class C
  #
  #     ##
  #     # :attr: foo
  #     #
  #     # My attribute
  #
  #     my_attr :foo, :bar
  #
  #   end

  def parse_meta_attr(context, single, tk, comment)
    args = parse_symbol_arg
    rw = "?"

    # If nodoc is given, don't document any of them

    tmp = RDoc::CodeObject.new
    read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS

    regexp = /^# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i
    if regexp =~ comment.text then
      comment.text = comment.text.sub(regexp, '')
      rw = case $1
           when 'attr_reader' then 'R'
           when 'attr_writer' then 'W'
           else 'RW'
           end
      name = $3 unless $3.empty?
    end

    if name then
      att = create_attr context, single, name, rw, comment
    else
      args.each do |attr_name|
        att = create_attr context, single, attr_name, rw, comment
      end
    end

    att
  end

  ##
  # Parses a meta-programmed method

  def parse_meta_method(container, single, tk, comment)
    column  = tk[:char_no]
    line_no = tk[:line_no]

    start_collecting_tokens
    add_token tk
    add_token_listener self

    skip_tkspace_without_nl

    comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
    singleton = !!$~

    name = parse_meta_method_name comment, tk

    return unless name

    meth = RDoc::MetaMethod.new get_tkread, name
    record_location meth
    meth.line   = line_no
    meth.singleton = singleton

    remove_token_listener self

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [position_comment, newline, indent]
    meth.add_tokens @token_stream

    parse_meta_method_params container, single, meth, tk, comment

    meth.comment = comment

    @stats.add_method meth

    meth
  end

  ##
  # Parses the name of a metaprogrammed method.  +comment+ is used to
  # determine the name while +tk+ is used in an error message if the name
  # cannot be determined.

  def parse_meta_method_name comment, tk # :nodoc:
    if comment.text.sub!(/^# +:?method: *(\S*).*?\n/i, '') then
      return $1 unless $1.empty?
    end

    name_t = get_tk

    if :on_symbol == name_t[:kind] then
      name_t[:text][1..-1]
    elsif :on_tstring == name_t[:kind] then
      name_t[:text][1..-2]
    elsif :on_op == name_t[:kind] && '=' == name_t[:text] then # ignore
      remove_token_listener self

      nil
    else
      warn "unknown name token #{name_t.inspect} for meta-method '#{tk[:text]}'"
      'unknown'
    end
  end

  ##
  # Parses the parameters and block for a meta-programmed method.

  def parse_meta_method_params container, single, meth, tk, comment # :nodoc:
    token_listener meth do
      meth.params = ''

      look_for_directives_in meth, comment
      comment.normalize
      comment.extract_call_seq meth

      container.add_method meth

      last_tk = tk

      while tk = get_tk do
        if :on_semicolon == tk[:kind] then
          break
        elsif :on_nl == tk[:kind] then
          break unless last_tk and :on_comma == last_tk[:kind]
        elsif :on_sp == tk[:kind] then
          # expression continues
        elsif :on_kw == tk[:kind] && 'do' == tk[:text] then
          parse_statements container, single, meth
          break
        else
          last_tk = tk
        end
      end
    end
  end

  ##
  # Parses a normal method defined by +def+

  def parse_method(container, single, tk, comment)
    singleton = nil
    added_container = false
    name = nil
    column  = tk[:char_no]
    line_no = tk[:line_no]

    start_collecting_tokens
    add_token tk

    token_listener self do
      prev_container = container
      name, container, singleton = parse_method_name container
      added_container = container != prev_container
    end

    return unless name

    meth = RDoc::AnyMethod.new get_tkread, name
    look_for_directives_in meth, comment
    meth.singleton = single == SINGLE ? true : singleton

    record_location meth
    meth.line   = line_no

    meth.start_collecting_tokens
    indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
    token = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
    token[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
    newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
    meth.add_tokens [token, newline, indent]
    meth.add_tokens @token_stream

    parse_method_params_and_body container, single, meth, added_container

    comment.normalize
    comment.extract_call_seq meth

    meth.comment = comment

    # after end modifiers
    read_documentation_modifiers meth, RDoc::METHOD_MODIFIERS

    @stats.add_method meth
  end

  ##
  # Parses the parameters and body of +meth+

  def parse_method_params_and_body container, single, meth, added_container
    token_listener meth do
      parse_method_parameters meth

      if meth.document_self or not @track_visibility then
        container.add_method meth
      elsif added_container then
        container.document_self = false
      end

      # Having now read the method parameters and documentation modifiers, we
      # now know whether we have to rename #initialize to ::new

      if meth.name == "initialize" && !meth.singleton then
        if meth.dont_rename_initialize then
          meth.visibility = :protected
        else
          meth.singleton = true
          meth.name = "new"
          meth.visibility = :public
        end
      end

      parse_statements container, single, meth
    end
  end

  ##
  # Parses a method that needs to be ignored.

  def parse_method_dummy container
    dummy = RDoc::Context.new
    dummy.parent = container
    dummy.store  = container.store
    skip_method dummy
  end

  ##
  # Parses the name of a method in +container+.
  #
  # Returns the method name, the container it is in (for def Foo.name) and if
  # it is a singleton or regular method.

  def parse_method_name container # :nodoc:
    skip_tkspace
    name_t = get_tk
    back_tk = skip_tkspace_without_nl
    singleton = false

    dot = get_tk
    if dot[:kind] == :on_period || (dot[:kind] == :on_op && dot[:text] == '::') then
      singleton = true

      name, container = parse_method_name_singleton container, name_t
    else
      unget_tk dot
      back_tk.reverse_each do |token|
        unget_tk token
      end

      name = parse_method_name_regular container, name_t
    end

    return name, container, singleton
  end

  ##
  # For the given +container+ and initial name token +name_t+ the method name
  # is parsed from the token stream for a regular method.

  def parse_method_name_regular container, name_t # :nodoc:
    if :on_op == name_t[:kind] && (%w{* & [] []= <<}.include?(name_t[:text])) then
      name_t[:text]
    else
      unless [:on_kw, :on_const, :on_ident].include?(name_t[:kind]) then
        warn "expected method name token, . or ::, got #{name_t.inspect}"
        skip_method container
        return
      end
      name_t[:text]
    end
  end

  ##
  # For the given +container+ and initial name token +name_t+ the method name
  # and the new +container+ (if necessary) are parsed from the token stream
  # for a singleton method.

  def parse_method_name_singleton container, name_t # :nodoc:
    skip_tkspace
    name_t2 = get_tk

    if (:on_kw == name_t[:kind] && 'self' == name_t[:text]) || (:on_op == name_t[:kind] && '%' == name_t[:text]) then
      # NOTE: work around '[' being consumed early
      if :on_lbracket == name_t2[:kind]
        get_tk
        name = '[]'
      else
        name = name_t2[:text]
      end
    elsif :on_const == name_t[:kind] then
      name = name_t2[:text]

      container = get_method_container container, name_t

      return unless container

      name
    elsif :on_ident == name_t[:kind] || :on_ivar == name_t[:kind] || :on_gvar == name_t[:kind] then
      parse_method_dummy container

      name = nil
    elsif (:on_kw == name_t[:kind]) && ('true' == name_t[:text] || 'false' == name_t[:text] || 'nil' == name_t[:text]) then
      klass_name = "#{name_t[:text].capitalize}Class"
      container = @store.find_class_named klass_name
      container ||= @top_level.add_class RDoc::NormalClass, klass_name

      name = name_t2[:text]
    else
      warn "unexpected method name token #{name_t.inspect}"
      # break
      skip_method container

      name = nil
    end

    return name, container
  end

  ##
  # Extracts +yield+ parameters from +method+

  def parse_method_or_yield_parameters(method = nil,
                                       modifiers = RDoc::METHOD_MODIFIERS)
    skip_tkspace_without_nl
    tk = get_tk
    end_token = get_end_token tk
    return '' unless end_token

    nest = 0
    continue = false

    while tk != nil do
      case tk[:kind]
      when :on_semicolon then
        break if nest == 0
      when :on_lbracket then
        nest += 1
      when :on_rbracket then
        nest -= 1
      when :on_lbrace then
        nest += 1
      when :on_rbrace then
        nest -= 1
        if nest <= 0
          # we might have a.each { |i| yield i }
          unget_tk(tk) if nest < 0
          break
        end
      when :on_lparen then
        nest += 1
      when end_token[:kind] then
        if end_token[:kind] == :on_rparen
          nest -= 1
          break if nest <= 0
        else
          break
        end
      when :on_rparen then
        nest -= 1
      when :on_comment, :on_embdoc then
        @read.pop
        if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
          (!continue or (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0) then
          if method && method.block_params.nil? then
            unget_tk tk
            read_documentation_modifiers method, modifiers
          end
          break if !continue and nest <= 0
        end
      when :on_comma then
        continue = true
      when :on_ident then
        continue = false if continue
      end
      tk = get_tk
    end

    get_tkread_clean(/\s+/, ' ')
  end

  ##
  # Capture the method's parameters. Along the way, look for a comment
  # containing:
  #
  #    # yields: ....
  #
  # and add this as the block_params for the method

  def parse_method_parameters method
    res = parse_method_or_yield_parameters method

    res = "(#{res})" unless res =~ /\A\(/
    method.params = res unless method.params

    return if  method.block_params

    skip_tkspace_without_nl
    read_documentation_modifiers method, RDoc::METHOD_MODIFIERS
  end

  ##
  # Parses an RDoc::NormalModule in +container+ with +comment+

  def parse_module container, single, tk, comment
    container, name_t, = get_class_or_module container

    name = name_t[:text]

    mod = container.add_module RDoc::NormalModule, name
    mod.ignore unless container.document_children
    record_location mod

    read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS
    mod.add_comment comment, @top_level
    parse_statements mod

    # after end modifiers
    read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS

    @stats.add_module mod
  end

  ##
  # Parses an RDoc::Require in +context+ containing +comment+

  def parse_require(context, comment)
    skip_tkspace_comment
    tk = get_tk

    if :on_lparen == tk[:kind] then
      skip_tkspace_comment
      tk = get_tk
    end

    name = tk[:text][1..-2] if :on_tstring == tk[:kind]

    if name then
      @top_level.add_require RDoc::Require.new(name, comment)
    else
      unget_tk tk
    end
  end

  ##
  # Parses a rescue

  def parse_rescue
    skip_tkspace_without_nl

    while tk = get_tk
      case tk[:kind]
      when :on_nl, :on_semicolon, :on_comment then
        break
      when :on_comma then
        skip_tkspace_without_nl

        get_tk if :on_nl == peek_tk[:kind]
      end

      skip_tkspace_without_nl
    end
  end

  ##
  # Retrieve comment body without =begin/=end

  def retrieve_comment_body(tk)
    if :on_embdoc == tk[:kind]
      tk[:text].gsub(/\A=begin.*\n/, '').gsub(/=end\n?\z/, '')
    else
      tk[:text]
    end
  end

  ##
  # The core of the Ruby parser.

  def parse_statements(container, single = NORMAL, current_method = nil,
                       comment = new_comment(''))
    raise 'no' unless RDoc::Comment === comment
    comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding

    nest = 1
    save_visibility = container.visibility

    non_comment_seen = true

    while tk = get_tk do
      keep_comment = false
      try_parse_comment = false

      non_comment_seen = true unless (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])

      case tk[:kind]
      when :on_nl, :on_ignored_nl, :on_comment, :on_embdoc then
        if :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
          skip_tkspace
          tk = get_tk
        else
          past_tokens = @read.size > 1 ? @read[0..-2] : []
          nl_position = 0
          past_tokens.reverse.each_with_index do |read_tk, i|
            if read_tk =~ /^\n$/ then
              nl_position = (past_tokens.size - 1) - i
              break
            elsif read_tk =~ /^#.*\n$/ then
              nl_position = ((past_tokens.size - 1) - i) + 1
              break
            end
          end
          comment_only_line = past_tokens[nl_position..-1].all?{ |c| c =~ /^\s+$/ }
          unless comment_only_line then
            tk = get_tk
          end
        end

        if tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
          if non_comment_seen then
            # Look for RDoc in a comment about to be thrown away
            non_comment_seen = parse_comment container, tk, comment unless
              comment.empty?

            comment = ''
            comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
          end

          line_no = nil
          while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do
            comment_body = retrieve_comment_body(tk)
            line_no = tk[:line_no] if comment.empty?
            comment += comment_body
            comment << "\n" unless comment_body =~ /\n\z/

            if comment_body.size > 1 && comment_body =~ /\n\z/ then
              skip_tkspace_without_nl # leading spaces
            end
            tk = get_tk
          end

          comment = new_comment comment, line_no

          unless comment.empty? then
            look_for_directives_in container, comment

            if container.done_documenting then
              throw :eof if RDoc::TopLevel === container
              container.ongoing_visibility = save_visibility
            end
          end

          keep_comment = true
        else
          non_comment_seen = true
        end

        unget_tk tk
        keep_comment = true
        container.current_line_visibility = nil

      when :on_kw then
        case tk[:text]
        when 'class' then
          parse_class container, single, tk, comment

        when 'module' then
          parse_module container, single, tk, comment

        when 'def' then
          parse_method container, single, tk, comment

        when 'alias' then
          parse_alias container, single, tk, comment unless current_method

        when 'yield' then
          if current_method.nil? then
            warn "Warning: yield outside of method" if container.document_self
          else
            parse_yield container, single, tk, current_method
          end

        when 'until', 'while' then
          if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
            nest += 1
            skip_optional_do_after_expression
          end

        # Until and While can have a 'do', which shouldn't increase the nesting.
        # We can't solve the general case, but we can handle most occurrences by
        # ignoring a do at the end of a line.

        # 'for' is trickier
        when 'for' then
          nest += 1
          skip_for_variable
          skip_optional_do_after_expression

        when 'case', 'do', 'if', 'unless', 'begin' then
          if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
            nest += 1
          end

        when 'super' then
          current_method.calls_super = true if current_method

        when 'rescue' then
          parse_rescue

        when 'end' then
          nest -= 1
          if nest == 0 then
            container.ongoing_visibility = save_visibility

            parse_comment container, tk, comment unless comment.empty?

            return
          end
        end

      when :on_const then
        unless parse_constant container, tk, comment, current_method then
          try_parse_comment = true
        end

      when :on_ident then
        if nest == 1 and current_method.nil? then
          keep_comment = parse_identifier container, single, tk, comment
        end

        case tk[:text]
        when "require" then
          parse_require container, comment
        when "include" then
          parse_extend_or_include RDoc::Include, container, comment
        when "extend" then
          parse_extend_or_include RDoc::Extend, container, comment
        when "included" then
          parse_included_with_activesupport_concern container, comment
        end

      else
        try_parse_comment = nest == 1
      end

      if try_parse_comment then
        non_comment_seen = parse_comment container, tk, comment unless
          comment.empty?

        keep_comment = false
      end

      unless keep_comment then
        comment = new_comment ''
        comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
        container.params = nil
        container.block_params = nil
      end

      consume_trailing_spaces
    end

    container.params = nil
    container.block_params = nil
  end

  ##
  # Parse up to +no+ symbol arguments

  def parse_symbol_arg(no = nil)
    skip_tkspace_comment

    tk = get_tk
    if tk[:kind] == :on_lparen
      parse_symbol_arg_paren no
    else
      parse_symbol_arg_space no, tk
    end
  end

  ##
  # Parses up to +no+ symbol arguments surrounded by () and places them in
  # +args+.

  def parse_symbol_arg_paren no # :nodoc:
    args = []

    loop do
      skip_tkspace_comment
      if tk1 = parse_symbol_in_arg
        args.push tk1
        break if no and args.size >= no
      end

      skip_tkspace_comment
      case (tk2 = get_tk)[:kind]
      when :on_rparen
        break
      when :on_comma
      else
        warn("unexpected token: '#{tk2.inspect}'") if $DEBUG_RDOC
        break
      end
    end

    args
  end

  ##
  # Parses up to +no+ symbol arguments separated by spaces and places them in
  # +args+.

  def parse_symbol_arg_space no, tk # :nodoc:
    args = []

    unget_tk tk
    if tk = parse_symbol_in_arg
      args.push tk
      return args if no and args.size >= no
    end

    loop do
      skip_tkspace_without_nl

      tk1 = get_tk
      if tk1.nil? || :on_comma != tk1[:kind] then
        unget_tk tk1
        break
      end

      skip_tkspace_comment
      if tk = parse_symbol_in_arg
        args.push tk
        break if no and args.size >= no
      end
    end

    args
  end

  ##
  # Returns symbol text from the next token

  def parse_symbol_in_arg
    tk = get_tk
    if :on_symbol == tk[:kind] then
      tk[:text].sub(/^:/, '')
    elsif :on_tstring == tk[:kind] then
      tk[:text][1..-2]
    elsif :on_dstring == tk[:kind] or :on_ident == tk[:kind] then
      nil # ignore
    else
      warn("Expected symbol or string, got #{tk.inspect}") if $DEBUG_RDOC
      nil
    end
  end

  ##
  # Parses statements in the top-level +container+

  def parse_top_level_statements container
    comment = collect_first_comment

    look_for_directives_in container, comment

    throw :eof if container.done_documenting

    @markup = comment.format

    # HACK move if to RDoc::Context#comment=
    container.comment = comment if container.document_self unless comment.empty?

    parse_statements container, NORMAL, nil, comment
  end

  ##
  # Determines the visibility in +container+ from +tk+

  def parse_visibility(container, single, tk)
    vis_type, vis, singleton = get_visibility_information tk, single

    skip_tkspace_comment false

    ptk = peek_tk
    # Ryan Davis suggested the extension to ignore modifiers, because he
    # often writes
    #
    #   protected unless $TESTING
    #
    if [:on_nl, :on_semicolon].include?(ptk[:kind]) || (:on_kw == ptk[:kind] && (['if', 'unless'].include?(ptk[:text]))) then
      container.ongoing_visibility = vis
    elsif :on_kw == ptk[:kind] && 'def' == ptk[:text]
      container.current_line_visibility = vis
    else
      update_visibility container, vis_type, vis, singleton
    end
  end

  ##
  # Parses a Module#private_constant or Module#public_constant call from +tk+.

  def parse_constant_visibility(container, single, tk)
    args = parse_symbol_arg
    case tk[:text]
    when 'private_constant'
      vis = :private
    when 'public_constant'
      vis = :public
    else
      raise RDoc::Error, 'Unreachable'
    end
    container.set_constant_visibility_for args, vis
  end

  ##
  # Determines the block parameter for +context+

  def parse_yield(context, single, tk, method)
    return if method.block_params

    get_tkread
    method.block_params = parse_method_or_yield_parameters
  end

  ##
  # Directives are modifier comments that can appear after class, module, or
  # method names. For example:
  #
  #   def fred # :yields: a, b
  #
  # or:
  #
  #   class MyClass # :nodoc:
  #
  # We return the directive name and any parameters as a two element array if
  # the name is in +allowed+.  A directive can be found anywhere up to the end
  # of the current line.

  def read_directive allowed
    tokens = []

    while tk = get_tk do
      tokens << tk

      if :on_nl == tk[:kind] or (:on_kw == tk[:kind] && 'def' == tk[:text]) then
        return
      elsif :on_comment == tk[:kind] or :on_embdoc == tk[:kind] then
        return unless tk[:text] =~ /\s*:?([\w-]+):\s*(.*)/

        directive = $1.downcase

        return [directive, $2] if allowed.include? directive

        return
      end
    end
  ensure
    unless tokens.length == 1 and (:on_comment == tokens.first[:kind] or :on_embdoc == tokens.first[:kind]) then
      tokens.reverse_each do |token|
        unget_tk token
      end
    end
  end

  ##
  # Handles directives following the definition for +context+ (any
  # RDoc::CodeObject) if the directives are +allowed+ at this point.
  #
  # See also RDoc::Markup::PreProcess#handle_directive

  def read_documentation_modifiers context, allowed
    skip_tkspace_without_nl
    directive, value = read_directive allowed

    return unless directive

    @preprocess.handle_directive '', directive, value, context do |dir, param|
      if %w[notnew not_new not-new].include? dir then
        context.dont_rename_initialize = true

        true
      end
    end
  end

  ##
  # Records the location of this +container+ in the file for this parser and
  # adds it to the list of classes and modules in the file.

  def record_location container # :nodoc:
    case container
    when RDoc::ClassModule then
      @top_level.add_to_classes_or_modules container
    end

    container.record_location @top_level
  end

  ##
  # Scans this Ruby file for Ruby constructs

  def scan
    reset

    catch :eof do
      begin
        parse_top_level_statements @top_level

      rescue StandardError => e
        if @content.include?('<%') and @content.include?('%>') then
          # Maybe, this is ERB.
          $stderr.puts "\033[2KRDoc detects ERB file. Skips it for compatibility:"
          $stderr.puts @file_name
          return
        end

        if @scanner_point >= @scanner.size
          now_line_no = @scanner[@scanner.size - 1][:line_no]
        else
          now_line_no = peek_tk[:line_no]
        end
        first_tk_index = @scanner.find_index { |tk| tk[:line_no] == now_line_no }
        last_tk_index = @scanner.find_index { |tk| tk[:line_no] == now_line_no + 1 }
        last_tk_index = last_tk_index ? last_tk_index - 1 : @scanner.size - 1
        code = @scanner[first_tk_index..last_tk_index].map{ |t| t[:text] }.join

        $stderr.puts <<-EOF

#{self.class} failure around line #{now_line_no} of
#{@file_name}

        EOF

        unless code.empty? then
          $stderr.puts code
          $stderr.puts
        end

        raise e
      end
    end

    @top_level
  end

  ##
  # while, until, and for have an optional do

  def skip_optional_do_after_expression
    skip_tkspace_without_nl
    tk = get_tk

    b_nest = 0
    nest = 0

    loop do
      break unless tk
      case tk[:kind]
      when :on_semicolon, :on_nl, :on_ignored_nl then
        break if b_nest.zero?
      when :on_lparen then
        nest += 1
      when :on_rparen then
        nest -= 1
      when :on_kw then
        case tk[:text]
        when 'begin'
          b_nest += 1
        when 'end'
          b_nest -= 1
        when 'do'
          break if nest.zero?
        end
      when :on_comment, :on_embdoc then
        if b_nest.zero? and "\n" == tk[:text][-1] then
          break
        end
      end
      tk = get_tk
    end

    skip_tkspace_without_nl

    get_tk if peek_tk && :on_kw == peek_tk[:kind] && 'do' == peek_tk[:text]
  end

  ##
  # skip the var [in] part of a 'for' statement

  def skip_for_variable
    skip_tkspace_without_nl
    get_tk
    skip_tkspace_without_nl
    tk = get_tk
    unget_tk(tk) unless :on_kw == tk[:kind] and 'in' == tk[:text]
  end

  ##
  # Skips the next method in +container+

  def skip_method container
    meth = RDoc::AnyMethod.new "", "anon"
    parse_method_parameters meth
    parse_statements container, false, meth
  end

  ##
  # Skip spaces until a comment is found

  def skip_tkspace_comment(skip_nl = true)
    loop do
      skip_nl ? skip_tkspace : skip_tkspace_without_nl
      next_tk = peek_tk
      return if next_tk.nil? || (:on_comment != next_tk[:kind] and :on_embdoc != next_tk[:kind])
      get_tk
    end
  end

  ##
  # Updates visibility in +container+ from +vis_type+ and +vis+.

  def update_visibility container, vis_type, vis, singleton # :nodoc:
    new_methods = []

    case vis_type
    when 'module_function' then
      args = parse_symbol_arg
      container.set_visibility_for args, :private, false

      container.methods_matching args do |m|
        s_m = m.dup
        record_location s_m
        s_m.singleton = true
        new_methods << s_m
      end
    when 'public_class_method', 'private_class_method' then
      args = parse_symbol_arg

      container.methods_matching args, true do |m|
        if m.parent != container then
          m = m.dup
          record_location m
          new_methods << m
        end

        m.visibility = vis
      end
    else
      args = parse_symbol_arg
      container.set_visibility_for args, vis, singleton
    end

    new_methods.each do |method|
      case method
      when RDoc::AnyMethod then
        container.add_method method
      when RDoc::Attr then
        container.add_attribute method
      end
      method.visibility = vis
    end
  end

  ##
  # Prints +message+ to +$stderr+ unless we're being quiet

  def warn message
    @options.warn make_message message
  end

end
PK."#[h\�;!;!.gems/rdoc-6.4.1.1/lib/rdoc/parser/changelog.rbnu�[���# frozen_string_literal: true

##
# A ChangeLog file parser.
#
# This parser converts a ChangeLog into an RDoc::Markup::Document.  When
# viewed as HTML a ChangeLog page will have an entry for each day's entries in
# the sidebar table of contents.
#
# This parser is meant to parse the MRI ChangeLog, but can be used to parse any
# {GNU style Change
# Log}[http://www.gnu.org/prep/standards/html_node/Style-of-Change-Logs.html].

class RDoc::Parser::ChangeLog < RDoc::Parser

  include RDoc::Parser::Text

  parse_files_matching(/(\/|\\|\A)ChangeLog[^\/\\]*\z/)

  ##
  # Attaches the +continuation+ of the previous line to the +entry_body+.
  #
  # Continued function listings are joined together as a single entry.
  # Continued descriptions are joined to make a single paragraph.

  def continue_entry_body entry_body, continuation
    return unless last = entry_body.last

    if last =~ /\)\s*\z/ and continuation =~ /\A\(/ then
      last.sub!(/\)\s*\z/, ',')
      continuation = continuation.sub(/\A\(/, '')
    end

    if last =~ /\s\z/ then
      last << continuation
    else
      last << ' ' + continuation
    end
  end

  ##
  # Creates an RDoc::Markup::Document given the +groups+ of ChangeLog entries.

  def create_document groups
    doc = RDoc::Markup::Document.new
    doc.omit_headings_below = 2
    doc.file = @top_level

    doc << RDoc::Markup::Heading.new(1, File.basename(@file_name))
    doc << RDoc::Markup::BlankLine.new

    groups.sort_by do |day,| day end.reverse_each do |day, entries|
      doc << RDoc::Markup::Heading.new(2, day.dup)
      doc << RDoc::Markup::BlankLine.new

      doc.concat create_entries entries
    end

    doc
  end

  ##
  # Returns a list of ChangeLog entries an RDoc::Markup nodes for the given
  # +entries+.

  def create_entries entries
    out = []

    entries.each do |entry, items|
      out << RDoc::Markup::Heading.new(3, entry)
      out << RDoc::Markup::BlankLine.new

      out << create_items(items)
    end

    out
  end

  ##
  # Returns an RDoc::Markup::List containing the given +items+ in the
  # ChangeLog

  def create_items items
    list = RDoc::Markup::List.new :NOTE

    items.each do |item|
      item =~ /\A(.*?(?:\([^)]+\))?):\s*/

      title = $1
      body = $'

      paragraph = RDoc::Markup::Paragraph.new body
      list_item = RDoc::Markup::ListItem.new title, paragraph
      list << list_item
    end

    list
  end

  ##
  # Groups +entries+ by date.

  def group_entries entries
    @time_cache ||= {}
    entries.group_by do |title, _|
      begin
        time = @time_cache[title]
        (time || parse_date(title)).strftime '%Y-%m-%d'
      rescue NoMethodError, ArgumentError
        time, = title.split '  ', 2
        parse_date(time).strftime '%Y-%m-%d'
      end
    end
  end

  ##
  # Parse date in ISO-8601, RFC-2822, or default of Git

  def parse_date(date)
    case date
    when /\A\s*(\d+)-(\d+)-(\d+)(?:[ T](\d+):(\d+):(\d+) *([-+]\d\d):?(\d\d))?\b/
      Time.new($1, $2, $3, $4, $5, $6, ("#{$7}:#{$8}" if $7))
    when /\A\s*\w{3}, +(\d+) (\w{3}) (\d+) (\d+):(\d+):(\d+) *(?:([-+]\d\d):?(\d\d))\b/
      Time.new($3, $2, $1, $4, $5, $6, ("#{$7}:#{$8}" if $7))
    when /\A\s*\w{3} (\w{3}) +(\d+) (\d+) (\d+):(\d+):(\d+) *(?:([-+]\d\d):?(\d\d))\b/
      Time.new($3, $1, $2, $4, $5, $6, ("#{$7}:#{$8}" if $7))
    when /\A\s*\w{3} (\w{3}) +(\d+) (\d+):(\d+):(\d+) (\d+)\b/
      Time.new($6, $1, $2, $3, $4, $5)
    else
      raise ArgumentError, "bad date: #{date}"
    end
  end

  ##
  # Parses the entries in the ChangeLog.
  #
  # Returns an Array of each ChangeLog entry in order of parsing.
  #
  # A ChangeLog entry is an Array containing the ChangeLog title (date and
  # committer) and an Array of ChangeLog items (file and function changed with
  # description).
  #
  # An example result would be:
  #
  #    [ 'Tue Dec  4 08:33:46 2012  Eric Hodel  <drbrain@segment7.net>',
  #      [ 'README.EXT:  Converted to RDoc format',
  #        'README.EXT.ja:  ditto']]

  def parse_entries
    @time_cache ||= {}

    if /\A((?:.*\n){,3})commit\s/ =~ @content
      class << self; prepend Git; end
      parse_info($1)
      return parse_entries
    end

    entries = []
    entry_name = nil
    entry_body = []

    @content.each_line do |line|
      case line
      when /^\s*$/ then
        next
      when /^\w.*/ then
        entries << [entry_name, entry_body] if entry_name

        entry_name = $&

        begin
          time = parse_date entry_name
          @time_cache[entry_name] = time
        rescue ArgumentError
          entry_name = nil
        end

        entry_body = []
      when /^(\t| {8})?\*\s*(.*)/ then # "\t* file.c (func): ..."
        entry_body << $2.dup
      when /^(\t| {8})?\s*(\(.*)/ then # "\t(func): ..."
        entry = $2

        if entry_body.last =~ /:/ then
          entry_body << entry.dup
        else
          continue_entry_body entry_body, entry
        end
      when /^(\t| {8})?\s*(.*)/ then
        continue_entry_body entry_body, $2
      end
    end

    entries << [entry_name, entry_body] if entry_name

    entries.reject! do |(entry,_)|
      entry == nil
    end

    entries
  end

  ##
  # Converts the ChangeLog into an RDoc::Markup::Document

  def scan
    @time_cache = {}

    entries = parse_entries
    grouped_entries = group_entries entries

    doc = create_document grouped_entries

    @top_level.comment = doc

    @top_level
  end

  module Git
    def parse_info(info)
      /^\s*base-url\s*=\s*(.*\S)/ =~ info
      @base_url = $1
    end

    def parse_entries
      entries = []

      @content.scan(/^commit\s+(\h{20})\h*\n((?:.+\n)*)\n((?: {4}.*\n+)*)/) do
        entry_name, header, entry_body = $1, $2, $3.gsub(/^ {4}/, '')
        # header = header.scan(/^ *(\S+?): +(.*)/).to_h
        # date = header["CommitDate"] || header["Date"]
        date = header[/^ *(?:Author)?Date: +(.*)/, 1]
        author = header[/^ *Author: +(.*)/, 1]
        begin
          time = parse_date(header[/^ *CommitDate: +(.*)/, 1] || date)
          @time_cache[entry_name] = time
          author.sub!(/\s*<(.*)>/, '')
          email = $1
          entries << [entry_name, [author, email, date, entry_body]]
        rescue ArgumentError
        end
      end

      entries
    end

    def create_entries entries
      # git log entries have no strictly itemized style like the old
      # style, just assume Markdown.
      entries.map do |commit, entry|
        LogEntry.new(@base_url, commit, *entry)
      end
    end

    LogEntry = Struct.new(:base, :commit, :author, :email, :date, :contents) do
      HEADING_LEVEL = 3

      def initialize(base, commit, author, email, date, contents)
        case contents
        when String
          contents = RDoc::Markdown.parse(contents).parts.each do |body|
            case body
            when RDoc::Markup::Heading
              body.level += HEADING_LEVEL + 1
            end
          end
          case first = contents[0]
          when RDoc::Markup::Paragraph
            contents[0] = RDoc::Markup::Heading.new(HEADING_LEVEL + 1, first.text)
          end
        end
        super
      end

      def level
        HEADING_LEVEL
      end

      def aref
        "label-#{commit}"
      end

      def label context = nil
        aref
      end

      def text
        case base
        when nil
          "#{date}"
        when /%s/
          "{#{date}}[#{base % commit}]"
        else
          "{#{date}}[#{base}#{commit}]"
        end + " {#{author}}[mailto:#{email}]"
      end

      def accept visitor
        visitor.accept_heading self
        begin
          if visitor.respond_to?(:code_object=)
            code_object = visitor.code_object
            visitor.code_object = self
          end
          contents.each do |body|
            body.accept visitor
          end
        ensure
          if visitor.respond_to?(:code_object)
            visitor.code_object = code_object
          end
        end
      end

      def pretty_print q # :nodoc:
        q.group(2, '[log_entry: ', ']') do
          q.text commit
          q.text ','
          q.breakable
          q.group(2, '[date: ', ']') { q.text date }
          q.text ','
          q.breakable
          q.group(2, '[author: ', ']') { q.text author }
          q.text ','
          q.breakable
          q.group(2, '[email: ', ']') { q.text email }
          q.text ','
          q.breakable
          q.pp contents
        end
      end
    end
  end
end

PK."#[�(�0�0%gems/rdoc-6.4.1.1/lib/rdoc/servlet.rbnu�[���# frozen_string_literal: true
require 'rdoc'
require 'erb'
require 'time'
require 'json'

begin
  require 'webrick'
rescue LoadError
  abort "webrick is not found. You may need to `gem install webrick` to install webrick."
end

##
# This is a WEBrick servlet that allows you to browse ri documentation.
#
# You can show documentation through either `ri --server` or, with RubyGems
# 2.0 or newer, `gem server`.  For ri, the server runs on port 8214 by
# default.  For RubyGems the server runs on port 8808 by default.
#
# You can use this servlet in your own project by mounting it on a WEBrick
# server:
#
#   require 'webrick'
#
#   server = WEBrick::HTTPServer.new Port: 8000
#
#   server.mount '/', RDoc::Servlet
#
# If you want to mount the servlet some other place than the root, provide the
# base path when mounting:
#
#   server.mount '/rdoc', RDoc::Servlet, '/rdoc'

class RDoc::Servlet < WEBrick::HTTPServlet::AbstractServlet

  @server_stores = Hash.new { |hash, server| hash[server] = {} }
  @cache         = Hash.new { |hash, store|  hash[store]  = {} }

  ##
  # Maps an asset type to its path on the filesystem

  attr_reader :asset_dirs

  ##
  # An RDoc::Options instance used for rendering options

  attr_reader :options

  ##
  # Creates an instance of this servlet that shares cached data between
  # requests.

  def self.get_instance server, *options # :nodoc:
    stores = @server_stores[server]

    new server, stores, @cache, *options
  end

  ##
  # Creates a new WEBrick servlet.
  #
  # Use +mount_path+ when mounting the servlet somewhere other than /.
  #
  # Use +extra_doc_dirs+ for additional documentation directories.
  #
  # +server+ is provided automatically by WEBrick when mounting.  +stores+ and
  # +cache+ are provided automatically by the servlet.

  def initialize server, stores, cache, mount_path = nil, extra_doc_dirs = []
    super server

    @cache      = cache
    @mount_path = mount_path
    @extra_doc_dirs = extra_doc_dirs
    @stores     = stores

    @options = RDoc::Options.new
    @options.op_dir = '.'

    darkfish_dir = nil

    # HACK dup
    $LOAD_PATH.each do |path|
      darkfish_dir = File.join path, 'rdoc/generator/template/darkfish/'
      next unless File.directory? darkfish_dir
      @options.template_dir = darkfish_dir
      break
    end

    @asset_dirs = {
      :darkfish   => darkfish_dir,
      :json_index =>
        File.expand_path('../generator/template/json_index/', __FILE__),
    }
  end

  ##
  # Serves the asset at the path in +req+ for +generator_name+ via +res+.

  def asset generator_name, req, res
    asset_dir = @asset_dirs[generator_name]

    asset_path = File.join asset_dir, req.path

    if_modified_since req, res, asset_path

    res.body = File.read asset_path

    res.content_type = case req.path
                       when /\.css\z/ then 'text/css'
                       when /\.js\z/  then 'application/javascript'
                       else                'application/octet-stream'
                       end
  end

  ##
  # GET request entry point.  Fills in +res+ for the path, etc. in +req+.

  def do_GET req, res
    req.path.sub!(/\A#{Regexp.escape @mount_path}/, '') if @mount_path

    case req.path
    when '/' then
      root req, res
    when '/js/darkfish.js', '/js/jquery.js', '/js/search.js',
         %r%^/css/%, %r%^/images/%, %r%^/fonts/% then
      asset :darkfish, req, res
    when '/js/navigation.js', '/js/searcher.js' then
      asset :json_index, req, res
    when '/js/search_index.js' then
      root_search req, res
    else
      show_documentation req, res
    end
  rescue WEBrick::HTTPStatus::NotFound => e
    generator = generator_for RDoc::Store.new

    not_found generator, req, res, e.message
  rescue WEBrick::HTTPStatus::Status
    raise
  rescue => e
    error e, req, res
  end

  ##
  # Fills in +res+ with the class, module or page for +req+ from +store+.
  #
  # +path+ is relative to the mount_path and is used to determine the class,
  # module or page name (/RDoc/Servlet.html becomes RDoc::Servlet).
  # +generator+ is used to create the page.

  def documentation_page store, generator, path, req, res
    text_name = path.chomp '.html'
    name = text_name.gsub '/', '::'

    if klass = store.find_class_or_module(name) then
      res.body = generator.generate_class klass
    elsif page = store.find_text_page(name.sub(/_([^_]*)\z/, '.\1')) then
      res.body = generator.generate_page page
    elsif page = store.find_text_page(text_name.sub(/_([^_]*)\z/, '.\1')) then
      res.body = generator.generate_page page
    else
      not_found generator, req, res
    end
  end

  ##
  # Creates the JSON search index on +res+ for the given +store+.  +generator+
  # must respond to \#json_index to build.  +req+ is ignored.

  def documentation_search store, generator, req, res
    json_index = @cache[store].fetch :json_index do
      @cache[store][:json_index] =
        JSON.dump generator.json_index.build_index
    end

    res.content_type = 'application/javascript'
    res.body = "var search_data = #{json_index}"
  end

  ##
  # Returns the RDoc::Store and path relative to +mount_path+ for
  # documentation at +path+.

  def documentation_source path
    _, source_name, path = path.split '/', 3

    store = @stores[source_name]
    return store, path if store

    store = store_for source_name

    store.load_all

    @stores[source_name] = store

    return store, path
  end

  ##
  # Generates an error page for the +exception+ while handling +req+ on +res+.

  def error exception, req, res
    backtrace = exception.backtrace.join "\n"

    res.content_type = 'text/html'
    res.status = 500
    res.body = <<-BODY
<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

<title>Error - #{ERB::Util.html_escape exception.class}</title>

<link type="text/css" media="screen" href="#{@mount_path}/css/rdoc.css" rel="stylesheet">
</head>
<body>
<h1>Error</h1>

<p>While processing <code>#{ERB::Util.html_escape req.request_uri}</code> the
RDoc (#{ERB::Util.html_escape RDoc::VERSION}) server has encountered a
<code>#{ERB::Util.html_escape exception.class}</code>
exception:

<pre>#{ERB::Util.html_escape exception.message}</pre>

<p>Please report this to the
<a href="https://github.com/ruby/rdoc/issues">RDoc issues tracker</a>.  Please
include the RDoc version, the URI above and exception class, message and
backtrace.  If you're viewing a gem's documentation, include the gem name and
version.  If you're viewing Ruby's documentation, include the version of ruby.

<p>Backtrace:

<pre>#{ERB::Util.html_escape backtrace}</pre>

</body>
</html>
    BODY
  end

  ##
  # Instantiates a Darkfish generator for +store+

  def generator_for store
    generator = RDoc::Generator::Darkfish.new store, @options
    generator.file_output = false
    generator.asset_rel_path = '..'

    rdoc = RDoc::RDoc.new
    rdoc.store     = store
    rdoc.generator = generator
    rdoc.options   = @options

    @options.main_page = store.main
    @options.title     = store.title

    generator
  end

  ##
  # Handles the If-Modified-Since HTTP header on +req+ for +path+.  If the
  # file has not been modified a Not Modified response is returned.  If the
  # file has been modified a Last-Modified header is added to +res+.

  def if_modified_since req, res, path = nil
    last_modified = File.stat(path).mtime if path

    res['last-modified'] = last_modified.httpdate

    return unless ims = req['if-modified-since']

    ims = Time.parse ims

    unless ims < last_modified then
      res.body = ''
      raise WEBrick::HTTPStatus::NotModified
    end
  end

  ##
  # Returns an Array of installed documentation.
  #
  # Each entry contains the documentation name (gem name, 'Ruby
  # Documentation', etc.), the path relative to the mount point, whether the
  # documentation exists, the type of documentation (See RDoc::RI::Paths#each)
  # and the filesystem to the RDoc::Store for the documentation.

  def installed_docs
    extra_counter = 0
    ri_paths.map do |path, type|
      store = RDoc::Store.new path, type
      exists = File.exist? store.cache_path

      case type
      when :gem then
        gem_path = path[%r%/([^/]*)/ri$%, 1]
        [gem_path, "#{gem_path}/", exists, type, path]
      when :system then
        ['Ruby Documentation', 'ruby/', exists, type, path]
      when :site then
        ['Site Documentation', 'site/', exists, type, path]
      when :home then
        ['Home Documentation', 'home/', exists, type, path]
      when :extra then
        extra_counter += 1
        store.load_cache if exists
        title = store.title || "Extra Documentation"
        [title, "extra-#{extra_counter}/", exists, type, path]
      end
    end
  end

  ##
  # Returns a 404 page built by +generator+ for +req+ on +res+.

  def not_found generator, req, res, message = nil
    message ||= "The page <kbd>#{ERB::Util.h req.path}</kbd> was not found"
    res.body = generator.generate_servlet_not_found message
    res.status = 404
  end

  ##
  # Enumerates the ri paths.  See RDoc::RI::Paths#each

  def ri_paths &block
    RDoc::RI::Paths.each true, true, true, :all, *@extra_doc_dirs, &block #TODO: pass extra_dirs
  end

  ##
  # Generates the root page on +res+.  +req+ is ignored.

  def root req, res
    generator = RDoc::Generator::Darkfish.new nil, @options

    res.body = generator.generate_servlet_root installed_docs

    res.content_type = 'text/html'
  end

  ##
  # Generates a search index for the root page on +res+.  +req+ is ignored.

  def root_search req, res
    search_index = []
    info         = []

    installed_docs.map do |name, href, exists, type, path|
      next unless exists

      search_index << name

      case type
      when :gem
        gemspec = path.gsub(%r%/doc/([^/]*?)/ri$%,
                            '/specifications/\1.gemspec')

        spec = Gem::Specification.load gemspec

        path    = spec.full_name
        comment = spec.summary
      when :system then
        path    = 'ruby'
        comment = 'Documentation for the Ruby standard library'
      when :site then
        path    = 'site'
        comment = 'Documentation for non-gem libraries'
      when :home then
        path    = 'home'
        comment = 'Documentation from your home directory'
      when :extra
        comment = name
      end

      info << [name, '', path, '', comment]
    end

    index = {
      :index => {
        :searchIndex     => search_index,
        :longSearchIndex => search_index,
        :info            => info,
      }
    }

    res.body = "var search_data = #{JSON.dump index};"
    res.content_type = 'application/javascript'
  end

  ##
  # Displays documentation for +req+ on +res+, whether that be HTML or some
  # asset.

  def show_documentation req, res
    store, path = documentation_source req.path

    if_modified_since req, res, store.cache_path

    generator = generator_for store

    case path
    when nil, '', 'index.html' then
      res.body = generator.generate_index
    when 'table_of_contents.html' then
      res.body = generator.generate_table_of_contents
    when 'js/search_index.js' then
      documentation_search store, generator, req, res
    else
      documentation_page store, generator, path, req, res
    end
  ensure
    res.content_type ||= 'text/html'
  end

  ##
  # Returns an RDoc::Store for the given +source_name+ ('ruby' or a gem name).

  def store_for source_name
    case source_name
    when 'home' then
      RDoc::Store.new RDoc::RI::Paths.home_dir, :home
    when 'ruby' then
      RDoc::Store.new RDoc::RI::Paths.system_dir, :system
    when 'site' then
      RDoc::Store.new RDoc::RI::Paths.site_dir, :site
    when /\Aextra-(\d+)\z/ then
      index = $1.to_i - 1
      ri_dir = installed_docs[index][4]
      RDoc::Store.new ri_dir, :extra
    else
      ri_dir, type = ri_paths.find do |dir, dir_type|
        next unless dir_type == :gem

        source_name == dir[%r%/([^/]*)/ri$%, 1]
      end

      raise WEBrick::HTTPStatus::NotFound,
            "Could not find gem \"#{ERB::Util.html_escape(source_name)}\". Are you sure you installed it?" unless ri_dir

      store = RDoc::Store.new ri_dir, type

      return store if File.exist? store.cache_path

      raise WEBrick::HTTPStatus::NotFound,
            "Could not find documentation for \"#{ERB::Util.html_escape(source_name)}\". Please run `gem rdoc --ri gem_name`"

    end
  end

end
PK."#[W�nYY gems/rdoc-6.4.1.1/lib/rdoc/ri.rbnu�[���# frozen_string_literal: true
require 'rdoc'

##
# Namespace for the ri command line tool's implementation.
#
# See <tt>ri --help</tt> for details.

module RDoc::RI

  ##
  # Base RI error class

  class Error < RDoc::Error; end

  autoload :Driver, 'rdoc/ri/driver'
  autoload :Paths,  'rdoc/ri/paths'
  autoload :Store,  'rdoc/ri/store'

end

PK."#[�h��}�}.gems/rdoc-6.4.1.1/lib/rdoc/rd/inline_parser.rbnu�[���# frozen_string_literal: true
#
# DO NOT MODIFY!!!!
# This file is automatically generated by Racc 1.5.2
# from Racc grammar file "".
#

require 'racc/parser.rb'

require 'strscan'

class RDoc::RD

##
# RD format parser for inline markup such as emphasis, links, footnotes, etc.

class InlineParser < Racc::Parser


# :stopdoc:

EM_OPEN = '((*'
EM_OPEN_RE = /\A#{Regexp.quote(EM_OPEN)}/
EM_CLOSE = '*))'
EM_CLOSE_RE = /\A#{Regexp.quote(EM_CLOSE)}/
CODE_OPEN = '(({'
CODE_OPEN_RE = /\A#{Regexp.quote(CODE_OPEN)}/
CODE_CLOSE = '}))'
CODE_CLOSE_RE = /\A#{Regexp.quote(CODE_CLOSE)}/
VAR_OPEN = '((|'
VAR_OPEN_RE = /\A#{Regexp.quote(VAR_OPEN)}/
VAR_CLOSE = '|))'
VAR_CLOSE_RE = /\A#{Regexp.quote(VAR_CLOSE)}/
KBD_OPEN = '((%'
KBD_OPEN_RE = /\A#{Regexp.quote(KBD_OPEN)}/
KBD_CLOSE = '%))'
KBD_CLOSE_RE = /\A#{Regexp.quote(KBD_CLOSE)}/
INDEX_OPEN = '((:'
INDEX_OPEN_RE = /\A#{Regexp.quote(INDEX_OPEN)}/
INDEX_CLOSE = ':))'
INDEX_CLOSE_RE = /\A#{Regexp.quote(INDEX_CLOSE)}/
REF_OPEN = '((<'
REF_OPEN_RE = /\A#{Regexp.quote(REF_OPEN)}/
REF_CLOSE = '>))'
REF_CLOSE_RE = /\A#{Regexp.quote(REF_CLOSE)}/
FOOTNOTE_OPEN = '((-'
FOOTNOTE_OPEN_RE = /\A#{Regexp.quote(FOOTNOTE_OPEN)}/
FOOTNOTE_CLOSE = '-))'
FOOTNOTE_CLOSE_RE = /\A#{Regexp.quote(FOOTNOTE_CLOSE)}/
VERB_OPEN = "(('"
VERB_OPEN_RE = /\A#{Regexp.quote(VERB_OPEN)}/
VERB_CLOSE = "'))"
VERB_CLOSE_RE = /\A#{Regexp.quote(VERB_CLOSE)}/

BAR = "|"
BAR_RE = /\A#{Regexp.quote(BAR)}/
QUOTE = '"'
QUOTE_RE = /\A#{Regexp.quote(QUOTE)}/
SLASH = "/"
SLASH_RE = /\A#{Regexp.quote(SLASH)}/
BACK_SLASH = "\\"
BACK_SLASH_RE = /\A#{Regexp.quote(BACK_SLASH)}/
URL = "URL:"
URL_RE = /\A#{Regexp.quote(URL)}/

other_re_mode = Regexp::EXTENDED
other_re_mode |= Regexp::MULTILINE

OTHER_RE = Regexp.new(
  "\\A.+?(?=#{Regexp.quote(EM_OPEN)}|#{Regexp.quote(EM_CLOSE)}|
              #{Regexp.quote(CODE_OPEN)}|#{Regexp.quote(CODE_CLOSE)}|
              #{Regexp.quote(VAR_OPEN)}|#{Regexp.quote(VAR_CLOSE)}|
              #{Regexp.quote(KBD_OPEN)}|#{Regexp.quote(KBD_CLOSE)}|
              #{Regexp.quote(INDEX_OPEN)}|#{Regexp.quote(INDEX_CLOSE)}|
              #{Regexp.quote(REF_OPEN)}|#{Regexp.quote(REF_CLOSE)}|
            #{Regexp.quote(FOOTNOTE_OPEN)}|#{Regexp.quote(FOOTNOTE_CLOSE)}|
              #{Regexp.quote(VERB_OPEN)}|#{Regexp.quote(VERB_CLOSE)}|
              #{Regexp.quote(BAR)}|
              #{Regexp.quote(QUOTE)}|
              #{Regexp.quote(SLASH)}|
              #{Regexp.quote(BACK_SLASH)}|
              #{Regexp.quote(URL)})", other_re_mode)

# :startdoc:

##
# Creates a new parser for inline markup in the rd format.  The +block_parser+
# is used to for footnotes and labels in the inline text.

def initialize block_parser
  @block_parser = block_parser
end

##
# Parses the +inline+ text from RD format into RDoc format.

def parse inline
  @inline = inline
  @src = StringScanner.new inline
  @pre = "".dup
  @yydebug = true
  do_parse.to_s
end

##
# Returns the next token from the inline text

def next_token
  return [false, false] if @src.eos?
#  p @src.rest if @yydebug
  if ret = @src.scan(EM_OPEN_RE)
    @pre << ret
    [:EM_OPEN, ret]
  elsif ret = @src.scan(EM_CLOSE_RE)
    @pre << ret
    [:EM_CLOSE, ret]
  elsif ret = @src.scan(CODE_OPEN_RE)
    @pre << ret
    [:CODE_OPEN, ret]
  elsif ret = @src.scan(CODE_CLOSE_RE)
    @pre << ret
    [:CODE_CLOSE, ret]
  elsif ret = @src.scan(VAR_OPEN_RE)
    @pre << ret
    [:VAR_OPEN, ret]
  elsif ret = @src.scan(VAR_CLOSE_RE)
    @pre << ret
    [:VAR_CLOSE, ret]
  elsif ret = @src.scan(KBD_OPEN_RE)
    @pre << ret
    [:KBD_OPEN, ret]
  elsif ret = @src.scan(KBD_CLOSE_RE)
    @pre << ret
    [:KBD_CLOSE, ret]
  elsif ret = @src.scan(INDEX_OPEN_RE)
    @pre << ret
    [:INDEX_OPEN, ret]
  elsif ret = @src.scan(INDEX_CLOSE_RE)
    @pre << ret
    [:INDEX_CLOSE, ret]
  elsif ret = @src.scan(REF_OPEN_RE)
    @pre << ret
    [:REF_OPEN, ret]
  elsif ret = @src.scan(REF_CLOSE_RE)
    @pre << ret
    [:REF_CLOSE, ret]
  elsif ret = @src.scan(FOOTNOTE_OPEN_RE)
    @pre << ret
    [:FOOTNOTE_OPEN, ret]
  elsif ret = @src.scan(FOOTNOTE_CLOSE_RE)
    @pre << ret
    [:FOOTNOTE_CLOSE, ret]
  elsif ret = @src.scan(VERB_OPEN_RE)
    @pre << ret
    [:VERB_OPEN, ret]
  elsif ret = @src.scan(VERB_CLOSE_RE)
    @pre << ret
    [:VERB_CLOSE, ret]
  elsif ret = @src.scan(BAR_RE)
    @pre << ret
    [:BAR, ret]
  elsif ret = @src.scan(QUOTE_RE)
    @pre << ret
    [:QUOTE, ret]
  elsif ret = @src.scan(SLASH_RE)
    @pre << ret
    [:SLASH, ret]
  elsif ret = @src.scan(BACK_SLASH_RE)
    @pre << ret
    [:BACK_SLASH, ret]
  elsif ret = @src.scan(URL_RE)
    @pre << ret
    [:URL, ret]
  elsif ret = @src.scan(OTHER_RE)
    @pre << ret
    [:OTHER, ret]
  else
    ret = @src.rest
    @pre << ret
    @src.terminate
    [:OTHER, ret]
  end
end

##
# Raises a ParseError when invalid formatting is found

def on_error(et, ev, values)
  lines_of_rest = @src.rest.lines.to_a.length
  prev_words = prev_words_on_error(ev)
  at = 4 + prev_words.length

  message = <<-MSG
RD syntax error: line #{@block_parser.line_index - lines_of_rest}:
...#{prev_words} #{(ev||'')} #{next_words_on_error()} ...
  MSG

  message << " " * at + "^" * (ev ? ev.length : 0) + "\n"
  raise ParseError, message
end

##
# Returns words before the error

def prev_words_on_error(ev)
  pre = @pre
  if ev and /#{Regexp.quote(ev)}$/ =~ pre
    pre = $`
  end
  last_line(pre)
end

##
# Returns the last line of +src+

def last_line(src)
  if n = src.rindex("\n")
    src[(n+1) .. -1]
  else
    src
  end
end
private :last_line

##
# Returns words following an error

def next_words_on_error
  if n = @src.rest.index("\n")
    @src.rest[0 .. (n-1)]
  else
    @src.rest
  end
end

##
# Creates a new RDoc::RD::Inline for the +rdoc+ markup and the raw +reference+

def inline rdoc, reference = rdoc
  RDoc::RD::Inline.new rdoc, reference
end

# :stopdoc:
##### State transition tables begin ###

racc_action_table = [
   104,   103,   102,   100,   101,    99,   115,   116,   117,    29,
   105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
    84,   118,   119,    63,    64,    65,    61,    81,    62,    76,
    78,    79,    85,    66,    67,    68,    69,    70,    71,    72,
    73,    74,    75,    77,    80,   149,    63,    64,    65,   153,
    81,    62,    76,    78,    79,    86,    66,    67,    68,    69,
    70,    71,    72,    73,    74,    75,    77,    80,   152,   104,
   103,   102,   100,   101,    99,   115,   116,   117,    87,   105,
   106,   107,   108,   109,   110,   111,   112,   113,   114,    88,
   118,   119,   104,   103,   102,   100,   101,    99,   115,   116,
   117,    89,   105,   106,   107,   108,   109,   110,   111,   112,
   113,   114,    96,   118,   119,   104,   103,   102,   100,   101,
    99,   115,   116,   117,   124,   105,   106,   107,   108,   109,
   110,   111,   112,   113,   114,   137,   118,   119,    22,    23,
    24,    25,    26,    21,    18,    19,   176,   177,    13,   148,
    14,   154,    15,   137,    16,   161,    17,   164,   173,    20,
    22,    23,    24,    25,    26,    21,    18,    19,   175,   177,
    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,   nil,
   nil,    20,    22,    23,    24,    25,    26,    21,    18,    19,
   nil,   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,
    17,   nil,   nil,    20,    22,    23,    24,    25,    26,    21,
    18,    19,   nil,   nil,    13,   nil,    14,   nil,    15,   nil,
    16,   nil,    17,   nil,   nil,    20,    22,    23,    24,    25,
    26,    21,    18,    19,   nil,   nil,    13,   nil,    14,   nil,
    15,   nil,    16,   nil,    17,   nil,   nil,    20,    22,    23,
    24,    25,    26,    21,    18,    19,   nil,   nil,    13,   nil,
    14,   nil,    15,   nil,    16,   nil,    17,   nil,   nil,    20,
    22,    23,    24,    25,    26,    21,    18,    19,   nil,   nil,
    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,    42,
   nil,    20,    54,    38,    53,    55,    56,    57,   nil,    13,
   nil,    14,   nil,    15,   nil,    16,   nil,    17,   nil,   nil,
    20,    22,    23,    24,    25,    26,    21,    18,    19,   nil,
   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,
   nil,   nil,    20,    63,    64,    65,    61,    81,    62,    76,
    78,    79,   nil,    66,    67,    68,    69,    70,    71,    72,
    73,    74,    75,    77,    80,   122,   nil,   nil,    54,   nil,
    53,    55,    56,    57,   nil,    13,   nil,    14,   nil,    15,
   nil,    16,   nil,    17,   145,   nil,    20,    54,   133,    53,
    55,    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,
    16,   nil,    17,   145,   nil,    20,    54,   133,    53,    55,
    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,
   nil,    17,   145,   nil,    20,    54,   133,    53,    55,    56,
    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,
    17,   145,   nil,    20,    54,   133,    53,    55,    56,    57,
   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,    17,
   nil,   nil,    20,   135,   136,    54,   133,    53,    55,    56,
    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,   nil,
    17,   nil,   nil,    20,   135,   136,    54,   133,    53,    55,
    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,    16,
   nil,    17,   nil,   nil,    20,   135,   136,    54,   133,    53,
    55,    56,    57,   nil,    13,   nil,    14,   nil,    15,   nil,
    16,   nil,    17,    95,   nil,    20,    54,    91,    53,    55,
    56,    57,   145,   nil,   nil,    54,   133,    53,    55,    56,
    57,   158,   nil,   nil,    54,   nil,    53,    55,    56,    57,
   165,   135,   136,    54,   133,    53,    55,    56,    57,   145,
   nil,   nil,    54,   133,    53,    55,    56,    57,   172,   135,
   136,    54,   133,    53,    55,    56,    57,   174,   135,   136,
    54,   133,    53,    55,    56,    57,   178,   135,   136,    54,
   133,    53,    55,    56,    57,   135,   136,    54,   133,    53,
    55,    56,    57,   135,   136,    54,   133,    53,    55,    56,
    57,   135,   136,    54,   133,    53,    55,    56,    57,    22,
    23,    24,    25,    26,    21 ]

racc_action_check = [
    38,    38,    38,    38,    38,    38,    38,    38,    38,     1,
    38,    38,    38,    38,    38,    38,    38,    38,    38,    38,
    29,    38,    38,    59,    59,    59,    59,    59,    59,    59,
    59,    59,    31,    59,    59,    59,    59,    59,    59,    59,
    59,    59,    59,    59,    59,    59,    61,    61,    61,    61,
    61,    61,    61,    61,    61,    32,    61,    61,    61,    61,
    61,    61,    61,    61,    61,    61,    61,    61,    61,    91,
    91,    91,    91,    91,    91,    91,    91,    91,    33,    91,
    91,    91,    91,    91,    91,    91,    91,    91,    91,    34,
    91,    91,    97,    97,    97,    97,    97,    97,    97,    97,
    97,    35,    97,    97,    97,    97,    97,    97,    97,    97,
    97,    97,    37,    97,    97,   155,   155,   155,   155,   155,
   155,   155,   155,   155,    41,   155,   155,   155,   155,   155,
   155,   155,   155,   155,   155,    43,   155,   155,     0,     0,
     0,     0,     0,     0,     0,     0,   165,   165,     0,    58,
     0,    90,     0,    94,     0,   100,     0,   125,   162,     0,
     2,     2,     2,     2,     2,     2,     2,     2,   164,   172,
     2,   nil,     2,   nil,     2,   nil,     2,   nil,     2,   nil,
   nil,     2,    13,    13,    13,    13,    13,    13,    13,    13,
   nil,   nil,    13,   nil,    13,   nil,    13,   nil,    13,   nil,
    13,   nil,   nil,    13,    14,    14,    14,    14,    14,    14,
    14,    14,   nil,   nil,    14,   nil,    14,   nil,    14,   nil,
    14,   nil,    14,   nil,   nil,    14,    15,    15,    15,    15,
    15,    15,    15,    15,   nil,   nil,    15,   nil,    15,   nil,
    15,   nil,    15,   nil,    15,   nil,   nil,    15,    16,    16,
    16,    16,    16,    16,    16,    16,   nil,   nil,    16,   nil,
    16,   nil,    16,   nil,    16,   nil,    16,   nil,   nil,    16,
    17,    17,    17,    17,    17,    17,    17,    17,   nil,   nil,
    17,   nil,    17,   nil,    17,   nil,    17,   nil,    17,    18,
   nil,    17,    18,    18,    18,    18,    18,    18,   nil,    18,
   nil,    18,   nil,    18,   nil,    18,   nil,    18,   nil,   nil,
    18,    19,    19,    19,    19,    19,    19,    19,    19,   nil,
   nil,    19,   nil,    19,   nil,    19,   nil,    19,   nil,    19,
   nil,   nil,    19,    20,    20,    20,    20,    20,    20,    20,
    20,    20,   nil,    20,    20,    20,    20,    20,    20,    20,
    20,    20,    20,    20,    20,    39,   nil,   nil,    39,   nil,
    39,    39,    39,    39,   nil,    39,   nil,    39,   nil,    39,
   nil,    39,   nil,    39,    44,   nil,    39,    44,    44,    44,
    44,    44,    44,   nil,    44,   nil,    44,   nil,    44,   nil,
    44,   nil,    44,    45,   nil,    44,    45,    45,    45,    45,
    45,    45,   nil,    45,   nil,    45,   nil,    45,   nil,    45,
   nil,    45,   138,   nil,    45,   138,   138,   138,   138,   138,
   138,   nil,   138,   nil,   138,   nil,   138,   nil,   138,   nil,
   138,   146,   nil,   138,   146,   146,   146,   146,   146,   146,
   nil,   146,   nil,   146,   nil,   146,   nil,   146,   nil,   146,
   nil,   nil,   146,    42,    42,    42,    42,    42,    42,    42,
    42,   nil,    42,   nil,    42,   nil,    42,   nil,    42,   nil,
    42,   nil,   nil,    42,   122,   122,   122,   122,   122,   122,
   122,   122,   nil,   122,   nil,   122,   nil,   122,   nil,   122,
   nil,   122,   nil,   nil,   122,   127,   127,   127,   127,   127,
   127,   127,   127,   nil,   127,   nil,   127,   nil,   127,   nil,
   127,   nil,   127,    36,   nil,   127,    36,    36,    36,    36,
    36,    36,    52,   nil,   nil,    52,    52,    52,    52,    52,
    52,    92,   nil,   nil,    92,   nil,    92,    92,    92,    92,
   126,   126,   126,   126,   126,   126,   126,   126,   126,   142,
   nil,   nil,   142,   142,   142,   142,   142,   142,   159,   159,
   159,   159,   159,   159,   159,   159,   159,   163,   163,   163,
   163,   163,   163,   163,   163,   163,   171,   171,   171,   171,
   171,   171,   171,   171,   171,    95,    95,    95,    95,    95,
    95,    95,    95,   158,   158,   158,   158,   158,   158,   158,
   158,   168,   168,   168,   168,   168,   168,   168,   168,    27,
    27,    27,    27,    27,    27 ]

racc_action_pointer = [
   135,     9,   157,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   179,   201,   223,   245,   267,   286,   308,
   330,   nil,   nil,   nil,   nil,   nil,   nil,   606,   nil,    20,
   nil,    18,    39,    60,    69,    79,   510,    89,    -3,   352,
   nil,   120,   449,   130,   371,   390,   nil,   nil,   nil,   nil,
   nil,   nil,   519,   nil,   nil,   nil,   nil,   nil,   138,    20,
   nil,    43,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   128,    66,   528,   nil,   148,   581,   nil,    89,   nil,   nil,
   149,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   470,   nil,   nil,   154,   537,   491,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   409,   nil,
   nil,   nil,   546,   nil,   nil,   nil,   428,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   nil,   112,   nil,   nil,   589,   555,
   nil,   nil,   155,   564,   164,   142,   nil,   nil,   597,   nil,
   nil,   573,   164,   nil,   nil,   nil,   nil,   nil,   nil ]

racc_action_default = [
  -138,  -138,    -1,    -3,    -4,    -5,    -6,    -7,    -8,    -9,
   -10,   -11,   -12,  -138,  -138,  -138,  -138,  -138,  -138,  -138,
  -138,  -103,  -104,  -105,  -106,  -107,  -108,  -111,  -110,  -138,
    -2,  -138,  -138,  -138,  -138,  -138,  -138,  -138,  -138,   -27,
   -26,   -35,  -138,   -58,   -41,   -40,   -47,   -48,   -49,   -50,
   -51,   -52,   -63,   -66,   -67,   -68,   -69,   -70,  -138,  -138,
  -112,  -138,  -116,  -117,  -118,  -119,  -120,  -121,  -122,  -123,
  -124,  -125,  -126,  -127,  -128,  -129,  -130,  -131,  -132,  -133,
  -134,  -135,  -137,  -109,   179,   -13,   -14,   -15,   -16,   -17,
  -138,  -138,   -23,   -22,   -33,  -138,   -19,   -24,   -79,   -80,
  -138,   -82,   -83,   -84,   -85,   -86,   -87,   -88,   -89,   -90,
   -91,   -92,   -93,   -94,   -95,   -96,   -97,   -98,   -99,  -100,
   -25,   -35,  -138,   -58,   -28,  -138,   -59,   -42,   -46,   -55,
   -56,   -65,   -71,   -72,   -75,   -76,   -77,   -31,   -38,   -44,
   -53,   -54,   -57,   -61,   -73,   -74,   -39,   -62,  -101,  -102,
  -136,  -113,  -114,  -115,   -18,   -20,   -21,   -33,  -138,  -138,
   -78,   -81,  -138,   -59,   -36,   -37,   -64,   -45,   -59,   -43,
   -60,  -138,   -34,   -36,   -37,   -29,   -30,   -32,   -34 ]

racc_goto_table = [
   126,    44,   125,    43,   144,   144,   160,    93,    97,    52,
   166,    82,   144,    40,    41,    39,   138,   146,   169,    30,
    36,    94,    44,     1,   123,   129,   169,    52,    90,    37,
    52,   167,   147,    92,   120,   121,    31,    32,    33,    34,
    35,   170,    58,   166,    59,    83,   170,   166,   151,   nil,
   150,   nil,   166,   159,     4,   166,     4,   nil,   nil,   nil,
   nil,   155,   nil,   156,   160,   nil,   nil,     4,     4,     4,
     4,     4,   nil,     4,     5,   nil,     5,   157,   nil,   nil,
   163,   nil,   162,    52,   nil,   168,   nil,     5,     5,     5,
     5,     5,   nil,     5,   nil,   nil,   nil,   nil,   144,   nil,
   nil,   nil,   144,   nil,   nil,   129,   144,   144,   nil,     6,
   129,     6,   nil,   nil,   nil,   nil,   171,     7,   nil,     7,
   nil,   nil,     6,     6,     6,     6,     6,     8,     6,     8,
     7,     7,     7,     7,     7,    11,     7,    11,   nil,   nil,
     8,     8,     8,     8,     8,   nil,     8,   nil,    11,    11,
    11,    11,    11,   nil,    11 ]

racc_goto_check = [
    22,    24,    21,    23,    36,    36,    37,    18,    16,    34,
    35,    41,    36,    19,    20,    17,    25,    25,    28,     3,
    13,    23,    24,     1,    23,    24,    28,    34,    14,    15,
    34,    29,    32,    17,    19,    20,     1,     1,     1,     1,
     1,    33,     1,    35,    38,    39,    33,    35,    42,   nil,
    41,   nil,    35,    22,     4,    35,     4,   nil,   nil,   nil,
   nil,    16,   nil,    18,    37,   nil,   nil,     4,     4,     4,
     4,     4,   nil,     4,     5,   nil,     5,    23,   nil,   nil,
    22,   nil,    21,    34,   nil,    22,   nil,     5,     5,     5,
     5,     5,   nil,     5,   nil,   nil,   nil,   nil,    36,   nil,
   nil,   nil,    36,   nil,   nil,    24,    36,    36,   nil,     6,
    24,     6,   nil,   nil,   nil,   nil,    22,     7,   nil,     7,
   nil,   nil,     6,     6,     6,     6,     6,     8,     6,     8,
     7,     7,     7,     7,     7,    11,     7,    11,   nil,   nil,
     8,     8,     8,     8,     8,   nil,     8,   nil,    11,    11,
    11,    11,    11,   nil,    11 ]

racc_goto_pointer = [
   nil,    23,   nil,    17,    54,    74,   109,   117,   127,   nil,
   nil,   135,   nil,     2,    -8,    11,   -30,    -3,   -29,    -5,
    -4,   -40,   -42,   -15,   -17,   -28,   nil,   nil,  -120,   -96,
   nil,   nil,   -20,  -101,    -9,  -116,   -40,   -91,    24,    18,
   nil,    -9,   -13 ]

racc_goto_default = [
   nil,   nil,     2,     3,    46,    47,    48,    49,    50,     9,
    10,    51,    12,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,   nil,   140,   nil,    45,   127,   139,   128,
   141,   130,   142,   143,   132,   131,   134,    98,   nil,    28,
    27,   nil,    60 ]

racc_reduce_table = [
  0, 0, :racc_error,
  1, 27, :_reduce_none,
  2, 28, :_reduce_2,
  1, 28, :_reduce_3,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  1, 29, :_reduce_none,
  3, 30, :_reduce_13,
  3, 31, :_reduce_14,
  3, 32, :_reduce_15,
  3, 33, :_reduce_16,
  3, 34, :_reduce_17,
  4, 35, :_reduce_18,
  3, 35, :_reduce_19,
  2, 40, :_reduce_20,
  2, 40, :_reduce_21,
  1, 40, :_reduce_22,
  1, 40, :_reduce_23,
  2, 41, :_reduce_24,
  2, 41, :_reduce_25,
  1, 41, :_reduce_26,
  1, 41, :_reduce_27,
  2, 39, :_reduce_none,
  4, 39, :_reduce_29,
  4, 39, :_reduce_30,
  2, 43, :_reduce_31,
  4, 43, :_reduce_32,
  1, 44, :_reduce_33,
  3, 44, :_reduce_34,
  1, 45, :_reduce_none,
  3, 45, :_reduce_36,
  3, 45, :_reduce_37,
  2, 46, :_reduce_38,
  2, 46, :_reduce_39,
  1, 46, :_reduce_40,
  1, 46, :_reduce_41,
  1, 47, :_reduce_none,
  2, 51, :_reduce_43,
  1, 51, :_reduce_44,
  2, 53, :_reduce_45,
  1, 53, :_reduce_46,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 50, :_reduce_none,
  1, 54, :_reduce_none,
  1, 54, :_reduce_none,
  1, 55, :_reduce_none,
  1, 55, :_reduce_none,
  1, 56, :_reduce_57,
  1, 52, :_reduce_58,
  1, 57, :_reduce_59,
  2, 58, :_reduce_60,
  1, 58, :_reduce_none,
  2, 49, :_reduce_62,
  1, 49, :_reduce_none,
  2, 48, :_reduce_64,
  1, 48, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 60, :_reduce_none,
  1, 62, :_reduce_none,
  1, 62, :_reduce_none,
  1, 59, :_reduce_none,
  1, 59, :_reduce_none,
  1, 61, :_reduce_none,
  1, 61, :_reduce_none,
  1, 61, :_reduce_none,
  2, 42, :_reduce_78,
  1, 42, :_reduce_none,
  1, 63, :_reduce_none,
  2, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  1, 63, :_reduce_none,
  3, 36, :_reduce_101,
  3, 37, :_reduce_102,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  1, 65, :_reduce_none,
  2, 66, :_reduce_109,
  1, 66, :_reduce_none,
  1, 38, :_reduce_111,
  1, 67, :_reduce_none,
  2, 67, :_reduce_113,
  2, 67, :_reduce_114,
  2, 67, :_reduce_115,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  1, 68, :_reduce_none,
  2, 64, :_reduce_136,
  1, 64, :_reduce_none ]

racc_reduce_n = 138

racc_shift_n = 179

racc_token_table = {
  false => 0,
  :error => 1,
  :EX_LOW => 2,
  :QUOTE => 3,
  :BAR => 4,
  :SLASH => 5,
  :BACK_SLASH => 6,
  :URL => 7,
  :OTHER => 8,
  :REF_OPEN => 9,
  :FOOTNOTE_OPEN => 10,
  :FOOTNOTE_CLOSE => 11,
  :EX_HIGH => 12,
  :EM_OPEN => 13,
  :EM_CLOSE => 14,
  :CODE_OPEN => 15,
  :CODE_CLOSE => 16,
  :VAR_OPEN => 17,
  :VAR_CLOSE => 18,
  :KBD_OPEN => 19,
  :KBD_CLOSE => 20,
  :INDEX_OPEN => 21,
  :INDEX_CLOSE => 22,
  :REF_CLOSE => 23,
  :VERB_OPEN => 24,
  :VERB_CLOSE => 25 }

racc_nt_base = 26

racc_use_result_var = true

Racc_arg = [
  racc_action_table,
  racc_action_check,
  racc_action_default,
  racc_action_pointer,
  racc_goto_table,
  racc_goto_check,
  racc_goto_default,
  racc_goto_pointer,
  racc_nt_base,
  racc_reduce_table,
  racc_token_table,
  racc_shift_n,
  racc_reduce_n,
  racc_use_result_var ]

Racc_token_to_s_table = [
  "$end",
  "error",
  "EX_LOW",
  "QUOTE",
  "BAR",
  "SLASH",
  "BACK_SLASH",
  "URL",
  "OTHER",
  "REF_OPEN",
  "FOOTNOTE_OPEN",
  "FOOTNOTE_CLOSE",
  "EX_HIGH",
  "EM_OPEN",
  "EM_CLOSE",
  "CODE_OPEN",
  "CODE_CLOSE",
  "VAR_OPEN",
  "VAR_CLOSE",
  "KBD_OPEN",
  "KBD_CLOSE",
  "INDEX_OPEN",
  "INDEX_CLOSE",
  "REF_CLOSE",
  "VERB_OPEN",
  "VERB_CLOSE",
  "$start",
  "content",
  "elements",
  "element",
  "emphasis",
  "code",
  "var",
  "keyboard",
  "index",
  "reference",
  "footnote",
  "verb",
  "normal_str_ele",
  "substitute",
  "ref_label",
  "ref_label2",
  "ref_url_strings",
  "filename",
  "element_label",
  "element_label2",
  "ref_subst_content",
  "ref_subst_content_q",
  "ref_subst_strings_q",
  "ref_subst_strings_first",
  "ref_subst_ele2",
  "ref_subst_eles",
  "ref_subst_str_ele_first",
  "ref_subst_eles_q",
  "ref_subst_ele",
  "ref_subst_ele_q",
  "ref_subst_str_ele",
  "ref_subst_str_ele_q",
  "ref_subst_strings",
  "ref_subst_string3",
  "ref_subst_string",
  "ref_subst_string_q",
  "ref_subst_string2",
  "ref_url_string",
  "verb_strings",
  "normal_string",
  "normal_strings",
  "verb_string",
  "verb_normal_string" ]

Racc_debug_parser = false

##### State transition tables end #####

# reduce 0 omitted

# reduce 1 omitted

def _reduce_2(val, _values, result)
 result.append val[1]
    result
end

def _reduce_3(val, _values, result)
 result = val[0]
    result
end

# reduce 4 omitted

# reduce 5 omitted

# reduce 6 omitted

# reduce 7 omitted

# reduce 8 omitted

# reduce 9 omitted

# reduce 10 omitted

# reduce 11 omitted

# reduce 12 omitted

def _reduce_13(val, _values, result)
      content = val[1]
      result = inline "<em>#{content}</em>", content

    result
end

def _reduce_14(val, _values, result)
      content = val[1]
      result = inline "<code>#{content}</code>", content

    result
end

def _reduce_15(val, _values, result)
      content = val[1]
      result = inline "+#{content}+", content

    result
end

def _reduce_16(val, _values, result)
      content = val[1]
      result = inline "<tt>#{content}</tt>", content

    result
end

def _reduce_17(val, _values, result)
      label = val[1]
      @block_parser.add_label label.reference
      result = "<span id=\"label-#{label}\">#{label}</span>"

    result
end

def _reduce_18(val, _values, result)
      result = "{#{val[1]}}[#{val[2].join}]"

    result
end

def _reduce_19(val, _values, result)
      scheme, inline = val[1]

      result = "{#{inline}}[#{scheme}#{inline.reference}]"

    result
end

def _reduce_20(val, _values, result)
      result = [nil, inline(val[1])]

    result
end

def _reduce_21(val, _values, result)
      result = [
        'rdoc-label:',
        inline("#{val[0].reference}/#{val[1].reference}")
      ]

    result
end

def _reduce_22(val, _values, result)
      result = ['rdoc-label:', val[0].reference]

    result
end

def _reduce_23(val, _values, result)
      result = ['rdoc-label:', "#{val[0].reference}/"]

    result
end

def _reduce_24(val, _values, result)
      result = [nil, inline(val[1])]

    result
end

def _reduce_25(val, _values, result)
      result = [
        'rdoc-label:',
        inline("#{val[0].reference}/#{val[1].reference}")
      ]

    result
end

def _reduce_26(val, _values, result)
      result = ['rdoc-label:', val[0]]

    result
end

def _reduce_27(val, _values, result)
      ref = val[0].reference
      result = ['rdoc-label:', inline(ref, "#{ref}/")]

    result
end

# reduce 28 omitted

def _reduce_29(val, _values, result)
 result = val[1]
    result
end

def _reduce_30(val, _values, result)
 result = val[1]
    result
end

def _reduce_31(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_32(val, _values, result)
      result = inline "\"#{val[1]}\""

    result
end

def _reduce_33(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_34(val, _values, result)
      result = inline "\"#{val[1]}\""

    result
end

# reduce 35 omitted

def _reduce_36(val, _values, result)
 result = val[1]
    result
end

def _reduce_37(val, _values, result)
 result = inline val[1]
    result
end

def _reduce_38(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_39(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_40(val, _values, result)
      result = val[0]

    result
end

def _reduce_41(val, _values, result)
      result = inline val[0]

    result
end

# reduce 42 omitted

def _reduce_43(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_44(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_45(val, _values, result)
      result = val[0].append val[1]

    result
end

def _reduce_46(val, _values, result)
      result = val[0]

    result
end

# reduce 47 omitted

# reduce 48 omitted

# reduce 49 omitted

# reduce 50 omitted

# reduce 51 omitted

# reduce 52 omitted

# reduce 53 omitted

# reduce 54 omitted

# reduce 55 omitted

# reduce 56 omitted

def _reduce_57(val, _values, result)
      result = val[0]

    result
end

def _reduce_58(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_59(val, _values, result)
      result = inline val[0]

    result
end

def _reduce_60(val, _values, result)
 result << val[1]
    result
end

# reduce 61 omitted

def _reduce_62(val, _values, result)
      result << val[1]

    result
end

# reduce 63 omitted

def _reduce_64(val, _values, result)
      result << val[1]

    result
end

# reduce 65 omitted

# reduce 66 omitted

# reduce 67 omitted

# reduce 68 omitted

# reduce 69 omitted

# reduce 70 omitted

# reduce 71 omitted

# reduce 72 omitted

# reduce 73 omitted

# reduce 74 omitted

# reduce 75 omitted

# reduce 76 omitted

# reduce 77 omitted

def _reduce_78(val, _values, result)
 result << val[1]
    result
end

# reduce 79 omitted

# reduce 80 omitted

# reduce 81 omitted

# reduce 82 omitted

# reduce 83 omitted

# reduce 84 omitted

# reduce 85 omitted

# reduce 86 omitted

# reduce 87 omitted

# reduce 88 omitted

# reduce 89 omitted

# reduce 90 omitted

# reduce 91 omitted

# reduce 92 omitted

# reduce 93 omitted

# reduce 94 omitted

# reduce 95 omitted

# reduce 96 omitted

# reduce 97 omitted

# reduce 98 omitted

# reduce 99 omitted

# reduce 100 omitted

def _reduce_101(val, _values, result)
      index = @block_parser.add_footnote val[1].rdoc
      result = "{*#{index}}[rdoc-label:foottext-#{index}:footmark-#{index}]"

    result
end

def _reduce_102(val, _values, result)
      result = inline "<tt>#{val[1]}</tt>", val[1]

    result
end

# reduce 103 omitted

# reduce 104 omitted

# reduce 105 omitted

# reduce 106 omitted

# reduce 107 omitted

# reduce 108 omitted

def _reduce_109(val, _values, result)
 result << val[1]
    result
end

# reduce 110 omitted

def _reduce_111(val, _values, result)
      result = inline val[0]

    result
end

# reduce 112 omitted

def _reduce_113(val, _values, result)
 result = val[1]
    result
end

def _reduce_114(val, _values, result)
 result = val[1]
    result
end

def _reduce_115(val, _values, result)
 result = val[1]
    result
end

# reduce 116 omitted

# reduce 117 omitted

# reduce 118 omitted

# reduce 119 omitted

# reduce 120 omitted

# reduce 121 omitted

# reduce 122 omitted

# reduce 123 omitted

# reduce 124 omitted

# reduce 125 omitted

# reduce 126 omitted

# reduce 127 omitted

# reduce 128 omitted

# reduce 129 omitted

# reduce 130 omitted

# reduce 131 omitted

# reduce 132 omitted

# reduce 133 omitted

# reduce 134 omitted

# reduce 135 omitted

def _reduce_136(val, _values, result)
 result << val[1]
    result
end

# reduce 137 omitted

def _reduce_none(val, _values, result)
  val[0]
end

end   # class InlineParser

end
PK."#[�]��'gems/rdoc-6.4.1.1/lib/rdoc/rd/inline.rbnu�[���# frozen_string_literal: true
##
# Inline keeps track of markup and labels to create proper links.

class RDoc::RD::Inline

  ##
  # The text of the reference

  attr_reader :reference

  ##
  # The markup of this reference in RDoc format

  attr_reader :rdoc

  ##
  # Creates a new Inline for +rdoc+ and +reference+.
  #
  # +rdoc+ may be another Inline or a String.  If +reference+ is not given it
  # will use the text from +rdoc+.

  def self.new rdoc, reference = rdoc
    if self === rdoc and reference.equal? rdoc then
      rdoc
    else
      super
    end
  end

  ##
  # Initializes the Inline with +rdoc+ and +inline+

  def initialize rdoc, reference # :not-new:
    @reference = reference.equal?(rdoc) ? reference.dup : reference

    # unpack
    @reference = @reference.reference if self.class === @reference
    @rdoc      = rdoc
  end

  def == other # :nodoc:
    self.class === other and
      @reference == other.reference and @rdoc == other.rdoc
  end

  ##
  # Appends +more+ to this inline.  +more+ may be a String or another Inline.

  def append more
    case more
    when String then
      @reference += more
      @rdoc      += more
    when RDoc::RD::Inline then
      @reference += more.reference
      @rdoc      += more.rdoc
    else
      raise "unknown thingy #{more}"
    end

    self
  end

  def inspect # :nodoc:
    "(inline: #{self})"
  end

  alias to_s rdoc # :nodoc:

end

PK."#[���X�X-gems/rdoc-6.4.1.1/lib/rdoc/rd/block_parser.rbnu�[���# frozen_string_literal: true
#
# DO NOT MODIFY!!!!
# This file is automatically generated by Racc 1.5.2
# from Racc grammar file "".
#

require 'racc/parser.rb'

class RDoc::RD

##
# RD format parser for headings, paragraphs, lists, verbatim sections that
# exist as blocks.

class BlockParser < Racc::Parser


# :stopdoc:

TMPFILE = ["rdtmp", $$, 0]

MARK_TO_LEVEL = {
  '='    => 1,
  '=='   => 2,
  '==='  => 3,
  '====' => 4,
  '+'    => 5,
  '++'   => 6,
}

# :startdoc:

##
# Footnotes for this document

attr_reader :footnotes

##
# Labels for items in this document

attr_reader :labels

##
# Path to find included files in

attr_accessor :include_path

##
# Creates a new RDoc::RD::BlockParser.  Use #parse to parse an rd-format
# document.

def initialize
  @inline_parser = RDoc::RD::InlineParser.new self
  @include_path = []

  # for testing
  @footnotes = []
  @labels    = {}
end

##
# Parses +src+ and returns an RDoc::Markup::Document.

def parse src
  @src = src
  @src.push false

  @footnotes = []
  @labels    = {}

  # @i: index(line no.) of src
  @i = 0

  # stack for current indentation
  @indent_stack = []

  # how indented.
  @current_indent = @indent_stack.join("")

  # RDoc::RD::BlockParser for tmp src
  @subparser = nil

  # which part is in now
  @in_part = nil
  @part_content = []

  @in_verbatim = false

  @yydebug = true

  document = do_parse

  unless @footnotes.empty? then
    blankline = document.parts.pop

    document.parts << RDoc::Markup::Rule.new(1)
    document.parts.concat @footnotes

    document.parts.push blankline
  end

  document
end

##
# Returns the next token from the document

def next_token # :nodoc:
  # preprocessing
  # if it is not in RD part
  # => method
  while @in_part != "rd"
    line = @src[@i]
    @i += 1 # next line

    case line
    # src end
    when false
      return [false, false]
    # RD part begin
    when /^=begin\s*(?:\bRD\b.*)?\s*$/
      if @in_part # if in non-RD part
        @part_content.push(line)
      else
        @in_part = "rd"
        return [:WHITELINE, "=begin\n"] # <= for textblockand
      end
    # non-RD part begin
    when /^=begin\s+(\w+)/
      part = $1
      if @in_part # if in non-RD part
        @part_content.push(line)
      else
        @in_part = part if @tree.filter[part] # if filter exists
#  p "BEGIN_PART: #{@in_part}" # DEBUG
      end
    # non-RD part end
    when /^=end/
      if @in_part # if in non-RD part
#  p "END_PART: #{@in_part}" # DEBUG
        # make Part-in object
        part = RDoc::RD::Part.new(@part_content.join(""), @tree, "r")
        @part_content.clear
        # call filter, part_out is output(Part object)
        part_out = @tree.filter[@in_part].call(part)

        if @tree.filter[@in_part].mode == :rd # if output is RD formatted
          subtree = parse_subtree(part_out.to_a)
        else # if output is target formatted
          basename = TMPFILE.join('.')
          TMPFILE[-1] += 1
          tmpfile = open(@tree.tmp_dir + "/" + basename + ".#{@in_part}", "w")
          tmpfile.print(part_out)
          tmpfile.close
          subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"])
        end
        @in_part = nil
        return [:SUBTREE, subtree]
      end
    else
      if @in_part # if in non-RD part
        @part_content.push(line)
      end
    end
  end

  @current_indent = @indent_stack.join("")
  line = @src[@i]
  case line
  when false
    if_current_indent_equal("") do
      [false, false]
    end
  when /^=end/
    if_current_indent_equal("") do
      @in_part = nil
      [:WHITELINE, "=end"] # MUST CHANGE??
    end
  when /^\s*$/
    @i += 1 # next line
    return [:WHITELINE, ':WHITELINE']
  when /^\#/  # comment line
    @i += 1 # next line
    self.next_token()
  when /^(={1,4})(?!=)\s*(?=\S)/, /^(\+{1,2})(?!\+)\s*(?=\S)/
    rest = $'                    # '
    rest.strip!
    mark = $1
    if_current_indent_equal("") do
      return [:HEADLINE, [MARK_TO_LEVEL[mark], rest]]
    end
  when /^<<<\s*(\S+)/
    file = $1
    if_current_indent_equal("") do
      suffix = file[-3 .. -1]
      if suffix == ".rd" or suffix == ".rb"
        subtree = parse_subtree(get_included(file))
        [:SUBTREE, subtree]
      else
        [:INCLUDE, file]
      end
    end
  when /^(\s*)\*(\s*)/
    rest = $'                   # '
    newIndent = $2
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s" + newIndent)
        [:ITEMLISTLINE, rest]
      end
    end
  when /^(\s*)(\(\d+\))(\s*)/
    rest = $'                     # '
    mark = $2
    newIndent = $3
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s" * mark.size + newIndent)
        [:ENUMLISTLINE, rest]
      end
    end
  when /^(\s*):(\s*)/
    rest = $'                    # '
    newIndent = $2
    if_current_indent_equal($1) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s#{$2}")
        [:DESCLISTLINE, rest]
      end
    end
  when /^(\s*)---(?!-|\s*$)/
    indent = $1
    rest = $'
    /\s*/ === rest
    term = $'
    new_indent = $&
    if_current_indent_equal(indent) do
      if @in_verbatim
        [:STRINGLINE, line]
      else
        @indent_stack.push("\s\s\s" + new_indent)
        [:METHODLISTLINE, term]
      end
    end
  when /^(\s*)/
    if_current_indent_equal($1) do
      [:STRINGLINE, line]
    end
  else
    raise "[BUG] parsing error may occurred."
  end
end

##
# Yields to the given block if +indent+ matches the current indent, otherwise
# an indentation token is processed.

def if_current_indent_equal(indent)
  indent = indent.sub(/\t/, "\s" * 8)
  if @current_indent == indent
    @i += 1 # next line
    yield
  elsif indent.index(@current_indent) == 0
    @indent_stack.push(indent[@current_indent.size .. -1])
    [:INDENT, ":INDENT"]
  else
    @indent_stack.pop
    [:DEDENT, ":DEDENT"]
  end
end
private :if_current_indent_equal

##
# Cuts off excess whitespace in +src+

def cut_off(src)
  ret = []
  whiteline_buf = []

  line = src.shift
  /^\s*/ =~ line

  indent = Regexp.quote($&)
  ret.push($')

  while line = src.shift
    if /^(\s*)$/ =~ line
      whiteline_buf.push(line)
    elsif /^#{indent}/ =~ line
      unless whiteline_buf.empty?
        ret.concat(whiteline_buf)
        whiteline_buf.clear
      end
      ret.push($')
    else
      raise "[BUG]: probably Parser Error while cutting off.\n"
    end
  end
  ret
end
private :cut_off

def set_term_to_element(parent, term)
#  parent.set_term_under_document_struct(term, @tree.document_struct)
  parent.set_term_without_document_struct(term)
end
private :set_term_to_element

##
# Raises a ParseError when invalid formatting is found

def on_error(et, ev, _values)
  prv, cur, nxt = format_line_num(@i, @i+1, @i+2)

  raise ParseError, <<Msg

RD syntax error: line #{@i+1}:
  #{prv}  |#{@src[@i-1].chomp}
  #{cur}=>|#{@src[@i].chomp}
  #{nxt}  |#{@src[@i+1].chomp}

Msg
end

##
# Current line number

def line_index
  @i
end

##
# Parses subtree +src+

def parse_subtree src
  @subparser ||= RDoc::RD::BlockParser.new

  @subparser.parse src
end
private :parse_subtree

##
# Retrieves the content for +file+ from the include_path

def get_included(file)
  included = []

  @include_path.each do |dir|
    file_name = File.join dir, file

    if File.exist? file_name then
      included = IO.readlines file_name
      break
    end
  end

  included
end
private :get_included

##
# Formats line numbers +line_numbers+ prettily

def format_line_num(*line_numbers)
  width = line_numbers.collect{|i| i.to_s.length }.max
  line_numbers.collect{|i| sprintf("%#{width}d", i) }
end
private :format_line_num

##
# Retrieves the content of +values+ as a single String

def content values
 values.map { |value| value.content }.join
end

##
# Creates a paragraph for +value+

def paragraph value
  content = cut_off(value).join(' ').rstrip
  contents = @inline_parser.parse content

  RDoc::Markup::Paragraph.new(*contents)
end

##
# Adds footnote +content+ to the document

def add_footnote content
  index = @footnotes.length / 2 + 1

  footmark_link = "{^#{index}}[rdoc-label:footmark-#{index}:foottext-#{index}]"

  @footnotes << RDoc::Markup::Paragraph.new(footmark_link, ' ', *content)
  @footnotes << RDoc::Markup::BlankLine.new

  index
end

##
# Adds label +label+ to the document

def add_label label
  @labels[label] = true

  label
end

# :stopdoc:

##### State transition tables begin ###

racc_action_table = [
    34,    35,    30,    33,    40,    34,    35,    30,    33,    40,
    65,    34,    35,    30,    33,    14,    73,    36,    38,    34,
    15,    88,    34,    35,    30,    33,    14,     9,    10,    11,
    12,    15,    34,    35,    30,    33,    14,     9,    10,    11,
    12,    15,    34,    35,    30,    33,    35,    47,    30,    54,
    33,    15,    34,    35,    30,    33,    54,    47,    14,    14,
    59,    15,    34,    35,    30,    33,    14,    73,    67,    76,
    77,    15,    34,    35,    30,    33,    14,    73,    54,    81,
    38,    15,    34,    35,    30,    33,    14,    73,    38,    40,
    83,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,   nil,   nil,
   nil,    15,    34,    35,    30,    33,    14,    73,    61,    63,
   nil,    15,    14,    62,    60,    61,    63,    79,    61,    63,
    62,    87,   nil,    62,    34,    35,    30,    33 ]

racc_action_check = [
    41,    41,    41,    41,    41,    15,    15,    15,    15,    15,
    41,    86,    86,    86,    86,    86,    86,     1,    13,    22,
    86,    86,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     2,     2,     2,     2,     2,     2,     2,     2,
     2,     2,    24,    24,    24,    24,    25,    24,    28,    30,
    31,    24,    27,    27,    27,    27,    33,    27,    34,    35,
    36,    27,    45,    45,    45,    45,    45,    45,    44,    49,
    51,    45,    46,    46,    46,    46,    46,    46,    54,    56,
    57,    46,    47,    47,    47,    47,    47,    47,    58,    62,
    66,    47,    68,    68,    68,    68,    68,    68,   nil,   nil,
   nil,    68,    74,    74,    74,    74,    74,    74,   nil,   nil,
   nil,    74,    75,    75,    75,    75,    75,    75,   nil,   nil,
   nil,    75,    78,    78,    78,    78,    78,    78,   nil,   nil,
   nil,    78,    79,    79,    79,    79,    79,    79,   nil,   nil,
   nil,    79,    85,    85,    85,    85,    85,    85,    39,    39,
   nil,    85,    52,    39,    39,    82,    82,    52,    64,    64,
    82,    82,   nil,    64,    20,    20,    20,    20 ]

racc_action_pointer = [
    19,    17,    29,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
   nil,   nil,   nil,    11,   nil,     2,   nil,   nil,   nil,   nil,
   161,   nil,    16,   nil,    39,    42,   nil,    49,    43,   nil,
    41,    44,   nil,    48,    51,    52,    60,   nil,   nil,   141,
   nil,    -3,   nil,   nil,    55,    59,    69,    79,   nil,    56,
   nil,    57,   145,   nil,    70,   nil,    66,    73,    81,   nil,
   nil,   nil,    82,   nil,   151,   nil,    77,   nil,    89,   nil,
   nil,   nil,   nil,   nil,    99,   109,   nil,   nil,   119,   129,
   nil,   nil,   148,   nil,   nil,   139,     8,   nil,   nil ]

racc_action_default = [
    -2,   -73,    -1,    -4,    -5,    -6,    -7,    -8,    -9,   -10,
   -11,   -12,   -13,   -14,   -16,   -73,   -23,   -24,   -25,   -26,
   -27,   -31,   -32,   -34,   -72,   -36,   -38,   -72,   -40,   -42,
   -59,   -44,   -46,   -59,   -63,   -65,   -73,    -3,   -15,   -73,
   -22,   -73,   -30,   -33,   -73,   -69,   -70,   -71,   -37,   -73,
   -41,   -73,   -51,   -58,   -61,   -45,   -73,   -62,   -64,    89,
   -17,   -19,   -73,   -21,   -18,   -28,   -73,   -35,   -66,   -53,
   -54,   -55,   -56,   -57,   -67,   -68,   -39,   -43,   -49,   -73,
   -60,   -47,   -73,   -29,   -52,   -48,   -73,   -20,   -50 ]

racc_goto_table = [
     4,    39,     4,    68,    74,    75,     5,     6,     5,     6,
    44,    42,    51,    49,     3,    56,    37,    57,    58,     1,
     2,    66,    84,    41,    43,    48,    50,    64,    84,    84,
    45,    46,    42,    45,    46,    55,    85,    86,    80,    84,
    84,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    82,   nil,
   nil,   nil,    78 ]

racc_goto_check = [
     4,    10,     4,    31,    31,    31,     5,     6,     5,     6,
    21,    12,    27,    21,     3,    27,     3,     9,     9,     1,
     2,    11,    32,    17,    19,    23,    26,    10,    32,    32,
     5,     6,    12,     5,     6,    29,    31,    31,    33,    32,
    32,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    10,   nil,
   nil,   nil,     4 ]

racc_goto_pointer = [
   nil,    19,    20,    14,     0,     6,     7,   nil,   nil,   -17,
   -14,   -20,    -9,   nil,   nil,   nil,   nil,     8,   nil,     2,
   nil,   -14,   nil,     0,   nil,   nil,    -2,   -18,   nil,     4,
   nil,   -42,   -46,   -16 ]

racc_goto_default = [
   nil,   nil,   nil,   nil,    70,    71,    72,     7,     8,    13,
   nil,   nil,    21,    16,    17,    18,    19,    20,    22,    23,
    24,   nil,    25,    26,    27,    28,    29,   nil,    31,    32,
    52,   nil,    69,    53 ]

racc_reduce_table = [
  0, 0, :racc_error,
  1, 15, :_reduce_1,
  0, 15, :_reduce_2,
  2, 16, :_reduce_3,
  1, 16, :_reduce_4,
  1, 17, :_reduce_5,
  1, 17, :_reduce_6,
  1, 17, :_reduce_none,
  1, 17, :_reduce_8,
  1, 17, :_reduce_9,
  1, 17, :_reduce_10,
  1, 17, :_reduce_11,
  1, 21, :_reduce_12,
  1, 22, :_reduce_13,
  1, 18, :_reduce_14,
  2, 23, :_reduce_15,
  1, 23, :_reduce_16,
  3, 19, :_reduce_17,
  1, 25, :_reduce_18,
  2, 24, :_reduce_19,
  4, 24, :_reduce_20,
  2, 24, :_reduce_21,
  1, 24, :_reduce_22,
  1, 26, :_reduce_none,
  1, 26, :_reduce_none,
  1, 26, :_reduce_none,
  1, 26, :_reduce_none,
  1, 20, :_reduce_27,
  3, 20, :_reduce_28,
  4, 20, :_reduce_29,
  2, 31, :_reduce_30,
  1, 31, :_reduce_31,
  1, 27, :_reduce_32,
  2, 32, :_reduce_33,
  1, 32, :_reduce_34,
  3, 33, :_reduce_35,
  1, 28, :_reduce_36,
  2, 36, :_reduce_37,
  1, 36, :_reduce_38,
  3, 37, :_reduce_39,
  1, 29, :_reduce_40,
  2, 39, :_reduce_41,
  1, 39, :_reduce_42,
  3, 40, :_reduce_43,
  1, 30, :_reduce_44,
  2, 42, :_reduce_45,
  1, 42, :_reduce_46,
  3, 43, :_reduce_47,
  3, 41, :_reduce_48,
  2, 41, :_reduce_49,
  4, 41, :_reduce_50,
  1, 41, :_reduce_51,
  2, 45, :_reduce_52,
  1, 45, :_reduce_none,
  1, 46, :_reduce_54,
  1, 46, :_reduce_55,
  1, 46, :_reduce_none,
  1, 46, :_reduce_57,
  1, 44, :_reduce_none,
  0, 44, :_reduce_none,
  2, 47, :_reduce_none,
  1, 47, :_reduce_none,
  2, 34, :_reduce_62,
  1, 34, :_reduce_63,
  2, 38, :_reduce_64,
  1, 38, :_reduce_65,
  2, 35, :_reduce_66,
  2, 35, :_reduce_67,
  2, 35, :_reduce_68,
  1, 35, :_reduce_69,
  1, 35, :_reduce_none,
  1, 35, :_reduce_71,
  0, 35, :_reduce_72 ]

racc_reduce_n = 73

racc_shift_n = 89

racc_token_table = {
  false => 0,
  :error => 1,
  :DUMMY => 2,
  :ITEMLISTLINE => 3,
  :ENUMLISTLINE => 4,
  :DESCLISTLINE => 5,
  :METHODLISTLINE => 6,
  :STRINGLINE => 7,
  :WHITELINE => 8,
  :SUBTREE => 9,
  :HEADLINE => 10,
  :INCLUDE => 11,
  :INDENT => 12,
  :DEDENT => 13 }

racc_nt_base = 14

racc_use_result_var = true

Racc_arg = [
  racc_action_table,
  racc_action_check,
  racc_action_default,
  racc_action_pointer,
  racc_goto_table,
  racc_goto_check,
  racc_goto_default,
  racc_goto_pointer,
  racc_nt_base,
  racc_reduce_table,
  racc_token_table,
  racc_shift_n,
  racc_reduce_n,
  racc_use_result_var ]

Racc_token_to_s_table = [
  "$end",
  "error",
  "DUMMY",
  "ITEMLISTLINE",
  "ENUMLISTLINE",
  "DESCLISTLINE",
  "METHODLISTLINE",
  "STRINGLINE",
  "WHITELINE",
  "SUBTREE",
  "HEADLINE",
  "INCLUDE",
  "INDENT",
  "DEDENT",
  "$start",
  "document",
  "blocks",
  "block",
  "textblock",
  "verbatim",
  "lists",
  "headline",
  "include",
  "textblockcontent",
  "verbatimcontent",
  "verbatim_after_lists",
  "list",
  "itemlist",
  "enumlist",
  "desclist",
  "methodlist",
  "lists2",
  "itemlistitems",
  "itemlistitem",
  "first_textblock_in_itemlist",
  "other_blocks_in_list",
  "enumlistitems",
  "enumlistitem",
  "first_textblock_in_enumlist",
  "desclistitems",
  "desclistitem",
  "description_part",
  "methodlistitems",
  "methodlistitem",
  "whitelines",
  "blocks_in_list",
  "block_in_list",
  "whitelines2" ]

Racc_debug_parser = false

##### State transition tables end #####

# reduce 0 omitted

def _reduce_1(val, _values, result)
 result = RDoc::Markup::Document.new(*val[0])
    result
end

def _reduce_2(val, _values, result)
 raise ParseError, "file empty"
    result
end

def _reduce_3(val, _values, result)
 result = val[0].concat val[1]
    result
end

def _reduce_4(val, _values, result)
 result = val[0]
    result
end

def _reduce_5(val, _values, result)
 result = val
    result
end

def _reduce_6(val, _values, result)
 result = val
    result
end

# reduce 7 omitted

def _reduce_8(val, _values, result)
 result = val
    result
end

def _reduce_9(val, _values, result)
 result = val
    result
end

def _reduce_10(val, _values, result)
 result = [RDoc::Markup::BlankLine.new]
    result
end

def _reduce_11(val, _values, result)
 result = val[0].parts
    result
end

def _reduce_12(val, _values, result)
      # val[0] is like [level, title]
      title = @inline_parser.parse(val[0][1])
      result = RDoc::Markup::Heading.new(val[0][0], title)

    result
end

def _reduce_13(val, _values, result)
      result = RDoc::Markup::Include.new val[0], @include_path

    result
end

def _reduce_14(val, _values, result)
      # val[0] is Array of String
      result = paragraph val[0]

    result
end

def _reduce_15(val, _values, result)
 result << val[1].rstrip
    result
end

def _reduce_16(val, _values, result)
 result = [val[0].rstrip]
    result
end

def _reduce_17(val, _values, result)
      # val[1] is Array of String
      content = cut_off val[1]
      result = RDoc::Markup::Verbatim.new(*content)

      # imform to lexer.
      @in_verbatim = false

    result
end

def _reduce_18(val, _values, result)
      # val[0] is Array of String
      content = cut_off val[0]
      result = RDoc::Markup::Verbatim.new(*content)

      # imform to lexer.
      @in_verbatim = false

    result
end

def _reduce_19(val, _values, result)
      result << val[1]

    result
end

def _reduce_20(val, _values, result)
      result.concat val[2]

    result
end

def _reduce_21(val, _values, result)
      result << "\n"

    result
end

def _reduce_22(val, _values, result)
      result = val
      # inform to lexer.
      @in_verbatim = true

    result
end

# reduce 23 omitted

# reduce 24 omitted

# reduce 25 omitted

# reduce 26 omitted

def _reduce_27(val, _values, result)
      result = val[0]

    result
end

def _reduce_28(val, _values, result)
      result = val[1]

    result
end

def _reduce_29(val, _values, result)
      result = val[1].push(val[2])

    result
end

def _reduce_30(val, _values, result)
 result = val[0] << val[1]
    result
end

def _reduce_31(val, _values, result)
 result = [val[0]]
    result
end

def _reduce_32(val, _values, result)
      result = RDoc::Markup::List.new :BULLET, *val[0]

    result
end

def _reduce_33(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_34(val, _values, result)
 result = val
    result
end

def _reduce_35(val, _values, result)
      result = RDoc::Markup::ListItem.new nil, val[0], *val[1]

    result
end

def _reduce_36(val, _values, result)
      result = RDoc::Markup::List.new :NUMBER, *val[0]

    result
end

def _reduce_37(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_38(val, _values, result)
 result = val
    result
end

def _reduce_39(val, _values, result)
      result = RDoc::Markup::ListItem.new nil, val[0], *val[1]

    result
end

def _reduce_40(val, _values, result)
      result = RDoc::Markup::List.new :NOTE, *val[0]

    result
end

def _reduce_41(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_42(val, _values, result)
 result = val
    result
end

def _reduce_43(val, _values, result)
      term = @inline_parser.parse val[0].strip

      result = RDoc::Markup::ListItem.new term, *val[1]

    result
end

def _reduce_44(val, _values, result)
      result = RDoc::Markup::List.new :LABEL, *val[0]

    result
end

def _reduce_45(val, _values, result)
 result.push(val[1])
    result
end

def _reduce_46(val, _values, result)
 result = val
    result
end

def _reduce_47(val, _values, result)
      result = RDoc::Markup::ListItem.new "<tt>#{val[0].strip}</tt>", *val[1]

    result
end

def _reduce_48(val, _values, result)
      result = [val[1]].concat(val[2])

    result
end

def _reduce_49(val, _values, result)
      result = [val[1]]

    result
end

def _reduce_50(val, _values, result)
      result = val[2]

    result
end

def _reduce_51(val, _values, result)
      result = []

    result
end

def _reduce_52(val, _values, result)
 result.concat val[1]
    result
end

# reduce 53 omitted

def _reduce_54(val, _values, result)
 result = val
    result
end

def _reduce_55(val, _values, result)
 result = val
    result
end

# reduce 56 omitted

def _reduce_57(val, _values, result)
 result = []
    result
end

# reduce 58 omitted

# reduce 59 omitted

# reduce 60 omitted

# reduce 61 omitted

def _reduce_62(val, _values, result)
      result = paragraph [val[0]].concat(val[1])

    result
end

def _reduce_63(val, _values, result)
      result = paragraph [val[0]]

    result
end

def _reduce_64(val, _values, result)
      result = paragraph [val[0]].concat(val[1])

    result
end

def _reduce_65(val, _values, result)
      result = paragraph [val[0]]

    result
end

def _reduce_66(val, _values, result)
      result = [val[0]].concat(val[1])

    result
end

def _reduce_67(val, _values, result)
 result.concat val[1]
    result
end

def _reduce_68(val, _values, result)
 result = val[1]
    result
end

def _reduce_69(val, _values, result)
 result = val
    result
end

# reduce 70 omitted

def _reduce_71(val, _values, result)
 result = []
    result
end

def _reduce_72(val, _values, result)
 result = []
    result
end

def _reduce_none(val, _values, result)
  val[0]
end

end   # class BlockParser

end
PK."#[��VU}
}
+gems/rdoc-6.4.1.1/lib/rdoc/known_classes.rbnu�[���# frozen_string_literal: true
module RDoc

  ##
  # Ruby's built-in classes, modules and exceptions

  KNOWN_CLASSES = {
    "rb_cArray"            => "Array",
    "rb_cBasicObject"      => "BasicObject",
    "rb_cBignum"           => "Bignum",
    "rb_cClass"            => "Class",
    "rb_cData"             => "Data",
    "rb_cDir"              => "Dir",
    "rb_cEncoding"         => "Encoding",
    "rb_cFalseClass"       => "FalseClass",
    "rb_cFile"             => "File",
    "rb_cFixnum"           => "Fixnum",
    "rb_cFloat"            => "Float",
    "rb_cHash"             => "Hash",
    "rb_cIO"               => "IO",
    "rb_cInteger"          => "Integer",
    "rb_cModule"           => "Module",
    "rb_cNilClass"         => "NilClass",
    "rb_cNumeric"          => "Numeric",
    "rb_cObject"           => "Object",
    "rb_cProc"             => "Proc",
    "rb_cRange"            => "Range",
    "rb_cRegexp"           => "Regexp",
    "rb_cRubyVM"           => "RubyVM",
    "rb_cSocket"           => "Socket",
    "rb_cString"           => "String",
    "rb_cStruct"           => "Struct",
    "rb_cSymbol"           => "Symbol",
    "rb_cThread"           => "Thread",
    "rb_cTime"             => "Time",
    "rb_cTrueClass"        => "TrueClass",

    "rb_eArgError"         => "ArgError",
    "rb_eEOFError"         => "EOFError",
    "rb_eException"        => "Exception",
    "rb_eFatal"            => "fatal",
    "rb_eFloatDomainError" => "FloatDomainError",
    "rb_eIOError"          => "IOError",
    "rb_eIndexError"       => "IndexError",
    "rb_eInterrupt"        => "Interrupt",
    "rb_eLoadError"        => "LoadError",
    "rb_eNameError"        => "NameError",
    "rb_eNoMemError"       => "NoMemError",
    "rb_eNotImpError"      => "NotImpError",
    "rb_eRangeError"       => "RangeError",
    "rb_eRuntimeError"     => "RuntimeError",
    "rb_eScriptError"      => "ScriptError",
    "rb_eSecurityError"    => "SecurityError",
    "rb_eSignal"           => "SignalException",
    "rb_eStandardError"    => "StandardError",
    "rb_eSyntaxError"      => "SyntaxError",
    "rb_eSystemCallError"  => "SystemCallError",
    "rb_eSystemExit"       => "SystemExit",
    "rb_eTypeError"        => "TypeError",
    "rb_eZeroDivError"     => "ZeroDivError",

    "rb_mComparable"       => "Comparable",
    "rb_mEnumerable"       => "Enumerable",
    "rb_mErrno"            => "Errno",
    "rb_mFConst"           => "File::Constants",
    "rb_mFileTest"         => "FileTest",
    "rb_mGC"               => "GC",
    "rb_mKernel"           => "Kernel",
    "rb_mMath"             => "Math",
    "rb_mProcess"          => "Process"
  }

end
PK."#[��n�==%gems/rdoc-6.4.1.1/lib/rdoc/ri/task.rbnu�[���# frozen_string_literal: true
begin
  gem 'rdoc'
rescue Gem::LoadError
end unless defined?(RDoc)

require_relative '../task'

##
# RDoc::RI::Task creates ri data in <code>./.rdoc</code> for your project.
#
# It contains the following tasks:
#
# [ri]
#   Build ri data
#
# [clobber_ri]
#   Delete ri data files.  This target is automatically added to the main
#   clobber target.
#
# [reri]
#   Rebuild the ri data from scratch even if they are not out of date.
#
# Simple example:
#
#   require 'rdoc/ri/task'
#
#   RDoc::RI::Task.new do |ri|
#     ri.main = 'README.rdoc'
#     ri.rdoc_files.include 'README.rdoc', 'lib/**/*.rb'
#   end
#
# For further configuration details see RDoc::Task.

class RDoc::RI::Task < RDoc::Task

  DEFAULT_NAMES = { # :nodoc:
    :clobber_rdoc => :clobber_ri,
    :rdoc         => :ri,
    :rerdoc       => :reri,
  }

  ##
  # Create an ri task with the given name. See RDoc::Task for documentation on
  # setting names.

  def initialize name = DEFAULT_NAMES # :yield: self
    super
  end

  def clobber_task_description # :nodoc:
    "Remove RI data files"
  end

  ##
  # Sets default task values

  def defaults
    super

    @rdoc_dir = '.rdoc'
  end

  def rdoc_task_description # :nodoc:
    'Build RI data files'
  end

  def rerdoc_task_description # :nodoc:
    'Rebuild RI data files'
  end
end
PK."#[��tUU&gems/rdoc-6.4.1.1/lib/rdoc/ri/store.rbnu�[���# frozen_string_literal: true
module RDoc::RI

  Store = RDoc::Store # :nodoc:

end

PK."#[V�nrr*gems/rdoc-6.4.1.1/lib/rdoc/ri/formatter.rbnu�[���# frozen_string_literal: true
##
# For RubyGems backwards compatibility

module RDoc::RI::Formatter # :nodoc:
end
PK."#[�Ų^^&gems/rdoc-6.4.1.1/lib/rdoc/ri/paths.rbnu�[���# frozen_string_literal: true
require_relative '../rdoc'

##
# The directories where ri data lives.  Paths can be enumerated via ::each, or
# queried individually via ::system_dir, ::site_dir, ::home_dir and ::gem_dir.

module RDoc::RI::Paths

  #:stopdoc:
  require 'rbconfig'

  version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']

  BASE    = File.join RbConfig::CONFIG['ridir'], version

  HOMEDIR = RDoc.home
  #:startdoc:

  ##
  # Iterates over each selected path yielding the directory and type.
  #
  # Yielded types:
  # :system:: Where Ruby's ri data is stored.  Yielded when +system+ is
  #           true
  # :site:: Where ri for installed libraries are stored.  Yielded when
  #         +site+ is true.  Normally no ri data is stored here.
  # :home:: ~/.rdoc.  Yielded when +home+ is true.
  # :gem:: ri data for an installed gem.  Yielded when +gems+ is true.
  # :extra:: ri data directory from the command line.  Yielded for each
  #          entry in +extra_dirs+

  def self.each system = true, site = true, home = true, gems = :latest, *extra_dirs # :yields: directory, type
    return enum_for __method__, system, site, home, gems, *extra_dirs unless
      block_given?

    extra_dirs.each do |dir|
      yield dir, :extra
    end

    yield system_dir,  :system if system
    yield site_dir,    :site   if site
    yield home_dir,    :home   if home and HOMEDIR

    gemdirs(gems).each do |dir|
      yield dir, :gem
    end if gems

    nil
  end

  ##
  # The ri directory for the gem with +gem_name+.

  def self.gem_dir name, version
    req = Gem::Requirement.new "= #{version}"

    spec = Gem::Specification.find_by_name name, req

    File.join spec.doc_dir, 'ri'
  end

  ##
  # The latest installed gems' ri directories.  +filter+ can be :all or
  # :latest.
  #
  # A +filter+ :all includes all versions of gems and includes gems without
  # ri documentation.

  def self.gemdirs filter = :latest
    ri_paths = {}

    all = Gem::Specification.map do |spec|
      [File.join(spec.doc_dir, 'ri'), spec.name, spec.version]
    end

    if filter == :all then
      gemdirs = []

      all.group_by do |_, name, _|
        name
      end.sort_by do |group, _|
        group
      end.map do |group, items|
        items.sort_by do |_, _, version|
          version
        end.reverse_each do |dir,|
          gemdirs << dir
        end
      end

      return gemdirs
    end

    all.each do |dir, name, ver|
      next unless File.exist? dir

      if ri_paths[name].nil? or ver > ri_paths[name].first then
        ri_paths[name] = [ver, name, dir]
      end
    end

    ri_paths.sort_by { |_, (_, name, _)| name }.map { |k, v| v.last }
  rescue LoadError
    []
  end

  ##
  # The location of the rdoc data in the user's home directory.
  #
  # Like ::system, ri data in the user's home directory is rare and predates
  # libraries distributed via RubyGems.  ri data is rarely generated into this
  # directory.

  def self.home_dir
    HOMEDIR
  end

  ##
  # Returns existing directories from the selected documentation directories
  # as an Array.
  #
  # See also ::each

  def self.path(system = true, site = true, home = true, gems = :latest, *extra_dirs)
    path = raw_path system, site, home, gems, *extra_dirs

    path.select { |directory| File.directory? directory }
  end

  ##
  # Returns selected documentation directories including nonexistent
  # directories.
  #
  # See also ::each

  def self.raw_path(system, site, home, gems, *extra_dirs)
    path = []

    each(system, site, home, gems, *extra_dirs) do |dir, type|
      path << dir
    end

    path.compact
  end

  ##
  # The location of ri data installed into the site dir.
  #
  # Historically this was available for documentation installed by Ruby
  # libraries predating RubyGems.  It is unlikely to contain any content for
  # modern Ruby installations.

  def self.site_dir
    File.join BASE, 'site'
  end

  ##
  # The location of the built-in ri data.
  #
  # This data is built automatically when `make` is run when Ruby is
  # installed.  If you did not install Ruby by hand you may need to install
  # the documentation yourself.  Please consult the documentation for your
  # package manager or Ruby installer for details.  You can also use the
  # rdoc-data gem to install system ri data for common versions of Ruby.

  def self.system_dir
    File.join BASE, 'system'
  end

end
PK."#[���(	�	�'gems/rdoc-6.4.1.1/lib/rdoc/ri/driver.rbnu�[���# frozen_string_literal: true
require 'abbrev'
require 'optparse'

begin
  require 'readline'
rescue LoadError
end

begin
  require 'win32console'
rescue LoadError
end

require 'rdoc'

##
# For RubyGems backwards compatibility

require_relative 'formatter'

##
# The RI driver implements the command-line ri tool.
#
# The driver supports:
# * loading RI data from:
#   * Ruby's standard library
#   * RubyGems
#   * ~/.rdoc
#   * A user-supplied directory
# * Paging output (uses RI_PAGER environment variable, PAGER environment
#   variable or the less, more and pager programs)
# * Interactive mode with tab-completion
# * Abbreviated names (ri Zl shows Zlib documentation)
# * Colorized output
# * Merging output from multiple RI data sources

class RDoc::RI::Driver

  ##
  # Base Driver error class

  class Error < RDoc::RI::Error; end

  ##
  # Raised when a name isn't found in the ri data stores

  class NotFoundError < Error

    def initialize(klass, suggestions = nil) # :nodoc:
      @klass = klass
      @suggestions = suggestions
    end

    ##
    # Name that wasn't found

    def name
      @klass
    end

    def message # :nodoc:
      str = "Nothing known about #{@klass}"
      if @suggestions and !@suggestions.empty?
        str += "\nDid you mean?  #{@suggestions.join("\n               ")}"
      end
      str
    end
  end

  ##
  # Show all method documentation following a class or module

  attr_accessor :show_all

  ##
  # An RDoc::RI::Store for each entry in the RI path

  attr_accessor :stores

  ##
  # Controls the user of the pager vs $stdout

  attr_accessor :use_stdout

  ##
  # Default options for ri

  def self.default_options
    options = {}
    options[:interactive] = false
    options[:profile]     = false
    options[:show_all]    = false
    options[:use_stdout]  = !$stdout.tty?
    options[:width]       = 72

    # By default all standard paths are used.
    options[:use_system]     = true
    options[:use_site]       = true
    options[:use_home]       = true
    options[:use_gems]       = true
    options[:extra_doc_dirs] = []

    return options
  end

  ##
  # Dump +data_path+ using pp

  def self.dump data_path
    require 'pp'

    File.open data_path, 'rb' do |io|
      pp Marshal.load(io.read)
    end
  end

  ##
  # Parses +argv+ and returns a Hash of options

  def self.process_args argv
    options = default_options

    opts = OptionParser.new do |opt|
      opt.accept File do |file,|
        File.readable?(file) and not File.directory?(file) and file
      end

      opt.program_name = File.basename $0
      opt.version = RDoc::VERSION
      opt.release = nil
      opt.summary_indent = ' ' * 4

      opt.banner = <<-EOT
Usage: #{opt.program_name} [options] [name ...]

Where name can be:

  Class | Module | Module::Class

  Class::method | Class#method | Class.method | method

  gem_name: | gem_name:README | gem_name:History

  ruby: | ruby:NEWS | ruby:globals

All class names may be abbreviated to their minimum unambiguous form.
If a name is ambiguous, all valid options will be listed.

A '.' matches either class or instance methods, while #method
matches only instance and ::method matches only class methods.

README and other files may be displayed by prefixing them with the gem name
they're contained in.  If the gem name is followed by a ':' all files in the
gem will be shown.  The file name extension may be omitted where it is
unambiguous.

'ruby' can be used as a pseudo gem name to display files from the Ruby
core documentation. Use 'ruby:' by itself to get a list of all available
core documentation files.

For example:

    #{opt.program_name} Fil
    #{opt.program_name} File
    #{opt.program_name} File.new
    #{opt.program_name} zip
    #{opt.program_name} rdoc:README
    #{opt.program_name} ruby:comments

Note that shell quoting or escaping may be required for method names
containing punctuation:

    #{opt.program_name} 'Array.[]'
    #{opt.program_name} compact\\!

To see the default directories #{opt.program_name} will search, run:

    #{opt.program_name} --list-doc-dirs

Specifying the --system, --site, --home, --gems, or --doc-dir options
will limit ri to searching only the specified directories.

ri options may be set in the RI environment variable.

The ri pager can be set with the RI_PAGER environment variable
or the PAGER environment variable.
      EOT

      opt.separator nil
      opt.separator "Options:"

      opt.separator nil

      opt.on("--[no-]interactive", "-i",
             "In interactive mode you can repeatedly",
             "look up methods with autocomplete.") do |interactive|
        options[:interactive] = interactive
      end

      opt.separator nil

      opt.on("--[no-]all", "-a",
             "Show all documentation for a class or",
             "module.") do |show_all|
        options[:show_all] = show_all
      end

      opt.separator nil

      opt.on("--[no-]list", "-l",
             "List classes ri knows about.") do |list|
        options[:list] = list
      end

      opt.separator nil

      opt.on("--[no-]pager",
             "Send output to a pager,",
             "rather than directly to stdout.") do |use_pager|
        options[:use_stdout] = !use_pager
      end

      opt.separator nil

      opt.on("-T",
             "Synonym for --no-pager.") do
        options[:use_stdout] = true
      end

      opt.separator nil

      opt.on("--width=WIDTH", "-w", OptionParser::DecimalInteger,
             "Set the width of the output.") do |width|
        options[:width] = width
      end

      opt.separator nil

      opt.on("--server[=PORT]", Integer,
             "Run RDoc server on the given port.",
             "The default port is 8214.") do |port|
        options[:server] = port || 8214
      end

      opt.separator nil

      formatters = RDoc::Markup.constants.grep(/^To[A-Z][a-z]+$/).sort
      formatters = formatters.sort.map do |formatter|
        formatter.to_s.sub('To', '').downcase
      end
      formatters -= %w[html label test] # remove useless output formats

      opt.on("--format=NAME", "-f",
             "Use the selected formatter.  The default",
             "formatter is bs for paged output and ansi",
             "otherwise.  Valid formatters are:",
             "#{formatters.join(', ')}.", formatters) do |value|
        options[:formatter] = RDoc::Markup.const_get "To#{value.capitalize}"
      end

      opt.separator nil

      opt.on("--help", "-h",
             "Show help and exit.") do
        puts opts
        exit
      end

      opt.separator nil

      opt.on("--version", "-v",
             "Output version information and exit.") do
        puts "#{opts.program_name} #{opts.version}"
        exit
      end

      opt.separator nil
      opt.separator "Data source options:"
      opt.separator nil

      opt.on("--[no-]list-doc-dirs",
             "List the directories from which ri will",
             "source documentation on stdout and exit.") do |list_doc_dirs|
        options[:list_doc_dirs] = list_doc_dirs
      end

      opt.separator nil

      opt.on("--doc-dir=DIRNAME", "-d", Array,
             "List of directories from which to source",
             "documentation in addition to the standard",
             "directories.  May be repeated.") do |value|
        value.each do |dir|
          unless File.directory? dir then
            raise OptionParser::InvalidArgument, "#{dir} is not a directory"
          end

          options[:extra_doc_dirs] << File.expand_path(dir)
        end
      end

      opt.separator nil

      opt.on("--no-standard-docs",
             "Do not include documentation from",
             "the Ruby standard library, site_lib,",
             "installed gems, or ~/.rdoc.",
             "Use with --doc-dir.") do
        options[:use_system] = false
        options[:use_site] = false
        options[:use_gems] = false
        options[:use_home] = false
      end

      opt.separator nil

      opt.on("--[no-]system",
             "Include documentation from Ruby's",
             "standard library.  Defaults to true.") do |value|
        options[:use_system] = value
      end

      opt.separator nil

      opt.on("--[no-]site",
             "Include documentation from libraries",
             "installed in site_lib.",
             "Defaults to true.") do |value|
        options[:use_site] = value
      end

      opt.separator nil

      opt.on("--[no-]gems",
             "Include documentation from RubyGems.",
             "Defaults to true.") do |value|
        options[:use_gems] = value
      end

      opt.separator nil

      opt.on("--[no-]home",
             "Include documentation stored in ~/.rdoc.",
             "Defaults to true.") do |value|
        options[:use_home] = value
      end

      opt.separator nil
      opt.separator "Debug options:"
      opt.separator nil

      opt.on("--[no-]profile",
             "Run with the ruby profiler.") do |value|
        options[:profile] = value
      end

      opt.separator nil

      opt.on("--dump=CACHE", File,
             "Dump data from an ri cache or data file.") do |value|
        options[:dump_path] = value
      end
    end

    argv = ENV['RI'].to_s.split(' ').concat argv

    opts.parse! argv

    options[:names] = argv

    options[:use_stdout] ||= !$stdout.tty?
    options[:use_stdout] ||= options[:interactive]
    options[:width] ||= 72

    options

  rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e
    puts opts
    puts
    puts e
    exit 1
  end

  ##
  # Runs the ri command line executable using +argv+

  def self.run argv = ARGV
    options = process_args argv

    if options[:dump_path] then
      dump options[:dump_path]
      return
    end

    ri = new options
    ri.run
  end

  ##
  # Creates a new driver using +initial_options+ from ::process_args

  def initialize initial_options = {}
    @paging = false
    @classes = nil

    options = self.class.default_options.update(initial_options)

    @formatter_klass = options[:formatter]

    require 'profile' if options[:profile]

    @names = options[:names]
    @list = options[:list]

    @doc_dirs = []
    @stores   = []

    RDoc::RI::Paths.each(options[:use_system], options[:use_site],
                         options[:use_home], options[:use_gems],
                         *options[:extra_doc_dirs]) do |path, type|
      @doc_dirs << path

      store = RDoc::RI::Store.new path, type
      store.load_cache
      @stores << store
    end

    @list_doc_dirs = options[:list_doc_dirs]

    @interactive = options[:interactive]
    @server      = options[:server]
    @use_stdout  = options[:use_stdout]
    @show_all    = options[:show_all]
    @width       = options[:width]

    # pager process for jruby
    @jruby_pager_process = nil
  end

  ##
  # Adds paths for undocumented classes +also_in+ to +out+

  def add_also_in out, also_in
    return if also_in.empty?

    out << RDoc::Markup::Rule.new(1)
    out << RDoc::Markup::Paragraph.new("Also found in:")

    paths = RDoc::Markup::Verbatim.new
    also_in.each do |store|
      paths.parts.push store.friendly_path, "\n"
    end
    out << paths
  end

  ##
  # Adds a class header to +out+ for class +name+ which is described in
  # +classes+.

  def add_class out, name, classes
    heading = if classes.all? { |klass| klass.module? } then
                name
              else
                superclass = classes.map do |klass|
                  klass.superclass unless klass.module?
                end.compact.shift || 'Object'

                superclass = superclass.full_name unless String === superclass

                "#{name} < #{superclass}"
              end

    out << RDoc::Markup::Heading.new(1, heading)
    out << RDoc::Markup::BlankLine.new
  end

  ##
  # Adds "(from ...)" to +out+ for +store+

  def add_from out, store
    out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")
  end

  ##
  # Adds +extends+ to +out+

  def add_extends out, extends
    add_extension_modules out, 'Extended by', extends
  end

  ##
  # Adds a list of +extensions+ to this module of the given +type+ to +out+.
  # add_includes and add_extends call this, so you should use those directly.

  def add_extension_modules out, type, extensions
    return if extensions.empty?

    out << RDoc::Markup::Rule.new(1)
    out << RDoc::Markup::Heading.new(1, "#{type}:")

    extensions.each do |modules, store|
      if modules.length == 1 then
        add_extension_modules_single out, store, modules.first
      else
        add_extension_modules_multiple out, store, modules
      end
    end
  end

  ##
  # Renders multiple included +modules+ from +store+ to +out+.

  def add_extension_modules_multiple out, store, modules # :nodoc:
    out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")

    wout, with = modules.partition { |incl| incl.comment.empty? }

    out << RDoc::Markup::BlankLine.new unless with.empty?

    with.each do |incl|
      out << RDoc::Markup::Paragraph.new(incl.name)
      out << RDoc::Markup::BlankLine.new
      out << incl.comment
    end

    unless wout.empty? then
      verb = RDoc::Markup::Verbatim.new

      wout.each do |incl|
        verb.push incl.name, "\n"
      end

      out << verb
    end
  end

  ##
  # Adds a single extension module +include+ from +store+ to +out+

  def add_extension_modules_single out, store, include # :nodoc:
    name = include.name
    path = store.friendly_path
    out << RDoc::Markup::Paragraph.new("#{name} (from #{path})")

    if include.comment then
      out << RDoc::Markup::BlankLine.new
      out << include.comment
    end
  end

  ##
  # Adds +includes+ to +out+

  def add_includes out, includes
    add_extension_modules out, 'Includes', includes
  end

  ##
  # Looks up the method +name+ and adds it to +out+

  def add_method out, name
    filtered   = lookup_method name

    method_out = method_document name, filtered

    out.concat method_out.parts
  end

  ##
  # Adds documentation for all methods in +klass+ to +out+

  def add_method_documentation out, klass
    klass.method_list.each do |method|
      begin
        add_method out, method.full_name
      rescue NotFoundError
        next
      end
    end
  end

  ##
  # Adds a list of +methods+ to +out+ with a heading of +name+

  def add_method_list out, methods, name
    return if methods.empty?

    out << RDoc::Markup::Heading.new(1, "#{name}:")
    out << RDoc::Markup::BlankLine.new

    if @use_stdout and !@interactive then
      out.concat methods.map { |method|
        RDoc::Markup::Verbatim.new method
      }
    else
      out << RDoc::Markup::IndentedParagraph.new(2, methods.join(', '))
    end

    out << RDoc::Markup::BlankLine.new
  end

  ##
  # Returns ancestor classes of +klass+

  def ancestors_of klass
    ancestors = []

    unexamined = [klass]
    seen = []

    loop do
      break if unexamined.empty?
      current = unexamined.shift
      seen << current

      stores = classes[current]

      next unless stores and not stores.empty?

      klasses = stores.flat_map do |store|
        store.ancestors[current] || []
      end.uniq

      klasses = klasses - seen

      ancestors.concat klasses
      unexamined.concat klasses
    end

    ancestors.reverse
  end

  ##
  # For RubyGems backwards compatibility

  def class_cache # :nodoc:
  end

  ##
  # Builds a RDoc::Markup::Document from +found+, +klasess+ and +includes+

  def class_document name, found, klasses, includes, extends
    also_in = []

    out = RDoc::Markup::Document.new

    add_class out, name, klasses

    add_includes out, includes
    add_extends  out, extends

    found.each do |store, klass|
      render_class out, store, klass, also_in
    end

    add_also_in out, also_in

    out
  end

  ##
  # Adds the class +comment+ to +out+.

  def class_document_comment out, comment # :nodoc:
    unless comment.empty? then
      out << RDoc::Markup::Rule.new(1)

      if comment.merged? then
        parts = comment.parts
        parts = parts.zip [RDoc::Markup::BlankLine.new] * parts.length
        parts.flatten!
        parts.pop

        out.concat parts
      else
        out << comment
      end
    end
  end

  ##
  # Adds the constants from +klass+ to the Document +out+.

  def class_document_constants out, klass # :nodoc:
    return if klass.constants.empty?

    out << RDoc::Markup::Heading.new(1, "Constants:")
    out << RDoc::Markup::BlankLine.new
    list = RDoc::Markup::List.new :NOTE

    constants = klass.constants.sort_by { |constant| constant.name }

    list.items.concat constants.map { |constant|
      parts = constant.comment.parts if constant.comment
      parts << RDoc::Markup::Paragraph.new('[not documented]') if
        parts.empty?

      RDoc::Markup::ListItem.new(constant.name, *parts)
    }

    out << list
    out << RDoc::Markup::BlankLine.new
  end

  ##
  # Hash mapping a known class or module to the stores it can be loaded from

  def classes
    return @classes if @classes

    @classes = {}

    @stores.each do |store|
      store.cache[:modules].each do |mod|
        # using default block causes searched-for modules to be added
        @classes[mod] ||= []
        @classes[mod] << store
      end
    end

    @classes
  end

  ##
  # Returns the stores wherein +name+ is found along with the classes,
  # extends and includes that match it

  def classes_and_includes_and_extends_for name
    klasses = []
    extends = []
    includes = []

    found = @stores.map do |store|
      begin
        klass = store.load_class name
        klasses  << klass
        extends  << [klass.extends,  store] if klass.extends
        includes << [klass.includes, store] if klass.includes
        [store, klass]
      rescue RDoc::Store::MissingFileError
      end
    end.compact

    extends.reject!  do |modules,| modules.empty? end
    includes.reject! do |modules,| modules.empty? end

    [found, klasses, includes, extends]
  end

  ##
  # Completes +name+ based on the caches.  For Readline

  def complete name
    completions = []

    klass, selector, method = parse_name name

    complete_klass  name, klass, selector, method, completions
    complete_method name, klass, selector,         completions

    completions.sort.uniq
  end

  def complete_klass name, klass, selector, method, completions # :nodoc:
    klasses = classes.keys

    # may need to include Foo when given Foo::
    klass_name = method ? name : klass

    if name !~ /#|\./ then
      completions.replace klasses.grep(/^#{Regexp.escape klass_name}[^:]*$/)
      completions.concat klasses.grep(/^#{Regexp.escape name}[^:]*$/) if
        name =~ /::$/

      completions << klass if classes.key? klass # to complete a method name
    elsif selector then
      completions << klass if classes.key? klass
    elsif classes.key? klass_name then
      completions << klass_name
    end
  end

  def complete_method name, klass, selector, completions # :nodoc:
    if completions.include? klass and name =~ /#|\.|::/ then
      methods = list_methods_matching name

      if not methods.empty? then
        # remove Foo if given Foo:: and a method was found
        completions.delete klass
      elsif selector then
        # replace Foo with Foo:: as given
        completions.delete klass
        completions << "#{klass}#{selector}"
      end

      completions.concat methods
    end
  end

  ##
  # Converts +document+ to text and writes it to the pager

  def display document
    page do |io|
      f = formatter(io)
      f.width = @width if @width and f.respond_to?(:width)
      text = document.accept f

      io.write text
    end
  end

  ##
  # Outputs formatted RI data for class +name+.  Groups undocumented classes

  def display_class name
    return if name =~ /#|\./

    found, klasses, includes, extends =
      classes_and_includes_and_extends_for name

    return if found.empty?

    out = class_document name, found, klasses, includes, extends

    display out
  end

  ##
  # Outputs formatted RI data for method +name+

  def display_method name
    out = RDoc::Markup::Document.new

    add_method out, name

    display out
  end

  ##
  # Outputs formatted RI data for the class or method +name+.
  #
  # Returns true if +name+ was found, false if it was not an alternative could
  # be guessed, raises an error if +name+ couldn't be guessed.

  def display_name name
    if name =~ /\w:(\w|$)/ then
      display_page name
      return true
    end

    return true if display_class name

    display_method name if name =~ /::|#|\./

    true
  rescue NotFoundError
    matches = list_methods_matching name if name =~ /::|#|\./
    matches = classes.keys.grep(/^#{Regexp.escape name}/) if matches.empty?

    raise if matches.empty?

    page do |io|
      io.puts "#{name} not found, maybe you meant:"
      io.puts
      io.puts matches.sort.join("\n")
    end

    false
  end

  ##
  # Displays each name in +name+

  def display_names names
    names.each do |name|
      name = expand_name name

      display_name name
    end
  end

  ##
  # Outputs formatted RI data for page +name+.

  def display_page name
    store_name, page_name = name.split ':', 2

    store = @stores.find { |s| s.source == store_name }

    return display_page_list store if page_name.empty?

    pages = store.cache[:pages]

    unless pages.include? page_name then
      found_names = pages.select do |n|
        n =~ /#{Regexp.escape page_name}\.[^.]+$/
      end

      if found_names.length.zero? then
        return display_page_list store, pages
      elsif found_names.length > 1 then
        return display_page_list store, found_names, page_name
      end

      page_name = found_names.first
    end

    page = store.load_page page_name

    display page.comment
  end

  ##
  # Outputs a formatted RI page list for the pages in +store+.

  def display_page_list store, pages = store.cache[:pages], search = nil
    out = RDoc::Markup::Document.new

    title = if search then
              "#{search} pages"
            else
              'Pages'
            end

    out << RDoc::Markup::Heading.new(1, "#{title} in #{store.friendly_path}")
    out << RDoc::Markup::BlankLine.new

    list = RDoc::Markup::List.new(:BULLET)

    pages.each do |page|
      list << RDoc::Markup::Paragraph.new(page)
    end

    out << list

    display out
  end

  def check_did_you_mean # :nodoc:
    if defined? DidYouMean::SpellChecker
      true
    else
      begin
        require 'did_you_mean'
        if defined? DidYouMean::SpellChecker
          true
        else
          false
        end
      rescue LoadError
        false
      end
    end
  end

  ##
  # Expands abbreviated klass +klass+ into a fully-qualified class.  "Zl::Da"
  # will be expanded to Zlib::DataError.

  def expand_class klass
    class_names = classes.keys
    ary = class_names.grep(Regexp.new("\\A#{klass.gsub(/(?=::|\z)/, '[^:]*')}\\z"))
    if ary.length != 1 && ary.first != klass
      if check_did_you_mean
        suggestions = DidYouMean::SpellChecker.new(dictionary: class_names).correct(klass)
        raise NotFoundError.new(klass, suggestions)
      else
        raise NotFoundError, klass
      end
    end
    ary.first
  end

  ##
  # Expands the class portion of +name+ into a fully-qualified class.  See
  # #expand_class.

  def expand_name name
    klass, selector, method = parse_name name

    return [selector, method].join if klass.empty?

    case selector
    when ':' then
      [find_store(klass),   selector, method]
    else
      [expand_class(klass), selector, method]
    end.join
  end

  ##
  # Filters the methods in +found+ trying to find a match for +name+.

  def filter_methods found, name
    regexp = name_regexp name

    filtered = found.find_all do |store, methods|
      methods.any? { |method| method.full_name =~ regexp }
    end

    return filtered unless filtered.empty?

    found
  end

  ##
  # Yields items matching +name+ including the store they were found in, the
  # class being searched for, the class they were found in (an ancestor) the
  # types of methods to look up (from #method_type), and the method name being
  # searched for

  def find_methods name
    klass, selector, method = parse_name name

    types = method_type selector

    klasses = nil
    ambiguous = klass.empty?

    if ambiguous then
      klasses = classes.keys
    else
      klasses = ancestors_of klass
      klasses.unshift klass
    end

    methods = []

    klasses.each do |ancestor|
      ancestors = classes[ancestor]

      next unless ancestors

      klass = ancestor if ambiguous

      ancestors.each do |store|
        methods << [store, klass, ancestor, types, method]
      end
    end

    methods = methods.sort_by do |_, k, a, _, m|
      [k, a, m].compact
    end

    methods.each do |item|
      yield(*item) # :yields: store, klass, ancestor, types, method
    end

    self
  end

  ##
  # Finds the given +pager+ for jruby.  Returns an IO if +pager+ was found.
  #
  # Returns false if +pager+ does not exist.
  #
  # Returns nil if the jruby JVM doesn't support ProcessBuilder redirection
  # (1.6 and older).

  def find_pager_jruby pager
    require 'java'
    require 'shellwords'

    return nil unless java.lang.ProcessBuilder.constants.include? :Redirect

    pager = Shellwords.split pager

    pb = java.lang.ProcessBuilder.new(*pager)
    pb = pb.redirect_output java.lang.ProcessBuilder::Redirect::INHERIT

    @jruby_pager_process = pb.start

    input = @jruby_pager_process.output_stream

    io = input.to_io
    io.sync = true
    io
  rescue java.io.IOException
    false
  end

  ##
  # Finds a store that matches +name+ which can be the name of a gem, "ruby",
  # "home" or "site".
  #
  # See also RDoc::Store#source

  def find_store name
    @stores.each do |store|
      source = store.source

      return source if source == name

      return source if
        store.type == :gem and source =~ /^#{Regexp.escape name}-\d/
    end

    raise RDoc::RI::Driver::NotFoundError, name
  end

  ##
  # Creates a new RDoc::Markup::Formatter.  If a formatter is given with -f,
  # use it.  If we're outputting to a pager, use bs, otherwise ansi.

  def formatter(io)
    if @formatter_klass then
      @formatter_klass.new
    elsif paging? or !io.tty? then
      RDoc::Markup::ToBs.new
    else
      RDoc::Markup::ToAnsi.new
    end
  end

  ##
  # Runs ri interactively using Readline if it is available.

  def interactive
    puts "\nEnter the method name you want to look up."

    if defined? Readline then
      Readline.completion_proc = method :complete
      puts "You can use tab to autocomplete."
    end

    puts "Enter a blank line to exit.\n\n"

    loop do
      name = if defined? Readline then
               Readline.readline ">> "
             else
               print ">> "
               $stdin.gets
             end

      return if name.nil? or name.empty?

      begin
        display_name expand_name(name.strip)
      rescue NotFoundError => e
        puts e.message
      end
    end

  rescue Interrupt
    exit
  end

  ##
  # Is +file+ in ENV['PATH']?

  def in_path? file
    return true if file =~ %r%\A/% and File.exist? file

    ENV['PATH'].split(File::PATH_SEPARATOR).any? do |path|
      File.exist? File.join(path, file)
    end
  end

  ##
  # Lists classes known to ri starting with +names+.  If +names+ is empty all
  # known classes are shown.

  def list_known_classes names = []
    classes = []

    stores.each do |store|
      classes << store.module_names
    end

    classes = classes.flatten.uniq.sort

    unless names.empty? then
      filter = Regexp.union names.map { |name| /^#{name}/ }

      classes = classes.grep filter
    end

    page do |io|
      if paging? or io.tty? then
        if names.empty? then
          io.puts "Classes and Modules known to ri:"
        else
          io.puts "Classes and Modules starting with #{names.join ', '}:"
        end
        io.puts
      end

      io.puts classes.join("\n")
    end
  end

  ##
  # Returns an Array of methods matching +name+

  def list_methods_matching name
    found = []

    find_methods name do |store, klass, ancestor, types, method|
      if types == :instance or types == :both then
        methods = store.instance_methods[ancestor]

        if methods then
          matches = methods.grep(/^#{Regexp.escape method.to_s}/)

          matches = matches.map do |match|
            "#{klass}##{match}"
          end

          found.concat matches
        end
      end

      if types == :class or types == :both then
        methods = store.class_methods[ancestor]

        next unless methods
        matches = methods.grep(/^#{Regexp.escape method.to_s}/)

        matches = matches.map do |match|
          "#{klass}::#{match}"
        end

        found.concat matches
      end
    end

    found.uniq
  end

  ##
  # Loads RI data for method +name+ on +klass+ from +store+.  +type+ and
  # +cache+ indicate if it is a class or instance method.

  def load_method store, cache, klass, type, name
    methods = store.public_send(cache)[klass]

    return unless methods

    method = methods.find do |method_name|
      method_name == name
    end

    return unless method

    store.load_method klass, "#{type}#{method}"
  rescue RDoc::Store::MissingFileError => e
    comment = RDoc::Comment.new("missing documentation at #{e.file}").parse

    method = RDoc::AnyMethod.new nil, name
    method.comment = comment
    method
  end

  ##
  # Returns an Array of RI data for methods matching +name+

  def load_methods_matching name
    found = []

    find_methods name do |store, klass, ancestor, types, method|
      methods = []

      methods << load_method(store, :class_methods, ancestor, '::',  method) if
        [:class, :both].include? types

      methods << load_method(store, :instance_methods, ancestor, '#',  method) if
        [:instance, :both].include? types

      found << [store, methods.compact]
    end

    found.reject do |path, methods| methods.empty? end
  end

  ##
  # Returns a filtered list of methods matching +name+

  def lookup_method name
    found = load_methods_matching name

    if found.empty?
      if check_did_you_mean
        methods = []
        _, _, method_name = parse_name name
        find_methods name do |store, klass, ancestor, types, method|
          methods.push(*store.class_methods[klass]) if [:class, :both].include? types
          methods.push(*store.instance_methods[klass]) if [:instance, :both].include? types
        end
        methods = methods.uniq
        suggestions = DidYouMean::SpellChecker.new(dictionary: methods).correct(method_name)
        raise NotFoundError.new(name, suggestions)
      else
        raise NotFoundError, name
      end
    end

    filter_methods found, name
  end

  ##
  # Builds a RDoc::Markup::Document from +found+, +klasses+ and +includes+

  def method_document name, filtered
    out = RDoc::Markup::Document.new

    out << RDoc::Markup::Heading.new(1, name)
    out << RDoc::Markup::BlankLine.new

    filtered.each do |store, methods|
      methods.each do |method|
        render_method out, store, method, name
      end
    end

    out
  end

  ##
  # Returns the type of method (:both, :instance, :class) for +selector+

  def method_type selector
    case selector
    when '.', nil then :both
    when '#'      then :instance
    else               :class
    end
  end

  ##
  # Returns a regular expression for +name+ that will match an
  # RDoc::AnyMethod's name.

  def name_regexp name
    klass, type, name = parse_name name

    case type
    when '#', '::' then
      /^#{klass}#{type}#{Regexp.escape name}$/
    else
      /^#{klass}(#|::)#{Regexp.escape name}$/
    end
  end

  ##
  # Paginates output through a pager program.

  def page
    if pager = setup_pager then
      begin
        yield pager
      ensure
        pager.close
        @jruby_pager_process.wait_for if @jruby_pager_process
      end
    else
      yield $stdout
    end
  rescue Errno::EPIPE
  ensure
    @paging = false
  end

  ##
  # Are we using a pager?

  def paging?
    @paging
  end

  ##
  # Extracts the class, selector and method name parts from +name+ like
  # Foo::Bar#baz.
  #
  # NOTE: Given Foo::Bar, Bar is considered a class even though it may be a
  # method

  def parse_name name
    parts = name.split(/(::?|#|\.)/)

    if parts.length == 1 then
      if parts.first =~ /^[a-z]|^([%&*+\/<>^`|~-]|\+@|-@|<<|<=>?|===?|=>|=~|>>|\[\]=?|~@)$/ then
        type = '.'
        meth = parts.pop
      else
        type = nil
        meth = nil
      end
    elsif parts.length == 2 or parts.last =~ /::|#|\./ then
      type = parts.pop
      meth = nil
    elsif parts[1] == ':' then
      klass = parts.shift
      type  = parts.shift
      meth  = parts.join
    elsif parts[-2] != '::' or parts.last !~ /^[A-Z]/ then
      meth = parts.pop
      type = parts.pop
    end

    klass ||= parts.join

    [klass, type, meth]
  end

  ##
  # Renders the +klass+ from +store+ to +out+.  If the klass has no
  # documentable items the class is added to +also_in+ instead.

  def render_class out, store, klass, also_in # :nodoc:
    comment = klass.comment
    # TODO the store's cache should always return an empty Array
    class_methods    = store.class_methods[klass.full_name]    || []
    instance_methods = store.instance_methods[klass.full_name] || []
    attributes       = store.attributes[klass.full_name]       || []

    if comment.empty? and
       instance_methods.empty? and class_methods.empty? then
      also_in << store
      return
    end

    add_from out, store

    class_document_comment out, comment

    if class_methods or instance_methods or not klass.constants.empty? then
      out << RDoc::Markup::Rule.new(1)
    end

    class_document_constants out, klass

    add_method_list out, class_methods,    'Class methods'
    add_method_list out, instance_methods, 'Instance methods'
    add_method_list out, attributes,       'Attributes'

    add_method_documentation out, klass if @show_all
  end

  def render_method out, store, method, name # :nodoc:
    out << RDoc::Markup::Paragraph.new("(from #{store.friendly_path})")

    unless name =~ /^#{Regexp.escape method.parent_name}/ then
      out << RDoc::Markup::Heading.new(3, "Implementation from #{method.parent_name}")
    end

    out << RDoc::Markup::Rule.new(1)

    render_method_arguments out, method.arglists
    render_method_superclass out, method
    if method.is_alias_for
      al = method.is_alias_for
      alias_for = store.load_method al.parent_name, "#{al.name_prefix}#{al.name}"
      render_method_comment out, method, alias_for
    else
      render_method_comment out, method
    end
  end

  def render_method_arguments out, arglists # :nodoc:
    return unless arglists

    arglists = arglists.chomp.split "\n"
    arglists = arglists.map { |line| line + "\n" }
    out << RDoc::Markup::Verbatim.new(*arglists)
    out << RDoc::Markup::Rule.new(1)
  end

  def render_method_comment out, method, alias_for = nil# :nodoc:
    if alias_for
      unless method.comment.nil? or method.comment.empty?
        out << RDoc::Markup::BlankLine.new
        out << method.comment
      end
      out << RDoc::Markup::BlankLine.new
      out << RDoc::Markup::Paragraph.new("(This method is an alias for #{alias_for.full_name}.)")
      out << RDoc::Markup::BlankLine.new
      out << alias_for.comment
      out << RDoc::Markup::BlankLine.new
    else
      out << RDoc::Markup::BlankLine.new
      out << method.comment
      out << RDoc::Markup::BlankLine.new
    end
  end

  def render_method_superclass out, method # :nodoc:
    return unless
      method.respond_to?(:superclass_method) and method.superclass_method

    out << RDoc::Markup::BlankLine.new
    out << RDoc::Markup::Heading.new(4, "(Uses superclass method #{method.superclass_method})")
    out << RDoc::Markup::Rule.new(1)
  end

  ##
  # Looks up and displays ri data according to the options given.

  def run
    if @list_doc_dirs then
      puts @doc_dirs
    elsif @list then
      list_known_classes @names
    elsif @server then
      start_server
    elsif @interactive or @names.empty? then
      interactive
    else
      display_names @names
    end
  rescue NotFoundError => e
    abort e.message
  end

  ##
  # Sets up a pager program to pass output through.  Tries the RI_PAGER and
  # PAGER environment variables followed by pager, less then more.

  def setup_pager
    return if @use_stdout

    jruby = RUBY_ENGINE == 'jruby'

    pagers = [ENV['RI_PAGER'], ENV['PAGER'], 'pager', 'less', 'more']

    pagers.compact.uniq.each do |pager|
      next unless pager

      pager_cmd = pager.split(' ').first

      next unless in_path? pager_cmd

      if jruby then
        case io = find_pager_jruby(pager)
        when nil   then break
        when false then next
        else            io
        end
      else
        io = IO.popen(pager, 'w') rescue next
      end

      next if $? and $?.pid == io.pid and $?.exited? # pager didn't work

      @paging = true

      return io
    end

    @use_stdout = true

    nil
  end

  ##
  # Starts a WEBrick server for ri.

  def start_server
    begin
      require 'webrick'
    rescue LoadError
      abort "webrick is not found. You may need to `gem install webrick` to install webrick."
    end

    server = WEBrick::HTTPServer.new :Port => @server

    extra_doc_dirs = @stores.map {|s| s.type == :extra ? s.path : nil}.compact

    server.mount '/', RDoc::Servlet, nil, extra_doc_dirs

    trap 'INT'  do server.shutdown end
    trap 'TERM' do server.shutdown end

    server.start
  end

end
PK."#[��YJJ$gems/rdoc-6.4.1.1/lib/rdoc/parser.rbnu�[���# -*- coding: us-ascii -*-
# frozen_string_literal: true

##
# A parser is simple a class that subclasses RDoc::Parser and implements #scan
# to fill in an RDoc::TopLevel with parsed data.
#
# The initialize method takes an RDoc::TopLevel to fill with parsed content,
# the name of the file to be parsed, the content of the file, an RDoc::Options
# object and an RDoc::Stats object to inform the user of parsed items.  The
# scan method is then called to parse the file and must return the
# RDoc::TopLevel object.  By calling super these items will be set for you.
#
# In order to be used by RDoc the parser needs to register the file extensions
# it can parse.  Use ::parse_files_matching to register extensions.
#
#   require 'rdoc'
#
#   class RDoc::Parser::Xyz < RDoc::Parser
#     parse_files_matching /\.xyz$/
#
#     def initialize top_level, file_name, content, options, stats
#       super
#
#       # extra initialization if needed
#     end
#
#     def scan
#       # parse file and fill in @top_level
#     end
#   end

class RDoc::Parser

  @parsers = []

  class << self

    ##
    # An Array of arrays that maps file extension (or name) regular
    # expressions to parser classes that will parse matching filenames.
    #
    # Use parse_files_matching to register a parser's file extensions.

    attr_reader :parsers

  end

  ##
  # The name of the file being parsed

  attr_reader :file_name

  ##
  # Alias an extension to another extension. After this call, files ending
  # "new_ext" will be parsed using the same parser as "old_ext"

  def self.alias_extension(old_ext, new_ext)
    old_ext = old_ext.sub(/^\.(.*)/, '\1')
    new_ext = new_ext.sub(/^\.(.*)/, '\1')

    parser = can_parse_by_name "xxx.#{old_ext}"
    return false unless parser

    RDoc::Parser.parsers.unshift [/\.#{new_ext}$/, parser]

    true
  end

  ##
  # Determines if the file is a "binary" file which basically means it has
  # content that an RDoc parser shouldn't try to consume.

  def self.binary?(file)
    return false if file =~ /\.(rdoc|txt)$/

    s = File.read(file, 1024) or return false

    return true if s[0, 2] == Marshal.dump('')[0, 2] or s.index("\x00")

    mode = 'r:utf-8' # default source encoding has been changed to utf-8
    s.sub!(/\A#!.*\n/, '')     # assume shebang line isn't longer than 1024.
    encoding = s[/^\s*\#\s*(?:-\*-\s*)?(?:en)?coding:\s*([^\s;]+?)(?:-\*-|[\s;])/, 1]
    mode = "rb:#{encoding}" if encoding
    s = File.open(file, mode) {|f| f.gets(nil, 1024)}

    not s.valid_encoding?
  end

  ##
  # Checks if +file+ is a zip file in disguise.  Signatures from
  # http://www.garykessler.net/library/file_sigs.html

  def self.zip? file
    zip_signature = File.read file, 4

    zip_signature == "PK\x03\x04" or
      zip_signature == "PK\x05\x06" or
      zip_signature == "PK\x07\x08"
  rescue
    false
  end

  ##
  # Return a parser that can handle a particular extension

  def self.can_parse file_name
    parser = can_parse_by_name file_name

    # HACK Selenium hides a jar file using a .txt extension
    return if parser == RDoc::Parser::Simple and zip? file_name

    parser
  end

  ##
  # Returns a parser that can handle the extension for +file_name+.  This does
  # not depend upon the file being readable.

  def self.can_parse_by_name file_name
    _, parser = RDoc::Parser.parsers.find { |regexp,| regexp =~ file_name }

    # The default parser must not parse binary files
    ext_name = File.extname file_name
    return parser if ext_name.empty?

    if parser == RDoc::Parser::Simple and ext_name !~ /txt|rdoc/ then
      case check_modeline file_name
      when nil, 'rdoc' then # continue
      else return nil
      end
    end

    parser
  rescue Errno::EACCES
  end

  ##
  # Returns the file type from the modeline in +file_name+

  def self.check_modeline file_name
    line = File.open file_name do |io|
      io.gets
    end

    /-\*-\s*(.*?\S)\s*-\*-/ =~ line

    return nil unless type = $1

    if /;/ =~ type then
      return nil unless /(?:\s|\A)mode:\s*([^\s;]+)/i =~ type
      type = $1
    end

    return nil if /coding:/i =~ type

    type.downcase
  rescue ArgumentError
  rescue Encoding::InvalidByteSequenceError # invalid byte sequence

  end

  ##
  # Finds and instantiates the correct parser for the given +file_name+ and
  # +content+.

  def self.for top_level, file_name, content, options, stats
    return if binary? file_name

    parser = use_markup content

    unless parser then
      parse_name = file_name

      # If no extension, look for shebang
      if file_name !~ /\.\w+$/ && content =~ %r{\A#!(.+)} then
        shebang = $1
        case shebang
        when %r{env\s+ruby}, %r{/ruby}
          parse_name = 'dummy.rb'
        end
      end

      parser = can_parse parse_name
    end

    return unless parser

    content = remove_modeline content

    parser.new top_level, file_name, content, options, stats
  rescue SystemCallError
    nil
  end

  ##
  # Record which file types this parser can understand.
  #
  # It is ok to call this multiple times.

  def self.parse_files_matching(regexp)
    RDoc::Parser.parsers.unshift [regexp, self]
  end

  ##
  # Removes an emacs-style modeline from the first line of the document

  def self.remove_modeline content
    content.sub(/\A.*-\*-\s*(.*?\S)\s*-\*-.*\r?\n/, '')
  end

  ##
  # If there is a <tt>markup: parser_name</tt> comment at the front of the
  # file, use it to determine the parser.  For example:
  #
  #   # markup: rdoc
  #   # Class comment can go here
  #
  #   class C
  #   end
  #
  # The comment should appear as the first line of the +content+.
  #
  # If the content contains a shebang or editor modeline the comment may
  # appear on the second or third line.
  #
  # Any comment style may be used to hide the markup comment.

  def self.use_markup content
    markup = content.lines.first(3).grep(/markup:\s+(\w+)/) { $1 }.first

    return unless markup

    # TODO Ruby should be returned only when the filename is correct
    return RDoc::Parser::Ruby if %w[tomdoc markdown].include? markup

    markup = Regexp.escape markup

    _, selected = RDoc::Parser.parsers.find do |_, parser|
      /^#{markup}$/i =~ parser.name.sub(/.*:/, '')
    end

    selected
  end

  ##
  # Creates a new Parser storing +top_level+, +file_name+, +content+,
  # +options+ and +stats+ in instance variables.  In +@preprocess+ an
  # RDoc::Markup::PreProcess object is created which allows processing of
  # directives.

  def initialize top_level, file_name, content, options, stats
    @top_level = top_level
    @top_level.parser = self.class
    @store = @top_level.store

    @file_name = file_name
    @content = content
    @options = options
    @stats = stats

    @preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include
    @preprocess.options = @options
  end

  autoload :RubyTools, 'rdoc/parser/ruby_tools'
  autoload :Text,      'rdoc/parser/text'

end

# simple must come first in order to show up last in the parsers list
require_relative 'parser/simple'
require_relative 'parser/c'
require_relative 'parser/changelog'
require_relative 'parser/markdown'
require_relative 'parser/rd'
require_relative 'parser/ruby'
PK."#[8�j_��gems/rdoc-6.4.1.1/lib/rdoc.rbnu�[���# frozen_string_literal: true
$DEBUG_RDOC = nil

# :main: README.rdoc

##
# RDoc produces documentation for Ruby source files by parsing the source and
# extracting the definition for classes, modules, methods, includes and
# requires.  It associates these with optional documentation contained in an
# immediately preceding comment block then renders the result using an output
# formatter.
#
# For a simple introduction to writing or generating documentation using RDoc
# see the README.
#
# == Roadmap
#
# If you think you found a bug in RDoc see CONTRIBUTING@Bugs
#
# If you want to use RDoc to create documentation for your Ruby source files,
# see RDoc::Markup and refer to <tt>rdoc --help</tt> for command line usage.
#
# If you want to set the default markup format see
# RDoc::Markup@Supported+Formats
#
# If you want to store rdoc configuration in your gem (such as the default
# markup format) see RDoc::Options@Saved+Options
#
# If you want to write documentation for Ruby files see RDoc::Parser::Ruby
#
# If you want to write documentation for extensions written in C see
# RDoc::Parser::C
#
# If you want to generate documentation using <tt>rake</tt> see RDoc::Task.
#
# If you want to drive RDoc programmatically, see RDoc::RDoc.
#
# If you want to use the library to format text blocks into HTML or other
# formats, look at RDoc::Markup.
#
# If you want to make an RDoc plugin such as a generator or directive handler
# see RDoc::RDoc.
#
# If you want to write your own output generator see RDoc::Generator.
#
# If you want an overview of how RDoc works see CONTRIBUTING
#
# == Credits
#
# RDoc is currently being maintained by Eric Hodel <drbrain@segment7.net>.
#
# Dave Thomas <dave@pragmaticprogrammer.com> is the original author of RDoc.
#
# * The Ruby parser in rdoc/parse.rb is based heavily on the outstanding
#   work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby
#   parser for irb and the rtags package.

module RDoc

  ##
  # Exception thrown by any rdoc error.

  class Error < RuntimeError; end

  require 'rdoc/version'

  ##
  # Method visibilities

  VISIBILITIES = [:public, :protected, :private]

  ##
  # Name of the dotfile that contains the description of files to be processed
  # in the current directory

  DOT_DOC_FILENAME = ".document"

  ##
  # General RDoc modifiers

  GENERAL_MODIFIERS = %w[nodoc].freeze

  ##
  # RDoc modifiers for classes

  CLASS_MODIFIERS = GENERAL_MODIFIERS

  ##
  # RDoc modifiers for attributes

  ATTR_MODIFIERS = GENERAL_MODIFIERS

  ##
  # RDoc modifiers for constants

  CONSTANT_MODIFIERS = GENERAL_MODIFIERS

  ##
  # RDoc modifiers for methods

  METHOD_MODIFIERS = GENERAL_MODIFIERS +
    %w[arg args yield yields notnew not-new not_new doc]

  ##
  # Loads the best available YAML library.

  def self.load_yaml
    begin
      gem 'psych'
    rescue NameError => e # --disable-gems
      raise unless e.name == :gem
    rescue Gem::LoadError
    end

    begin
      require 'psych'
    rescue ::LoadError
    ensure
      require 'yaml'
    end
  end

  def self.home
    rdoc_dir = begin
                File.expand_path('~/.rdoc')
              rescue ArgumentError
              end

    if File.directory?(rdoc_dir)
      rdoc_dir
    else
      begin
        # XDG
        xdg_data_home = ENV["XDG_DATA_HOME"] || File.join(File.expand_path("~"), '.local', 'share')
        unless File.exist?(xdg_data_home)
          FileUtils.mkdir_p xdg_data_home
        end
        File.join xdg_data_home, "rdoc"
      rescue Errno::EACCES
      end
    end
  end

  autoload :RDoc,           'rdoc/rdoc'

  autoload :CrossReference, 'rdoc/cross_reference'
  autoload :ERBIO,          'rdoc/erbio'
  autoload :ERBPartial,     'rdoc/erb_partial'
  autoload :Encoding,       'rdoc/encoding'
  autoload :Generator,      'rdoc/generator'
  autoload :Options,        'rdoc/options'
  autoload :Parser,         'rdoc/parser'
  autoload :Servlet,        'rdoc/servlet'
  autoload :RI,             'rdoc/ri'
  autoload :Stats,          'rdoc/stats'
  autoload :Store,          'rdoc/store'
  autoload :Task,           'rdoc/task'
  autoload :Text,           'rdoc/text'

  autoload :Markdown,       'rdoc/markdown'
  autoload :Markup,         'rdoc/markup'
  autoload :RD,             'rdoc/rd'
  autoload :TomDoc,         'rdoc/tom_doc'

  autoload :KNOWN_CLASSES,  'rdoc/known_classes'

  autoload :TokenStream,    'rdoc/token_stream'

  autoload :Comment,        'rdoc/comment'

  require 'rdoc/i18n'

  # code objects
  #
  # We represent the various high-level code constructs that appear in Ruby
  # programs: classes, modules, methods, and so on.
  autoload :CodeObject,     'rdoc/code_object'

  autoload :Context,        'rdoc/context'
  autoload :TopLevel,       'rdoc/top_level'

  autoload :AnonClass,      'rdoc/anon_class'
  autoload :ClassModule,    'rdoc/class_module'
  autoload :NormalClass,    'rdoc/normal_class'
  autoload :NormalModule,   'rdoc/normal_module'
  autoload :SingleClass,    'rdoc/single_class'

  autoload :Alias,          'rdoc/alias'
  autoload :AnyMethod,      'rdoc/any_method'
  autoload :MethodAttr,     'rdoc/method_attr'
  autoload :GhostMethod,    'rdoc/ghost_method'
  autoload :MetaMethod,     'rdoc/meta_method'
  autoload :Attr,           'rdoc/attr'

  autoload :Constant,       'rdoc/constant'
  autoload :Mixin,          'rdoc/mixin'
  autoload :Include,        'rdoc/include'
  autoload :Extend,         'rdoc/extend'
  autoload :Require,        'rdoc/require'

end
PK."#[�L���-gems/io-console-0.5.11/lib/io/console/size.rbnu�[���# frozen_string_literal: false
# fallback to console window size
def IO.default_console_size
  [
    ENV["LINES"].to_i.nonzero? || 25,
    ENV["COLUMNS"].to_i.nonzero? || 80,
  ]
end

begin
  require 'io/console'
rescue LoadError
  class << IO
    alias console_size default_console_size
  end
else
  # returns console window size
  def IO.console_size
    console.winsize
  rescue NoMethodError
    default_console_size
  end
end
PK."#[I��>>cache/rackup-2.1.0.gemnu�[���metadata.gz0000444000000000000000000000127114364637605013455 0ustar00wheelwheel00000000000000��?�c�W]o�0}��0{�S>�
�,1		�@�eC �Pt��&f�cl��B�۹��ڮe�+K+%���>>>��(���拤�?a��B�Y,�Ldc���;(�[���<�bG��C�2iO�Ya�8M�Pm�����'���=!�С^��s0��l~n�C�riJ��;+Ѕ��AR>�1��ӣ(�D�G<ME�����߳-�M!��|{ϖ�j��,4��k觫bJ�H��:$��ɓ�>�����K�	K|�kM�	���R��(�+�
{!|C}�`��_�����O����(�P�5�B�w'�k"�8G�ر�����e��Ȁ>����*�G�S�RM*�Z�B�d�{�ߍ�#o�4�^�+��s����K􅓶�.����m�\
;�qo�MW��J
d�l�l&����mC��^ĕ� ��_gc����*�ګ���+<)*�Ӳq�UN�Fv���R�C�[�(�/H&�u�I�P��ٓ�N�EՍF9��z�$�u��E�QF���zM_�|�4��<�����4>�R�F�Y?%M?�ä���,��o��/�2��]snٴ�Un����[;���g�D���=���|;Ŷ��	�2�T�9.���U�1����?�t���'N��ɑ��{��&���jl�Ǭ[3�^��t��~data.tar.gz0000444000000000000000000002611414364637605013376 0ustar00wheelwheel00000000000000��?�c�}�v7�`�.��2!�Pԇ�/�6%�mIԐ�G��M;jv���9�߾��9�o�>��}��$[U������q�L�4K�(��P�*T�lwͷ���⛯�������o��O���ƃ�o6��?�zx���u�۸�7l��?�'
B�T.g�;��T��?��ʽ�(��F��{��h�,����}��0}�=:v�}�i�Џx����l�}�X�}�Y��Xs�\G�R�~7�}�_p��K���#��y[�Y�ā��G_��nm����o=z�y��_��+��n|�"w�}�8;�؁=�n���-��}6�ls}ss��_g�%�[�;��8�5�ҥ廬����������V��K��c���P�DB��ҧ�GH��+��7�N�K�Mu�͚�Ts%�NJw���a��F��O�Ç[w�����ܒ���/Vp��e/:�Ww�o���*����R����Gw����,��w�B�݅P؞[����K>���y�f��])���g��������������9Z�[a�KM<���=���w2������7�j���v�N4�S
�����l�#v_u�Z1TD��,��sf���I�l��(������b�ȭΗ�bQ{�� k~��y�D�尙̠��8[X�+��r4�����=�6���>�|[�f%m�e����La��>_���ș�,1���z�Pl�@�
���)��L��"h��#H�@���aC�y�O+@2&��]I���7,��bb���\��i�jkr�vH���x���m�wK(��	���3V�u�M-'�
GT��8<����7�sU�O��*
��:9%J�nlv�wc�ӝ|���_��@��8��Jھ�qk+�s�z>oh��GW��4F0k���:��7ɞ�E*	/�#$� Y⛴P��$I�l�/0�&�D�Ϛ�D�m��
�Uc1@���f��:�;h�`���C�=N�$o*��~������}��]]Ds'�I
�֘���TcᓰҚ�ܐ5�6w�Aނ��~2�²k$Ef��g��� ��ǖ�[ˏ̋��,e�J;	�1&�G�h׋��Pl�d�5d=ƞ��ѓ
�Rg�2�� ���2�ٔ��\��RU�7$�Ԭ�4�`d�[��x��K�l̵��eM��UK����~Жc�:Ͳk°����H��l�"g�Vp��D��>�d+��1���n�v�(��Ê�0�hd�>@��ѻs)'G�s���mK�:���
&&rP�A�ǐ�D
*�+l�[n��j3&Y�X1���)��M�smPp��v8�B]6�.�G6�jRN��9E!~��3m�煂�n��;'�\��@3Ō/=~�U��W�_�X~R2Y����^�)�vGz9���'v�O&�O1�����V���.��`F�7,������Y��k;i��t��Z�}f_��/ Vyc�]�c�R�Uƒ^���
����R��M���6�/�s�m
AD�V+%���e�?�y_��o��z�{�����_��˱y�R@�M�c҆��\�.*`��mVg�/L� �ѿ
‰�6F���0��ݠ�f	�i;����P���������`p<��
�G��A���`�\�!O�����+4E�eک�%P�fVmD�	l�UM�=�st�v�ހ㮧�ڽ^��7���g������a[����<u���F��!��yur��ƞ��,A�5�_Ɏ^3I�׷�އa���BK	�`����[�}	��6���qF���h	��@#�
mԮ���PVM7����
� ������ރI��*.<�z�Y�ʮW�u��VM�f.l/
`O�Q�i������nBPY]hͰg���E�E�E����2T��p:L�ӕ��W��E�7ƮJٿR��*�p�D1W�[��	F�+��ꈛ=ciN��s�vF��O<��C֥��gWr�i�~:�����}��S����w���?K`����K־-�%G����U4(:��J�����^�9�b�[��o�^�)�S�4��Q�b�B��A��8�/~�^���{�lE&�pq�U��2�CUo� ���<μ �zz3�mu`3�8�[�
ݵ�d��m��ꤹc���d[^@}��P�T��5��{�BU�^
[����?��=?z����:�1H��v� MG)���H���%'�AI��S�7\~Y�̕�Ԙ���S/<3�k:)cK�;��OT,`>·t�<Ӽ��,�:/,Ǟ%v����ޠ�U�~�f�������ʨ{�#Ԅsp�u�粪���ZYWg˸.���=�>5�G�}u�"2�B<@�ڋ�i�67ih})!_ݨڮ�0���<����,� Z@c)^�Љ�������yc���P(ڕ�B����g϶���-���EH��$Đ�Z� ���%}��#��t�η%��—�H��x���h���'��Y䞛
-���ӪP3�O�������F��T����H"�ϸ)Ό��J��`��l%�u�=�{(i.&�`�h��i	�^H�6�n�.�5��=�V���N|��&6�o�yh
/,?�1���mҌ��.0���Jۜh�n�EIB��dH��0�71�AbP[�"0iP���fR�`P����օu���k��A�^d��j���҃�ãIz�G�ᷰ�Y��r
�*F��%z3�YG���Y83�"�C��ĭ�oY��2����OI+���"t�ݟҩ�ͧ/nw+�!�@����X�iGx.;81fZL�!dlo�X��ĂJT�(���yv�O-���"�k����ܮvn���m��숕JX	x�:��s�W�N����c+�
'"�T��f���qΗu����X���tZ䇸SR�
X� xi���w��())Ƃ/��6�zϫd�4*���b ف/=tZ�1_��)NE��T�9��D�
!X��eO�`�
j~l���0**��o�@�TC�����yk	�~�:�Yh�Y�W����Bo�9�tQB�ˢřVNM�A��BjwGO:��q�,�o�>P�YR���2�.�;��T3��$̽��*�(����7v�s�,WԖ�My��	XCV��
<2�p��E�)�"���&��>C�Zx�4}�v��E�B}��(5�@TT+�0
N�eWgIdŸ�}�{��9�����n�_���|�qw�����f�O��nq�'�2�}-dv%/��؂Ōq�`�{B��ŁX�Jʆ�/J�GY*�'ȵ��f��NؔA{���2���v�{�l�t�<�u��5^�og����/�����_�O��'�._���o��ww���G?��O��[�?����������𧋳����'?X�޿��_�޽�\���7�{[���G�\���~�<�\����
g��a���z�j�錬7����q��X<8�\�t��5��y���8���Ï�u��`���a{�q���o�n���e���vAYhD�(U-Ͽ/�N�O�^s@����Lj�`��^�%	R�xk�<u�E9��Nܘ1!��J�O���sl�a�o�����Y��}�xƄ��$�3LV0t����
�֦�d�aX�!��Q�4�C�?�
�cۋ�{O���r=����Ӆ�%
Pܞ��Wy�a�]Y����*�'�zVVf����^0���T]�`,�/�;?0��OH;�ˑuO6�����߃�d�CXrk�p���g�e�Wuէ��*	mK�R Þ<�A_+�050>_�'b�3��Ӱ����ԅh�h��_F�VM�G���p�A��R�+_�b�-�jP��_�ˮ��D�`�Г׭l��6���Cȱo���"�����J��?�*����ͽ���:�oc�|�O,�y�h�	��_zv
�A��*��+��Wnͩ���]-I�4��ڷ�8Q����A{8�����r��Mֽ�nU�ͼ�!�
P��C�k /�8a��&��,�b;n��W@+�#6#���ju�G�M�d�	�5cTw�������7�o>J���N����"\X>���+���B�	2v�(���潏ͅ��s��wv�WH��P(�Ҍh3��P3߅|�@A�Y�/U~]A\�-�#2&�0L��[O��^\Ԑ������9S��W\�^	�a��1=��-��������7B��1�\�(�
�3�dB|����=�G4��G���N˥t�̬��M�B���u�4ZA����tut�U�'�����r�A稍����!�B��؛�r-�̓.����l�=>h�kw:G{`�`�؃@¨%�D쪔��D`9���x���-O�3�Vŗ��w޾�k��5D��5�|��xRK����)��+�]���=@�9��.��g�طaq�X�ֽ���x��q��tʐ����n�Jn?�uDG��G�N��t���K��A��Gn#V�[K���0�{t���0�� ?��3s�TcDe��tZS�
reIˣY6\c����9���Z�����:����̧�=���#rg�&�>��E����e�kѿ-�k��YΥ�H�@nl�m�`����^������l<���%8�5��y�����הKcz ��[V
g���W�T�\QA2�Q�%�O B�:Z�I��a�h��Y�Ex��F�*�b!�X`��#�ÿ��Q�W��E]���m� 7w�]����'��ZoۧX�׵=�K`� ��J�u��$A�&�*�`��e`�}�~�V5���
B��'��p	��e�\4^����[��ttJ���6X���\g�{S)>"���%�<?^)�ru/0^�������^����j�ar��N�+Co�ܞ�<-z���v|�%~1a�K3<s��M<�ä����u��dV�FE��m!������A���ؒk���m2�SQCHKv�'�
���j
B��;{�6��@���-�]�&K��{lǾ!%r�=��3���~�u�F�����k-�_Ɣc�.�mN��B��8ܸ��y��#�#��k1����Z�����Bl;�=~�`��0o��)(�D����;ey�n�P�4���\�KR찻GxK��eu���\Z����yp2Z�/�'��	x=���v��	�n��_��U�K�,��]�1�)��W�k��`E"�J~p=}n�Nw��v�C�v��3b��r?��x(�������Bڋ��[i?bpo���t��o\

�Ui�Ƙ��|�����Y�Y�[�vz^�����J�Ն0q����׬t0�L@�yC�Y+�F��h�i���񢒆,��V
��)�'y�ȩ��<.�����̟�$�q�V��i)�� ��oѧuF��O���t 0
u.��b�:Sv`,�웉pUHe<h�fre���
�ɉ%Qɤx0�ܓp�DM����Kn���ߪ��~Aղv�7k�]o̭p<{^�ե[a6�{P�T	H��C���:��ZW �Lg�"I@7Ӧ�2c�]����
��Lob�m�N�")�Ĕ�2�E�L77���a��X�_�NUS�M�"�y/����[��z~9��UW>gLq퀖c媆;�ܟ�ͥZȬ�rq�>:"0S���*����}�(e��<ª5D`��
{I��z�+[����ƄN!����(�G[�K�)���ʚ��
?���V��E��=Dd�X���
E?�����R$��[es��T��7k��b�Us��UE2[�eɸ�Β9V�1���DM匯�\�����U��=u7�
E+ӭ�g*@�"V7rE߮���Pr�؏\����
잎�.=ߙTN��48�u�?%�J�'Kj�/#B?&�u�r�6��Z"C�1�$�̄b�	�ҕ%s��B��x�Za��C賦bV��<�ex%�^���諑�K^�?JX�H��}�ɝ�V�:�%-�7F�2��������S�N�4"��`��4h"��1�T�e4l4�Pk����'��+s{����t��X�>���Iq�
��F��3�H[�jS_�lU�jQ�Bx@n�:3}�u"3�;3-,o�m �z.�.��з�qjp 撒�$�6�y0u�H�K5a��A!ŵ{E�����M��R8�M�A�:k0�$=��V�hl�j����X8[�u�i�bp�:�UA
���
a����q�lI�ٶp�"ȴ?�����v���v�֖Z��_o14�i�ZS���@���:Sk�K�@�y��F���*����p�搓gO[���+ix!���}
��c@V�֪�*
<d/6�Af��k�\:�t��
G�C!^ѩJ�P^�ڨ��T���oW/���m�D�d"��ݓ���<��*��q�m��6Z��-�?�z�">���.����Jlu��!�g�BBs]���k�xv1��v� GI���ְvP�����5yQ-i|�F-���4�Ed�������&
�={�Pʹ��i�Z�����j��:�`���Zd;�H
2���X?��S�J1�ȋt*��Pѵ~I�TpU��j�e}4Ѥ{���Ο�ԛի*,j�c��0�~8Wɽ��\$<�5��3�Nu_���?�]oλ���Z��	]�O�$QI�;��Mɤ,��MX��k�5Y9��=�C��B/-P<�κ���� ������@�OkeM��hq�"��T�u�
����1q���uuk{
��آV����&Ҧ�s���r�ᄚi�X���M׷մ$hG�aZ���Kk�0�^����_����N�Ş��ͭL��xcdɘ9�P�S�Q��c=[} en�O�A��X��+�a*��9�֞��$#ȟ���u�9̕���D�^J��*3�k�-�%a����%(�!�h+(�Q�8��Zc]���*��
f�4�~�*�d��3�Zr���+5��ܛ���H�t�-�be�H�E,2^�h�����^�-��|b�������^F�(��0�J�	C�rQ+1�V��2SLD܊R녶T����&Ƴ���C��c�a��U�N�z�7�^�1N۳D��DY CR7�y�AK:#R���`T.����@ >6�Uj�Z�,6��"u'��	��
PFnU����t~L���ra�J���O��N��U�D@�n?UYsb_���3���C�l�h����U�Q��ﮐg��ٌ��:���K7[��-�-s���L_�8anM�a���@���3��L��&�A�G�1�PO|��ў_�6� �5�d�K���5���j�i�a�,�y1�4�R��BB�r^���?��:W�)5n5�5	y�d�8�!+9d�����n���n5gؓ�H�� �3����͌r	ÑB��
�kݻ���y��I+��ԧQ�L/�lAJ�5�{���|AΣ��閠�֖��P����3gCt%���0�
���B]*%�iQ L#֌D^a{�� >*F�B��9�k��a\!�b�+��t�p�_a��ؼ4�y���=��m���8�ՋGnN(K�hdd����Z>Օ9=r)�a>t�
���
�kf�M�ؓ\�Nխ�a�&U�ŧ�ok"�	.�����JW��*cDr�z����q���}��d�GKЉ"4sfu�(L�w��^����C�Җ�����<Bm��j(��u��%w�䑂��AC�[�>��^I�W���̠��W��}�.��j�[�%~n��{�=��u�>���;��^[���Y�Z�*뻦Q\�n+�x�w>�|85QH�H�s�]h����ӓ�*Е�<{�n��B��$�����*�gA���X)H��S�$����>���6[/e&��[�#����f�@��jE)�`����S�ɭ~����g���pL�4Ć�ҽQn��t�����!��ʋ8_մ�D`��
���w�������������3��x�'�����Z�$��:�U
�6��٠�`P�e����[�S�c��0�B��ޣ�[z�Gh�� t@��>:�;�(�f�5�����V��Y}������O���Τ�q[��#۵�%���3����x8�AQ�G`��Fv8ԖT��UPr8��Q��/�^��L�������P.�m�Cy����K��2	jk�9_�U�槉Z����y�*��� *�+��R<�:m���0g��<G8��C��L!I?���?*��E��*���ԛ��3bd��'��a�`'������:9�b
&���8��"�H��_�6�Zd���%}�����gثU-2���S6���~������A�����2Ŧ��ɖ|�=S��:��
�k(ꋿe+�n�KF��g�Ё��%�7XX$��\� ��'u�Dܛ��1/������U��(ƥ���L\j�q1���ԛƺ�rŕ.g9�(s�`F4I��;�`�>y&�	�=�&-�
1�iFߠ�;Z�0�8�������(��z��XƑ�+kw_J�I
��9������˾ad�?�&�Hv!�vSIU���ż�*J~Zֿ�s��r�NE�$,zqV1Q�#�p#^N/�lW���>7.D�ko*��dY�tU���@Ԕ���d�bkI+Ri�T%�5�4��J\[����uqSK���FxSG���<L��5@�����L�-�h6w:G�އ��ww`�a�&�vbv��H
pA3�#��\%�(�ad��$ړ@���0�,����l�c
�93�[a5�
�?�z���9��sS
��	����"����h`r X�P���&z���1��O`ܩ�(E
�S.eЅ��T�ɁhU��M�)��`F����'�{��Ndb��j�VB#}/����u9%%�)�Jb]�NS���Q��u�6���B�[��Hk�.<[�{�x�`H	v��~��W�������9x����!zj�a\������%o�o%(�c�����,���}����M<s�kKy1u>�J������PJ�0�Y9��S�0t����k��eW���<�����w��D�p����BT���,�u����}/
Wϋµ��T�73l.�ݩO�{v�o\�`��R�^C|h\5��ii%�
a恧0�I�=),�NW٠��T�_e�ƶ/��qЊ��s�|]�iM���"n�}��'�3^'&�a��Яm�Ь��}&�N���nr1�A".�d-�Y4{��0��䵹�%����ƒs��w	�5�p$�D<�>YO�W9}/אD2N+E<�T)W�12M'�
q쒆+�qt(��K,�����5
ʫD�������H2S�Z�fH{�	I)}�g�6��"�#�64r�a��Ex3wbS��ͽ-s���9��7����뛛[��-(�;�����]���t�0��fc��^��8��y�O�^7��ͭ�)�����G��ͥ���돀�ן/pkƎxtn��w��`ء�W[������}�[�Ÿm�,t��)���@�ƺh��Y.۱B�]g�g������_q��ƣX;��"��^0�,v�y�>�&{c���l�� ����u r�#�>���z9`8�֚�
��y�`e{{�H���l���AW���"�Y~�v<?�T��7é�]��Z�~4'�#���{���y�Nra	�t��}��"�O����A/�Q��#�&򽉕�R߭�5�EA`��^
|~��{��9/k��o��c�^Z�@����g���s����,��u�‚�؛��^�;�`���� Dg��A�n�ΛL
�x�q��@�Ȳ����_´�ܺE@5�)�AH����g�o��ʖ�K�bL^�E{օ=a�ܱ��YS.���x�o���E���凍߀������'�?���b<s�a��Lͽ0,��<��/r�N
�LA��zE@���d!���8!���bfs��?��)zc}��ۇvr�H�h�^�<���X!U����{�gE0@��K��ؾ
����u��dE䉾p
���z�Z�Bo
���l[�\�����jg�ܴ� �������w�Z�����~��o>�" <�,u�P�X�̑�
Hl1�ޙB��1�O���r��3D'���2�Š<Ä���~����[�+�H�M�Kq����7���2�$	I���Y�/k�ku���rJ2��*��8��H�#�VՇ��	.{ 7=� (A��u�u�*����Ӱ�DӬ�&66=�0�#����Qx�fhէ-؀7�5�N�`@/$h(ID7�/g���JS��l��
��Q��%]�S��6�\�!h�Je������	�*P���dVeQ0��KU�!�8!K�O�%��-��_P�j�`g�۬�}9x��Y����u��{����s���w�ݷ�����d���M�h���?��>�J���N�u�v�b�o�����5w@w�F]�ʦ:�>6v�����ck�s�|��^vG���n���q�7��=h�����q�߆�٣��K�R��6�Wx���0�j�up�]�Zo���v��z�W����L�}���Z;m�j���9����a�U�ju��^	�v�~_a-�ow�f9?�ӃGLy��U�w��:k���+���=����P�K�@���hI͌|~�o�
��v���ce�n�|�<��]�&�����ol�}�����a\�8��L�'6(>��1�*l_$�ZUq���sD�ɽ��$7�-��J��n������P}M|�O�Ec��v�`m;��Ț��FpqV���E�n�\��=��˗VVXmD�!�`�?��o��Sn?�,�:�R���f�0a}�r�}�o�dF�҅yϜ��4�қ��J:��|\���c����X˅M��H�B�ߤ�yH>6i��@*^�+��]oNW�e��C!+�J�o��1�6�a��P�\Ĉ�@��X�#̀�P�*��͗�.�\�pk��}l����h�*T��(Y��ҚL@�e�
V߂��Q0Sچ����<%!��yL�q�Ԫ����(�O�Ǒ���_q�������6��� �ߗ+�{ ��`n��	N�k�7��2����:)��������������ZC
��checksums.yaml.gz0000444000000000000000000000045014364637605014621 0ustar00wheelwheel00000000000000��?�ce�=V@���"�o�[�����Z�Ryz7)��cfn����
e�^�ׯ�NJ{�|��^c$A+���4��2�a���0�h����n)�rm�V��{|?y3=}�kMG�^���Th�LF�W����]����f��)��|"D�e�YK��ljZu-i���P��G��d�u�3�q��/j���RF3�m��.�4цaB��Z��oN+9p-^�����r.qT�m2K�uB���YN3�5�G�S?�`�R὎��[�I[@8���As��*u_~�
���PK."#[�"����cache/rack-3.0.8.gemnu�[���metadata.gz0000444000000000000000000000230414442217575013450 0ustar00wheelwheel00000000000000�}�d�X[O�F~����%���-!me�Q	Y$B�>�����=ݹ�saY��o��,��]����9gf�s�s>�1��b���7(]v
2ˮ(����q�"E%d��r݂�(�&�ԩ"B6F/�Y�]���H��DԻZ�E19Z��Kn�TPi�{n �
�7��Q	��eM9n�˯��_ijo⯏�l��?���1h@1P%���1�7�kD�y)���CA�D�rS�^=��x��������Y����ڄ��d��n� ���-��5�U*,<=߂�`��XǕ�9�aٹ����W��#�4���ƾ�	0��߆��%|��G�f`K��
�@�+A�Y�rT�6I���yA
���h�h!�p�,h	��=�VP�4�qm��K��5YT�y{ss��Mʶ��
�CX�Z�\6
Ȋ�I���x��x�3���[Dž���˳��M,��Aja�nV�,�9��z�V�gHn�ȗ�:.��p�^�`�UpZch,��H�a�H�L"����`��n��O��"��ҷ��l�;*�`�hhn�.�� ���y7O$��'o�/N���O��7Wg��9�h%�5O�����M|~v2��������$~�HIL��)
�"��E��Kk���6}V�l
jy9�`�ڱ�Ӥ��ܣUZ��G�P̽�c0���l�㥸[�6
CImI�GY{�6�j)�]U�}4ҳpwppW�����B�(���k��T���п*��#d���h3�8:D�-a'��hhVe"����+9�Q	OY�t��^���lJ.G��A�O�T��z�P��X�n�<�@��������n�o��H�|"�1]���0�5��r#y{��|*(;�a`�o*���\5~��+7N�E�0ᜭ�
ip	�гSZ�AΏ4�5{�ل30���荐�
qF
��Gr��ZBC+$�s��Ҵ�E����6�$�T�0#���GX�8�
���U:�L�
߿Sʭ�D�2|�S&���E�M�8�T�5t��=iG��F���:�j��]9�3Z{SB^jO#��8,�
֪kC̢v��.��l�����`a��,��=���kȾ�����ks�ar�̶AT �$�m
"6���~Y^)$<��Yd����(�^Jj�9�����8�cL��b�S�p�_�u:�(data.tar.gz0000444000000000000000000031257414442217575013403 0ustar00wheelwheel00000000000000�}�d��vٕ6��QT�-2��M��L�)���DIY�_�"@�$GHAU�V��?�{ܫ=�I�z�7�'���%��]]��U�L"��7��^���nO��+����t���#��������t�[�����[�{�{�~gko�A���yf���qM�i�������Qp4�Q4IG���d$i�&Q���H�b�,K��EpS�^�|%E4�D��I�^��2L�4	����4,��z��<��p0��8M���&Q�GA
�,J�Q��(��n����E1�67o�K�7����t3J6�ڝvgs��h<z|ܡ��?�`�����촶�6��mx�G�"��Y8��(�ig�8�A��n0o���ēnpN�Q��?>���=wQ�y�'�����l>�l��F3����h�Et&��
����Ңv���G�;n�O�{;�?��i<.���%�x��(Â�8y�-u8��Ωu�=��9:]�^���a2��o�~�}O�"�����w�����E������.g��`�ش��k���]�E43k�y��5�<�5���nP��|���[����mt>'I���9��t>)bZqq]�[�\�N�)m�Vo���`[E�b���־?�vkwwo���?���'I����Nk�3�E�R��ߝ:\���/�I�E�uoQD�?쥾۟�t{r�{���۠��䲸7'���I��,�9.o�+��������U7��Mx�<�{N��"�˜�}�eiF�~D��E؁PG��ϳ�ppBK�Mo,���D��&�R<� G!�`�^��:��N�[|�:�)AlWVL�<G����룳wW�ﮮ�~<?���*���{}���K��?lI�}^Ro��iQ�E>m`�ǟ�f�o#Bq��[Zp< D@��x *����s`�*M_�=��t�f�O�ԧ^������6=>|x�#�D��8}κ�<'pLҤ5�fY�A��W�tHM�Q�y�N�;9����JЎ�}�_�ݨ�����_g��~y��y<\'���q`7�=���l��Q��$D������O��DG{XuD�X2!rk_E>�&w<s��,��ƄZ�(�b�^:���іwx4;+1���9!�g՝W�o����$Mo��ЛM�s��~ۮ�B$��� 3+���:�*>d�l�ӌ`hF�=�π0��]&�A�H�C��fЍ���}bX����YX�W��.����z�϶v�϶Vb�b�y���ʻ�pc^�v��*5ݕ�<?>Rv)gZ���و�5�!t��8-������<`�{�q��I
���`WA)1z]4m��l^<p���{e
���8��q4���sy�A�9���9�G	��ٛ�t�9� �`y�*���EE��3�?=S�=#��|�2 �҂<��tBۧ�__9f�>�E�[�;{]Ԯ�o\�W��f3:-�ք�?��0K�DI�o�%I����R�� D�#9W�C:t�	��ķ�@Š.�4OdZ�Ƹ�E�כh�3iN�QJ�j^�o��߱uC(���{��i��I��vO�͘�T)1fA�	�5Ƹ>�(͉���SX`��#�
�%d�ؠ��L~1	֣�^^�x�1a��i�x���r�����$wE�q:�B�9$&,�m<��ށ���a]v�4����X#m�8�o�K�n6��j��}����ܛ�:�"> �^�]��m׍o�Qw����>qO�l�\�$���u넋��n�(���4a��	/�/~w|q}~qvuvtv���S�RׯIx��
����H�.��:L�ܾ�ƈ���;����/B=�6�dHO�}������&�p:�pN�3\�iס:�D.�I��dѾ���u��批��c�W概Y2-�i:����~?�� �o�����yQM�7��b���+_F�P���{�8pl�y����@��K������J��v^Q��H�P%(��T^M��1���
MF�����n��[�O�L-�����l<
c��^A���?�����0�q�y0� W�8	t�Ҕe#}��t�J��;#\�9i��m�mx�zI�;8�<zs����Û���ӓ�+,�B�( [�O�c�Q�
h�q�Į�}�M�����:�atG��
�
B���&���XD���W��һ°�j�8K�<"D=H1�,
F%�,�F��|�����v�rg	
N�e%SV֭���;�}T�R���H��L=����N���㾌2ZP����(�7�E�l��X�)"X���?p��5��#(�J"�ä���1�Ĥ(k1���%���4(��`��~]Fݎ���~8��i��`NT�
Y���	&�=s]X�y"ˎ��_"^e8N���������`�(h�R�G�	�[0P�ū�`{�9tG��,'eȭ��>Q�}�?{z�Ð0��u bC�Ce��L��d�&ΕՖ=�Sŷ�o��[��Ӯ(��C��z��)��.��<gu�Uw"��a<"�_��Q���$gѱȻ�_c��<�m�e
�o$���2+��ّfO;���U���x�y�#���a�=/����	�8�f�_�(�p�}�Jt/��a�0���0����DS��{��4��w�
/����GD'��0
�Ao�`y|<3BB�Q�n?Q�n/2��Wqh�=�����æ�v<݋	m�CL�$��rf��⽚�1<U%=��YHЮ����x�����'�^Gl�<.�ow��P9��ae	O�>l�Ԏ��N&���ڎ~ƬK+���hF({�y)qkK4��z�Ƈ�$�ȏME��T�����DԲ�\�����A(��0K�N�l���4/T5���J����Hu�3Zˠ���I��1dGX�� xu��^~�l���Wĉ��>��*l�2�*Y:���6+%�a�,���<IÁ|5���@`�Y^��t`S Y����]�x�UV��v$�V��Q���G#���q�Q/�	-�3�?��<�n�a-�U@��'=1��"z��-[}X�ELf���`J����!�Z�.�e����lؑd�Ω�2(�nZ�D.~��3��֛��<�w���$B�Zf@"��~���šО ������+W���vpp�fG�9�>�Vzq;~�;�]��4r�Qt
e��l�9�E����cz+a���DC�;h�o�xbxL��[ӡS;�-
�����K�qcc�1�և�1w
�%���3�"W,f�<5��5��>��Q��S\�&�g�h�"����$�ϋ�ޱ8�
���֝�gAwiv�G�@3ľ�!�Lϸ��~S[������ͩ�b�'l�](�#�@r���6��jz�U��{�2b��g.�0��}��)Z���0�����T,�q�z�U������|�j=k�����1�i�0�VQsR�Ԯ���u?����b�f�"���YDm#!~��^	v�;v$��p2��՛.Ia��}9,�a�*�=�< ��� S�Ή�����a�NՎ�2.�P_���u�g�PSB1��I5��P�aE�n�,!7���F���0��r!�Ō;C	}��ݧ�	|��vE4��N�
��[FbSB�l�?z��h��%�h�<�������&�Ô�E�=�j�F�Јz݃uV�
��#�E��>�8�T)������gG7�a����l��n:?�ug�ۀ��ԙvpu��@��JR�p'}9���]���&k7�����Y���z��#�ֳ�iڨ݆ȏ�T�m�����S=���K��%��M�h`T�Zwj�Y�
}UK�ѡjs0�����OkEc�I����g!�4�Y�cn��Z�� �\D���5����{p���"gxR�V�a)��t=�^�~�zD�l_;3�j�e�'¦��{�����SU;M�7a��v�O��](�xG�O���ᒱx���5{�+�c�q���@��g~7�E��9!4�ل��"����ΚO0֞��̸�Fb�&L�Io�(H@���/<�Yg7�g6���SCn�C�wy�8�w��&��]_�{�]7�?���N\�W����"L�„�~�0G-y�MJ^�K�/��u��nu��v:�¹'��{�n"1�v|���P,��@\�U�eu���
C�D�H�o���d�=
����=���L�Ny<�����ߎ�l��c7Aߟu����#���8"�7����
�x�N�5�.u�'b��U�������cp$7B�ͽu�:�֭�e���f�N��
n�����_���Mx�nsM��f���'��J�>3����bQ>�������>�Ў7����y�x������s�Ќ��A&<�#�nĬ6$2���z�t��;�vg	��
��Ɖ`�ՓL�i�a�&��S��1����݊BCg{�0����k��9XÐnb$@]P7�Ě	� |"Һ6O�=�X��XqƆFY��.GP�M8�g��O>m��|�r���<&�[�_�/���Y�N�R����/�̖0������UH�g����Nģ�R�mo��+�߯���;�>�w��17J
����g*M�|����TԹ佁K^�;��$y�@n?º�P+�U��*
�,����ɉS��%i={qre�J�'S�Vn#>�M��,P}��{�;|{�4��]\�i��͙x��e>} :x��_�a�����ʺ�R�50�e�(�Ɯ��@}*�оK��Y6���b&�o�)���wğ�!
]u3�{|�V�7tY�a�W�SG���
De����5�o�����O��=h��0m����D�OO��h����hA�b�U�����6u�^��/e���6F�i�����$���
�s��U�ʚ8�� r�o��։Q���A����a/g��E�x4�G��0*k���Ɨ@�W^����
�b��Ւo ;V�}���	ѷX����)㍾�S1۰}�{����׬�]C1����
yX��5�,�K��U�H�K�-f)m���ʊ1c<��X8:V����`*��c��w�%�k���:U��&���X=M�OP�|���9;h9…�M��x���Y�tث�.�xDwp1�W��d�/�uT����3i�R��&���K�4�ɰ��d��[���藷P�Ő&c�5TN|Q-���ͻ���o�Q�ϖX�	��Dt�(��������d��Oj�+�z7�h(^U�̊�G�B4�R<%y��r&�#ף���*_?�8�o��v�q�Ɨ���q��	^j��%���qUm�òӯ*���N�Ҿ��D�4���8(�ˉ"�*�n=X�������D���ݧ���g���
e�
T����X�5n�#�P�s�A�p�b��x��I�C���h���|�Fyy^J�r�r���K�*B߳���U^��	�JL@	2��-��E��b�ܢ��2ޘlc�|j�J�_����P໳�u%#��*�TK�̓�m��e�Rݥ�k9
�n�O0t�-U�IVQK�l��Y]ds�Sc��h��u�IwQ/O9�o�>�Tqn}��>�;��i���T����:���Q:x��,�2���͇Z!k��z��D�x
W�t旄*@ k����K���̈9"g��_�	�rJZ�{�m˒K��&�
�o��Y�^�4.Q������T�Rb_������l!k�@|Ì7��Ǔ�ۧ`F	�5�O-<�TBHٖH�'G���<�)~��v�v��6��t��
�h�(�����(n6��RV��7�uZ8E_@��u��~��_Z`���J���ᘨG�����(�V��.\�zP�œ����p�9<;4Zˍ���iz���P���.�tG�n���wꇗ郃�w�Nޝ\���d~~w�����w��;L�0�%��W��
�;��o�;�Jn��!Ur� �\Dڈ�qF"�1Fl��iDX&f��aM�D4���t
6|_f�Z>)�(LPr��v���e�g�,<��G�[����w'*bE5{�R�����8|���w�I�[�R��e��1�@E��&G_�X�f�/	�M᥎&i2Z�t�s�F�U��eU�n�!�د�Y1,�L�T�1*��[���(,�:iߋ�6KHJ�O���E4�;+#���5S��M���+�OUgV����y�fW2]�gMn��xU���87a��(��_٨�aq��s���a��"t����c�u������+�&,e42
��,��>�1�/d��
��3;����z!ZS����X.��m�5��M/QJ�>X�E!a_��"��ć��#���*�y�!t-��#��`3��PQC�aφ��r?�����x vM<'�q�:�W�9��^UnU(a0��f��c�t��`��kߋ�4����eè6����J����@��ރ����ܤ�Xԅ\S"R:!��2���ß��b=�$i{�{�O���O��ˣ��Ѻ/�dp(����^��qzwlTFFbe���8�J��Z%F��}���C�^+���aǠ
͒��
��ϵ~i%��9����N	A(~5�z/���4F�}yyz���g���r�4�k(���m4!A$a-+�+��$.�7�g��F��_�Y�3p�&�W]%8V�i����:<�4GQ�+�ON�e�G�I"��%�����0Oy���X����������o>ȩ��ʄI������tOk|�Ϛ��!��\�}Hwc�Y�/�]/5���ud�4(q��Y�S�uT>mh�=ُH:uq���ɻן���Ӂ(�V;�|r��N�y՘�<��#3��X`���"d�ya�`�vI�L-�ð�!�K��5d���"�G6���^�\d~p�x:Xo(���f>Y����(�|O�-�E);v�/���q/�(ψ?��A9��"&��덡�X�`�nTr����9��,�����_��3h&ƞ���/�' �aP�H���=q�]��T�ȖC/��i�b�1 �����ۨ�2���@��,2g�M�L�uF�"�}:�ƭ�/L�a~����,�[���gk��$����
�C�p3�LL�R�
lw�a�/jW'z�E���b���Nņ�W{�
�f�'��7�����.�����3Q���΄���Ţ>�$>,��|8�|˝9%\VD+q�g;P�8���b2���������K7;�#��&����4�!�w��V�h-�Q�i�VH�on��\���SΊ	.
�z}��|�G��!��]�~���/�)~��x�����-=U���A�x��4-Zln�e)
�LK8�4���m�� �b�M�����>���0Xn���o�o�z+s㽪�Y>���+$4��?_$}��…$u�[8&.1�@X�]���aE_�kZߖ�Y�����[�6����mA�U�xp���w+�c�!֨Eo=)��7���/��q���!t..�Z'-c�22<
��l\2ꅲ��f�a���Ȭf�p��1A���~��=�Qs����N��qC,���<J�i��!�M��G����Hd7�Y��$,�`�����L��	}�I�o��J��Q�ޱ��[�H�
���7ßLС	`�jF�`b$��(zG���H�I�P�b�z��Uq����F���%�ϋU�7�X�i=
�?��k�Oar�����$�ؤ^�^��/�r�A�6�կ�8{��tD���"~�7�(����s=%�W���ع�	{0�₄ޢ^�r��	u��>B[7]�0���8[���\�S�ޱ�3&a.�Q�|��W����\}�"N��7$y��:�i/���3*?��^�#*�Sb�&��u�Y���ݕ��4��|xzz���4��\|�!�".�7�����ܳw�tչ'�Xr�O�Do��q��
|�XZ�*����Kj�;��_�|J�3��xj�-I�
��z�d%��5np�^s-m�սF9QB+$�:!�}M�Qr���#�66���s6���i����[�8�{ͫ�r�h�֯ˑ�Bl��}-I	����(�!�'
�3�x�vq迢�������pcC���_��������JZ��Ed�j��
Y�����j�ue|M�u�[6cVZ��冷b��F����f-[Ǝ��J� ���}��>�W��S�(	J�Q��}c�
Hߊ��D�C����xs����

�i�������n��y8�ו��=�s�7�C���:���[��o贊/��j��\�[�@3�\���|4IZ]9<[����̤LdH�����
��}�Yg8v��=���=�E���K�K��W"E9~�� 9�(���RA8��A%+B�^�'ɉSE5{��㞉�����?[z�O��m?8��t����*@+���"(��f��jDN^rJ���&��ҵ�YY�>�Y�JV��ª��2pz?�{�OtE:��~��#�v�X����+mTBt�����t�=�p��B���x�nS|2bx`D�Xl+<�:�GF;^^���7U�	ZN�W�X-����2&�Ǵ�8Z�e���/U��F�����k�a1�\��$fA#�O�qb���I:�,�*��jH��8op�OD٠DU�t	��_õ̰��YEZ/�i4���h������=�-:�c�1�rnhXt�N��[	g�C�
�Lj��>u��y���j>ɉ˪�K��7{n�Qm�,=�>t�F� NB|�Lh�HC��3yZ�2
͎"~d��Y�D�O�jw�j�Z;[K��c��?M�B�`&
���S�����P2���p�B���
?�le,n��E�c�*;��$��)��%B�̗h�1����21�K8��<&nһ(��p�7R��Pj��\�毹=�N��A�6i:�j���J���*���P��
��}^�MBH������p2���xj�H]���)��%���|ّQ����Z8��Ұ�,Pq��7��ƒo�#��Ē/?�f�H��V/.Lu�?��Q>iä����"�H|��s��8��7��z�D`9��U�\��ȶ �sf$I�ж!"ͅ��Z�d|U�1��p֦E��L�!�͢D�M6�"j�z{Z	^�8fɆK4R�%���rW����Y=$�J�E$�,=6���d�g�d�z�ܜy4o�$��}*�Zf�-�20lw��j�
c��j{����H�[4
��&�d��v���˨T߽?=�r8_^.�fS���XH�l��U��o���V'1��vms"�B�$�+���z�����y
�뛸;���%��=Og�8D_�F|��};�l�Pi�i����o���04@�3`�+�Q�4��a<��M4%��ߧk����|·+��|�/�p��V�p��dx��##VE˨ѤtE�X�.����H�u'ї<�R�����)Ԧ�u�A�q�U�̑@I�>tz@�K��1k�\ֈ�fz�0�tE����S!���zj2�T����o/�ޭ`����8\�&I�a�ƣ�M�e,6�Ewyp���F��"�"M"0�%��{7Ń&�����Sx1�Qu�r|n�ZbL���Zd���M�Iz5��\j�J|���+����di�p2���=�� ��E�r�O�5��~a�t��80
�6f:�l�c�[�S����A
�1��$��������r��k3�pX_7XN:-zwC��y�<]���0M7��8�Œ����)���&��9���3M@�����?o�(N�R�M�������.Gz�ML�s�������øM��5t���hu���8T���ܫ0������ETĒ�E�NSxR��G��^b������/���~�0b�04��?�h�c*�x=>	��o��
�a�BP�#@�m�K���NJ�H<��U}B�$奱D��l�A'�0�/�RL�ۓ�6x�H��-D4rq�s�d��Zw��*��w����Di��'w���8�*i�U�8pҝ���)�Z+ɪ^���w$��+ş9Y�PKI�`j�{��E:ϪqA�WqH:Ϗ�Ĵ����Ҥt<\b��]9�-�{0�pa�4�w�T���G�E�Eawz�)�rA1��94ʡ���q�8w��y�da'��*"�1ۈI/�"��|5�����Wts���2xy|~q|txu���^�B~�!�>��m?���3�G㶲�O���vY`6%
ϑ^�{��w&��	e��MH�)�H
]~'l�ba]ġ^���c�T�ez��t&�&c�Y����k�k���4�-
���a��oV�E����=bN�K�(*J�Qˇ`v-���Hi���@^�-6�1�ջĞ�_�٫'�N�z���� �o�ž�^.8�Ðk]J���.^&`<��sޯ�'E���l|ٟ7�-'!��g��D�=��*d�fp�&E���8kȆ�2ߴ��m����=/ݪ(u���$�1g������K��E��#m�����!��~�j���ܽ\pH� �0�΍_�������b˸Ꭱ�ˀ�5~�yx������s����?��<�#z�
�7~���0��c~�G�3��>��U��a1.��
�A��Jq�X�{�FS���"$��u_]o�n��.�=0u�ck;oc#4	a�ڥ��$����Ϝ��+˥��Cɵ3瑘��l��j��OV�pb3GZ��N��#kᖠ��}�Ko�+42R؍\�pB+ȗs�$d��R��h�
Ns��=�e�?B�{�+�N����r^��6~�_E�s&=W)H�p<�0��D������4�������`��4�J��dG��~�=#
!�_��W�-}d$��3���}#W��$�I�œ�g�;P.�wG2�l.���d#��bԕ5�k{���Y}��_��dN!x�݉~�S�[��Ҋ��ǝG3�2SZa�u��ǽ����瑠°����j������fM,�Ȯ@g7��ӄ{���2)�2iB`�ϋ]��
�	~i�J�pNjã�߾?�:9?���>=y{r�!�|���v-c1�)�K�~����ow�o��#��xA?��
�5$�U��{����8�Ϻ�a,��0��'*f}��3;H�6R�}2����IK�A�A�̠EXXh��A*\~H��L�������4���t��������9V����g"uxtt|N�C����c��s���d���Mo30�OZ�FL4rl*�Oڣt �k4���\�zj3�c��-͌�%:o?ݒk��s���>�݅}�^�4�Gsv�^!<�y���ms�%
oJ������s��j���HXOk���?&k뛨L6
?��4H��^�I�O�	i@��xK�
g�v	�3���0=�Ay	xҙT��n�3./N�/�����%a�%���旰ñ�������4�.M�⅖S��D�T;�v�ל����tS���y�{��XR�򰌐������C#พE�~�u���2o#&)�>�I�L\ngg��RXQ��(4:]4a��O�A&Wo2\e��2�N�#Wi�yRw/�n�;�`1���a[�9�%��V@�=�9]t�H�Q D!��Q�����9�p�_�������λI���~��:�E�g�eF�jm+���<%��Q����0���#���f ���c�<�-%+��AU�DE{�5�;�>I[���2��ꪂ�3-W�&����1�����*��0I����w��Р�A���q�-�
��J<Q���Ph�7�!k�E*�l��,�h2��#o��WA�a��G?�'r�<�ưD�	��l{[?U7�N�-��"��b&����^�8��p�y	���k��&�O3��R������	�\�"��^�A4����-�u3}�O�{��H����#�Ǫ���תq��3����.
�t��ztq����.v�PY��G�\���d���0yܩWվ�#�ϧ��1�;�;�n�K*B�M�hMU͍����
�"S"��8 P�/�EBnK���*����JMZv&j���4�P�(�X]�w~�F$�_���QN&���{�-�fRc2����L��e���)���֍�#���$�qB{�2���5|�f�[Bdٰ���y�AQ����ʾ�X@��*��+.��@g�q[�g�DD�?wO��(vI{�Qk�
�;�+��P�}�k�Qd�Yvxꏗ�G��Ã~1XFy\��)"|·]Z؉"����yd��X��$����JI��?��<�!�!K��b�D�&�
B�B�u��u\:��Y'ͽ��>�*-恄Vӕ��la��s�l�L�8OM&Ŏ@%��^��b���ү֔k�R����v�<ȑ:Q:�j��Bb�=yƴW��u�8 z2b�W��Z�ƙ�N�g�D�ʉ��	�.���,vv�V8Nә�sڤ�D��??S��roN��&����;��
.q�"�E�
��@�G޶
��/���ٔ�חeRs�VX7y���u80��u��B�����j�2s(E��ih�9S��ޠ*�9I'��>=�Z.�����������i����L{,���]��U����5�j��{/�>[�f��+p҆O8h<8�T�,H��>yv���HV��M|}@	n���z�t�h8E~��q�㍟��Jm=�kj�;Q�1��+��J�� �g1�;�D1���[�2h�|�a-쑗s64��yR��m)���y_��^��Z\�.z��R��9Ѱ�k��w��.�iQ���`�W����2İ�똑A1"��[8�F+Jr�d�b�@�@��"~�^`�ё������
��籍����a�=��UX�O�:۬�VbPDr�j���W]���z����&4脮C6b�jbU\B��rL�LP�C0�ۚG]W9)���}�֊u�w;{u:	#��vvy]�..��2����J��&��7LJ/7I�W�y�EV�+qE�&�#�M�+az�z�q��x	��iUM�Y@�',��)��.$%f�ޟ�b���di>x)|�����!��p�I��޽���`e,��YsKI���$��$����Q:÷���k�]�Z�ȔY�Y��!�%f��W�٭���h9u2�	 �ˮ`�f.�j��D��txV���e�RΥ7���b���j�,E
�v�NJd*����3#�KA�d/S�-)���6M��X3��=�o\�=�q��Js�]�}8͛��DM��)xN��8'�x�\�ڀ�Y��)��1�s:�ѓ8����Ć����KZ�6眓�����#�����iI�3pDPU����|�K� j�Q�_Ei�L�����"kŊ@#�\m�'�������!��{D��R�0T������׏R�^�]�蝼
Q<y�c_E�w�W���gn��OL>�uN�Fh
���Q���%���ׯ�.>^��y��['����P��Mud���$�eh �^����<Ӽ��yg�q��i0�ln��ݵ�>IN�Mn�e�M���Ct:;m���c�+�$�\r�z) �fğh%
�7��7�����V�ik���8�=��Nk˙�P�`Zn�q���f�����p�
��*������D�&y�G�ic�$�v��!�_�p
tW'+{�����G8%f@K��]ˤ�2zM�A�
!�j�c��-w��³D��zK�
�F���b� ߃�u�ۤ#�'1�{�;����f�m����V�F[m(��
�S�!/0��Y����ܐ{a��c�aů�BD�q.�0�s(�����m�3�U�ct�NiۜҾJ�������YRzYA�q\{�ny���Q�[<쯿�m������r����^���#Ӌ�!���ke�65	�53oc>��R;��dB�&c_����e�9(]�/�r�ܢM���G�QV�+]��:a��U�t�@Y�]Έ�w"B���y�C�����2�e�)�O./�rR�{��E�1���n�
�$��jdz�84.���
Pʾ0�$X���r^\��hշ��!v���Z���Z}��r���v #�H.�%�{�n?�0�Ĥ��T�&�9�4��T�x�iv��u�
[I>g�-;�a�!%�|�R� N�άcaֶ6����F[l��Dg�9�]�a"$@��Lо���(��s���1OM�A��c>9u\�����د���7�$���(�M�fm{���zs�] �ɼ�v�<(�:�bC+��Of����?
�]`�e�4fδ������?G����>�h��?�d|B����p��hL�*���-ߣ�W:q4�V�-3����g�ط�<h�Î��>7�prk�}�w�'�*g�cY����`���FY�N6í���v+��A|�֞��69%��f�*�q(��\�E�p�����l�_�f� ��,XMֈV��ҞF��-eG�5�Q8�Z�pF t`�N���+�[q^��i�T��N��n�\�{!N�����-D�Va��]�S=q�}K	��{�����K
�bw�9p)�m�Gĵ���	��x�/g�(9y�z0�l�{m�iƒ�.Q�t��)�$��Čh��SP�kD�B�$Y!sy����B�%����eWV��U����� �bS����˺W�.����R��e�X�������#A�n�~暹�>����������A8��H����v:+�|��[/D=��~*����IBH�
*��=����������Oq�L�����=֐�0�������5x�K��sb��6��yb��~���Ü�*��P_��QR#�&V!)J$��4o��R�ᓶ���i��0$�����4�ȵ ʒ1S�E������Qqn��S6��lڹ�:�Ra����Y���9#:|M�_�L\�mHߪ�hՑ<�[u��4"��R�����k;�%>_8�!2ޥ8�a�=�3,���rć |���ͳuy-LJMlP�a3���
.D���id
��7h�f��!
%<��'2��|X0�"���v�HnS3�s"�@��h��;B�!iwL�Ë�t�)I���Q͎�n5������e�W �2H%є=�٬��\�n�@|��k���iji	�ma}���،<�R�Ѧ1�f�U��8�L���K��K�U��49;C�N�Ap
���=�l\���M�}
�ڷ߮��y���.���`����L��R�!to��U�0�����S:`�qO��=UQ<��������{U�{�؂�����;Vճ~�����ǭf�S{��:#�K�Qp�H3��cDSA�0�����!*�<b�.�"�pYJNO��u)D��{_�<����%�O*R��>��)�j��T)b�3�L�qUK��^��)N#ʔ�.���4���ڛ\Fs\�#�����#�2Ѯ��ή�}V���hd�s���;�w�������c+|Z^�i�B�Ϟ�,+꛱�H&��d��DN����%��%	+7]�վ����W5~S3.����@Ԋ�Wc��M���6�,ʱ>9+��(}�h��+��բ����Ic3�;��5���ڛ2�L�e8r�u�t�yE�y�[�2�j��(jM�5lC��^h�&���zT��^��r#W�sE�Q��NkŧrJ��F��^P�y��8�E�Zjg�r)q�\���� �Fc�/Xב�����gjd-U*���!�B`Xց�N}`C�
�і�ɨ�53�U�,�d�B�Y��OTʸ�YQ�4GG���8��exG$0���Z��B�y�d��R�x@�Δ0���g�!0����f���C�܀/7�-
7��y��D��3�?���u,��M��l)���+��a4E�Q�o��9�f��D����t��PbӚ�$��p�X�i�
�t��Z4��;�D�e\���1�����pJ���,�H(wt��,�]�E�C�<-�/�Ф
Oz^�O��j!������]ArFu��b(!�*��Ec�C��gk�e�cW�-�x,��1Z������ X��"�'e����I�C�v6�������L=�N����+vZ��@��h��V"z﬋�H�ۧn5u%z۞>�(?��!vv��UT�F�V�ͧ��G������4�X��SI�j���J��;l�t�j��OMV�)t`�qhOj˜��n
/}�X�+��WΘ7'�!�LbB�k�r����^�`�O�N�"����k�vxg!����w�m
¤��~ְPB���^L��1���Zj���~��*u��*st�:�������?����m�bkwww{{ko�����o�"�-`�Z
����v_�^���1J���ܤP�k4'ι
IR�Hr� /�}�%]�@�U���;�7����t�8����Y�yC�y�Q��za=��m�	"5Ys0�;g6�Wޟ#�;�|e4i�!X�v��,e�z���8�1�ķ����X2Xr�7T��ɰ�$D4S��m��7<A¤�Q�Ѻ%?���� �����F_Դ<bD�FH��>�oa<V�
��(�U:#���[ƍ�Sq�!z�Y�H[,+��L�;��3H�%w�YC����`p.�%�/v�g۰����ڒ��>^�٩�D\�xu�4���F�֗�"D=~J3��Ͳ[��C�\+Oѓ�գ.h���&�P1����{����vm�C���m�a�	�-� �%���d�x��Vm�<�V)�,W��W5�����6�����7��8�y+�����H���C�ks��(MC>NZׇH,h���`|$y�JO\���јM~�FtQ��+j6�U�|d��>��7�&Ѭ�]��K-{	�N}�-ʌ���ON�e���5IY��LJ/�Z��Ut�V.��6IG��L�/�- �iݯH���ZD/D��&�p�6�G"�	�����zF�k�d�%��9T�ͽ�~���?�V��a�<���9�z��q���Q��a$�4;�p���I���flu�;��ռۜ5j��S�v���(�����5�JZ��߃T�<C�j���.�C�&)�%�2F)����&�^�Q�?�c�Zb�d�e�-˰�G�=搲H�M2߀
�l����N.��&=�!?��H�� �r04v(�%�d��B3)��j��7���#�<p��$�V��SZ��_#����)�LM�s,�����'a$���i�j���-�Hy�{X	��Y��1��D�+��ɼ���+�˅��lR�Wh:��"m���E�Y��Y��
7�(iJ*�;�9���
�E
ݡ�����v}	�� ���쬍���gHlX,,pD��Q+�Gr�E��7�a~�D�=4X3�8�bz#�_qPG�Ch�oBV�78��?�Z98�����40���e�5�%9'o��(��;h�5p5�[S;��?*8�=�j����<�����o{k{�"�m�?������F#$a<���?6�#N2��֏6DմM�F�8x�o�c�ZA�n�؟9�a��������3z���H����EM����� �j�h��y:,��ǺH���'^��Gk��cm�4����f�e2�3b���]ċ����fS�|^&�n��ل>��o��m��&�R��ǜSp�9F{���1�4Bl����$�~8�B���k�n��8o�Y�;a�<�Y��8d1�i6M�F!`�i�E�A�M+��s߽S?��P�wj�[(����s�y�U��ﹼM�CWo��˳WW/��G����w'/�_k���Z3�pr���U@-.�]���
��p��e38������epv�8y{~zrL���;:}��S_P�wg�HBJ�^��P�:9��`o�/�l_�89=����xur�c�:� �YLO�ޟ^��/��.�i��4컓w�.h�����4+����.��������/.�Ǵ����2*������m3xy���5r�Q�n&	>�9�O
�����
~�bV�џM��ŕ����^�\b�.�hx���&'���ݱ��S
J�OM��c���LJ�4�%6�7n�]�_�+��縟�o?%�J��n���m����O�*�o"/��g��:��k���1�����R�L���n��S�WU��ADC��ǃ������/�[��.�C�r�!��Ɖv��-�ytS-�FR��,�+�H�«�xt3rQ�����4�
�M՚0�4-k[��D�$���pҔa&�
x�����f�P=�Q��؄���
�Vlu�~2���b���?�…-1܄(9O``���"�P>D�e�`ĉI�X��z�T��!�8��l
����,�-�#
?��
�g�Ě5�Zȗl�M��l��;���)��Sb(�s2n�6����IU}�g���G�Ԋ�6D�'�'3A�%6�1���?ڴ{|$��>�?�_Z��pC�k=�W�E�rFI�.��+4:e^r2(���h3qa��vK[���b,�^��e���E�h����5�H��RJ�.W!��ɦ8�t��<��
����
����]�W�x,�hV��s<�a()�8��k3,t5�O�i�S�*1�Ӏ�x����i�G�`��?�k3����X�4��f��ڧO
h�R��tn�����]X"9z� Аg�t���6�=�?���[��Xu�����톷h{b�%H4)I��έ��^e��G���[�R
�7���QZ_�8O�loo3�h�*��WT���l�9�6DD�yU;PS����7�`�8��W_��<E��17�i߽>y���}�!������,xr�����"�I��H,0��3�'����\���ΐ]�g�祪ŀ'�y���
=���q*K�#݊��0{&�"�6�����ޞy��**6��E��|}�m�.�-�v�6��>��i	Q�	���~���D���v������M��XچS:�p�� $�GvX˧uW��W�<([��Z�p��h�}�l�I�Z�	%���mDbRbpb���Lo�"�'6��9K�R%��/�ϙ�K��(K�Z�T�!7ϔ0���-���F``����~��gj��*)cNľS���0e���_\��n3���oy}Rŋ����/�S�D
a�����S���R�
�,B]�VT��o��wo�$�Ʈ����z�K��^�a����ɠ��"��Uk�fF���5ː&�a��HQm|��U]�p�M�������ޏ����e}8|1���ޅ�y��o���+�����6�.���E��,��xENv^_��У3�J�C������l�6'�y����$�/�-P|tM|�"�/�d�E���'�g���л"�&C^H^�"4���8��r>��$���zF�-IF"�����]u�G�z|�"�w�V��4�B�,d�����M`��Qo���n�tv��%�rũLj�P둊-��Hb��*`Ai8���f�"D�C��H4��-���Ec�Љ~Vo֞�,�	�P�zyL��VG4�v�y^��P�]�gS!�M��lqԕ����t�r��';�	Df%��t��,{N3m�paND.Mo�]�X����>��tN��Ħ�w�i��z%�Z��^���}<m*��r�'?���z��M�t��C��u�����]+�`�ꤙ'��E��ͽK}M3k���R�y��Eڗ_��_-���Vp�2��}!��nuXg�m,E��(����Ϛ��`"9P4HL�FlpPiR�7�irP�y�TN+%F������:��~t8�M�E�lC��H�hG��s��x�`������xdM�	�-�S�i�,��N
��X�<����8*Q'I� q����X5
�$�P��p�`��>'d��AP�,@��GW�M.(O���y�}���/���b6��=��s+���z�3-Ӕ�!@#�,��G�P��<3����8�����f��-���nӲ�e�h��4jE ��M��ͥhv��N���^��,Fy=f���zvA��p�4��6����_��}ȸ\m�͆��-91�YjRiIKJ�{NZ�N�5���)�ư�"�}���5��<uː0t[gT���b�]�7ժֆ~��e�-C��D��<����T3���@+q/g���"�4'���{)ih�%ʙj	rdUH��B���&I8���n!�6�겎e��F`�)��o
9-+G{0�ജV�r��ob" ˄[ޡ�f'2�����i�M��Q��
���P�}��$k�{YB`rp,u��ѰN�K)dY�Vx�bwprf�pۖMK�-2%��Py�K�״����\����<�e���(�2�^{����pk��_�J%/c�W��T��
�DSMf�x��c\�����_�i(�LwK����E�w��|\d(��h2g.e�.6���R�\).
v�
�u���k�	��X��}����c��w�z�+b}g������w��q�]\�7i�	��BAXg���R���U,�{�uM�з���w��b�Zn�F��glk�)�0rIMn�VQ*������\^ [��[Q0ǒ
�Fab2�ˌ� ���|��Tp�e���"�f ֆ���z:��L�˅�=:�������墮�NN���k�$f�4�4Ժ�B�e<ۭ͐+�ihƪ����rw�%�(�"������??��&'.�;���
N�34A�(>���j���oo���ï�,��_�e�4���ήOK���	�:�#��o%]���L�r�u+� �aWH�d�X���l��
h�0nBgHmқ��_>!���4�<\��Ͷq��b�J6op�m�����+#��3n���t��4Iٙ_����i�$����/��(|�lUSתI��mJR l]Y:�0+�L	L�<���_��J��5
���z�J	����8I#[��7�W�!gq.��J���
@rH����O!�ϗ��.��T��xzI�E�(vNvi71>�;|���1�#kP��^,�j��0xQ��k��lq)M���DqK�6>o�^�]�8Y6{
0f���X-��0ԖJ�q�T��p�h�6�~VܯϦ�����*y8��.�0���ۅ���!M�k���t%>9�h���kFO?09��5�p��DŽ���x�#V��cĿp������-�wL��2��|��߃@����0�
����O�[��"� \�8\�sF��r8�O��p� ��N��
!�����P?��`�A?�,=��� ?�:��V}�?�m03�5r֯�y�ǘ��Q���wH��r���H�Q��A��~Gǔ[G�0NWu��|�D����܇\0��l��~���3�\G)Ѩ%Fd�c>3�]��3�A5ѥ�	Ag>f7����	��R��U��e�A)WF�f�]J�٫&O��!��JY
|��*�1���	‚����bz%�J�ӕ���(N�X�G9_��?�9;L��J�^�I>��!�$�W7����򉴞D���F��0�B{�/!�?��ߨu�!��s�S�D3�[�4�[B�����ee��^���X?ZѩI���N���9���B��G�+���c��
��	�6��v�"�t���i�I�E�ӫ~K;������O��h}	���ī?��i3x%7qpE�����{�"Hܯ3��ǥ�~;�^�J'��I��?��H�Z�x1��u���"�d����9���y�*��G��|L�c�.�v�桻~���K��D�<�\ҡ�l�vrj��AV���!G�Oi��1�4�8#�2���71/�b�Ѭ	���Fq9:�T\:L8�ъ����i��l�R���RL�#TJ�C45�%�t�̹p�)�Ac��BCu��1�b�_��Q�M���V�p�$�s�V��G|d�۠a�%
-_gt=S�C����Iq2.�F��"�g��$�搄��)~ē@���#���E��(w43ʒbѪhی���%�s3�R^���8���5�&MS�B�T�m��ۤ+�DT��f����/4k��T��u4U�K�U�_QdN��T�roìO�~�dK�J`5!�f�@� ���ъ#���h�]���構3�
խZ��o �P5�� ��6`�{ ��䢠�w�	���}?7+p0]p9"P���q�U�%��H�O�^hĤZ��P��h[��O�Ǟ���������R�������6����2c�P�V~�qk�d
KIbf����:k$�{C2���(u���Y��:+Z��dHٱ8�,����<
���,bS�nXv�����8\�A�(Im�,����y�U
M�ʇ�.�Oڍ����8�s5T�16��O[�MC���%�a�~�LT6>�HH�i�������k�@IO��4��7p����Ʊ�Y��=ŝ�Os{�����`�9J>,�r�q��"��V�&�mB
ǎl��n/��)�Iٟ�)���Jѭ��t�>�K�������ο~�N��,o��8�hS��ա��6�j�R��l�`��Tlɣ��#�k7�-�__���˫��Wo�^~�I?����A��������>�Z�ip
I��p|�p8�E��f���)?I�V�M���9�Τ9\������'�����,^𥉽�l����_�>΃5�a��Y�?S��nu��+���dY��C�I��%h*��dU�58ϣ�9xx{Ǻ��9m�)��mtUo��eiZ����܅����D)���ć]?��@��(	-�zﱸC��DWZ �zŵk�ʁT��o��
��+�Y��2�Z�]������~q(@�땔��n$�!��%�=q�Ӥ �z����!�$WM������+���]���(@yV�m?�1��m��¢M����{��F���A�„Y0�k){j|{�P�-RQ��2�7��ޯ�P�������"8gTx%�a���6W�J ,��pG��`+�j���$��H\��t�8U���Y�-+����Ϛ����@~���e
�I��.�h&�]��	���({�<�
��0�ں�s7a�K{�6�=��}GU7�2\`qa6ൔ�rqvuvtvj�c��x��D�ͥ>t���fe�Hxr;�3@OS��=K[4��=�ƥB؃�e�:�<�}�����v�nz/�A|���J���,p��`���P���-����ϭц|��r�	�������+W�̬N���4��}�������a����z��[�I�Q1d�)T6�a}i����5���s�������	�ŪS����P��Y���:``礒�lr����42��	������?ij�C}�;VG_]�
3L���75��3$��E|�W�ݥ>�'��5�	�ؖl� 0,�jV���R�e���\��Ț��*�]�s�3�vUd[�rKj��M��J&[�nxe�}�)�r��f&	|�0����=���Iڞ8�Q���@n�o�
D���_��x�+D�-�牵m�IY�3�t���$���a�H�Y���z�&Z4�Aݰ_�=ߨ�����jF6ø}���1�B�ba�{�'Q���\��\nl��X���⁦�%!��e@�|W&��ϰ��t���RD�����d��Wo>zxsTxk�Eo>$��,7�'<�j���{�0,��S�ub�B��e\�><�c��nΓ���tW�߆1,p�ټ]�S �Z�[����..G��$�.�*7%X��}��vͮ��Gm82���u�kNG�QQ'g�t%� �)8}���g�r�#�kVS7%��Fp`5�&�R	Ɩ�`�w�&�V8�����6�H�ֲ�s#d�%����h��M��@I�A��%,e����Ǒ#-m�k"Ġ�l=���U��҉M��,�<�	�N:��X�`h�fPJKi(M�$R��Ę�i��Ge�mCJ` ��Ly$�!/�k���32UAY'�zS�>ā�]���/�Gc��吲�g��(M�����ݎ�,�����	82ڔ��"�p�:3���h�a�!<Nq3��,��&c!��7bŭDÉ�S��v�VZ��20
bNh�7����x	*����{}�F@h�'�*�6>�*��zP���z8d�%�&(N�Jf^�:������vL�/H���G''���(����R�hn�z����V��5f���xy	��&X�y��Č7���p5;^�8��^��Ww�9�Rg���z�Q;cɩ_8������`�B}���"����ש��bNw��2��‰��ՙ���?c�0�q�~5-����x֎�O��&8>�V/����Fs0fI�jM��݂E	S;
<[������UU�Z�Ҙh<��Q]#�<rXz�Bh�h�Q 7HIЌ�K���m��tdh�x�����s
���!e�\��p�-�RF7��X�t�0�HL�����bI�m�몃����J(5���m�J�
�Y$��fqTOl������8[�����	a�V�j�QS�y��#�@�Ys��E�޲~h၀=�'����ԣ(�	��NM�R�RR�7�*2>+/��7QH*"�5���t\mZ$9Vt+����r���5(e���5u�n�o��%��*��;���Z�Ti/o���
r>���I�.���'µ>���[���i�,K�Jהi
j��EL%��@s|��G�E]I�o:�G��<����4������G��>����ӆ�zt�(�4{��h �$ѩ�F��Z��wAgî�8�=����J�%���pz���l�D��S�QS�KP��r�$�*z�S��{��dI[V3-υd>D䬞
[C�0�П�]��������:hV���<S㚝�ٽ�(�VmYZg��������d���&$�8H�k����!�P�Tc3����2�1�?�A��#S!�G�
�OlbA+���Kf��s�h�v�YV�_fb6�����t̸��J%�g�)�X��Y@~"�<���e�\�uf1��p��H���3����/FΐG�E=�ʍ��m���g9�*��(�Y�K$c�*�ZY7���hI�ܭ��KP����uT
�fNkl�_�Ͳ�~KD��<f�.�d�I��yn�V�z��U!\���j�R���4����i.e��)^��`���6��������8�r�ڔ@����^�w��Q��1��t��Η6U�<�-J�]b�#Q?������q-�}q���y�.�y���bRN�%9lm�z@�woCੴ'_+n�p�H���J�X�����ܝu_[X�痗�̢�
��^2z�"m}M%a��]�r�N��;d�N��I8�j���y�w��iq�МQ��6�< ls�'��ē���">qjѱi��3����<S����JX
bC�k�0�,4=�.O��焰M"9%�o!)���
�[.���h�z�[�nA�+^����p�w���R��2�0�[4*9�<��_A� ��x�v-&��Ͽ��>v���}���W1^@�W�$`�8�X-��Ҩ�b�Y
.��R�*��T-��<�;Yk�彚�w)�r��DE
��w0,MI(��U�s�i�S�@eGDs�d�vi!
W�k��E�+jx7�P���@�ƒb��űQ~�գv����`O��IþKIH�N�G� }�
`" �捊˗�
�P�fm��j�<�%I��M�������(l9��(͡jMe���t<6NJ�k���'_�LXm����E����2#���ƻ]c�I�H�*��QvkJ���)/��-�U	d��`��ƛ��]mV'o�tD[V֤�oGm�am���Y��N`X0n/����1K��̓_}�ݯ����?|��]���_,��(wTU���a�o��q5G�:N+
h�M��t]��7�����0��K��&�����?����&5
��~+ђ9�r)��!������vg�%���n͔"�}}Ri�r�Fuڠ~Z /y1L��eug���XX�$���;vF@	!PNj֐�b�$��u��<K��7^O "�|F�tZ�ID��>A��g,?��*N��Vz�a�x���<�2����\����l��ۭr�{����a�2��[1
3��"�1eT�Z
�����Fem�@""*�A�m���Q���֛ٳ:���g�.�a�*L��0�砤uG�t���	�aϱI/E��ն �˻}̩$e�%����ud��cA�1�N�e֖��T�����W���:˩ָZ_7Io�J"րEIpV�M7�g��G�ro��XS����r.ڀ��۬ӎ����@�2e��$��T��R%�򄰼V�e��3�a��ܡ�R5}��D7|HG\�R�P��'v,d���JR�#+��Ir砬���ak��-��f-�g%�u=�l�S��5��^;�Tʏ�~���h�c?Q�`B�JKe@���˲���ș
#�0�N�F��m6
5�$r���^u��In������j2�[�o�A��pD%���
��\%����|R�ȥyA����N�vòdK�Gk�H��J]ʍV���4Nع?ĎF�P�)��;'9ǓxWd9�L� ����D⛥�8a�˂�ړP � >aJޔ=��#X�i�����蠤�p�XqH�����.�U��c҉k�l�3i�&lb�ڳ��)C���֙��e�i��U�:ްJniL��2�e�Zz����ɺk��ʜ������"<�%!���g�NM�5�o�m��n�D��ki$��Me!����Y�ӓ3�K� ؃KXM�i�1����ʫE��,��B6�MtV60���ES��Ͼ��m0Iγp$�WZ4fl�M$�M�	�y��h�i� ܏ɳ/&H�p�
QtBP��ھ�V�t�M�)���L�m���ٲ��b�@��9�����sg�x�c��!��A��jw��8y\�}�і��A�3�5e�Bs��?/W8�{��j�Ϫ����]�����������M�?Qm]�K���i�䀣P}�����@%�G�G�I"�����t2�� -q.�6Q�ؔ�#�d���,W��x�)ߤ��h�"ڧ�Rs�)�LRf�Qr��̸�K
�Lz���Ot����!ي��ca�Y�d��#�Y8/R��2YB�m�4ĭ��F�b�K���#��xɏ�-+1�ޑX��M�N�˂�n�%���}Mє?n4dK&ÌYnp��f��d��fO�\+�!��<K?/l+��z�_�
5O�i֗?+m�}?m#V�x�]lC��Z�
��r.����zK]��re��_K-\��!;�����'�-7����KL+�*��{��6�,Qt��S��q$Q�e;��1��Ӷ��L�JI*��B�QI�3���7����~V�$'��g:@ծ�_k����{�����=��@ՙz�Rd�mf���Vi�T����2i̥�z���n+I�U�*��6~��_q+�f�!�O����f��nL?��l�m>�4�o�w���vE��3��F�`��"&�5>���$97
�w���`�oO
�b~����R�����uE������f����I+o�����>��&�1��QJT�L��[�F����v��I@�/;�k�r �Vs6`yM)��nF�-�����c�N���NF����k���u���,���K=�,�
M��uD�W)h̪!�5?��DL�J.���[�T��eǘ�f�T�f;]tP퍽������U�G��o-���S��>=†X���e����T0��_}��?\{t���-�&�9_��E��Z>��N��>����K,��(p�Oyp�d���q�8u��X	��_���h<u�
�n\��.)�-��� �9��6���#����>����i�@��y'�(�1\����\�C�%$췸_����X0b�;C��46��Q���j�<��@�`�IPǟ�͋FU7;��BmW�&UͲ=�*6���jpczdRۋ`&ݍ�?х5���:��S�/��ߊ�����C��?Zٸ���0�W��fQ��
�TBZ��G�z�_@��Ť�'O�����[�����S�C����=ET��頿����8�p����`�G9P��d(�>7�am:N�Tv;U��F�V2=5@�o��c(��w!fJFk~�ȢswhX��@�Ͼ�v���������ޛ�_ۿ��U)$�y���r��N��c{�����c��!?�����p�|�F�i³(�O�);FpSt�k^.�'i竛f���G����x��������kBk���࣍[J
$�۲y���G^ ?
tE��,�z�����2K8�4䋨
�b���5��R���V~⊑���$h�E_�%���n
G$�Yl��&H�Ж�ގxX�~ҷ�(]w��g�ma���>	�
�b���D!�扺�j���P�Wu��z��yw�ޯ�ԃ0�-,�9��[��|�;)pf3����!
���N��V�~V����i7�7GW��a?��F1��D���r捗]íwD�}��a��V����z�`kK�ydQ�^C6/��U�u1X��Z����,܋hKz�Qc��x��̓���"e�����#��_�gm��f���+������Gw���-�ư�y��l�S��`8�Z���N�@9X�ʜ������j��y���@+X-R���[����V�M*Rv��!=�ee��T@��?�����|��_�
�%��#�@)�J+I
�����x;�V
�W�/�2��,�g���6����f	��d��M�*��R��+���\�ps3@/Y�v�Ա�A�L���Ax!)k�(6_�\��J�f�X=�N��8 ؀�`o�p�i9)UB��]21�W���<���W�"M\H�Bu�Ձ̏���*�צϛ`���T`�X*���q8X�ş���Ek�v��8���,��S��Z�-w��l�8�6�{�0�h�NMm�v�lmM=x~\�;�u{w�c}�c߲fe���!��I���B�{2t��Z���E�O��ij}v�����B�-��#�L)�& �>֏����8�8�
�	������#�k�P�#ӳ+��j�;�Z��^y��f��?}���ՠ����Ʌ�Qx�M������l���W+u�͌��,傓8=̀�B7�K�jۭ��?�W��*����8^�7�s����Z��8��"@�"y�C�`���q�IJ`��C
�ڪ!6�}	��@x���=��Bo�CEa����(��ر��@I>�l-^��P2Po��`�y0�
)�7-�;M�5ɔ}�%FVAF\��G�5�޿�-o��c�d���u�o#����}y�dͥ�)��������۝��ݟv�켒�� �Ic'A��,b���``$�)�$&g�;�Q���O��iQ(�	@A�r8�;�fEQ� ��
(�Ϫ�Sv��a�Zl��������Ј�8ݮeW��A��`-D�T�4�qŭ�<�0@`G�Ӭ�הp7���B-5�F�a�ײvhJ ��R:_؛�9esۑ0�v�~����%�t@��k
�X�ze�p?�C�~�\�<8�4�g�&Cz��VPD��Ԃ6�\����ǷP�i��J1F��mT�\���o)MI�^Dp�,�_�\��&0epy��sN_R 0�-�<�p���Bj�I��d��;.g��w�;Z���j�����.�)�Nl��8��WnG\1��FagK.�"
�2��Upn��uo��L��^ ف)t����D�=-]���4�Z�\�lJT��*�����I�P�%���}��S:�'��롋T�S�,�g�;�.�0'i�̯���5��U+ut<�B���|�=����7�֬�t�A�{oaTU��Zt�֨�Vp}�Z��l��<����t��m��F�@�7�MӘ��~Y�?�
��L�]h�RH�B��{��)������珙ƌ�e��]�xm-�����9������ڥ�C��{*G�U�a�#����`8����M�fQ���<*&�S6��)^@�Kد"�sD�/`y��!�"��E>�P��(��"4�u�u�)�p�X�<��9�4n;U
	Z/�t{����v��1~G/Q`㗨����ptgU�P�#����"��ǿ�WS�X�m��,��4@��W=���� �jV�Ȝ��s������N8��=��_{�
�8��RϿxj�$�v�;�ڝ��i�3_�8�gee��|�����O�W���hP�#	���揾�����û�w��Sο��������q�ww��s�W������������οI���l<Z����ο���C�b@9��د�|�`,U�R��T6pL+N����`_N�[�R����\�,6��9)q-�I�rLI��A\T
K�0
U���l�O9K�N��0JCa��g��R�T�^�S�x��׏��-�]=���
N"e�z��`��{0B��L.0��8�j��ی�����vM<NPՎ���˪�� cPS�N-4۞^
����3�0%��d���&-�"��ͱ���#.^F����E�̙�/8���D-tn�	�a7>M�&҇f�#��s�Тw&�k[Y_��:T���Y�lm+�L�]5�R-	��	�y�ȴ.�����d#���;o��%�^k|����b���Q���3�=�&Wȳ�𬄝�e�tf~k,i
�^�����&ݫ5�"SL�厢�[�l�۾����$s�sھ?"��mu��c����w��7p����Vͳlؖd�v�~�6�UN�`
O'�iԞ��sm�!t?�
4�\�F�y4J�U���i3X���h�D��3.�Dp8�+,����f��fg�Jon��qM'lq�fc���\G�lgE�5��-R��][�A���y�^#��%�v�J���+��C�&��ǃ�ۏ�%~����4��]d��g��iGս�V���_eѺ��o�v3�O�F3�����W���q/M�"C�Ǥ�	�D���K�&��.0�w�Ip�Ska�"EJpnK�9K.&G�Ӄ��T�	�~���@�Ź򪩫Ve��a��`�C��&�e�H4���ֿ�~�yy��e�r?�Z��/w��%�˓���ˀ���\��H���E�Ώ{�ч���n�wRUC���E�|Ҹ�L�4V��NJ���0���T,#�G�!y��4�����F��*�
���KN�C�5�EB�n(��٬q���WD 9
q_׍�Ȫ�C.��9���N'�.��T���Wan�q��P���<
�I����ת�^V�b�3d	ƒ�>G����G]�'Y4J;�n-�hx�ee��E5�>�D�E\#�aI	
,�;@|�rZ��:�D�J�<��L���@M�.zn	��?�Qf}2!U��q��g}�&��ʞ�	�qd<#\H�yc�\Wd��Pl�|5�؁�!��bUѽ����źh�Y�֢�á:.�Ti�UlZ�J�l��Z��"��W�H�j�^.Z�B�14��	r&}i0�R��@B�=���H!W%H c�^�t�o�w:@X2.m"�N���~ϔ���c�S�+��O\ ��.��S�>��_p�Ʀ��־��d����r.�+�{w..\�+���[��U��73L�};���i�@'M(�w����p	c�������E�|Po����(����+'�5�E����kzrmp LC����[�;>�>xv�L�"�!��~>x���9�}U��yz�!�^�I�q�F��1B�+�+�_鮓�F��xI�B6r~�X��b�n�hX�W|��G���`+���u��b�s�5�_Ag���Gp�޾j��������o~�h���3�\UZ
m�\�R��N�V�ZLu����H7k|�5���j�W
p���%$�`po�!�Q�ݤ�3�40��S)ukb.\�QR=���hk�L��*Y� X�leI�̢�*�SO�D�i�*#E�(Q<�=QJb��_K&��J���ib���"WՄ�e2{>E	�)z�$l+�� 6�O��X��X�c�"8�� 
cz��yFl��}��Vq��$e *����
_�^,u�햺M	zh4q�-����zW����/�P����S�rj]�Vz���E+ꆫ�f�y,Q���d�x�J'��Z�A5Jʢ��j̶\&*�P\A��b��J�Rqe���M_X�D�_����	�\�h?���+6Ք���Qj�O����(��c�YXXB�!�Wu5p��Q:�딫�&T��t�(hAK�[M<J�$1�ݰ�53��3����/Xa�DM��gHtcs���>��Y9T:��9�)�3��X ͧ�.�Lѭ6SJ����TU)6��wY��E�4)u=[�>m�*үϬ��1<���xi�s:��)=�j4T�S��0,>�E�ʇ�����h�Ηq4w�h<Ż�8�&l�(z(�ʀ쑓a��)<���7d�"̤��^��3��w߹��{�c�ϟ-�ú���>�#;��]���_���#AX�Z�7h�#^G`w㓴�N.���"�D`�*�/Ea8��XX{�fp���*o(2RϵQ�6-F񵄕�J�&R=����.F�VK3Lؤl��!�<��9?O�q��יU'�m��]B���W���KozXx�����}�UV_��p���C�	�q8�rnen-�M�ns������e�����T����-%K���iSL�4�isBdkFHSrUY��4J�F�r�q��1=�u5	�[��p�_�m�P�F��_$1F�V�yB:zZ�钙ƒ9�g :.�a.���MJj�7*�2��5�ښ�eKHm����s�Z�aX��M��D:*9��"�7=�[�	i�o�'G���q�(��9�j����0�:[7��Sq{:�~@���#R_�>�g"�
�څ&�TH��pJ�E���t���k���g�����_�Uz�o����޵�N]a���HD�M[��%�]~&C���%��ğ��(:��<��9�T4��b�ܕL���)?4}��N�5�
ws�}.�mI\	5̊���a2�r�c�������J�	T���R���[�R�F3i<�T='XJY�m&�S�l�;?�����X����b1�I���6ϊJ�HqE�^wr�
1Iؾa
;��P���`�O�E�52ۀ<���j?�4��B����.w?��R+�a�"G)q4��PS�R���o�-�V�|�����������w�_ߤ�Wy�7�&%|B�œ$;DyH<���d
K}�	��u�n�J��ace/�A-1�5H2��Al2O-��I�QVK�`�Rq�V�c���v)հ��$��dig���
U��e%�([�x_��ݣ��(([�����=��գG�_v��)ܺ	r:}�T��H��p<Gy|Ʃ�ic��8�BO#Y�83&he*�Y�h��瑂�[8�x�GT�>����w�m�D�;��odeOҨCL/��;b���-���4�!��L7
�J������^��Oi)-����fR�F�~�׭��v����X���|v������6�Hh�
=���][h�E��^.��7��%4'�T��3G7�Fjhs;2G��?U�o��C�4o��j["��mz�{G�7𩽻��B��o�ς,���#)��Oؤ"��\��.!�;��-*�K&%���+=�ab=��#ǭ�ǚ2��զO23&����k0|���<��h\�D���`��9�L����$���&+"�)�
{8$��7�F�}ats��i%�6�0��n�B��y���nb=�#'�$�X~M�<Ź�I��Ț��5�����1%$��F���ZA�L~��ξ�;���Td_q��f�%��Vaˍ�1�Ș�1+·�Y$��.�@jk]��X�W�
�����7�[Ji�-\ks�W_�N�)��&�p�|���ƣ�|��]��7��`Zéu\�1���.����o%� ��R�G�0;j�Q��Ƭ �i^�+M�
;�%C�j�W��� z)�|�B�� ��d��%�@Yj$��FH��]��d:j@�_��1q��U�8 cf��h8�tĬ�"?��y5�(X�g�d=��(�NU���)�t��[�&ر�elb�e�Qeˮ�!�Z�KyO��VC�q#צk�]�#�#B�<�b��&
�O��<@ͨE��}Y`�.F+���w�Y���/z|��
�j9�k�谽������C�Iz���
��,^�뛊I�~0Vv�\�sWcSX\�ݐW7h�I�B��A�9ڹ\�qr�o�[SD���sXn
����� ���q�^����	��S���s_a�jgn^��[�����8�w�]��G�
�� ��䐾P���a�湏:
�s��/l�<Ӂ�^T�I�C}ԓ���v|��9�K�..�S$�gd`˘H1nk�*#ҤR(�=:wy��oq��&��zET�PL^���7��2�Ue97��@��w}��諒��cf{U��QL����?�I��bDᮔ}Ձ@̾��;F�)7�K��!��I@#�
6mb�Â_��
��n��n�+�T��w��jQ>5TD��?�ش�/B�`R�iγ�D���0�>q>uj�n5\��P�t��b�]�_tD;���&���Pvs5\	jɐLf���BOW¿T�<&���'lkCT1+�k�4dz��!�)UU��;�TU_U+���9!AV~��S�tP��Ά�v���%�NƆ��{�q��|�.��PgL����w�)���\.�V�z�h
s��Ϡ�|�a+J%��|��[{��v�p��ޫc��n����ể�ϻ�/;o�:�7����t~�{�KH�axD�]p��1)ګ���_7:��ys���~�l��jO�m0�TV�j�V_h��ةY�ku���[ԇ��.��Rp?-���,������i�
��(2��jf���Wr����a�?��d+z��ĖY���E����ijDYE�)�n��t>%�^��j[��0q�����B�7G��j6�G?��Y��N�������D���|��_�بRSib ���n���{x�Bt�
nݽ�
8H�	��h,��<n�LN�p�k뭇߷Vւ啍����S�0hr��V��++������g�
�r?��T��}��~x��yAF����Z�l�����I�Atx���o7t�Ob׳6�1!혫}�w�v��nW�v.��7/�*�Q����.2m�c���iK�E,��D��0���/��_�•Q2m{��p����%��%+�݉�p4EKTAk	Y���Mŀkn�]������.wG�&���:1���^�)�6�XUal�3pgYt��3�-�BK<2}΁�h!��u�u���P�"��"�OV=�l��2�jC��[(���n50�lj�>��p��Z�ך�A6�E��n�=��n�/��	�e&ڡ�p���Ԣc����ۉ�T��ϔK�2ݍ�
�aׯ�$@�-�$V[qCA���W
u,x	�l��{LG�?-�v��Ke��3�D/gv��K%H�Ejˠd���W�U�`�\u7>��X�m+�J:=����{��<�H9
�\���FA/20���#�s하v��䆠���Dz����>�JnbhdQiv��vD���ߑ^��C�3��p|Rc
�X�&�SY��_�ƪ�n�b>!�Bkz�����*�����_Z�_��n�?�V��;��b̿�j�8�{�����࿣+�ı �*��T�����L_Oγ�bD��h%׏�+�$�<�.3xa6N�M>��Q�6�u�~x�$?��g�����?�Ti�K�M���+�U�m�����-��w�	��U�(���d�ĺC77U�.�4W.��}⇒	o�~�1�q|Q
�b�	FR%��O�cY�	=��fA���(��
�x�8���Ǩ�EV�Jw�N%��<̈́�;�"�9F��R�.C7J������%iu���V�/lv�	�
�_]��ӛ;����X���'�z��Q���õ�;���T�w��Bc~<D�'%M�yPFe�wr�<L���9���2><%�m���F�zI��� �8!�=�bH1�+�����
�qt�Ӊ�mӃP�
������Zu�}�y"$u���Fq6l���o��'
����xf���W6P`	^�؍{Ž����d
^�*�%�pC�G�!X�T�ˢ�
m�Z�t��i�/��	3p�
�L>�(���q�y?�ЉK^�-Ń௃$;K�0���k��SO�;��)�¤K�/�`��9|���n�6:уe�˸���ED��V�����W?��/�$I�񎴛��w�ό΢��Z5����̄��RdUBy}���������×{Ϗm�*��/�e{�y��B�@�"K�؅���?��ζY���G.[A���z�l��q�f��g7c��^j5��ZG<:���Y�ϵ��0���{/b'k;{��'[��/D�ň4e�=���R�Lh����Gt����a�H��lqEl�Rvv_t��iw@�|�Ҳ!��ٮ��s#�E�55����������睃�7��U2�|l�褷��ښ�Ϊ����7=?|ѕ��''�r�_	�����zY�h�����]]%6�w��em�i�W���cec�f|�$o�S䖭�� ��i:�B4����ӓ-d�%�
Di��T��Q��
��á	,�{�S0�_��^���(��Ț#�>���h��|�f�Ǧ"�(�π��n�"�m���|��8X�K���`�8$��u��XUO���
ٍ�VD��!��L;O%a#��JKɷ,OՐ�8��A
�{��Ȋ+x�w�n!��J�`>�U�Y���AB�1�[j)���,�bz�@��`\%�m�!W���}�3��܄h�z.��(��w��Y������h���׷X�G��|�B�21��<n�39�s4��`�q�3��s��s��O+�����z~��!����	f�[&�S��l��uUj���r�P��=��ϝY�_����
�l
�}�Y���$`V���
_��p����&Ͽ0Q����oY�_�j�f���aU�x���o�U�'<WZ�[m����•]����n��j@�Cld��F�Cl_��98��Ī������>��y��6,��,k;�������Vd��~�|�_y��<{��L�Oc��{�y����Q:�>\�Y�r�,�f�x�(I4B� �7ez�_ow���K	ՠ9t�J�?�`�	��yb��리
�Ɋg6�]\TI	d��0Q��O���;�~t}�R#�3B���W��6=�_i��;
W�W|���pw��>�_���7���+>z���#�Uf�����W���a�ϔN5�x&�$ht�%�9s�jU}v�~�������дEuy�lf�'�#�W{?��ޟ����W�o�M�*^L�����<r�� �YGm���B�.o>�����>oS�O��g饘��p^���n�U�α�$�&�A'��}�/_�o�1s�Β��fm�~�~��?�o?{��6lγW�?Ž	 ��X�j�߽:�}�����<��o��O���q؝��Y�w
�(<��yv���K	�ǝ���tX�9x�
���=x�~^6�8�3;ch�w:M ��:8�;.�:^��fC@)���v��Y�HV��lt�s���f�C`J_<a��S@0��zn1} ��Q8�<�0�7
f[��4��>ow��w�}��J�8=��B��(飗hr�Ŀ�:K����!�
3�`����G����I1��,n$5��=�P�$����^8g4���p̰�
:I>�r8�P�����l�������2��Ê�yBN�������v8+ 9䦹�#\�:��׾k��_�t��_�3���t��U@���#��룕G���3�G4+��l���I49�FA�J�C/�&�);�
'���:h�Q~�4]ڂ��rD���l*b�Z���?vz[���c�9L��
h���/�9:�\���67G)qF��1e�~��A�g�����-����:������w��o����Q*�O%��[�)V�܎��Ϩ�
��;���dETYޤD򵨐�����|\w��hj��E���=���N�'ϸr���T~�d&s҃���B~��e8FW���C���攲��&���hl$�K=!��J��J����(c�\����1����=u�Q5Z\p�}u�.�V���90,�B����ڏU�?��8���`a/�	�1jp�z�����Yv#���D�]R�N�\(YA���B��n�V����^M��5h;�n���n��Z��)'DH�������;�rZFEG��*���V�P���8<�0K���5��'V5�,~�U8�Z�!0i��eB���� Q�.7?У'��յ��6�;���[��6�&N�W�ů�:'��
V���\��Fү�a�S<�
��l�~߂���E�����e��mf���d���_�$����Q��hPd��!ؚ֪��j��t OfyV��9��L�u:<LP,����9�����0]�%`Jҋ3?�1�������2��,�S��4�#�A�FgJUcH�x�S����8�y��BVKxY,�G��*���x*[�n��X�8l>6�ep��w�n��[�.��I<��ho�w��E�eƩ���Q'����L�����7ucUY���xt��ŰG��v���W������y�)�u�C�6
�n�����Ð>2���>�sbV��+��6��ߕFEU�F�D+�dy������D�i4�ھ���
���|�10�Gkl�79!E�#@p�j��LՓ�H�q_Aqgv�禎=�w%ף���QQ���Ƴ\��)��ZT��r�k�n5zJ�IֹO�+�~��=ё�
���g�^���k�Ю2��]��tSN�
�������M�2Wq������r��
g���\��͑�\��_r:�`p:����7P���	f���e�2�c���/� 0�{���hV����U���p�L�G��^��%�Ճ�Cd��,��AuH�l���}��jgem�P�<5y7c?|��P�/\��~�Kusp���;�B��A�h1z!�[�ުdƔm���:����KCw��b����2+�9������R��3��=�_M��O�{Rzb�1!�iW�'�(J>ə�x��ҙ��d<V��))=������������Am��~��tr0�a�i���Ĩ��3�E;U(� ]񐂎�����$����/��mÈ^`
����Z�� �v��\��o�v��;����#N�uԯ9G��\�4�/��
^2��Ȭ���9ў:������h�C>kpO��L���?P�L'c���'�}e`�W� P�W��''T�5t@����{�j�ݫsS��-��b��Q�0�����R�)1�HK�F��'
_*�Ҹ�i�0?i�*I��l�:��j��iyK��N3[$F�r�f�5�Q�Rx�]-SB2>�pl�R��D�Kn�ne�l���
�}�R�Ҷ�r�+��`La��O
�P���	N�M]h�p��'d��,\.�R�e�ܻ���w����gQ֡ut�3�M����/�5������q�^8S%H�n=�E���k-[�����S|�ȫ��&�C�H���]Mو)��A~�\�`W�,,m�	��q�9�9��)w������)ȼr�����J.�c�߷d��"]�z��VE�ϩ��sq/�G{�p��;e�P�n�jm,��t���@��ޡ�T=�{)�o�s�������)�;��{.��{R*���Sl'�&�0@�(��a?�$���l$c�bA!+]\�ҝ�fl�'J����e�Pt��<��\/��7cQ����~��Qo�9=����VM0�'�Qp6�O������f3z�����M���R�d8�	ݪ��8��;?�;E�އQmn.ヅM\�'��mO��&pO��a�o��<Gd\&Ap�+[/mό@,Lj���d|��}%h�l|��$�m/��/�>��?>k%���?B\(x�-�Ar?��ɘ^��4d�&#̝Jm�CC]���D?��0�&����f��b9��l�~��#��&��k�w����o࿰�g�׼����׼��'S�Zv�f�PIlTC�o�����{{��7ejNM��&�%��Bu�9�BE(�\��d�'�0i�S������$�ϰi�ᑊ	@[{��o�k-.�"2W�U>�trv��^yZ��f�!��q֋.�.	���I����5����պW��������ܰ:9��8E[O}�΀�U��:�ؓ_���i�}Mf:<��3��0��)���^@j&�NQ�Hq?�|Q�Bd���m�Z���dN`�Ѩ�뷚M��f��J��UyD�����#e�	��a;+����Tşp�RI�Q��۝G۳��Q��*X����"��"�|��;��Ŵ���"tE[�QP��pϫ����a8�/�,@�_d����M;�1��a��tX苼UmYtK�x�4B�0���S�G�u��s�5	.�jA	%�8"��=�#/�+�7�h(����U8�1l�Ar���sD�B�s,(��X���Hp}i
���ì��*9{��\e�йZ5ɛai��3D|���$�H�I���;�{:ݨߑ�tdz�0�n���C�>G���=	�t!s�SF���נ'�-�v
{��d�wJIɓ*#'�n< ��3;w���|��ڔ����P��� Є���&p9���
��9��oS�az��F1R��H�ә֕O�R��B ���T8�����S�7:���3
6��x
��
[w1��j��jC�ٍb5!��)4�۵j�Ξ��{f�< ��Lj�6�9�H�:�� ��!��
9�Y���8�%k��c� �Ƶ�873!�/��4H�]��HF�Nb���l�F��>8�v���Ʀ0���ߚ�J�z��a��y�;E#�pЊ�ҟ2gs`���c��|�v)8ʭ��q�yA�$e�Z�ą��d�$%��U���/?X]��77�O�ŏ��X]7Ѡ~T�FTA�yQ����0��k�L�5.jgH?_Ӕa�k��gL���a'W2���[�᪘�o,�)����rP���(X+���2��H�� Gpr��"��[Mps�*���&�	)��p�)�Ѳ{!��$"����K���h4L[���=�FC��jo�K��'�<�K3�3	�b�n�\2�-�a&.��
�-'��84�7���Y�{��m�@�D�"B5�m������ϵ�
�.?��u��CJ<��g�&�Z{+7㌾��f�)��bK����8��Ʒr+��V#�4���y$�[)�����]��H
�z?\=9�6�U�v+�D��I�Y�߼Vo�7UoV՛c5��4�MΣa�w�T�8��dM��a2�b�7Sʖ�2!��3�rU��Xr��|4�%�,��lV�[_+�����ʝE��������3����7���}[��~r
k3;�֪_%,�һ;1M�����&6UG��n�������p�p�b��ݼ�:���jU��Er"&2��۲f�Ge��1G���O	�^��yv�r�b���Ε����d��nf�7�b6��tB���bƗ)
q�����R1Z*/��Ӓ�5��Oqa8��ui��ϴ����1QrɄ�dDU�t�3y�P�7�a�*_�㴨�G����x�p�M7���(&�<�h�b�0b�xL�R�(�h|�F����w�;nv��9�*
H�ZŽZ�-������),���ߪQQ�ޣ?6���fʩ�8�҄��F	�p��K�?%9�xɿt��W��N.��A�k?7�I��n*���yfF��w���p�ӝOp�}"���͉��s{�0w���� ����f�v�����`5�+I��1@��������w^z	���ݕc�F(�4<���\��0�s��;k�ª�l=�U��4�s�h)��-<�?�o$��^\[i���
�o��6���I�;�ku��F.���;��o3�˜���^1���hw���<M?wыG���D=2�:E�\�An�Ar��z����u3K9��+6ũf�1;V��ߋnD;��G��r`V1�I0�#�YW#k(DH���=v�C�"]�Gio�C��j�8"�j'Hq��4�dަ�I 3&\
y��*l\G4�n��Ak�d�{g���
��������3l��"8.U�.T�+?P���kx�ƒ��.��L��Fxl'��dDr]�Z�����A�GwU�>D2sY�|���r�ǰ�
���*_à�O&QH8�˸K�*��Y�•Wk���ݞ��O��(ҡ��*�E0a�{`���s���3��жdc�.�|2M�%a��{ۄ�j�&��õ%�G�pL��0��G�q��L(M�1�K��Tec��e2�Zs�co�����1ۢ6��m��w�r�ݫ�X�d�dr�
E
I`E���+��R�����CL.?*�̮���=�b�v�)��]�J���O2F_�1�H*�ܔ&i�Cl���Ў7R�$�+�5�=�/����7�#�{��Z��c�H����U�3��x����ݒLB��ݕ$�B6za���ЩV�i��	o�گ�B�t�������ڷ��m2r�!g�k �u��c"�̠�/#U������Q��rz�<��*Y_�ь4[���.�G�
pjdy_k�@��Z3o(b���q�WƼ_�����*Ulu�i>2�f��|D}Fn!�U������=1{ĝN�Q4���p��ĕ��*-��UI-iVԄKYc�‘Tn��1��5���,o�Gq���jdw��-��C�"$.�#��}FCu��hfHь���Q;8`��W����l��0��0�=��z5����cZ�x	P����;�H>�o+�H*(��wZ'�y������-�u�j:���P�JG�3ˋ�
Z(����LS��3?R���s��Q��r��P�}�~��
�k�5�����~�
�9�!?�"��ZsG�)��-%hَN�g��6�чXy
j��@�v�����&ÙuI�BT���9�!8��<p�3M]�fv�ա��S�;�c����b�S�S��8��>u�2��7�qښ=
��<Ү j
���2}B�[��—�����`��ݗ�LI�Sd~��T0w|Jz��h�~�e�RԹ}�m�(��w��F�>g��I�O�	h�I�����_
Z���W�6r�L	~�����ő���hTLl)����b�l��
�}Y�!$��z�Zi���w�3���;w�?�1柙���r�76nܝ�����0�/�̩J2p<�D���s.��x�~yN���=cuN�t��{rB7�ǃ�A����_�!��QF��f$�hp�f��_����Z{�RIU��?Kz�D�8���iB����X����5���I�_K8�%KÄ9��W��~n?�
�?bY��GX����ݱih"��8$s12�e�o�{���/˰����IRՔk[*�.L/�P.I�s��w��Y+��ĥ�E\�L˿�^o��^�&�4	���1)C1���\�N�d��y{FC�8!~o|���]m���,����ϖ�����j�Β��Je��Vɠ���T^��
��'3��cz�2�WQ�v��(Vzz0��n�P4���u]f:O�b�yw�����CA�OuW�~���F�CHl�wߩ�:�‰UQ���l�c�;�`X��P�u6_Rp�(+cS�Q
#�"���&��B�)�2���,FJ��!cph}����cK?��y��[�`��ވc���k����%��@�jI,E�T�K�TӺKt@�*�_9�x��cP��B1OG��9]
�du����6��bt���0�)L������abY�*Ļ/:������p���Y��@8=�
�Hz�%1��h�"W���O��<O(sqa�[L���p3[��oLϽ�@y��ǣ�^M�t��?\<t�[(���k�?��o�U�h��۬�ok�K����'Xn!�q����`�9��e)���������`�؜
�s��h�8��*�@;	m�,3���dZE�X>k�����T����J>�����N�C�PN�
�������MeV�u����F�y��@V�>=�4�[�=[^��:��[����3ڒ&G+����sY��G!��e�'��,�U�P�5o��	+GLP�}��x����^lGI����?FY�Kn)����5��k�_�[�@*'�	9�S��*�:Dm!O�m�G.���0�o�&iͣČSh��V��$%y��`ZrٔX�ܑK[�%�
�-c�S�c�N䅩
�z�m��k)��U�xeԭp��#��s��`��MuL�v��D4�NƦD�����K��d��ok�)�9 ��x�|�wz�7�������ƒ���/+�h�:��z�D"Y�d�>&��M69���s��1e맏b��4&Y�`�5!�l�E��e1a�y���_�,y�6a��Η�����r{����Bɼ��L]�DӋc�An��������xJb�֘���C��ؾ��A'ES<TȆ�~� X�nH:r�|�Xh$I�O�S;�~�/k
�����I E�,��v8�-oq@��^�z��W@�=6�� �2g�z�}�X$u'��o�D�p:FÊ�J|����ښ�����������7��VL����\wA>w:Խ�}���*}��̩�z�t�ʍ�c���%Q'��K��rNψA"Sч��X}G�F��c��|L"�F��Q�(�VtWy&{Fw�p�sʣP#�e�D?����#y��@S�z�)�/c��n�9INŽ:��{E��9E�˳T�'C���s�#������g[� �s������S쿫+�������;��7i��j�Z��(�E�f�Q�	�h5*��$�p_r�
0�+���{���7U��G���ݩ�N��61�ÏG��|�>8�n��{N��qf%�
�B;�W���PA�-�1_������B�ɧ��g����r���ʿr"M��6��@R�2e��I.��9�_e��b�MN�R~�c(!��hH�+���	�%������m?#@5�|�q���2�GTf�ѱ>G̬[+Ye��a2z)M�w.��&M�2�N£����3K�N�ҹ����ޖ%��
P�7~H�6��X
{s�M_*�j\/��r5-U���J����y����G��ѕ�;���q`Ge�Φ�w;�@]0g[V��@�";KNl��J8���1��\�SUE��Eg�S�+w��&�G��:c}"z[/�n_5�k�{x�댆'�8Ƅ�V;5��1F�<0/�}ٸ��PLX����C-�8��>���
�p)�*T����7#jV�K)�/t?9��|��4qg*�� t�f7*�-p�����p)њ?��\�w��|�C.r��E�n�LU�τ�c��?����
�ze�c���M��H_h7j�h��ş����x���͂w�\Ol�\5|��Jr�;���QL
h�s5@����^A�"��A�z�[�J�6�R��g��;(n:ߠP�7J{���Aן?}��9�t\�+���)lͯ����͚��c4mD���r��A
aF���6]v���u躠��$=T
ƣ��ˮ����T�qbēɚ���t�q�1��P�9�zx7���v3�����y:��{���k���B�G
ae�y`��,=�0�P�&�ȣ��KlZS��Z�ăi�Y抱�؃M|<�
��7�L�`l�g��g�:��c�U_t����ڞ�p�|{�w�ٟ�\�Jh�eXrE!W��!g��ہ�i-��w��Z�`8���{��a�������������N������l_F#r�z��}�IjUҾ]�GN^�!C�}\fѮ��yr��u�,�f��u�@�k���^˒�9�s3؟�W��4���λ×{��`v9�"���Q4l„/����<��)��(:Eg${�P��pU�
8�^BJ�K0
��@�Ŵᱯ��s�3�n�d��J&&��6 9�b��jX�c�%�e$s���<k�k<�:I�^c��!�AI����~��6��x 1M"�TĞ�!�c!�'���-��8��3c�0A�8���M�yu�^��\֋�O@d�T5܏�ѢNz
�����YBfg)̩��RA?�~]H}�y���8�#�|R쵣A�?s%<�a��v�J5�]�;���n�����+�[��ǢSw����~ /T籘p;J���D/[��S�jY)�[r԰c����)p�G���|�򄳔<�uJF��<p��
Q��MJN��W���S{��r����6%����<�kg���w��
���:X⵩|���2����?�FV�����F6�����`GS5>ű�ӭB<2��F�N$E,#�=��5T�+o����a���l�s��s#o*�n��+�a�{�䇩��Q!�1�`����D�s���RC���EH�����A��6~\{�����vK��ql6��%�
D��X])K��lk����b>���#���
?��Z;ns��4\��7EK�u#�����Ly���i��i�@�2��Dͫȏ���zL�J����B��h~�̯��,��+u�[*���M�?̡L�B�YB����U���
(@Q�qA�E�.�j�P@��)pe�I��<̥�U��`%ģ��f Y5�!��̆���e
�Sf1�_����v�F��0B
�Q8�z�%�x
�
a��{�o4٣�*��-<r��4�{i��eݸ�#/�dR�*b���Κʴ�N�@�~�+%�k��u0"/}g}kQ?�й�߶����7Gc���͋�"/��g�0LG����
�h�"�s&���R�ur$�d��		:�as<~���&<j�hn3�C�T�*�BrfQ���S����*o�+�P4�5c>0���"��Ldi��9�D��'�V�D{
��P��nN��9�~�����W���
d4���J��s�CT�r�=�����e`/���
�	��j1㞵3s�P{����Y�2 o+�W��)�a~guuK{_ٳ��&A;�.���!�~6���4ʼ�i��peLv<�0�f>���73���*�-�g���l�)g��Z�&+p4�RdԹ��&�Ӛ	8�����^�We �Qr��V!��	%����	��/���ƨb
�K��d�$�F�,�]m|ڕhx�盾�Uu����^�������w�) z�y7���EdR��(��H���f7�d�E�+����b����<��'��_�%e�\���Ɣ9��a~�Q������s.��R$U��d��Sr�/���q;���_H�=���}���?T�3�p(�{����i<ZB�^�J����y�I&\d�&�!y��<л&�>��3���@&9�h����;�{��J�XV�9�y�R!>S�!yA����N�:k�?Bz��c#��9��Vv҃��9�x^���\X����ҕՒ0��<K�yǁa��*f&^'�fNX�/(8���PO�]�{8fB3�����!�/͜@��0���*5��\�A<�'�/����!VO�+s#\
W�7b�8MY����z�hist��o�e��GAi��IR�U��2=�t�)E�4��?'S;ҝ
�/��~�r��X�7��<Vt`	Wa	7�~˖�˼���lM1C�'�BU����ӦwH����s�^�J��D+S�g�vs��k4�1�K��x.�O'~B���q���E{�:upSdž��2}:9���FQ�d����Kp��L�e<Lw;}]Z��[ǜ�	;�4���!�+,�
^Y%0v��f�f

ᣬK���U9�V�~�&�Ѳgq����ѭ��P	��]��3�k��A؜���XH��z.-��@�
��}�~v
�)�P�W�)�D;����d��h�T��݊e���FPN�u^G�&�x� h�-������X̎8�Jy�4��1�����{����d�_6}ˇt�	�'_q���O���Ł�/�8�gV�u�x�j%9)ƕ�|�m���3��f'w�&�5�
l�{q���d���ٓ4��� �2����n�#���Ϻ6ms��
�)��Ga��W{?��ޟ��R�1U>���j���i;5Y�F���@�6!�/%���N���js h_6	L���s�O��ؗ̀��t���2����0�E�/�}��&A�nM�tz��Ky�;�@`)�D�,��.��A�S*�J������G��
���q*�:��6=����F$+�ɻ/�,n�_U�T|]e�\�V����B���e�
�j�J��;|�_`��|�-k��|�s��ꤏ���:&���R�ކV�Q�Z�J�e6�d��nXwv���c�AFB"�m�[�ܤ���qp,��K��� �ҹ���Ɨ�(T�PV�H>����� ��j��HYDl�Q�/{���u(@<�׻�ۯ߾�}���yv������-�'ׅHi��o�1}д���[��Z!N4�pSK%�N47�*��~��[a��8���^�$u�cs��|γwh4r+*V�K��\��[�ҳp��Tj�a���	]F�w+�
1fԵ��V<h�H>�٘��W���A�C�4�>���L������'�"�N�?4e@p��C�,���:����Q'X'{��Q��/=������0�T�R)=[`�̎M�ҹ~�z2�a�<�2������s�Ƅ��K�K(�IEƗ������c`�,0Ly*���3ZV��)�&��QW\�zYWiv�{�>kQ��N�-I�\�z�
�^z�쉏!�g)\�W�i&ch�*����Í�Пh��nH�D�"	��]����Y��D��s��]K�7c�ϗ����̶������'��c���8����}�Ί�<֋��`~�뢚���k�MH�o�<��#��ul�+x:�v=aW�+�{��h�%�W+s*w"8�h��)ZX�E���!W���-z|o�_ۙaC�V��X�R�Q%g��p��r/�O�p�v��Dp�{���
�u7�[s��VJ�V��5��Ʋ{����������y�gG�py���L��_C�~�eƣ�,Z_/B��$�׹2Xp�xׇ��
����Ն��~����.���z���_)��F����q�0 �"�Y��^뢸�ʉӪS,�Z�JX�<���Z���J�j��g�[y��-e{���Pu)���	f���W�xٮ�,��:��r[~o�h�:�Pe����'h�����O''���N��/{�����J���x�6��ߴ�+�d~��U�dY��b�
��מ5�A�=X(oB2"܀9�p�>��o��
��:�\K\�_u��lQ�-��@�6:l�vX�������ۦfU
��~����ӗm�v����~g��T؛�]Jgl�� �.�b�gٗ���
�r}��l��9N?��v�a�y|�s������G˿�{����W}������Y>^z�[s*�xb��(nar~1I
}
���X�i�\�Q{�4��n�������"�J�Z����Ka}�_�R����w���3��|�o����?����F4]�J�tY��ʕ���X<>,�l�Z�s�_�)�g"���A!w�T��c��BGZa]P��5��,^��hbb�<;��4�b��9 ���2u�d���yz����8�a�R�]�Y�
��Uì��W�ؑ�h}�IZ"U��u��Ӭ�M$��ôT��j�gҕيwK(ee㾥o�T8*�:�j8�]�n�B&��N����c����_]HN9��(e�����YL-�*�gaE�,��[A$�w���ZR&9�O�!��������O4�DX�X;�9�C�@hdr��Z.�U�З^�:G#�D�m��������R�"�0*EC��Z���(�+���a��Ek!�-����bN3l�v��>x����y��f��e��&�2��6�&�K=�|Q�r�6Y�:S�z�y~~�"�\I$Aٖ�s��e��O�B�F�r(����jA�C�5��s6.v���:�����9�p&Ĕz����R�
�C���눝
E�RP1W��<q|�U3�c���M����>�����]b5���'�d��]�F��eD5�:g�†�wH�gH�%���xM?o�@'K،��u*�Ŋ�+���͎C�@=��HEU^���e��g	Ŗ@��.�%v	���<ja�F��6Xs^]G�~�+r+x��`�l[��5Û"��E�XXi(L�07��w�(��i��5�c�%�')�� sn�FF*��Pg0LK�C��{:c�^j\V���{<f0�J"<���]�+��[htEl&�1����a?�cb]�6�\�q�f.s���ݽE|깴펱F�R���Y7�����{g�=��d�^Sd�%�v��Q8Ƨ�aJ��jO(߁�q�Tr�6$Q����l�V�#�C�9�s���Kⵆ\��������4(��C!�@�9ǂ#��*L��4�����X
�c�wHW!�`�5�/,t���d1�;���J�wE/F�W���)%��Q{�:�k��y��ߥ��(EeL��%���s~���f>\�BH��,9�����i�6��)`���"B�'<9��}�!tGƙ��߮���z����N��2���ὯL)�V4\e_7�p�+�k���Bcfj�j��
�h��,��z���*��(\��ܜuA��]T|��
��f�W��G+�yD�1��E8Z��)��(�m�q�mJ\�|�
����/H�RuK��X�/�_5�:H��$�<e��T��g��<�"��Sn��[�o���[�|�,m����qx��G��q�\^�8��}w������[�朔Œ��M�\�='l�`�r�����^b��d0��q[��C��'5�C��*�_&�����Wx��yeOΧ�)�i�Ӽ`"�jU@�pj`��]y���ޒ�b�{�N��p{��Gv����|Lݑ((�0[�Ot&2ӱP�`7M�32[�5c����Qe���;�������#�D#���]#�??v�q9c���¥cnD�Th��p*۫���܎R�Tq�%�>�l��2S�0�
��%:��v��7�P8J*C
��ó!Gԇ���eJζɰ7�,X�y5�)[#�$�W2�M?*�Ct�I�guQ.:{&L�q+����
��n:>#+��I�$�tŗ�Z�xd�b� ��m/�U!��2}`�.v�[
uuk�a#'Þ
C0��c4�9p�{&�6�'8ҭ"@iΊc��wv�6���Xg�Z����ؒ׵rK�qw�g��E��u�c�U�L����0����A�]�Qـt��+� Q��X��h���L8��' �� dª��Q�D��I�
�Kt�°��Rn嗖���ϑ�!��.)��o�����U���|DY�r)Y��7��jɸq�� �ϒ$k�|P,Ӑ��M��"㊾��~��(E�"&�)eXu�.I����5˝\��wK�{K&)��N�V(K����s���Wx.�vJ�.��8��8�eN�,C���c�m�{��dv�LL�}"Qe{����Nf]][���R��i"�4��,sFUNTah��@�,�!�L٩&�PcЖ���W@�U�
�.ِ�(����X�ҌN�
��.ł��C�d&M0م��r:��.$*����;s���A!��\��AF�ZKŁ���94��h��PQ
�ch��E"v�"1}j4Ch��'R�W/W�*��&��K��S��|����7�"b(���<�"٧��,E3��{��@���wI�I�x@>��T��r�Tziǟ�`I�^[�]�Ƒ�tQ����=+����`+<���B�(���%bV}��'��謼.����9�a�.��U�ϹD^KހԕEL�@',+�o�ἇ�Q��X�����l&$�N	)�O�v�[��6Y�{Fpf�aL��E͵D�b�xW牾4u�+Q���w��)��`��r�H��;[�d��Ab7�� \��2T�����fZ]��r	�|��h4��Lϡ�S,�6߂o+���I��)7����e�W�� c�tR��VA㣓�e�Ur�Ϭ(8�y˓ո��t�Ce2Ic�dI
���:(�,1�8�yq����5�E�‡�q^S���`ng-1�}T�F/�����S�_�SKD~�Hm����HR?P�ɐX�CH<�w�ii�����E�x?��48nC�خ�0�����P�{��A�3�0��WdDH�*���K�%7��b���
�1� ��q(~�ޝo�e]����O�����|�wH^ÕZ��l����d�������&�-�в���YR,R�}��A��~���{��
ǣA�9c�e� WEu�r�H���ק��|��C6e�2��p���#�7s,���PLDý�ݘ�B{�M}��fAe`aC�����~Y��+�xc�\�]����h�>�wP���u��;خ20Xo��T��o�M����fSVL��^���7e͑0MzR؃���y����\+�7K�JMfeee�=48n����C\�֔�ùYI屌�<��ȍ��[/��v#W��w�=:��,%:
ذ��SÅ���A�?�+��H�݋kƚ�T\��l�w�t~�=|�y��i�9�=������_��V��8�$3M�v�jZ'�dH2��5���BD�1�D�f�K�,��o����2�~��D�)UwU������g|p>
�a͟�R��"E�Ɲ[�x&�P9�x��\�6=�-vJn9��
�<x�@:&'dHM�*�r��c�̣�K��8��ȏ1�\[4l��l�Kv��i�?t�b,�V���x)�}����#T׳.��r�Z[�8ҙ'���H[��MV�Y��v��̳�_�H1�VX�(�ͱp�9K�:�G.�$�Yc����>���
D�+�x�{��8��$��I��؅�"y[�����TO��:��u)�O�X4��p���{)����7|!,�0P�-O�.�A(����N��?���KOm����U�V�!�79�s�*�N� ���?�����]�B�����B/�G`�0��P�"���������0Y�uX�ȚNF�ˑ��T��K���9]��pO��Іއ��zHq3+_Y/���kHZe}w�r����L]����BG�'��r����W�tаM��rh�$�e~��I;��8��V^m�޲��/|�)�F!zy�5zE� .�g�Tv>!�2B螥`=Y�ɓ\�16V��w�4\vD��?[�ӟf����vٯ�n���O�b�*�#��'t�ڒ�W
:�}�a�j��J��C�vp����ρ�k��R�tN�q�%�鈪�k���YM�lV��*�%Ha��^)A�ݲ���#۝@kԥ��C[��K�
8fv���s���w	��cᛞ[Bm,��.Fi"��w���y��7����U�T�^R�G:����Px�p0���$�%d[x��|<�@^��C�|%6��D�h���_a֦sA	:
̂�Vy�0��d�m����b�9����T��ˆ`��B����&�]�E�w�W�{��0U�
�΂�L����{�0�2�(c��0����e�DA
�nypc���#v�/��(\7&O"��u��˕�)����BQurZ��šHmL��y!�~c�v�����Npni4�='�q�(��,�|5�rʷ��ϼ�%vTA���Z�]p]XoJ����)}�V)�N�)V^�?:DF*��jؕ]�Yմ\�’6a0�4�X`�v���8��mVs��*��ޢ�h��BS�gG0���ĕS��U$z��s9�����s,q�SEHQdF��Cg���aiK0��"�ɂ�A��Mx�*����[�W��C�����5K�-)ʄX�~GDQ�8����@�;�����(s���"�`+��?G���d;�a�-7�_B�=�.5�]�N�aynh��l]	u���7|N���dnH	�ms�GE��K��V(X��$/�kGق����՜Xw����T�'P����?
]$��y���8�્�� xG� 5���0�bƭ���aw@�FP��<l�\��s�9��su+��(�Na笜��u��4eǵ�H�s��ظB6���Qq��TODWr$9(�WV�G�"fD"�67��ˏ7�ߥ)�f�O�����y�G��zY���9I����HG?A*�|z~��K���Hh{!u�YdM&%�+j�t���>`�`aTc��u)xv2ׅgu������iig�R��H�1E�d��V/ý�r%{�E�ƅC�N
���>=C�.~��C*#(Ѣ��Xt��$FT�*0e[A3k�0���~��řYԯ���.�Z�V��M�-�Z���t��;t��u�N�q
��z�8܉?���@I�b"���[�m�>X#f1zu�����8�U��;���lzj��]���E~N���$�[���\�N
?d��Az���&�q���W�~J5(c���`}}=�����7x{#?�]A��h�VgW{\
WL�ً�"/�3�=/���1g���/̎
?ix��1��>�W1�]�����߷�o�t�(6��U8�}����<�����\]y��?V766��V?��WV7��u��g,�O&��,�S��z�O�_�ߢ��vXC���.��‚]�b�YP��>�[��Uua���~�̱��+@%TzȘJh��/�;ǟA&��ӊQ
�3��{*qs5읍�a:�8'.�-��B�M�n�{���5�D6H��zo/8D\s�VtR�A��
���-�%�L��-�xs�x����įi]�EzQ��~��)l�\b���v�Ӻ%�b0s���	Z�܋�|�;��m���ʣ�G>���zG���T=�E7��`Vp!`&��E`UΥ*����"�uZ	�r��K	�.
�D��
6l�(׻K�U#��l��+�*�D��n�Pu�=.,x��R���YE�ŸM`��?��ID��_��8�kx���p����
��b�5��!�DS���p' iIe2y�c�́m�2��A����}�{�y�sx����}����1�s
��e1c�5����M�T�2@���ʩ"唁Z49�W6@3�0��Ӱ���$�K%��4n^�d��d�xk2>Y���?��A��Z����F�{h$CΕ@3a3Ƅuef��qEZ#`�㸥�H������r�d��Rt,k�Nzk�V���Y�[���E��m �h��Z�V
?�б�a�]�՜]oku��8�.jߵ������Ջt+޾[�'ɂH5�l�辤E��s�x,@�~��`v���2����5l4�!���>�hhnbU1iBSd	�l�:9�* ��֓�Jp�Zj��`8�l�^^�P�|{�\%��ͬ�RU4��Q�_�U���:i�0!;��w��2xխ*�����>��u��E��N��T�q��>�H��Ajq
�x���o'~�Z�J��(�?{���6�$
�g�
�<Ӗ����n%nǝ(?��Yۙ�YۣP%1�-$uq�o�
	� %gһ}��>g'Q(�
��BUA�ڲ0� ��ػ���\d�k��t��mS%@��RXu�?�����?�=��C�$i�\�M8��F�4! �pң�@;7]\��;g%oߝ���^��{�����7g��̳�֫�7�޽�����?�;����{��N�^���'�m��7�Fpl�w��T���	��?z���7�f��]�ڨ�cd}��)�L|˂�x�S�;�ٱ�e�S���j�����Y-�c��O�����o�^/���_�鯳�y?���B��'�f�@���)#Y��ª��ӡل��
[~
�z���A�����Y<,����G�2��eU5Q��3��{��IV)H{۟FU��F�+�X��b�m��;�
��P��czv��_H� 7q��!���#+�1~��K�Ϩa����[D�p��<���n,O5�>q3tܔ漥�9��Er?ƛ�lՐ��;yq7�8��t.k
_�o#.����?�;��;���`�џ�?<���z�q��M����Lz	RS�`SS\l���-�B��c��>a�2�/�X��>^��[�=�-|�h����
���<2 ��M�"��ySy����3�d�P�7�#�
��E�Y�V�����irgJ�w�3�J7�7��™a�[�颭�R3Ou��d�Y��Q�����c7N9ʶ�%E`mG���:̲�Ւxv����%�λ��l�K-
v�	M�@(5��E�W��wcC�'�>��≙�:Ms!6�(��D,�+4�Z���ז��S�E:Bpf��=P�@�����&�X�N�D{�R|H���QHK�j���/7�S绠J�8r�Oo3}�K! ��q�f�K����`�ӏ`���f������r(�c���h�^�gO�JD�u%�K�&-6*=e�x�,�x�%���Q�^B�F/A�3��!{L�g�0 ����Q��ϭq��*m�G��9�5��.����yx���F�"�uu:��k�K�鋶9�!P�����t�(`�Tc��b��<),l�����q��M&�wMlD�Co�_l�$��
fa6c��bp>��Hq倅�� ��ʞ���}yB��J.s���,�0���Sc�x�o~:�4e*�AW|N�
{wo��Y?l���c��&*�����^g?��5�Q�7�J����G�P����
�e/�ޟ����$���;zOe6+���	tᄣ8�aJ�rm�����Xz�T�5�ms8F�H� Ǎkk�F^4I�x*�����
$2t���U��H��g
�Xi��#��cj�X
x�+�M���JA^�@,ئ�2h}�s҇N���~8YM��T��VRQ<�;�cmJ�q�����ʴ��G���K"N�z����f~�,W]�׍l��f���(h�+`�����6*��OC�t>��E�
������'��i�F!ȡr홺1��N�)�`��R�e�ŏ̀͆��)��xB�5����\�J���n:�+��Qp1P�q0ݫ�8�}�tfGNz��I*����ݘ�%f0~�&?J Q-
��{�ŏ�-��kdܧJ
���S��i�Q+�C�l�@���I��~^#P��^�A]5`a>Ɋó�Oå�t�T����h0�I�j�On��#׺vo�#��Ĕ��V����D�0FK�j �3�7J�Ei<7�K����[y����Md�4�e�Ǐ�4g&e:�B6XA
�9M]_!�iR�V���5ޔ*
���<�ʆz�rA�od|����/Mg�t��
>����O*��ܠ�Z#Mw�vC���f����/(�@ă�IFj�x��Y�v�:[�:0HP������cp�	���u�+��s*(�Ԋ1�(
"
�S�F2�)Kd@���U�Ԋ�7.^$�{8KA��b<S,�{[Q8V�Q��d�����e$�\�0�U��qc��WJ9�3�C�=��r����]�
�Rï稉�:I��a�'8KL8�V�BTQ�e"IU*I�zZE�M�*WJKS��d��b.C��n'���Z,*'s�C��\����3�e����%י�,��:�H;�Gäz�X�`$��ѨV�A�FF�U���M�%J��AM�܁�X�k��J���T;;Ú�� 0�Y8R�y��#U�y�:��ɔ9�0/s5�ȇ�L��5ց�;2�Q0���2
k,�����'H�HTa�F���lqgb�L�^���#{wO�Tw�F�ݲ˞�a~*7G���t^8A���(
dwV�ΰ�|Q;��� Ќ�JM�H'��j�/(�Lt#�l��[��Ljg��㌲�S/�;X,�e��!KU��a��
¹2´1�+0^
ߚ˺�h�0� �>kx�0�Ť�!,��Y�+��
�e�y��Q6�OpE-ש�����p
��\c�уwvڬ�37q�b�ʣ��P�V姇��P�\%p*v���n��(���ț'�Z�YKVݱb^)�f�a��g��=�5�L`:�/��J��}$�d<�qOf,n�Wlo�e��Y�֞*��8
3v�-W�+�H���Mk�a��>"��	!nZ+OA'����*�IHK]�C[�w<^��Z���SmQsB�Q��C��Қ�)���3�n?�T���F�F�'��7�=j����zp�����N�
�Q:u�9�j�`�(�c��;��O2�*�Ǹ'��h�u�Ēu��䇵���ێ}�	}�ld�U6��G��JT�o��K������+@�:�d��枊���h*��e��c���˒�8��P�蕇���a�d��)�I��d=���D��~��!�w�)P��U`W.��WUc���]3
��5�����j�'��q<��dD�ϕ�~J�ɧO7�F��+��fa�?v��8�s0I�h�vБc���o̰@s�;�IP�ڙBg���2YO��5:���'�A�(<a�k�eYѲ�dA�h3Q�o�xZO����S��㊑;c��;�BjJ�I�@��{�A�|L��{lB�6&Y..�e*�a�Y�,�|�Rd�
B�d{�d^���3O��'���n�^�MW��M��6t@�}̾
��@��ٙ�%�jA`ٙ*b������>�0�=G�Ǚ*�I�>6!������. �� �O2�'u��i�!��7ZU�)j>U������>>�����7͆&���a�]�u�v��8���4+{��}�
Rr��A浆�'p�@uF*����#O��y�^Œ��ջ�Aq�D�m��:��� ( ��JD>(��J��,א��F�AB�����.�ݓ�\Ù�%��`-L�zw��:6�vGa�>�2�I�+G���H�ޛ���\S�GH��7��p�q�!|SN ��Ou��?/HWB�����ݲ��%�*W�ěL�}⠪f��zO�č���[Ѷ&x�i⢗�w�7�׫�^��2>tT�8[��|��նt��@�T���،"f}pj��2;�l����;f��2���P��g+N���LMB?��G�ј�h��u*�Ҍ�L����l��\�!v˞��Q�����0�V�	ʺ!~�@�JYg�tLa�B��PQy�$[i�` R�q��܁[p��1]{�7c��(��DW����sbE��N�MVc4��;Ԗ���Э�m����Q�rJ��;S*�{S%���r^�;P�4��r��v*��ie�,F+[�.��.�<NY�<��� �1�x�7`c�3p||���y�E���J\���n�\>u$�7�}�FY4}>|X���h��r0��hR��n|�l\��c��1Y徇|6^��`R%�`�oH��oWu��_ī���T-؟��`��
�Xy��8e�A��A�
@�1e��SN6u1���Q*�^�CL5c�Β ��%�c�°x�u"�s�՚�]��z
���DU7��\wk��#�I��Jk
K��A�eH��%��
���h�)�Ѱ�jmܲ��S�cA���ɧz_�(sqE������x#�{꘼��X	S贈Xu0�����k�
�%����"pC@R���T@`��Y����Dװa�v�zm1P�тj	Ƽ����V#�sG{�AH�^81F�(�OAxSG�A*��Ad`xg��oLT@�m�O'^�I���*"1��U�6~�4L[I���X��u�a=�����I.�J�Jj9�T_U����gb��4A��F���.{<]�K��O�±o��y���R5\c6��J�x�D�Ns�⛕��^�T����:G�G�NR������q�ê��B�`L��H�~�u�S.��u�B�T�ܴl�>>U`�;����Τ��P������k�b@��|a(.q���47K����y�Zɂ���*���s�(��:P܂e�\�k)��I\6
�|�A���r��ڲv��_�]��k��W�e=��f~Bמc��	��vz�G��Z2�aͅ^�fC�+��D���65A4�kͅ�;��
J��"�T����>&ݐ+��z�����r��n�V��u��0\�Uq��ZU� �:����)�!&��*E���{J�����+�ҵ�����*
��G�v3,�kE臗�t�k�Q�O�C���&w�!3
�H���1pK�.nD�􎈘�MwӉF��h���`��&�:\A4�:�rM\�d�^ �R;�*z�nv��+	׌�k)،m�뮱�(���`�O�5�	�4�V����}�1b�w+F,���Γ�Ib�;�0CG(�ݝ�0�a����ք��|$ŏ�Џ���T���Q'P��Q�NK��a+��LINb'm�3��Wq�p�����|�TLQ����:/��6��_qW�
��&�/��\�,��H)Kd�J.+�k�w���Ǖ���
�l���~��'�h�=	kbb�n
��Dن��.���|�O��
���s�,���`���_{uQ�C�\_��FU�(�j�&�6�1�����)<0KNBg��N�N�?\CG(�θ~����$�����H�`��;,ŝR�vs�!�a��}5}T֓��TfeO�a�x�[
��Tg�y�i'�\pD,3��W�^�։����LY�6�_Ʊ�U����G�F^X7ĸ��`�X�Hq=���R#�8��a��3�A�O�Ѣv��7[ͼ=��m|���Q;�oG�jd�Բ���$qW�T��uɉA�X-"����|U\L��/N�>X�@5����l�qF���i�E@"�V�jݩ�G �}<���B��
�H2��4W�~�E�-�~`�v��d�*�#L�=�@;f�
$v߹���YV+��k�+l���rH��z�Cv!@7���+��A�wl��H5���5Ʋ���G�Uv�3r��|�*r���n��hJ��A��'�Ǚ�\��]R�4�j��	�v�s��@+n���S����0��Ph��8�9���hF�dPC�z�sWz3Uij0�g�	0���u�T+KP���ɨ�y���K�R�D��Y��R�`�\q20�~���=*|�b���+�9�9�v0�pZ�7\�� Q��5�j����G�&�H�9)��U$�A�P|�z�Ø<�)]���.Q���Y|lg�	'"5U'���_�Ut���7�k��M�L��s�|eW�i�Xu=�843(����ٝ*�u?V�`;�G8��\9%��F��>tK�V�Y:*��%�Ն�DqqL9o8Ռ��l}���j&ߴ>��TB������A�
.i�k7#zH��p�`:\ p�j�R��N+N]M;O��j	��uábeI��*��y��;���R��{�[�5��S5��'�6@�Y}��*�R�V·���nP�@�
�z�B���
t��2�1�ȭnP;2G�@�Lu�lK3
P�`\+lMoFID	^��J�v?��ӵ� �TkRu�o�
R
u�A�5N��ʯ�jHEI�#�H�Nor���W�1�f�g*���\>"���Hq�I�#��j�:�ң���PTb���#V��]İ�k N㵙y<�YY��&w�x�� �JA�]���ʰq-���o���յJ̸���,/-���j
N��i��E��/I���ԓ�ȹ6G��̥��\�V�i�H���^d!�W��Oob7���IY�"g3y�U��ᠸc�N�D�X?�*8�3��H���c�l���G}��7}-آ&uB:���g�v��\�g�A�9q����E]�ȜZ�S�2�������|��S}�z�^�W�gF�Mn{H�S�3�6�B3�*Qh��kԀ������
J6�g�(g�D5��=5SS��a���Ǜ;��ɖ>�j�f�!
�L�K5b�D-�k����%ވ`��jW�,q��\5sE��f���$�B�+!K
V� �S�jH��9Pl�q�6=
&˕Y5���#�����2w8�@�G*�ZVo���a�ܜ͖�H���:��3�9[f+�g��<ˋ0>�B�;�7ʠl��b<
�2�`�v��4D�Ff/,�9k��X�\�;�>�J(滋��0�8�H�ש�Ñ��o>v�C����p�C(�J͸K��|X{A0W�i����Q�Rs��
�-0O��1�B�t��y�vW��q���~�!f�,�����)V�����)&N��B5r��d2��ghi�M;�ܺ(�QM�'f�2l-��̏��>�d)�s2�}�5�UqA)��>*0��G	&0�_��PPNդ)��EPk��,C�"�G�d�v�P}qrM��H����KA�+�i�w�
��5V������US�j���S5��b�勦�z�Pr�[����kԃ��z���w��U��W���2�*�h�Z���Q!ˤ6��9t��R[��|����$� �#(�i��Y�^#�u=�M���|1����L]�z駰�?�`:1=#�ҩ�
@��9��uߴ��3Z^��4��.K���u�SgyY�O�Tmqǡɕݰ��a��T�_�Ro'�ӎ���ǣ:�=���y9�ɸKU�^��J�"�C^E���.�U�|�r�dx�+���J���޹��멶e
m@�鲾_�m&Q�Eu�~O뺘�y��o5(��`Y�˫�_T�F�;�l�h˨�Ű����˒�>���vB�_E�axle/V8OQ�8�rC�X�u'��q)B�>C�L�T'W��X�ي�O��;�W\����8D��LQ�7�*�2����qʗ~�M1���'�V���;�ֆ�y�+�)�?��2u���GJ6��HgRc��9y������?�l'��z;���v2�=�����y����wv=������>����`g�?����	 {te߯�[U���6�q}r�~�%^8��$�ߵ�J���7�^�ѵ,�段�t���[�_���ߘ��ݽ�k��������om�o��ŀ�h��!@ƒ9
�t��}0�
��.�S A8�7�n�5@�2Z��-����OhҺ�f	Y��`-�l�2�����7�;O����om,�£1�B�Q�wj˱8�[�Ʊޝ�"d���(�d;�eL������m�c�$n6K�*�޲!�ڳ��|�:4�лQjA��;F�L��*���hf
���U�y�S�5I��[��ݛ̘O��EV6e�*�L��'Y�s����6�ٵ��3ZH:v|��k�
\��rRY�Mu$c's|����`Ԏ�?��$!����)\"�L])�%\d8H%d>h��Ȯ
��X`���b��
�6	�dmI�B�!����u:1L�� (�M�n�Ց;�`�is���6�>�Р�����#ghh���?K��"�'sԍ���?�8z���{�w��N�������sIie�q|b��-�NOON��om�	��6���{�>�MXV1	O�Hp��^nZ��k$�_{�ŀ�;m��֙�Z���ۄ-��ն�8Kq��-6��	��V�R&,�ۓ���#M}]@�z�]x���`V?	�|�I8:�����#C/�> z��><������{!:��(u�e���wa�:�:j@쫨!�Nޞ��9��nn`�i�'���'�)�g'-��	�˿���ν��c���sAa�գ�OX�ykH$x^‰���v�y/�-��;v`��6�L��s�S��tJ���ف�L\��ˇ�j	���\�t�]�ܙ1=�0��|*�E�O]
���
�g*C�.$�,�B��Y�&�s�c�nõ� '5��hT�k쑱r����;�%��X���_L����٥����_}L=|e�Z�HN
=����¥�B:�amO_<���z(����q���IR��/A�>��/<�`���r�d<D(\���/_d�8
*CST�rʈ��DT�Z/��z�$*�	Ŷ��4��p�|_lL��dD��XO�o�Ӷ���Ԋ�A��'��,��~�}�(I#�-��|3	k\HóEMn�H"D|�|�2�S7P�,��s��́�z��ߞ���<;y���â�����������RA��yߋ�����y�����~N'��������OӦ ������mÚ���?�ع����
��Hb�=��R��i�?����{�/O�_�f5�a�teZ�o;���=��,y�^�H���\1��¡�S�]`GX
w�����=9=W�bR	��zM7~ܩ@�)�]&�+������%U��8�g���ͯWR��G��́����'WBz��P!���B�?{����!1��	���
�xve�A-3�V?m�45����@|��Z̍D�45 �����я@%i<�SNC-Y�/G�XlC�U���@�h���b�r4�2�O9����>-n�A��6m/�;�M��V	l���_%�=�d$ej}��_ƾ����Hb����yH\Sn�������y��y���o{
lFLY,�۠3K|�T9jHH�x�S���8�\y��b�6eC	���8�n��c��	"ȫޛ_�_6��tEh�=ɦ�?kkS��i���X��1C�̛����H�O��o�N����{���
�-�ҍ[{ye1����a�0W/�����'�ѹ�aY�A���@��,��>;�խܔ��R�RՀ\�j��}�Qh���t����i��8=��	J�m��'��7��H��<��-y~m�N��֗���E�_vH%�E*�'�J9����bY�P7�������`����%���ޟ�(��p�m���s�k����4�s�y�D�;��fsf/W�p
r��l�m�n��p+���7f.�F
v�=�r�A�e\9�T,�-��}»+>H��'OHY�;��='�.�,��%��%S�闓eI?�V��	��s��˦8U{��E5�S@0-]������J;���s�W��$�N��Rar`�|F:��ciL9Q
L��ZX.f@M�ymL9�~�',W��>Pu�%l�1�t;�#���E�<��f��qK�e�G�>��2h�j��B�#��
�*�"��{��6բ|ț֋���uq78
GW]�v�X�^w��L2�#+�d�M���q�������-���Fl-J%�#7bH�����#[��h�L�{}���V�n	�`����Z�}g�#�[�o5�5��:�e۶��l�pt�}��軆UH]l���.�"s	$�$7�"��p:���cnAQ���+S����!�����m[{;��΃+���l���Q��vC�DA�|��c�K�G�+lj7n�!���wW�Q�PeR�is������43��"��1��wV�V��GI��4K�[Œ�}M��,�;&5�f�2lH5�/��[a3��=�'	��ض�`�Z����=8�h���3o|�/�
(�hIF�`y��q��������la���N��ҔȰE��Z0�V�*�Q�k#�R�Q8^X_��T`��HZ�BU�`م�Qp��5v��U�ش�xLF��T�GY��Zʠ����I�������,�*� ��[�B�چ/�8��������@Co�Q��]i7��/�	~,��F�.k[��l�C��z�>�������ǣжZjF����p�Z����ު�xcƇgف�h���bǜ��o��º_���1��ٓ���^�w��Oɢg�-lxҔ����ʳ��s�7w^������?�?|�����h(���u�f����‘�á� `�l����gpT�u|��Q�[���NO��&y�d�5
[x�
Zދ3���
��m��Eټ�z������Qi)(������vq���L���:�� v�EV��!�/��>��s�-Ո�u�8Z�1u���kf7��7�F�-�gU�Q�r��<�~��U�������?邋��w�z��h�5׌�w/^�N�g��S��w�&�Y8�9}+��{Q[���2�v>���X�V�"M��Ұ9;b�ܴ�W
�X�(�|��e�;�H�_�9�d�n4-s���"���$�[U:�U�jROؖ�O��?}�����~+I`�����C���p���y��b|%�VdY���xR�c0�������(~*�x��� �o}����y@%�c%[{�j0�0�`�P�ըװȷ��_9�=_�P��u�1L0)0��ss/���u8;pbҎ�EW����T�|n��"�8��AC�f�v_`	�P7s�����Zԋ���x�;��]_��1[�*�W�z7�웑�*�+.�e�d�o�i��C�(6:���'�N�21\��lArb��v������%�'���W�#p��YR�!2��6�'�-��C�Y��f�_��,Ha
JbE���YDMӥX
u'�J{��ʁl=.���n�V�k���G��]����r�����UcC%7ӺU��X�H�mY��3F��"�
h�a$|>.��ۋ������vD�R�ۍ��f��5��=�^\[�-W���U��^!ulD�5]}��$&n��m�Q��P��[�c���(@%�q�����.=���Jc���l46�<��N^lT0��d��3��HJ)��kI>]�.4���¿�\�����lYC���
��!�_P|6p���E6�����e(s�o<h�@�&ʽ����A��n���X/�������?����b��Ѷg����6�{���<&[O��%����k��<֣4�z�Q��g����#��X��y�2�|����p�t� ͓?AnZL�x�M��R�u�Ɩz���gl{�n@�O^�����6��!<��tw���C'Q�q�b6�ef�NFxm�������;y�'�I��	���|�<*�}/w��l6/�u�xܾ�߂_Bf&<?�[�
�܆´�z�s�q��q�}yqyuxpu�����y~|��Lv�K��2����P�Ÿ��ߏ^��a�F�q~��W�u��E�2Կ��.�k�3o�־��\s�3a�mq��M�r���j�Z��a�n�ê�����1��U���_�+�ޛJ���e\��q�`X_���5���l�܊<Fcd�`*�wt~~z�˻�^��ˣSZ����.�;;����r�h�j���)[?�|[��zu���nm~V���U>�=�py�b��X��ޯ�^��a�G�{�<ECu���#�=���5`���n[��2b�L�����ˊF����Q���{�z9%������������D���7�����=},�o�֎^G�;��N�4Q)ʅ�t�/�e��ޖ���/X+G(�U�ң҂)
��r\����ˁ��FT�	a�4� *���!1j|�lo��}��������������E@��΃�?<z�KΡ��WGǸu���y�z'��ɩw�t�U
��_4�����F[��&"i
l�Φf�r@������j�A�N��������h
�y�
�|�"[
�z��pX^$���R@g	z�X;��,+쌚�2'�e��Xu���i�9Ɵ�~�J���t���#�˰ p�Ǭ�{bк�r݅�DOKpuU�,�\Y��B�(1��Xdn2W�n��"qHȅ1����gQS58�	g�]D�7�l�B�j[��C�3jc�rD�p�jx�!����C��!��Q�k<V	6�?%bU��njj[W-%�G�,����q[�ݘ��e���Y��\����DQ�O	���WyG��sSZ�(����f�l�t������;�`�7���\��<D��z���.N�?��Zg��D�G���ky�s.z<?ڱ�S/f1����Y�'A��+8_c�����ћ�Оg�����.�`�/�|*�ޓE�ĵ�4҆w+an5�ܐ�r6N�k��e�
�f��=XE
�z	�����-�w�;�"߇����5H/pQo$%H��f��t�'�)NͮJ�]ݺϳ��K1�|�I.���
��I�1�����נ�zé��@�;1u���6 ��ix��VK�u
�gk�����
���Q��9f!���:��O�p+���0o�.#��h1�������(j��c�"����:�Ġ��Y�%4��I	]��M�N�r�y�D�Pc%,g�;�%�YK˥yX3��Y����o~��c��AQ�<L�/@彼�n�@��>��T>絺���
�q���a+l�]��ݥ��m��)hY7������n����~[K�؛���2�X3��i��<^ՒT�j�W5MyJj�厹V/�n���7�W1犸*y9�?����K�w}!;a=��U&Kԋ�x�aF���/|e�h��F�}�@9��/̎�d$Զ̚D�������|^X�3�V�&�2�w̼��ծ�n�Q�Vi�AvݭX��?����P-nJ�tQ�2����b뮚w�fw��	q�G�h�z��e�y���p*
lbUV7��t*5�2�Q���[98vwž�1��,�/
ՄYe�M�RSe��u��^�������2��|`�bں���\I��Wa<U���6���#J1w�P��V�Q��IdŘ�_�1Kc!����Ʒ���/����~�>�D����avj�Dݲ���	�G���� �2hy�nɭA���U�ɇ����/���/NN;:}��.m]�`z:�6����I?�O>�
fKa��l�<�L��DG�T ��y�Ps�d�C���ˣ޴�bIl�EY1խ���im�d�m��݄sEH�+���C���ӁEư�$k[�G�#~�L���13��Ȭ���Y/�A`V��&O"�M����T
��t�Q��E�7��J�ֺ�ta^z�@�y2,^��]����7g�^��t
cƀQ U��vC���Ps!���bJU�_N����jI)��֞ax~򦷆2�2I��0c[�T�D�v�ׇ���;�p,"�N;�l����:�dΤp�)|�j!g�OUؠO����Y�Yv�� ����;o� 1�\�l5������c��<E�7G}.�'E���nP���Wz��ޜ.�*i��0�/�~�x賆)�Hf��K��k��W������T��ˮ�%�(�q����;�uٴ[�m�qy��P�aU�ab�["��ɺ�|�9:,�d���k�d@b�HC'�K���x~
�۲~�L#S2��uiPױ��Bߴ�#7'�b~�,qBvy*�!��2���
N�bF�.�C-�@�#�N�/Xʐk׍-��L�h�C�΄E
��GK=	��p�`bK�.��H�q.��zo�,�p@Y��L�7�b���t����d.<�'��\y^p�0������B�:s�=r}o�>ڈ~�8㌒UJ�O�#����7�r����Uf�t(;��m��뎔��X��/q~�\��Wڥ-@��m��
ZR�\.����!���{�_ѝz��՗��2�p�b��*2Sl��i
aXZD���%�yŀ6��k<*Y�W'���%6%H�����Pr�-i�0=����5[s�����tREm�
԰j����M��2}�MI�lii+Ў��ŭ�!/̮,mK��s�ϊ:��V�5őYr�	�����Z��%����#~6]k�<&;�C\n���SQ����l������O����UC9���B�Mj����mg���(ҭN�w2+Eb�;2A�����6.	�-�i���PT�2ګ܉�͝p���qDo�Y7�l঵r�6:lo~�ڸ������բ�CA�-��CQ�I�j�7,��,���������o�[{Ё�ڋ�^���"خn�W�J3�k��-�u�g�OӅ��4��N����>ᣀ�<���Ч�
�$$�u��g�u��Ԅ�1��J�b�WL�[�#��d3��#<q�J�'���T1��n�ҥ�����_+I"�&p�ӛ`����@�c15aq�,�]]����w�D��4��m՗�|{\�(�_��$i���/�eC/i6{'�P�ɏTP��ҐF�U�P��Bd5[3���CFE2�r�%��eJJ��)��
�NS8y�l�3}��p�Y�jc��#����m]iV����~[���/6�mk_;v�[�� A_U�����/��e�b�t1Wۍ
�_ߖr��~*�Mӆa~��l��>��[��$�1A_J����/氙��[R���`�q0���tU�G�����w0��ˋ]^6���M�^w��`�rw��eJ|�(ǀ`������d:i���*�>tr=롫x�JR7k�2N�!l�H �!���n�}�NLbgv�U��q�Jz�|�V���E��
��6;�ll����gt@�(�d�WܲJ��Hs��>,9��)�"6ðlSߩ�F�=P�5�ª�
̼�܆�b���z(�uۚ>S����Ŋ�Tw�k۝�+�!q�#f�� hos��o�GJ�N�eFk�#=��&��%���L(�A#���+�k�֤f�v}�YqXe7,�B����%E����45Y�L��P2<|�0�U��@����������=����9�O	��
\�r/��{�J<,��Lp��!H�aI^U�����$t���Z��V�v�?V�����0��6@b��G�*\�A��T��(	�n]��-9R�^�Uc�fU8�������*}�����gz�9��"7%��j�=��I��a����m�^]8��H�R#[ʨK�-�쪝�]�.WI��&{�ѢHP���Q|Cm7ي��Aȧ�S͢k,K�R�����/���܃�}Jj�or�ѐ����TA��α�s�����Ҹ���ܶ�
�5���s�{<u.�k[��_�-kS-*Z�S�
�u��ϊ���|��G��7
�_/�'��Z�χ�y����j�>;���"2�ʇ�@�=L�gO|u�믽�+�&��I{�R͉��f�D���o����}f��@�� )�m=Pz�m=�YxF�5��3ph=�ʃů��J�4���$��Y�	��T]������#����]_��O��#'s3�>F��L�}ī�{���Ωi�L�4韖����j{s��>�*�w��l����@�ì�7g4�:n�e7m񜆠��hΌÓ'� �h�����;硷�����_q�@�����ã�_;�ϟ�H��%^Ł��H8R&�n�Y��\|e��y��ׯO���V�q��ؾxL m��_����C#�lb��+�Y��²�� �Ag�t����@�Т�R��ʱ�[j5٣fX~"�E*���	ƾG1�dEHm5��޹'V���蘹��5��"��	���n2�r�y�¡+���'��[%���Q��u�5���Z1'{��]� �7!�͹�O��(ʤ�j��[8)�F�N�<Yv�,꧱3�;�0���ֈ'�}�ޒa���l�����D�\ܠ�<�x�B:|"��y�l\�q����?�0n
	Ƅ
�j[o}�|%A2f^�Q��X�*�y`+��\�o�z�:�xt�Z��hL��F'E~�֮AqG�÷:�p�X�ʰ�i����m�tiRw���d�(ǟ���T���)��T@�Yp��i�e�{���^ÈAal����i���ӯ9���tt`����;��"�PzX�b�[��[�e�3������;�r�\m�v��d�k8��.l�E��:b.��G��9���l87���-[{���V-u�bB�pH
z�(�,�K5��k~ќ{���\���7ѡ'쮵h��j'�E��^>ؾ����3�eu�C[zp).�x�%��;q��b��wMy�ʥ�,)R�5GT(�9y��0�t^�gZ@X�:zUuk�֕k���'@�2�wF��Ň�%�Ѽm�9+��YG�`H��3�4;@q茄��zN�
�;���1��q���'G�0�'�܅�mYI���eI��v��2�)�V"c'����k4��&,�O�c=��x9B
��
�a����:��L�[i�S#���U���ϒ�L�GI��/E\��+DڶvZ_E�&w���
���(�-����R�C%��7�˂^�K$j��!��<M�[*�GCa(0&	����	�x���%�r�͜��@���M��t<�"
lA=��B4��ϡ6k�4u�<i�r|���\����|�m*i�]�y�c�@�<�Օv��R�kT�&[
!�T�1�ӟMH��w���&�������V�(��h�n���)$
`+ҝ�0��`�#v�Cr�3J?�;yd�܅�5q�:�EQ������TJz5�.l�N�ܺv��R]��F
�ײ�$�LP��H
�(\�^�/�D��
]�Y��)�x44��y�_U���śn�gt���衡�f��L����?^*9�]\I^_��l,5��!�q�{��U6�<Ϛ�庢��g��>̭�za��5�2y��U��ԑbdʫt�j$�6y�Dg�6+�$
�3\c�]��+��V�BB��R5�|�A�W'#6.|yǕ�(��Gu��yE�`���6.۷�(�*8֋��W��Dy�
�*Q�]�qU�r}Ez��Hb��Զ�oX-F��	,zbpLL�����-Y�񱆭�/��go���F��-��v+��b5	1�dyquqse51b[��C-I�|^�w��ػb�I��ڔ<>��^N�Q$A�/���m�΃+��.���}��n�\p��2���3���C#3
S���S�ye���҇7��`|�O9lu0��HJ�����i�!��"�u_>5+�6u��9��[f	nŊ�Ҳ��ttx�[+g\�>��hN��9�3*CT����+�<ՉR	>�r_�ҊG����z�-���6o��h
���1�D4>l*
��4ϒVH4.�C�@�O�c=�K!@�l(O+@W��[��>�Z�ה���L8S��I;.��+)gJ�xj�]+�zO/bIx�h!�W�PfIn�Dg�6ޝ�#8JFn�XЅyE�(m��G[�*��)���IJ��ܜ���vq�T��S�gܛ����m(sM�=!
���U[/Q O%{.̐�O��l��#}51�y��NMlV�#㾳�a�S'vY��,�V�iˢ�ߐ�Up}�فsT��hbS�e���h[�-p<6i�,;��
�G/U�ijG��q���<�:O����b������0�6�o�"���91�M�]L�����c�J��60��X�F�Vn���
f껉f�HB7���%��	R�>N�W�6��{�fa�:��޷�_ܡ#T�f������I���|6M�ل%y�	��=�ca���Sf*wƮB�XE��	�#��:�r�8!��8V��qGņ̟�F��,,�m��E�	����~�O�r�$͡�g���Z���2v���X�SM�m�տ�y���p�Ӂ�|9�b͋�����s�fu��viHjr<	ѐ�7ٔ���ӆ���^m9S�:�xa	z��{�dTOKo1����T]�V�潔����o��w����������G�;�&��K�t���B���F��34�2�\$�IF�ȐR�2�>�&,y'C4� ��|���q�nn0��T*�a�ar�E�r"Q��͍܍I���'��*�*@{���pntQ�R($i1�v��D~z��W�cb_.�����yqr�c}��F���w�����O��z%��+=����0�]���ٹ�Q����?K�ޞ����vR��?�j���U������ޕ���n����O1,j��3�Ï@��ۆ�K%Z����E���r�����E(���1�`��X�oJ�HnLBP04�bI��*O��g�[t�RpP�k��¶�'��7�,���]�2���'<�s��G�
��G������
O�a��Y�{���=;=~{N8]����M&n�h�������{@��^�{���D��ō��Q�&� �yP���j �ܶ�X�\�ͦܰ'�E�<dWD���2�I�p��"/���B������Qp!o!A�h6���I�<$��t�y���<'���*�$�8�ʍVU9��:;�<y��~�W7D&�W�7���$���3Ր��ύ��ގ߼}w�p,�.���h��G�/9�K��&�^�[%�=��{����)���M�Y�$Jk�g-kog������k�O׷^���Ó��O'��0
~�(gFa���3��qAuj�]�����f7>zU�]�6�3ץ�W��zo�zx�N�,N���&�F�d�/RO�y�t�mI�E�Fi�T9��0>|,��A�d�,�%rɒ�?�<v���X�7�*��BC��)Z���
�hB!g�8�.1�8��D�� AUu�y�ܰ�jr%�?pY�=�FC���%Lc ���&��`��V=��*�̝R��py�Vp�W�͇�^3�N�hp�$,ɨ����IT�>Y`����I`E��5��<�_؈87��7C?O��N`�э����f}A�i\t���Q���\0wN���m�\;�&!m�+o�ڄ�PX�;m�LΆ9۝�B�p�S��>�0g%��$�7ħd#����إ������2ѿ��bE���%GA��j)�^7�F�{�3�@�<'ۚM��;JN!��vz�@����w�[5Z�`�z#�R����"`��o��z$����_�Dܘ�&=��-��	w�E��O�Q�a+u��.?Q����c�M	�zP�8���jC�:w
;"����,��ei��؏��F�5�����V�v4���E@D]��s�C�rTl�3ؔ
��t�]�aGxgIo�o	I5���W�೛0s��;����'�,q��—@^�|�ɀ�XNn��[I�F�6������:9�Ga_��ߝ�ή�Y�}ܐE}޲��x�m��E��g"*Y���ۗv3��fhn�%��	'�J�o�<Tyٻ�r&8Ʊ����"�S�Җ��s��h�ZD��_A��fӪ�]E��O;Ֆ��q�&��.��yEc�y:]�[�� �A��Q����}����E^�i���Z���z�<@|��6	xA*=MG)5�b��niFd�,�P�ܐ_'[1�lj�9+��n����-�nH�!b��Ln���5���
�����e�~�Dh���畆�>JA�px���6X���UI�E/�T/"i�����|fi<z��I�L<쟊WN��R�[�F�!?�R��.#�Y�C�jņ�U�]u��7'�����ϏO��g��^n�;������G ���3�ڟ��\�������ݝ�������?|��r!OW.ܑ�Q�=���.<�C�ip��
�2�����u%u�g�>I�֑���F}~܇C)MY�;�7�()TB2ǣ{4�-�z+r�ە����
�γC�7�Oo�-C�J6�
�U����_�B��S���d��/J(B�nҤ�{5hD�O��;�����h\ts���]��_�"�-?F���e��Q�>oϢ�f8^#���j��6���E��=a������.��zp�����I@���=��職§)��-|���T	���(8�xg��|�~2d+�>.��\$g��Bt�Id�,Һ;)YuX�6G��� %4�����@��10,�f�@y�b�f(MF?��!yX��$�3��w�p��e~:VDK-��uFW�2E���0�m�K��"'0 pv�(hYBr��suWEx�M]�r�a��v�gM���Z}A��x��b�e���{�>믲���K����PX�1��MG�&�W�1:#�rl�I�KL�O�)�@���	�J�*Uc���±�(�����h��kl�*�p��������
S�_}��ٽ:�?���
`�Z*6pw��$(�Q��3�}y���h�����}|��]}�iQE�c?~;`%���l��_��@g�h��ݭG�VsA�-��/��+���7���N��m����k+HE��d#wv,۶ƣ�X�����$��|�v�I����^<��c��+�2��'Z5c�g�>�wl��ߵ�~��Oj�'hq�Ᏽ���O���������nل��-uj���<B|\�[�r��CQh��������	#��������ɋ���W�N~�=�ng�ᯋ&���݌�)f���q⺟\����[P���>���S��vU�18�ǘj�y�51.�%{���&S���]���!S�����R���Y�P�L9�%���y5�l.��n�#�̕`�w-x	��������{i�����<<�	%�i������hDo��c���AJ6$z���;!5]l��]d0�Z�`�iͽgR�Lb��S���K��$v%�xM�+�4���cy��>;��w�pɭ�2�|�i���������QLa}���jXs��Xࠩ�cz���M������S���X/`x�,f��B���҅����g��3CpF�篢(Nso�F�m޿��q�X�H\*�kX[���'��xug��[0��{��.��K䕓C>�f�F#�Z`{8c��7�)/�����e��-�ʻ���X4�k�S���]��֖8w;'[kW��}o��*3>��q����F�v�R�h��UB��Cw{{�X؋}���e�t;��>�vRw���f��I�I�Pt���(�s���Eה�j�*m|->>U���
K�t���QuU�ן�z��92we%�h��&�\���㣏�Mr,�"��&�����G~��t��{eg2�%6퐫%Y�:<�?`�ۃx@�ח�UD�y��'���vr��]ߛxr�	Neѓm?�s8��}qr�������������P�)��$��e�CXg�O�h�h��S�*�ț��j�4W��3�̊���8��u�YCl�nT��O,�[|���W��XL�
�f�$	Ì=�>�k��LU�D#�����S�kˊ��b�Y�ެ�
�!i���
C9�H�~�g��r��^M���f�R���~
�����"�[r�i	^$���4��m�!�'<�湉�����j��蔮�ON1����1��UT#���d,Һ9�"�Y�it-7��y�T��Y��X[j��]�E�!s"_�oL[1��m�,v4�Tq�_��Z{{zr~bl�J�Ծ��>s3P �r���K�Ζ�'Ls��pXn��i<{e�óW[򩂏K=��UIB(�t[��mqH��U�?ֱI~�-z��.��i�,�I��%�J[&l��}�`��<�ܻ��kz�rl�k� Q`��Z�s\��Aj��uPܳ[kt�%�fWF����A)U�U��WMX��o[�7�Vke����)��!�Z��`$}�u��q	��wg��ѯ�ǭ�e��z
�k&*�W�����<��N�V-E%2|� G�85�Q��5����Y����
�(p��,�ʐmai���+�k�(��kz�?y�����+Q�]�IV������t�b8�94#ʶ6hIVн�a��;=�{�z罒p~��Ҷ!��0�oއ_{窡��1�&�;���$��=�-+�(�� �����R'8�A?ʝ��ߺ���MfN^x]5
�;L�K?X�S�C��;t�>�x)^1	�{L�;����!C�C΁�,��aV��~�.�{��,�X�.�j�)�Y��	�uFAs[Q�%qe�i6��.F����.ԺgUiV]F(�U[��R�r]��yz~�L��c/d��/���衭��0�%�"?�=7�]
_h
��LJhC���ϭ`�I�8$���m3͞'����{�2���Ӡ����luԪdv0�I.���R#�/ K�Q��0�L�:m�I��J���K|AU�H�2wS���"j;`Q_��R6RR�f��S����pi����汍��궻��nu9/4|�%Y��wYG*�U�@�yNu�t��Y�r`������oǽ�ˣ��-�#�,�13oS����%��Z�R�so]Qᠴ���qeF���N\�������S��l���y8�M�-��2R)�Oi�
/�k�H��+4�I
��ɵ���G�4�r�v�x�r9MM�༟��ߎ�_6��7���K���٨���:�#�S�C�>�ի��F�i��E�`O�#�Z
Ci[�v�90_[ы�TeC�L+�����p�
����x+�/��䏍�x�1P9(����V�%8�T�P���jst�sUۑ0��z@��ȟ3G�V9�H��HF�(.����Ֆ"��)��sϟ�8�����`��!��&�#N?Μ�@V$��'m�ak�O�¹WM�nEj9�{{ґ]"X9���j�HT
x��_��Ĝ�]�gFʒH �XK�q,%u*;�9����k)�'�*�Дs��,Q����--��h*�Y
,�W>��l��}�{�Q2��ʂ���C�����j�o��bl����\�#��1� �P=��z���Ua=��M%5){�������f�%*�3̬��ݩI��ا
rj~�IӼ�k��T��@�_1C /���J���[ִh��.W�J��Z
-�>ώ��"M�*�b)�.�2�Ϗjr�U�"Ƨ��'����[R���L
���\}�1��EiSo����Q�o��K`U�B�XX�~���|dY����<��"Fd��4C	L�Q��g��u�.�w�V�����g�"�AL�fO�ۤ��Z<'�@�c�}_Q�`m��	���X��(t��~)����&HJ�^���d��:�jc�*1o>>��3�M\�ޓ��A�o2��q�/�]�G�'D��.Kvb�7-oe0%M��6������l���HB�R�ʊ'��rD�iE��R�H�D������X���+��l���!y�/���}0�Ɲ��1��jP�e��@�ADQ7L���0J�1}@���}
��|�������ۏ$�V���k�?a�x?7ee���JI,��;R���%JCߖ�KD�KP���Dj5��b������VmK^���ˤ/�t�Z$iƈ����KX��&�*�}�=)?[[%9�lޭ<	�:�z�b	x��!�P�zɞ��:Aڛ��jH�&����qro`ti�|�"Eu��_J��7��3�ey
!l��{
i���A��]߼�{���8XD9�"z�_Z:>;��?uvm�ъW��4��]�='Yn�³�4�<�o*����,BM��g�x��ɧ;�1׼��+��>
�#`�"3sL�W���K�a_�މG��i��`L�����#��R�T�I�Y�{%Q��K�Wè y��]�'q��J�s���U�=�c�,�M��h��%������wzz���?9=����ѫ����jO��n2�~D��2J(��,Ҁ6+y�](v-b-&�r&X
��	�m?2Q��n��a@��6��.�� ��[u�=�-� q�.0���U�J�

O��Q��+nG�R��R�M�Z�n!�l�#��P^}��j��k����ޮ_�ۖ��Z��[�
2�U5�
��gIY��J���>Gc�|�K������[�}��U�K�Jum���?LIot�0���A��yxݧ���b���jq<1���s��1�%� �>��Ak�WIV�y���@_��[��n"�m��̦��f1	Ն6�Ve�N�	.<J�C��,T�Ѣxՙ]�k���Ҫ�e���ڒ!�~�哮^EJ���ƒ���ʷ���a�&�5��S�s��$GImcC�}�-I�9s�N�YG�%9��K�$�9�¹���3�r��"o�M�����nma6�<�&%Ӥ�R�V��N1{�w��n+��x�q��h�#�]޿���.pݥ�<����hJl�D��Q]�0{LWt�Ή����A��<���CV��&Z��i��:^9���3�8R�4��Ӧ8���9O�G��f��H�K� %�e{9P)�n,�0rY���Z�o/����_����u�Ϸ�k+�&X�0ˬ�۹��z�mC�I
��&1@��QrgM�-e���U)�x�h���Zi�L+��3��.Q�����D���𔻆�20����`�g�	E3������p)�#�,��&$����察��X��h����رZz9��zVCb#����J���<Ө@T^b.M)�I�w:3�ўgMd�/_�vG�2V��X�롋(dl��E�\�߈��I,:h��1Ɓ�L��<o�5�2Ԗ3��l͓q�W�R���ƮQn����;��t�5{�Pr� A�Lt��Ԗx /��_L�xw����ʝ��7�>%ؔ;1�H7Cœ�����+@���]�O%������	���e8Ӭ�c$�;����ۚ00��� �&�u��Y��y�����s�
��
�-�N8��&�-�:z�뻣_{�-�Y@n(�Gޘ��,O$��*�
�S���%J��Sxu�19��eE|�����n^\���Ɛ� �,�ܸ�
�X�:���8[$=G3�֛+<p2��F�����i��T��✮�v��i5%�W4�z�R_���qi�6�Oin��f��d��J��[�`����/��̜V-yI
�*O̊�A	�zR�c-]D��(�l�>����11+�g����_J~��^�5شzs�k��E.�j+�!��uX?f�ż�ro���+��D���¯�s�cEt�Fa�w'��f�Xpq��&��/�)![d�AY%�����
n)uN@�M�L9E
��/7K#dW��j�=I;�n\IG�D�8g���ap*�(�5���IMq߸��W��!T�*��J����N��+R<"��n�x*�.�_�w�Ö�>0�.�
f�ۖ���֙	t�a���#��3O�]{Gs�/p"+ؾ<�xм��W�[����J�Q�e�6ި�']H#൮VI���G$ċ�v�9�KO_<���d���\�)�|���
�Ybㅏk��;��n9��6�
�B��Bt�h�c1��i�mU��!�����`�R�yn������.16*+ I�m+mW/��6��H��Qz���6D�}��� �]�p��2/d|t��m��Ȑ��y$xV�p����Y�^Jl
�W!�C���Z�v���u^P�����n��#��T�x{ٮ�.R���Z�Z�VW��ݡު�����_��_���^]����ŋ��EϽ�qGAYnW���^t�����'���WU8�~�\�k�{��r5���UH�K��)�ų�w�/ON���y:s�G�}��<V.^��ax�N"Ϟ�KkZg�b��rYV��]^@\�y�3��֥�&���8�$� ̅,8�w��҃�z�-�גo?�Q�qqѝ��5�^}��ſ./.��{�S��_MX�'����ے���H&��$ξH�mu�/��Zo��N$��7-�11vwP,7�"Y���/���-~�Y*>�课GQ�ۨ�vQ�'��2�I_m�hȄy#2`������1��wJ)��g��,�V��ikޮݪ�5�m�Y�j���d���cg�視��/��Z(i���M��rM��3��*�s=\�n>�Չ���Z���Ѣ�R栒p.Xի
7��e��x�GI��y'�8M��zc}��?-㻚��f���o���Q\�Y%‘j	k��JuȈ��DWn���c ��f�(W���e"���]d���llZ�0F��!vo	.��`���ޒ���¢�l��������_�v�����k�z[��{0�Rn
�y*���:oŐ���O��.?C�3V�n��:{��)��B1�Fg�;�����XR������6�ݖ���C�0�;E[�$#�$�ؑ�1���?�I�aE;H�Z��jF1|����9�#�&�N���tW_���u�Ѽ�J���8��[
n�
�=
��D
�UJN��i��y���
�?�����㎸�7�`}H�J���>L.V<��f����Cԡ���dح�ST2�
Y��Ԟ(��f���"�?�,c�j"V�E��I�w�N��LKT���k�h)��+�d�1���lV�L�Н7����
EdËy�I%=:�>�pDQ���c���?x��]��u��ev&��Ü�G]��R. ����J�^�Y
���[��si� jqD�Ŕec�}�>��v��Tm͌b�T��D�}|Xy�3�Ɯ&Z��Q���4�
��ʒ�H�O����c7�q(+�R�4L�'��R�>���Kp���>����x���Zd{z��Pb�&)�d{�Xv������Iq��I��K��~�=�U��\�W�D�b�iN���S?+�0�N���ԏ��@�'
�/�9;^�� RVl�R�K�+x�Y� �ٚ�*.�2�YTfJڀaV��-i�jƁ�J
K��Ym�W$���*�p|-� �x�C���Ï�`	�(%�S%���b�^{�HEWP縂C��4e�~�i
?1��t8����?M�

n�az��T_d�j��0cE��&��K��Q�Ԣy�FmɊ��%� �J��H)<��k�Ji�u�]��tgɱYRc
���U{��٪���AD��I�Ӫ1X���E���3��6cz#{�9�u�6�Nf�E��z�Rّ3�4G2����TH���M#X@35s�Wͻ�[v��@�>�l�_�a��˾�s�3���-�������
8ig^
F�rF�c�ѶAȱ�]��K�#'}땢r�|
�k%�g�k�*�� ��j]���|+���D��wz���|�@��Z��r>:�-�xK�����|7��k[0D���݃V��j@�~[E	�9ya
�6�Aj�����dv��	�
]��!0���Q�Y"���p{��k*ȸ������p˱4u��I�cZ	��g�ip %B��E�BJ)-�|���]��/g�N$��/�R�%�K�ܹoz͊er�LR�殘��I�������C�Tu��}��L)����~:)�i�?I(�|ӕ�-��ێ!�p4Wȳ��Lf\�G�'��ch<3ۙ�*a�"
77���{O��l���ckϩ�y���R����/ڥE�&C���|��Fp����:�{�R!�*���ȏ/��uހs���2���0W��7�ø^�-C͊�t��"
ƒ;�l��3S/Բ�fg�B�u���re2��P�ǻ]�^L�k!��X���XfxtmzdUf�'(\#z����M�(sP�H�<GX/ ~:����i�oP�`
��:$�͔q���,I�|۞�ϑ��������#��P��Ƕ�
�Z�L��ߧ-���5�
��q���#@�U7}��4��*^�����I_tͤ�_zp�7�ʓ�0�M׏�箖��M�i�)X?�艍v�yI�+��?�MU�X�a�f@Y*�9mó������V
I�2�'������^
���ȡȀ2��3������֕Bz���`��O���A�z�ߓF�$�%x@�:��6�YP6��B�@�4 H��D���ď��Hkݩ?H�<B�zݓ"�����ʆ��>��;�+��)�!�=x�����Bz��7@���F�6�'_�'�)�?U�lH���F�:"�Q�mH�	�p8S~���ix��ꃱ@aۃ�!�.�T@�܍w������=ſ���[��<O�5���J��@�B)�3^���;��T�3Շ�c��)3��^�@���\�B�V�����l��������o#�ƀ��uC�+��2`V)�M����$���q��2O�	?��y��`,����I�Ʊgt�&��Z{�r�.�����z���o���v��8c�o��|�(K.�`d��@l�_$XƐ�%�DJ�U������n��~.���6�ǟʐ�k�ã]C�!�M�r��4'�A�I����f�
�Z��j%�
,h��0�[����36pԚ�:�v��u'H��5��ۡ?� ��t���Λ�"����X�'V����H�Se3`�+�9_47<��\{fd���z��r(N��8?��?r�t��M*� }Us���5��ڻ�|�w�{��zQ|��=2�P{S6Tk��
�r���E�'{P�<��I2�~H�b&iQ�q���ΊN��sPI�Z���Aޗ�ԇ�_���PC�D+��8ݨH{ߊ5iW��4�/�9�jz pa�@U�n��a׳���Y�>:l�T˭�l��]��ۻCk����얓�h�kj�Ŋ^�zv�8��^��v��(��h�a͒
�v��1w<�]���6i9l����R�J�;�)�8Дtns��(���\r(�|	�p�:�
��#H~�EY��/i��0١����@ �eD�@�q��'iks���-*��'(�+(.�gzZ��,��nВ����Z�����if����[gT��a{�X,���5T��d��{t����.1�H�c���*���>�-�V-̳^+40+2�����l6cM�f���r�\���]Nt_�:-�k�J��x���P�a����W3��_�шB�q���|��w{��t#c�����?c��|�J(��a��n��҃MÃ��,�k�3��!b�������(�F��
I��m����q��(�h�2�鍱�4O%Ǡ:�0���G~ː���k�Q/���&簛x^�I��GE�<��FM�3�M�� �|�bCv����oCI�(�s�C�����nd%=A�ųpIy�b�+�ʙ�|�2M�̯�X�؅H�p��#�"�g���T�D�o5�g7~E��	EX���^I�M�;���	=��LxBw����,
Z,����<��3�d�)�6�e��،L��X��C�zU���6��	��ĉZ3,��¹qn�]4�v���\���zJƘ����s͠��&��\[�Oq̊~CS9h�Qa��c@���gt
Ų��Az #�dɈe���s�t(꧈�F�ɐ>����x!.#`�MK��x*Et�ڄ�F%	[P\d4I9Hr�^�58\�N�E)��x�F8x�,�S��6�}q'۵/�ܬ��>*��`'稃��.�h��t�Q���c�G2�!�˗v�`}+;J1�P����$&k�$��b����9�{%Mt�5AR0O����)���&��$������4h�(���Z
+��Tl��ea�
�H�f���E��W��$
�c���nc��i@a������s�I��+#��j��T ��$j}aWpBk���;�b�j���~���}�cI`���~�k��Y�(܃)P��AL���VF�X���Úp���ȫ�c�u��O(K@X1�U��;(^�x��:���Ux�ΉN{u]<�
Y�>�S�3��1F5���ԃA>*�`{��[��e�l�B�)�)�{H��|��m�y��&ƽ+�d=�z�~��������Y<�?�U�$��q�n�7����[_/��?�.&���}��Γ��I{m����w��]�(�q$*�M�J��3^�Gt��,��x�.��I�ՠN�Z�J#�G:p�x��az6J�g���$�6�2uk�k�|��gn��7����E��B�	�\�ql�y�K2л�c��Ϲo���Y�O�Q<䓚c�����bk�L���o�3Z{�y��Xʋ���\Q��Bs�3�fU�(����B�*~�k��s�L�*������@O
��ʠ)���U+3l��,�����A�x�����}�c��N/�B���s��r�i��@?���O�謵�����+��S�_�/�@-st��ا�<��K�1���ѐ3�
Eȱ�x("Of��M^$9�,���!K<�A������ꑲh�^]��8;�G�'!
w���X�qԪr��G�Ȭ�$�m4�����g�h>�����m<����㆝��(�ƀ��L�Gr_t	+��s���D�pj(5�Q01k��a��Q"N�K]'!�%;z�nZ��b��T8����Ȟ��̅�1�є�fEإ�5^V��(Վ#�ԁ�I�̂*/�z=FG�8a@�(`�O�b1�	�"�б
d(abV !�~Lre���I%��>E��h��d��7��0��o�I�g��M������h��*�}Z�րp.!+�j�aإt�b��c�=}8|�Se�
/n<g����[��9�w�G�̓�@`I#�2�UZԱV��
8�Iꚝ��6Y�� 8�����:�;k�����zhB[v
�s�j��:E�\��P�~�_�K�&�o:��]ܖ�h�@//���Ξ[�T�v	��8I�>	�`���j��y����{���(���N�z���М�|��Av�(0cf��/�.,EPU+Г+W�
B�B�c@g��׆�u����ڭ���[�rDQ�	l�a�ԉ��_E�?�/�6K"T��ʤ1�&���K�*x��]�w"G�B�y�@�p�Z��0�� ����1o
b�J'�,�7	�7� ���(N��~~��a:������ؐz�q7��qwi��!�@{��VZ���Oa�.�4���$�IZ�I��@z:�Ke:�o��oH�
��(��o�67��V�,k]=��Y��C<�T�[ӂr�����$�Yg����`��
��J��9f���E9Xs�`o*�Y�.���:��􅤷3t5k���0*+L�-�j��{��ەF�ǎ���<�Xw6��0��5��)�������ļMŅd��٫�gW�x����g��	��XHD
�x
�(Hc՛֫x�t�ţ��۝x�"�-p�+gl\�t��X��e�(�}��9
���9�ԶJ��*;;A���1-]� ����쑡5	����k�`s�:�Ô�A`���k�/V[���*��o��}��h�����=��C�Zj�&�q���dy���0S�NY����d�{�Y��TLA�0�M�с�@b(�\�"B�6�d,:�6&��� Ē)vB���V�I��*�[L|�[SDϑ���3ND�A�R��xy&4*4���T����P��F)��YW�b񕡛2H�D�����z���h�P?u�5
=5Ƣ�����Ϫ�]+4e��,;�¯A&
�Cd[e1��32*d��k�BI�,��
-�e6�	�1y����PGn��;��F�Iv�c.-7D����F�(L������VU�:S��G�=Y��5A}��t)�l�t/vR�ٽ�,�J�٧��������{�Ԡ[
Q�v�u&�k\������
5�="�C�b@g����x욂�c����g�쥱%O=�{�9��*%L�$$�x�D{��IQ���:��]�N�߆^ŗ�ͬ}�"��%����j��,d-���C�)B^�:�����g�����1�,��DҎщIpV@N,2{{��U����s�eڂ��W�����i��'��Q��L�p�������C�49ܚ��H�-�H�٩k�%��?�4aw$���~�~o���	�$K��A�F��i�LXu�02��E�'T�W��Z6�. �@�+=��ê�����>�a��B�L�ͯ���y�?
��E���h��gmmm#���x�t����=�(�U�&�����孻4����N������ -۲Y
�����]O�u)˗}��D��4��L��H)�X�2����Jʜ�W��,�,�HאQi�rE&���h�8�(G
�Mڔ���y��pJ`Y�����R2v�QbE�>i<E�(�OS����R�L#�1G���p�<-35(��-�	X�72���c��Fפ!�ƾ�yD�N�w�{!��]uX")ta4�L
����B����P/+}6�'�Ō��$��޶�x([B�ha9ÒI^.�iz�MP/�LY��e���C8�U���&*�g�5�c��L��7
�1W�%�V��d$b�ߙ�jW=�~0'g��$י�G%��(]��w���8�.�����o�o�N��ݨ�J��uZ2�"��e�{o)��&6�ܺB��B{�ҵ���M��Ʈ�8UI����,6��d�u��gY��������i����J�<�������]E�y?�aT����?̞�N,PU}�S	���N��S��tϑf�@�s&�!��H;�P��<��AS,q+Q�����X�~� ��z}US�M��`<&�j
��j[�;ʔ����u/��@w+�ʟo0g(�D��h���J:F5��4�����"��f��U��=ުwk�߰�
#�*N��-;����m�tr_`���߬�����h(%�߬�>���y9�
��t�=s��H@Њ�^���2��8���@7v�ۑ�tC��0�׋��������E5$Y�^ēiQ�!����c$3�yP��P��J[�"��<� �erGd��䝎�!_�Up��Ш����,\�=S%e���wh5�[ӷ��\�G
t�F�<�.Y¦#�#PQ����.]tV������P��$���HuY�#�S$��ُ�c��j����br4�i|�����
��ֆuU�(>KIK�Ջ�ٲ"i^����`B��c�3~Y|H��Kj�8W�G�:ND�G��F��g��Z�ּ�����~xs���,�k(�{�=8�����wo�,9n�K&`m�jU'��|��`�8-,*����ގ�4[���Z��_�u���3?JB��j��WX��<>$ve�5��$�F騢2�n�1�Y�U��z
��d�ݜKAs�ě�e��Bo�jS>�S�\/0�vڛ�g�g��BC�֫���8M,�������Ý7{�u�a:^l~ۻ�C|��D'�/6[\�TOқ1�DdG�IR�S�\<��h�ȥ��\L��v�u��	c�촧�b�*,���+�Y������	�h3	f�Y���g(}J�uM��4�t;�tcF���h�V��H�ͫ�8@κ�)�
�x�
��,��
%S�$8$��g�o�S��Ywycc�-�閺�`"��{��dJ��Rm��
]��|�3��-{����s5��1\���P�����L�Wp�δBk����tӵ��^n��Q��s����Z5R�bT7�]�RPk���V�����s�x,�gd����a���!����a�5N�A"��˾7�S׭`�<`6��O��9Z���<�7=";��"���p|ӝ�Q�9�0"y�&�*W�(���
�[^�7*����U��"-u��><1�4��喻d�wMz�?��|�Af��G|5�tl&��H��ZD�*�C�r$��]L�&���D	��%�q�7��k�z�w��z�^��	.li���s8�%�0�I���E��I�06/��ar�=ܔ
-����c��܃�����VTzinv�S��v�ZØ
�
pg9�C��a}�ggÒ�t�ث �e($��%�ka/�d�(�-ij>^ve�	����� x<.���,����Օ�@�W�n�g��y1W��޼L��q���3p�k�D��:������0?�Q�6�k��L�
�_	��|l�6�/�,�hq���%=r�C��15��WG��1Eny
�(]Љ��F�r-��(%�sgk5�L�+�ŴfI<Jq�^��>w��5ʉao��x� �f�p�f�I�d���{�o-ָ��|�lڗa%9�]��H���M�pv������͎�s|A���z�&�Z��;��F�.3�P��(�?5�W�o���9���l�FM��`�����es@��C���e���A!՘PgFAf��+��C�U��h}�yݬ�L��L��g��?/��!)��5�#P�rU�)�P��ѓ>L���f�!*?6+�mƇ���T���J�_�?&��Xq[Y�|���z	8�<c:��8nZS�q�Fx���C9��ӳW�$�?/(��䈼vbMU�k#�|a#�]��~o:O.4�zQ{wK����E-����4�B�mT�A���ak�f��f4��
��`6s�9	��o&�%�5�"鬺�+�!ƃ���8���BN�ײ������Jt����33�p8�� � ���+�X᪥�8���W���z�2��rk�VY���o�F5
vDE�3Q�0r(�{��Bl�*Eɪ�n!�d��n�`�"����"���(�y9���*#��v'+a��b\E~�Z?i��5�K�ٔĤ�(w.��\k���'����3��I�0��I�z�S�;��0�����j6_�,�Z�ײ%}�$cR��M���^E�WC�y�y��*��~��*[
�f�_�ɭ�Z�SL��`�4_79U�H��Lg�q3�x����pޏ�I8g�4Š1��}�,�&J#��ݨ��s�o�����X��c7�S�.�$������iA�Jm�q&�`���͑5�s�
2`~"�(za��'P=̢�[�PK֢����|2�х5^�*��������8|�鋋Yp֫,9i"g_y����fˇ��{iq:9�����T���=$��
�KYew��⛭���}��ݮonw���&��5"U\B�:�|oo�R"
E�}$2��gqK����Wd	�
T^d{�����jtu����(7l^��|Y�E�UY�B�:���y����۴�ߖ��ѤW����qW:ؤ��q'�ŗu�,�ݘ^M����5��R�C��}P�W��z�WV�Mv�dz}W:��x\�(��-=t	4y�d���ye����K!�^�<O�^$'4�#��x�3��i!l�jl�Xk���z>Z���G�|���`w,ۑ��+sdHc+��O�,&���9�	��ȇO��G�.�,sg8�J���l�L]��z;+�0`Q�.m����]b</�LHf��L��.X.5�$���S���=��Vp�iq�q[�O(���I�Q*��|TR̐��-\{�
*�@
����dv>4gcr�Oݜ�؏�	Oo��n��Vȗc���W#��:�/$
֕�r-�D|(�nOT�8Რ��򜂰������+�>m�S���[Q\68UJ:���݁����Z:x�Zq����J��#�/F�?�f�|�4WM�g����b�[$
F������~�RP����#�AI��߅�`էr�W�M|c/r�u�bU�%�j��&(�
Z-�T��H�ٯ~���lc�w�{�??�tr񟟮=��g��=� R��z�	�?P�u���N�O��,��p�O� �F*T',㡹=ICl��	Ӊ�J0�49�L��߈\Jy�pY ���Y�n��92�[Bt
�Q�D2ǀ>�4LgĔ����Y�_�7�ޡ�;�R�,���=s�O���Td�>�L&�{x�e0dY�+C����A�G�/i-{e�A8��fO����SŐ�2:k�N�1�5�CF��5P.�{���6Z�P�u�ٵ��ћ�o8��=��{k|M~G��꟥|��!g�Z.��.yHʱ���=:�f	�}�,�9��w��Տ+�CR���8��(��!�=��
�M���/�<î�n���-�m�n�=闸(������t�_��e�K����=���[��T��d����R�H{�^>G�א��k+�{�k]G�/�\Z�t�w����-v.*1�B?�R��CѺ�u�*9W����[��{�X>
��|������B��z�,/�t�KĎ�5�@�g�H�RszY�~����]L���@�+k�Mu�.1!��Cֆ�F(���o_XvҐ�+�4�x��q�
�Y�t]ِ��ښ�[nR�Ƈ÷Nx��XӒ�iŝ�:K�Ƃb���Uii�F	`~��o���m_�Y���t�X��b�?"�׽�_�>}����o<���0��/�0	'AQ��L,	�_i�"�K�1��O���q�po��)���
�c	,]
A
����,���4#��By�A��y�X��_FZ��`,���$g`ђ�m�#!h*�.]�e@h.�〿)E��896�>��~K~�ȥve�S ;�'���d�^�I0
}�B��w��)e�H���U��10����׻N�u<\�Ul�.�l��N*�t�oz�l���@ �Q:tJ�$���g�
���^�%��jyu��D�v�Ӳc�#�\28�+�	/�r:�[1���L<�p@�S���̷��
Gu��?�\�s�~���p��Y��8���[=*$�h����(��kf�tpr`5o������s�E���r��O�aW��o�F�z���[�(`6]@tg�|�J��X]}�"9��F��x���#�F�Bo��J������)�l�P��.�`gA]�"�`Qϝ�B���,˝��xd��S��܇�~�� ��򆾈C��(�a��Sۀ��'����w�v}39��;����Z��re9�C�j]�&l*+1�|)|J~��^ru[\��dD=����zm5�Ԑ��ދ��������X%��ۺ�,B9�F�?�Aɟ�j{��U
���I=ߩ�d��7O�D�g��S����r��	Px�\���з����V���|����]j�~��izv�W���*�}�\�����/� ���S�/����LD̓fƒ�������6h�ČA]�xvHt	�E���D�,�0�!���nB��L��N�Α�P��\3�����C�\��6A���R�"<7(�"Q����%�(�@a�j��2���~���8!�̤tCET^��-���|�	wD��2�=�I��8��<g'F����ɤ�u�Y�p����8��º,v(u�%��	a��EB�Z��xT���hs���z:�T�UF�D�J�ɜ{���80o�u��Z����}����ZUH�� �YDfq�4c@�eCLӫjJ�D~��<>��Mj:|�"�i�Ɓs�6k���x���)fT̍���c��3
q?yWKN!�v�e*M�"/�'>ߕ+`�EP�O�e �0vg�e��ொ�G����A/����S�+>돚�5��+U���|�g�Ϋp�M�FF!k3"�l��
�=���l��q>��
2耋�,�S:��o��|���v�H����7����,�)�;�;ov�;<x�+n͊Յ����)ED�g5'/q��z�g�I�SY�v4���V�N� ����`\�Q��5�m�U����1,e��ʜ��i�

Ⳮ�?a��=fU�a�ʻ�4��kqK�jʏn��$nyh�enA�ڶ}g"�p���dA���B+�5�﷏���_�(�ŝ�O�;�Rm�b��y[ܑ�]��|ۯۡ.�a�h렳^pP���+�z��[O���ӖG�9EZ.�P���LJ�Vz���Z���������e�p�iU|�⭷��p:*7�N��Z���x��
f�m��/�#�dQ�
���i�߅��C�E���:)�-y�1‚���Zd��*�+eY��V)��o�$��cX�xI���ޖ.�����A�hi�W|��P��ea��_e_`����왜-|���(�m&��%��[�N�P7�[mMA�qn�ˁ��cH���b����5���3��[/��W�4���kg��=�C̱�jX&x�ڡ�f�l���tS�0���b��t�Ȇ��He��Gl,����`[���!���)��w����l�h�3�����j��a�k�F�^X>CK(P‚�Pq��N��̉��,������;��\����W������x�.I�nC|b�!��p	:���Ȥ�Ju�	rcJ�����B/Pw�w�s�vo�I���o��}�(�������2�bl�n�b��|�:�)LL�<��9mn.!�Ik�Q`"�0������6��|:�۳���Vr�щ��ם�U�Ոi���W��#ځa��>��'�'u����Z�J�H��KegZ����wl���-��SnWȶ���$vϱ�|x{�,��n���?�&����dh~V���J��L�I���Q�����;*R��]1���ιH����!į�{V�K�[2U�a<�+���H�GG������@(��$�G��3�����'��e��!MZ�U{��%�	�AH�\�~���w��.(�J�>J4MYje��qp�2@�
��RklX�(ނ֨�V`H)`�B�G�U��:�X�a�.Ђa�5-\
�cy�Rx�$7zk9ˆ�+��u�+��ד�P�PL��HB�,�E��,Q�O-�n��P��2��t`�L��H��~�c��^
.�%��T_�D�HU���y�d��_0c
���	u�w(}M��=�;A�c��%��4�7�V	�s��T���'d���,��^�����j'��p]��2[��N⌽cZ�▬���$��9q*"{O^m�H��k��|�e�AM�W��[�nl��}	U�r���dN�H�ĝ�7I��	\��/�gk�
��o]�bK4�_�X#��5Ň�����;��!�zԔ��K����T�)�ئ�\Ģ�b���C�7G�Ib8���=t��BDZ�B���@3$�ȱ��?�L�j�
���� 8�je��U����_w&)�+8�]��>+�-37K�}n�>�xs��OE�ſ��3��[S�Li��#Z�����¢�����~ ]�.P��`(�7uVY���f�?�)���,I�a�;�G�aU�'�+9="�� �*HTA>DuG��5�s6�GT����ѐ1�`o	���h��T*,F�vI�X&Si���#��R��760��sV��
���k���~���f�����&�d>�
{+ܤ�㷆�8�F�K8�.W�Z�F.g@��x!J<��Ɯr��:�'�|!Lj5/;�F��K6� $%<���<QC;*�V�R>*���V��U�����+<�cACK�)x3�{ y9]����Д��L���`o�o^��$���ߓ��Z������������57��u�i�c�\z��p>���(�r����Q?)I��������_��f0E/�Y�]y��TPTݍ5%_�8B�:��������*�4�������d���?�Wظ��Ư5)��N�/���3`��K��:@�潏Qaޏo��L�,����4'�n�U�1���º��L��q�
�iy�N	��j�����ǃ����'�x�ݻ������[ps��o;tu�5	��Iq���k$ܢ�`|&ɺ���������H�$f��2�8�S\���#����S`ya)I�1Us���%�r'�^���y�B��,<?'�7�<��$<e�:8�T�*	�n��],�m���̝,`�>Y���*4F�����t����8�w~�c�
A^�8
+u�TH՚N�u=�/����j���L�G0vU��g�E�~� iӑS�;跫m�Q`�#��0� ���pRݾ�L�
��t�M.toQ^�gp���!\��o�H�}� �,z�a=~,��>̀GA ���HB$8�
GA+g-.ra8uvbF�@=h,�����<ϴ+ꨀ�7�u��R���� �'�1Y��7bB��d$�p���,7�z�(h=����.<��
�[�`�������R7
�8���9'��:�V ŪStY���� �V�1��$�ĩ+E�B�#���#�C�U	�������� @�����=��V��Z/�eHR'�u8�OD4��e����{k�}nGÞئ$�Lvc	k�G7��SF��J��l��9x�U�\΍M��w*���N�(�y��iѸ𞹻���*��ۃ
F��x�v���q��ʠ��.�Y}V��sD�f�ԯ�${z07�/���5A�4V&#y� ;V8�,�M�����T����a�w75@d�iz��Z�1VRؑ���LX��d�7�Y���|ӟ����h0�M��}d
�D�n`����4��(���(_�!��������`A/�H�|׼N�!��1�����&`�ɓ����ޚ��G��
���^ם�?�9���Y��l���ƒ�������" �����ZKyd5�?��Y�$����q<ŶƗ���㦊�+�gKY���(�}���_��ܿ!�SG�L��^������C)h��`���6�S���<�2��#-�'���x��>�Rf��r&X6�K�V��뾸+���$���RL��|Z?���e��R�3���*�UJ����Jv�����R��}VC���M��	۹���~��C�ײ-4�.n�]���䨶�f�?��W`^?�͏t��g��2�4����t�рI�>�\*�X���u2���e�8�
�C�Ŏ�Z~َ���A���Jj�4�T�uߒ��K�c8nZ��
��U�IG��ķ�4�KC����s���f��GG��:^��O���	����_z���#��Roi!�*X�m)
���ӷɞkb|"�-+,Ԡ���pJN�y�N���)�B������N�W����|$��s����L6���考�>��i���0��,#�ί�VWM�pv�7����%P-
�uk�7��KRs�Ngq��m��l�N�U���l����Z`���o:�(�����D�L�5Y�K���ڴ@��f��:*Ɨs(�.���/+�`[�Km����9:�\Ldmd^�Ս�p��Tg��l�6 `�bg���h��j�ݐ����H̬sdN������4Lg���\̱��/�'��n�J1�1�hXJ(�,�:��r�*�̀@�-u���g�&;o$��VW��[���P@�-���âfOKj~O�%��wK���X��{��V�]mk��պx,��v]���V3���D}��\��{���~w ��T�p�;2}^i�����8�^��/��U�r�z��y]�T�5�;X�[����|x��ש����}cC1�0+�c���J׺,vY�cڌ��a����"������k�&��0
�$'+��,�1^)1�!�]����c9�����]@�F�ijU�+�#�0p�9�v�
S�)�0'���I����C�8&��`Vab�*e��x6��f�%��E�HZ;�MBz�M�q��GN��Wl邊���"ZA}��n�I2Yu
3J�t�d�
�kX�ꗹ�<�b��0��D�亃!�G~J䯬�%�^��p���7�߾E�p��yRmJ�Vд62�U�홛�md��@�������ˊZa�1��r�Ԭ��T�h6�+BE̦������~��B^eByZI�X4_�~�������*�X9ʋ_93��c���Ս'XII���(��I�'�_(o0��&l3���#;F�'����d�">��d� �+d)��'�3��qW'7WtrC��k/����,�҆�Vz/*�4�<�mW�&ͽ�p�]��B`�8�L��1��ǭh���4�Jݺ�?���i������ᨈ<�{U�"�@
���"�<��@>)S,���<���{:�r��Tr�#f:�
��*��.²���%D�d�Z͚!%A�z!�]��߷5�������Ƀ <�!B������G%Bb4�<�ʃip�����<NŲ��"<�_��Rd������ps�s�4!���<��-������9�p�N�.KjdUX�ZD\\{����)��!�B|��`}��63S���qI�#;Ŭ�7z�x^q��S$���U�;c�6�}jr�VN�8�Ŀ!�Q�/�hZ2$���x[aL^A^A�RfQ�j�Yw�NF8�K�т%��MF��W�$$�Eb���[�+�x�@X��e'�v����MKJ�T��������
�3�G�x��۫�i�̴'^c�x�@�$�i̖�hi��"N��$�W�!�e���j��[�ה�f�"�B$AzF��(R�Zd���r�U�P���v��f~~�V��PIeQF[��	�W7�F�"f�
ɳA!�����S �š�2j\iX�t����A���R턚���=�t�]AK�A��DŌ "����D�� ?S������p>��7dX�N��!Y9$���H緧���S8��I�`�!��ּ��<��\>�?˚�ܿ�He���
� $|0(�Uzo�wh6��.
C~E0�z�d]�(����|�p������D2��ؽ�W}+�F:%n�*�'j��Af���=��ԫ��گ�JY�I4��%�A�I��/��+�ލLt�y�L��}��8�N��s��z��P�ؿo�k���V�"�ڸ�����I!$�U
L\����SIQ$!��F3�9�-+AP�Y��)d3s�5�U�X��W��J��=�^$y���g�v�����d[�Ri�Pu���72l��������?���C�D|���ߩ��Lԣ�β�a�l�=�SL�=�hy��4Y���N9\���%�ŒX�������3��������hH�1r�-�G[�H�к� ���Qe+3�Kg�W~pϢ�夵D*�����:�0�*����P���+�oQ��n|���_�!�|�L�vd�_p�D�����}[�uF_����0�]�77�E�^�;5�.�pTrW(`�9}"����yP
!\3&�'[�ޢ��4�>�^A?0���vO���u�]OuE
�>j�p�D����7��Kӈ���ٺ����b�~6�1P0��q[����Y�C��,a%-1��m�/�
��;y��v��/~xw��4���Ԭ��7	f���,Y�jNh٫.�i�]o�ôZ�X�HSn���}�Қ_&�j�a��<R&��Ұ�j��w_�B�J1���+Ny�_9��b$O�CD�Nw�<���z}�q�tR�4h͋��v���16���=�Y��i�M�ą�2�p�a(���C�ݣ	E������~#��0k�lp�iR�K���aDbL����dЅ�-��N~���n���=4ݷ�5#���K#ǚk�d3�8�����jX������l��lu�����6���Y�AbxtV�NɊa)�@/����WŬ'�:,,ӯhS%~G[�0��*��
@U�2�N
�j��8"�&]9�@9�̰}����i��Q�S�4�����A�6Ռ��������?�V�\<?�����~�
,�;�毳�X�kO^�ۙv�x�zB�4J�ګ���9Z*<Ҟ���MG)(�pTv�T�v��
Δ2��j�jG!���~�)�n�YG;i���sߛ��V#���P�{X��ڔ�d~v^7qr��@{��W���R�[.�Z�f�2s�hb#�k��ږ���m똚��{'��e���d�D��7�]gָ�4�f��\fܿ����C
⋞�K��o|!'�́7��Tb�s6�\>�Yv���4����z��j4�yz1`1y�%1�wG:1�T�^.&q�\��u����ݮ1_Lda�2�Q�Nи��2�S"�'�����H��i�.��;�7�7�w<'B�RW$�qz�+�J-[9ch�fuCR}!�q�R�1��w�8#�]g���z�ɬ�
qZ���'!)���9���� ���i�x;�fC�A��L־7��0'�����NO�
�4���A��|��mO\���I�Ѻ;��Ԍ��)�%��(�U|�Ĕܝ��o>&�:#��TL�P�	^�7J�N�|Dq�=�]�ԛ��$�����Eh.�c��m��o���,e�9b-�6���JGa��m9���]7S��dB��j
������H�]`�l�^�3fs��!�F�B87���b
f�x����)�̍� �m-S��GMkU#'B����%���E�^���y��(��$T�^Z�S3�)���H�@�?
N�}*���=�s�yH$�mq5C!5���@N�eũ�'�{���C'�cC@#���O6�v�;�+)���Ge�����Z�P�]�"���\�Α2�%���Ҕ��J
��'�H.b��`�&�gE�D?�~j��*�|Ba��]�bd�	F������3м=e���H�
/
9�K�?�#��pIow�R�F@9�=ʿ)�h�=��a��@�2?��Q!���Ȥ�hS�Lt$h� �~��	�UxN4=iQ:{No�Ħ�4;�0��R5�,��Ԍ0�
�U���q�y�ިm=�q��c�C����znK
���A����i���ñUY��1�(���է��������F�ռt�<:�>�p4�9x�{d9Bt�m2�%��A��?t��!
��h�Y�2ҧ�M�Ok�iן��Ow�mU�y�7���á������;�~5����	q����S���j�^��U�(���t�qN���П�Z�)}�H�Mηm}|Ɲ�<�a��� V��;L�fޯ�	z��v.�f�*����Ƌ�/�7V	�8�?g��YC��2Y_����Yy����v[_x����������3lZExzt��E��D|��n}�9����o���
3��	C�(Qv�59?�S`"��bf�u9
���q�*솮�8�7��S�a�o�-:
H6����$j2[���xn�_��=���ux�~ �����-_��u�f&6�>��ñSfMM�8�59�c��X%x�0�}�-��ޑxI[}@�w���
�O"K�p*����*�s��~awW�6	F���VWe��햮���a�q�����<XnV�
� �y�8D
�/<�����ɯ��z���n��U��X_�8X�'�xM&�E+�D�+��u�o�s ����đ��D��=��Ā6G���}�TGo�=L������]q����c}S4kv	DPX����BȺ���D�\� ���%!��C�(���Qj�Ob���)����ʁ��nH��hݹݯgo�)�GJ(h}��u4�
G�)�R�L���r?c�)ѫ�Q�-';,�*��!ʸ9O�T���0SCV—RK��Ҡ�]o(���|�?�������{�?�?x�#���ߝ�j�dx^�/��0>���@��ԩ{��F�aZ;A��~]���������sQ �Xe���o(.P	�OW���ɑ��1�m�V[
QT���A�g��w6��u�-F����oK��/��ҫ�{@ሼ��=		F��
k���gզ2��BG
+KY��M!h�v��PO8'Y�_���B��������VLlL�B��(ʫ�_��A�Ș���?ڭ!9��T�v���%(�%��`��#
��^�2�UJ�↼)�ٮlpUF��܁������`n��
��t`�*�J]u4��4a�fW�``�+������?�>�|lW�"���j�饨�Q9n�\�_�Z
�^�c������|������t#�����_Pr?��޵�:�͟6�6��`|���%�J���"үI`�D{��+*�_,-/q�]�m����	�t$v.U_B_&+h컽�&G��L����Zl��vogw�hu�Jf�L�lP'd���=���JV�h�s2
q�.g1��p�˲�Jb�ɦ��>�q��/����,3G���	�<��oM�y�,�fA����.�0+��iLUue��U�g��B6��G:֣�J���@E
�Ҳ���`�NC��=\9Қj��@EV]Yz�T��po�<y:�Z�A�e��_�a-}�Ŗ\Y�z�e�GyA��>�w��n��浽gl��a`2 t:!D�i������bԔ���h���럯~�?����Ke�Bchecksums.yaml.gz0000444000000000000000000000045014442217575014616 0ustar00wheelwheel00000000000000�}�de�;r@D�=�^`���Μ�s}�H(G���CH�@�O�z�?������^���~�y{���-�y��x�r�L��N5"1���vNy��}�>��O|����2�Q�SL
cqD\vY �9�-3����ٟ>i�>tM�o8�[x͉]'?Ղ)�<I�u���%K�d�FGn6UQ�an�h��2u;�ZA��4h�Ap(݃ �͉s�i��̫m�R��b;��M�|oK���Vv�J4h��]��Xs3�魄#ԫ�n�is�'�ޅ����1e��PK."#[������cache/ruby-lsapi-5.6.gemnu�[���metadata.gz0000444000000000000000000000105614554466355013461 0ustar00wheelwheel00000000000000��l�e�TMo�0��W�^�����HTT�BHpi+�@�r�I2�v�V�����v��U/H��g�f�ef�,�/�T���*T�@W��
[T2�5�H
��l�rD�����H�y�q�Z���Wldh��s"&��[�+���
B�oA���C�Qy�Y?'tĀ�ht�7S�P�D��kd ĺ\�e��l��eY�'/����4`��+�cHDo{��(r�`�8���+��d]�C��3��;g�%G��7!|D:^N)܁������C��YEҹ�����]!N
�X%Z�q���|��=�c�Gr�iD�)T�1��&�
	��)��N�
�y����q�St�6a��h'ڎ$�E�~����[-���K�p�1�p��!Lc\�V�(;�>��*��f��^�	���!HjY���h}h|�� 4x���$�M�1-�(�c�D�#n��H���������(��'�Oh��+^�+W�)DM�+�9W���i~��ϙ�Π���'����{���t�����
�LO����|<�data.tar.gz0000444000000000000000000013520614554466355013404 0ustar00wheelwheel00000000000000��l�e�{_�Ȳ(��=�f���M3+��C|��6�X�\��-�Nl�K�!����oU��/�2��Y��a&`������������������j�Z/�?���1��w_�l�G���ϟ�|���(�����?H�?���E��	�rwӒr������MS�-r:�\�H�)�4�#2��_\�����j����szZ�b?�!�I�K� [̷�+2��Ix�Ƞ �;#=�`\��Z�r�9��8� 
JOz$%�<Kk���S�d�	&�pQF�{��d���a���$L1g���=���
��~�$
�1�����O��4��k��8���+�C�s&yJ�R��pʱ�G�`��'�$
�X~^�X�6�q
;�PģX�6���bG;{�g�&�����6L�h�����п�)���*�^ i
�ˆ�Dt�F�?�#�hL�x���9XD� �_w�*�uj�:d@aE0l����&���S!@.��"���G�aO��MZq���r�=�3p�Ǒ��u4[.�
0�=V9�O��Yşϧ���`^4��e_�����T
��Zr�F���'�C��Ӕ��t�g�j�_��u�6�$w�'�b<�ǿ�!0�O�y�32��44c3�BW𫍃�4�ǁ�V`�������_�0Ʒ�}�@�x�@8)�
��{I&N��d�N�p����$�##��R���^�X�Z���w�ìE�r��X`�"�6�'�?���#�j���4���6k�s;����l1�B`S$)�T��U����~��POH�pOyUd��4T�4I��`����)+ϷiNm�
�;9����	�}�
��#-����lSwZ�ɲ��������i�������Q<�I�y�d;w��pg\l�o�Bb�g#�Th�ew�([D�@���L��z�����g������EZ�Z�(�%���D<Z̮�'�p:N`�L��ݯ�W�I�iCD�w�3�-�_�`��^��o7k�頱�M�x ;��`:i�1�a������(��4�)�� �ڌ�-т��
���"�f蘼���ĕct�p�-�(t�*Cns�R0�9y�[��I4����?���㈊�5��Mu!�a��f�{`��t�=�raђ��M�@�„Kz�5��/�Y�����{G��y���l���)4
'a�8q�~��BZ����`�tk5�a��5WW��I��(L��,�g2I�M�7@�0�͓`$��p����t�UT%��f[G��D3K�
�����p�O"���90�'��DM���,���P����1N����2��_���C�����y�b�Dx�):q�;fZ�X�*C�#h�=W^�1��̟N�RX@e8�1��rP,*@�ň�"S�N��`�ZL��_�8!Sw�|XV`(#�#�)��\T)�"��9��\�lF��Sh�I��k�k�#�����}P���j�P6�򡕵�m�*�(A�R
�\�*=+`��?�Y<�9Bqƙz�NS���M0��q�!����"�y�X$�+1σ��c��1U�z���v�����4��@�^D,	�4!J����4ƙL�FPW4��@�=}��w����D�TA�8������P�EWJU��.�cU;�vt^rw��	E3_O)#��)�< 9���Y���I����S b���2܄J�T��
&g
�u"��s�??�ް���mXS��т/��`o$IϦ���.�&���\�b<�3�߆�Z/��U����Xs� 	c�3Rm(�y��ҹqdt�H`U�A��#��V�Ǎ��V*t�8�_��Iw����>YBt�-�9�2��/��c���	K@T�@0&"Uk.�\C���v����K>v���m2a�ƍ�9�y}�r�$�8�v�8��J�s���0����|��Tʕh,�f��6y�LUk /䌃4Lܦ���)��a+����!�d�����E�es~�-�#�9(r�F{F��i���%h��F��~
�0�j��÷�|i�5E�ڠ�Di�����*�{f\�����rX^�n�r��^�n�e�
R���쟾R��X}k�G��qr����a�l���>e���?�܏�4hT�DV�nt=�3�v���~E_��2��d��zINaGO��'C��G�4�F5���`��+mw�@���]���շ����v}����z�bװ��|�ó����wOvi�3�A��\���t�fڭ�w����&l\���Gk�6h�4%�� �S���3�-@�"���$y����r��g,��J��[LPʡ5�.*ž�LY��,��8y�zk���㯟�����C��N�J�y�1�_�h�u���4�k�9��r��^��_�$�bko�Ë��v�4r������!(���oe�s�I3X�wn��������t�����w�Y�tc�Z�u�~��ݺ7�Ä|��1�o2���~�P��3��듇����6I��rـ�@�x>�e��O�%����ܜ����k��?r��>�&Ok�0��@]�}�6²['7�m�q��N��x�1��H�AWc#7J��E�T�_��̓�w~F����d��=H�u�����s2 ����o���a}�����.�=�=h3�DN@jn�[��_��:��o�-o��?��{����?�ggC݃��twk���Y��L��֢6�_�a{�ư�O�+�D@O��;ăz��)�f����&�Hđj���Ho���A23�Zpo�1;�6�p�qH�&�Rmd��?
�X�h���P{�l���A��U|�Yb�άjQ���@
.����Ɍ�hdzA�����#ƍ4�C ���"��@b�:.B��0g�����|1^;�p���Dw�T��C�#F++�]<BZ�鮏���0CaAh��
;5Cbq����h�Z����;���6�7}#`�6�$�d�CJ�4�dw�T����P�����-b����{���ހΏ��t�]�/��?���G��od��K�/~�N�����#X�H��Rφ�ޛ��yP[�����F��^�9�޻����ٰ�4I�����wv�$���k��w�!�7i�v5r~L�u��o�k�M�7���w��a[��Z�\t�����i�O..��.�n����޻��6�-���ݳ!�휞꽬��r��#�jɛ.9�uޜv�!�ɣ^�{8����p��i�6����Т}��kr����/�d��λ�	t���"xhp��C����7�aox9쒓��#J�A��s�;�#��J��A�Y;�;�a��l���rУ4�
�������/Ԡ~؁�G����@W�G���(ҀҾI~yۅ�>ғR��$��j1h8��}$gݓ��I�찋���ޠۀ��
�@�6�m^�.�V5�Qa�&H�;&���{�6/C?�q6�$;|�ɽ]�ة�j߅��B<��;�{o��w�F��
���tB�5��p��n�P�U�*�ͧ��5ȗ/y��dF
m�ID�����w0��	�q��g:I�z��������<����C5	�wNYFI;�(�/�o��tptE"���2��]tʹ�����m�z�S���_ߞ$v��ɻ����w�ݾ�
��]���z���H�{�k� <�î���U���[I 0N�*�gM�S�{�uN{?��үxz�R?��{�S��g��Z�aOr;i��������1V�f��MK=z���\[+7xZ��l���,���7��׸2���=�nj��_����9�`��󶖻ԛމ�z���P/����_z^���D<�$�|N\���WC�׀�C0ɦi�zm訜�&yQT&��I��7.��a!�:o@FZ�v�R��^xo�X����J� �v�)���JAgu�0yxm�Mh/-X��]�O
��R({��S\����RtM:�z�����j�#]F
S�/��p��uл�������~|^sx8Tƺ@��^�hrX?��<���b.�G7~�g�m�����ǰ����6�xO	/�l���32�9�4�,m1�dB>��`I{��eP.<
"�
�"=�b�-���� }��k�aƻ��P,���	&=8@V��i��D���3�]#�,y��b���z�-�YN<�����c�Eoi2�~�
j�5A@^4��v��鹸�S<�ZD���Ŝ4��&{��( 6,�PτF�*��N���d�����=
sz�n�h.��h�>�MJ^{���9�P/���;���$n�P�V��6�5P��iH�<�Q�~�AtkW�~@3c�n䏢�RBG�nt�H�nȟ���gNR���-H�%1�k�f���(+�(,O���P���  F|`�D��U����h�����5ڤ�+ 5�t.R6�m`�Y��<�KKԘęф|g-��?�E]~��Z��{��4������g/Z/��-���_���wG�֎�o.OjY���
�e��*��U�/�p�UXzG��F+o�4�NF��$I�IP&��I�dz�����j�F���=)��|`��Q�1���J�k3
7b6.�)m�ʫx6��S�N�;v��B
��^O�N�z��
~�d6J���߁��	�++	�Aawz6�;zq�?O\�Z�͚n뜆�⓺��Ha�����B�(̓�2���-��I���Tyd4�H>�O���J����/No�:���Ӯ���(�?gױ�8�Y��������I �����)#�j]-&�>%�`J��iN3X=�Q+�޿�ҸǤ�B%�^f��7F�CcϨu9�~��^�@�A��ܛ5�b*M��j�T�i]�3��4{�~��I*�N�u�^gf:z���1���sz��^
}7�::�}�A����G��M��ݳ,�jW��mw�7�G�X�i	�h���D�G�ě��O'��Kn.o�t��\{��?�y���v-�vOC�������R;�v�]zg�i��C��N� 2�s�%n��M>�2�lF��Q̢<�n�����?O�:�d�@�S8�@���K��0�`�c
K�;�Fn�U��y����\*�x�ʛ�:�����eEN�4;��>q��z�ل�v/�0� *L���XA"R�����i^	�v�a��Z�X�x-���'m-'��t��$�\'���Y�Rϝ��f���gi0J>�ܛ�kN�ű1/fso\-�����p�R���<�D�c8�p�X���yv��أ�c>zx�Q��`w	����$"����5��ף#̫5���zW��}>�z�Z����4��ވ�=Z7he�i�2���nj�4�
��lH=z8�h[
q�cL`q�㜥����
<,��]h��#��ȣg)��0qڭ��fi$�Vt]k`Oܒ��k�ٯ}&�3o2>�<Lm���<�'�����$��� ��&�#o�&o>A���x1�2�:������t��b��b�%u�c�A��44�
�w:�:S� �
�J��I�/,��S�	exz��/kM�p5YkZ%%(W��\�F*���h5r',�:��b���|N���l�C��#��ϽQdtG�?��"sJ���c9�HP�;�,~v~�u�P�3���h��qE��pa��~��4�Xe���K���pHJ��jG0��k����������7Y>|�[��f�ȅ�.&<����s^�Ã��]:{]�@9�_>
:T��O[�#
2A�ڍF�$��|�G��@��"}��l,#QF�W����)%h�i]g7�T�1�O9{�)��"�g�H�c�� ���4H�:�NB�G7��!��.{��w������ma"FrS
��Q`%�1���2��X�O�<lu��L�j��u'w~�$�e�����&O�nK��%g���3�N�%!��&�0kgg����9�Y���>��#�q,�a"�jEl��%�F�����
��3���Z�����{L��4���z�P���;�;��0l�a��i|]G
��GSÂLf�����n��(�9�u���7�1��2�����ԫl]�q~BcX����:|
R�Z_'O��o��n'|O��?%$�'�jތ�fy
,1��ؿ��g�M��6������[\Лd=�)��K%=:F���gMM�㕜4���&�y�*-0߷����o�_�����o��5[��f��̻��S-|B�f��ޤ�K�W�oQ�x��ra$>�n#+4��G
	�'�[F����D�@q�ѷ�}��2<�>�p>��=�<�s/+��>��W��5+��%�G��Y{�}�zC�IM?�X\]t��Um�w�����_��z��vXv[sr�37�	�&$��F��9�o��M��o�}��#�\~�!6�>�2D3!S���s(A4����B���DVH�ޜ�� �����2
�AS�i���:�;i&A٨4�$��s���Oh��ޢ@r�=��7��Q���ټj̛Ec]�'�w��%�I'J�(�<�e�I���+�=l]�O����f5�5���A���7#l��a��hog��3m�+Hb#n��⏷	iaN�aXu�mɫO�E��L��q�D�@2�	KJh���~�0���1�e�-��㎰a�5�@Ɉ�݋n��YBG����� �OS�{;h[�Psk3`Gj�j�Ì���R�6�����u��^;��X7�\a�4�ƅ����5��/,��R[/KWkŖ�b����1�e�P�m-j^���=���h�޼i��J}ȸ���A���$��MQ&�9T,@oH��^.^S;�=8c�Qtl�#�ͳ{�N��Y���~TV4��K����	у=��)4��A�<NA�۪7B�
Z�4��BM��x�O���z^��n6���#��
&4�ah7�;���<�h}�c�D���:S� I@�BPO`�Z�}1�ay��j(���:�+����j�l�(,]c���1h�ȱN�P�Oy
ʀ���%etDA�r���O�$��S�6�O���lBk��j}�P:�S�n�,O��$��|z��y�{t��"�bJYN��*������7�A���[���m���
�C���#M���g��e
�d��`�f\9!4��T!q�����˼w�e��R���T�ՠ�u�H.%�ցrq��[���*ܣp�j۠8�(�����O�J����}"���!�ͮ]@y*��+��]��#[a'cFмh��QH��]���i�c�;<�yB��S*BP1�S8���oN�A1�S.�&�I�Eb���ԁ����^��H��U���q��hDD�N�Q*9���uV�L4���$W<{g�>M��TC�xtb&�34��������Q���nO���&
/�N�|l�%�➲a]�k�� ��Q����W9d��q%y� �x���(�D	���w�C�{��aC���: �̀���E<�t��T��@Ŗ��PR�al��̦2��b�T��p�nU�c�r��#4����Ά=��nN����`��ӷȇ�đڍ�_*T1ɵ6m�#� ����$c�
ri�M&��!ȷ;��0]��kZ���\�F�w��e���
Ek�j��a���X5��9�(c��@�i��-'A�ߤ{@o���A�#��3�&1�p���P�T�tM�2� �D�<P
Iݩ)���R@(S��8@�X_��=�D��Cքbæ���n���T�#�~���K�<QPjX"r*n��:TΧ6V6f�uڹ�����s��]̐�
�g#��)$�,t؄��,������V�T"�#������	�8��۴��	��K�s��㲞<���)]�Q�X.�;'��Y��68�!��Z�(��D�kSr�Fy�fg!l/H�A6���2���Sf)�B@a�.����Hk���$['�e��d�쩲��閼��l�LD#��$ ��)Mn�W@��B�+S�aեZ��ޢm7hM��C��T묖����d��\!rײq��۳T�֞�3ȣ�v@��#^FBEi3xD���IbZ�-���5�IE����F�'sb-zb����/ܽn�Z/��2�I���N.8L������|n����c�ǰ�>W@;ؽ�5 qJ��2[y1�\n���B
�YV@f)Nn�$�ܯdb4�����[̺ľ�*��pݎ���6�	�����(@:�Z,�^7�@�vT���I^�{b�=1r�����"n��A�����zV�3�
���K�ܭ
jWAR�%�B	ҍn�T�5я��GC*���tͧ��ԭw�Hp�Cp7P�Ni��H�O��=aȽ�1s/t@�&�'�—b��
�s�†�����X�/��,MA҃Hz���j�Р@ȅ�<U���?����}{�Gq�>���e�4��*z
��t3n��H���&�@QC���˵���!��:dK۶�3G7H u}S�Ϸ�5˞��1�w.��9�*�C�x#��b6�����
�0�|)�3��K��T}]��"�ɾ�ⲙ�
�-h�ύ��c�#��Q7�m�F��A567
G�:��5����C��1u��#�e‹ShSteS�>PvAedc��	�Ό#D��r�~��:���#�ʥ &h8���=WenI�[�̤ח��?l���I�[�wU���4]a�!��l.��$k���kMdM.I�f�҇��Aj�M�y�0�C?b�f0���f�~-ʈvJ�5��3�j��]�r�
�eS/�1�JBQO&�'���
W�/u�9�7w�|I�I�>�Z�/�
:K��J�i��*�䁿JK��a���*-l�ZV�}Y�<�q�7�ದz��8S��9��.8��+�L˰`�Й�b@Y@F?�r�
�U}��9h~0l��D��HL����6v΁��m���E77�8<q�c��Ӣ&�*
�����F4�U�/�+4����p�-JB���H�����}ŅE�J;`ò$��4�L���xN�
�PZp�]$w�NTgn�����zv^
�@���C}�B�Lf�)
Y��B����s������}�f�a��n}�V�+��J�7�1gW�y]�.�1��0n��t���e8Fǭ��P<���	SQ�Z�v���(�=#|���]�7@�#;@6�v�x���s�=����sop��{H�ɰ&���6�s��B�t3S���O�0hTVE����,R��T}c2�:x�K:	�;��y�R�Q@C4�"�u� ���~�Zޒ��4e��&�?��e�����^V��Ҕ2���n�����+ns�c�Ax%���O+�b���xQ�����x�w��)>s���>�����j^Q��)�NI�g��$�2k����O�����\�c�%��X~n
�b�E܋�s�mc��
�>A��ɮ&� ��
�TW�ӹ�W%���(���\V�-���Y�@�~�:/E)�f�'����H=5��]h�pI�BU	��LQU�mT
x,g�iT�����\S����ݫGÜ�(_\m`�Q/��%��Iۯ	�^���q�V,&3v����X��hU��P�ɾ�JWwJ�W�2boqǔ�`{��~`�5u�1I�@tӁ-��e�1���3zTh����g�R��b���:I_6�Ke�Z�Iν����o�IZ/[�϶p����8�&�b�AXL���>}�n��.!k{�N*֡׍G`Þ��n���BN�iK����l;ͨ���r9��,l���D�ɷ�OD���aH�u�j��CU��ۅ6�_���(|�E8�&i��M��0�IrƦ58�� m��7#8ߘ,��9]�����,��*p~A�Y���q��.>S��RX�L��j�n�I���0iW7����.}���>�>��>�($��DBüc�}�
��#�V[�;�x�I?���)֍��^a���1�x,��Rz���3��r�L���Be�dt�NLހŤH��9U�KL�ǝ��S8�A'�f���mL�}jl�\rZa&��1�>���1�0j�-��[#̢���&�罕 	�'����R���y%!�y}Po�:P�^��Z55t��ʶR�u&�
z
��ɉ�'����!F�"o��N�����!�}mkg����
�X��vkg�{����ڝ�̃��2^{���֏��#�S�Kz)�`�ǯwX!����Pbn���\
��& w�U��za
$����O��=YH�	
+!����e?�+���)"��x[k�� %�Ŀ��S��m�ov�v
PFJAWG�oT��S��J�_S�eS�\"�-���x���9��ER�Y�����Ԗ��Y��I�8Ø�	��\L��}Lc��GF4���.��5�b�3<���������뒋;;�*�1@R�~܀M�b��xLӡMR�~}si�b�|b՗�Î��%���YkM���[MDȫh����-��M�bC�w�Ք|��<�]f�5���kk�A��6��]3�����x��Z8��e>�0��lLK�e��&�h�6�@��lE]���,qw��jf�m�[�Ru��,@�,��Y|�I��װx�Y<e?j?x��17���7n�0�V�VG�&��C��䒭j���l�Z�b(�8H��Ӑ��ñ�ޠ@֦���2s������0�!���;��a�+֭�I���[/q��~�𫲥h��9(mR	g�C��ؔ����~�3�~��G��V+��	� �j10�F�O���,�
&���313k�MV�k�̉���}�M���Y�����<����c�Miwy����lB��<�}c�h"%��0D�lF	�#�D�~-��Q��z�s��~�!5֬��Ŗ6��󻭃��G�d���ˏȢl�!�S�J���n�U�g���sK��4��O�#{��_���Ee3��7�:�@�v�a�8)=�yJ!S!�]rQ�Q�q�tD!��&l��ȶ�J�5sz�n�.�O���ٍ��S�8]�0���{�_R���'�b�����_��O��@`����EߤW�ɳ��Y0�ŷA��o21��KfF5��ٺ�uOG��?B��V.gD�7���)���^���G�*{s��1�+V����"!�{�W�{o��W�>eE��\�h6YfV<��y\:�
����!�,7>K��n�t;;�U���Ȓz�|j�xN=�G�UB�,S���H���	>��rFVh�7��iǭ�
^-	`د�ͼ����6�
�h�c�	���BkʔV�%���R�>p�{[/F�s��,��)�B[þ��^X^��	�+	􆒸W�O���j��j�uؕ[�y�MXnטL���)P��mm-��Kg�IJ���׫a_��'�#W���=�u�����Q��2���z��
^ei��f;㋲�Oʒx�B�.'�CnE�.�%8�$��ۧ��ѵ�L�&�qiEM�h�quʲ+��7�n1x��F3M�r� ����4�Jc�M\�1����(8�1Ҙҗ$J�}q5��'�T
�0�l%vZ}4�d�P UL��(ְ��!Җ�8��Je��u��vv�
�0�u+7
�F	�wH5���R���CrAE-on�:�'L~�l�n��'�wf4r�@zT�x�Ŵ�z����Du
�뛚��F�Rn���d��w�S5���0���}���6����~10y��z�c.�_F���u���&��S�����n�O���^��p��b�DZ���D���P&���XCĝ�-0z�+<R�#GQ���c�]�@-�i�u4�3��<��z�G��Q����*���X���5��c��f��Y�W���B�W쯼���h�j��vE���xe�/��k���Uv����I����4퀮_�|MZ���<v��}�vGY=q��j;�|�v�+��2*ToɺA��-���Z�!�,}!�`�"��ڠ-���/�NDڱ$���sA�QZ"[����X�>�V� ��A�c�EK�bZ���-G�0E�I��[�~h�a��ot�ԯ�e�\�9i�
�Po���˹]_(_��iVx2��Jm�UaW��z3(&oQ�0+.�*޽d�\h%<��
��OCz�7��x�����V��|
#�@�m��hsO�S�
���J��Ih�W�c���	��%��V�V��&�߳7Lje�w׶��,h/�
�tj;;���;�b��4�x5Ջ�,��k	y�}�Ӡ�ˑ%DžeB|F����t��f��G(�����&y:xj���ÿ�n���QSS���3�z�9��;T�{@��*8`o�t�*�`� ���|�]	Wx�4�Ɯx��8X��A�Y��N���1�Y�Pg�¼�ɰ,��nҒ`����++���>�&���(mN��nL炆�Z�Ws�����7{��9�ck�4x�(�l,���購�]am�K�+��E���
���P����n�r�r�G�)G/u��	���(r��"�A^_��S�Y���nY�ڌ��2jr����	
]s�5Iq^Z�ZH�L"4�<�>5�
��n�]q��A,Ɓ�:G��4*�ED⑏��1���(����?슩SX	��{2ˤ�q���
g�S5��g� կA87�vx��j�4#�7���X�*�jJ�u��Ť���e��|ZI}8!��6�@Ď>��"<�yk������~>��5�w�%��uLh�b�0��Eu��b'&ƛ�I��^vCݰ*/q!�
V���8&�:�����qH��L�50٤��b�8�xWdfZE�V�(�3��Y�Gsx*�[vc ��6iQ7	�X�xJuv޶��9��	���
.�)'�|�y#��?��r�ꂏ��<�<T7Ok4\�(}�ģ M��Hs~V�m��^��"��ma,��T:�Gy�[p�M�G�X��\R�%[񺦞�uKڡ7��A���a�=9�\�.`W��d�(.}9跛�c�
#���x��YI�z'g
�eF�6�(����A݀Y�����!�,"���򋆚��)Q #�~��X��0���^<o�?��|��O�-Q�����T��
��O��cu7t9��jxJ���ިN���g7(��R�̈́gl���gr��oFg���k�<��&q��C�	J%P��kB�s���#�,�k<m�t�΀��2�*��i5����d�
�|<���
$?�=�x�|BFWy|�9���z�!yGW{��Y�\�x�,
�&���&��^.���F�VW8��h��F����$��Hkƛ�co�G׈�oB���u���o��,yW������Mb`�@sB{d��;�޿���6�}�z�*�
3��Y0�a��
ic�UUef�2|���8�݉����K_-�D!��4��5J��+|����a�m7�;�;�M���V�'!�_m���(�A/�Xku&~
QdB7�4�0�HE��n�j�)4�.��v=�'K���ԿgK�j[f��1�u�'��.I��Y�P���+�HiĄ)��&�2�;�	_Ai�3�ʭL+��,���~݈}_۫��}�ob0q�Fq�.���J`�\�����J_�4Vxs����{,���C<�(x�Ӎ��1�B���6+<��tORuz:���{[�λ?�h�R�cX6�Â�p��#�B�aj�����E�|x�
/�~yg�G���o��K�@�\$JՌo���C��3����kciW�6��9n�u�y�?n�d�[()=I���^˗ ivZ�wv��8�����z�W9|U�#d����<�(���	8]i�4�>_��SHU�힭r�tCz�e��`�G���j�_g=�3xr��G�x^T�v�lQR}Q��u��k�{��������W��u��ı�Y���t�K�_s:������'344TݫRuia�x�
B:oV���i���� ��c'u>`G�)Qxʔy�6<KX��U�|�8�_��=W�o<Ylnמ�{�_�>_�K����_��[LK|������������x�˾k�U�TJ�P����D���Rd�"�:+�
^�t��I#��gF��Xs�u�&=�s�;�H-SH?��і�؜���'][��5��0˹`-RZ�H�Y�q�T��,��ITl��Q�E�OǓ�e���Եg�j��s 
[�˯KB���a

Iռ�!�4��J���r7��Z��=�e۴�Q'�zlc�·�۳no��N�1�K���2����W�S��z�h�g�[γX#�Á+��/� ��w��b�O���xo�/�(pӣ�a�+���B\���BQ$f
ó!��7qwPL�cR溠��)�)�@���$�s�������=?vN�)��:�Ȩ�<�V�b��:�z�2c1�篅�h(��52����b���QP�8Z���p�.&�k���]��<�m>�ͩ-&���1��<�R��I�F�rڞHس���?cl/�$
�����:'%$��ק|��.lI$�+gƔ[E���9�Ou�B:y��F��:�i�q���2����Q��d*���RFV����lt��3TO��jr(��N4�8�)�O���aC���
�b�U!V�5$
]���a1�
�1Pj䫍|.��[�"c�O2���+�5}"�����t��'�y<:�t�=)դWmv�yc
��k��ԛ�bZe��
V�uYH$���X^�'��h��\J�#��Ϯ)[���8Ь�	Ӭ8��T6oD!Fk��f�D��X�\��|=��B���>{.*�jw
;Q�;��*K��D�P�%�@�)S���lK���{�T��"����5�]ɺޢ��H˘�DO4�����p��ZMpQ!�G�i��ES<V�qP�k�G\b
�ٰ�Gَq����,���D,<�S�D��KI���/�F��sY��u)(�ty@�
5Z��X��ޙ$̥�]�)4dl�IN֤K���0y��2��%�\+v���tnB̑�Y�]5K���X��ߖÂ���b�~Ky�"��V�l�J�֒��
�ņ�ΰ#���ʜ�)�(��B@{��}Pn��)F���Ys��	��e��t����*2�W�Psˏ��˰_w�Wz$�fs�,}�1��z�4�W��E���_�PDj�-'�U�i�Ӗ˥�͙���!.����g�H�T�q�@���tGM�5�TUpX]�-ƹ��+I.��k��:�r����/2�eދ�l����.��k\���� ����^D�X�hf��̛ڐ�E�u^Y��;�%�5��Jw�h���ϱs�z!b���Rⱻ÷�I$T5�jk���'4�|��sW��0z�
��ϭE��-D�ΰc�t�?y��PD�Xˏ_��g��CBkN��*�la� ��~yE�(WTx��nq$1�S&���OØ��qc0Z����8�u9\��0�������3�6����
6*�p�7�����j*���~�C��ǿ��r�\Y"�O󘂚`��H��*�܄�e��%#�[h�M�A>L�"�h��uz��m��FQE
����rp��BQ�����s"~�>l��[�z���;��a�A)U�$��J_��!���K1�TVU�@�ۺ�?@n�(���?�Q���Ƴ��ȗo5�z��
T����g�vD�/���I/7jo/.m��_�SV	H!&#!��s��\��i��S��,�`�)����:���K�`�����	][�L�?d7I��t#��leUͨ�X+F����+�Г½_�Q_\�̙YE��h�;D�7�Kݒ�;��5�,ߖU����ߜ	8�Km	.;²�fл���0nK
���`��	V5�n�MÀ,@�C���ў_�:K�ɑ���&]N����B�15�I�om�]��Ϗ&�54#���W

��X�pm��*ue��G����|_@e#]�n�eb�	�%��=��`�b6�j��y7�ח�X�+x:�qҗ?���|�i�q����Q޹xӞ
��4�~�������Z�6s����<�����AO3�Zm�h��,���{��-������C#��G=mYr��T9�Y�Ѵ��!�qd�L��Nj�q[�j��y\�]�Tiu�N��=W!ؘ��t���x�o�V��P�E��&Y"����Pl�W��n��_M�ⓗ���N��M|�;���y�r���2,�P�~~(wV�X�W:Oz���f��X4�n��^<�6+a_�`����~�{ۧ���V
��2|�J$�p�g�JN�*2w�k�5��9��Sp�J��s:�cp����(�ܡsc��1�P5ܵ����2���]��(�X��oݱ�7�
.a��0R?�AV�>Qf�B�ʦE<�^���i�!�ȃv��j����kc��99:��z0���q���ZA�ea~ �/_�3x���{ʚd�O��6
�8<��>E��c�{�����jgI�I�ޖI9������Ry�W���Br�����4�����ݨr]1�p���-y��zĂ_�����X>�P8��{����	Dz�F )+������[k��jg���J�k��u�����*�'�ˮ�#�
�FP^�(`N|O�O�Į����v�(�.�^�6�F�#�/<1�gs?	hNc~��c:+�m�c	����I�W�{*�m��u�Z&[*�k��Z�U��$���<�^r+�q1����֏�S�G��):�'�.�G�V�l�Q�3�."��������`o�q�L�e랸��
��Tm���=����(/YKVVX��`��4�C���6�dP���\_^�i%J5�!.�y+��Xi�eO���t������-E��oL�F��SӁmӨoN�=rNgϞQ:�?��RMh���P��ҞWԞaʨZ��3���*�g+LN[�-��.��B��	i��|��'�8�1ʼ1���Mޯ*�UG�N�e*�?S�&h�d}o��d���O��ƈ�\�4��Q9o4��Ӣ�j�[FQ+�E�2�����E�8N���SQ��KI���h��	U��s_e	/�Z��'����a��/^~��f+���_���:����}�b	�a��K��>躥�a��Y���g��*[�(�ln�ñ5�DYۘonj�۫YW�$m��Hi����-8�Pl���H��D�1�.��c�TE[ܪ�W#v��|�/��guԩ���:^ͺ�mo�Y?_�����[L(,[`gӵV(��kM��l�yi1���-J�+�,>�Ҁ��sT�s��i�pUאJ�O��A��T彯z��*j:��Cz�f�o���\�����
T6��vX[P����C,'�<�
������̪��<�W��*q�y���E�B�.#�V����a���|�=����(�����f_p�M�[h�9�8��<�\�տ��&��9��o�cwFW/�u��U�ܷ�H�v@��9��Vu*T4�%��]��f�����"��O*K����W]5�O�U���=T�7�%.�Ң�e�/ب��<s+�ӌ2�����_�+Y�p�mQ�*F��֖��ܱР"x�L|�H%���ڲ6�֖E1Z>�},
Ż�)W��b��k}uo��jd�#�C�����DKR��r����x=a�"h�pt|��Ӧ�'�筿���rq�[������S�k^��
���ɨ�hj�PUcY��M9�<DbaQ���toU����Vs�,�He�%�ĕ�4؜?�8
��=�9|�G�&qB~o��s�X��K�ꡤ�sY������%�H��1�dP1�y�	�?h��vZE�Jo�����G��e+�_"��H�D���_(��9���4ģ��u�91�/n�� Hn��ߘ�R��ym07��WL�3R��S��J�Œ� �fԧ�TN�/��^IN�h�Jd>��z/��=��F/U�yy�u%��n�"���G��.��(���"b��(�����f��D|��	b3��X'՛��V�o��{�j��pʞ�<�h4�G��_���=$
�
֕��h�)})�;�� �/ �����O>8A�)�5�<~m0oG��*�Ƭ9����fXƢ�X��V��"P9?�|�A���6�+qVh
�~xC�>���Yx
+2��(}"g<��n*@��K`a��Pt��ʩ�Bߪ��z�<Z��vH�$A~5�
�*���AP�	�>�<N2�}�.aF��i:�G�=I+(U��5�Dh`��;���^4]v_����;���G$D���[Ow��snJ�}!J��Z�E�h0��iO>#*�h�,k�]�N�_�	*c5;�uP�>�4�w�<��Ԟms��΍�U�uٌ.Ju���Ȣ�?�eC���՚�V�d�pRcж%��"��h�dz����\+���P�0�WC���&n�8��{g(ʽ��o�҈�O��oԓ���
��&N�5���G�B8.����W%���Ɛ=0��m��.(�bh��Iq� ����'$Y���-��v+����S�>w.?�B�tz�?�vÆ�T�bP49\�ъ7Kl*�	��u
i��N�,�V
-A�ن�s��y��ų�ڞU�{�?��NW-|K�Z��h(s��l�����H�{vi��~��uEs�'q�b4��Zk��� n}.#4r��an�i8��5ïe��(�:�|�(V
G�KVl�~4���W~+p4���)��6�3���e	���Ls��V�\+Z"����c˥\FfڢS��9V��Ѵ}Ea͹��V��,n���a0*����$��`�2���M��B�ᇽN��喇�H؄�X��.��)��w��CPlj#һ���w�.g:@ꍧ�3�m2x	/���,0�†���`�v��z��*�&f�k��E+���BYy�Z�8���Q�c��X�f�>�a�N�>�}��1��hy3�C.��<�m&s6�|A+�pj5[j�S��EeY�9���o�O^E����&����𺲧�Z���t���Z�A�{83j��K+��XC��i)�#��4k�iI��-b�i�Q��4I1��͙7��(�`%�O�}oH��J*|���,��KA��Ɩ,�*�0�����p$�V�I�zox���q�50��h���E��(,�HA��
���d$��:������
n|� �x�2�S���p6�W<��
���ȵK���P�Y�U�}]�c��R$���1h�Ӵ�0���&�H�R��B�����LO���G��w��h��\i�o�F�8���91QgM���a�bA���E]H9�b��Wk�t�p�9�u^��,6M�O�Q���Vc��j�%s���7	���Ώ�����.0�]NV)K��Fé���_{�z��{�ΖߞJ�{Q���{uv��%�� ��m@m����E�ñ|58(�.{gC<�S��a>w�R1��i���itZ��>�-�uZZŷ��{1�DY�5>w�= ��Z�~�Bp��zs�%�b�f��4n �D�\�_3Ǡ,�/C��,4Y8.
����;��>o@[�7f
W8%�]�� ;*�@+���tŊ�j{{���8onj�a����B�-��(V�/��>TN(�@�s�d�ʷ8��u�#�b��^9ՙޭ��9Kx��ųp��"	��(H���:��w�Co��w86Ը�L���u%�V�Ty�<�f��L81٦-�)��@e�
>�q�ă��N0�����Y�p�=��H��*���.,0g'%�~�IfoX��on,4�p�z�C�T��K��/g�o;g'_~�<�;��#�R�]�<��=Y����wr�9��9�U��g�n��-f��/�n�T���	k�/����廋Z���x1�EM�̡�"�v�k�;�E�ڞ��살�`���\6`6����F�,�3E�܅�
��~�����t
|uuϙ�p{�}?F�$�!�=Z��tj2���W'���7��^�v�
Mi���^�/j
��Ӹl�t��մ��2�	���Q�ָ��*[㥀�ؽ�pGt��j]����.I�ܴ��uS�V]�7���n��W`�կ��4�X�:��d����KW֪�.\u�ڑ<f���TW�8<�W�7��u�X;��U�J����Z��o������J����c��j��o�?l�mKK]g�s���f�M���$D*j[�a͆!���B+N�i��uzE�iÎ���W+����Ч�d�7ӭ��@6ڢ��ŀ��ʠ��$@�
���P7�Wc��
2���:?�dO۠���w;G���K�7��3�]��뜝�A6~��nԤ���&ާ�Rǝ�)ꅦV$	��X�Dqt?������0'�ko˕�����j+ͤ��3����t#g����o�m���ڬ����@��Xe/萒h��!�}y�]O�+�����@)��€J�|���h�-Ph��̵��Vݬi�t��$��Wٌ+t���}�������D�5�>��T���8|�vv��.�4
��I��ߋ-A�\��p;�B~��Z����rŮ"g�Lq�p�>�c�%H�d0Y��#�}�f~(�4l���d�}���وl���
��g�S?��#ؑ�ڧF~���}t@�X��r��4�'�:��;���Cr=������l���k~�A���x
ڙn��&#-H��tk��U��{�����߯vi��^��O<![s�+B���[�9\�'�O�`&:Tp�@�r^�����S�����B���r9f+
J5��Wk_l_����-�U����('����:���|�2g}ݑ��.~6�(��u�F���TQ�J��p�V�S˾|a�rP�P�j4ii��@~��&��Sm����A�]%ܴ3����A���V!1�!���?�X���h��po�>��+�iR���d�'.�J���f/]��Aa���j7V����{J��#����(��R��V�E�^!"ĉ�F�Z��L��'��~m�8NF��pY0T*�>�-7j�1�,o��S��r-
�U�h�D���;�:V��ѯ�òH��U����
�
Fh/��n��A��-iT�me'e��ȱ�~��_E�nnҕv��<,?�#�UZ'y���V�1�y�5��}D�
Sr��6�����tO�b�5���Xg�h��#rn��Vz c�"HN�kwvl��4�|�i�À۾vv>ט�l���$��K�["���S{i�-+�G���4��uӥc�/� ү t�g DWU���q�Y����=�|:
�y��8WR�F_d	�l�~k*�O�n<�Ť��d��9�d��ϛ̭;;ҥ��|��-a�d~12�zh�M>��
S/��������6M��zH����(�-f�}��	���Zg|43 *hT��{�U�
݄CuC�钧��۬�-�ERw�U���
�\����s�nj�c�*/��O�4�
1���6����E����l3a��f�(�v��>び&�p�j��X/���,����M�4㲤�.1Z$z�	�dj�x2N�K��֟2h�"���k�F(ӏ{zR���KW(�<O��m����
ax�
!�o�y�f��<�����
�ސ�z�u��oO��j]��i�x��S�ҭD�(���Q����)�Y�%�,�r��C��x-0�ei%�p��G��D�48Y���f�U�
�D�@����pv�U��eo�U�Y+�
c�V�V>ទ.sq���F�u/�N��]	g�����*\_W�ܮ����*���MF��-'}ap�\*�j��H<O��Ȁz��{��@�q!��x��k���l�Z[U
���R�ls9}@
�&�[o��7��K�#U�<i	�75:?kw5L��n�Q��F
��@�G�E�H��>S-_�BL(Ei�ߩ��2�\k7��#��y�ҥOeY�t����XE�ڸ��zT�W=b���l�Y���<����f;oQ\b�WY9`C8P��E-��Nu\lٓ���
C:rLc\���r�,�w�Faߒ�p��{�v$�[-�Ń-�֖
Q�"H��wSy�Y�V�9�~I��V�������n�!|�m�ґ��P&c�=B�X��i�X�W�4�����};kS��3�_4�b�����1nlsK�Ц�,���&�ub�����9;?�}G1%��#��`�{�]`�(�p�����wi�G�Prj)�(��{y���2sKY@}�ݸ?��9�	9���tf�,��=D[ĔB��L�QY6����x��7Ŗ��$G�Òu(�9=?��)����R����F���.�
�N\M��G�Ӛ�ք�)W�����\���ZMLaQ}�����ɕ��E2��m�@#��I@o`M#�k.#w�l{θ/�e�j�xc�������d#�fm���9���	X�i�'�h�y}�U��� �%��hѺ�n �����Z�R��Gy�g^���>�!�OD�*��;�0�#HY{�x��Lf�0)���G���U=�
8���h�
�M��/��J|p@�W��[p�O�-��*�n5+b���Z�,zIH��{�O�.�[ATΆRp$f�ۯ��
l�UbD��E"l�f�?��J��
��i�ɭ��p;Kn�P�[��T��
@�a�`60�aE����7~5�^z*/���!h�Lp��(������g\׃ˑѝ��\bwn,6�\@�v��E���ښ���5�f�@��ˌ{nVr�_�W�3���W��D(8Q�v�e�U���[qU��XR��ޒfV|?U��"����8=mMӜ+�;����!ƀgyZ��;kT�%듅oR�k�{>8�快�=X�]G�X!/Rv4�`љq��7���VC�/j�P��:$�6�cZ��8e�#��uי��)��Վ��6���&�c�7E؛��ִmPN7��MFq����B���VI��Z�ժ�j�{���Q�+�����Up�ڭG��u�B�������h�]�˜�{�
�8]��Y�\^DN��V��=FK+�&/��=5+�j���.ҙkI˗��/;'tK�%�IQ%�V�Psq����:�7H���XJ�c�_�Ρ0w��c��ct[�,�.�To�N�{E�>�
�.NߊLJ"ϊ��N����N��o�T��4�2U�`d>)������q�����^�;z^|kNj2����.�r�x�ۅpl��.
|.�r���rA�
}.��E�Džn_����/�?����n��-����&��ezZ<����8:�-Z���<ݿfZPC�1[鵆?��8tv�V�4r�A��c�"��=W)�0�U�>�s��
�FHf�0�a �{X��_����gv�N�
.ه���+���w�X��a��`Y��h�q��8$!�]G��EͲ�5v�y���Ȱp�&�I�} � [��e�m�5���u�v[�_!��}�A�Q�ő����p�S�lW�&���A�D�F�|fO�A�6���Kލ6O��%��]��ٶA����dE�N�32rU'<���K���a@d%�����G�fDQ-�}b��®�5��цͥe;F�$BA���{�[��}�ҽ� {A�:7�KP#���o�df�T�`�+8�=.��?����-��o1rz��aA;��-f���U)�B����/2:Pa$���P�v>Hơ�8���X�跤�v1�ϥM��Iד,��_Z�����R���־q�b�'��݃�}v3���iŒ���\�z��|xt��R#4�)2�(�^�X_�c*`В����j�'+A*�t](*�#K/o�K���@7���/++V�R����[*V�e�d*�&/S�W���?l-�Z
Fm��٩�Uq@*�j���R��
�<ҙ��n�c�]�Wt�/_}i�+�Ue��P�aeŅ����j��i$%k��j�,L�e�2aV8�u�?��ӯ��V���-���e���z��J�t�67]u򸽕�PB�W+���-�G��q�wu�e˩f�6g���6e�E�
�%���θɎE�R�n��X�(�U0�P�t0�nT3`\p�y�|V�U}�ڋ��o�zNf�h�c�ȸ��'������H�4�S�Rs�:Kq̷�	h�tcی��!��dAަ�Jȩ�+�h�S �=�)�@�u����=ݷg_�Fk����ޥ��6���b�.3>�f�p��#���>r��	���,������o��b�Vq�`��j�*�����8�1�:�]˭���W�wa4�.�y=J2fN�D���%�W=6H݆I�hoj��E���`(�zd���t��n������e���C^����b����d�W��N?��Y�f�:�l�56h�мl0G{�Mx���O�i�<<�vU��#H:��PW�F�cibl��uU_/DZ�Zo���}��^�SKln�_����M��C�1�E����4��v�:���n��w§F�_L��P���SO�T��{�=�1�9�`��� u�;��Cﲧ��]t�ڇ/�fqH�8���L
;t&�k���%X���X����{��-1t�u�R
�F����R�C�e��C)_�ܼ�>�՞=5��v�q�UEO�mVn��q���~!۴h��n)iyt��fw�?��s�W��_wK�C�f��n�`~�3v��I9��u8~��Ъ�S/�����`�AZ1T�����n�X�7�X1�iSޝ��i��'AOo�@x�o��+ӛb5����2��xi��1�u���S�*	�4��9��҂)Ο2����(���R�&a0�9[�^:wZ��ŵ�h4���Ӻ�̇&j=����I`�6�7��j��q{	�P~�.��0g.o��v��O�A��8H��w�Xk@���y�l�'�)�Q�5_r�Bkt��P1��}��b�;���S�oJzi6���N�)빢D��zb��,�$��/�������KgH?�J�=;j����ϕ��Pr�����٧`���׎��
�;G�4�g�aM��5�*Gw	Er`�v�Nj�.�nB�q��f(���n�����;t��h!oH�i���
��p���6ԛ���� ^7)�
��rM�^��\���v�İ��\�\"4V�^t�O�q�y�7��s��Է�=4���3P��N�&���22�篤�TU���&�Q��G}/_*��uOh{ãn���)sp�~@���O
�V�o���.���Q8�lؘ�;1W���ew0�i�>Qh�Z�k����[�fgM�e\��t~�v�O���{�H��K�ѲF;?������O��T����H������M�9�\a���i�69�0('OQ%�_��:���}��u���
Ϊ�wj�U���Kh%[.��菄��w�'D-'U�@S7��|�;�m�X��hֈ�38=�g��v���Z�f@u��'�?��
=|���"�)b�e<|=�@\(t`����ka�[�g|ִE��d���G���*
��Z!t�3���7��u�Z��B���o~naJ(
�/I�ǎf�
gʮ�@H��;�&T��-�mV^&��=���W\l`Fk��(��cϔ�}nP����u��m�Q�z���r��a��BNjn$9�L%<��V���8�_�]���Cà����9��ް���*
�s(7	�Mɠ�,�g�z�=ĥxI������S:��r�����yK��M9��f�\����9T����^�w��x
"�;꾹<�zg��ˇ*u<,�H���qO1v��@��*�#t�s��?�Ö��fI��n��t����V�?�:��n���?FW�Z���b���H4I�*��r!X���8�o���Ni�Z�ı��P�|��a3���MkP�B+5����榚_bڥ!x�+���[�_�Z������e]\+ܸ+���;z1L�(�EpV_�`=�%W�����e�F��/?���٨���Y�d7a�F�¸Ϧ���F8̲i��\�Gd�n����^�V���ς~�<
�V����Qy��/���8f���8V*�U	�� u	�A{��y���H��o�����|�Ԭ��j�>h&M��-��2y&&l��3x`�J�[[�/lH5YH&����-��2�6�p�B�pr��AOX@�����1��n��?
�E볡�^w��\땉�q��@"��O��}�:`]G������}����f��d4��~�����r���?M#��m���x��K.�Yv����=#��A��32^���f�;ACSNД�J�G�1���d鉠&�i
� [:��Z(%�´�@C��ι]?	�QaL��x��l���`r�8J�8�f��r>�yX�Y�}*��*I77�,�
r�'�=�$�f�R�&��!�!����w����g��A�a��M��o���=FyOo�,�[�}_�J��!�`��
����x+
�E���>��8}	X
&dȗ9�zZ�u%��	��%`^>'[���Hz��!�f�l�h���>բ��r�u�e�U�q�Ғ#����pHu1ɚDV�vÒV�~��%S��E:6@��Ϸ/��\�M�/���*�De(z/���]}���Hzpq\��^����`[v��-6���?��`w�?�Z��j��^2^�L�0��c�(�P���y�~��6H��u%�>"=/������$LR���(�?�A�E�I��
�h���kβ\�Ƴ�z-fW %�x��K��#���$SD��)D;��@P*p���cV�!�)��O���(�j	j-���B�O}GE��U�ͅܥB���|s��`�{���đ,���O��$Y/?�1`����E���W;�F����j$���~���3=�������9k�U]]]]]]����	�8z��j�p������d����@(ᜎ�ͭ�(��I��jЮuӞ���2�M�g!2��t�a�#UE�?x����q�Ǩ����J����`ޔ��r���D���������X"�	E�x�ց�����
���LbE��9pr^۸p��ʛve4�};�4g�rbR�K>�YJɨ��B/a��)��A�X�4+D�!���G�Pak	cԪ2~��p���'���ă(�W>����
��C=����opa�<�$����Q�mg���?ye���
��T���m~+1�i��[��t��Q~���`1a��H�
�@=C���xL��1��x5*����V��ṕ�1Jt��
�T�]��׀<��]?~H�O�x��H���gV��\��mX�9	�J�������(V��#8�B�ŔޑqI��lx���=�j��Z�L��|Oӭ�����
�q�d�{|�����(%�ii��ݛSd}�h�,���
��W-���oi�����wO�^�;\.��Z���0x�>�#�����;%�-6�٦g4C�y�`�����܂\w4��Q�7�oԫ��|��F���:oԭuz� J��)6�
ި��ݭ��~�)m�6����V��6�-���Y�nl�ֳMi[@���z�Y�e��o��h��h��m��6;����6�!˔j���o�өe�SMP�Σ�no��q�j�$�:���Z�����%��l��g���	k���N�qZ�*u6�;u�Vv�zr^­ZP�ܪ�Y�^�MlZ���Սjg}�G�6�I���[����Y�E�UlRb��G�����UG�ؔ"z[�~����4%IJ��Fmcs=ۜ�H;~-���8'���vo����d����ZP��ls#u�׷�۽�Ls���۬�v��MI��M���w�,S���������$va��N�)	&���կ�{��MI�^����Hҳ����0$��F]K�f�؜�v��k}NE5G�����{��"~�$S�U|V����;U(��;Z�y���	c#Ӥ�@�^���MJ7[��Fg��qNb�v���j�9	��<�lݭL����k��mRb��F�_��lf��`�Ս��Z�F�9	&�ѫ�?�4%I�V���Q������~}���0ˤ�P�
����%'e��H���G�:R_b��Ĭ!m��~�r���Qڹہ���c�MG�ؤ��>Z�	��Q�4����|�]�4)AH;�j��}T�8)%#���v/ۤ��������ղMJ�}}g;��g��$�~P�[A5ۤ�,�^�m��62�I�o#���j~�II������ԳMJ���[�����l��w��ݫw:�&%�|����?�s�	1�}���u��?��CWX����;����,i=�d��v�����ø��Ŕ{��$R��$��N��ʆI#�.Yս��a���q,�Xg��a��<MF�b\YG �o�w�>�x�5���A�|�{�Q�Uџ�oU�/�������@@�����Z�܄��pK����G3
�\_�pA�e�����������tpy5c^�"i��V���=�v6	�kݫq8/A�`�s�!�V����Y��˝�A4�:s��g��b�zΧ݀�����Z���U���g�Q�S�k�%M4?�f�d~�k�,IQ��5jɺ���"l��]δV�
)�8d��)q��BY�w�OX$�"�h	�
��
��s�q/������i�2$ 0�ޜ��pXrҒH.ԝa=h��b�v�#`��\�
,7�hC��{%�E/�
Μ���q0���0Ꮤ�s1�t��D4��5·�Z�!�iݰN@Y��Y"��k���™�#Z�`@��������5� 7M�.�4�S9�)�ۘS^��r���3vv��i���oOO~n�h�`�߳��;<y�����u��>9z�8=c�/��q��]���,�?8��y*88~��x{�8;c'�����Q:��O�[��Y�5��޽����;>i�Ⱥ��NJ4h�;y��4N_�σ�ͣf�=����:Ʊ^����ۃ�V����){�����Y��^4���o/�0:��?����냣#{���_���9E�����Ϗ8M�E�q����q�Q)w��q؄?
������Z`JG���ü%A��w��72�����V����`�NN^���?7g{��䌐��Qʽ8h��`
�����Κ���q�qz��m�yr\���0@��ܓc�*�H���=v�8 ܗ�/���I�:@��[f5���9��ƫ����aKO��_�g�",U�+4iXX|�M���џ��h!Y�%;x�s��a�Ϛ�Le����9|B��q/�3�Mُ��ۯ���j���qҞ���i�ɼv��
dL��a�}QV�*��-�Wy���h֣�O�o7Q�29��L
���\�ܴ?��yО���ۃM~
n��?cM+2?�?
��'�>��o��EUb���:{�~�8 �A�Թ����:�r�Ԕ���#��kȧ�ΩX�#]t�Iq/���%��IfP��&���t0�T~6�-X�K4Q�,�ѐ݋*�
�e�q���C�z�VUixó&I�(�q׬?q���n⯽%�
��*���*���o�L�2�k�#\�h�z� N�~��ɦl�l'��,�\[V7h�?!�ߡ����j�$R� ڀ7�T��Qd
fP�����l"���la��_�#���JB�ލ?���De:��u�����`�-�t�U��<�ޜ��6�\P�5L�\�4ށl�MbZ/��P��E�N�b�5K홃
q�uN��:���0)�x7�v�����N�&�$�Z��*�Ζ�n(9wQ⥝��Kw0���g>��<*�8�mGr��+\�˞TUl��߯2̚YB������<�ުp�{���EVӢ�S��_𳻔[�Ag>o�O���*�1/�e&��#B����t�ݨ.�
�\ObաwQ��S�G�MfN�Ndê�H�V�=k��O�j�������]Q��{�yc�p��ږt��I��\��'��?c������u���.��ހ�A�."4�kkb��ȑt$]���N4r7!�.����g&f���������z	=���2D�ʆ�B�l�(��u����J���.ޅ�^�D'���N�?�@������4�Lf�E.g���hR���g�WG�jY�wW;:�b��_�Ըg��M�z��]Ch�]�/R�ĝ���,�zΔG:q#��p\��j�L�l*�f)7a,K��@'�S\u	��`�ѐć8p8��ݸd��
�9q��`�B/9����e�H��7A�;C��fw�ƺi�ʢw��quK���_�L�č�@P�~g��l������:9���҆����^�`�i��5C]AҘ܁��B��o��o?ҕ���sT���o
2rn|}����냗�&$��.|�R�j�ej���$;0��Hp��zy'P��Ļ�ܞ
�u�In9d
�c�]p�[D:z2���<�	�}wrC��d	�
�I����]�6�q¦��乞�?o�v /1yr���~����x�,�Y�߂�%ޔ!o3���3��t�z�q�x��Ð��}/�2�"�$�ۄ7�7�l���M8�EHL7��N�M[a���HL�Ĥ���/�蠎�!��.��kɗ,6)<���j+�Ǣu���xxY4��`Be���KIiD� BhH�Zò-�IԪ���T�,�
לx)��<�P�L�6�:³���9�ϔm†~�˦��C*kLdBZ�����~��F�{J6
1�,�<������Y��4g�0����'��w?b�blo?ф���C1� [u�%��к�?�a�o3���2Z}W,ł�b!��Fv$E�ێ�no<�<>{�҂�e��wל^{ߔ;j��9��)��ޝ�S��%��^�TM��QH��?�cG�e��Ɩ P���ɘ�?mO�E���}p���z/���Ӊhz�����d�{�l�]�ϑ��m}��
�m
���4��Jma[n��j5~n��7[g���-�Q�������q��]5�s��������j�8�i5~98=�>6�j4NOON��fZ���f���J���up�5�]X�آg��7o9�<�[�Z\X�%���0"ڒ���Z@���<�:�����o�/�8x4<�5��QxI������?�ӥ\.�6��~u���ΙYv��s�n{ځ�3o��0��%+J�ȽܷXX�*�J����L睛r���1X���Y��?6�76��3��������+���ύӳ��q���E�13G��cV۩��g�!vdz�i{\����?c44���}NK`rP��(����8� %��`�>�Nb&ƒK��&͆�ͱ�߯�A��|�`/Ys4�c@��|���a5����Oʼn���K|~s�?'��ě&�Ǽ0Y�j4��+�6XT��VN����5.N0�!�����Q���,�8�,������Cg�c�����p:��`9���f�}�&{����@����~?��*��y�\��x���K�K�_�^cиZ��@r� ��00!����̌�P�R�
���qp
�lN�,�\8�x�Ұ�8q�ޤX�E��;�½'"Bt���VY�qdj��G#��(+��_E����b�v;�j�;���u���W�
����`�HRw��<Үy�Hг��p��"��P����J��F*�L	i���X��J�:`t����R$�\R�7%�Wv=��Ee�|Q;���/1����t�0��R�G>
�}aj�(�\��4�����{�J�yW�@���g�ݎ"�gk�����o��.�%;��P�G�H�A%J+�.���%Y��jT�E���E�H���V0��#�9�]�a��z�BN'�p��x�x�>�}ȦX2��P��oUe,ŠE�u��ԄR˪�4IsP>/�myҏU�*��)Z�l�5ou�U
1�
�=��h��er��+ja��L�K
�4�a4K��ݯ�e�]���őyO��0Zf����x�i��8iy,Y��d�ŗ���	�����F�0�F`�؋���*�LD��/�&3��T�|���k��o����+L�`�uǦ��J�a��Ą�=��p·֯lҏ{1�OP{�	~�C�D�t{2"�V��iS�e�d&<�\�
#ҋe.<-ģ�&pp���Lrrak�t�I�a��=g�
�n׿�����R����iŕ\R���H˜>s
Y-�n�	?T~x�r���	F^l��S]%�4��${��CH-��t�C� 4����H�F�<E���"r������<|8��	Y$eBNI�N���2p����&&;�d9٘���}���Q[���m�5���usT��w7
�<d��\r�=�rw$�
?7�Լ��9^�v���>��a�?��Gݮ����2��⟆
n��p11~�ǖg����b�'�>e�6�@�+��P�����=��v�J��L�f���`2�5���u�~�'�`=�v��:Y$�s��[$�8�K��k⩤��x[a5���S� #z���̌Ԥ0��ϔ�=8�QJP"��Z�����_���Vxߕ�����jG�������	+�\���m껢-]�*�
HE��:�]�1m�����ρ<�2�dz�Ƃ`�@2�֦�h
7nE���f�G���F�%SGm�j�5��]Ԅ�	��x�i�2��S9݅����6�O�����(@�k�&��q�P�r�X�}��V�z�i�7����UW������$M��o,�r���{��@�\u9�P����p"O�/�a^���o�B�����7�K�"�J�Kͦ��t��c��TY�;mL�����WD��F���m(ZpZb�k	�4����S���A�ܚ�J��H�
�$&h4{;�R��il[�@Ip�ʪN���"�zd7�}��Dfmr5"k�z�n�?GĄ�ư��{ա�� a$by!%�2���9�V5�W��h�צ\�ۨn(ֵ�y�*�����
*��I����ˮ����|�oꇯO��Ž6w�>!�[�5�ن�c����a�6�M���V@�X�䥐\��f�Ν���T-��]�-h��㘍�1�S�i�o[�b#�/G�c�b�����
��c��͌�0O��x�o���Z���ʹ�Ax��q@&7>9�+�`~|�?0&�)�
���ܳ�y��q��Q9v9�����A�`bǤ�f"�:��M29$4�h��� �R�5~� ��Ko�Ŭ�c����a�!C�?n��"��I�m�#z�<��IX&5C#��tc���u��l��E1�{�÷��n��Z���^�Oޥ��)	R/��$�K��g�L`v%2z.@�4*&t
q.�F�}oy����ߎD/�l�$/�`>�X��Ȣ�
V��K�\k�G�jZ�mz#�_��dJB��ۅڶ�p6��ƶ%[ėdF��-�:/��f�d�8�����I����.{�s���)+|O��S�;�9�U�bU Ǭ���А9�dwEu
z
&�m�w��Hc�"���Z�r�,�xۇw@�����'������
ʙ��n�P��z��~�^�1��Ë���v�p��0�t��%"��g�u4HRYq��@7p�a� ���R,����z�q쉾3�^6�m�
�'r��+GB\�,)�j���ǿ���
�d�øp��I����Mצ�{=��g*ֵ�	�he�u4mr�}�"ri��]�����"�K~�꥔�8������^�S�>m
��O��O�u��k_�p	!ZN�A`��즁w��7�~	vY8	�"A����Q�5O��0vnW���E�)����t.��t��Ntt�D8&]�Z!�������t�����\�)�j�]�U�|�J�K�G�g��X����g�(��Ex:�"M�<މ4��L��̸�Q�5p���S�@Ř8�Q����MQhC���-��E�!�e?D�y���#q����,�8f��2������=�@�Є@�0,�"���C!|��9�0%�@{�.��J�k<�:�t$��
H9��KB��v�����+�[p�@����0��|��p���GoE���qD9�S�/S�;�h(�Ϯ�<����#V�=��T]��w@� b) au�N[��6��|�z��5�o��V�+��\�m+�6����[���߾�+�pZ4D��*|c�u�E�.�6`�m�����R|��$�F���Q$�V��q�}��r�l5J�'߶�^�6^ �+�jʲ��ڧ�/�G�wE�K�T�\�鮈r�H��i��8lf�}N��	���&M�jv�����X��y	�o�ˑ����r08��'fo���ҝ'��p(C%%Nu�[��}ʪl��R��F؏+��Sn�gft]��k��l�%��.�����y�����gXg�4+FPd��Q�_��J���|vj��љ���=ɢ���l�����7���S��聁���{U�m��AA��#Z��+'��
������4���+�j�.	H���@�]�ٻ����q�i��13^MY&	U>���tt>u���׌A"��q-JC歟X����\�Bŧ��L�Ψ��^��$9mTmTaR�IJ��カ H1�����'Dr��v�*��^�
e�����9W)���Z�Z�d��3�G�cJQ���$��Ȥxvp|��lC��O�7֮��ĒT�qs�;g�4��ʱ1c�5������[_=����8�1z�˶)݋�B�8�D�P��rL�+��Ė�zl��p�/�xR�Dl��`�f���4i�q������(���ɘ�˟(^ ��x�-N7H�튊5~<2t�"�^�����V�V���Z�&Ղ�Vt�.���L��I�Mz�ݕ8������؆շCg��~���a8F��H\����ڣ�qb�LxuM��✱��sQ�M�\���3�����ۼ.!�
�͚��g�Obgi�����:M'7����&�t��i43�Z�Ӹ���qH��"^�9*��ض�����b�L���ã'D�"��6�F���Y���U��XT�vL���aK�
�fET{��
7�mׅ���hZt<-z�XxP]�1�NI�	k]�O���)W{K�9�G�
YѾ�"5'���5
�^w$�~3��4�B>��y�}�4�x���.IH�M�P��>��4�u�Q�҇\��A��f7�m݌����n7/�?��z�:�4����Un���d-#���pImߛ����CK�
�`�m�F�1*w��b��\�%f��&�K����W*g\9�l��s���a���U0
�޷U�YR�>-��K2
��)�v�(0�tG�߷�+����>�+@����~4�,���s�$rβFU�ٺ�-���uй�/��)�Kf
��ElQv#e-��9N�1����)��r��ѐ�ii�ς��h=7������A>y�?�~^�[o����"��p@eIq3��&��l������Sd(��(_Lꀝ�C�vؐ��N;>�O��>�y���R?`w��D�XJ�������EM]�V��ۗͣ��j�z����M�ɑ�ƶ��O��s6��p[�п�-ow'7����&�X�{8^�Ā��9��(]c[@�y�}��� �c�%$I���x0�k�<&}��Q�EB���i����y�32�I䚳�3�H���SeIJڳU^���n�8m�-���G��9��u�p׸ݨ�s�C�h��	%�R��3�PkAC�����f��Z|�,zp�S��䤵��i�*M8r/Q,��U��fϰ#���?����Hw:�R�c":h���R�(���ͰVf!���;������I�:|^P��Y�ӯ�ί���G�('嵺oy
�>�u����/(�5g�pHե?�����B�֘ϸ���X/�7�iн��H��
�[!^��ޏVk�Z>Ӳ�3����V㗃��&��a�0��|V�v0�˃�����FJ��l�?|լ��u�p�="���^>���ݮnZ��iE#�ww�G��A��A
����t
�o8n�x����GS!�6��?�2αz���+Ѐ��N��6Y�9�����m�z�%�k�֭zO��]�T_ⷱٸK{Js<��_��?��Ja>���ᇦ��Fd�Zѯ,��͘,�N�el׷�����"svQ�V��6�\6����U��_�қ�ݩj�?t��k?[-�O�s����3�c��r�q���S�pP� �	ɵP9�?��v����8}L�Ir�xt���y!�Rr�o�������5|��ݫ��5��ߙ�O�چTI���H:T���n���/�
O5��@�x�U��,
���oh��0ͦ�G�F���e�B	Q��C���$!Y�d%�6�4g�7�T\��+�Z��Š�p��}�BL�J'Ը����-
s9Ԉ�����iu���(M�Lm�1#%�;"����G7:�
)��XL�rhM�OZim�{�0�0U�g�]�[��(�
H�k(����
6GI
�ؐ͸�/L�;p���H�g�2
��0��l�#^hJB7[NQV���ZeTQDҠ���WF]#t���X��Z۪��������g�{�vw)ua�%3�2�h����iGeJ+��~���kD0�T"���bs����o=&j׫���jm�^�{AD!4D�F�%�v˂ϳ`L���%��ft󱀊]fW��(��/A��|/e>p4��c|w�f`T�i/���G�9�S�T��u�Vн���rD�9��T�G�8a���l�#�?��e�����zW��d�R���.'jWxu���2��!^汝^^	�+8���S�҃oP͑>��	�3����3�fڱ
����1�T�L���[?*�p۾���M��W._9�c��n�D}����"O�Q�
��?�)�8FƟ�}{:�a�9��
�+�y6���������=~�2{�p���),�?��uaJ��:�[džU��F�������\����9�V�W�Ѵ2�����
n�\�W�@����מ�O�]T��C!׶��P��f�+����6Z����3|6)�S<Z�v���m��W��
�eŐ���l�P���;=h����a�>�	�蚋��0	8�"�^arU�P��%Z�fUZ~�N�343CC�q����]&o�
6.᪂|�R+��?h?�U�;�*U�;+���ښ������%u�*
��	_����z
Yy��Q0���;F��I���ܽ�]Yv��4i|�O��Z��[���_��q�K:+�r9zG`�a/8�r"�;���P���{�F��{�v8��,g�{�r���IR{�ž�e��=(C�`*�d���=a�A��=�K��Ro�\7A(�9����d�*�A(�wB�8@�q/�)�2�q��d:�2oNaDk��S��6��M��n�!RH��y���D��WYX��X:���D���(�M\B-�l,�	�H��a����^,1Ѱd`�Z��3���tCFdy '��;�IfE�\�bq��=rF��$^,I wO�>j�"�6x�p��(�����~�~����R^}Z�PY����r��6w�=��ԐkN��=�����`@�lȮ�xO؍�=�Q�*+�[*̀�wQ���d��l�*�]�� ��pB��e����aQ�'۬�=��}�5��u�ɷ2����E�/����_��+�ɻ�9�B�O���Y��[���:�����ZI9�qb�tpy5c^���0�5��M��i��G���4���#`)�v�g�4(C���uA��S䷬�$>��p1\6�bSa�;�=Ĝa����;v���Q�ar�){����<�hЅKw���^������*4��T�B�2muy���"p��'�Zy���������ܧ4SҔ%g�{b,�v��Ҕ�#�!p��*�'}~ܓv�|~���޲w'�4x�ޠ���GO�q|�&����_�$����4��P�㡤���M�Ls�
�/[�Oj�w	o*��g\��X�@�^Y��j� W�(�(�´S0�G�-�k�Tz�p:�O�b[L�@Ѯ�zQG�S�:H~!�������J��\R)�����?�8����H
yjG�prqQЛv���/�3��R�����#�0q	���h�qP�؎Dm|��h|3��ŏ˜�gj�_�s	a�m��\ӑ��*�m�\k��]{�d�Q5&U�a%Z�ϧL�qeS�l*~>�@�Mō�cpS�/Ï�	��?�U&�d�PV�dCLv���X�2r�/__ـk�o���#�B(��bߍ0�SO�N	e�Q[�ί1�><t?��R���8dzB�!B��V�`�ۼݷ��yXn>�GW��
���IM�Q+���*�Ȕ����1�p01���a��*�#i
�`Q�o�� ���MQ��@�Z32Ef>�
���k&�r�=˴w�݀��3�z*��1LZ�
pP*-��b\�;��`,�p��������o�*����`֫T3�3��_)��aB�:�������$'�g����sq���!�8n����܇s9����!��|�G����{P-�J�$_�|:��J�OVȗ�z�sF#��u䚝 �;�2�1Ði�"b'��
�D���T��GI�����S�H�
���s��A�2	$lTT�� *ޙ}$uͣH=�Ox�~Bޯ�`�u���.J~��P
����'4��h��U�(��F��!�9@	%*.\�ga{��cU�y�ͲY�ox%*6ˌ�Ǖ/4�m��ހ����E���A��x*��qrm��q�0�m�e��W� W}\Z�q0ԡ�@/��^t�}�'A$��R�	�����¶�~FO��Vy='c�vh��a�s�pq�T�y� E�p���S 6^�4+ExN�S%��$�T�b#�hHU�5FX��B
-/�����{#)�Ee勠��|*�24�Pl�߇���]˺:|s�axa!>��Yz��4ΘM��˷�[0��t��A�������B��L�.G�W�p���4�>O�����3�R�����@�,���vsz�)��4hç�-� ]ag�~e��5�XCs�5���WPՈ���nX�%<
3����dq^��S�Ѷ�l�����t�$o��UG슨�D�-T-+
NW���D;����GK/T�ǰ�x��'o��c�/_�/qK����R��QT����p1�M�xy�wAJ�(tU&*s
s�0�A���ѽk\Z�XO1A�@�e�>�/@iA>�K���
��~�j��n��~6�k��p+��i�0��N.�T%�v.	e�ʏq?`�33�s��JHnz(���C�)߹=�
fDjP�f4Q&JV�K���@�a��}�d��ES��j�G���iУ`+ic#B�-je�ؑi�F7��c5�0��0��1�5d������J� 
X��@
؎T��U��C|�:�K	�`Ή��cfd�۝G%n��mtm�Jy���O搎��h�|'�z������6Ϥ��w@�7
Cu���C�]8�4�I�#�NT,,R�.��.���яT7c�O�#�Q8Q*���ܧT���)6
|�QH]�d9MB�Y���M����*EZcT�i��P'G�`d-���3��7V�*�c��w�q �
߭��eK��[�_d��1�> ~�C=��l
`�n��2i�a
��€vbn)U'�H�/rR��7l7�:3�j��p6��ݏphZ�5W��
j����S_���,I%�\)��7����Qa�zA��_#xdÛp�򘶃@��������q���ψ	��VԉS�pp�<8k��sXN^�ֈ����	��_UϮ�R�P�-�'�Qi���r
�d`T�8-�V�%p�L��\��S:�)�ĺ)�Cڇ_�n�YKB./��L;�*TGO��UE�+�
9�Y�������щ`
�����D-b��V��YW-�ذ��L\�J��j儂����\M)HX�8(�~QO��	��vi>�Y�!�R�f��P���_�cq�šW>��y+_�Kb�u�����m�{���W�ŧ~��<d�(��]���Z|�3�/�м��]����������z,����C��F���k���=xo8�S�~6?/�8���*=��y���|_�3�!�oʗ�ػ�0�1~J2��u��3a�HL�?��h�O��OYğ��e���*0���ws|V�ws%����h�������U0��Lc
 �(*�b~m
ȋ�����Ą
��j�V�t*�!Y�BV��|�'�.Z�˗�u�a����h���Ⱦ�̓�sX�b�e`,@�%�ƿ��,u' �Q�!RI����ʿ,�����c���9��f"qX�@�Br�鋘��l���}��,bJO�S�񂈘0B�9��oq�z��{�Ѥ��J���6 o��-�3��1�`�M.O�5ױ&�b�aM�˄f�� �4d%WD��ǃ�~zP��O��|��lM�j���O�I�څ���-&�Y�3GR�Ma��|ȗ�g!TS-�C�w9��P󆅻�	�t�,,Şb17�(.��9��
ײ/��m1N��0������uK�4b�e���������
~Wl�}����%G��i�rnė�g�^�]c�5���hM04T�K�k�$z4���c�@�$�D��X�G�%�N:���Ӡ'����yHL&9(G,�d�'m:�K�'�R�C�2��e�0	�%��[}.��j�95�[���E͋��
_��r& ��DK4ԣ��}��VNK5�*�AK�L�U6��Ū�B
ІG������걬�9Z���n3��ڡ��^�غkM�`��D�&�ܩ�_tc��+fN�ْW5�6u���R�����Ću�y��,���V�?�#�
�p�+�� ��
��K -��m\��I>`�pEܷ��Y�V��|�=&�bU{��!Q�T�D�Y����P�p.=:��x�ۮI��8���.R��)�p�CAe�=J�
G�'pt����Oo8U�3�	��l�y��x�M��Z�o�t��?s�h�3�
e�へpxH��!�{8�1}��(�xQ����H��G�jO<�_b��ǩ(�Y��a�: ��|H�0��R*c\E������+Q�6�
,qi��(^��<T�N�Y!b�0d~g��ò9���.0����t�R|���x�v�K���PO�Ui$�D(���rt5���w�EEP��L���
5}m|��-�{�M�-�y�\����Sb1z�r$R�,�r)#�3j��r{a�#�ևU��lKB�t8�m��(��J��N�;���b���9�ԥ��f?�a�j�l�1iV�B�A�j!��Tܸ����[Z���C�8�<c�A���r!�@�`b+Nfy�t�:ᣒh-̼LzN�P�V,��5�XK�52�$��l�Zl��t$���!�٦ߧ1�2��8��G���ˋ�]�#�ᓄ��>Sz0 5�����sB�N@'V�r��.%�oͮ�Wp��E�8�W�9�*O��1���A��L��oL2m+ĺ4��noo2&�IN �Z��I��p��|u^��mo��w8�`%��D�O��HB 
���kg���l��Xd�ޓu�F�6��I���O=�bl7dr���7�x�i���#�A����B"h=�D
ओ1_F�O.1����+�6�0�y��JS�]=��A�
~|d[vQ~>Hr$�]��|9���$�,���u��"���b�� ��N���@��h�Ǜ���1�0��01Q���Y�"�PLln(Z���O�c��sd*�E�/��ȟ|��e>z�MЬ�V�t[��c.��Bk+�ì�X�dK�2*�,���>�PX8�����"j���ezC��b���v����Ī�Iڽ��98n�l���"W
#>\l���=�G�s��ȸs�Eڎ/$2��r8q���yb���i��-�x�2+����g�������i�X9�4fEM��(��r�XX�f�gC�ݲS/Gp�I��#�?��i0�D�z
��3z�로ݥR
h�bqi?���3-L��VX�!��(@�qE�.��ܲ���1�d�?ր�Ј|�>c�]�ӏ�Ek0f�p��^�(T���=̧�6��51P��u����Uj�G��c�yAc&&�O��7緇D�W4���s1��
kOT�l���(M4���,�τ�R}l�c���А�lc��E�ϩ)9h��ަ}�HŘ��j�O��1Ҁ0��w�Bk�-��qZᄲD7�j�,�Lѯ��^�(��j�����!S
�U���'4^㖁�d�)���I�;)�D�ui+DŽ/�N�%z��?��Mm�
���Z�CG2���j� �6a��-2�}�Z�I����;.F-�1+a��ǔz�EĠ�5�a�y�<���,c�g�ؑ=��-o��3���Vv�ϡe� �a���)���q�Q�Pؑ��O�ŒLͩt�i>�f�$�b�f+mg��(z�yV]��$f���e$QP�]ь��������
�Nb-	wl�}S��0-�um!�vk<8}�s܃M�d��h�G6��2?���ʑc̥Q�x��q2
r,��
q͑��(+,]��.',�������W��%)��
6C.�na���
몈��聹��1�)�e��EiI��'2�]~�1H��_&N���vj�a�$o��0�����A##!��"�����sʆ��+e��k�m"z�J�/�Y��ͮG_�i�D��+M�&��9oTק=���[S5�Y�ED����e%Y^t��=%��0c �6�+�|�yi�}�a�j���J�r��
 ��((rR�����v�d�_k���<�yǥ�Bi����.��e��Pq��!L[�Ր�E�B\u6Tj1��q­@���Ɨ��m�S���|� ����އ��Tx�9
�.Z,@��m�`$OM����h��#ѯ��fI�ׁ����j�&J5S&��Z������=��5x��<��jrP�H��s##��|�9� ��9c�+Q��|�-�4�	�Q�/\!���O��ʊs�:5@��v��j����_ɀ�{����hp�K����3�[Ӥ�mȎ�?�f 5A�D���,��ABO�S�Z,S(�r4t|L���у�P,<)�,�q�
>��G=�Yk�����A
�r<��\֤��;��3�.��Qt���r׏��qآ1k'b���'v��N�q7pq8����6�H����:��:���ʼn���K#�Uٕv����'��iiJ�X��K�{[ �K��	 }��rP[\t�|U�~�.2�����jIV�:_a��?�Ǽ��p�kk�||�q)�⊤L�L١%b!�D��B�<9�����k8F�0҃�#"M>�>o���wT1j�M�Mkpm^I•�x�+nR����v�=��>o=8kE����OZ7���7
\�B���4�-���p�����Te���]��T�-V�[�F����;2!��A��06� ���{�8q�0u��։�$����4zr��!�J�hT�E����r1��Z}#b&oѤ^Yݛ���?��]���z�'@�@�2� ���R��7-�o^[6�����fQ{�K�}S�S8\�ǒ�I,ɆR�C�Lj�����Jj`���C�-X'�Y.9�9IOb;ơ�5l���:����%��o$�۸.����t���苳`����K���fV�[f�iL�dCi�/5x�,��"�2�+i�y��㳖��cxy. ��C
�l��F/j����S@����]��B�C�a�8���[�G��HL\�W�ۧ��0E�����<"c��`��S��{�%��1k���f�>�D$�q;�F�5���V�
η0@����D�؍[Qo��ig+��ai�x�H{�����mw�AS�������'fC�#+	
a<��&鼢I���y�{�0�G���ȍ�o#���I��٧�eB��1�X�zi��(#�me�o�]dKLc��\B8~1q��&»�k��8�L	����H�ؤ�!_���6ٙՅ����X*��5a��TJ[bC�8g���w�hj#��c��'�@���ʃϓ3�D<n� "K�c����b�%�@=���b������,A?���eRЁ��%���%�&,�b3�{��$of������솷�0�O:D.G(+�:Տs[a�Vh�=����"�A�`
R���L+����,J �B�9F@\�^�Њ^Ҋ�%1�7��J�+S��yF�a4����Ć�?��L��sB�:\$��0�W��B!EC'F���
�~���kt �K��.5���%�TvR"
���d��E���Ş���֤:�:�v�pб�bʐ9������n�z�7���T�-�IyQd5�@�_�h*�r��4�6AKg��o�#��CQ���*7�`�K�
�rE�`$-��x�^�%�����+��ԥ�<�:™_�~�z�m]�yWl��ӌ�
�;���us�4~��o)�Z�vc$O<d)�'�(�iq�EC8�9.�Ѵ�o!a��%f���K�*z��ͥ�^l��T�e$^v��F������8'�4fz�f<I��Wje�����Ly���Cu(�3)�㿁���m"��|��xt�Y�^���ͧA.��Z�@�x���~�d�*x�s�ZA�Ee�R�6�m\tܦHe�2ܾTfQ�jI�82�����0���7��'֐��V��ĄN@��8���L���gA'�ȸ�"H����A�\#Oy	�(�ǭe);�‚���٦Ȟ.��~,�Sl4,�5�%���e�՝$�W�%WW���1o/�b�t9����U�R-�C���5�C����bR��n���x��)j�w�;��]��v�9�p�ƚ3�lo70J�wY���b�c#Z�s�	�(S&�x�j�w�
��k� j�z�l+hX��+�;i�H����ƛar�G�xC-����kł����uEyQ���8iN|hV�g�h���ě藯�q�k¿�ېǒ�+�e0���{i��:�?�-ј(��#�#K:�Љ�Z'n�@�}�x��.Vw�Vt1�K�L�q��D�����S��K�"*3"d��V.�I�$i!���Wv�2�7e�a�f�	�V�3���rj�n�DL��
�ez��������+a���ϩ���T���8�ҩ%�[%�IDm�WbN�bi1ӷXZ�ds�Hۙ�~p�p�`�+��F=��S�Q�-�2��d�Q�,�O57��9�y�����H�w�����k�*�C1-&�l`}�6jl���W�cP/h��!�h�}
Sc�,�H_l:u��ޤ�uM+�:(�nlG�B�`�V'I�p#H�YN����[Ğ���_&��non��bK�(P���5�F���H��S1U����J;��C�K�o@�C+��7B�~�n.��_w_�9;���g��l��McN�p>�*z% �ĥ_��s2
>
�9�8�g�2�r(M����Ȏ�}" ��_"L�Qx��`�7b6�#����/q�A�����CEPX�a��ۈJф�دAw�p�o�j��=�em ���6��r.��E�c�b��e�D21�蝉0)�m��x�����S�.�j��*+�B2=)�О���Mp�S�>��P��ƅ�k$#h#DL츇y�;!+�p��—�zHn�L{�g7]a�A�c"ۄ_`�Ƣ`�O�Z�\���@G���8�e44��w�?�Q'(����m�'���+�&����Wg���K�o���8
ڽ`2�C�����0�0�,����õU��a����~��;�G���?�)p�U��~e�P�?{��Ƭ�
_��l�� z=��R��쫾̓MAl�aP�|5�!b����O4U_�Ϣ ��H6���@�-��d��Wq����f*h@�?�$�Y��{�ӄJ�bXէ�w��a���Jo�|BQ�Xj���,�����i�U�:�D��i�P�����aE~X�ʫV�\ҏA������y�����V>�^TP��^}5`=�^]�[�ၯ��`t�Ɏ��V��y��g���|ۋ��H�xޤ��i��
=�Q��A$�q
��.�����Ҏ��1I�;�p�$��X�E�`PGp���$n��[��?F�o<A���pW�b��k��4�8�S����dQ�-�ޛh-H�E-�w���{0���T@�S4�.�QA�>я�u2�?n%�xs\Iy)u�x��ょ�!���bO)JaU���"�*W�94��,���%�&���R�%�������Bѹ���ʂ'a�BĞ�s1To����J\��{�h��g���$U��Iʰ�M�+�Q�L.	�
*��y<c-oU�n��i��kc*0f�bf�"3U�]y�0�8�L�B��*�P$򩰛w1W0��(������L#����1���@
L	�D����A>r���6�!Q�
,����0�B��yF���էp�V�~��xa��ي�=��f*��<�������h�K�0	m�=k��M9��"(r���J�������^Օ	�ż#l1���l�)��d�������`��/�P���,u�bdG�,�'�K*��ӹ�2�%T!)��]�� �Z�A�����nS@!A{�
��'��R�*��Ԓa!�y,����w�Rn�D��!I�P�0F��eᦲ8�p��� ��=fg"Z	����G?	�7�H���V�.y��I^�.E�v��ӂX+B�ӝ���c�Yl��Rkzc]酣�l���M�KD� �����׿������������Dchecksums.yaml.gz0000444000000000000000000000045014554466355014624 0ustar00wheelwheel00000000000000��l�ee�;�@D�9�\`P���fd��	����l�3����z=���,���g���_~��x�v�Ў��8�W��mXt,�k4
�^:�Vv�q�Cċ/��_����CP�zV0lɑ�,�b	q�	�8<��kps�_O���� �`ە4�i�c�U��׍[xv��A�$Q`ͳ��C�(�9�t �*�pwL�IZIe�٢n�z5���?��\7l�3Z6 s[!�5S{��q��W2�Y̕rms>���
\��Ԍ
�:KʒI1�N�b��s�m����PK/%�Z���8O8O#ruby/io-console-0.4.6/io/console.sonuȯ��PK/%�Z�"uPX�X��Oruby/openssl-2.1.2/openssl.sonuȯ��PK/%�Z����n�n"00ruby/json-2.1.0/json/ext/parser.sonuȯ��PK/%�Z��АА%�ruby/json-2.1.0/json/ext/generator.sonuȯ��PK/%�ZXIv� C C#70ruby/bigdecimal-1.3.4/bigdecimal.sonuȯ��PK/%�Z���}`�`��sruby/psych-3.0.2/psych.sonuȯ��PK7v�Z��W�����S�ruby/psych-4.0.4/psych.sonuȯ��PK7v�Z#Dw	ruby/psych-4.0.4/gem.build_completenu�[���PK8v�Z(�w	ruby/bigdecimal-3.1.1/gem.build_completenu�[���PK8v�Z�9�@�@�#�w	ruby/bigdecimal-3.1.1/bigdecimal.sonuȯ��PK8v�Z���

 �.ruby/ruby-lsapi-5.6/gem_make.outnu�[���PK9v�Z&�1ruby/ruby-lsapi-5.6/gem.build_completenu�[���PK9v�Z��H.H.22ruby/ruby-lsapi-5.6/lsapi.sonuȯ��PK9v�Z[��1���`ruby/ruby-lsapi-5.6/mkmf.lognu�[���PK:v�Z"�iruby/json-2.6.1/gem.build_completenu�[���PK;v�Z�<�~�~".jruby/json-2.6.1/json/ext/parser.sonuȯ��PK;v�Z6����% �ruby/json-2.6.1/json/ext/generator.sonuȯ��PK<v�Z)}z
ruby/io-console-0.5.11/gem.build_completenu�[���PK<v�Z�\0p0p$�z
ruby/io-console-0.5.11/io/console.sonuȯ��PK�Z"Z�
ruby/json-2.7.2/gem.build_completenu�[���PK�Zb�N�n�n"��
ruby/json-2.7.2/json/ext/parser.sonuȯ��PK�Z��O�0�0�%�Zruby/json-2.7.2/json/ext/generator.sonuȯ��PK�Z(+�ruby/io-console-0.7.1/gem.build_completenu�[���PK�ZP�Հp�p#��ruby/io-console-0.7.1/io/console.sonuȯ��PK�Z(V]ruby/bigdecimal-3.1.5/gem.build_completenu�[���PK�Z��x�H�H�#�]ruby/bigdecimal-3.1.5/bigdecimal.sonuȯ��PK�Z��^����Iruby/psych-5.1.2/psych.sonuȯ��PK�Z#:�ruby/psych-5.1.2/gem.build_completenu�[���PKh.�Z`u{�@q@q"��ruby/json-2.3.0/json/ext/parser.sonuȯ��PKh.�Zó��@�@�%ruby/json-2.3.0/json/ext/generator.sonuȯ��PKi.�Z/��ss#��ruby/io-console-0.5.6/io/console.sonuȯ��PKi.�Z_HJ�����
ruby/psych-3.1.0/psych.sonuȯ��PKk.�Z��Q�/�/�ruby/openssl-2.1.4/openssl.sonuȯ��PKl.�Z}�X{HVHV#�ruby/bigdecimal-2.0.0/bigdecimal.sonuȯ��PK�#[(�ruby/bigdecimal-3.0.0/gem.build_completenu�[���PK�#[/*��S�S#�ruby/bigdecimal-3.0.0/bigdecimal.sonuȯ��PK�#[��Q�����#mruby/psych-3.3.2/psych.sonuȯ��PK�#[#�ruby/psych-3.3.2/gem.build_completenu�[���PK�#["o�ruby/json-2.5.1/gem.build_completenu�[���PK�#[�_�}�~�~"��ruby/json-2.5.1/json/ext/parser.sonuȯ��PK�#[��(�(�%�nruby/json-2.5.1/json/ext/generator.sonuȯ��PK�#[(ruby/io-console-0.5.7/gem.build_completenu�[���PK�#[�a��0p0p#hruby/io-console-0.5.7/io/console.sonuȯ��PK"#[�k��#�specifications/rdoc-6.4.1.1.gemspecnu�[���PK"#[\��B$.$.%�specifications/bundler-2.3.27.gemspecnu�[���PK"#[㕸��%Z�specifications/ruby-lsapi-5.6.gemspecnu�[���PK"#[����||!j�specifications/rack-3.0.8.gemspecnu�[���PK"#[t���QQ,7�specifications/default/io-wait-0.2.1.gemspecnu�[���PK"#[�V��-��specifications/default/readline-0.0.3.gemspecnu�[���PK"#[M`���)��specifications/default/find-0.1.1.gemspecnu�[���PK"#[�����*�specifications/default/fcntl-1.0.1.gemspecnu�[���PK"#[G�@���.�specifications/default/benchmark-0.2.0.gemspecnu�[���PK"#[�F�[��,%�specifications/default/strscan-3.0.1.gemspecnu�[���PK"#[U�kp��+)�specifications/default/pstore-0.1.1.gemspecnu�[���PK"#[2��(	�specifications/default/drb-2.1.0.gemspecnu�[���PK"#[��ק�'f�specifications/default/pp-0.3.0.gemspecnu�[���PK"#[ݐ�=��)d�specifications/default/yaml-0.2.0.gemspecnu�[���PK"#[��d�SS0�specifications/default/io-nonblock-0.1.0.gemspecnu�[���PK"#[^k� ��+9specifications/default/fiddle-1.1.0.gemspecnu�[���PK"#[��tt+�specifications/default/ipaddr-1.2.4.gemspecnu�[���PK"#[��Cd+]specifications/default/base64-0.1.1.gemspecnu�[���PK"#[�%b���,�specifications/default/ostruct-0.5.2.gemspecnu�[���PK"#[� �*��(�specifications/default/cgi-0.3.7.gemspecnu�[���PK"#[���.specifications/default/fileutils-1.6.0.gemspecnu�[���PK"#[ף��]]+�!specifications/default/syslog-0.1.0.gemspecnu�[���PK"#[�.�<XX,�&specifications/default/openssl-3.0.1.gemspecnu�[���PK"#[4�?bWW1c-specifications/default/net-protocol-0.1.2.gemspecnu�[���PK"#[�J���-3specifications/default/tempfile-0.1.2.gemspecnu�[���PK"#[k>\���-M7specifications/default/pathname-0.2.0.gemspecnu�[���PK"#[�x_���1+<specifications/default/securerandom-0.2.0.gemspecnu�[���PK"#[|��//1m@specifications/default/readline-ext-0.1.4.gemspecnu�[���PK"#[+�����(�Fspecifications/default/nkf-0.1.1.gemspecnu�[���PK"#[킥���*�Jspecifications/default/open3-0.1.1.gemspecnu�[���PK"#[�Mv�+Ospecifications/default/digest-3.1.0.gemspecnu�[���PK"#[B���55(�Vspecifications/default/set-1.0.2.gemspecnu�[���PK"#[�	**([specifications/default/csv-3.2.5.gemspecnu�[���PK"#[�c���,�cspecifications/default/english-0.7.1.gemspecnu�[���PK"#[K-���.�gspecifications/default/singleton-0.1.1.gemspecnu�[���PK"#[�:d88)�kspecifications/default/racc-1.6.0.gemspecnu�[���PK"#[��#~��-~sspecifications/default/observer-0.1.1.gemspecnu�[���PK"#[�˕/�wspecifications/default/shellwords-0.1.0.gemspecnu�[���PK"#[m"k�CC1�{specifications/default/did_you_mean-1.6.1.gemspecnu�[���PK"#[�^n�((/��specifications/default/net-http-0.3.0.1.gemspecnu�[���PK"#[��z���*�specifications/default/tsort-0.1.0.gemspecnu�[���PK"#[�p���,-�specifications/default/mutex_m-0.1.1.gemspecnu�[���PK"#[`�R��-k�specifications/default/optparse-0.2.0.gemspecnu�[���PK"#[\`S��)��specifications/default/date-3.2.2.gemspecnu�[���PK"#[�Nf;tt)��specifications/default/uri-0.12.4.gemspecnu�[���PK"#[�B�
��,a�specifications/default/timeout-0.2.0.gemspecnu�[���PK"#[����+h�specifications/default/abbrev-0.1.0.gemspecnu�[���PK"#[�����+��specifications/default/reline-0.3.1.gemspecnu�[���PK"#[,ı���0��specifications/default/forwardable-1.3.2.gemspecnu�[���PK"#[0��{kk/��specifications/default/stringio-3.0.1.2.gemspecnu�[���PK"#[��-Q�specifications/default/open-uri-0.2.0.gemspecnu�[���PK"#[��
f��'Q�specifications/default/un-0.2.0.gemspecnu�[���PK"#[��	Ʌ�+P�specifications/default/logger-1.5.0.gemspecnu�[���PK"#[�����+0�specifications/default/tmpdir-0.1.2.gemspecnu�[���PK"#[!zSS/v�specifications/default/getoptlong-0.1.1.gemspecnu�[���PK"#[0�3��*(�specifications/default/rinda-0.1.1.gemspecnu�[���PK"#[�sz��3m�specifications/default/resolv-replace-0.1.0.gemspecnu�[���PK"#[%fZ3��,��specifications/default/weakref-0.1.1.gemspecnu�[���PK"#[���P��(��specifications/default/erb-2.2.3.gemspecnu�[���PK"#[�S4p%%(��specifications/default/etc-1.3.0.gemspecnu�[���PK"#[��"3S�specifications/default/ruby2_keywords-0.0.5.gemspecnu�[���PK"#[ `?���)5�specifications/default/zlib-2.1.1.gemspecnu�[���PK"#[5��54^�specifications/default/error_highlight-0.3.0.gemspecnu�[���PK"#[��f���)�specifications/default/time-0.2.2.gemspecnu�[���PK"#[��dY��0� specifications/default/prettyprint-0.1.1.gemspecnu�[���PK"#[oK��-[ specifications/default/delegate-0.2.0.gemspecnu�[���PK"#[5��i��+�
 specifications/default/resolv-0.2.1.gemspecnu�[���PK"#[����'� specifications/bigdecimal-3.1.1.gemspecnu�[���PK"#[�J��
�
"� specifications/psych-4.0.4.gemspecnu�[���PK"#[ƺ:WZZ"� specifications/rake-13.0.6.gemspecnu�[���PK"#[U�v��!Q& specifications/json-2.6.1.gemspecnu�[���PK"#[hso���#c/ specifications/rackup-2.1.0.gemspecnu�[���PK"#[O?�R(�6 specifications/io-console-0.5.11.gemspecnu�[���PK"#[@��ϼ�&; gems/psych-4.0.4/lib/psych/versions.rbnu�[���PK"#[)��))+< gems/psych-4.0.4/lib/psych/nodes/mapping.rbnu�[���PK"#[Ϧ[*�B gems/psych-4.0.4/lib/psych/nodes/stream.rbnu�[���PK"#[��AA,�F gems/psych-4.0.4/lib/psych/nodes/document.rbnu�[���PK"#[�����*�N gems/psych-4.0.4/lib/psych/nodes/scalar.rbnu�[���PK"#[�ɉ)oU gems/psych-4.0.4/lib/psych/nodes/alias.rbnu�[���PK"#[�믍!!,�W gems/psych-4.0.4/lib/psych/nodes/sequence.rbnu�[���PK "#[0 ��(P` gems/psych-4.0.4/lib/psych/nodes/node.rbnu�[���PK "#[��'K��Qh gems/psych-4.0.4/lib/psych/y.rbnu�[���PK "#[	M�,��*^i gems/psych-4.0.4/lib/psych/class_loader.rbnu�[���PK "#[�2P'�q gems/psych-4.0.4/lib/psych/exception.rbnu�[���PK "#[MA�+��.s gems/psych-4.0.4/lib/psych/visitors/visitor.rbnu�[���PK "#[��{>QQ02v gems/psych-4.0.4/lib/psych/visitors/json_tree.rbnu�[���PK "#[���Z��.�x gems/psych-4.0.4/lib/psych/visitors/emitter.rbnu�[���PK "#[R��(rr2 gems/psych-4.0.4/lib/psych/visitors/depth_first.rbnu�[���PK "#[$�]cAcA0߁ gems/psych-4.0.4/lib/psych/visitors/yaml_tree.rbnu�[���PK "#[�,��H1H1.�� gems/psych-4.0.4/lib/psych/visitors/to_ruby.rbnu�[���PK "#[r���$H� gems/psych-4.0.4/lib/psych/stream.rbnu�[���PK "#[��,��%7� gems/psych-4.0.4/lib/psych/handler.rbnu�[���PK "#[*JJ!U!gems/psych-4.0.4/lib/psych/set.rbnu�[���PK!"#[:�6�!gems/psych-4.0.4/lib/psych/handlers/document_stream.rbnu�[���PK!"#[.�^{{/b!gems/psych-4.0.4/lib/psych/handlers/recorder.rbnu�[���PK!"#[���KK"<!gems/psych-4.0.4/lib/psych/omap.rbnu�[���PK!"#[/��	�	#�!gems/psych-4.0.4/lib/psych/nodes.rbnu�[���PK!"#[u�>22#�'!gems/psych-4.0.4/lib/psych/coder.rbnu�[���PK!"#[�!����*10!gems/psych-4.0.4/lib/psych/tree_builder.rbnu�[���PK!"#[g��jj&}<!gems/psych-4.0.4/lib/psych/core_ext.rbnu�[���PK!"#[�y2K��'=>!gems/psych-4.0.4/lib/psych/streaming.rbnu�[���PK!"#[H��LL*/A!gems/psych-4.0.4/lib/psych/syntax_error.rbnu�[���PK!"#[��.�C!gems/psych-4.0.4/lib/psych/json/yaml_events.rbnu�[���PK!"#[��:���)>G!gems/psych-4.0.4/lib/psych/json/stream.rbnu�[���PK!"#[�����.)I!gems/psych-4.0.4/lib/psych/json/ruby_events.rbnu�[���PK!"#[�Хcc/oK!gems/psych-4.0.4/lib/psych/json/tree_builder.rbnu�[���PK!"#[��R:��&1M!gems/psych-4.0.4/lib/psych/visitors.rbnu�[���PK!"#["5x��,�N!gems/psych-4.0.4/lib/psych/scalar_scanner.rbnu�[���PK!"#[��[��$�a!gems/psych-4.0.4/lib/psych/parser.rbnu�[���PK!"#[���obob�h!gems/psych-4.0.4/lib/psych.rbnu�[���PK!"#[��"��T�!gems/erb-2.2.3/libexec/erbnuȯ��PK!"#[ǻ��iiU�!gems/rackup-2.1.0/bin/rackupnuȯ��PK!"#[z����
�!gems/rackup-2.1.0/license.mdnu�[���PK!"#[<�d����!gems/rackup-2.1.0/readme.mdnu�[���PK!"#[�cϛ��'9�!gems/rackup-2.1.0/lib/rackup/version.rbnu�[���PK!"#[���HH+$�!gems/rackup-2.1.0/lib/rackup/handler/cgi.rbnu�[���PK!"#[���|��/�!gems/rackup-2.1.0/lib/rackup/handler/webrick.rbnu�[���PK!"#[lo|	��& "gems/rackup-2.1.0/lib/rackup/stream.rbnu�[���PK!"#[�F��;;'"gems/rackup-2.1.0/lib/rackup/handler.rbnu�[���PK!"#[/�:�4�4&�("gems/rackup-2.1.0/lib/rackup/server.rbnu�[���PK!"#[�����'�]"gems/rackup-2.1.0/lib/rackup/lobster.rbnu�[���PK!"#[��9�$$�f"gems/rackup-2.1.0/lib/rackup.rbnu�[���PK!"#[e
�eeNh"gems/rackup-2.1.0/security.mdnu�[���PK!"#[t2�����i"gems/rack-3.0.8/CHANGELOG.mdnu�[���PK!"#[�tz��,�,=0#gems/rack-3.0.8/README.mdnu�[���PK!"#[G�	TT]#gems/rack-3.0.8/MIT-LICENSEnu�[���PK!"#[�um�	�	�a#gems/rack-3.0.8/lib/rack.rbnu�[���PK!"#[�|�Х�!�k#gems/rack-3.0.8/lib/rack/files.rbnu�[���PK!"#[ɸHO��#‚#gems/rack-3.0.8/lib/rack/version.rbnu�[���PK!"#[��3���+ӆ#gems/rack-3.0.8/lib/rack/method_override.rbnu�[���PK!"#[���4
4
#��#gems/rack-3.0.8/lib/rack/chunked.rbnu�[���PK!"#[��44"}�#gems/rack-3.0.8/lib/rack/events.rbnu�[���PK!"#[H��SGbGb#�#gems/rack-3.0.8/lib/rack/request.rbnu�[���PK!"#[[�J$�$gems/rack-3.0.8/lib/rack/deflater.rbnu�[���PK!"#[;�`�ff#�&$gems/rack-3.0.8/lib/rack/runtime.rbnu�[���PK!"#[_��l��'�*$gems/rack-3.0.8/lib/rack/null_logger.rbnu�[���PK!"#[d�NN'�/$gems/rack-3.0.8/lib/rack/show_status.rbnu�[���PK!"#[�ӎ cTcT!i>$gems/rack-3.0.8/lib/rack/utils.rbnu�[���PK!"#[ѝo� �$gems/rack-3.0.8/lib/rack/head.rbnu�[���PK!"#[�/�{{(y�$gems/rack-3.0.8/lib/rack/mock_request.rbnu�[���PK!"#[��A�%L�$gems/rack-3.0.8/lib/rack/directory.rbnu�[���PK!"#[K�bx$��$gems/rack-3.0.8/lib/rack/reloader.rbnu�[���PK!"#[VM�Vww $�$gems/rack-3.0.8/lib/rack/etag.rbnu�[���PK!"#[�ю	��"��$gems/rack-3.0.8/lib/rack/static.rbnu�[���PK!"#[��l�	�	/<�$gems/rack-3.0.8/lib/rack/multipart/generator.rbnu�[���PK!"#[�N�$$3a�$gems/rack-3.0.8/lib/rack/multipart/uploaded_file.rbnu�[���PK!"#[��&�4�4,�$gems/rack-3.0.8/lib/rack/multipart/parser.rbnu�[���PK!"#[�R�

)
5%gems/rack-3.0.8/lib/rack/mock_response.rbnu�[���PK!"#[��||��+�B%gems/rack-3.0.8/lib/rack/conditional_get.rbnu�[���PK!"#[@�j�	�	%�N%gems/rack-3.0.8/lib/rack/constants.rbnu�[���PK!"#[��Y		#Y%gems/rack-3.0.8/lib/rack/cascade.rbnu�[���PK!"#[�ʆ��6�6+_b%gems/rack-3.0.8/lib/rack/show_exceptions.rbnu�[���PK!"#[O�~�%��%gems/rack-3.0.8/lib/rack/recursive.rbnu�[���PK!"#[YY�d

+�%gems/rack-3.0.8/lib/rack/tempfile_reaper.rbnu�[���PK!"#[��;�~~,��%gems/rack-3.0.8/lib/rack/rewindable_input.rbnu�[���PK!"#[Y4��88$\�%gems/rack-3.0.8/lib/rack/sendfile.rbnu�[���PK!"#[M�}Y?? ��%gems/rack-3.0.8/lib/rack/mock.rbnu�[���PK!"#[�d�P��"w�%gems/rack-3.0.8/lib/rack/logger.rbnu�[���PK!"#[U``"��%g�%gems/rack-3.0.8/lib/rack/multipart.rbnu�[���PK!"#[�
C�xx)f�%gems/rack-3.0.8/lib/rack/common_logger.rbnu�[���PK!"#[>Sf?"?"#7�%gems/rack-3.0.8/lib/rack/builder.rbnu�[���PK""#[����+�%gems/rack-3.0.8/lib/rack/auth/digest/md5.rbnu�[���PK""#[����/A�%gems/rack-3.0.8/lib/rack/auth/digest/request.rbnu�[���PK""#[����-��%gems/rack-3.0.8/lib/rack/auth/digest/nonce.rbnu�[���PK""#[����.7&gems/rack-3.0.8/lib/rack/auth/digest/params.rbnu�[���PK""#[���

'�&gems/rack-3.0.8/lib/rack/auth/digest.rbnu�[���PK""#[�����&&gems/rack-3.0.8/lib/rack/auth/basic.rbnu�[���PK""#[,��UU1&gems/rack-3.0.8/lib/rack/auth/abstract/request.rbnu�[���PK""#[l��GRR1�!&gems/rack-3.0.8/lib/rack/auth/abstract/handler.rbnu�[���PK""#[��՝[�[� �%&gems/rack-3.0.8/lib/rack/lint.rbnuȯ��PK""#[�&�{!{!(.�&gems/rack-3.0.8/lib/rack/query_parser.rbnu�[���PK""#[:�}=="�&gems/rack-3.0.8/lib/rack/urlmap.rbnu�[���PK""#[O�i���#��&gems/rack-3.0.8/lib/rack/headers.rbnu�[���PK""#[М}��� ��&gems/rack-3.0.8/lib/rack/file.rbnu�[���PK""#[N4q���(��&gems/rack-3.0.8/lib/rack/content_type.rbnu�[���PK""#[K?��33&��&gems/rack-3.0.8/lib/rack/body_proxy.rbnu�[���PK""#[�i\��"F�&gems/rack-3.0.8/lib/rack/config.rbnu�[���PK""#[�gG��&2�&gems/rack-3.0.8/lib/rack/media_type.rbnu�[���PK""#[>�== !'gems/rack-3.0.8/lib/rack/lock.rbnu�[���PK""#[iZ�&&*�'gems/rack-3.0.8/lib/rack/content_length.rbnu�[���PK""#[$����*�*$.'gems/rack-3.0.8/lib/rack/response.rbnu�[���PK""#[?�6/���� g2'gems/rack-3.0.8/lib/rack/mime.rbnu�[���PK""#[���==x�'gems/rack-3.0.8/SPEC.rdocnu�[���PK""#[��_**��'gems/rack-3.0.8/CONTRIBUTING.mdnu�[���PK""#[�,���,=�'gems/bigdecimal-3.1.1/lib/bigdecimal/math.rbnu�[���PK""#[;<]]02(gems/bigdecimal-3.1.1/lib/bigdecimal/jacobian.rbnu�[���PK""#[��_���,�(gems/bigdecimal-3.1.1/lib/bigdecimal/util.rbnu�[���PK""#[ь��. -(gems/bigdecimal-3.1.1/lib/bigdecimal/ludcmp.rbnu�[���PK""#[h"A�ZZ.�5(gems/bigdecimal-3.1.1/lib/bigdecimal/newton.rbnu�[���PK""#[�H�k���=(gems/rake-13.0.6/exe/rakenuȯ��PK""#[�
i���B(gems/rake-13.0.6/History.rdocnu�[���PK""#[�?qFF,�])gems/rake-13.0.6/doc/command_line_usage.rdocnu�[���PK""#[�'S{��"&u)gems/rake-13.0.6/doc/glossary.rdocnu�[���PK""#[��@u,u,l|)gems/rake-13.0.6/doc/jamis.rbnu�[���PK""#[��AA .�)gems/rake-13.0.6/doc/example/b.cnu�[���PK""#[۸	���&��)gems/rake-13.0.6/doc/example/Rakefile1nu�[���PK""#[�_�bgg#��)gems/rake-13.0.6/doc/example/main.cnu�[���PK""#["�;WW&m�)gems/rake-13.0.6/doc/example/Rakefile2nu�[���PK""#[Oq�AA �)gems/rake-13.0.6/doc/example/a.cnu�[���PK""#[�u���	�	$��)gems/rake-13.0.6/doc/proto_rake.rdocnu�[���PK""#[v3�HH"ͺ)gems/rake-13.0.6/doc/rational.rdocnu�[���PK""#[����P�P"g�)gems/rake-13.0.6/doc/rakefile.rdocnu�[���PK""#[t�S	]]�$*gems/rake-13.0.6/README.rdocnu�[���PK""#[W��D8*gems/rake-13.0.6/MIT-LICENSEnu�[���PK""#[Q��=rr�<*gems/rake-13.0.6/lib/rake.rbnu�[���PK""#[���^		$iE*gems/rake-13.0.6/lib/rake/promise.rbnu�[���PK""#[zWBd��$�N*gems/rake-13.0.6/lib/rake/version.rbnu�[���PK#"#[0Z�R��+P*gems/rake-13.0.6/lib/rake/private_reader.rbnu�[���PK#"#[����7�Q*gems/rake-13.0.6/lib/rake/invocation_exception_mixin.rbnu�[���PK#"#[F-�
��+T*gems/rake-13.0.6/lib/rake/dsl_definition.rbnu�[���PK#"#[���Q��(aj*gems/rake-13.0.6/lib/rake/rake_module.rbnu�[���PK#"#[E��.��$�p*gems/rake-13.0.6/lib/rake/tasklib.rbnu�[���PK#"#[)lq((�q*gems/rake-13.0.6/lib/rake/packagetask.rbnu�[���PK#"#[��l��/�*gems/rake-13.0.6/lib/rake/file_creation_task.rbnu�[���PK#"#[��K\��--�*gems/rake-13.0.6/lib/rake/invocation_chain.rbnu�[���PK#"#[ƋK�b�b(H�*gems/rake-13.0.6/lib/rake/application.rbnu�[���PK#"#[���YY'��*gems/rake-13.0.6/lib/rake/multi_task.rbnu�[���PK#"#[yOu�rr'M�*gems/rake-13.0.6/lib/rake/ext/string.rbnu�[���PK#"#[u����%+gems/rake-13.0.6/lib/rake/ext/core.rbnu�[���PK#"#[������(+gems/rake-13.0.6/lib/rake/thread_pool.rbnu�[���PK#"#[|��^��%%+gems/rake-13.0.6/lib/rake/testtask.rbnu�[���PK#"#[�l�??),:+gems/rake-13.0.6/lib/rake/trace_output.rbnu�[���PK#"#[�R��2�2!�<+gems/rake-13.0.6/lib/rake/task.rbnu�[���PK#"#[~�y�	�	+p+gems/rake-13.0.6/lib/rake/task_arguments.rbnu�[���PK#"#[��i		+z+gems/rake-13.0.6/lib/rake/default_loader.rbnu�[���PK#"#[QG�"o{+gems/rake-13.0.6/lib/rake/clean.rbnu�[���PK#"#[�d���1�1&ރ+gems/rake-13.0.6/lib/rake/file_list.rbnu�[���PK#"#[��M	M	(�+gems/rake-13.0.6/lib/rake/cpu_counter.rbnu�[���PK#"#[<9��-��+gems/rake-13.0.6/lib/rake/rake_test_loader.rbnu�[���PK#"#[��s�ZZ+�+gems/rake-13.0.6/lib/rake/file_utils_ext.rbnu�[���PK#"#[n�#��0��+gems/rake-13.0.6/lib/rake/task_argument_error.rbnu�[���PK#"#[�I����&��+gems/rake-13.0.6/lib/rake/file_task.rbnu�[���PK#"#[Jሀ�&��+gems/rake-13.0.6/lib/rake/backtrace.rbnu�[���PK#"#[���''&��+gems/rake-13.0.6/lib/rake/late_time.rbnu�[���PK#"#[�2��bb-5�+gems/rake-13.0.6/lib/rake/loaders/makefile.rbnu�[���PK#"#[�����&��+gems/rake-13.0.6/lib/rake/cloneable.rbnu�[���PK#"#[?�{Hrr'
�+gems/rake-13.0.6/lib/rake/early_time.rbnu�[���PK#"#[�.*C}}"��+gems/rake-13.0.6/lib/rake/phony.rbnu�[���PK#"#[�j��"��+gems/rake-13.0.6/lib/rake/win32.rbnu�[���PK#"#[�R��(�+gems/rake-13.0.6/lib/rake/linked_list.rbnu�[���PK#"#[��m��3p�+gems/rake-13.0.6/lib/rake/thread_history_display.rbnu�[���PK#"#[Ӭ�s~~:W,gems/rake-13.0.6/lib/rake/rule_recursion_overflow_error.rbnu�[���PK#"#[�����"?,gems/rake-13.0.6/lib/rake/scope.rbnu�[���PK#"#[�((),gems/rake-13.0.6/lib/rake/task_manager.rbnu�[���PK#"#[�lD��'�.,gems/rake-13.0.6/lib/rake/name_space.rbnu�[���PK#"#[��K��*�1,gems/rake-13.0.6/lib/rake/pseudo_status.rbnu�[���PK#"#[;Y�II'�3,gems/rake-13.0.6/lib/rake/file_utils.rbnu�[���PK#"#[�##B�B�)C,gems/ruby-lsapi-5.6/setup.rbnu�[���PK#"#[�'�MM,��,gems/ruby-lsapi-5.6/scripts/lsruby_runner.rbnuȯ��PK#"#[��ԍ#�#&`�,gems/ruby-lsapi-5.6/ext/lsapi/Makefilenu�[���PK#"#[�W	q,,(C�,gems/ruby-lsapi-5.6/ext/lsapi/lsapidef.hnu�[���PK$"#[/�-gems/ruby-lsapi-5.6/ext/lsapi/.sitearchdir.timenu�[���PK$"#[d�C�R[R[&&-gems/ruby-lsapi-5.6/ext/lsapi/lsruby.cnu�[���PK$"#[�7Zw��(�g-gems/ruby-lsapi-5.6/ext/lsapi/extconf.rbnu�[���PK$"#[���F����&"i-gems/ruby-lsapi-5.6/ext/lsapi/lsruby.onu�[���PK$"#[z�YhH.H.&PZ0gems/ruby-lsapi-5.6/ext/lsapi/lsapi.sonuȯ��PK$"#[
3O8a�a�(�1gems/ruby-lsapi-5.6/ext/lsapi/lsapilib.cnu�[���PK$"#[��Y�/�/(�Z3gems/ruby-lsapi-5.6/ext/lsapi/lsapilib.hnu�[���PK$"#[L���(�((��3gems/ruby-lsapi-5.6/ext/lsapi/lsapilib.onu�[���PK$"#[�}AC��(�8gems/ruby-lsapi-5.6/rails/dispatch.lsapinuȯ��PK$"#[lV5���.l�8gems/ruby-lsapi-5.6/examples/lsapi_with_cgi.rbnuȯ��PK$"#[��.�)��8gems/ruby-lsapi-5.6/examples/testlsapi.rbnuȯ��PK$"#[whf:��!�8gems/ruby-lsapi-5.6/lsapi.gemspecnu�[���PK$"#[�^wͱ���8gems/ruby-lsapi-5.6/READMEnu�[���PK$"#[EK�<-M-M��8gems/json-2.6.1/lib/json.rbnu�[���PK$"#[��..#j 9gems/json-2.6.1/lib/json/version.rbnu�[���PK$"#[1z����!9gems/json-2.6.1/lib/json/ext.rbnu�[���PK$"#[E��”�*�#9gems/json-2.6.1/lib/json/generic_object.rbnu�[���PK$"#[ҍ��iSiS"�)9gems/json-2.6.1/lib/json/common.rbnu�[���PK$"#[Px���(j}9gems/json-2.6.1/lib/json/add/rational.rbnu�[���PK$"#[�k�)��9gems/json-2.6.1/lib/json/add/exception.rbnu�[���PK$"#[���!!#&�9gems/json-2.6.1/lib/json/add/set.rbnu�[���PK$"#[��ff&��9gems/json-2.6.1/lib/json/add/symbol.rbnu�[���PK$"#[ȅ����'V�9gems/json-2.6.1/lib/json/add/complex.rbnu�[���PK$"#[�m��qq$|�9gems/json-2.6.1/lib/json/add/date.rbnu�[���PK$"#[J��$A�9gems/json-2.6.1/lib/json/add/time.rbnu�[���PK$"#[@9%&��9gems/json-2.6.1/lib/json/add/regexp.rbnu�[���PK$"#[o���aa*�9gems/json-2.6.1/lib/json/add/bigdecimal.rbnu�[���PK$"#[1+Ǔ00)��9gems/json-2.6.1/lib/json/add/date_time.rbnu�[���PK$"#[�%��&*�9gems/json-2.6.1/lib/json/add/struct.rbnu�[���PK%"#[��a%��9gems/json-2.6.1/lib/json/add/range.rbnu�[���PK%"#[��&a\\$��9gems/json-2.6.1/lib/json/add/core.rbnu�[���PK%"#[��m�'��9gems/json-2.6.1/lib/json/add/ostruct.rbnu�[���PK%"#[�C�6cc#�9gems/bundler-2.3.27/libexec/bundlernuȯ��PK%"#[�w��~~"Ӭ9gems/bundler-2.3.27/libexec/bundlenuȯ��PK%"#[à����8��9gems/bundler-2.3.27/lib/bundler/environment_preserver.rbnu�[���PK%"#[.z0ʻ9gems/bundler-2.3.27/lib/bundler/man/bundle-gem.1nu�[���PK%"#[\'i�TT6=�9gems/bundler-2.3.27/lib/bundler/man/bundle-show.1.ronnnu�[���PK%"#[�;���1��9gems/bundler-2.3.27/lib/bundler/man/bundle-list.1nu�[���PK%"#[�lr]]6�9gems/bundler-2.3.27/lib/bundler/man/bundle-help.1.ronnnu�[���PK%"#[1�~��:��9gems/bundler-2.3.27/lib/bundler/man/bundle-binstubs.1.ronnnu�[���PK%"#[�85��9gems/bundler-2.3.27/lib/bundler/man/bundle-gem.1.ronnnu�[���PK%"#[s��kZZ-J�9gems/bundler-2.3.27/lib/bundler/man/gemfile.5nu�[���PK%"#[A��7�K:gems/bundler-2.3.27/lib/bundler/man/bundle-cache.1.ronnnu�[���PK%"#[�)&LYY79X:gems/bundler-2.3.27/lib/bundler/man/bundle-check.1.ronnnu�[���PK%"#["�7��5�[:gems/bundler-2.3.27/lib/bundler/man/bundle-platform.1nu�[���PK%"#[+3`-DD1b:gems/bundler-2.3.27/lib/bundler/man/bundle-open.1nu�[���PK%"#[3����9�d:gems/bundler-2.3.27/lib/bundler/man/bundle-console.1.ronnnu�[���PK%"#[���MM3�j:gems/bundler-2.3.27/lib/bundler/man/bundle-inject.1nu�[���PK%"#[R�,a\C\C9{n:gems/bundler-2.3.27/lib/bundler/man/bundle-install.1.ronnnu�[���PK%"#[|�Koo8@�:gems/bundler-2.3.27/lib/bundler/man/bundle-plugin.1.ronnnu�[���PK%"#[��		3�:gems/bundler-2.3.27/lib/bundler/man/bundle-plugin.1nu�[���PK%"#[�
���5��:gems/bundler-2.3.27/lib/bundler/man/bundle-pristine.1nu�[���PK%"#[f�Qvv1��:gems/bundler-2.3.27/lib/bundler/man/bundle-lock.1nu�[���PK%"#[#]E228Y�:gems/bundler-2.3.27/lib/bundler/man/bundle-update.1.ronnnu�[���PK%"#[�x��G�G4�	;gems/bundler-2.3.27/lib/bundler/man/bundle-install.1nu�[���PK%"#[;�H��2�Q;gems/bundler-2.3.27/lib/bundler/man/bundle-clean.1nu�[���PK&"#[b�Mp

5�T;gems/bundler-2.3.27/lib/bundler/man/bundle-outdated.1nu�[���PK&"#[�n��77:pb;gems/bundler-2.3.27/lib/bundler/man/bundle-outdated.1.ronnnu�[���PK&"#["�:110o;gems/bundler-2.3.27/lib/bundler/man/bundle-add.1nu�[���PK&"#[��]]1�v;gems/bundler-2.3.27/lib/bundler/man/bundle-exec.1nu�[���PK&"#[���o��9`�;gems/bundler-2.3.27/lib/bundler/man/bundle-version.1.ronnnu�[���PK&"#[B�:��1��;gems/bundler-2.3.27/lib/bundler/man/bundle-help.1nu�[���PK&"#[�[�n��2ɕ;gems/bundler-2.3.27/lib/bundler/man/bundle-check.1nu�[���PK&"#[O�tu��8�;gems/bundler-2.3.27/lib/bundler/man/bundle-inject.1.ronnnu�[���PK&"#[Ժ�p��,
�;gems/bundler-2.3.27/lib/bundler/man/bundle.1nu�[���PK&"#[��h���6g�;gems/bundler-2.3.27/lib/bundler/man/bundle-init.1.ronnnu�[���PK&"#[�V�#6x�;gems/bundler-2.3.27/lib/bundler/man/bundle-list.1.ronnnu�[���PK&"#[�'�+
+
1�;gems/bundler-2.3.27/lib/bundler/man/bundle.1.ronnnu�[���PK&"#[��#s��:~�;gems/bundler-2.3.27/lib/bundler/man/bundle-pristine.1.ronnnu�[���PK&"#[1��>��4��;gems/bundler-2.3.27/lib/bundler/man/bundle-console.1nu�[���PK&"#[���qq6��;gems/bundler-2.3.27/lib/bundler/man/bundle-exec.1.ronnnu�[���PK&"#[M��661��;gems/bundler-2.3.27/lib/bundler/man/bundle-init.1nu�[���PK&"#[��5�;gems/bundler-2.3.27/lib/bundler/man/bundle-add.1.ronnnu�[���PK&"#[6�H��8��;gems/bundler-2.3.27/lib/bundler/man/bundle-doctor.1.ronnnu�[���PK&"#[�TI;;5�;gems/bundler-2.3.27/lib/bundler/man/bundle-viz.1.ronnnu�[���PK&"#[˱[y��8n�;gems/bundler-2.3.27/lib/bundler/man/bundle-remove.1.ronnnu�[���PK&"#[ZۖX3R3R2��;gems/bundler-2.3.27/lib/bundler/man/gemfile.5.ronnnu�[���PK&"#[�#K���1EP<gems/bundler-2.3.27/lib/bundler/man/bundle-info.1nu�[���PK&"#[�5���6fR<gems/bundler-2.3.27/lib/bundler/man/bundle-open.1.ronnnu�[���PK&"#[�:�RPP3�T<gems/bundler-2.3.27/lib/bundler/man/bundle-remove.1nu�[���PK&"#[=��q��19X<gems/bundler-2.3.27/lib/bundler/man/bundle-show.1nu�[���PK&"#[�I�OO5K[<gems/bundler-2.3.27/lib/bundler/man/bundle-binstubs.1nu�[���PK&"#[9IG���6�a<gems/bundler-2.3.27/lib/bundler/man/bundle-lock.1.ronnnu�[���PK&"#[�3�pp7Bn<gems/bundler-2.3.27/lib/bundler/man/bundle-clean.1.ronnnu�[���PK&"#[l����:q<gems/bundler-2.3.27/lib/bundler/man/bundle-platform.1.ronnnu�[���PK&"#[^A�I��0_v<gems/bundler-2.3.27/lib/bundler/man/bundle-viz.1nu�[���PK&"#[����4�{<gems/bundler-2.3.27/lib/bundler/man/bundle-version.1nu�[���PK&"#[$�q���3�~<gems/bundler-2.3.27/lib/bundler/man/bundle-doctor.1nu�[���PK&"#[��O�U�U3q�<gems/bundler-2.3.27/lib/bundler/man/bundle-config.1nu�[���PK&"#[�;㊅
�
2��<gems/bundler-2.3.27/lib/bundler/man/bundle-cache.1nu�[���PK&"#[�S�LL8��<gems/bundler-2.3.27/lib/bundler/man/bundle-config.1.ronnnu�[���PK&"#[���qq6/4=gems/bundler-2.3.27/lib/bundler/man/bundle-info.1.ronnnu�[���PK&"#[��C&U6U636=gems/bundler-2.3.27/lib/bundler/man/bundle-update.1nu�[���PK&"#[����*�l=gems/bundler-2.3.27/lib/bundler/version.rbnu�[���PK&"#[W�|��%�m=gems/bundler-2.3.27/lib/bundler/ui.rbnu�[���PK&"#[��3�

+ o=gems/bundler-2.3.27/lib/bundler/cli/init.rbnu�[���PK'"#[5H
��/�t=gems/bundler-2.3.27/lib/bundler/cli/platform.rbnu�[���PK'"#[V�9��+�z=gems/bundler-2.3.27/lib/bundler/cli/fund.rbnu�[���PK'"#[�^f+g~=gems/bundler-2.3.27/lib/bundler/cli/list.rbnu�[���PK'"#[a����$�$/Ά=gems/bundler-2.3.27/lib/bundler/cli/outdated.rbnu�[���PK'"#[�st��+
�=gems/bundler-2.3.27/lib/bundler/cli/show.rbnu�[���PK'"#[�im�$>$>*L�=gems/bundler-2.3.27/lib/bundler/cli/gem.rbnu�[���PK'"#[�p�u��-��=gems/bundler-2.3.27/lib/bundler/cli/doctor.rbnu�[���PK'"#[���,�>gems/bundler-2.3.27/lib/bundler/cli/check.rbnu�[���PK'"#["�G���/->gems/bundler-2.3.27/lib/bundler/cli/binstubs.rbnu�[���PK'"#[�c|��
�
+�>gems/bundler-2.3.27/lib/bundler/cli/info.rbnu�[���PK'"#[�LLb	b	+u >gems/bundler-2.3.27/lib/bundler/cli/exec.rbnu�[���PK'"#[��88.2*>gems/bundler-2.3.27/lib/bundler/cli/console.rbnu�[���PK'"#[��)``,�.>gems/bundler-2.3.27/lib/bundler/cli/clean.rbnu�[���PK'"#[Ak���-�1>gems/bundler-2.3.27/lib/bundler/cli/plugin.rbnu�[���PK'"#[�;�.>>*�8>gems/bundler-2.3.27/lib/bundler/cli/viz.rbnu�[���PK'"#[mV����+\=>gems/bundler-2.3.27/lib/bundler/cli/open.rbnu�[���PK'"#[g�ӽFF,�A>gems/bundler-2.3.27/lib/bundler/cli/issue.rbnu�[���PK'"#[⮬�77-3G>gems/bundler-2.3.27/lib/bundler/cli/common.rbnu�[���PK'"#[/Ԗ __-�Y>gems/bundler-2.3.27/lib/bundler/cli/remove.rbnu�[���PK'"#[3�LT��/�[>gems/bundler-2.3.27/lib/bundler/cli/pristine.rbnu�[���PK'"#[U<�{{-ob>gems/bundler-2.3.27/lib/bundler/cli/update.rbnu�[���PK'"#[ ��ii,Gs>gems/bundler-2.3.27/lib/bundler/cli/cache.rbnu�[���PK'"#[a���-x>gems/bundler-2.3.27/lib/bundler/cli/config.rbnu�[���PK'"#[lqOww-{�>gems/bundler-2.3.27/lib/bundler/cli/inject.rbnu�[���PK("#[�`K��+O�>gems/bundler-2.3.27/lib/bundler/cli/lock.rbnu�[���PK("#[R�L��**�>gems/bundler-2.3.27/lib/bundler/cli/add.rbnu�[���PK("#[|���.]�>gems/bundler-2.3.27/lib/bundler/cli/install.rbnu�[���PK("#[Ӄ�nDD0��>gems/bundler-2.3.27/lib/bundler/plugin/events.rbnu�[���PK("#["�x��-[�>gems/bundler-2.3.27/lib/bundler/plugin/dsl.rbnu�[���PK("#[Φ��AA5��>gems/bundler-2.3.27/lib/bundler/plugin/source_list.rbnu�[���PK("#[UK<�
�
3'�>gems/bundler-2.3.27/lib/bundler/plugin/installer.rbnu�[���PK("#[}[?n		7C�>gems/bundler-2.3.27/lib/bundler/plugin/installer/git.rbnu�[���PK("#[zm��<��>gems/bundler-2.3.27/lib/bundler/plugin/installer/rubygems.rbnu�[���PK("#[.���/��>gems/bundler-2.3.27/lib/bundler/plugin/index.rbnu�[���PK("#[�6�PP-�?gems/bundler-2.3.27/lib/bundler/plugin/api.rbnu�[���PK("#[����.�.4Q?gems/bundler-2.3.27/lib/bundler/plugin/api/source.rbnu�[���PK("#[<��,,5g=?gems/bundler-2.3.27/lib/bundler/settings/validator.rbnu�[���PK("#[��{�&�I?gems/bundler-2.3.27/lib/bundler/env.rbnu�[���PK)"#[�W	�?�?7_^?gems/bundler-2.3.27/lib/bundler/rubygems_integration.rbnu�[���PK)"#[\�����'��?gems/bundler-2.3.27/lib/bundler/vlad.rbnu�[���PK)"#[�u:����&��?gems/bundler-2.3.27/lib/bundler/cli.rbnu�[���PK)"#[E�d��9�<@gems/bundler-2.3.27/lib/bundler/endpoint_specification.rbnu�[���PK)"#[��Ǵ�0L@gems/bundler-2.3.27/lib/bundler/vendored_thor.rbnu�[���PK)"#[�:H�OO7M@gems/bundler-2.3.27/lib/bundler/remote_specification.rbnu�[���PK)"#[|L�0��/�\@gems/bundler-2.3.27/lib/bundler/ruby_version.rbnu�[���PK)"#[�OP#oo)�m@gems/bundler-2.3.27/lib/bundler/errors.rbnu�[���PK)"#[�?��/��@gems/bundler-2.3.27/lib/bundler/self_manager.rbnu�[���PK)"#[s�{ss/'�@gems/bundler-2.3.27/lib/bundler/feature_flag.rbnu�[���PK)"#[�a(��@gems/bundler-2.3.27/lib/bundler/setup.rbnu�[���PK)"#[�T�ee5Y�@gems/bundler-2.3.27/lib/bundler/vendored_molinillo.rbnu�[���PK)"#[��Z7)7)*#�@gems/bundler-2.3.27/lib/bundler/runtime.rbnu�[���PK)"#[�0<[�O�O&��@gems/bundler-2.3.27/lib/bundler/dsl.rbnu�[���PK)"#[6�e$ll,�Agems/bundler-2.3.27/lib/bundler/deprecate.rbnu�[���PK)"#[7�1�GG1� Agems/bundler-2.3.27/lib/bundler/match_platform.rbnu�[���PK)"#[/k��*�*1_#Agems/bundler-2.3.27/lib/bundler/shared_helpers.rbnu�[���PK)"#[�����+~NAgems/bundler-2.3.27/lib/bundler/ruby_dsl.rbnu�[���PK)"#[��-
-
6�QAgems/bundler-2.3.27/lib/bundler/resolver/spec_group.rbnu�[���PK)"#[>��T��0d\Agems/bundler-2.3.27/lib/bundler/resolver/base.rbnu�[���PK)"#[����5�5+oaAgems/bundler-2.3.27/lib/bundler/settings.rbnu�[���PK)"#[��K66.i�Agems/bundler-2.3.27/lib/bundler/ui/rg_proxy.rbnu�[���PK)"#[�N�s
s
+��Agems/bundler-2.3.27/lib/bundler/ui/shell.rbnu�[���PK)"#[��[

,˦Agems/bundler-2.3.27/lib/bundler/ui/silent.rbnu�[���PK)"#[3��,��(4�Agems/bundler-2.3.27/lib/bundler/graph.rbnu�[���PK)"#[f)q
q
7��Agems/bundler-2.3.27/lib/bundler/compact_index_client.rbnu�[���PK)"#[�]�YY5^�Agems/bundler-2.3.27/lib/bundler/fetcher/downloader.rbnu�[���PK)"#[��
N��/�Agems/bundler-2.3.27/lib/bundler/fetcher/base.rbnu�[���PK)"#[�q8.�Agems/bundler-2.3.27/lib/bundler/fetcher/compact_index.rbnu�[���PK)"#[��is990��Agems/bundler-2.3.27/lib/bundler/fetcher/index.rbnu�[���PK)"#[L�;8�
�
5?�Agems/bundler-2.3.27/lib/bundler/fetcher/dependency.rbnu�[���PK)"#[
�>��5:�Agems/bundler-2.3.27/lib/bundler/lockfile_generator.rbnu�[���PK)"#[�H��)JBgems/bundler-2.3.27/lib/bundler/digest.rbnu�[���PK)"#[�CW(W(+PBgems/bundler-2.3.27/lib/bundler/injector.rbnu�[���PK)"#[���-9Bgems/bundler-2.3.27/lib/bundler/source_map.rbnu�[���PK)"#[�x)��-BBgems/bundler-2.3.27/lib/bundler/gem_helper.rbnu�[���PK)"#[�9l5,5,*^Bgems/bundler-2.3.27/lib/bundler/fetcher.rbnu�[���PK)"#[p2Ǥ��,��Bgems/bundler-2.3.27/lib/bundler/constants.rbnu�[���PK)"#[K�,�""1ދBgems/bundler-2.3.27/lib/bundler/match_metadata.rbnu�[���PK)"#[��>--)a�Bgems/bundler-2.3.27/lib/bundler/plugin.rbnu�[���PK)"#[{�*!'')��Bgems/bundler-2.3.27/lib/bundler/source.rbnu�[���PK)"#[���''.=�Bgems/bundler-2.3.27/lib/bundler/source_list.rbnu�[���PK)"#[�[F�U5U5+��Bgems/bundler-2.3.27/lib/bundler/resolver.rbnu�[���PK)"#[���\\<rCgems/bundler-2.3.27/lib/bundler/source/rubygems_aggregate.rbnu�[���PK)"#[�ƨ'1:Cgems/bundler-2.3.27/lib/bundler/source/gemspec.rbnu�[���PK)"#[6]m�<<.�Cgems/bundler-2.3.27/lib/bundler/source/path.rbnu�[���PK)"#[E3��$$7S?Cgems/bundler-2.3.27/lib/bundler/source/git/git_proxy.rbnu�[���PK)"#[�k�P*P*-�cCgems/bundler-2.3.27/lib/bundler/source/git.rbnu�[���PK)"#[�i�EE2i�Cgems/bundler-2.3.27/lib/bundler/source/rubygems.rbnu�[���PK)"#[�:U''9��Cgems/bundler-2.3.27/lib/bundler/source/rubygems/remote.rbnu�[���PK)"#[M9��MM2o�Cgems/bundler-2.3.27/lib/bundler/source/metadata.rbnu�[���PK)"#[u�R!xx8�Cgems/bundler-2.3.27/lib/bundler/source/path/installer.rbnu�[���PK)"#[un�uu(��Cgems/bundler-2.3.27/lib/bundler/retry.rbnu�[���PK)"#[�_���/��Cgems/bundler-2.3.27/lib/bundler/process_lock.rbnu�[���PK)"#[ó����9��Cgems/bundler-2.3.27/lib/bundler/rubygems_gem_installer.rbnu�[���PK)"#[�eA�ss-
Dgems/bundler-2.3.27/lib/bundler/capistrano.rbnu�[���PK*"#[��IVV.�
Dgems/bundler-2.3.27/lib/bundler/gem_helpers.rbnu�[���PK*"#[��[5��6�Dgems/bundler-2.3.27/lib/bundler/vendored_persistent.rbnu�[���PK*"#[Htd]]1�$Dgems/bundler-2.3.27/lib/bundler/vendored_tsort.rbnu�[���PK*"#[�_����1�%Dgems/bundler-2.3.27/lib/bundler/build_metadata.rbnu�[���PK*"#[}X���,�*Dgems/bundler-2.3.27/lib/bundler/gem_tasks.rbnu�[���PK*"#[�`��	�	/�+Dgems/bundler-2.3.27/lib/bundler/current_ruby.rbnu�[���PK*"#[B$h�HH)�5Dgems/bundler-2.3.27/lib/bundler/mirror.rbnu�[���PK*"#[��!6n	n	2BMDgems/bundler-2.3.27/lib/bundler/yaml_serializer.rbnu�[���PK*"#[�.pE2
2
)WDgems/bundler-2.3.27/lib/bundler/inline.rbnu�[���PK*"#[CX�j��B�aDgems/bundler-2.3.27/lib/bundler/compact_index_client/gem_parser.rbnu�[���PK*"#[n�5�	�	=�eDgems/bundler-2.3.27/lib/bundler/compact_index_client/cache.rbnu�[���PK*"#[@��ymm?�oDgems/bundler-2.3.27/lib/bundler/compact_index_client/updater.rbnu�[���PK*"#[_l�__2�~Dgems/bundler-2.3.27/lib/bundler/vendored_tmpdir.rbnu�[���PK*"#[0�ee5LDgems/bundler-2.3.27/lib/bundler/vendored_fileutils.rbnu�[���PK*"#[��x9�Dgems/bundler-2.3.27/lib/bundler/uri_credentials_filter.rbnu�[���PK*"#[��lՕ*�*,��Dgems/bundler-2.3.27/lib/bundler/installer.rbnu�[���PK*"#[�-L001��Dgems/bundler-2.3.27/lib/bundler/version_ranges.rbnu�[���PK*"#[�SJLL1�Dgems/bundler-2.3.27/lib/bundler/templates/Gemfilenu�[���PK*"#[���J��?�Dgems/bundler-2.3.27/lib/bundler/templates/Executable.standalonenu�[���PK*"#[�X'j]]4��Dgems/bundler-2.3.27/lib/bundler/templates/Executablenu�[���PK*"#[�SJLL1��Dgems/bundler-2.3.27/lib/bundler/templates/gems.rbnu�[���PK*"#[^6)g&&G4�Dgems/bundler-2.3.27/lib/bundler/templates/newgem/circleci/config.yml.ttnu�[���PK*"#[�5B��?��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/bin/console.ttnu�[���PK*"#[����=��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/bin/setup.ttnu�[���PK*"#[���QQ?��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/LICENSE.txt.ttnu�[���PK*"#[z���FF>��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/exe/newgem.ttnu�[���PK*"#[��M��G7�Dgems/bundler-2.3.27/lib/bundler/templates/newgem/ext/newgem/newgem.c.ttnu�[���PK*"#[9��5ffI��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/ext/newgem/extconf.rb.ttnu�[���PK*"#[�?����G��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/ext/newgem/newgem.h.ttnu�[���PK*"#[/���++?��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/rubocop.yml.ttnu�[���PK*"#[Ӟ�G��@H�Dgems/bundler-2.3.27/lib/bundler/templates/newgem/standard.yml.ttnu�[���PK*"#[�]���Mp�Dgems/bundler-2.3.27/lib/bundler/templates/newgem/github/workflows/main.yml.ttnu�[���PK*"#[
z�^�	�	=��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/README.md.ttnu�[���PK*"#[�lq559��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/rspec.ttnu�[���PK*"#[؊s�;��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/Gemfile.ttnu�[���PK*"#[,��
P��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.ttnu�[���PK*"#[�M-n��P��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/test/minitest/test_helper.rb.ttnu�[���PK*"#[q��{33Q��Dgems/bundler-2.3.27/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.ttnu�[���PK*"#[G�>J��Qh�Dgems/bundler-2.3.27/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.ttnu�[���PK*"#[���_ccF~�Dgems/bundler-2.3.27/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.ttnu�[���PK*"#[��~~>WEgems/bundler-2.3.27/lib/bundler/templates/newgem/travis.yml.ttnu�[���PK*"#[!5��PP@CEgems/bundler-2.3.27/lib/bundler/templates/newgem/CHANGELOG.md.ttnu�[���PK*"#[Ҧ+���GEgems/bundler-2.3.27/lib/bundler/templates/newgem/spec/spec_helper.rb.ttnu�[���PK*"#[32
���GEgems/bundler-2.3.27/lib/bundler/templates/newgem/spec/newgem_spec.rb.ttnu�[���PK*"#[A�ܶ�AyEgems/bundler-2.3.27/lib/bundler/templates/newgem/gitlab-ci.yml.ttnu�[���PK*"#[z�y��<�Egems/bundler-2.3.27/lib/bundler/templates/newgem/Rakefile.ttnu�[���PK*"#[��Br==A�Egems/bundler-2.3.27/lib/bundler/templates/newgem/lib/newgem.rb.ttnu�[���PK*"#[��I�Egems/bundler-2.3.27/lib/bundler/templates/newgem/lib/newgem/version.rb.ttnu�[���PK*"#[!�b--B=Egems/bundler-2.3.27/lib/bundler/templates/newgem/newgem.gemspec.ttnu�[���PK*"#[N��meeB�Egems/bundler-2.3.27/lib/bundler/templates/newgem/sig/newgem.rbs.ttnu�[���PK*"#[g2����=�Egems/bundler-2.3.27/lib/bundler/templates/newgem/gitignore.ttnu�[���PK*"#[]�y<Egems/bundler-2.3.27/lib/bundler/templates/Executable.bundlernu�[���PK*"#[�!
!
:x(Egems/bundler-2.3.27/lib/bundler/installer/gem_installer.rbnu�[���PK*"#[��y��?3Egems/bundler-2.3.27/lib/bundler/installer/parallel_installer.rbnu�[���PK*"#[�aboXX7[PEgems/bundler-2.3.27/lib/bundler/installer/standalone.rbnu�[���PK*"#[|��YY/\Egems/bundler-2.3.27/lib/bundler/vendored_uri.rbnu�[���PK*"#[)PY�\\6�\Egems/bundler-2.3.27/lib/bundler/similarity_detector.rbnu�[���PK*"#[�� �7�dEgems/bundler-2.3.27/lib/bundler/gem_version_promoter.rbnu�[���PK*"#[jIUKxx+�|Egems/bundler-2.3.27/lib/bundler/spec_set.rbnu�[���PK*"#[a�#Y(ϐEgems/bundler-2.3.27/lib/bundler/index.rbnu�[���PK*"#[x�7��)3�Egems/bundler-2.3.27/lib/bundler/worker.rbnu�[���PK*"#[h����-�Egems/bundler-2.3.27/lib/bundler/deployment.rbnu�[���PK*"#[��2885<�Egems/bundler-2.3.27/lib/bundler/lazy_specification.rbnu�[���PK*"#[�Q���)�)/��Egems/bundler-2.3.27/lib/bundler/rubygems_ext.rbnu�[���PK*"#[ZP��((5�Egems/bundler-2.3.27/lib/bundler/stub_specification.rbnu�[���PK*"#[���__8�Fgems/bundler-2.3.27/lib/bundler/match_remote_metadata.rbnu�[���PK*"#[���t/�/�AgFgems/bundler-2.3.27/lib/bundler/vendor/fileutils/lib/fileutils.rbnu�[���PK*"#[l��HYYA�Fgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo.rbnu�[���PK*"#[��N��Fgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rbnu�[���PK*"#[��޳ttH��Fgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/errors.rbnu�[���PK*"#[�.mV��V��Fgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rbnu�[���PK*"#[Ի�HHY��Fgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rbnu�[���PK*"#[�X�Acc]�Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rbnu�[���PK*"#[@G�{��Y�Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rbnu�[���PK*"#[:ʘ!��f�Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rbnu�[���PK*"#[���D""^]Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rbnu�[���PK*"#[D�Njoog
Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rbnu�[���PK*"#[5	�V&Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rbnu�[���PK*"#[�	?=WW^�4Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rbnu�[���PK*"#[�ۦ���b�9Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rbnu�[���PK*"#[9DD�??\�FGgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rbnu�[���PK*"#[~��J�NGgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rbnu�[���PK*"#[+��4��L!UGgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rbnu�[���PK*"#[!gpt[[`h\Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rbnu�[���PK*"#[��=����LSmGgems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rbnu�[���PK*"#[c�Ou((G`�Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/state.rbnu�[���PK*"#[��/:� � R��Ggems/bundler-2.3.27/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rbnu�[���PK*"#[`�<�
�
M6Hgems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool.rbnu�[���PK*"#[�Y�r66U>+Hgems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rbnu�[���PK*"#[���ffU�+Hgems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rbnu�[���PK*"#[r���[[Y�1Hgems/bundler-2.3.27/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rbnu�[���PK*"#[�c��
�
5�CHgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri.rbnu�[���PK*"#[�M/���=�QHgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/version.rbnu�[���PK*"#[c`7MM;�RHgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/https.rbnu�[���PK*"#[墣.E.EDsUHgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rbnu�[���PK*"#[��I;�Hgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ldaps.rbnu�[���PK*"#[q��lrrD��Hgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rbnu�[���PK*"#[�"%i  <��Hgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/mailto.rbnu�[���PK*"#[��qv�	�	:�Hgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/http.rbnu�[���PK*"#[�i/9D�Hgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ftp.rbnu�[���PK*"#[�6��p	p	8��Hgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ws.rbnu�[���PK*"#[�*?��J�J<�Igems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/common.rbnu�[���PK*"#[N��229�RIgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/wss.rbnu�[���PK*"#[M}����:�UIgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/file.rbnu�[���PK*"#[0C?E��:�^Igems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/ldap.rbnu�[���PK*"#[6��ؖؖ=�vIgems/bundler-2.3.27/lib/bundler/vendor/uri/lib/uri/generic.rbnu�[���PK+"#[(@Y�:�:9�
Jgems/bundler-2.3.27/lib/bundler/vendor/tsort/lib/tsort.rbnu�[���PK+"#[C�}�m�mU�HJgems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rbnu�[���PK+"#[�(ц��`�Jgems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rbnu�[���PK+"#[hO8��Zr�Jgems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rbnu�[���PK+"#[6�lffg��Jgems/bundler-2.3.27/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rbnu�[���PK+"#[���q@q@7~�Jgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor.rbnu�[���PK+"#[D�x�,,?VKgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/version.rbnu�[���PK+"#[U7gR * *?�Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions.rbnu�[���PK+"#[~��3�3Q�2Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rbnu�[���PK+"#[mX���
�
P�fKgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rbnu�[���PK+"#[te�))KuKgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/create_file.rbnu�[���PK+"#[,;��		I��Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/directory.rbnu�[���PK+"#[O�&��O.�Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rbnu�[���PK+"#[s	��mmK��Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/actions/create_link.rbnu�[���PK+"#[��}e�
�
=��Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/error.rbnu�[���PK+"#[Y�t}}I��Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rbnu�[���PK+"#[�dq=77L�Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rbnu�[���PK+"#[�LWX#X#<��Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/util.rbnu�[���PK+"#[����`�`<i�Kgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/base.rbnu�[���PK+"#[��LuvvC�HLgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/rake_compat.rbnu�[���PK+"#[u���		]tQLgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rbnu�[���PK+"#[(��_b'b'>[Lgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/runner.rbnu�[���PK+"#[��홇�CՂLgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/line_editor.rbnu�[���PK+"#[_-[�IIBτLgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/invocation.rbnu�[���PK+"#[�Le1	1	=��Lgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell.rbnu�[���PK+"#[.����B(�Lgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell/html.rbnu�[���PK+"#[1�UyXXC1�Lgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell/color.rbnu�[���PK+"#[��W|Y<Y<C��Lgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/shell/basic.rbnu�[���PK+"#[#I`i#i#=�	Mgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/group.rbnu�[���PK+"#[ˤ��

F�-Mgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/options.rbnu�[���PK+"#[i�GJMgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/argument.rbnu�[���PK+"#[��llH�QMgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/arguments.rbnu�[���PK+"#[�aq���E}dMgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser/option.rbnu�[���PK+"#[�;��?�vMgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/command.rbnu�[���PK+"#[�ᡇ++F��Mgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/nested_context.rbnu�[���PK+"#[����>!�Mgems/bundler-2.3.27/lib/bundler/vendor/thor/lib/thor/parser.rbnu�[���PK+"#[�	II;�Mgems/bundler-2.3.27/lib/bundler/vendor/tmpdir/lib/tmpdir.rbnu�[���PK+"#[���__-͞Mgems/bundler-2.3.27/lib/bundler/dependency.rbnu�[���PK+"#[_��mwmw-��Mgems/bundler-2.3.27/lib/bundler/definition.rbnu�[���PK+"#[�j�{��2S#Ngems/bundler-2.3.27/lib/bundler/friendly_errors.rbnu�[���PK+"#[���2�3Ngems/bundler-2.3.27/lib/bundler/lockfile_parser.rbnu�[���PK+"#[�8�9%_%_"(PNgems/bundler-2.3.27/lib/bundler.rbnu�[���PK+"#[
i	����Ngems/rdoc-6.4.1.1/exe/rdocnuȯ��PK+"#[�7r����Ngems/rdoc-6.4.1.1/exe/rinuȯ��PK+"#[�X��MM%��Ngems/rdoc-6.4.1.1/lib/rdoc/version.rbnu�[���PK+"#[��p��,G�Ngems/rdoc-6.4.1.1/lib/rdoc/markup/heading.rbnu�[���PK+"#[�ھ��/��Ngems/rdoc-6.4.1.1/lib/rdoc/markup/attributes.rbnu�[���PK+"#[��ԄEE)�Ngems/rdoc-6.4.1.1/lib/rdoc/markup/list.rbnu�[���PK+"#[hP)1��8��Ngems/rdoc-6.4.1.1/lib/rdoc/markup/to_joined_paragraph.rbnu�[���PK,"#[ �'n�&�&,��Ngems/rdoc-6.4.1.1/lib/rdoc/markup/to_html.rbnu�[���PK,"#[u�a1��*��Ngems/rdoc-6.4.1.1/lib/rdoc/markup/to_bs.rbnu�[���PK,"#[V���,�Ngems/rdoc-6.4.1.1/lib/rdoc/markup/to_test.rbnu�[���PK,"#[�����*iOgems/rdoc-6.4.1.1/lib/rdoc/markup/table.rbnu�[���PK,"#[�e�M��4�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/to_html_snippet.rbnu�[���PK,"#[�Т���7�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/indented_paragraph.rbnu�[���PK,"#[� t{ll0�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/to_markdown.rbnu�[���PK,"#[f�Q`66,�-Ogems/rdoc-6.4.1.1/lib/rdoc/markup/to_ansi.rbnu�[���PK,"#[�F�VV-36Ogems/rdoc-6.4.1.1/lib/rdoc/markup/to_label.rbnu�[���PK,"#[�C�"==,�=Ogems/rdoc-6.4.1.1/lib/rdoc/markup/include.rbnu�[���PK,"#[WY���-AOgems/rdoc-6.4.1.1/lib/rdoc/markup/document.rbnu�[���PK,"#[�fcr��.tNOgems/rdoc-6.4.1.1/lib/rdoc/markup/list_item.rbnu�[���PK,"#[���;;)�UOgems/rdoc-6.4.1.1/lib/rdoc/markup/rule.rbnu�[���PK,"#[ߦo��1@WOgems/rdoc-6.4.1.1/lib/rdoc/markup/attr_changer.rbnu�[���PK,"#[%�F��.IYOgems/rdoc-6.4.1.1/lib/rdoc/markup/formatter.rbnu�[���PK,"#[.�����,woOgems/rdoc-6.4.1.1/lib/rdoc/markup/to_rdoc.rbnu�[���PK,"#[ʘw�		/ŊOgems/rdoc-6.4.1.1/lib/rdoc/markup/to_tt_only.rbnu�[���PK,"#[�M����(B�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/raw.rbnu�[���PK,"#[��սd(d(6��Ogems/rdoc-6.4.1.1/lib/rdoc/markup/attribute_manager.rbnu�[���PK,"#[�y ��/L�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/hard_break.rbnu�[���PK,"#[�t�ԇ�/i�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/blank_line.rbnu�[���PK,"#[N�_���0O�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/block_quote.rbnu�[���PK,"#[TZL���9��Ogems/rdoc-6.4.1.1/lib/rdoc/markup/to_table_of_contents.rbnu�[���PK,"#[���a{{5��Ogems/rdoc-6.4.1.1/lib/rdoc/markup/to_html_crossref.rbnu�[���PK,"#[[n�A##-��Ogems/rdoc-6.4.1.1/lib/rdoc/markup/verbatim.rbnu�[���PK,"#[|����4Q�Ogems/rdoc-6.4.1.1/lib/rdoc/markup/regexp_handling.rbnu�[���PK,"#[d����.��Ogems/rdoc-6.4.1.1/lib/rdoc/markup/paragraph.rbnu�[���PK,"#[v���!�!0��Ogems/rdoc-6.4.1.1/lib/rdoc/markup/pre_process.rbnu�[���PK,"#[�W��.�Pgems/rdoc-6.4.1.1/lib/rdoc/markup/attr_span.rbnu�[���PK,"#[��<��8�8+�Pgems/rdoc-6.4.1.1/lib/rdoc/markup/parser.rbnu�[���PK,"#[
!�V#�JPgems/rdoc-6.4.1.1/lib/rdoc/erbio.rbnu�[���PK,"#[F�v�EE OPgems/rdoc-6.4.1.1/lib/rdoc/rd.rbnu�[���PK,"#[T��߆�"�]Pgems/rdoc-6.4.1.1/lib/rdoc/text.rbnu�[���PK,"#[Ȅ���(�|Pgems/rdoc-6.4.1.1/lib/rdoc/anon_class.rbnu�[���PK,"#[}{�})�)�%�}Pgems/rdoc-6.4.1.1/lib/rdoc/options.rbnu�[���PK,"#[�at��)�)#Qgems/rdoc-6.4.1.1/lib/rdoc/stats.rbnu�[���PK,"#[4[@D��"B-Qgems/rdoc-6.4.1.1/lib/rdoc/i18n.rbnu�[���PK,"#[�&“��%B.Qgems/rdoc-6.4.1.1/lib/rdoc/require.rbnu�[���PK,"#[����#\2Qgems/rdoc-6.4.1.1/lib/rdoc/mixin.rbnu�[���PK,"#[�$�yy%�=Qgems/rdoc-6.4.1.1/lib/rdoc/context.rbnu�[���PK,"#[n��=�Qgems/rdoc-6.4.1.1/lib/rdoc/generator/pot/message_extractor.rbnu�[���PK,"#[�jl{��4��Qgems/rdoc-6.4.1.1/lib/rdoc/generator/pot/po_entry.rbnu�[���PK,"#[��.�Qgems/rdoc-6.4.1.1/lib/rdoc/generator/pot/po.rbnu�[���PK,"#[&���+�Qgems/rdoc-6.4.1.1/lib/rdoc/generator/pot.rbnu�[���PK,"#[��r�
�
I[�Qgems/rdoc-6.4.1.1/lib/rdoc/generator/template/json_index/js/navigation.jsnu�[���PK,"#[P�^���Gx�Qgems/rdoc-6.4.1.1/lib/rdoc/generator/template/json_index/js/searcher.jsnu�[���PK,"#[^��W�Rgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtmlnu�[���PK,"#[��>�q�qK/Rgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttfnu�[���PK,"#[䍒�TtTtSvuSgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttfnu�[���PK-"#[^b��SM�Tgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttfnu�[���PK-"#[�՞�w�wM�Wgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttfnu�[���PK-"#[Z��o�oQ!Xgems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttfnu�[���PK-"#[��I���V��Ygems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttfnu�[���PK-"#[�TB��N�
\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtmlnu�[���PK-"#[[�L�>>B\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/index.rhtmlnu�[���PK-"#[�3�^^D�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_footer.rhtmlnu�[���PK-"#[B�Y��B�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/class.rhtmlnu�[���PK-"#[	O2]]O�)\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtmlnu�[���PK-"#[
N��NNN\+\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtmlnu�[���PK-"#[��QCCN(-\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtmlnu�[���PK-"#[鿶�N�.\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/table_of_contents.rhtmlnu�[���PK-"#[^mqMl5\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtmlnu�[���PK-"#[E`��M�6\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtmlnu�[���PK-"#[5����N9\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtmlnu�[���PK-"#[��CX;\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/js/search.jsnu�[���PK-"#[��13	3	E�G\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/js/darkfish.jsnu�[���PK-"#[g:��N�Q\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtmlnu�[���PK-"#[{wj�I�S\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/servlet_root.rhtmlnu�[���PK-"#[h˟�eeK>[\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/tag_green.pngnu�[���PK-"#[�=V��U^\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngnu�[���PK-"#[�S�Er_\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bug.pngnu�[���PK-"#[0���G�b\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/brick.pngnu�[���PK-"#[$V���M(e\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngnu�[���PK-"#[�Z�mmLtf\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/page_green.pngnu�[���PK-"#[���(VVQ]i\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/page_white_text.pngnu�[���PK-"#[�P��H4k\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/delete.pngnu�[���PK-"#[Os~���Ewn\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/add.pngnu�[���PK-"#[�CCJUUI�q\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/package.pngnu�[���PK-"#[(?�Y��N�u\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bullet_black.pngnu�[���PK-"#[���<XXJ�v\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/tag_blue.pngnu�[���PK-"#[��AaaM�~\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/transparent.pngnu�[���PK-"#[��Q��R�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifnu�[���PK-"#[J���F�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/find.pngnu�[���PK-"#[
�OOH!�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/plugin.pngnu�[���PK-"#[=k��T�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngnu�[���PK-"#[>�)oHHO=�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/wrench_orange.pngnu�[���PK-"#[7��F�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/zoom.pngnu�[���PK-"#["�55R.�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/page_white_width.pngnu�[���PK-"#[��U�ttJ�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/arrow_up.pngnu�[���PK-"#[R�7���Lӧ\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/brick_link.pngnu�[���PK-"#[��bbHK�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/wrench.pngnu�[���PK-"#[�ErrF%�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/date.pngnu�[���PK."#[#۸�PPF
�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/images/ruby.pngnu�[���PK."#[���zzLӳ\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtmlnu�[���PK."#[�޹�Pɵ\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtmlnu�[���PK."#[3����M�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtmlnu�[���PK."#[��o�'�'CD�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/css/rdoc.cssnu�[���PK."#[;9Iv��De�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/css/fonts.cssnu�[���PK."#[`	e��A�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/page.rhtmlnu�[���PK."#[����OOK�\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtmlnu�[���PK."#[��e]]B��\gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_head.rhtmlnu�[���PK."#[*�f���L�]gems/rdoc-6.4.1.1/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtmlnu�[���PK."#[ДU�



.�]gems/rdoc-6.4.1.1/lib/rdoc/generator/markup.rbnu�[���PK."#[�q���2�]gems/rdoc-6.4.1.1/lib/rdoc/generator/json_index.rbnu�[���PK."#[��P�
Q
Q0�2]gems/rdoc-6.4.1.1/lib/rdoc/generator/darkfish.rbnu�[���PK."#[f�=w��*L�]gems/rdoc-6.4.1.1/lib/rdoc/generator/ri.rbnu�[���PK."#[�I��#$#$)v�]gems/rdoc-6.4.1.1/lib/rdoc/method_attr.rbnu�[���PK."#[ʥ9e��%�]gems/rdoc-6.4.1.1/lib/rdoc/tom_doc.rbnu�[���PK."#[x�����"�]gems/rdoc-6.4.1.1/lib/rdoc/task.rbnu�[���PK."#[�-�%%)�]gems/rdoc-6.4.1.1/lib/rdoc/code_object.rbnu�[���PK."#[S�2��'�	^gems/rdoc-6.4.1.1/lib/rdoc/i18n/text.rbnu�[���PK."#[KzVf	f	)\^gems/rdoc-6.4.1.1/lib/rdoc/i18n/locale.rbnu�[���PK."#[(�.�Z�Z#^gems/rdoc-6.4.1.1/lib/rdoc/store.rbnu�[���PK."#[X�yъp�p$z^gems/rdoc-6.4.1.1/lib/rdoc/markup.rbnu�[���PK."#[v�T�DODO*��^gems/rdoc-6.4.1.1/lib/rdoc/class_module.rbnu�[���PK."#[�刊--'�:_gems/rdoc-6.4.1.1/lib/rdoc/generator.rbnu�[���PK."#[�/��%B_gems/rdoc-6.4.1.1/lib/rdoc/include.rbnu�[���PK."#[����$C_gems/rdoc-6.4.1.1/lib/rdoc/extend.rbnu�[���PK."#[Wud<)	)	&D_gems/rdoc-6.4.1.1/lib/rdoc/markdown.rbnu�[���PK."#[e�3��*�Megems/rdoc-6.4.1.1/lib/rdoc/token_stream.rbnu�[���PK."#[�H"--'�Zegems/rdoc-6.4.1.1/lib/rdoc/top_level.rbnu�[���PK."#[#��@@)qegems/rdoc-6.4.1.1/lib/rdoc/stats/quiet.rbnu�[���PK."#[�
����+�tegems/rdoc-6.4.1.1/lib/rdoc/stats/verbose.rbnu�[���PK."#[9)-$00*yegems/rdoc-6.4.1.1/lib/rdoc/stats/normal.rbnu�[���PK."#[�M���-�egems/rdoc-6.4.1.1/lib/rdoc/context/section.rbnu�[���PK."#[g�*���*��egems/rdoc-6.4.1.1/lib/rdoc/code_objects.rbnu�[���PK."#[�R5���*��egems/rdoc-6.4.1.1/lib/rdoc/ghost_method.rbnu�[���PK."#[zk�3� � (p�egems/rdoc-6.4.1.1/lib/rdoc/any_method.rbnu�[���PK."#[c��7��%��egems/rdoc-6.4.1.1/lib/rdoc/comment.rbnu�[���PK."#[|y����*��egems/rdoc-6.4.1.1/lib/rdoc/single_class.rbnu�[���PK."#[OG�!�!�/��egems/rdoc-6.4.1.1/lib/rdoc/markdown/entities.rbnu�[���PK."#[�GF�M$M$/>�fgems/rdoc-6.4.1.1/lib/rdoc/markdown/literals.rbnu�[���PK."#[p��-}}#��fgems/rdoc-6.4.1.1/lib/rdoc/alias.rbnu�[���PK."#[epC0��)��fgems/rdoc-6.4.1.1/lib/rdoc/meta_method.rbnu�[���PK."#[�W,���*��fgems/rdoc-6.4.1.1/lib/rdoc/normal_class.rbnu�[���PK."#[a�g���+u�fgems/rdoc-6.4.1.1/lib/rdoc/rubygems_hook.rbnu�[���PK."#[��/s-5-5"��fgems/rdoc-6.4.1.1/lib/rdoc/rdoc.rbnu�[���PK."#[Pw_�{{-)ggems/rdoc-6.4.1.1/lib/rdoc/cross_reference.rbnu�[���PK."#[󈗢��+�Cggems/rdoc-6.4.1.1/lib/rdoc/normal_module.rbnu�[���PK."#[��y��&Jggems/rdoc-6.4.1.1/lib/rdoc/encoding.rbnu�[���PK."#[bb�]]&ZYggems/rdoc-6.4.1.1/lib/rdoc/constant.rbnu�[���PK."#[L���)
hggems/rdoc-6.4.1.1/lib/rdoc/erb_partial.rbnu�[���PK."#[
[>		"�iggems/rdoc-6.4.1.1/lib/rdoc/attr.rbnu�[���PK."#[:�ܶ�'Ryggems/rdoc-6.4.1.1/lib/rdoc/parser/rd.rbnu�[���PK."#[?�S����&_{ggems/rdoc-6.4.1.1/lib/rdoc/parser/c.rbnu�[���PK."#[�7��33)�hgems/rdoc-6.4.1.1/lib/rdoc/parser/text.rbnu�[���PK."#[/��>�>5;
hgems/rdoc-6.4.1.1/lib/rdoc/parser/ripper_state_lex.rbnu�[���PK."#[���U��+qIhgems/rdoc-6.4.1.1/lib/rdoc/parser/simple.rbnu�[���PK."#[�4QՆ
�
/wOhgems/rdoc-6.4.1.1/lib/rdoc/parser/ruby_tools.rbnu�[���PK."#[�_A��-\Zhgems/rdoc-6.4.1.1/lib/rdoc/parser/markdown.rbnu�[���PK."#[��X�����)�\hgems/rdoc-6.4.1.1/lib/rdoc/parser/ruby.rbnu�[���PK."#[h\�;!;!.�Higems/rdoc-6.4.1.1/lib/rdoc/parser/changelog.rbnu�[���PK."#[�(�0�0%Jjigems/rdoc-6.4.1.1/lib/rdoc/servlet.rbnu�[���PK."#[W�nYY ��igems/rdoc-6.4.1.1/lib/rdoc/ri.rbnu�[���PK."#[�h��}�}.1�igems/rdoc-6.4.1.1/lib/rdoc/rd/inline_parser.rbnu�[���PK."#[�]��'5jgems/rdoc-6.4.1.1/lib/rdoc/rd/inline.rbnu�[���PK."#[���X�X-!jgems/rdoc-6.4.1.1/lib/rdoc/rd/block_parser.rbnu�[���PK."#[��VU}
}
+9zjgems/rdoc-6.4.1.1/lib/rdoc/known_classes.rbnu�[���PK."#[��n�==%�jgems/rdoc-6.4.1.1/lib/rdoc/ri/task.rbnu�[���PK."#[��tUU&��jgems/rdoc-6.4.1.1/lib/rdoc/ri/store.rbnu�[���PK."#[V�nrr*N�jgems/rdoc-6.4.1.1/lib/rdoc/ri/formatter.rbnu�[���PK."#[�Ų^^&�jgems/rdoc-6.4.1.1/lib/rdoc/ri/paths.rbnu�[���PK."#[���(	�	�'Νjgems/rdoc-6.4.1.1/lib/rdoc/ri/driver.rbnu�[���PK."#[��YJJ$.2kgems/rdoc-6.4.1.1/lib/rdoc/parser.rbnu�[���PK."#[8�j_���Nkgems/rdoc-6.4.1.1/lib/rdoc.rbnu�[���PK."#[�L���-�dkgems/io-console-0.5.11/lib/io/console/size.rbnu�[���PK."#[I��>>�fkcache/rackup-2.1.0.gemnu�[���PK."#[�"�����kcache/rack-3.0.8.gemnu�[���PK."#[������1Mmcache/ruby-lsapi-5.6.gemnu�[���PK((�cyn