erlang_rb 2.0.2 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.markdown +4 -4
- data/lib/erlang.rb +89 -67
- data/tests/erlang_tests.rb +18 -10
- data.tar.gz.sig +0 -0
- metadata +25 -25
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82fd795948db72df73625ab7cef0f407018800b88d25e99a9a9a7a09d7ffbe8b
|
4
|
+
data.tar.gz: 1a049d6f1d488f86ef89450c5d258d389d25de4c7bdfb8bf7eb66802e36728fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c843ced9e5875d4439495a8fb9b193f2ea4672cfc86a682c4da2b23c6079d72920c607da8cc8c2afcc0b935da683f2ec2dc5fcfc5c2d30d03744c742dd084de5
|
7
|
+
data.tar.gz: 3497c55537d5a02e8aca60c3d54e733721370e011775f3425240aed59739b112a31551cf54a23cb31cd2a541b53ea505e15cd839c82fba7da6bbdf5f0229ad06
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.markdown
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
Erlang
|
2
|
-
|
1
|
+
Erlang External Term Format for Ruby
|
2
|
+
====================================
|
3
3
|
|
4
|
-
[](http://travis-ci.org/okeuday/erlang_rb)
|
5
4
|
|
6
|
-
|
5
|
+
|
6
|
+
Provides all encoding and decoding for the Erlang External Term Format
|
7
7
|
(as defined at [http://erlang.org/doc/apps/erts/erl_ext_dist.html](http://erlang.org/doc/apps/erts/erl_ext_dist.html))
|
8
8
|
in a single Ruby module.
|
9
9
|
|
data/lib/erlang.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# MIT License
|
5
5
|
#
|
6
|
-
# Copyright (c) 2011-
|
6
|
+
# Copyright (c) 2011-2022 Michael Truog <mjtruog at protonmail dot com>
|
7
7
|
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the "Software"),
|
@@ -25,11 +25,14 @@
|
|
25
25
|
#
|
26
26
|
|
27
27
|
require 'zlib'
|
28
|
+
require 'set'
|
28
29
|
|
29
30
|
# Erlang term classes listed alphabetically
|
30
31
|
|
31
32
|
module Erlang
|
32
33
|
|
34
|
+
@@UNDEFINED = 'undefined' # Change with set_undefined
|
35
|
+
|
33
36
|
class OtpErlangAtom
|
34
37
|
def initialize(value)
|
35
38
|
@value = value
|
@@ -52,6 +55,8 @@ module Erlang
|
|
52
55
|
raise OutputException, 'uint16 overflow', caller
|
53
56
|
end
|
54
57
|
else
|
58
|
+
# deprecated
|
59
|
+
# (not used in Erlang/OTP 26, i.e., minor_version 2)
|
55
60
|
if length <= 255
|
56
61
|
return "#{TAG_SMALL_ATOM_EXT.chr}#{length.chr}#{@value}"
|
57
62
|
elsif length <= 65535
|
@@ -76,7 +81,7 @@ module Erlang
|
|
76
81
|
end
|
77
82
|
alias eql? ==
|
78
83
|
end
|
79
|
-
|
84
|
+
|
80
85
|
class OtpErlangBinary
|
81
86
|
def initialize(value, bits = 8)
|
82
87
|
@value = value
|
@@ -112,7 +117,7 @@ module Erlang
|
|
112
117
|
end
|
113
118
|
alias eql? ==
|
114
119
|
end
|
115
|
-
|
120
|
+
|
116
121
|
class OtpErlangFunction
|
117
122
|
def initialize(tag, value)
|
118
123
|
@tag = tag
|
@@ -134,7 +139,7 @@ module Erlang
|
|
134
139
|
end
|
135
140
|
alias eql? ==
|
136
141
|
end
|
137
|
-
|
142
|
+
|
138
143
|
class OtpErlangList
|
139
144
|
def initialize(value, improper = false)
|
140
145
|
@value = value
|
@@ -216,7 +221,7 @@ module Erlang
|
|
216
221
|
end
|
217
222
|
alias eql? ==
|
218
223
|
end
|
219
|
-
|
224
|
+
|
220
225
|
class OtpErlangPort
|
221
226
|
def initialize(node, id, creation)
|
222
227
|
@node = node
|
@@ -250,7 +255,7 @@ module Erlang
|
|
250
255
|
end
|
251
256
|
alias eql? ==
|
252
257
|
end
|
253
|
-
|
258
|
+
|
254
259
|
class OtpErlangReference
|
255
260
|
def initialize(node, id, creation)
|
256
261
|
@node = node
|
@@ -295,7 +300,7 @@ module Erlang
|
|
295
300
|
end
|
296
301
|
|
297
302
|
# core functionality
|
298
|
-
|
303
|
+
|
299
304
|
def self.binary_to_term(data)
|
300
305
|
size = data.bytesize
|
301
306
|
if size <= 1
|
@@ -318,7 +323,7 @@ module Erlang
|
|
318
323
|
raise ParseException, 'missing data', e.backtrace
|
319
324
|
end
|
320
325
|
end
|
321
|
-
|
326
|
+
|
322
327
|
def self.term_to_binary(term, compressed = false)
|
323
328
|
data_uncompressed = term_to_binary_(term)
|
324
329
|
if compressed == false
|
@@ -341,11 +346,16 @@ module Erlang
|
|
341
346
|
"#{size_uncompressed_packed}#{data_compressed}"
|
342
347
|
end
|
343
348
|
end
|
344
|
-
|
349
|
+
|
350
|
+
# Elixir use can set to 'nil'
|
351
|
+
def self.set_undefined(value)
|
352
|
+
@@UNDEFINED = value
|
353
|
+
end
|
354
|
+
|
345
355
|
private
|
346
|
-
|
356
|
+
|
347
357
|
# binary_to_term implementation functions
|
348
|
-
|
358
|
+
|
349
359
|
def self.binary_to_term_(i, data)
|
350
360
|
tag = data[i].ord
|
351
361
|
i += 1
|
@@ -370,17 +380,7 @@ module Erlang
|
|
370
380
|
elsif tag == TAG_FLOAT_EXT
|
371
381
|
value = data[i,31].partition(0.chr)[0].to_f
|
372
382
|
return [i + 31, value]
|
373
|
-
elsif tag
|
374
|
-
j = data[i,2].unpack('n')[0]
|
375
|
-
i += 2
|
376
|
-
atom_name = data[i,j].force_encoding('ISO-8859-1')
|
377
|
-
if atom_name.valid_encoding?
|
378
|
-
return [i + j, atom_name.to_sym]
|
379
|
-
else
|
380
|
-
raise ParseException, 'invalid atom_name latin1', caller
|
381
|
-
end
|
382
|
-
elsif tag == TAG_NEW_PORT_EXT or \
|
383
|
-
tag == TAG_REFERENCE_EXT or tag == TAG_PORT_EXT
|
383
|
+
elsif Set[TAG_NEW_PORT_EXT,TAG_REFERENCE_EXT,TAG_PORT_EXT].include?(tag)
|
384
384
|
result = binary_to_atom(i, data)
|
385
385
|
i = result[0]; node = result[1]
|
386
386
|
id = data[i,4]
|
@@ -397,7 +397,7 @@ module Erlang
|
|
397
397
|
end
|
398
398
|
# tag == TAG_NEW_PORT_EXT or tag == TAG_PORT_EXT
|
399
399
|
return [i, OtpErlangPort.new(node, id, creation)]
|
400
|
-
elsif
|
400
|
+
elsif Set[TAG_NEW_PID_EXT, TAG_PID_EXT].include?(tag)
|
401
401
|
result = binary_to_atom(i, data)
|
402
402
|
i = result[0]; node = result[1]
|
403
403
|
id = data[i,4]
|
@@ -412,7 +412,7 @@ module Erlang
|
|
412
412
|
i += 1
|
413
413
|
end
|
414
414
|
return [i, OtpErlangPid.new(node, id, serial, creation)]
|
415
|
-
elsif
|
415
|
+
elsif Set[TAG_SMALL_TUPLE_EXT, TAG_LARGE_TUPLE_EXT].include?(tag)
|
416
416
|
if tag == TAG_SMALL_TUPLE_EXT
|
417
417
|
length = data[i].ord
|
418
418
|
i += 1
|
@@ -447,7 +447,7 @@ module Erlang
|
|
447
447
|
j = data[i,4].unpack('N')[0]
|
448
448
|
i += 4
|
449
449
|
return [i + j, OtpErlangBinary.new(data[i,j], 8)]
|
450
|
-
elsif
|
450
|
+
elsif Set[TAG_SMALL_BIG_EXT, TAG_LARGE_BIG_EXT].include?(tag)
|
451
451
|
if tag == TAG_SMALL_BIG_EXT
|
452
452
|
j = data[i].ord
|
453
453
|
i += 1
|
@@ -482,7 +482,7 @@ module Erlang
|
|
482
482
|
#arity = data[i].ord
|
483
483
|
i += 1
|
484
484
|
return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
|
485
|
-
elsif
|
485
|
+
elsif Set[TAG_NEWER_REFERENCE_EXT, TAG_NEW_REFERENCE_EXT].include?(tag)
|
486
486
|
j = data[i,2].unpack('n')[0] * 4
|
487
487
|
i += 2
|
488
488
|
result = binary_to_atom(i, data)
|
@@ -496,22 +496,6 @@ module Erlang
|
|
496
496
|
end
|
497
497
|
id = data[i,j]
|
498
498
|
return [i + j, OtpErlangReference.new(node, id, creation)]
|
499
|
-
elsif tag == TAG_SMALL_ATOM_EXT
|
500
|
-
j = data[i,1].ord
|
501
|
-
i += 1
|
502
|
-
atom_name = data[i,j].force_encoding('ISO-8859-1')
|
503
|
-
if atom_name.valid_encoding?
|
504
|
-
if atom_name == 'true'
|
505
|
-
tmp = true
|
506
|
-
elsif atom_name == 'false'
|
507
|
-
tmp = false
|
508
|
-
else
|
509
|
-
tmp = atom_name.to_sym
|
510
|
-
end
|
511
|
-
return [i + j, tmp]
|
512
|
-
else
|
513
|
-
raise ParseException, 'invalid atom_name latin1', caller
|
514
|
-
end
|
515
499
|
elsif tag == TAG_MAP_EXT
|
516
500
|
length = data[i,4].unpack('N')[0]
|
517
501
|
i += 4
|
@@ -539,23 +523,61 @@ module Erlang
|
|
539
523
|
result = binary_to_term_sequence(i, numfree, data)
|
540
524
|
i = result[0]#; free = result[1]
|
541
525
|
return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
|
542
|
-
elsif tag
|
526
|
+
elsif Set[TAG_ATOM_UTF8_EXT, TAG_ATOM_EXT].include?(tag)
|
543
527
|
j = data[i,2].unpack('n')[0]
|
544
528
|
i += 2
|
545
|
-
atom_name = data[i,j]
|
546
|
-
|
547
|
-
|
529
|
+
atom_name = data[i,j]
|
530
|
+
i = i + j
|
531
|
+
if atom_name == 'true'
|
532
|
+
return [i, true]
|
533
|
+
elsif atom_name == 'false'
|
534
|
+
return [i, false]
|
535
|
+
elsif atom_name == @@UNDEFINED
|
536
|
+
return [i, nil]
|
548
537
|
else
|
549
|
-
|
538
|
+
if tag == TAG_ATOM_UTF8_EXT
|
539
|
+
atom_name = atom_name.force_encoding('UTF-8')
|
540
|
+
if atom_name.valid_encoding?
|
541
|
+
return [i, atom_name.to_sym]
|
542
|
+
else
|
543
|
+
raise ParseException, 'invalid atom_name unicode', caller
|
544
|
+
end
|
545
|
+
else
|
546
|
+
atom_name = atom_name.force_encoding('ISO-8859-1')
|
547
|
+
if atom_name.valid_encoding?
|
548
|
+
return [i, OtpErlangAtom.new(atom_name)]
|
549
|
+
else
|
550
|
+
raise ParseException, 'invalid atom_name latin1', caller
|
551
|
+
end
|
552
|
+
end
|
550
553
|
end
|
551
|
-
elsif tag
|
554
|
+
elsif Set[TAG_SMALL_ATOM_UTF8_EXT, TAG_SMALL_ATOM_EXT].include?(tag)
|
552
555
|
j = data[i,1].ord
|
553
556
|
i += 1
|
554
|
-
atom_name = data[i,j]
|
555
|
-
|
556
|
-
|
557
|
+
atom_name = data[i,j]
|
558
|
+
i = i + j
|
559
|
+
if atom_name == 'true'
|
560
|
+
return [i, true]
|
561
|
+
elsif atom_name == 'false'
|
562
|
+
return [i, false]
|
563
|
+
elsif atom_name == @@UNDEFINED
|
564
|
+
return [i, nil]
|
557
565
|
else
|
558
|
-
|
566
|
+
if tag == TAG_SMALL_ATOM_UTF8_EXT
|
567
|
+
atom_name = atom_name.force_encoding('UTF-8')
|
568
|
+
if atom_name.valid_encoding?
|
569
|
+
return [i, atom_name.to_sym]
|
570
|
+
else
|
571
|
+
raise ParseException, 'invalid atom_name unicode', caller
|
572
|
+
end
|
573
|
+
else
|
574
|
+
atom_name = atom_name.force_encoding('ISO-8859-1')
|
575
|
+
if atom_name.valid_encoding?
|
576
|
+
return [i, OtpErlangAtom.new(atom_name)]
|
577
|
+
else
|
578
|
+
raise ParseException, 'invalid atom_name latin1', caller
|
579
|
+
end
|
580
|
+
end
|
559
581
|
end
|
560
582
|
elsif tag == TAG_COMPRESSED_ZLIB
|
561
583
|
size_uncompressed = data[i,4].unpack('N')[0]
|
@@ -579,7 +601,7 @@ module Erlang
|
|
579
601
|
raise ParseException, 'invalid tag', caller
|
580
602
|
end
|
581
603
|
end
|
582
|
-
|
604
|
+
|
583
605
|
def self.binary_to_term_sequence(i, length, data)
|
584
606
|
sequence = []
|
585
607
|
(0...length).each do |length_index|
|
@@ -591,7 +613,7 @@ module Erlang
|
|
591
613
|
end
|
592
614
|
|
593
615
|
# (binary_to_term Erlang term primitive type functions)
|
594
|
-
|
616
|
+
|
595
617
|
def self.binary_to_integer(i, data)
|
596
618
|
tag = data[i].ord
|
597
619
|
i += 1
|
@@ -607,7 +629,7 @@ module Erlang
|
|
607
629
|
raise ParseException, 'invalid integer tag', caller
|
608
630
|
end
|
609
631
|
end
|
610
|
-
|
632
|
+
|
611
633
|
def self.binary_to_pid(i, data)
|
612
634
|
tag = data[i].ord
|
613
635
|
i += 1
|
@@ -635,7 +657,7 @@ module Erlang
|
|
635
657
|
raise ParseException, 'invalid pid tag', caller
|
636
658
|
end
|
637
659
|
end
|
638
|
-
|
660
|
+
|
639
661
|
def self.binary_to_atom(i, data)
|
640
662
|
tag = data[i].ord
|
641
663
|
i += 1
|
@@ -671,9 +693,9 @@ module Erlang
|
|
671
693
|
raise ParseException, 'invalid atom tag', caller
|
672
694
|
end
|
673
695
|
end
|
674
|
-
|
696
|
+
|
675
697
|
# term_to_binary implementation functions
|
676
|
-
|
698
|
+
|
677
699
|
def self.term_to_binary_(term)
|
678
700
|
if term.kind_of?(String)
|
679
701
|
return string_to_binary(term)
|
@@ -689,15 +711,15 @@ module Erlang
|
|
689
711
|
return OtpErlangAtom.new(term.to_s).binary
|
690
712
|
elsif term.kind_of?(TrueClass)
|
691
713
|
return OtpErlangAtom.new(
|
692
|
-
'true'.force_encoding('
|
714
|
+
'true'.force_encoding('UTF-8')
|
693
715
|
).binary
|
694
716
|
elsif term.kind_of?(FalseClass)
|
695
717
|
return OtpErlangAtom.new(
|
696
|
-
'false'.force_encoding('
|
718
|
+
'false'.force_encoding('UTF-8')
|
697
719
|
).binary
|
698
720
|
elsif term.nil?
|
699
721
|
return OtpErlangAtom.new(
|
700
|
-
|
722
|
+
@@UNDEFINED.force_encoding('UTF-8')
|
701
723
|
).binary
|
702
724
|
elsif term.kind_of?(OtpErlangAtom)
|
703
725
|
return term.binary
|
@@ -719,7 +741,7 @@ module Erlang
|
|
719
741
|
end
|
720
742
|
|
721
743
|
# (term_to_binary Erlang term composite type functions)
|
722
|
-
|
744
|
+
|
723
745
|
def self.string_to_binary(term)
|
724
746
|
length = term.bytesize
|
725
747
|
if length == 0
|
@@ -738,7 +760,7 @@ module Erlang
|
|
738
760
|
raise OutputException, 'uint32 overflow', caller
|
739
761
|
end
|
740
762
|
end
|
741
|
-
|
763
|
+
|
742
764
|
def self.tuple_to_binary(term)
|
743
765
|
length = term.length
|
744
766
|
term_packed = term.map{ |element|
|
@@ -753,7 +775,7 @@ module Erlang
|
|
753
775
|
raise OutputException, 'uint32 overflow', caller
|
754
776
|
end
|
755
777
|
end
|
756
|
-
|
778
|
+
|
757
779
|
def self.hash_to_binary(term)
|
758
780
|
length = term.length
|
759
781
|
if length <= 4294967295
|
@@ -781,7 +803,7 @@ module Erlang
|
|
781
803
|
return bignum_to_binary(term)
|
782
804
|
end
|
783
805
|
end
|
784
|
-
|
806
|
+
|
785
807
|
def self.bignum_to_binary(term)
|
786
808
|
bignum = term.abs
|
787
809
|
if term < 0
|
@@ -811,7 +833,7 @@ module Erlang
|
|
811
833
|
end
|
812
834
|
|
813
835
|
# Exception classes listed alphabetically
|
814
|
-
|
836
|
+
|
815
837
|
class InputException < ArgumentError
|
816
838
|
end
|
817
839
|
|
@@ -820,7 +842,7 @@ module Erlang
|
|
820
842
|
|
821
843
|
class ParseException < SyntaxError
|
822
844
|
end
|
823
|
-
|
845
|
+
|
824
846
|
# tag values here http://www.erlang.org/doc/apps/erts/erl_ext_dist.html
|
825
847
|
TAG_VERSION = 131
|
826
848
|
TAG_COMPRESSED_ZLIB = 80
|
data/tests/erlang_tests.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# MIT License
|
6
6
|
#
|
7
|
-
# Copyright (c) 2014-
|
7
|
+
# Copyright (c) 2014-2022 Michael Truog <mjtruog at protonmail dot com>
|
8
8
|
# Copyright (c) 2009-2013 Dmitry Vasiliev <dima@hlabs.org>
|
9
9
|
#
|
10
10
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
@@ -119,18 +119,26 @@ class DecodeTestCase < Test::Unit::TestCase
|
|
119
119
|
assert_raise(Erlang::ParseException){
|
120
120
|
Erlang::binary_to_term("\x83d\0\1")
|
121
121
|
}
|
122
|
-
assert_equal(:'', Erlang::binary_to_term("\
|
123
|
-
assert_equal(:'', Erlang::binary_to_term("\
|
124
|
-
assert_equal(:test, Erlang::binary_to_term("\
|
125
|
-
assert_equal(:test, Erlang::binary_to_term("\
|
122
|
+
assert_equal(:'', Erlang::binary_to_term("\x83v\0\0"))
|
123
|
+
assert_equal(:'', Erlang::binary_to_term("\x83w\0"))
|
124
|
+
assert_equal(:test, Erlang::binary_to_term("\x83v\0\4test"))
|
125
|
+
assert_equal(:test, Erlang::binary_to_term("\x83w\4test"))
|
126
126
|
end
|
127
127
|
def test_binary_to_term_predefined_atoms
|
128
128
|
assert_equal(true,
|
129
129
|
Erlang::binary_to_term("\x83s\4true"))
|
130
130
|
assert_equal(false,
|
131
131
|
Erlang::binary_to_term("\x83s\5false"))
|
132
|
-
assert_equal(
|
132
|
+
assert_equal(false,
|
133
|
+
Erlang::binary_to_term("\x83w\5false"))
|
134
|
+
assert_equal(nil,
|
135
|
+
Erlang::binary_to_term("\x83s\11undefined"))
|
136
|
+
assert_equal(nil,
|
137
|
+
Erlang::binary_to_term("\x83w\11undefined"))
|
138
|
+
assert_equal(nil,
|
133
139
|
Erlang::binary_to_term("\x83d\0\11undefined"))
|
140
|
+
assert_equal(nil,
|
141
|
+
Erlang::binary_to_term("\x83v\0\11undefined"))
|
134
142
|
end
|
135
143
|
def test_binary_to_term_empty_list
|
136
144
|
assert_equal(Erlang::OtpErlangList.new([]),
|
@@ -175,7 +183,7 @@ class DecodeTestCase < Test::Unit::TestCase
|
|
175
183
|
assert_raise(Erlang::ParseException){
|
176
184
|
Erlang::binary_to_term("\x83l\0\0\0\0k")
|
177
185
|
}
|
178
|
-
lst = Erlang::binary_to_term("\x83l\0\0\0\
|
186
|
+
lst = Erlang::binary_to_term("\x83l\0\0\0\1jv\0\4tail")
|
179
187
|
assert(lst.kind_of?(Erlang::OtpErlangList))
|
180
188
|
assert_equal([Erlang::OtpErlangList.new([]), :tail], lst.value)
|
181
189
|
assert_equal(true, lst.improper)
|
@@ -586,9 +594,9 @@ class EncodeTestCase < Test::Unit::TestCase
|
|
586
594
|
Erlang::term_to_binary('test'))
|
587
595
|
end
|
588
596
|
def test_term_to_binary_predefined_atom
|
589
|
-
assert_equal("\
|
590
|
-
assert_equal("\
|
591
|
-
assert_equal("\
|
597
|
+
assert_equal("\x83w\4true", Erlang::term_to_binary(true))
|
598
|
+
assert_equal("\x83w\5false", Erlang::term_to_binary(false))
|
599
|
+
assert_equal("\x83w\x09undefined", Erlang::term_to_binary(nil))
|
592
600
|
end
|
593
601
|
def test_term_to_binary_short_integer
|
594
602
|
assert_equal("\x83a\0", Erlang::term_to_binary(0))
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erlang_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Truog
|
@@ -11,32 +11,32 @@ cert_chain:
|
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIESDCCArCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAnMSUwIwYDVQQDDBxtanRy
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
14
|
+
dW9nL0RDPXByb3Rvbm1haWwvREM9Y29tMB4XDTIyMTAxMjIwMDU0MloXDTIzMTAx
|
15
|
+
MjIwMDU0MlowJzElMCMGA1UEAwwcbWp0cnVvZy9EQz1wcm90b25tYWlsL0RDPWNv
|
16
|
+
bTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAL9nIaNAY7hDthCtaBzd
|
17
|
+
KhqiT5DXoVMqM/ya+Y676+M6WnUcqvsCJ3XvE0axG/0u0jAbu0XejTZ2/9NcETHf
|
18
|
+
N4T2bw7jA6Vnn+rN2gKk62KlEzQVxZN+zbNme6fsxQ6j+nc4kqB6s6pd8VdTElJz
|
19
|
+
goBHUm/wmFRIpcbd+MZRQz+OJASi7Swjx+r65cFG7Ik7BriTnJLoAnrso1dfAYCV
|
20
|
+
ptrn+OMq33MFKkxneu7FrZsaD7Qo0taKl7nenZmG+qCzvJfiprzMyE1JDGPJptmf
|
21
|
+
VpjCct+Zolwa1MS+W07VS09iSllQ2xQPjSeMkrjKmjss3+kig4oKYTRP6gpdbWd7
|
22
|
+
hWIn/h2mQ3OmGeAlq6rcN0p9PVTYTByRT773g21fJHPa3GpHGfXfz6fV2D3aG1/F
|
23
|
+
dUgJMiWjhuHQQSbLEHZpxyaN0siAzbmwpzOXs2slBX+v3VMiNPT2fvLYWIfg7sVn
|
24
|
+
oCmqqb7Y+1qqCh68O+0A6+AGQQm2j8BUwRxyMFft6jeCPwIDAQABo38wfTAJBgNV
|
25
|
+
HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUip5VZOKxMDY7Gw5PV5KjDOUB
|
26
|
+
aPAwIQYDVR0RBBowGIEWbWp0cnVvZ0Bwcm90b25tYWlsLmNvbTAhBgNVHRIEGjAY
|
27
|
+
gRZtanRydW9nQHByb3Rvbm1haWwuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQC8NHmm
|
28
|
+
ytJq5FerCrZhwcyUN+OkBP5xDO3N5Vv7v5AcJ8R4+XpEE0J+Xi5ZPNRwDcVVA1f3
|
29
|
+
QPYrzFhgAFh9Fj7vzeYJIe3gGEgLvJZe5t5sTQCg1O4hg97qUrXz894KUMYzxFxv
|
30
|
+
r5Ujpaa5jIeCRLLEoMRCj2LM7aTD0BJ4D9rjUpOguALeMDjXuRFpPG0V2bRBR5yX
|
31
|
+
FgoLpkThWNwOrjTqmnXnJSQcOJTJaTZkXuY/vXI/AcN7aGbDi8gifgvvS6Umju+z
|
32
|
+
VFSVwtQuPhU4ruToRGUseXOsPwwWnJPleiEX5RQOIJ4mGmHzx5FnoDYNlHkS8DTT
|
33
|
+
K+77PgOz8oMDmzrQlCx1FDWhgNqsImrLYcca7kcoINTasLWmvfz1xaBeP4MdCk0R
|
34
|
+
CUaImqpeG21iNKLYHcNZkGfepUpp4FHudbeQeaJj8R5ug+f402l7T4s3JCAOcVIY
|
35
|
+
MqZAStuHt2H1iR+JVSpFx1kkRJncIjtSnxUFd4MsBT083aOme9H/J+tb/YA=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date:
|
37
|
+
date: 2022-10-12 00:00:00.000000000 Z
|
38
38
|
dependencies: []
|
39
|
-
description: Erlang
|
39
|
+
description: Erlang External Term Format for Ruby
|
40
40
|
email: mjtruog@protonmail.com
|
41
41
|
executables: []
|
42
42
|
extensions: []
|
metadata.gz.sig
CHANGED
Binary file
|