metanorma-un 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/macos.yml +39 -0
  3. data/.github/workflows/ubuntu.yml +39 -0
  4. data/.github/workflows/windows.yml +42 -0
  5. data/.gitignore +1 -0
  6. data/.hound.yml +3 -0
  7. data/.rubocop.yml +10 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +11 -0
  10. data/LICENSE +25 -0
  11. data/README.adoc +141 -0
  12. data/Rakefile +6 -0
  13. data/bin/console +14 -0
  14. data/bin/rspec +17 -0
  15. data/bin/setup +8 -0
  16. data/lib/asciidoctor/un.rb +7 -0
  17. data/lib/asciidoctor/un/basicdoc.rng +1059 -0
  18. data/lib/asciidoctor/un/biblio.rng +1142 -0
  19. data/lib/asciidoctor/un/boilerplate.xml +57 -0
  20. data/lib/asciidoctor/un/converter.rb +209 -0
  21. data/lib/asciidoctor/un/isodoc.rng +1028 -0
  22. data/lib/asciidoctor/un/reqt.rng +171 -0
  23. data/lib/asciidoctor/un/un.rng +242 -0
  24. data/lib/asciidoctor/un/validate.rb +22 -0
  25. data/lib/isodoc/un.rb +10 -0
  26. data/lib/isodoc/un/base_convert.rb +227 -0
  27. data/lib/isodoc/un/html/header.html +225 -0
  28. data/lib/isodoc/un/html/html_unece_intro.html +15 -0
  29. data/lib/isodoc/un/html/html_unece_plenary_titlepage.html +100 -0
  30. data/lib/isodoc/un/html/html_unece_titlepage.html +81 -0
  31. data/lib/isodoc/un/html/htmlstyle.scss +1174 -0
  32. data/lib/isodoc/un/html/logo.jpg +0 -0
  33. data/lib/isodoc/un/html/scripts.html +84 -0
  34. data/lib/isodoc/un/html/scripts.pdf.html +72 -0
  35. data/lib/isodoc/un/html/unece.scss +801 -0
  36. data/lib/isodoc/un/html/word_unece_intro.html +15 -0
  37. data/lib/isodoc/un/html/word_unece_plenary_titlepage.html +160 -0
  38. data/lib/isodoc/un/html/word_unece_titlepage.html +30 -0
  39. data/lib/isodoc/un/html/wordstyle.scss +1141 -0
  40. data/lib/isodoc/un/html_convert.rb +121 -0
  41. data/lib/isodoc/un/metadata.rb +115 -0
  42. data/lib/isodoc/un/pdf_convert.rb +133 -0
  43. data/lib/isodoc/un/word_convert.rb +180 -0
  44. data/lib/metanorma-un.rb +8 -0
  45. data/lib/metanorma/un.rb +12 -0
  46. data/lib/metanorma/un/UN_emblem_blue.svg +193 -0
  47. data/lib/metanorma/un/input.rb +18 -0
  48. data/lib/metanorma/un/processor.rb +43 -0
  49. data/lib/metanorma/un/version.rb +5 -0
  50. data/metanorma-unece.gemspec +48 -0
  51. metadata +334 -0
