mail 2.7.0.rc1 → 2.7.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +71 -98
  3. data/lib/mail.rb +1 -6
  4. data/lib/mail/attachments_list.rb +5 -2
  5. data/lib/mail/body.rb +39 -33
  6. data/lib/mail/check_delivery_params.rb +8 -6
  7. data/lib/mail/configuration.rb +2 -0
  8. data/lib/mail/elements/address.rb +19 -18
  9. data/lib/mail/encodings.rb +89 -31
  10. data/lib/mail/encodings/7bit.rb +5 -15
  11. data/lib/mail/encodings/8bit.rb +2 -21
  12. data/lib/mail/encodings/base64.rb +11 -12
  13. data/lib/mail/encodings/binary.rb +3 -22
  14. data/lib/mail/encodings/identity.rb +24 -0
  15. data/lib/mail/encodings/quoted_printable.rb +6 -6
  16. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  17. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  18. data/lib/mail/envelope.rb +1 -1
  19. data/lib/mail/field.rb +93 -61
  20. data/lib/mail/fields/bcc_field.rb +2 -2
  21. data/lib/mail/fields/cc_field.rb +1 -1
  22. data/lib/mail/fields/comments_field.rb +1 -1
  23. data/lib/mail/fields/common/common_address.rb +32 -7
  24. data/lib/mail/fields/common/common_field.rb +1 -10
  25. data/lib/mail/fields/content_description_field.rb +1 -1
  26. data/lib/mail/fields/content_disposition_field.rb +3 -3
  27. data/lib/mail/fields/content_id_field.rb +2 -2
  28. data/lib/mail/fields/content_location_field.rb +1 -1
  29. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  30. data/lib/mail/fields/content_type_field.rb +1 -1
  31. data/lib/mail/fields/date_field.rb +2 -3
  32. data/lib/mail/fields/from_field.rb +1 -1
  33. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  34. data/lib/mail/fields/keywords_field.rb +1 -1
  35. data/lib/mail/fields/message_id_field.rb +1 -1
  36. data/lib/mail/fields/mime_version_field.rb +1 -1
  37. data/lib/mail/fields/optional_field.rb +4 -1
  38. data/lib/mail/fields/received_field.rb +1 -1
  39. data/lib/mail/fields/references_field.rb +1 -1
  40. data/lib/mail/fields/reply_to_field.rb +1 -1
  41. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  42. data/lib/mail/fields/resent_cc_field.rb +1 -1
  43. data/lib/mail/fields/resent_date_field.rb +0 -1
  44. data/lib/mail/fields/resent_from_field.rb +1 -1
  45. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  46. data/lib/mail/fields/resent_sender_field.rb +1 -1
  47. data/lib/mail/fields/resent_to_field.rb +1 -1
  48. data/lib/mail/fields/return_path_field.rb +1 -1
  49. data/lib/mail/fields/sender_field.rb +1 -1
  50. data/lib/mail/fields/subject_field.rb +1 -1
  51. data/lib/mail/fields/to_field.rb +1 -1
  52. data/lib/mail/fields/unstructured_field.rb +19 -2
  53. data/lib/mail/header.rb +9 -8
  54. data/lib/mail/mail.rb +2 -10
  55. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  56. data/lib/mail/message.rb +64 -51
  57. data/lib/mail/multibyte.rb +14 -16
  58. data/lib/mail/multibyte/chars.rb +2 -1
  59. data/lib/mail/network.rb +1 -0
  60. data/lib/mail/network/delivery_methods/exim.rb +6 -10
  61. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  62. data/lib/mail/network/delivery_methods/sendmail.rb +8 -4
  63. data/lib/mail/network/delivery_methods/smtp.rb +56 -55
  64. data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -1
  65. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  66. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  67. data/lib/mail/parser_tools.rb +15 -0
  68. data/lib/mail/parsers/address_lists_parser.rb +30462 -12597
  69. data/lib/mail/parsers/address_lists_parser.rl +18 -12
  70. data/lib/mail/parsers/content_disposition_parser.rb +405 -215
  71. data/lib/mail/parsers/content_disposition_parser.rl +11 -5
  72. data/lib/mail/parsers/content_location_parser.rb +443 -208
  73. data/lib/mail/parsers/content_location_parser.rl +9 -3
  74. data/lib/mail/parsers/content_transfer_encoding_parser.rb +180 -80
  75. data/lib/mail/parsers/content_transfer_encoding_parser.rl +8 -2
  76. data/lib/mail/parsers/content_type_parser.rb +436 -245
  77. data/lib/mail/parsers/content_type_parser.rl +12 -6
  78. data/lib/mail/parsers/date_time_parser.rb +172 -72
  79. data/lib/mail/parsers/date_time_parser.rl +10 -4
  80. data/lib/mail/parsers/envelope_from_parser.rb +2833 -1320
  81. data/lib/mail/parsers/envelope_from_parser.rl +9 -3
  82. data/lib/mail/parsers/message_ids_parser.rb +2325 -976
  83. data/lib/mail/parsers/message_ids_parser.rl +9 -3
  84. data/lib/mail/parsers/mime_version_parser.rb +164 -64
  85. data/lib/mail/parsers/mime_version_parser.rl +9 -3
  86. data/lib/mail/parsers/phrase_lists_parser.rb +582 -237
  87. data/lib/mail/parsers/phrase_lists_parser.rl +9 -3
  88. data/lib/mail/parsers/received_parser.rb +7036 -3004
  89. data/lib/mail/parsers/received_parser.rl +11 -5
  90. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +1 -0
  91. data/lib/mail/parsers/rfc2045_content_type.rl +1 -0
  92. data/lib/mail/parsers/rfc2045_mime.rl +1 -0
  93. data/lib/mail/parsers/rfc2183_content_disposition.rl +1 -0
  94. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  95. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +7 -1
  96. data/lib/mail/parsers/rfc5322.rl +3 -1
  97. data/lib/mail/parsers/rfc5322_address.rl +3 -1
  98. data/lib/mail/parsers/rfc5322_date_time.rl +1 -0
  99. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +9 -5
  100. data/lib/mail/part.rb +1 -1
  101. data/lib/mail/utilities.rb +44 -15
  102. data/lib/mail/version.rb +1 -1
  103. data/lib/mail/version_specific/ruby_1_8.rb +12 -1
  104. data/lib/mail/version_specific/ruby_1_9.rb +13 -1
  105. metadata +7 -13
  106. data/CHANGELOG.rdoc +0 -822
  107. data/CONTRIBUTING.md +0 -60
  108. data/Dependencies.txt +0 -1
  109. data/Gemfile +0 -11
  110. data/Rakefile +0 -23
  111. data/TODO.rdoc +0 -9
  112. data/lib/mail/multibyte/exceptions.rb +0 -9
@@ -1,20 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
  require 'mail/utilities'
3
+ require 'mail/parser_tools'
3
4
 
