PK!/^8m8mlib/json/ext/parser.sonuȯELF>@@xf@8@UU ]] ]  ]] ]  $$PtdQQQQtdRtd]] ] GNU;7rX (Q;4 @ 479BE|ŷ|!qX Lo?l\X)K 1u#a z8 R"y?qa c c <xa  @ E__gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesrb_str_buf_newrb_str_buf_catrb_utf8_encodingrb_enc_associaterb_ary_new2rb_ary_pushrb_hash_foreachrb_ary_entryrb_funcallrb_str_intern__stack_chk_failruby_xrealloc2ruby_xmalloc2rb_check_typerb_scan_argsrb_convert_typerb_string_valuerb_hash_arefrb_fix2intrb_str_duprb_eTypeErrorrb_raiserb_eArgErrorruby_xfreerb_gc_mark_mayberuby_xmallocrb_data_object_allocmemcpyrb_cstr2inumrb_cstr_to_dblrb_float_new_in_heaprb_class_new_instancerb_hash_newrb_hash_asetrb_ary_newInit_parserrb_requirerb_define_modulerb_define_module_underrb_cObjectrb_define_class_underrb_path2classrb_define_alloc_funcrb_define_methodrb_const_getrb_str_newrb_intern2libruby.so.2.0libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.14GLIBC_2.4gui ii ] ] ] ] _ _ _ _ _ $_ ,_ -_ .`  ` (` 0` 8` @`  H`  P`  X`  ``  h` p` x` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `  a !a "a #a % a &(a '0a (8a )@a *Ha +Pa .Xa /`a 0ha 1pa 2xa 3HHN Ht{H5N %N @%N h%N h%N h%N h%N h%zN h%rN h%jN hp%bN h`%ZN h P%RN h @%JN h 0%BN h %:N h %2N h%*N h%"N h%N h%N h% N h%N h%M h%M h%M hp%M h`%M hP%M h@%M h0%M h %M h%M h%M h%M h %M h!%M h"%M h#%M h$%zM h%%rM h&%jM h'p%bM h(`%ZM h)P%RM h*@%JM h+0%BM h, H@M H=2M UH)HHw]HdK Ht]@H M H=M UH)HHHH?HHu]HGK Ht]H@=L u'H=7K UHt H=H h]L @f.H=H t&HJ HtUH=H H]WKf.HF; xIwH42@x;DGNEx,H:xHHH HL HH fD@f.AWIAVIAUATUH1SHH8dH%(HD$(1HL$*L9IM'H]GE1;"t_MPtLeXIWU8t E4H1AHDHL$(dH3 %(=H8[]A\A]A^A_@IMoM9`AG<"t/<\uMoM9AG3I6H5,LILhIWL9;AG<@1H|$(dH3<%(H8[]A\A]A^A_< t < t <wII]L9tAE<"H~ HL9uf>*HL9uHL9x*t/|HHCL9WS t"/HCL9)S*t5/tf.8 tHL9uD8*fHL9uHL9<*tHo! H HuH= H HUk{M I׮J-aI2池Ⓟb0 R)U0n 2 :Ԋ~ v0bk>Y}^9P0\Kx:Z^Op#Q՘\h\, O64 դcJHXLd$h>SBTǑ p{ʈ9!_9>K:[nE׽My%]2?A^*̝[zؔ%(JtHv %ƹ@<"$)<35 QubPցnTdޒ1RጭAS£s2>"LVE*֜r(wӈaT4i;OWGw6@ĽG9_Qcsj'X8@OF-Qsn%_ϥn:{r 5ɗ'y=bٿ~ɞSwD N"bqzMޛŹgoWbE2}\/7y⽪h/.Ck-;.|_NϨŤוrƱ L_|/ٙ\j6aC8E74XdP_+$asi>3XfїңoѲưOӑr4i3Y"QF w0To 7LՆzi>3}N_f}5;k?ZJ VlK1w 6P#U҄=ipQye˱gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.gnu_debuglink.gnu_debugdata $o<( 00p08oJ J tEo @T ^B  8h@@c``n@@N1tEE zEE QQRR] ]] ]] ]] ]] ] _ _@` `a aaaxePK!HHlib/json/ext/generator.sonuȯELF>@@8@,o,o 0}0} 0} p P}P} P}  $$Ptd```  QtdRtd0}0} 0} GNUhMzȷre2JJB$@ BDFBE|qXt)N BJeRBuC v+ { 4px8[a c+8 R"M\j )(    Z L __gmon_start___init_fini_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_Jv_RegisterClassesrb_funcallrb_check_typeruby_xmallocruby_xrealloc2ruby_xmalloc2memcpyruby_xfreerb_str_newrb_utf8_encodingrb_enc_associaterb_hash_arefrb_hash_newrb_obj_classrb_class_namerb_hash_asetrb_str_duprb_str_catrb_str_concatrb_str_internrb_ivar_setrb_ivar_getrb_ary_entryrb_string_value_cstrrb_iv_getrb_str_substrrb_intern2__stack_chk_failrb_convert_typerb_eArgErrorrb_raiserb_scan_argsrb_data_object_allocrb_string_value_ptrrb_path2class__isinf__isnanrb_cHashrb_cArrayrb_cStringrb_cFixnumrb_cBignumrb_cFloatrb_respond_torb_cFalseClassrb_cNilClassrb_cTrueClassrb_cSymbol__ctype_b_locrb_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.0libpthread.so.0librt.so.1libdl.so.2libcrypt.so.1libm.so.6libc.so.6_edata__bss_start_endGLIBC_2.3GLIBC_2.14GLIBC_2.4GLIBC_2.2.5 ii .8ii Cui M0} 8} pH} H} p x          ' ) + 0 1 3 8 9 : A  ( 0 8 @ H  P  X  `  h p x          Ȁ Ѐ ؀  ! " # $ % & ( * ,( -0 .8 /@ 2H 4P 5X 6` 7h :p ;x < = > ? @HHj HtH5"k %$k @%"k h%k h%k h% k h%k h%j h%j h%j hp%j h`%j h P%j h @%j h 0%j h %j h %j h%j h%j h%j h%j h%j h%j h%zj h%rj h%jj hp%bj h`%Zj hP%Rj h@%Jj h0%Bj h %:j h%2j h%*j h%"j h %j h!%j h"% j h#%j h$%i h%%i h&%i h'p%i h(`%i h)P%i h*@%i h+0%i h, %i h-%i h.%i h/%i h0Hi H=i UH)HHw]HLg Ht]@Hii H=bi UH)HHHH?HHu]Hg Ht]H@=)i u'H=og UHt H=d h]i @f.H=d t&Hg HtUH=rd H]WKf.HAf WfWf0WG@f.HH ^j H5i 1sUHSH H H߾HHm H~HH[]@f.S HHC [HHDUHSH HHm H߾HH]xH[]fDS HbHC [H@xHDUH SHH:HC H@rH[]Df.S HHC [xrHHЃDf.S HHC [xqHHЃDf.S HHC [xpHHЃDf.S HrHC [HxhHHЃ@f.UHSH H:Hm H߾)HHHEhH[]S HHC [H@hHDSHH HDH@H@H@H[fATIUHSHtSHOIT$HH)H9v:HHHH)H9rH9vI|$HkI\$ID$[]A\H?I $ID$IL$Df.U1SHHHtHH@HHHH[]Ðf.SHHHtNH[EDUSHHHwHHHJHHHH[]DATUHSH lHLe [H+H% unHHI|$@uHtID$@[]A\Ht H% HH{tH{HIl$HID$@[]A\DHkf.ATUHSH HLe H+H% unHHI|$0uHtID$0[]A\Ht H% HH{tH{H)Il$8ID$0[]A\DHkf.ATUHSH HLe H+H% u~HHI|$ u-HtSID$ ID$([]A\Ht &H% HH{tH{HiIl$(ID$ []A\DHkf.ATUHSH LHLe ;H+H% u~HHI|$u-HtID$ID$[]A\Ht fH% HH{tH{HIl$ID$[]A\DHkf.ATUHSH HLe {H+H% u~HHI<$u.HtI$ID$[]A\fHt H% HH{tH{HIl$I$[]A\fDHkf.SHH?HtOH{HtAH{ Ht3H{0Ht%H{@HtH{PHtH{XHtH{`HtH[@SHHOH=;.HHcH=]9HþHH5a H[1UDATUHSdHHHH5Ja H=[b I11LHHH=8H5a HH1H=3;HžkHHH=H[]A\DAU1I1ATUSHHHH5"a HHH5y:HH5_` HIĺ1HRHuJH='8HHnHHLHHH[]A\A]@H5_ HH[]LMA\A]1f.U11SHHHH5I` H5_ HHź1HHu@H=m7HHH\HHH[]HH5I_ HH[H1]1AWAVAUATUSHH(H<$dH%(HD$1& HIH5] Ls HH<$111HHD$HD$HH9L-9_ HH.1H1LHHD$ &HIAH|$HH<$HyH|$IWISH+LHLHE `HEH9cIvI>H5x^ HLHH mIvI~H5I^ HLHH FIv(I~ YH5^ HLHH Iv8I~02H5] HLHH IvHI~@ H5] HLHH A~pH5] LHHHH A~qH5`] LHHHH A~rH53] LHHHH bIVhH5'] LHTHH BIVxH5\ LHTHH "IH5l\ LHHTH HL$dH3 %(LuBH([]A\A]A^A_DLxH='4@H [ HHDAUIATI USHH 3H3LIm GHHzH5K\ HHH HwH5 \ HHH HH5[ HHH ]HH5[ HHH :HH5[ HHH HL%t[ H5-[ 1HEhdHII LHGL%Z H5Z 1HExHII LHL%Z H5Z 1HII LHusH5Z HHH LH5Z HHEpHH +H5|Z HHEqHH HLErH[]A\A]fLHHIsHIMZLNLHHHEx@LH}HqHEh@HǾHD$HD$L A L`HxIt$Le8HE0f.HǾHD$HD$L A iL`HxIt$LeHHE@f.HǾHD$~HD$L A L`HxIt$7Le(HE )f.HǾHD$.HD$L A L`HxIt$LeHEf.HǾHD$HD$L A t%L`HxIt$LeHEGfDIHxAIt$DIHxAIt$nf.IHxAIt$f.IHxAIt$f.IHxAIt$f.H _/HS/LHH^HIT H5r2H81pHǾHD$HD$HHEhDHǾHD$HD$HHEx"DATI UHSHHdH%(HD$1SHC H.LHH@hdHǀ1&H4$HtHDHT$dH3%(Hu H[]A\SHHHAuR@u\@unD1AHt HAt 1HfGAtHH 1[HxA@t1HAfW@t@AHS H2HC Hx@Ht [HpH [H=-1fS HHC Hx0Ht [Hp8[H=B-1fS HHC Hx Ht [Hp([H=-1yfS HrHC HxHt [HpK[H=,19fS H2HC H8Ht[Hp @[H=,1fATIHUHSH;H{H{HLHk[]A\Df.AT USHH[ HHkXIHHEHHEHU,HEHk`HHEHHEHU:HsHEHt HSH{`HuXHkPHtWHEHRHEHU,Hs@HEHtHSHH{PHt[]LA\fD롐HHCPDHHCX fHHC`&f.SIgfffffffHF/H dH%(HD$1HIIH?HH1H)fMHMAIHH?HH)HHH)H HA@uHxVI@LL9v$f.1HHH9@pQwLL)tLHD$dH3%(uH [MAAA-SHHH|$Ht$HL$H u,HHHL$t HHPH[f.HQf.UHSHHH>,HHuHtHHD$HD$H[]AWAVAUATIUHSHH8dH%(HD$(1HCHSHH MR H56R "HC1A<$L ;A LhL`11MfD$$HD$ D$ D$ \D$!uHD$L5,AD-LE<wmfDPIcLL=Z(ALH)LLHL9HHEs:HAD-LE<v<"Q<\AL=(tL9HErLH)t It H{HHCHS"HCHD$(dH3%(H8[]A\A]A^A_f.LAL='H)3It HLL$LL$@AL=A'fDAL=/'fDAL='fDILhA)L|$LD$HL$LAHL$LD$qAL=&^fDA LxL`M1D$ M9fT$$D$ \D$!uA?L-C+@fATDKI9Hl$ fFHHM rv`HRHuAA H5c1@}}uf[]LA\HI\$`[u}]uUHSHHHH9HtHH[]f.H9 HH0Hu)H=R= Ht@f.UHH`SHdH%(HD$1HH4$H=M: ( HH$H<$HHHH=HHT$dH3%(uH[]fATUHHSHdH%(HD$1HVH4$H=9 HH$5H<$Lg hH4$HHLHsHKHT$dH3%(u H[]A\ f.ATUHH.SHdH%(HD$1HH4$H=9 HH$H<$Lg H4$HHLHSHHT$dH3%(u H[]A\mf.ATIUHS/HHHډL[]A\.@f.ATIUH1SHH57 dH%(HD$1"H&HHL1HH4$H=8 HHH$HT$dH3%(u H[]A\Df.UHHSHdH%(HD$1H8H4$H=7 x HH$H<$NH56 1HH1HHH]H%HT$dH3%(uH[]fUH=SH~H=^H5HH7 H5|HH6 vH= H6 H=]H]6 HI6 H:2 H5 H=6 HLH55HH6 H=6 HXH5wH=`6 HiH5HH=A6 HZH5 )H="6 HkH5 1 H=6 HH5 H=5 HH5 1H=5 HH5 H=5 HuH5 1H=5 HH5u xH=q5 HH5d 1\H=U5 HH5R =H=65 HH5> 1!H=5 H#H5+ H=4 HtH5 1H=4 HH5 H=4 HH5 1H=4 H}H5 1H=4 H1H5 1sH=l4 HH5 1WH=P4 HH5 1;H=44 HmH5 H=4 H.H5 1H=3 HH5 H=3 HH5h 1H=3 H'H5b H=3 HXH5Z H=3 HB H5E ]H=f3 HH5> 1QH=J3 H) H5 'H=03 H9H5 H=3 H:H5 H=2 HH5 H=2 H5 WH5 HH2 AH:H5 HH2 H=2 H5b H%H5o HHG2 ZH=K2 H5U HPH5: HH 2 %H=2 H5& HH5 HH1 H=1 H5 mHH5 HH1 H=1 H5 8HH5 HHS1 H=w1 H5 HH5 HǹH1 aH= 1 HH5= 2H=0 HtH5P H=0 HH5= 1H=0 H5; tH H5/ HH0 H=0 H5 ?HXH5 HHB0 H=~0 H5 HH5m HH0 XH=I0 H5 H5? HHH/ #H5. HH+ H8DH/ H. HMHV/ Hw. HH7/ HX. HH/ H9. HH. H. HqH. H- H:H. H- HH. H- HH}. H- HH^. H- H^H?. H`- H'H . HA- HH. H"- HH- H- HHs- H, HKH- H, HH- H, HHv- H, HHW- Hh, HoH8- HI, H8H- H*, HH, H , HH, H+ HH, H+ H\H, H+ H%H=Hb, -H~+ HHH=nHHǺ1HYH- H;+ Ht~H- H + HtKHl- H+ HuH=IH* H, H, H[]H= H* fDH=H* eH=wH* HH=OHh* H=\/HP* H=6H8* PH=  H * H=ϿH* H=诿H) H=菿H) tH=uoH) =H=K OH) H=$/H) H=Hx) H=H`) aH=ϾHH) *H=o 课H0) H=y 菾H) H=O oH) H= OH( NH=/H( H=Z H( H= H( H=ϽH( rH=诽Hp( ;H=k菽HX( H=oH@( H=&OH(( H=@ 1H( HOHH0123456789abcdefC*@instance_variablesto_hashHashto_h01\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?quirks_mode?quirks_modequirks_mode=depthdepth=buffer_initial_lengthbuffer_initial_length=configuremerge[][]=generateGeneratorMethodsObjectto_jsonArrayFixnumBignumFloatStringincludedto_json_rawto_json_raw_objectExtendjson_createTrueClassFalseClassNilClassMULTILINEto_snewallow_nanascii_onlyunpackcreate_idextendkey?__send__respond_to?matchkeysduputf-8findEncodingencodingencodeSAFE_STATE_PROTOTYPEopts has to be hash like or convertable into a hashpartial character in source, but hit endsource sequence is illegal/malformed utf-8source sequence is illegal/malformed utf8only generation of JSON objects or arrays allowedp0`XH8(pP01234567890    ; @ (0PhPp8Xx@pк Px@@` ` @`p@H@ @@`P0 0 X P 0 @ p    P@ h p  @0 h `8zRx $ FJ w?;*3$"DصB\$tBADL iFA@ AR$@:ADL aFAXAR$X1AIG XFA,p!ARL!ARl!AR"AR$8ADL dAAȶARȶ7Au,BDD V ABA $DH5ACG gAAl`AU$`;AAG lDA<xBAD P AGA w ABF <BAD P AGA w ABF <4XBAD Y AGH w ABF <tظBAD Y AGH w ABF <XBAD W AGJ v ABG ع|Av8[AN,4xBAD ABLdBIA A(J0 (F ABBE K(D AMB4xAEJ X HAO KDKL BBB B(A0A8G` 8A0A(B BBBF <<KBEI A(D@ (A ABBC 4|BIF G0k  AABA Aj E 7A[ L A7A[ L A7A[ L A47A[ L AT7AZ M A,t81BGD `AB,HFBFA  AEG $hAU0 AA $ VAG | AK $$X9ADG0jAALLpwBBB B(I0D8Gp 8A0A(B BBBK ,BGA  AEB 4P BDA M0N  GABL (BEE D(H02 (A BBEL Z (A BBEL K (A BBBN M (A EBBI A (A QBBI W (A BBBR W (A EBBO L (A BBBM LHBEB B(D0A8D 8A0A(B BBBD L x*BEB B(A0D8Dc 8A0A(B BBBG ,d X=BDA kDB, hBAA  AEI D 8ADM N DAK o CAM K DKF $ AK u AA $4 AK u AA $\ pAK u AA 4 BAK D0u  AABA 4 @BAK D0v  AABA , AKD0o AAA 4$ BAK D0w  AABA 4\ pBAK D0w  AABA , 2BDF ^AB4 BDH D0u  AABA , PAKD0 AAA ,, AHD  AAH pH}    Z0} 8} o0 Y  (0 o ooJ oP} &6FVfv&6FVfv&6FVfvgenerator.so.debugc7zXZִF!t//]?Eh=ڊ2NsK|6oL *i_b}~}$!)zʥG2H)$w-ysTls^X҈ݶչ klLGT{PXM?%% *ʑ}_NP&6X%׭d ەy$C| 2n*='9Qwyb?Ihp;?J= j”?0cC{l;-); i碎u6z4 kc4C!TL[du˞%]"uv>S}\oxD/K 'Bҡs`']XP o=̡4 dO!Dд6u2z/'o"]R/fGuJLɒv{>O%B~+m8!=Kc=Nچ5$־Q gMraii$vb~O4sDj I79}6qmީIgo;l{8 6/%k.timVizV(5oYxۤ>0y JFR28m;!F LS i4"jR"Ut$3-F"Me![~Le8kc&J*O vX!(h}zd&gdMgo&<;?3^d=4i_bkA nWLP;NGB#[Ď%aX Kΐ6@$,-Rct?r*m˵!7C "LT0)Q棦j8%f(; =9(Y1Yx2Ӱv: >CcVE(M8?K(XΓL]8LΗ }H[Ngqiy-B3 '?n%[zN-#.Y=E݊ݠR"`{GC}|SLso)wڢEzV0C4P0}RWt+FMv: njASHJhJ%!ݙ!)MTZp؛M] $z+UBR~W_J>U UAٺK+`p>+#=eg)k)ZwuS]C*7D:'QrQ,rH:)BFׯX B%!^fO1 .?SkngYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.data.rel.ro.dynamic.got.got.plt.bss.gnu_debuglink.gnu_debugdata $o<( 000Y8oJ J Eo PT00^B((hc nBtZZ zZZ  `` bb\ 0} 0}8} 8}@} @}H} H}P} P} p p  PK!#pM lib/json.rbnu[require 'json/common' ## # = JavaScript Object Notation (JSON) # # JSON is a lightweight data-interchange format. It is easy for us # humans to read and write. Plus, equally simple for machines to generate or parse. # JSON is completely language agnostic, making it the ideal interchange format. # # Built on two universally available structures: # 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array. # 2. An ordered list of values. More commonly called an _array_, vector, sequence or list. # # To read more about JSON visit: http://json.org # # == Parsing JSON # # To parse a JSON string received by another application or generated within # your existing application: # # require 'json' # # my_hash = JSON.parse('{"hello": "goodbye"}') # puts my_hash["hello"] => "goodbye" # # Notice the extra quotes '' around the hash notation. Ruby expects # the argument to be a string and can't convert objects like a hash or array. # # Ruby converts your string into a hash # # == Generating JSON # # Creating a JSON string for communication or serialization is # just as simple. # # require 'json' # # my_hash = {:hello => "goodbye"} # puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}" # # Or an alternative way: # # require 'json' # puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}" # # JSON.generate only allows objects or arrays to be converted # to JSON syntax. to_json, however, accepts many Ruby classes # even though it acts only as a method for serialization: # # require 'json' # # 1.to_json => "1" # module JSON require 'json/version' begin require 'json/ext' rescue LoadError require 'json/pure' end end PK! lib/json/ext.rbnu[if ENV['SIMPLECOV_COVERAGE'].to_i == 1 require 'simplecov' SimpleCov.start do add_filter "/tests/" end end 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!u;;lib/json/add/date_time.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end require 'date' # DateTime serialization/deserialization class DateTime # Deserializes JSON string by converting year y, month m, # day d, hour H, minute M, second S, # offset of and Day of Calendar Reform sg 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 y, month m, # day d, hour H, minute M, second S, # offset of and Day of Calendar Reform sg as JSON string def to_json(*args) as_json.to_json(*args) end end PK!88lib/json/add/bigdecimal.rbnu[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(*) as_json.to_json end end PK!c\lib/json/add/complex.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end defined?(::Complex) or require 'complex' class Complex def self.json_create(object) Complex(object['r'], object['i']) end def as_json(*) { JSON.create_id => self.class.name, 'r' => real, 'i' => imag, } end def to_json(*) as_json.to_json end end PK!տ"lib/json/add/struct.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end # Struct serialization/deserialization class Struct # Deserializes JSON string by constructing new Struct object with values # v serialized by to_json. 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 v as a JSON string. # Only named structs are supported. def to_json(*args) as_json.to_json(*args) end end PK!"ulib/json/add/regexp.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end # Regexp serialization/deserialization class Regexp # Deserializes JSON string by constructing new Regexp object with source # s (Regexp or String) and options o serialized by # to_json 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 o and source s # (Regexp or String) as JSON string def to_json(*) as_json.to_json end end PK!x`lib/json/add/rational.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end defined?(::Rational) or require 'rational' class Rational def self.json_create(object) Rational(object['n'], object['d']) end def as_json(*) { JSON.create_id => self.class.name, 'n' => numerator, 'd' => denominator, } end def to_json(*) as_json.to_json end end PK!2>>lib/json/add/core.rbnu[# 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!**lib/json/add/ostruct.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end require 'ostruct' # OpenStruct serialization/deserialization class OpenStruct # Deserializes JSON string by constructing new Struct object with values # v serialized by to_json. 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 v as a # JSON string. def to_json(*args) as_json.to_json(*args) end end PK!1txxlib/json/add/date.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end require 'date' # Date serialization/deserialization class Date # Deserializes JSON string by converting Julian year y, month # m, day d and Day of Calendar Reform sg 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 y, month m, day # d and Day of Calendar Reform sg as JSON string def to_json(*args) as_json.to_json(*args) end end PK!Ң  lib/json/add/time.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end # Time serialization/deserialization 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 instance_methods.include?(: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!;ht++lib/json/add/exception.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end # Exception serialization/deserialization class Exception # Deserializes JSON string by constructing new Exception object with message # m and backtrace b serialized with to_json 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 m and backtrace array # b as JSON string def to_json(*args) as_json.to_json(*args) end end PK!}Vlib/json/add/range.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end # Range serialization/deserialization class Range # Deserializes JSON string by constructing new Range object with arguments # a serialized by to_json. 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 a which # include first (integer), last (integer), and # exclude_end? (boolean) as JSON string. def to_json(*args) as_json.to_json(*args) end end PK!#oolib/json/add/symbol.rbnu[unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end # Symbol serialization/deserialization 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 string value stored in the object to a Symbol def self.json_create(o) o['s'].to_sym end end PK! zPPlib/json/generic_object.rbnu[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 end self.json_creatable = false def to_hash table end def [](name) table[name.to_sym] end def []=(name, value) __send__ "#{name}=", value end 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!H%K?K?lib/json/common.rbnu[require 'json/version' require 'json/generic_object' module JSON class << self # 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 [](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. attr_reader :parser # Set the JSON parser class _parser_ to be used by JSON. def parser=(parser) # :nodoc: @parser = parser remove_const :Parser if JSON.const_defined_in?(self, :Parser) 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 JSON.const_defined_in?(p, c) 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 const_set :FAST_STATE_PROTOTYPE, State.new( :indent => '', :space => '', :object_nl => "", :array_nl => "", :max_nesting => false ) const_set :PRETTY_STATE_PROTOTYPE, State.new( :indent => ' ', :space => ' ', :object_nl => "\n", :array_nl => "\n" ) ensure $VERBOSE = old end # Returns the JSON generator module that is used by JSON. This is # either JSON::Ext::Generator or JSON::Pure::Generator. attr_reader :generator # Returns the JSON generator state class that is used by JSON. This is # either JSON::Ext::Generator::State or JSON::Pure::Generator::State. attr_accessor :state # This is create identifier, which is used to decide if the _json_create_ # hook of a class should be called. It defaults to 'json_class'. attr_accessor :create_id end self.create_id = 'json_class' 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 # 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 # Parse the JSON document _source_ into a Ruby data structure and return it. # # _opts_ can have the following # keys: # * *max_nesting*: The maximum depth of nesting allowed in the parsed data # structures. Disable depth checking with :max_nesting => false. It defaults # to 100. # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in # defiance of RFC 4627 to be parsed by the Parser. This option defaults # to false. # * *symbolize_names*: If set to true, returns symbols for the names # (keys) in a JSON object. Otherwise strings are returned. Strings are # the default. # * *create_additions*: If set to false, the Parser doesn't create # additions even if a matching class and create_id was found. This option # defaults to true. # * *object_class*: Defaults to Hash # * *array_class*: Defaults to Array def parse(source, opts = {}) Parser.new(source, opts).parse end # Parse the JSON document _source_ into a Ruby data structure and return it. # The bang version of the parse method defaults to the more dangerous values # for the _opts_ hash, so be sure only to parse trusted _source_ documents. # # _opts_ can have the following keys: # * *max_nesting*: The maximum depth of nesting allowed in the parsed data # structures. Enable depth checking with :max_nesting => anInteger. The parse! # methods defaults to not doing max depth checking: This can be dangerous # if someone wants to fill up your stack. # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in # defiance of RFC 4627 to be parsed by the Parser. This option defaults # to true. # * *create_additions*: If set to false, the Parser doesn't create # additions even if a matching class and create_id was found. This option # defaults to true. def parse!(source, opts = {}) opts = { :max_nesting => false, :allow_nan => true }.update(opts) Parser.new(source, opts).parse end # Generate a JSON document from the Ruby data structure _obj_ and return # it. _state_ is # * a JSON::State object, # * or a Hash like object (responding to to_hash), # * or an object convertible into a hash by a to_h method, # that is used as or to configure a State object. # # It defaults to a state object, that creates the shortest possible JSON text # in one line, checks for circular data structures and doesn't allow NaN, # Infinity, and -Infinity. # # A _state_ hash can have the following keys: # * *indent*: a string used to indent levels (default: ''), # * *space*: a string that is put after, a : or , delimiter (default: ''), # * *space_before*: a string that is put before a : pair delimiter (default: ''), # * *object_nl*: a string that is put at the end of a JSON object (default: ''), # * *array_nl*: a string that is put at the end of a JSON array (default: ''), # * *allow_nan*: true if NaN, Infinity, and -Infinity should be # generated, otherwise an exception is thrown if these values are # encountered. This options defaults to false. # * *max_nesting*: The maximum depth of nesting allowed in the data # structures from which JSON is to be generated. Disable depth checking # with :max_nesting => false, it defaults to 100. # # See also the fast_generate for the fastest creation method with the least # amount of sanity checks, and the pretty_generate method for some # defaults for pretty output. def generate(obj, opts = nil) if State === opts state, opts = opts, nil else state = SAFE_STATE_PROTOTYPE.dup 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: # Generate a JSON document from the Ruby data structure _obj_ and return it. # This method disables the checks for circles in Ruby objects. # # *WARNING*: Be careful not to pass any Ruby data structures with circles as # _obj_ argument because this will cause JSON to go into an infinite loop. def fast_generate(obj, opts = nil) if State === opts state, opts = opts, nil else state = FAST_STATE_PROTOTYPE.dup 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: # Generate a JSON document from the Ruby data structure _obj_ and return it. # The returned document is a prettier form of the document returned by # #unparse. # # The _opts_ argument can be used to configure the generator. See the # generate method for a more detailed explanation. def pretty_generate(obj, opts = nil) if State === opts state, opts = opts, nil else state = PRETTY_STATE_PROTOTYPE.dup 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 # The global default options for the JSON.load method: # :max_nesting: false # :allow_nan: true # :quirks_mode: true attr_accessor :load_default_options end self.load_default_options = { :max_nesting => false, :allow_nan => true, :quirks_mode => true, :create_additions => true, } # Load a ruby data structure from a JSON _source_ and return it. A source can # either be a string-like object, an IO-like object, or an object responding # to the read method. If _proc_ was given, it will be called with any nested # Ruby object as an argument recursively in depth first order. To modify the # default options pass in the optional _options_ argument as well. # # 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. The # default options for the parser can be changed via the load_default_options # method. # # This method is part of the implementation of the load/dump interface of # Marshal and YAML. 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[:quirks_mode] && (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) 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 # The global default options for the JSON.dump method: # :max_nesting: false # :allow_nan: true # :quirks_mode: true attr_accessor :dump_default_options end self.dump_default_options = { :max_nesting => false, :allow_nan => true, :quirks_mode => true, } # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns # the result. # # If anIO (an IO-like object or an object that responds to the write method) # was given, the resulting JSON is written to it. # # If the number of nested arrays or objects exceeds _limit_, an ArgumentError # exception is raised. This argument is similar (but not exactly the # same!) to the _limit_ argument in Marshal.dump. # # The default options for the generator can be changed via the # dump_default_options method. # # This method is part of the implementation of the load/dump interface of # Marshal and YAML. 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 limit and opts.update(:max_nesting => limit) result = generate(obj, opts) if anIO anIO.write result anIO else result end rescue JSON::NestingError raise ArgumentError, "exceed depth limit" end # Swap consecutive bytes of _string_ in place. def self.swap!(string) # :nodoc: 0.upto(string.size / 2) do |i| break unless string[2 * i + 1] string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i] end string end # Shortuct for iconv. if ::String.method_defined?(:encode) && # XXX Rubinius doesn't support ruby 1.9 encoding yet defined?(RUBY_ENGINE) && RUBY_ENGINE != 'rbx' then # Encodes string using Ruby's _String.encode_ def self.iconv(to, from, string) string.encode(to, from) end else require 'iconv' # Encodes string using _iconv_ library def self.iconv(to, from, string) Iconv.conv(to, from, string) end end if ::Object.method(:const_defined?).arity == 1 def self.const_defined_in?(modul, constant) modul.const_defined?(constant) end else def self.const_defined_in?(modul, constant) modul.const_defined?(constant, false) end 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 # Ouputs _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!kFmlib/json/version.rbnu[module JSON # JSON version VERSION = '1.7.7' 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!/^8m8mlib/json/ext/parser.sonuȯPK!HH~mlib/json/ext/generator.sonuȯPK!#pM lib/json.rbnu[PK! =lib/json/ext.rbnu[PK!u;;xlib/json/add/date_time.rbnu[PK!88 lib/json/add/bigdecimal.rbnu[PK!c\~lib/json/add/complex.rbnu[PK!տ"Slib/json/add/struct.rbnu[PK!"ulib/json/add/regexp.rbnu[PK!x`lib/json/add/rational.rbnu[PK!2>>lib/json/add/core.rbnu[PK!**clib/json/add/ostruct.rbnu[PK!1txxlib/json/add/date.rbnu[PK!Ң  !lib/json/add/time.rbnu[PK!;ht++%lib/json/add/exception.rbnu[PK!}VQ)lib/json/add/range.rbnu[PK!#oo,lib/json/add/symbol.rbnu[PK! zPPe/lib/json/generic_object.rbnu[PK!H%K?K?3lib/json/common.rbnu[PK!kFmslib/json/version.rbnu[PKt