randomperson 0.0.17 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/.gitignore +16 -0
  2. data/CHANGELOG +35 -0
  3. data/Manifest +72 -0
  4. data/README +324 -0
  5. data/gem-public_cert.pem +20 -0
  6. data/lib/randomperson/Names/AnyLast.rb +1 -1
  7. data/lib/randomperson/Names/BasqueFemaleFirst.rb +1 -1
  8. data/lib/randomperson/Names/BasqueLast.rb +1 -1
  9. data/lib/randomperson/Names/BasqueMaleFirst.rb +1 -1
  10. data/lib/randomperson/Names/BritishPrefix.rb +1 -1
  11. data/lib/randomperson/Names/EnglishFemaleFirst.rb +1 -1
  12. data/lib/randomperson/Names/EnglishLast.rb +1 -1
  13. data/lib/randomperson/Names/EnglishMaleFirst.rb +1 -1
  14. data/lib/randomperson/Names/FinnishFemaleFirst.rb +1 -1
  15. data/lib/randomperson/Names/FinnishLast.rb +1 -1
  16. data/lib/randomperson/Names/FinnishMaleFirst.rb +1 -1
  17. data/lib/randomperson/Names/FinnishPrefix.rb +1 -1
  18. data/lib/randomperson/Names/FrenchFemaleFirst.rb +1 -1
  19. data/lib/randomperson/Names/FrenchLast.rb +1 -1
  20. data/lib/randomperson/Names/FrenchMaleFirst.rb +1 -1
  21. data/lib/randomperson/Names/GermanFemaleFirst.rb +1 -1
  22. data/lib/randomperson/Names/GermanLast.rb +1 -1
  23. data/lib/randomperson/Names/GermanMaleFirst.rb +1 -1
  24. data/lib/randomperson/Names/ScottishFemaleFirst.rb +1 -1
  25. data/lib/randomperson/Names/ScottishLast.rb +1 -1
  26. data/lib/randomperson/Names/ScottishMaleFirst.rb +1 -1
  27. data/lib/randomperson/Names/ScottishPrefix.rb +1 -1
  28. data/lib/randomperson/Names/SpanishFemaleFirst.rb +1 -1
  29. data/lib/randomperson/Names/SpanishLast.rb +1 -1
  30. data/lib/randomperson/Names/SpanishMaleFirst.rb +1 -1
  31. data/lib/randomperson/Names/SpanishPrefix.rb +1 -1
  32. data/lib/randomperson/Names/SwedishFemaleFirst.rb +1 -1
  33. data/lib/randomperson/Names/SwedishLast.rb +1 -1
  34. data/lib/randomperson/Names/SwedishMaleFirst.rb +1 -1
  35. data/lib/randomperson/Names/ThaiFemaleFirst.rb +1 -1
  36. data/lib/randomperson/Names/ThaiFirst.rb +1 -1
  37. data/lib/randomperson/Names/ThaiLast.rb +1 -1
  38. data/lib/randomperson/Names/ThaiMaleFirst.rb +1 -1
  39. data/lib/randomperson/Names/ThaiRomanisedFemaleFirst.rb +1 -1
  40. data/lib/randomperson/Names/ThaiRomanisedLast.rb +1 -1
  41. data/lib/randomperson/Names/ThaiRomanisedMaleFirst.rb +1 -1
  42. data/lib/randomperson/Names/WelshFemaleFirst.rb +1 -1
  43. data/lib/randomperson/Names/WelshLast.rb +1 -1
  44. data/lib/randomperson/Names/WelshMaleFirst.rb +1 -1
  45. data/lib/randomperson/Names/WelshPrefix.rb +1 -1
  46. data/lib/randomperson/{Choice.rb → choice.rb} +5 -1
  47. data/lib/randomperson/{Generator.rb → generator.rb} +20 -2
  48. data/lib/randomperson/{Name.rb → name.rb} +0 -0
  49. data/lib/randomperson/person.rb +27 -0
  50. data/lib/randomperson/{Ratio.rb → ratio.rb} +0 -0
  51. data/lib/randomperson/version.rb +3 -0
  52. data/lib/randomperson.rb +21 -15
  53. data/randomperson.gemspec +6 -6
  54. data/spec/choice_spec.rb +13 -0
  55. data/spec/generator_spec.rb +13 -0
  56. data/spec/name_spec.rb +13 -0
  57. data/test/test_Choice.rb +140 -0
  58. data/test/test_Generator.rb +111 -0
  59. data.tar.gz.sig +0 -0
  60. metadata +74 -56
  61. metadata.gz.sig +0 -0
  62. data/lib/randomperson/Person.rb +0 -17
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # encoding: UTF-8
2
2
 