4
5
  %%{
5
6
  machine content_disposition;
7
+ alphtype int;
6
8
 
7
9
  # Disposition Type
8
10
  action disp_type_s { disp_type_s = p }
9
- action disp_type_e { content_disposition.disposition_type = data[disp_type_s..(p-1)].downcase }
11
+ action disp_type_e { content_disposition.disposition_type = chars(data, disp_type_s, p-1).downcase }
10
12
 
11
13
  # Parameter Attribute
12
14
  action param_attr_s { param_attr_s = p }
13
- action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
15
+ action param_attr_e { param_attr = chars(data, param_attr_s, p-1) }
14
16
 
15
17
  # Quoted String
16
18
  action qstr_s { qstr_s = p }
17
- action qstr_e { qstr = data[qstr_s..(p-1)] }
19
+ action qstr_e { qstr = chars(data, qstr_s, p-1) }
18
20
 
19
21
  # Parameter Value
20
22
  action param_val_s { param_val_s = p }
@@ -24,7 +26,7 @@ require 'mail/utilities'
24
26
  end
25
27
 
26
28
  # Use quoted string value if one exists, otherwise use parameter value
27
- value = qstr || data[param_val_s..(p-1)]
29
+ value = qstr || chars(data, param_val_s, p-1)
28
30
 
29
31
  content_disposition.parameters << { param_attr => value }
30
32
  param_attr = nil
@@ -47,11 +49,15 @@ require 'mail/utilities'
47
49
 
48
50
  module Mail::Parsers
49
51
  module ContentDispositionParser
52
+ extend Mail::ParserTools
53
+
50
54
  ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
51
55
 
52
56
  %%write data noprefix;
53
57
 
54
58
  def self.parse(data)
59
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
60
+
55
61
  content_disposition = ContentDispositionStruct.new('', [])
56
62
  return content_disposition if Mail::Utilities.blank?(data)
57
63
 
@@ -67,7 +73,7 @@ module Mail::Parsers
67
73
  %%write exec;
68
74
 
69
75
  if p != eof || cs < %%{ write first_final; }%%
70
- raise Mail::Field::ParseError.new(Mail::ContentDispositionElement, data, "Only able to parse up to #{data[0..p]}")
76
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentDispositionElement, data, p)
71
77
  end
72
78
 
73
79
  content_disposition
@@ -1,12 +1,15 @@
1
1
 
2
2
  # frozen_string_literal: true
3
3
  require 'mail/utilities'
4
+ require 'mail/parser_tools'
4
5
 
5
6
 
6
7
 
7
8
 
8
9
  module Mail::Parsers
9
10
  module ContentLocationParser
11
+ extend Mail::ParserTools
12
+
10
13
  ContentLocationStruct = Struct.new(:location, :error)
11
14
 
12
15
 
@@ -17,15 +20,20 @@ end
17
20
  self._trans_keys = [
18
21
  0, 0, 9, 126, 10, 10,
19
22
  9, 32, 10, 10, 9,
20
- 32, 1, 127, 10, 10,
21
- 9, 32, 0, 127, 10, 10,
22
- 9, 32, 9, 126, 1,
23
- 127, 1, 127, 10, 10,
24
- 9, 32, 0, 127, 9, 126,
25
- 9, 40, 9, 40, 1,
26
- 127, 1, 127, 1, 127,
27
- 1, 127, 9, 126, 0, 0,
28
- 0
23
+ 32, 1, 244, 10, 10,
24
+ 9, 32, 0, 244, 128, 191,
25
+ 160, 191, 128, 191, 128,
26
+ 159, 144, 191, 128, 191,
27
+ 128, 143, 10, 10, 9, 32,
28
+ 9, 126, 1, 244, 1,
29
+ 244, 10, 10, 9, 32,
30
+ 0, 244, 128, 191, 160, 191,
31
+ 128, 191, 128, 159, 144,
32
+ 191, 128, 191, 128, 143,
33
+ 9, 126, 9, 40, 9, 40,
34
+ 1, 244, 1, 244, 1,
35
+ 244, 1, 244, 9, 126,
36
+ 0, 0, 0
29
37
  ]
30
38
 
31
39
  class << self
@@ -33,10 +41,12 @@ class << self
33
41
  private :_key_spans, :_key_spans=
34
42
  end
35
43
  self._key_spans = [
36
- 0, 118, 1, 24, 1, 24, 127, 1,
37
- 24, 128, 1, 24, 118, 127, 127, 1,
38
- 24, 128, 118, 32, 32, 127, 127, 127,
39
- 127, 118, 0
44
+ 0, 118, 1, 24, 1, 24, 244, 1,
45
+ 24, 245, 64, 32, 64, 32, 48, 64,
46
+ 16, 1, 24, 118, 244, 244, 1, 24,
47
+ 245, 64, 32, 64, 32, 48, 64, 16,
48
+ 118, 32, 32, 244, 244, 244, 244, 118,
49
+ 0
40
50
  ]
41
51
 
42
52
  class << self
@@ -44,10 +54,12 @@ class << self
44
54
  private :_index_offsets, :_index_offsets=
45
55
  end
46
56
  self._index_offsets = [
47
- 0, 0, 119, 121, 146, 148, 173, 301,
48
- 303, 328, 457, 459, 484, 603, 731, 859,
49
- 861, 886, 1015, 1134, 1167, 1200, 1328, 1456,
50
- 1584, 1712, 1831
57
+ 0, 0, 119, 121, 146, 148, 173, 418,
58
+ 420, 445, 691, 756, 789, 854, 887, 936,
59
+ 1001, 1018, 1020, 1045, 1164, 1409, 1654, 1656,
60
+ 1681, 1927, 1992, 2025, 2090, 2123, 2172, 2237,
61
+ 2254, 2373, 2406, 2439, 2684, 2929, 3174, 3419,
62
+ 3538
51
63
  ]
52
64
 
53
65
  class << self