@@ -0,0 +1,227 @@
1
+ require_relative "metadata"
2
+ require "fileutils"
3
+ require "roman-numerals"
4
+
5
+ module IsoDoc
6
+ module UN
7
+ module BaseConvert
8
+ def metadata_init(lang, script, labels)
9
+ @meta = Metadata.new(lang, script, labels)
10
+ @meta.set(:toc, @toc)
11
+ end
12
+
13
+ def annex_name(annex, name, div)
14
+ div.h1 **{ class: "Annex" } do |t|
15
+ t << "#{anchor(annex['id'], :label)}"
16
+ t.br
17
+ t.b do |b|
18
+ name&.children&.each { |c2| parse(c2, b) }
19
+ end
20
+ end
21
+ end
22
+
23
+ def i18n_init(lang, script)
24
+ super
25
+ @admonition_lbl = "Box"
26
+ @abstract_lbl = "Summary"
27
+ end
28
+
29
+ def fileloc(loc)
30
+ File.join(File.dirname(__FILE__), loc)
31
+ end
32
+
33
+ MIDDLE_CLAUSE = "//clause[parent::sections]".freeze
34
+
35
+ def initial_anchor_names(d)
36
+ preface_names(d.at(ns("//abstract")))
37
+ preface_names(d.at(ns("//foreword")))
38
+ preface_names(d.at(ns("//introduction")))
39
+ sequential_asset_names(d.xpath(ns("//foreword | //introduction")))
40
+ middle_section_asset_names(d)
41
+ clause_names(d, 0)
42
+ termnote_anchor_names(d)
43
+ termexample_anchor_names(d)
44
+ end
45
+
46
+ def clause_names(docxml, sect_num)
47
+ q = "//clause[parent::sections]"
48
+ @paranumber = 0
49
+ docxml.xpath(ns(q)).each_with_index do |c, i|
50
+ section_names(c, (i + sect_num), 1)
51
+ end
52
+ end
53
+
54
+ def levelnumber(num, lvl)
55
+ case lvl % 3
56
+ when 1 then RomanNumerals.to_roman(num)
57
+ when 2 then ("A".ord + num - 1).chr
58
+ when 0 then num.to_s
59
+ end
60
+ end
61
+
62
+ def annex_levelnum(num, lvl)
63
+ case lvl % 3
64
+ when 0 then RomanNumerals.to_roman(num)
65
+ when 1 then ("A".ord + num - 1).chr
66
+ when 2 then num.to_s
67
+ end
68
+ end
69
+
70
+ NONTERMINAL =
71
+ "./clause | ./term | ./terms | ./definitions | ./references".freeze
72
+
73
+ def leaf_section?(clause)
74
+ !clause.at(ns(NONTERMINAL)) &&
75
+ !%w(definitions annex terms).include?(clause.name) &&
76
+ clause.at(ns("./p | ./bibitem"))
77
+ end
78
+
79
+ def label_leaf_section(clause, lvl)
80
+ @paranumber += 1
81
+ @anchors[clause["id"]] = {label: @paranumber.to_s,
82
+ xref: "paragraph #{@paranumber}",
83
+ level: lvl, type: "paragraph" }
84
+ end
85
+
86
+ def label_annex_leaf_section(clause, num, lvl)
87
+ @paranumber += 1
88
+ @anchors[clause["id"]] = {label: @paranumber.to_s,
89
+ xref: "paragraph #{num}.#{@paranumber}",
90
+ level: lvl, type: "paragraph" }
91
+ end
92
+
93
+ def section_names(clause, num, lvl)
94
+ return num if clause.nil?
95
+ leaf_section?(clause) and label_leaf_section(clause, lvl) and return
96
+ num = num + 1
97
+ lbl = levelnumber(num, 1)
98
+ @anchors[clause["id"]] = { label: lbl, level: lvl, type: "clause",
99
+ xref: l10n("#{@clause_lbl} #{lbl}") }
100
+ i = 1
101
+ clause.xpath(ns(NONTERMINAL)).each do |c|
102
+ section_names1(c, "#{lbl}.#{levelnumber(i, lvl + 1)}", lvl + 1)
103
+ i += 1 if !leaf_section?(c)
104
+ end
105
+ num
106
+ end
107
+
108
+ def section_names1(clause, num, level)
109
+ leaf_section?(clause) and label_leaf_section(clause, level) and return
110
+ /\.(?<leafnum>[^.]+$)/ =~ num
111
+ @anchors[clause["id"]] = { label: leafnum, level: level, type: "clause",
112
+ xref: l10n("#{@clause_lbl} #{num}") }
113
+ i = 1
114
+ clause.xpath(ns(NONTERMINAL)).each do |c|
115
+ section_names1(c, "#{num}.#{levelnumber(i, level + 1)}", level + 1)
116
+ i += 1 if !leaf_section?(c)
117
+ end
118
+ end
119
+
120
+ def annex_name_lbl(clause, num)
121
+ l10n("<b>#{@annex_lbl} #{num}</b>")
122
+ end
123
+
124
+ def annex_names(clause, num)
125
+ hierarchical_asset_names(clause, num)
126
+ leaf_section?(clause) and
127
+ label_annex_leaf_section(clause, num, 1) and return
128
+ @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
129
+ type: "clause",
130
+ xref: "#{@annex_lbl} #{num}", level: 1 }
131
+ i = 1
132
+ clause.xpath(ns("./clause")).each do |c|
133
+ annex_names1(c, "#{num}.#{annex_levelnum(i, 2)}", 2)
134
+ i += 1 if !leaf_section?(c)
135
+ end
136
+ end
137
+
138
+ def annex_names1(clause, num, level)
139
+ leaf_section?(clause) and
140
+ label_annex_leaf_section(clause, num, level) and return
141
+ /\.(?<leafnum>[^.]+$)/ =~ num
142
+ @anchors[clause["id"]] = { label: leafnum, xref: "#{@annex_lbl} #{num}",
143
+ level: level, type: "clause" }
144
+ i = 1
145
+ clause.xpath(ns("./clause | ./references")).each do |c|
146
+ annex_names1(c, "#{num}.#{annex_levelnum(i, level + 1)}", level + 1)
147
+ i += 1 if !leaf_section?(c)
148
+ end
149
+ end
150
+
151
+ def back_anchor_names(docxml)
152
+ docxml.xpath(ns("//annex")).each_with_index do |c, i|
153
+ @paranumber = 0
154
+ annex_names(c, RomanNumerals.to_roman(i + 1))
155
+ end
156
+ docxml.xpath(ns("//bibliography/clause |"\
157
+ "//bibliography/references")).each do |b|
158
+ preface_names(b)
159
+ end
160
+ docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
161
+ reference_names(ref)
162
+ end
163
+ end
164
+
165
+ def sequential_admonition_names(clause)
166
+ i = 0
167
+ clause.xpath(ns(".//admonition")).each do |t|
168
+ i += 1 unless t["unnumbered"]
169
+ next if t["id"].nil? || t["id"].empty?
170
+ @anchors[t["id"]] = anchor_struct(i.to_s, nil, @admonition_lbl,
171
+ "box", t["unnumbered"])
172
+ end
173
+ end
174
+
175
+ def hierarchical_admonition_names(clause, num)
176
+ i = 0
177
+ clause.xpath(ns(".//admonition")).each do |t|
178
+ i += 1 unless t["unnumbered"]
179
+ next if t["id"].nil? || t["id"].empty?
180
+ @anchors[t["id"]] =
181
+ anchor_struct("#{num}.#{i}", nil, @admonition_lbl, "box",
182
+ t["unnumbered"])
183
+ end
184
+ end
185
+
186
+ def sequential_asset_names(clause)
187
+ super
188
+ sequential_admonition_names(clause)
189
+ end
190
+
191
+ def hierarchical_asset_names(clause, num)
192
+ super
193
+ hierarchical_admonition_names(clause, num)
194
+ end
195
+
196
+ def admonition_name_parse(node, div, name)
197
+ div.p **{ class: "AdmonitionTitle", style: "text-align:center;" } do |p|
198
+ lbl = anchor(node['id'], :label)
199
+ lbl.nil? or p << l10n("#{@admonition_lbl} #{lbl}")
200
+ name and !lbl.nil? and p << "&nbsp;&mdash; "
201
+ name and name.children.each { |n| parse(n, div) }
202
+ end
203
+ end
204
+
205
+ def admonition_parse(node, out)
206
+ name = node.at(ns("./name"))
207
+ out.div **{ class: "Admonition" } do |t|
208
+ admonition_name_parse(node, t, name) if name
209
+ node.children.each do |n|
210
+ parse(n, t) unless n.name == "name"
211
+ end
212
+ end
213
+ end
214
+
215
+ def inline_header_title(out, node, c1)
216
+ title = c1&.content || ""
217
+ out.span **{ class: "zzMoveToFollowing" } do |s|
218
+ if lbl = anchor(node['id'], :label)
219
+ s << "#{lbl}. " unless @suppressheadingnumbers
220
+ insert_tab(s, 1)
221
+ end
222
+ s << "#{title} "
223
+ end
224
+ end
225
+ end
226
+ end
227
+ end
@@ -0,0 +1,225 @@
1
+ <html xmlns:v="urn:schemas-microsoft-com:vml"
2
+ xmlns:o="urn:schemas-microsoft-com:office:office"
3
+ xmlns:w="urn:schemas-microsoft-com:office:word"
4
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
5
+ xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
6
+
7
+ <head>
8
+ <meta name=Title content="">
9
+ <meta name=Keywords content="">
10
+ <meta http-equiv=Content-Type content="text/html; charset=utf-8">
11
+ <meta name=ProgId content=Word.Document>
12
+ <meta name=Generator content="Microsoft Word 15">
13
+ <meta name=Originator content="Microsoft Word 15">
14
+ <link id=Main-File rel=Main-File href="../{{ filename }}.html">
15
+ <!--[if gte mso 9]><xml>
16
+ <o:shapedefaults v:ext="edit" spidmax="2049"/>
17
+ </xml><![endif]-->
18
+ </head>
19
+
20
+ <body lang=EN link=blue vlink="#954F72">
21
+
22
+ <div style='mso-element:footnote-separator' id=fs>
23
+
24
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
25
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
26
+
27
+ <hr align=left size=1 width="33%">
28
+
29
+ <![endif]></span></span></p>
30
+
31
+ </div>
32
+
33
+ <div style='mso-element:footnote-continuation-separator' id=fcs>
34
+
35
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
36
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
37
+
38
+ <hr align=left size=1>
39
+
40
+ <![endif]></span></span></p>
41
+
42
+ </div>
43
+
44
+ <div style='mso-element:endnote-separator' id=es>
45
+
46
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
47
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
48
+
49
+ <hr align=left size=1 width="33%">
50
+
51
+ <![endif]></span></span></p>
52
+
53
+ </div>
54
+
55
+ <div style='mso-element:endnote-continuation-separator' id=ecs>
56
+
57
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
58
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
59
+
60
+ <hr align=left size=1>
61
+
62
+ <![endif]></span></span></p>
63
+
64
+ </div>
65
+
66
+ <div style='mso-element:header' id=eh1>
67
+
68
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
69
+ mso-line-height-rule:exactly'></p>
70
+
71
+ </div>
72
+
73
+ <div style='mso-element:header' id=h1>
74
+
75
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
76
+ mso-line-height-rule:exactly'></span></p>
77
+ </div>
78
+
79
+ <div style='mso-element:footer' id=ef1>
80
+
81
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
82
+ exactly'></p>
83
+
84
+ </div>
85
+
86
+ <div style='mso-element:header' id=eh2>
87
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
88
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
89
+
90
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
91
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
92
+
93
+ <p class=MsoHeader align=center style='margin-bottom:12.0pt;text-align:center;
94
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
95
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
96
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
97
+
98
+ </div>
99
+ </div>
100
+
101
+ <div style='mso-element:header' id=eh2l>
102
+ <p class=MsoHeaderLandscape align=center style='text-align:center;line-height:12.0pt;
103
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
104
+
105
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
106
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
107
+
108
+ <p class=MsoHeaderLandscape align=center style='margin-bottom:12.0pt;text-align:center;
109
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
110
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
111
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
112
+
113
+ </div>
114
+ </div>
115
+
116
+ <div style='mso-element:header' id=h2>
117
+
118
+ <p class=MsoHeader align=center style='text-align:center;line-height:12.0pt;
119
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
120
+
121
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
122
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
123
+
124
+ <p class=MsoHeader align=center style='margin-bottom:12.0pt;text-align:center;
125
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
126
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
127
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
128
+
129
+ </div>
130
+ </div>
131
+
132
+ <div style='mso-element:header' id=h2l>
133
+
134
+ <p class=MsoHeaderLandscape align=center style='text-align:center;line-height:12.0pt;
135
+ mso-line-height-rule:exactly'><span lang=EN-GB><b>{{ formatted_docnumber }}</b></span></p>
136
+
137
+ <div style='mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;
138
+ mso-border-bottom-alt:solid windowtext .5pt;padding:0cm 0cm 1.0pt 0cm'>
139
+
140
+ <p class=MsoHeaderLandscape align=center style='margin-bottom:12.0pt;text-align:center;
141
+ line-height:12.0pt;mso-line-height-rule:exactly;border:none;mso-border-bottom-alt:
142
+ solid windowtext .5pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm'><span
143
+ lang=EN-US><o:p>&nbsp;</o:p></span></p>
144
+
145
+ </div>
146
+ </div>
147
+
148
+
149
+ <div style='mso-element:footer' id=ef2>
150
+ <p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'></p>
151
+ </div>
152
+
153
+ <div style='mso-element:footer' id=ef2l>
154
+ <p class=MsoFooterLandscape style='line-height:12.0pt;mso-line-height-rule:exactly'></p>
155
+ </div>
156
+
157
+ <div style='mso-element:footer' id=f2>
158
+ <p class=MsoFooter style='line-height:12.0pt'></p>
159
+ </div>
160
+
161
+ <div style='mso-element:footer' id=f2l>
162
+ <p class=MsoFooterLandscape style='line-height:12.0pt'></p>
163
+ </div>
164
+
165
+ <div style='mso-element:footer' id=ef3>
166
+ <p class=MsoFooter align="center" style='text-align:center;margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
167
+ exactly'><!--[if supportFields]><b><span
168
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
169
+ style='mso-element:field-begin'></span><span
170
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
171
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b>
172
+ <span lang=EN-GB style='font-size:10.0pt;
173
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b>
174
+ <span lang=EN-GB style='font-size:10.0pt;
175
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
176
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
177
+ style='mso-tab-count:0'>                                                                                                                                                                           </span></span></p>
178
+ </div>
179
+
180
+ <div style='mso-element:footer' id=ef3l>
181
+ <p class=MsoFooterLandscape align="center" style='text-align:center;margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
182
+ exactly'><!--[if supportFields]><b><span
183
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
184
+ style='mso-element:field-begin'></span><span
185
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
186
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b>
187
+ <span lang=EN-GB style='font-size:10.0pt;
188
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b>
189
+ <span lang=EN-GB style='font-size:10.0pt;
190
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
191
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
192
+ style='mso-tab-count:0'>                                                                                                                                                                           </span></span></p>
193
+ </div>
194
+
195
+ <div style='mso-element:footer' id=f3>
196
+ <p class=MsoFooter align="center" style='text-align:center;line-height:12.0pt'><span lang=EN-GB
197
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:0'>                                                                                                                                                                           </span></span><!--[if supportFields]><b>
198
+ <span lang=EN-GB style='font-size:10.0pt;
199
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
200
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
201
+ style='mso-element:field-separator'></span></span></b><![endif]--><b>
202
+ <span lang=EN-GB style='font-size:10.0pt;
203
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b>
204
+ <span lang=EN-GB style='font-size:10.0pt;
205
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
206
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
207
+ </div>
208
+
209
+ <div style='mso-element:footer' id=f3l>
210
+ <p class=MsoFooterLandscape align="center" style='text-align:center;line-height:12.0pt'><span lang=EN-GB
211
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:0'>                                                                                                                                                                           </span></span><!--[if supportFields]><b>
212
+ <span lang=EN-GB style='font-size:10.0pt;
213
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
214
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
215
+ style='mso-element:field-separator'></span></span></b><![endif]--><b>
216
+ <span lang=EN-GB style='font-size:10.0pt;
217
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b>
218
+ <span lang=EN-GB style='font-size:10.0pt;
219
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
220
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
221
+ </div>
222
+
223
+ </body>
224
+
225
+ </html>