3
3
  module RandomPerson
4
4
  module Names
@@ -1,6 +1,7 @@
1
1
  module RandomPerson
2
2
 
3
3
  class Choice
4
+ require 'set'
4
5
 
5
6
  attr_accessor :malefirst, :femalefirst, :last, :gender_ratio, :age_lower, :age_upper, :prefix, :suffix #,:age_ratio
6
7
 
@@ -10,7 +11,10 @@ module RandomPerson
10
11
 
11
12
 
12
13
  @@available_classes = Set.new
13
-
14
+
15
+ # Initialize the class with the parameters for the population you want.
16
+ # @example
17
+ # choice = RandomPerson::Choice.new( {gender_ratio: [3,5] , age_lower:16, age_upper:35 } )
14
18
  def initialize( h={} )
15
19
  @gender_ratio = h[:gender_ratio] || [1,1] #default
16
20
  @age_lower = h[:age_lower] || 0
@@ -1,15 +1,24 @@
1
1
  module RandomPerson
2
2
 
3
3
  class Generator
4
-
4
+
5
+ require_relative './choice.rb'
6
+ require_relative './person.rb'
7
+
5
8
  attr_reader :generators
6
9
 
10
+ # Sets up a list of generators
11
+ # @example
12
+ # g = RandomPerson::Generator.new
7
13
  def initialize
8
14
  @generators = [ ]
9
15
  end
10
16
 
11
17
 
12
- #build a choice generator
18
+ # Build a choice generator
19
+ # @param [RandomPerson::Choice] choice A Choice object.
20
+ # @example
21
+ # g.make_generator choice
13
22
  def make_generator( choice )