@@ -92,10 +104,28 @@ self._indicies = [
92
104
  9, 9, 9, 9, 9, 9, 9, 9,
93
105
  9, 9, 9, 9, 9, 9, 9, 9,
94
106
  9, 9, 9, 9, 9, 9, 9, 9,
95
- 9, 9, 9, 9, 1, 13, 1, 9,
107
+ 9, 9, 9, 9, 1, 1, 1, 1,
108
+ 1, 1, 1, 1, 1, 1, 1, 1,
109
+ 1, 1, 1, 1, 1, 1, 1, 1,
110
+ 1, 1, 1, 1, 1, 1, 1, 1,
111
+ 1, 1, 1, 1, 1, 1, 1, 1,
96
112
  1, 1, 1, 1, 1, 1, 1, 1,
97
113
  1, 1, 1, 1, 1, 1, 1, 1,
98
- 1, 1, 1, 1, 1, 1, 9, 1,
114
+ 1, 1, 1, 1, 1, 1, 1, 1,
115
+ 1, 1, 1, 1, 1, 1, 13, 13,
116
+ 13, 13, 13, 13, 13, 13, 13, 13,
117
+ 13, 13, 13, 13, 13, 13, 13, 13,
118
+ 13, 13, 13, 13, 13, 13, 13, 13,
119
+ 13, 13, 13, 13, 14, 15, 15, 15,
120
+ 15, 15, 15, 15, 15, 15, 15, 15,
121
+ 15, 16, 15, 15, 17, 18, 18, 18,
122
+ 19, 1, 20, 1, 9, 1, 1, 1,
123
+ 1, 1, 1, 1, 1, 1, 1, 1,
124
+ 1, 1, 1, 1, 1, 1, 1, 1,
125
+ 1, 1, 1, 9, 1, 9, 9, 9,
126
+ 9, 9, 9, 9, 9, 9, 9, 9,
127
+ 9, 9, 9, 9, 9, 9, 9, 9,
128
+ 9, 9, 9, 9, 9, 9, 9, 9,
99
129
  9, 9, 9, 9, 9, 9, 9, 9,
100
130
  9, 9, 9, 9, 9, 9, 9, 9,
101
131
  9, 9, 9, 9, 9, 9, 9, 9,
@@ -108,183 +138,378 @@ self._indicies = [
108
138
  9, 9, 9, 9, 9, 9, 9, 9,
109
139
  9, 9, 9, 9, 9, 9, 9, 9,
110
140
  9, 9, 9, 9, 9, 9, 9, 9,
111
- 9, 9, 9, 9, 9, 9, 9, 9,
112
- 9, 9, 9, 9, 9, 9, 9, 9,
113
- 9, 9, 9, 9, 9, 9, 9, 9,
114
- 9, 9, 9, 9, 9, 9, 9, 9,
115
- 1, 14, 1, 15, 1, 1, 1, 1,
116
- 1, 1, 1, 1, 1, 1, 1, 1,
117
- 1, 1, 1, 1, 1, 1, 1, 1,
118
- 1, 1, 15, 1, 16, 1, 1, 1,
119
- 17, 1, 1, 1, 1, 1, 1, 1,
120
- 1, 1, 1, 1, 1, 1, 1, 1,
121
- 1, 1, 1, 16, 18, 19, 18, 18,
122
- 18, 18, 18, 20, 1, 18, 18, 18,
123
- 18, 18, 1, 18, 18, 18, 18, 18,
124
- 18, 18, 18, 18, 18, 1, 1, 1,
125
- 18, 1, 1, 1, 18, 18, 18, 18,
126
- 18, 18, 18, 18, 18, 18, 18, 18,
127
- 18, 18, 18, 18, 18, 18, 18, 18,
128
- 18, 18, 18, 18, 18, 18, 1, 1,
129
- 1, 18, 18, 18, 18, 18, 18, 18,
130
- 18, 18, 18, 18, 18, 18, 18, 18,
131
- 18, 18, 18, 18, 18, 18, 18, 18,
132
- 18, 18, 18, 18, 18, 18, 18, 18,
133
- 18, 18, 1, 21, 21, 21, 21, 21,
134
- 21, 21, 21, 21, 1, 21, 21, 22,
135
- 21, 21, 21, 21, 21, 21, 21, 21,
136
- 21, 21, 21, 21, 21, 21, 21, 21,
137
- 21, 21, 21, 21, 21, 21, 21, 21,
138
- 21, 21, 23, 24, 21, 21, 21, 21,
139
- 21, 21, 21, 21, 21, 21, 21, 21,
140
- 21, 21, 21, 21, 21, 21, 21, 21,
141
- 21, 21, 21, 21, 21, 21, 21, 21,
142
- 21, 21, 21, 21, 21, 21, 21, 21,
143
- 21, 21, 21, 21, 21, 21, 21, 21,
144
- 21, 21, 21, 21, 21, 21, 25, 21,
145
- 21, 21, 21, 21, 21, 21, 21, 21,
146
- 21, 21, 21, 21, 21, 21, 21, 21,
147
- 21, 21, 21, 21, 21, 21, 21, 21,
148
- 21, 21, 21, 21, 21, 21, 21, 21,
149
- 21, 21, 1, 26, 26, 26, 26, 26,
150
- 26, 26, 26, 26, 1, 26, 26, 27,
151
- 26, 26, 26, 26, 26, 26, 26, 26,
152
- 26, 26, 26, 26, 26, 26, 26, 26,
153
- 26, 26, 26, 26, 26, 26, 26, 26,
154
- 26, 26, 28, 29, 26, 26, 26, 26,
155
- 26, 26, 26, 26, 26, 26, 26, 26,
156
- 26, 26, 26, 26, 26, 26, 26, 26,
157
- 26, 26, 26, 26, 26, 26, 26, 26,
158
- 26, 26, 26, 26, 26, 26, 26, 26,
159
- 26, 26, 26, 26, 26, 26, 26, 26,
160
- 26, 26, 26, 26, 26, 26, 30, 26,
161
- 26, 26, 26, 26, 26, 26, 26, 26,
162
- 26, 26, 26, 26, 26, 26, 26, 26,
163
- 26, 26, 26, 26, 26, 26, 26, 26,
164
- 26, 26, 26, 26, 26, 26, 26, 26,
165
- 26, 26, 1, 31, 1, 26, 1, 1,
141
+ 9, 9, 9, 9, 9, 1, 1, 1,
142
+ 1, 1, 1, 1, 1, 1, 1, 1,
143
+ 1, 1, 1, 1, 1, 1, 1, 1,
144
+ 1, 1, 1, 1, 1, 1, 1, 1,
145
+ 1, 1, 1, 1, 1, 1, 1, 1,
146
+ 1, 1, 1, 1, 1, 1, 1, 1,
147
+ 1, 1, 1, 1, 1, 1, 1, 1,
148
+ 1, 1, 1, 1, 1, 1, 1, 1,
149
+ 1, 1, 1, 1, 1, 1, 1, 13,
150
+ 13, 13, 13, 13, 13, 13, 13, 13,
151
+ 13, 13, 13, 13, 13, 13, 13, 13,
152
+ 13, 13, 13, 13, 13, 13, 13, 13,
153
+ 13, 13, 13, 13, 13, 14, 15, 15,
154
+ 15, 15, 15, 15, 15, 15, 15, 15,
155
+ 15, 15, 16, 15, 15, 17, 18, 18,
156
+ 18, 19, 1, 9, 9, 9, 9, 9,
157
+ 9, 9, 9, 9, 9, 9, 9, 9,
158
+ 9, 9, 9, 9, 9, 9, 9, 9,
159
+ 9, 9, 9, 9, 9, 9, 9, 9,
160
+ 9, 9, 9, 9, 9, 9, 9, 9,
161
+ 9, 9, 9, 9, 9, 9, 9, 9,
162
+ 9, 9, 9, 9, 9, 9, 9, 9,
163
+ 9, 9, 9, 9, 9, 9, 9, 9,
164
+ 9, 9, 9, 1, 13, 13, 13, 13,
165
+ 13, 13, 13, 13, 13, 13, 13, 13,
166
+ 13, 13, 13, 13, 13, 13, 13, 13,
167
+ 13, 13, 13, 13, 13, 13, 13, 13,
168
+ 13, 13, 13, 13, 1, 13, 13, 13,
169
+ 13, 13, 13, 13, 13, 13, 13, 13,
170
+ 13, 13, 13, 13, 13, 13, 13, 13,
171
+ 13, 13, 13, 13, 13, 13, 13, 13,
172
+ 13, 13, 13, 13, 13, 13, 13, 13,
173
+ 13, 13, 13, 13, 13, 13, 13, 13,
174
+ 13, 13, 13, 13, 13, 13, 13, 13,
175
+ 13, 13, 13, 13, 13, 13, 13, 13,
176
+ 13, 13, 13, 13, 13, 1, 13, 13,
177
+ 13, 13, 13, 13, 13, 13, 13, 13,
178
+ 13, 13, 13, 13, 13, 13, 13, 13,
179
+ 13, 13, 13, 13, 13, 13, 13, 13,
180
+ 13, 13, 13, 13, 13, 13, 1, 15,
181
+ 15, 15, 15, 15, 15, 15, 15, 15,
182
+ 15, 15, 15, 15, 15, 15, 15, 15,
183
+ 15, 15, 15, 15, 15, 15, 15, 15,
184
+ 15, 15, 15, 15, 15, 15, 15, 15,
185
+ 15, 15, 15, 15, 15, 15, 15, 15,
186
+ 15, 15, 15, 15, 15, 15, 15, 1,
187
+ 15, 15, 15, 15, 15, 15, 15, 15,
188
+ 15, 15, 15, 15, 15, 15, 15, 15,
189
+ 15, 15, 15, 15, 15, 15, 15, 15,
190
+ 15, 15, 15, 15, 15, 15, 15, 15,
191
+ 15, 15, 15, 15, 15, 15, 15, 15,
192
+ 15, 15, 15, 15, 15, 15, 15, 15,
193
+ 15, 15, 15, 15, 15, 15, 15, 15,
194
+ 15, 15, 15, 15, 15, 15, 15, 15,
195
+ 1, 15, 15, 15, 15, 15, 15, 15,
196
+ 15, 15, 15, 15, 15, 15, 15, 15,
197
+ 15, 1, 21, 1, 22, 1, 1, 1,
198
+ 1, 1, 1, 1, 1, 1, 1, 1,
199
+ 1, 1, 1, 1, 1, 1, 1, 1,
200
+ 1, 1, 1, 22, 1, 23, 1, 1,
201
+ 1, 24, 1, 1, 1, 1, 1, 1,
202
+ 1, 1, 1, 1, 1, 1, 1, 1,
203
+ 1, 1, 1, 1, 23, 25, 26, 25,
204
+ 25, 25, 25, 25, 27, 1, 25, 25,
205
+ 25, 25, 25, 1, 25, 25, 25, 25,
206
+ 25, 25, 25, 25, 25, 25, 1, 1,
207
+ 1, 25, 1, 1, 1, 25, 25, 25,
208
+ 25, 25, 25, 25, 25, 25, 25, 25,
209
+ 25, 25, 25, 25, 25, 25, 25, 25,
210
+ 25, 25, 25, 25, 25, 25, 25, 1,
211
+ 1, 1, 25, 25, 25, 25, 25, 25,
212
+ 25, 25, 25, 25, 25, 25, 25, 25,
213
+ 25, 25, 25, 25, 25, 25, 25, 25,
214
+ 25, 25, 25, 25, 25, 25, 25, 25,
215
+ 25, 25, 25, 1, 28, 28, 28, 28,
216
+ 28, 28, 28, 28, 28, 1, 28, 28,
217
+ 29, 28, 28, 28, 28, 28, 28, 28,
218
+ 28, 28, 28, 28, 28, 28, 28, 28,
219
+ 28, 28, 28, 28, 28, 28, 28, 28,
220
+ 28, 28, 28, 30, 31, 28, 28, 28,
221
+ 28, 28, 28, 28, 28, 28, 28, 28,
222
+ 28, 28, 28, 28, 28, 28, 28, 28,
223
+ 28, 28, 28, 28, 28, 28, 28, 28,
224
+ 28, 28, 28, 28, 28, 28, 28, 28,
225
+ 28, 28, 28, 28, 28, 28, 28, 28,
226
+ 28, 28, 28, 28, 28, 28, 28, 32,
227
+ 28, 28, 28, 28, 28, 28, 28, 28,
228
+ 28, 28, 28, 28, 28, 28, 28, 28,
229
+ 28, 28, 28, 28, 28, 28, 28, 28,
230
+ 28, 28, 28, 28, 28, 28, 28, 28,
231
+ 28, 28, 28, 1, 1, 1, 1, 1,
232
+ 1, 1, 1, 1, 1, 1, 1, 1,
233
+ 1, 1, 1, 1, 1, 1, 1, 1,
234
+ 1, 1, 1, 1, 1, 1, 1, 1,
235
+ 1, 1, 1, 1, 1, 1, 1, 1,
236
+ 1, 1, 1, 1, 1, 1, 1, 1,
237
+ 1, 1, 1, 1, 1, 1, 1, 1,
238
+ 1, 1, 1, 1, 1, 1, 1, 1,
239
+ 1, 1, 1, 1, 1, 33, 33, 33,
240
+ 33, 33, 33, 33, 33, 33, 33, 33,
241
+ 33, 33, 33, 33, 33, 33, 33, 33,
242
+ 33, 33, 33, 33, 33, 33, 33, 33,
243
+ 33, 33, 33, 34, 35, 35, 35, 35,
244
+ 35, 35, 35, 35, 35, 35, 35, 35,
245
+ 36, 35, 35, 37, 38, 38, 38, 39,
246
+ 1, 40, 40, 40, 40, 40, 40, 40,
247
+ 40, 40, 1, 40, 40, 41, 40, 40,
248
+ 40, 40, 40, 40, 40, 40, 40, 40,
249
+ 40, 40, 40, 40, 40, 40, 40, 40,
250
+ 40, 40, 40, 40, 40, 40, 40, 40,
251
+ 42, 43, 40, 40, 40, 40, 40, 40,
252
+ 40, 40, 40, 40, 40, 40, 40, 40,
253
+ 40, 40, 40, 40, 40, 40, 40, 40,
254
+ 40, 40, 40, 40, 40, 40, 40, 40,
255
+ 40, 40, 40, 40, 40, 40, 40, 40,
256
+ 40, 40, 40, 40, 40, 40, 40, 40,
257
+ 40, 40, 40, 40, 44, 40, 40, 40,
258
+ 40, 40, 40, 40, 40, 40, 40, 40,
259
+ 40, 40, 40, 40, 40, 40, 40, 40,
260
+ 40, 40, 40, 40, 40, 40, 40, 40,
261
+ 40, 40, 40, 40, 40, 40, 40, 40,
262
+ 1, 1, 1, 1, 1, 1, 1, 1,
263
+ 1, 1, 1, 1, 1, 1, 1, 1,
264
+ 1, 1, 1, 1, 1, 1, 1, 1,
265
+ 1, 1, 1, 1, 1, 1, 1, 1,
266
+ 1, 1, 1, 1, 1, 1, 1, 1,
267
+ 1, 1, 1, 1, 1, 1, 1, 1,
268
+ 1, 1, 1, 1, 1, 1, 1, 1,
269
+ 1, 1, 1, 1, 1, 1, 1, 1,
270
+ 1, 1, 45, 45, 45, 45, 45, 45,
271
+ 45, 45, 45, 45, 45, 45, 45, 45,
272
+ 45, 45, 45, 45, 45, 45, 45, 45,
273
+ 45, 45, 45, 45, 45, 45, 45, 45,
274
+ 46, 47, 47, 47, 47, 47, 47, 47,
275
+ 47, 47, 47, 47, 47, 48, 47, 47,
276
+ 49, 50, 50, 50, 51, 1, 52, 1,
277
+ 40, 1, 1, 1, 1, 1, 1, 1,
278
+ 1, 1, 1, 1, 1, 1, 1, 1,
279
+ 1, 1, 1, 1, 1, 1, 1, 40,
280
+ 1, 40, 40, 40, 40, 40, 40, 40,
281
+ 40, 40, 40, 40, 40, 40, 40, 40,
282
+ 40, 40, 40, 40, 40, 40, 40, 40,
283
+ 40, 40, 40, 40, 40, 40, 40, 40,
284
+ 40, 40, 40, 40, 40, 40, 40, 40,
285
+ 40, 40, 40, 40, 40, 40, 40, 40,
286
+ 40, 40, 40, 40, 40, 40, 40, 40,
287
+ 40, 40, 40, 40, 40, 40, 40, 40,
288
+ 40, 40, 40, 40, 40, 40, 40, 40,
289
+ 40, 40, 40, 40, 40, 40, 40, 40,
290
+ 40, 40, 40, 40, 40, 40, 40, 40,
291
+ 40, 40, 40, 40, 40, 40, 40, 40,
292
+ 40, 40, 40, 40, 40, 40, 40, 40,
293
+ 40, 40, 40, 40, 40, 40, 40, 40,
294
+ 40, 40, 40, 40, 40, 40, 40, 40,
295
+ 40, 40, 40, 40, 40, 40, 40, 40,
296
+ 40, 1, 1, 1, 1, 1, 1, 1,
297
+ 1, 1, 1, 1, 1, 1, 1, 1,
298
+ 1, 1, 1, 1, 1, 1, 1, 1,
299
+ 1, 1, 1, 1, 1, 1, 1, 1,
300
+ 1, 1, 1, 1, 1, 1, 1, 1,
301
+ 1, 1, 1, 1, 1, 1, 1, 1,
302
+ 1, 1, 1, 1, 1, 1, 1, 1,
303
+ 1, 1, 1, 1, 1, 1, 1, 1,
304
+ 1, 1, 1, 45, 45, 45, 45, 45,
305
+ 45, 45, 45, 45, 45, 45, 45, 45,
306
+ 45, 45, 45, 45, 45, 45, 45, 45,
307
+ 45, 45, 45, 45, 45, 45, 45, 45,
308
+ 45, 46, 47, 47, 47, 47, 47, 47,
309
+ 47, 47, 47, 47, 47, 47, 48, 47,
310
+ 47, 49, 50, 50, 50, 51, 1, 40,
311
+ 40, 40, 40, 40, 40, 40, 40, 40,
312
+ 40, 40, 40, 40, 40, 40, 40, 40,
313
+ 40, 40, 40, 40, 40, 40, 40, 40,
314
+ 40, 40, 40, 40, 40, 40, 40, 40,
315
+ 40, 40, 40, 40, 40, 40, 40, 40,
316
+ 40, 40, 40, 40, 40, 40, 40, 40,
317
+ 40, 40, 40, 40, 40, 40, 40, 40,
318
+ 40, 40, 40, 40, 40, 40, 40, 1,
319
+ 45, 45, 45, 45, 45, 45, 45, 45,
320
+ 45, 45, 45, 45, 45, 45, 45, 45,
321
+ 45, 45, 45, 45, 45, 45, 45, 45,
322
+ 45, 45, 45, 45, 45, 45, 45, 45,
323
+ 1, 45, 45, 45, 45, 45, 45, 45,
324
+ 45, 45, 45, 45, 45, 45, 45, 45,
325
+ 45, 45, 45, 45, 45, 45, 45, 45,
326
+ 45, 45, 45, 45, 45, 45, 45, 45,
327
+ 45, 45, 45, 45, 45, 45, 45, 45,
328
+ 45, 45, 45, 45, 45, 45, 45, 45,
329
+ 45, 45, 45, 45, 45, 45, 45, 45,
330
+ 45, 45, 45, 45, 45, 45, 45, 45,
331
+ 45, 1, 45, 45, 45, 45, 45, 45,
332
+ 45, 45, 45, 45, 45, 45, 45, 45,
333
+ 45, 45, 45, 45, 45, 45, 45, 45,
334
+ 45, 45, 45, 45, 45, 45, 45, 45,
335
+ 45, 45, 1, 47, 47, 47, 47, 47,
336
+ 47, 47, 47, 47, 47, 47, 47, 47,
337
+ 47, 47, 47, 47, 47, 47, 47, 47,
338
+ 47, 47, 47, 47, 47, 47, 47, 47,
339
+ 47, 47, 47, 47, 47, 47, 47, 47,
340
+ 47, 47, 47, 47, 47, 47, 47, 47,
341
+ 47, 47, 47, 1, 47, 47, 47, 47,
342
+ 47, 47, 47, 47, 47, 47, 47, 47,
343
+ 47, 47, 47, 47, 47, 47, 47, 47,
344
+ 47, 47, 47, 47, 47, 47, 47, 47,
345
+ 47, 47, 47, 47, 47, 47, 47, 47,
346
+ 47, 47, 47, 47, 47, 47, 47, 47,
347
+ 47, 47, 47, 47, 47, 47, 47, 47,
348
+ 47, 47, 47, 47, 47, 47, 47, 47,
349
+ 47, 47, 47, 47, 1, 47, 47, 47,
350
+ 47, 47, 47, 47, 47, 47, 47, 47,
351
+ 47, 47, 47, 47, 47, 1, 53, 1,
352
+ 1, 1, 54, 1, 1, 1, 1, 1,
353
+ 1, 1, 1, 1, 1, 1, 1, 1,
354
+ 1, 1, 1, 1, 1, 53, 55, 55,
355
+ 55, 55, 55, 55, 55, 56, 1, 55,
356
+ 55, 55, 55, 55, 1, 55, 55, 55,
357
+ 55, 55, 55, 55, 55, 55, 55, 1,
358
+ 1, 1, 55, 1, 1, 1, 55, 55,
359
+ 55, 55, 55, 55, 55, 55, 55, 55,
360
+ 55, 55, 55, 55, 55, 55, 55, 55,
361
+ 55, 55, 55, 55, 55, 55, 55, 55,
362
+ 1, 1, 1, 55, 55, 55, 55, 55,
363
+ 55, 55, 55, 55, 55, 55, 55, 55,
364
+ 55, 55, 55, 55, 55, 55, 55, 55,
365
+ 55, 55, 55, 55, 55, 55, 55, 55,
366
+ 55, 55, 55, 55, 1, 8, 1, 1,
367
+ 1, 57, 1, 1, 1, 1, 1, 1,
368
+ 1, 1, 1, 1, 1, 1, 1, 1,
369
+ 1, 1, 1, 1, 8, 1, 1, 1,
370
+ 1, 1, 1, 1, 58, 1, 59, 1,
371
+ 1, 1, 60, 1, 1, 1, 1, 1,
372
+ 1, 1, 1, 1, 1, 1, 1, 1,
373
+ 1, 1, 1, 1, 1, 59, 1, 1,
374
+ 1, 1, 1, 1, 1, 61, 1, 62,
375
+ 62, 62, 62, 62, 62, 62, 62, 63,
376
+ 1, 62, 62, 64, 62, 62, 62, 62,
377
+ 62, 62, 62, 62, 62, 62, 62, 62,
378
+ 62, 62, 62, 62, 62, 62, 63, 65,
379
+ 66, 65, 65, 65, 65, 65, 67, 62,
380
+ 65, 65, 65, 65, 65, 62, 65, 65,
381
+ 65, 65, 65, 65, 65, 65, 65, 65,
382
+ 62, 62, 62, 65, 62, 62, 62, 65,
383
+ 65, 65, 65, 65, 65, 65, 65, 65,
384
+ 65, 65, 65, 65, 65, 65, 65, 65,
385
+ 65, 65, 65, 65, 65, 65, 65, 65,
386
+ 65, 62, 68, 62, 65, 65, 65, 65,
387
+ 65, 65, 65, 65, 65, 65, 65, 65,
388
+ 65, 65, 65, 65, 65, 65, 65, 65,
389
+ 65, 65, 65, 65, 65, 65, 65, 65,
390
+ 65, 65, 65, 65, 65, 62, 1, 1,
391
+ 1, 1, 1, 1, 1, 1, 1, 1,
392
+ 1, 1, 1, 1, 1, 1, 1, 1,
393
+ 1, 1, 1, 1, 1, 1, 1, 1,
394
+ 1, 1, 1, 1, 1, 1, 1, 1,
395
+ 1, 1, 1, 1, 1, 1, 1, 1,
396
+ 1, 1, 1, 1, 1, 1, 1, 1,
397
+ 1, 1, 1, 1, 1, 1, 1, 1,
398
+ 1, 1, 1, 1, 1, 1, 1, 1,
399
+ 69, 69, 69, 69, 69, 69, 69, 69,
400
+ 69, 69, 69, 69, 69, 69, 69, 69,
401
+ 69, 69, 69, 69, 69, 69, 69, 69,
402
+ 69, 69, 69, 69, 69, 69, 70, 71,
403
+ 71, 71, 71, 71, 71, 71, 71, 71,
404
+ 71, 71, 71, 72, 71, 71, 73, 74,
405
+ 74, 74, 75, 1, 9, 9, 9, 9,
406
+ 9, 9, 9, 9, 22, 1, 9, 9,
407
+ 76, 9, 9, 9, 9, 9, 9, 9,
408
+ 9, 9, 9, 9, 9, 9, 9, 9,
409
+ 9, 9, 9, 22, 9, 11, 9, 9,
410
+ 9, 9, 9, 77, 9, 9, 9, 9,
411
+ 9, 9, 9, 9, 9, 9, 9, 9,
412
+ 9, 9, 9, 9, 9, 9, 9, 9,
413
+ 9, 9, 9, 9, 9, 9, 9, 9,
414
+ 9, 9, 9, 9, 9, 9, 9, 9,
415
+ 9, 9, 9, 9, 9, 9, 9, 9,
416
+ 9, 9, 9, 9, 9, 9, 9, 12,
417
+ 9, 9, 9, 9, 9, 9, 9, 9,
418
+ 9, 9, 9, 9, 9, 9, 9, 9,
419
+ 9, 9, 9, 9, 9, 9, 9, 9,
420
+ 9, 9, 9, 9, 9, 9, 9, 9,
421
+ 9, 9, 9, 1, 1, 1, 1, 1,
422
+ 1, 1, 1, 1, 1, 1, 1, 1,
166
423
  1, 1, 1, 1, 1, 1, 1, 1,
167
424
  1, 1, 1, 1, 1, 1, 1, 1,
168
- 1, 1, 1, 1, 26, 1, 26, 26,
169
- 26, 26, 26, 26, 26, 26, 26, 26,
170
- 26, 26, 26, 26, 26, 26, 26, 26,
171
- 26, 26, 26, 26, 26, 26, 26, 26,
172
- 26, 26, 26, 26, 26, 26, 26, 26,
173
- 26, 26, 26, 26, 26, 26, 26, 26,
174
- 26, 26, 26, 26, 26, 26, 26, 26,
175
- 26, 26, 26, 26, 26, 26, 26, 26,
176
- 26, 26, 26, 26, 26, 26, 26, 26,
177
- 26, 26, 26, 26, 26, 26, 26, 26,
178
- 26, 26, 26, 26, 26, 26, 26, 26,
179
- 26, 26, 26, 26, 26, 26, 26, 26,
180
- 26, 26, 26, 26, 26, 26, 26, 26,
181
- 26, 26, 26, 26, 26, 26, 26, 26,
182
- 26, 26, 26, 26, 26, 26, 26, 26,
183
- 26, 26, 26, 26, 26, 26, 26, 26,
184
- 26, 26, 26, 26, 26, 26, 1, 32,
185
- 1, 1, 1, 33, 1, 1, 1, 1,
186
425
  1, 1, 1, 1, 1, 1, 1, 1,
187
- 1, 1, 1, 1, 1, 1, 32, 34,
188
- 34, 34, 34, 34, 34, 34, 35, 1,
189
- 34, 34, 34, 34, 34, 1, 34, 34,
190
- 34, 34, 34, 34, 34, 34, 34, 34,
191
- 1, 1, 1, 34, 1, 1, 1, 34,
192
- 34, 34, 34, 34, 34, 34, 34, 34,
193
- 34, 34, 34, 34, 34, 34, 34, 34,
194
- 34, 34, 34, 34, 34, 34, 34, 34,
195
- 34, 1, 1, 1, 34, 34, 34, 34,
196
- 34, 34, 34, 34, 34, 34, 34, 34,
197
- 34, 34, 34, 34, 34, 34, 34, 34,
198
- 34, 34, 34, 34, 34, 34, 34, 34,
199
- 34, 34, 34, 34, 34, 1, 8, 1,
200
- 1, 1, 36, 1, 1, 1, 1, 1,
201
426
  1, 1, 1, 1, 1, 1, 1, 1,
202
- 1, 1, 1, 1, 1, 8, 1, 1,
203
- 1, 1, 1, 1, 1, 37, 1, 38,
204
- 1, 1, 1, 39, 1, 1, 1, 1,
205
427
  1, 1, 1, 1, 1, 1, 1, 1,
206
- 1, 1, 1, 1, 1, 1, 38, 1,
207
- 1, 1, 1, 1, 1, 1, 40, 1,
208
- 41, 41, 41, 41, 41, 41, 41, 41,
209
- 42, 1, 41, 41, 43, 41, 41, 41,
210
- 41, 41, 41, 41, 41, 41, 41, 41,
211
- 41, 41, 41, 41, 41, 41, 41, 42,
212
- 44, 45, 44, 44, 44, 44, 44, 46,
213
- 41, 44, 44, 44, 44, 44, 41, 44,
214
- 44, 44, 44, 44, 44, 44, 44, 44,
215
- 44, 41, 41, 41, 44, 41, 41, 41,
216
- 44, 44, 44, 44, 44, 44, 44, 44,
217
- 44, 44, 44, 44, 44, 44, 44, 44,
218
- 44, 44, 44, 44, 44, 44, 44, 44,
219
- 44, 44, 41, 47, 41, 44, 44, 44,
220
- 44, 44, 44, 44, 44, 44, 44, 44,
221
- 44, 44, 44, 44, 44, 44, 44, 44,
222
- 44, 44, 44, 44, 44, 44, 44, 44,
223
- 44, 44, 44, 44, 44, 44, 41, 1,
224
- 9, 9, 9, 9, 9, 9, 9, 9,
225
- 15, 1, 9, 9, 48, 9, 9, 9,
226
- 9, 9, 9, 9, 9, 9, 9, 9,
227
- 9, 9, 9, 9, 9, 9, 9, 15,
228
- 9, 11, 9, 9, 9, 9, 9, 49,
229
- 9, 9, 9, 9, 9, 9, 9, 9,
230
- 9, 9, 9, 9, 9, 9, 9, 9,
231
- 9, 9, 9, 9, 9, 9, 9, 9,
232
- 9, 9, 9, 9, 9, 9, 9, 9,
233
- 9, 9, 9, 9, 9, 9, 9, 9,
234
- 9, 9, 9, 9, 9, 9, 9, 9,
235
- 9, 9, 9, 12, 9, 9, 9, 9,
236
- 9, 9, 9, 9, 9, 9, 9, 9,
237
- 9, 9, 9, 9, 9, 9, 9, 9,
238
- 9, 9, 9, 9, 9, 9, 9, 9,
239
- 9, 9, 9, 9, 9, 9, 9, 1,
240
- 9, 9, 9, 9, 9, 9, 9, 9,
241
- 50, 1, 9, 9, 51, 9, 9, 9,
242
- 9, 9, 9, 9, 9, 9, 9, 9,
243
- 9, 9, 9, 9, 9, 9, 9, 50,
244
- 9, 11, 9, 9, 9, 9, 9, 52,
428
+ 1, 1, 1, 1, 1, 1, 1, 1,
429
+ 1, 1, 1, 1, 1, 13, 13, 13,
430
+ 13, 13, 13, 13, 13, 13, 13, 13,
431
+ 13, 13, 13, 13, 13, 13, 13, 13,
432
+ 13, 13, 13, 13, 13, 13, 13, 13,
433
+ 13, 13, 13, 14, 15, 15, 15, 15,
434
+ 15, 15, 15, 15, 15, 15, 15, 15,
435
+ 16, 15, 15, 17, 18, 18, 18, 19,
436
+ 1, 9, 9, 9, 9, 9, 9, 9,
437
+ 9, 78, 1, 9, 9, 79, 9, 9,
245
438
  9, 9, 9, 9, 9, 9, 9, 9,
246
439
  9, 9, 9, 9, 9, 9, 9, 9,
440
+ 78, 9, 11, 9, 9, 9, 9, 9,
441
+ 80, 9, 9, 9, 9, 9, 9, 9,
247
442
  9, 9, 9, 9, 9, 9, 9, 9,
248
443
  9, 9, 9, 9, 9, 9, 9, 9,
249
444
  9, 9, 9, 9, 9, 9, 9, 9,
250
445
  9, 9, 9, 9, 9, 9, 9, 9,
251
- 9, 9, 9, 12, 9, 9, 9, 9,
252
446
  9, 9, 9, 9, 9, 9, 9, 9,
447
+ 9, 9, 9, 9, 12, 9, 9, 9,
253
448
  9, 9, 9, 9, 9, 9, 9, 9,
254
449
  9, 9, 9, 9, 9, 9, 9, 9,
255
- 9, 9, 9, 9, 9, 9, 9, 1,
256
450
  9, 9, 9, 9, 9, 9, 9, 9,
257
- 53, 1, 9, 9, 54, 9, 9, 9,
258
451
  9, 9, 9, 9, 9, 9, 9, 9,
259
- 9, 9, 9, 9, 9, 9, 9, 53,
260
- 55, 56, 55, 55, 55, 55, 55, 57,
261
- 9, 55, 55, 55, 55, 55, 9, 55,
262
- 55, 55, 55, 55, 55, 55, 55, 55,
263
- 55, 9, 9, 9, 55, 9, 9, 9,
452
+ 1, 1, 1, 1, 1, 1, 1, 1,
453
+ 1, 1, 1, 1, 1, 1, 1, 1,
454
+ 1, 1, 1, 1, 1, 1, 1, 1,
455
+ 1, 1, 1, 1, 1, 1, 1, 1,
456
+ 1, 1, 1, 1, 1, 1, 1, 1,
457
+ 1, 1, 1, 1, 1, 1, 1, 1,
458
+ 1, 1, 1, 1, 1, 1, 1, 1,
459
+ 1, 1, 1, 1, 1, 1, 1, 1,
460
+ 1, 1, 13, 13, 13, 13, 13, 13,
461
+ 13, 13, 13, 13, 13, 13, 13, 13,
462
+ 13, 13, 13, 13, 13, 13, 13, 13,
463
+ 13, 13, 13, 13, 13, 13, 13, 13,
464
+ 14, 15, 15, 15, 15, 15, 15, 15,
465
+ 15, 15, 15, 15, 15, 16, 15, 15,
466
+ 17, 18, 18, 18, 19, 1, 9, 9,
467
+ 9, 9, 9, 9, 9, 9, 81, 1,
468
+ 9, 9, 82, 9, 9, 9, 9, 9,
469
+ 9, 9, 9, 9, 9, 9, 9, 9,
470
+ 9, 9, 9, 9, 9, 81, 83, 84,
471
+ 83, 83, 83, 83, 83, 85, 9, 83,
472
+ 83, 83, 83, 83, 9, 83, 83, 83,
473
+ 83, 83, 83, 83, 83, 83, 83, 9,
474
+ 9, 9, 83, 9, 9, 9, 83, 83,
475
+ 83, 83, 83, 83, 83, 83, 83, 83,
476
+ 83, 83, 83, 83, 83, 83, 83, 83,
477
+ 83, 83, 83, 83, 83, 83, 83, 83,
478
+ 9, 12, 9, 83, 83, 83, 83, 83,
479
+ 83, 83, 83, 83, 83, 83, 83, 83,
480
+ 83, 83, 83, 83, 83, 83, 83, 83,
481
+ 83, 83, 83, 83, 83, 83, 83, 83,
482
+ 83, 83, 83, 83, 9, 1, 1, 1,
483
+ 1, 1, 1, 1, 1, 1, 1, 1,
484
+ 1, 1, 1, 1, 1, 1, 1, 1,
485
+ 1, 1, 1, 1, 1, 1, 1, 1,
486
+ 1, 1, 1, 1, 1, 1, 1, 1,
487
+ 1, 1, 1, 1, 1, 1, 1, 1,
488
+ 1, 1, 1, 1, 1, 1, 1, 1,
489
+ 1, 1, 1, 1, 1, 1, 1, 1,
490
+ 1, 1, 1, 1, 1, 1, 1, 13,
491
+ 13, 13, 13, 13, 13, 13, 13, 13,
492
+ 13, 13, 13, 13, 13, 13, 13, 13,
493
+ 13, 13, 13, 13, 13, 13, 13, 13,
494
+ 13, 13, 13, 13, 13, 14, 15, 15,
495
+ 15, 15, 15, 15, 15, 15, 15, 15,
496
+ 15, 15, 16, 15, 15, 17, 18, 18,
497
+ 18, 19, 1, 53, 1, 1, 1, 54,
498
+ 1, 1, 1, 1, 1, 1, 1, 1,
499
+ 1, 1, 1, 1, 1, 1, 1, 1,
500
+ 1, 1, 53, 55, 55, 55, 55, 55,
501
+ 55, 55, 86, 1, 55, 55, 55, 55,
502
+ 55, 1, 55, 55, 55, 55, 55, 55,
503
+ 55, 55, 55, 55, 1, 1, 1, 55,
504
+ 1, 1, 1, 55, 55, 55, 55, 55,
264
505
  55, 55, 55, 55, 55, 55, 55, 55,
265
506
  55, 55, 55, 55, 55, 55, 55, 55,
507
+ 55, 55, 55, 55, 55, 1, 1, 1,
266
508
  55, 55, 55, 55, 55, 55, 55, 55,
267
- 55, 55, 9, 12, 9, 55, 55, 55,
268
509
  55, 55, 55, 55, 55, 55, 55, 55,
269
510
  55, 55, 55, 55, 55, 55, 55, 55,
270
511
  55, 55, 55, 55, 55, 55, 55, 55,
271
- 55, 55, 55, 55, 55, 55, 9, 1,
272
- 32, 1, 1, 1, 33, 1, 1, 1,
273
- 1, 1, 1, 1, 1, 1, 1, 1,
274
- 1, 1, 1, 1, 1, 1, 1, 32,
275
- 34, 34, 34, 34, 34, 34, 34, 58,
276
- 1, 34, 34, 34, 34, 34, 1, 34,
277
- 34, 34, 34, 34, 34, 34, 34, 34,
278
- 34, 1, 1, 1, 34, 1, 1, 1,
279
- 34, 34, 34, 34, 34, 34, 34, 34,
280
- 34, 34, 34, 34, 34, 34, 34, 34,
281
- 34, 34, 34, 34, 34, 34, 34, 34,
282
- 34, 34, 1, 1, 1, 34, 34, 34,
283
- 34, 34, 34, 34, 34, 34, 34, 34,
284
- 34, 34, 34, 34, 34, 34, 34, 34,
285
- 34, 34, 34, 34, 34, 34, 34, 34,
286
- 34, 34, 34, 34, 34, 34, 1, 1,
287
- 0
512
+ 55, 1, 1, 0
288
513
  ]
289
514
 
290
515
  class << self
@@ -292,14 +517,17 @@ class << self
292
517
  private :_trans_targs, :_trans_targs=
293
518
  end
294
519
  self._trans_targs = [
295
- 1, 0, 2, 18, 21, 12, 3, 5,
296
- 19, 6, 7, 19, 9, 8, 11, 22,
297
- 1, 2, 18, 21, 12, 14, 15, 14,
298
- 26, 17, 14, 15, 14, 26, 17, 16,
299
- 19, 4, 18, 20, 4, 20, 19, 4,
300
- 20, 6, 22, 10, 24, 25, 23, 9,
301
- 10, 23, 22, 10, 23, 22, 10, 24,
302
- 25, 23, 20
520
+ 1, 0, 2, 32, 35, 19, 3, 5,
521
+ 33, 6, 7, 33, 9, 10, 11, 12,
522
+ 13, 14, 15, 16, 8, 18, 36, 1,
523
+ 2, 32, 35, 19, 21, 22, 21, 40,
524
+ 24, 25, 26, 27, 28, 29, 30, 31,
525
+ 21, 22, 21, 40, 24, 25, 26, 27,
526
+ 28, 29, 30, 31, 23, 33, 4, 32,
527
+ 34, 4, 34, 33, 4, 34, 6, 36,
528
+ 17, 38, 39, 37, 9, 10, 11, 12,
529
+ 13, 14, 15, 16, 17, 37, 36, 17,
530
+ 37, 36, 17, 38, 39, 37, 34
303
531
  ]
304
532
 
305
533
  class << self
@@ -309,12 +537,15 @@ end
309
537
  self._trans_actions = [
310
538
  0, 0, 0, 1, 1, 2, 0, 0,
311
539
  0, 0, 0, 3, 0, 0, 0, 0,
312
- 4, 4, 5, 5, 6, 7, 7, 8,
313
- 9, 7, 0, 0, 2, 10, 0, 0,
314
- 11, 11, 0, 12, 0, 2, 4, 4,
315
- 6, 13, 14, 14, 13, 15, 16, 13,
316
- 0, 2, 4, 4, 6, 11, 11, 0,
317
- 3, 12, 17
540
+ 0, 0, 0, 0, 0, 0, 0, 4,
541
+ 4, 5, 5, 6, 7, 7, 8, 9,
542
+ 7, 7, 7, 7, 7, 7, 7, 7,
543
+ 0, 0, 2, 10, 0, 0, 0, 0,
544
+ 0, 0, 0, 0, 0, 11, 11, 0,
545
+ 12, 0, 2, 4, 4, 6, 13, 14,
546
+ 14, 13, 15, 16, 13, 13, 13, 13,
547
+ 13, 13, 13, 13, 0, 2, 4, 4,
548
+ 6, 11, 11, 0, 3, 12, 17
318
549
  ]
319
550
 
320
551
  class << self
@@ -324,8 +555,10 @@ end
324
555
  self._eof_actions = [
325
556
  0, 0, 0, 0, 0, 0, 0, 0,
326
557
  0, 0, 0, 0, 0, 0, 0, 0,
327
- 0, 0, 11, 0, 4, 11, 0, 4,
328
- 11, 11, 0
558
+ 0, 0, 0, 0, 0, 0, 0, 0,
559
+ 0, 0, 0, 0, 0, 0, 0, 0,
560
+ 11, 0, 4, 11, 0, 4, 11, 11,
561
+ 0
329
562
  ]
330
563
 
331
564
  class << self
@@ -335,7 +568,7 @@ self.start = 1;
335
568
  class << self
336
569
  attr_accessor :first_final
337
570
  end
338
- self.first_final = 18;
571
+ self.first_final = 32;
339
572
  class << self
340
573
  attr_accessor :error
341
574
  end
@@ -344,7 +577,7 @@ self.error = 0;
344
577
  class << self
345
578
  attr_accessor :en_comment_tail
346
579
  end
347
- self.en_comment_tail = 13;
580
+ self.en_comment_tail = 20;
348
581
  class << self
349
582
  attr_accessor :en_main
350
583
  end
@@ -353,6 +586,8 @@ self.en_main = 1;
353
586
 
354
587
 
355
588
  def self.parse(data)
589
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
590
+
356
591
  content_location = ContentLocationStruct.new(nil)
357
592
  return content_location if Mail::Utilities.blank?(data)
358
593
 
@@ -414,13 +649,13 @@ begin
414
649
  qstr_s = p end
415
650
  when 3 then
416
651
  begin
417
- content_location.location = data[qstr_s..(p-1)] end
652
+ content_location.location = chars(data, qstr_s, p-1) end
418
653
  when 1 then
419
654
  begin
420
655
  token_string_s = p end
421
656
  when 11 then
422
657
  begin
423
- content_location.location = data[token_string_s..(p-1)] end
658
+ content_location.location = chars(data, token_string_s, p-1) end
424
659
  when 4 then
425
660
  begin
426
661
  end
@@ -432,7 +667,7 @@ begin
432
667
  begin
433
668
  stack[top] = cs
434
669
  top+= 1
435
- cs = 13
670
+ cs = 20
436
671
  _goto_level = _again
437
672
  next
438
673
  end
@@ -450,20 +685,20 @@ begin
450
685
  begin
451
686
  qstr_s = p end
452
687
  begin
453
- content_location.location = data[qstr_s..(p-1)] end
688
+ content_location.location = chars(data, qstr_s, p-1) end
454
689
  when 14 then
455
690
  begin
456
691
  qstr_s = p end
457
692
  begin
458
- content_location.location = data[token_string_s..(p-1)] end
693
+ content_location.location = chars(data, token_string_s, p-1) end
459
694
  when 12 then
460
695
  begin
461
- content_location.location = data[token_string_s..(p-1)] end
696
+ content_location.location = chars(data, token_string_s, p-1) end
462
697
  begin
463
698
  begin
464
699
  stack[top] = cs
465
700
  top+= 1
466
- cs = 13
701
+ cs = 20
467
702
  _goto_level = _again
468
703
  next
469
704
  end
@@ -480,7 +715,7 @@ begin
480
715
  begin
481
716
  stack[top] = cs
482
717
  top+= 1
483
- cs = 13
718
+ cs = 20
484
719
  _goto_level = _again
485
720
  next
486
721
  end
@@ -492,7 +727,7 @@ begin
492
727
  begin
493
728
  stack[top] = cs
494
729
  top+= 1
495
- cs = 13
730
+ cs = 20
496
731
  _goto_level = _again
497
732
  next
498
733
  end
@@ -513,23 +748,23 @@ begin
513
748
  begin
514
749
  stack[top] = cs
515
750
  top+= 1
516
- cs = 13
751
+ cs = 20
517
752
  _goto_level = _again
518
753
  next
519
754
  end
520
755
  end
521
756
  begin
522
- content_location.location = data[token_string_s..(p-1)] end
757
+ content_location.location = chars(data, token_string_s, p-1) end
523
758
  when 16 then
524
759
  begin
525
760
  qstr_s = p end
526
761
  begin
527
- content_location.location = data[token_string_s..(p-1)] end
762
+ content_location.location = chars(data, token_string_s, p-1) end
528
763
  begin
529
764
  begin
530
765
  stack[top] = cs
531
766
  top+= 1
532
- cs = 13
767
+ cs = 20
533
768
  _goto_level = _again
534
769
  next
535
770
  end
@@ -553,7 +788,7 @@ begin
553
788
  case _eof_actions[cs]
554
789
  when 11 then
555
790
  begin
556
- content_location.location = data[token_string_s..(p-1)] end
791
+ content_location.location = chars(data, token_string_s, p-1) end
557
792
  when 4 then
558
793
  begin
559
794
  end
@@ -568,8 +803,8 @@ end
568
803
  end
569
804
 
570
805
 
571
- if p != eof || cs < 18
572
- raise Mail::Field::ParseError.new(Mail::ContentLocationElement, data, "Only able to parse up to #{data[0..p]}")
806
+ if p != eof || cs < 32
807
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentLocationElement, data, p)
573
808
  end
574
809
 
575
810
  content_location