14
23
  f = -> {
15
24
  g = Generator.pick_gender( choice.gender_ratio )
@@ -50,6 +59,15 @@ module RandomPerson
50
59
  return new_ratio
51
60
  end
52
61
 
62
+ # Takes a ratio and uses this to randomly select either a male or a female. To get only males or only females, pass in a 0 for either gender to make sure of getting the other gender for definite.
63
+ # @example To only get males:
64
+ # pick_gender( [1,0] )
65
+ # @example To only get females:
66
+ # pick_gender( [0,1] )
67
+ # @example To be likely to get 2 females to every male:
68
+ # pick_gender( [1,2] )
69
+ # @param [optional,Array<Integer,Integer>] ratio The ratio of males to females expressed in an array, e.g. [1,1] is (a chance of) one male for every female, [1,2] is one male to two females. The default is [1,1].
70
+ # @return [String] Returns a 'f' for female or an 'm' for male.
53
71
  def pick_gender( ratio=[1,1] ) #male first
54
72
  if ratio.length == 2
55
73
  return 'f' if ratio.first == 0
File without changes
@@ -0,0 +1,27 @@
1
+ module RandomPerson
2
+
3
+ # Your general person
4
+ class Person
5
+
6
+ attr_accessor :gender, :age, :dob, :first, :last, :prefix, :suffix
7
+
8
+ ## @param [optional,Hash] h A hash of the person's attributes
9
+ # @option h [String] :gender nil Gender, 'm' for male or 'f' for female
10
+ # @option h [Integer] :age nil Age
11
+ # @option h [Time] :dob nil Date of birth
12
+ # @option h [String] :first nil First name
13
+ # @option h [String] :last nil Last name
14
+ # @option h [String] :prefix nil Prefix e.g. Mr
15
+ # @option h [String] :suffix nil Suffix e.g. PhD
16
+ def initialize( h={} )
17
+ @gender = h[:gender] || nil
18
+ @age = h[:age] || nil
19
+ @dob = h[:dob] || nil
20
+ @first = h[:first] || nil
21
+ @last = h[:last] || nil
22
+ @prefix = h[:prefix] || nil
23
+ @suffix = h[:suffix] || nil
24
+ end
25
+
26
+ end
27
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ module RandomPerson
2
+ VERSION = "0.0.19"
3
+ end
data/lib/randomperson.rb CHANGED
@@ -1,17 +1,23 @@
1
- #require all the scaffolding
1
+ # encoding: UTF-8
2
+ module RandomPerson
2
3
 
3
- require 'set'
4
- require 'date'
4
+ #require all the scaffolding
5
+
6
+ require 'set'
7
+ require 'date'
8
+
9
+ require_relative './randomperson/version.rb'
10
+ require_relative './randomperson/ext/Array.rb'
11
+ require_relative './randomperson/ext/Date.rb'
12
+ require_relative './randomperson/ext/Enumerable.rb'
13
+ require_relative './randomperson/ext/Hash.rb'
14
+ require_relative './randomperson/ext/Kernel.rb'
15
+ require_relative './randomperson/ext/Set.rb'
16
+
17
+ require_relative './randomperson/choice.rb'
18
+ require_relative './randomperson/generator.rb'
19
+ require_relative './randomperson/name.rb'
20
+ require_relative './randomperson/person.rb'
21
+ #require_relative './randomperson/ratio.rb'
5
22
 
6
- require_relative 'randomperson/ext/Array.rb'
7
- require_relative 'randomperson/ext/Date.rb'
8
- require_relative 'randomperson/ext/Enumerable.rb'
9
- require_relative 'randomperson/ext/Hash.rb'
10
- require_relative 'randomperson/ext/Kernel.rb'
11
- require_relative 'randomperson/ext/Set.rb'
12
-
13
- require_relative 'randomperson/choice.rb'
14
- require_relative 'randomperson/generator.rb'
15
- require_relative 'randomperson/name.rb'
16
- require_relative 'randomperson/person.rb'
17
- #require_relative 'randomperson/ratio.rb'
23
+ end
data/randomperson.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib/', __FILE__)
3
3
  $:.unshift lib unless $:.include?(lib)
4
-
4
+ require 'randomperson/version'
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "randomperson"
@@ -9,16 +9,16 @@ Gem::Specification.new do |s|
9
9
  s.description = <<-EOF
10
10
  RandomPerson is a port to Ruby of Perl's Data::RandomPerson. Use it to generate random persons given various parameters, such as country, age and gender ratio.
11
11
  EOF
12
- s.version = "0.0.17"
12
+ s.version = RandomPerson::VERSION
13
13
  s.platform = Gem::Platform::RUBY
14
- s.require_paths << 'ext'
14
+ s.require_path = 'lib'
15
15
  s.required_ruby_version = ">= 1.9.1"
16
16
  s.author = "Iain Barnett"
17
- s.files = ['Rakefile', 'randomperson.gemspec']
18
- s.files += Dir['lib/**/*.rb']
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
20
  s.homepage = "http://github.com/yb66/RandomPerson"
20
21
  s.email = "iainspeed @nospam@ gmail.com"
21
- s.test_files = Dir.glob('test/*.t')
22
22
  s.signing_key = ENV['HOME'] + '/.ssh/gem-private_key.pem'
23
23
  s.cert_chain = [ENV['HOME'] + '/.ssh/gem-public_cert.pem']
24
24
  end
@@ -0,0 +1,13 @@
1
+ require 'rspec'
2
+ require_relative "../lib/randomperson/choice.rb"
3
+
4
+
5
+ module RandomPerson
6
+
7
+ describe Choice do
8
+
9
+ it "should not blow up on instatiation" do
10
+ Choice.new.should_not == nil
11
+ end
12
+ end # Choice
13
+ end # RandomPerson
@@ -0,0 +1,13 @@
1
+ require 'rspec'
2
+ require_relative "../lib/randomperson/generator.rb"
3
+
4
+
5
+ module RandomPerson
6
+
7
+ describe Generator do
8
+
9
+ it "should not blow up on instatiation" do
10
+ Generator.new.should_not == nil
11
+ end
12
+ end # Generator
13
+ end # RandomPerson
data/spec/name_spec.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'rspec'
2
+ require_relative "../lib/randomperson/name.rb"
3
+
4
+
5
+ module RandomPerson
6
+
7
+ describe Name do
8
+
9
+ it "should not blow up on instatiation" do
10
+ Name.new.should_not == nil
11
+ end
12
+ end # Name
13
+ end # RandomPerson
@@ -0,0 +1,140 @@
1
+ require 'test/unit'
2
+ require 'set'
3
+ require_relative '../lib/randomperson/ext/Set.rb'
4
+ require_relative '../lib/randomperson/ext/Enumerable.rb'
5
+ require_relative '../lib/randomperson/ext/Kernel.rb'
6
+ require_relative '../lib/randomperson/Name.rb'
7
+ require_relative '../lib/randomperson/Names/AmericanFemaleFirst.rb'
8
+ require_relative '../lib/randomperson/Names/AmericanMaleFirst.rb'
9
+ require_relative '../lib/randomperson/Names/AmericanLast.rb'
10
+ require_relative '../lib/randomperson/Names/BritishPrefix.rb'
11
+ require_relative '../lib/randomperson/Names/BritishSuffix.rb'
12
+ require_relative '../lib/randomperson/choice.rb'
13
+
14
+
15
+
16
+ class TestTask < Test::Unit::TestCase
17
+
18
+ def test_construction
19
+ #default choice
20
+ choice = RandomPerson::Choice.new
21
+ assert_not_nil choice
22
+ assert_equal [1,1] , choice.gender_ratio
23
+ assert_equal 0, choice.age_lower
24
+ assert_equal 100, choice.age_upper
25
+
26
+
27
+ choice2 = RandomPerson::Choice.new( gender_ratio:[2,1] )
28
+ assert_not_nil choice2
29
+ assert_equal [2,1] , choice2.gender_ratio
30
+ assert_equal 0, choice2.age_lower
31
+ assert_equal 100, choice2.age_upper
32
+
33
+
34
+ choice3 = RandomPerson::Choice.new( age_lower: 20 )
35
+ assert_not_nil choice3
36
+ assert_equal [1,1] , choice3.gender_ratio
37
+ assert_equal 20, choice3.age_lower
38
+ assert_equal 100, choice3.age_upper
39
+
40
+
41
+ choice4 = RandomPerson::Choice.new( age_upper: 50 )
42
+ assert_not_nil choice4
43
+ assert_equal [1,1] , choice4.gender_ratio
44
+ assert_equal 0, choice4.age_lower
45
+ assert_equal 50, choice4.age_upper
46
+
47
+
48
+ choice5 = RandomPerson::Choice.new( gender_ratio:[10,1], age_upper: 105 )
49
+ assert_not_nil choice5
50
+ assert_equal [10,1] , choice5.gender_ratio
51
+ assert_equal 0, choice5.age_lower
52
+ assert_equal 105, choice5.age_upper
53
+ end
54
+
55
+ def test_reset_names
56
+
57
+ choice = RandomPerson::Choice.new
58
+ choice.add_American
59
+ choice.add_British
60
+
61
+ assert_not_nil choice.malefirst
62
+ assert_not_nil choice.femalefirst
63
+ assert_not_nil choice.last
64
+ assert_not_nil choice.prefix
65
+ assert_not_nil choice.suffix
66
+
67
+ choice.reset_names
68
+
69
+ assert_nil choice.malefirst
70
+ assert_nil choice.femalefirst
71
+ assert_nil choice.last
72
+ assert_nil choice.prefix
73
+ assert_nil choice.suffix
74
+
75
+ end
76
+
77
+ #this is a test for method_missing add_NAME method
78
+ def test_add_NAME
79
+
80
+ choice = RandomPerson::Choice.new
81
+ assert_nil choice.malefirst
82
+ assert_nil choice.femalefirst
83
+ assert_nil choice.last
84
+ assert_nil choice.prefix
85
+ assert_nil choice.suffix
86
+
87
+ choice.add_American
88
+ choice.add_British
89
+
90
+ assert_not_nil choice.malefirst
91
+ assert_not_nil choice.femalefirst
92
+ assert_not_nil choice.last
93
+ assert_not_nil choice.prefix
94
+ assert_not_nil choice.suffix
95
+
96
+ assert_instance_of RandomPerson::Names::AmericanMaleFirst, choice.malefirst
97
+ assert_instance_of RandomPerson::Names::AmericanFemaleFirst, choice.femalefirst
98
+ assert_instance_of RandomPerson::Names::AmericanLast, choice.last
99
+ assert_instance_of RandomPerson::Names::BritishPrefix, choice.prefix
100
+ assert_instance_of RandomPerson::Names::BritishSuffix, choice.suffix
101
+ end
102
+
103
+ def test_load_names
104
+ choice = RandomPerson::Choice.new
105
+ assert_not_nil choice.available_classes
106
+
107
+ len = choice.available_classes.length
108
+
109
+
110
+ assert_not_equal 0, len
111
+
112
+ choice2 = RandomPerson::Choice.new( gender_ratio:[10,1], age_lower: 25, age_upper: 105 )
113
+
114
+ assert_not_nil choice2.available_classes #just for the helluvit
115
+
116
+ assert_equal len, choice.available_classes.length
117
+ assert_equal len, choice2.available_classes.length
118
+
119
+ end
120
+
121
+
122
+ def test_reset_parameters
123
+ choice = RandomPerson::Choice.new
124
+ choice.reset_parameters
125
+
126
+ assert_nil choice.gender_ratio
127
+ assert_nil choice.age_lower
128
+ assert_nil choice.age_upper
129
+
130
+
131
+ choice2 = RandomPerson::Choice.new( gender_ratio:[10,1], age_lower: 25, age_upper: 105 )
132
+ choice2.reset_parameters
133
+
134
+ assert_nil choice2.gender_ratio
135
+ assert_nil choice2.age_lower
136
+ assert_nil choice2.age_upper
137
+ end
138
+
139
+
140
+ end
@@ -0,0 +1,111 @@
1
+ require 'test/unit'
2
+ require 'date'
3
+ require_relative '../lib/randomperson/ext/Date.rb'
4
+ require_relative '../lib/randomperson/generator.rb'
5
+
6
+ require 'set'
7
+ require_relative '../lib/randomperson/ext/Set.rb'
8
+ require_relative '../lib/randomperson/ext/Enumerable.rb'
9
+ require_relative '../lib/randomperson/ext/Kernel.rb'
10
+ require_relative '../lib/randomperson/Name.rb'
11
+ require_relative '../lib/randomperson/Names/AmericanFemaleFirst.rb'
12
+ require_relative '../lib/randomperson/Names/AmericanMaleFirst.rb'
13
+ require_relative '../lib/randomperson/Names/AmericanLast.rb'
14
+ require_relative '../lib/randomperson/Names/BritishPrefix.rb'
15
+ require_relative '../lib/randomperson/Names/BritishSuffix.rb'
16
+ require_relative '../lib/randomperson/choice.rb'
17
+
18
+ require_relative '../lib/randomperson/ext/Array.rb'
19
+ require_relative '../lib/randomperson/ext/Hash.rb'
20
+ require_relative '../lib/randomperson/person.rb'
21
+
22
+
23
+ class TestTask < Test::Unit::TestCase
24
+
25
+ # def setup
26
+ # g = RandomPerson::Generator.new
27
+ # end
28
+
29
+ # def teardown
30
+ # end
31
+
32
+
33
+
34
+ def test_make_generator
35
+
36
+ choice = RandomPerson::Choice.new
37
+ choice.add_American
38
+ choice.add_British
39
+
40
+ g = RandomPerson::Generator.new
41
+
42
+ assert g.generators.empty?
43
+
44
+ g.make_generator choice
45
+
46
+ assert_not_nil g.generators
47
+ assert_equal 1, g.generators.length
48
+
49
+ assert_instance_of RandomPerson::Person, g.generators[0].call
50
+
51
+ people = [ ]
52
+
53
+ 10000.times { people << g.generators[0].call }
54
+
55
+ assert_nil people.uniq!
56
+
57
+ end
58
+
59
+ def test_ratiod
60
+ assert_kind_of Array, RandomPerson::Generator.ratiod( [1,1] )
61
+ assert_kind_of Range, RandomPerson::Generator.ratiod([1,1]).first
62
+ assert_equal 25, RandomPerson::Generator.ratiod([1,3]).first.end
63
+ end
64
+
65
+ def test_pick_gender
66
+ assert_not_nil RandomPerson::Generator.pick_gender()
67
+ assert_equal( RandomPerson::Generator.pick_gender([1,0]), 'm' )
68
+ assert_equal( RandomPerson::Generator.pick_gender([0,1]), 'f' )
69
+
70
+ assert_equal( RandomPerson::Generator.pick_gender([10,0]), 'm' )
71
+ assert_equal( RandomPerson::Generator.pick_gender([0,10]), 'f' )
72
+ end
73
+
74
+ def test_reset
75
+ # choice = RandomPerson::Choice.new
76
+ # choice2 = RandomPerson::Choice.new
77
+ g = RandomPerson::Generator.new
78
+ # g.make_generator choice
79
+ # g.make_generator choice2
80
+ # assert_equal( 2, g.generators.length )
81
+ # g.reset
82
+ # assert_equal( 2, g.generators.length )
83
+ # assert( g.generators.empty? )
84
+ end
85
+
86
+ def test_pick_age
87
+ n = 2000
88
+ while n > 0
89
+ r1 = rand(100)
90
+ r2 = rand(100) + r1
91
+ age = RandomPerson::Generator.pick_age(r1, r2)
92
+ assert_not_nil age
93
+ assert( r2 >= age && age >= r1, "age #{age} r1 #{r1} r2 #{r2}" )
94
+ n = n - 1
95
+ end
96
+ end
97
+
98
+ def test_pick_dob
99
+ n = 1000
100
+ while n > 0
101
+ r1 = rand(100)
102
+ dob = RandomPerson::Generator.pick_dob(r1)
103
+ assert_not_nil dob
104
+ assert_kind_of Time, dob
105
+ assert_equal Time.now.year - r1, dob.year
106
+ n = n - 1
107
+ end
108
+ end
109
+
110
+
111
+ end
data.tar.gz.sig CHANGED
Binary file