-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathxgboost.html
348 lines (298 loc) · 168 KB
/
xgboost.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Air Traffic Challenge - xgboost</title>
<link href="data:text/css;charset=utf-8,%2Epagedtable%20%7B%0Aoverflow%3A%20auto%3B%0Apadding%2Dleft%3A%208px%3B%0Apadding%2Dright%3A%208px%3B%0A%7D%0A%2Epagedtable%2Dwrapper%20%7B%0Aborder%3A%201px%20solid%20%23ccc%3B%0Aborder%2Dradius%3A%204px%3B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Epagedtable%20table%20%7B%0Awidth%3A%20100%25%3B%0Amax%2Dwidth%3A%20100%25%3B%0Amargin%3A%200%3B%0A%7D%0A%2Epagedtable%20th%20%7B%0Apadding%3A%200%205px%200%205px%3B%0Aborder%3A%20none%3B%0Aborder%2Dbottom%3A%202px%20solid%20%23dddddd%3B%0Amin%2Dwidth%3A%2045px%3B%0A%7D%0A%2Epagedtable%2Dempty%20th%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Epagedtable%20td%20%7B%0Apadding%3A%200%204px%200%204px%3B%0A%7D%0A%2Epagedtable%20%2Eeven%20%7B%0Abackground%2Dcolor%3A%20%23fcfcfc%3B%0A%7D%0A%2Epagedtable%2Dpadding%2Dcol%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Epagedtable%20a%20%7B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dnav%20%7B%0Acursor%3A%20pointer%3B%0Apadding%3A%200%205px%200%205px%3B%0Afloat%3A%20right%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dnav%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20%23999%3B%0A%7D%0Aa%2Epagedtable%2Dindex%2Dnav%2Ddisabled%3Ahover%20%7B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Epagedtable%2Dindexes%20%7B%0Acursor%3A%20pointer%3B%0Afloat%3A%20right%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dcurrent%20%7B%0Acursor%3A%20default%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0Aborder%3A%200%3B%0A%7D%0Aa%2Epagedtable%2Dindex%2Dcurrent%3Ahover%20%7B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Epagedtable%2Dindex%20%7B%0Awidth%3A%2030px%3B%0Adisplay%3A%20inline%2Dblock%3B%0Atext%2Dalign%3A%20center%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dseparator%2Dleft%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Acolor%3A%20%23333%3B%0Afont%2Dsize%3A%209px%3B%0Apadding%3A%200%200%200%200%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dseparator%2Dright%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Acolor%3A%20%23333%3B%0Afont%2Dsize%3A%209px%3B%0Apadding%3A%200%204px%200%200%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Epagedtable%2Dfooter%20%7B%0Apadding%2Dtop%3A%204px%3B%0Apadding%2Dbottom%3A%205px%3B%0A%7D%0A%2Epagedtable%2Dnot%2Dempty%20%2Epagedtable%2Dfooter%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23dddddd%3B%0A%7D%0A%2Epagedtable%2Dinfo%20%7B%0Aoverflow%3A%20hidden%3B%0Acolor%3A%20%23999%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Atext%2Doverflow%3A%20ellipsis%3B%0A%7D%0A%2Epagedtable%2Dheader%2Dname%20%7B%0Aoverflow%3A%20hidden%3B%0Atext%2Doverflow%3A%20ellipsis%3B%0A%7D%0A%2Epagedtable%2Dheader%2Dtype%20%7B%0Acolor%3A%20%23999%3B%0Afont%2Dweight%3A%20400%3B%0A%7D%0A%2Epagedtable%2Dna%2Dcell%20%7B%0Afont%2Dstyle%3A%20italic%3B%0Aopacity%3A%200%2E3%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,Ly8gUHJvZHVjdGlvbiBzdGVwcyBvZiBFQ01BLTI2MiwgRWRpdGlvbiA1LCAxNS40LjQuMTgKLy8gUmVmZXJlbmNlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjQuNC4xOAppZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7CgogIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHsKCiAgICB2YXIgVCwgazsKCiAgICBpZiAodGhpcyA9PT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7CiAgICB9CgogICAgLy8gMS4gTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRvT2JqZWN0KCkgcGFzc2luZyB0aGUKICAgIC8vIHx0aGlzfCB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTsKCiAgICAvLyAyLiBMZXQgbGVuVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQoKSBpbnRlcm5hbAogICAgLy8gbWV0aG9kIG9mIE8gd2l0aCB0aGUgYXJndW1lbnQgImxlbmd0aCIuCiAgICAvLyAzLiBMZXQgbGVuIGJlIHRvVWludDMyKGxlblZhbHVlKS4KICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDsKCiAgICAvLyA0LiBJZiBpc0NhbGxhYmxlKGNhbGxiYWNrKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgLy8gU2VlOiBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjExCiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CiAgICB9CgogICAgLy8gNS4gSWYgdGhpc0FyZyB3YXMgc3VwcGxpZWQsIGxldCBUIGJlIHRoaXNBcmc7IGVsc2UgbGV0CiAgICAvLyBUIGJlIHVuZGVmaW5lZC4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICBUID0gdGhpc0FyZzsKICAgIH0KCiAgICAvLyA2LiBMZXQgayBiZSAwCiAgICBrID0gMDsKCiAgICAvLyA3LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KICAgIHdoaWxlIChrIDwgbGVuKSB7CgogICAgICB2YXIga1ZhbHVlOwoKICAgICAgLy8gYS4gTGV0IFBrIGJlIFRvU3RyaW5nKGspLgogICAgICAvLyAgICBUaGlzIGlzIGltcGxpY2l0IGZvciBMSFMgb3BlcmFuZHMgb2YgdGhlIGluIG9wZXJhdG9yCiAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEhhc1Byb3BlcnR5CiAgICAgIC8vICAgIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgUGsuCiAgICAgIC8vICAgIFRoaXMgc3RlcCBjYW4gYmUgY29tYmluZWQgd2l0aCBjCiAgICAgIC8vIGMuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KICAgICAgaWYgKGsgaW4gTykgewoKICAgICAgICAvLyBpLiBMZXQga1ZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgR2V0IGludGVybmFsCiAgICAgICAgLy8gbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBQay4KICAgICAgICBrVmFsdWUgPSBPW2tdOwoKICAgICAgICAvLyBpaS4gQ2FsbCB0aGUgQ2FsbCBpbnRlcm5hbCBtZXRob2Qgb2YgY2FsbGJhY2sgd2l0aCBUIGFzCiAgICAgICAgLy8gdGhlIHRoaXMgdmFsdWUgYW5kIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyBrVmFsdWUsIGssIGFuZCBPLgogICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTsKICAgICAgfQogICAgICAvLyBkLiBJbmNyZWFzZSBrIGJ5IDEuCiAgICAgIGsrKzsKICAgIH0KICAgIC8vIDguIHJldHVybiB1bmRlZmluZWQKICB9Owp9CgovLyBQcm9kdWN0aW9uIHN0ZXBzIG9mIEVDTUEtMjYyLCBFZGl0aW9uIDUsIDE1LjQuNC4xOQovLyBSZWZlcmVuY2U6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNC40LjE5CmlmICghQXJyYXkucHJvdG90eXBlLm1hcCkgewoKICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHsKCiAgICB2YXIgVCwgQSwgazsKCiAgICBpZiAodGhpcyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyB0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTsKICAgIH0KCiAgICAvLyAxLiBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3QgcGFzc2luZyB0aGUgfHRoaXN8CiAgICAvLyAgICB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTsKCiAgICAvLyAyLiBMZXQgbGVuVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQgaW50ZXJuYWwKICAgIC8vICAgIG1ldGhvZCBvZiBPIHdpdGggdGhlIGFyZ3VtZW50ICJsZW5ndGgiLgogICAgLy8gMy4gTGV0IGxlbiBiZSBUb1VpbnQzMihsZW5WYWx1ZSkuCiAgICB2YXIgbGVuID0gTy5sZW5ndGggPj4+IDA7CgogICAgLy8gNC4gSWYgSXNDYWxsYWJsZShjYWxsYmFjaykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgIC8vIFNlZTogaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS4xMQogICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpOwogICAgfQoKICAgIC8vIDUuIElmIHRoaXNBcmcgd2FzIHN1cHBsaWVkLCBsZXQgVCBiZSB0aGlzQXJnOyBlbHNlIGxldCBUIGJlIHVuZGVmaW5lZC4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICBUID0gdGhpc0FyZzsKICAgIH0KCiAgICAvLyA2LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheShsZW4pCiAgICAvLyAgICB3aGVyZSBBcnJheSBpcyB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gY29uc3RydWN0b3Igd2l0aCB0aGF0IG5hbWUgYW5kCiAgICAvLyAgICBsZW4gaXMgdGhlIHZhbHVlIG9mIGxlbi4KICAgIEEgPSBuZXcgQXJyYXkobGVuKTsKCiAgICAvLyA3LiBMZXQgayBiZSAwCiAgICBrID0gMDsKCiAgICAvLyA4LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KICAgIHdoaWxlIChrIDwgbGVuKSB7CgogICAgICB2YXIga1ZhbHVlLCBtYXBwZWRWYWx1ZTsKCiAgICAgIC8vIGEuIExldCBQayBiZSBUb1N0cmluZyhrKS4KICAgICAgLy8gICBUaGlzIGlzIGltcGxpY2l0IGZvciBMSFMgb3BlcmFuZHMgb2YgdGhlIGluIG9wZXJhdG9yCiAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEhhc1Byb3BlcnR5IGludGVybmFsCiAgICAgIC8vICAgIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgUGsuCiAgICAgIC8vICAgVGhpcyBzdGVwIGNhbiBiZSBjb21iaW5lZCB3aXRoIGMKICAgICAgLy8gYy4gSWYga1ByZXNlbnQgaXMgdHJ1ZSwgdGhlbgogICAgICBpZiAoayBpbiBPKSB7CgogICAgICAgIC8vIGkuIExldCBrVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQgaW50ZXJuYWwKICAgICAgICAvLyAgICBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IFBrLgogICAgICAgIGtWYWx1ZSA9IE9ba107CgogICAgICAgIC8vIGlpLiBMZXQgbWFwcGVkVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBDYWxsIGludGVybmFsCiAgICAgICAgLy8gICAgIG1ldGhvZCBvZiBjYWxsYmFjayB3aXRoIFQgYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFyZ3VtZW50CiAgICAgICAgLy8gICAgIGxpc3QgY29udGFpbmluZyBrVmFsdWUsIGssIGFuZCBPLgogICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pOwoKICAgICAgICAvLyBpaWkuIENhbGwgdGhlIERlZmluZU93blByb3BlcnR5IGludGVybmFsIG1ldGhvZCBvZiBBIHdpdGggYXJndW1lbnRzCiAgICAgICAgLy8gUGssIFByb3BlcnR5IERlc2NyaXB0b3IKICAgICAgICAvLyB7IFZhbHVlOiBtYXBwZWRWYWx1ZSwKICAgICAgICAvLyAgIFdyaXRhYmxlOiB0cnVlLAogICAgICAgIC8vICAgRW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAvLyAgIENvbmZpZ3VyYWJsZTogdHJ1ZSB9LAogICAgICAgIC8vIGFuZCBmYWxzZS4KCiAgICAgICAgLy8gSW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgdXNlIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIGssIHsKICAgICAgICAvLyAgIHZhbHVlOiBtYXBwZWRWYWx1ZSwKICAgICAgICAvLyAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIC8vICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAvLyAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIC8vIH0pOwoKICAgICAgICAvLyBGb3IgYmVzdCBicm93c2VyIHN1cHBvcnQsIHVzZSB0aGUgZm9sbG93aW5nOgogICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTsKICAgICAgfQogICAgICAvLyBkLiBJbmNyZWFzZSBrIGJ5IDEuCiAgICAgIGsrKzsKICAgIH0KCiAgICAvLyA5LiByZXR1cm4gQQogICAgcmV0dXJuIEE7CiAgfTsKfQoKdmFyIFBhZ2VkVGFibGUgPSBmdW5jdGlvbiAocGFnZWRUYWJsZSkgewogIHZhciBtZSA9IHRoaXM7CgogIHZhciBzb3VyY2UgPSBmdW5jdGlvbihwYWdlZFRhYmxlKSB7CiAgICB2YXIgc291cmNlRWxlbXMgPSBbXS5zbGljZS5jYWxsKHBhZ2VkVGFibGUuY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbihlKSB7CiAgICAgIHJldHVybiBlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wYWdlZHRhYmxlLXNvdXJjZSIpOwogICAgfSk7CgogICAgaWYgKHNvdXJjZUVsZW1zID09PSBudWxsIHx8IHNvdXJjZUVsZW1zLmxlbmd0aCAhPT0gMSkgewogICAgICB0aHJvdygiQSBzaW5nbGUgZGF0YS1wYWdlZHRhYmxlLXNvdXJjZSB3YXMgbm90IGZvdW5kIik7CiAgICB9CgogICAgcmV0dXJuIEpTT04ucGFyc2Uoc291cmNlRWxlbXNbMF0uaW5uZXJIVE1MKTsKICB9KHBhZ2VkVGFibGUpOwoKICB2YXIgb3B0aW9ucyA9IGZ1bmN0aW9uKHNvdXJjZSkgewogICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Yoc291cmNlLm9wdGlvbnMpICE9PSAidW5kZWZpbmVkIiAmJgogICAgICBzb3VyY2Uub3B0aW9ucyAhPT0gbnVsbCA/IHNvdXJjZS5vcHRpb25zIDoge307CgogICAgdmFyIGNvbHVtbnMgPSB0eXBlb2Yob3B0aW9ucy5jb2x1bW5zKSAhPT0gInVuZGVmaW5lZCIgPyBvcHRpb25zLmNvbHVtbnMgOiB7fTsKICAgIHZhciByb3dzID0gdHlwZW9mKG9wdGlvbnMucm93cykgIT09ICJ1bmRlZmluZWQiID8gb3B0aW9ucy5yb3dzIDoge307CgogICAgdmFyIHBvc2l0aXZlSW50T3JOdWxsID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA+PSAwID8gcGFyc2VJbnQodmFsdWUpIDogbnVsbDsKICAgIH07CgogICAgcmV0dXJuIHsKICAgICAgcGFnZXM6IHBvc2l0aXZlSW50T3JOdWxsKG9wdGlvbnMucGFnZXMpLAogICAgICByb3dzOiB7CiAgICAgICAgbWluOiBwb3NpdGl2ZUludE9yTnVsbChyb3dzLm1pbiksCiAgICAgICAgbWF4OiBwb3NpdGl2ZUludE9yTnVsbChyb3dzLm1heCksCiAgICAgICAgdG90YWw6IHBvc2l0aXZlSW50T3JOdWxsKHJvd3MudG90YWwpCiAgICAgIH0sCiAgICAgIGNvbHVtbnM6IHsKICAgICAgICBtaW46IHBvc2l0aXZlSW50T3JOdWxsKGNvbHVtbnMubWluKSwKICAgICAgICBtYXg6IHBvc2l0aXZlSW50T3JOdWxsKGNvbHVtbnMubWF4KSwKICAgICAgICB0b3RhbDogcG9zaXRpdmVJbnRPck51bGwoY29sdW1ucy50b3RhbCkKICAgICAgfQogICAgfTsKICB9KHNvdXJjZSk7CgogIHZhciBNZWFzdXJlciA9IGZ1bmN0aW9uKCkgewoKICAgIC8vIHNldCBzb21lIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgdGhhdCB3aWxsIGdldCBhZGp1c3RlZCBpbiBydW50aW1lCiAgICBtZS5tZWFzdXJlcyA9IHsKICAgICAgcGFkZGluZzogMTIsCiAgICAgIGNoYXJhY3RlcjogOCwKICAgICAgaGVpZ2h0OiAxNSwKICAgICAgZGVmYXVsdHM6IHRydWUKICAgIH07CgogICAgbWUuY2FsY3VsYXRlID0gZnVuY3Rpb24obWVhc3VyZXNDZWxsKSB7CiAgICAgIGlmICghbWUubWVhc3VyZXMuZGVmYXVsdHMpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdmFyIG1lYXN1cmVzQ2VsbFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobWVhc3VyZXNDZWxsLCBudWxsKTsKCiAgICAgIHZhciBuZXdQYWRkaW5nID0gcGFyc2VQYWRkaW5nKG1lYXN1cmVzQ2VsbFN0eWxlLnBhZGRpbmdMZWZ0KSArCiAgICAgICAgICAgIHBhcnNlUGFkZGluZyhtZWFzdXJlc0NlbGxTdHlsZS5wYWRkaW5nUmlnaHQpOwoKICAgICAgdmFyIHNhbXBsZVN0cmluZyA9ICJBQkNERUZHSElKMDEyMzQ1Njc4OSI7CiAgICAgIHZhciBuZXdDaGFyYWN0ZXIgPSBNYXRoLmNlaWwobWVhc3VyZXNDZWxsLmNsaWVudFdpZHRoIC8gc2FtcGxlU3RyaW5nLmxlbmd0aCk7CgogICAgICBpZiAobmV3UGFkZGluZyA8PSAwIHx8IG5ld0NoYXJhY3RlciA8PSAwKQogICAgICAgIHJldHVybjsKCiAgICAgIG1lLm1lYXN1cmVzLnBhZGRpbmcgPSBuZXdQYWRkaW5nOwogICAgICBtZS5tZWFzdXJlcy5jaGFyYWN0ZXIgPSBuZXdDaGFyYWN0ZXI7CiAgICAgIG1lLm1lYXN1cmVzLmhlaWdodCA9IG1lYXN1cmVzQ2VsbC5jbGllbnRIZWlnaHQ7CiAgICAgIG1lLm1lYXN1cmVzLmRlZmF1bHRzID0gZmFsc2U7CiAgICB9OwoKICAgIHJldHVybiBtZTsKICB9OwoKICB2YXIgUGFnZSA9IGZ1bmN0aW9uKGRhdGEsIG9wdGlvbnMpIHsKICAgIHZhciBtZSA9IHRoaXM7CgogICAgdmFyIGRlZmF1bHRzID0gewogICAgICBtYXg6IDcsCiAgICAgIHJvd3M6IDEwCiAgICB9OwoKICAgIHZhciB0b3RhbFBhZ2VzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyBtZS5yb3dzKTsKICAgIH07CgogICAgbWUubnVtYmVyID0gMDsKICAgIG1lLm1heCA9IG9wdGlvbnMucGFnZXMgIT09IG51bGwgPyBvcHRpb25zLnBhZ2VzIDogZGVmYXVsdHMubWF4OwogICAgbWUudmlzaWJsZSA9IG1lLm1heDsKICAgIG1lLnJvd3MgPSBvcHRpb25zLnJvd3MubWluICE9PSBudWxsID8gb3B0aW9ucy5yb3dzLm1pbiA6IGRlZmF1bHRzLnJvd3M7CiAgICBtZS50b3RhbCA9IHRvdGFsUGFnZXMoKTsKCiAgICBtZS5zZXRSb3dzID0gZnVuY3Rpb24obmV3Um93cykgewogICAgICBtZS5yb3dzID0gbmV3Um93czsKICAgICAgbWUudG90YWwgPSB0b3RhbFBhZ2VzKCk7CiAgICB9OwoKICAgIG1lLnNldFBhZ2VOdW1iZXIgPSBmdW5jdGlvbihuZXdQYWdlTnVtYmVyKSB7CiAgICAgIGlmIChuZXdQYWdlTnVtYmVyIDwgMCkgbmV3UGFnZU51bWJlciA9IDA7CiAgICAgIGlmIChuZXdQYWdlTnVtYmVyID49IG1lLnRvdGFsKSBuZXdQYWdlTnVtYmVyID0gbWUudG90YWwgLSAxOwoKICAgICAgbWUubnVtYmVyID0gbmV3UGFnZU51bWJlcjsKICAgIH07CgogICAgbWUuc2V0VmlzaWJsZVBhZ2VzID0gZnVuY3Rpb24odmlzaWJsZVBhZ2VzKSB7CiAgICAgIG1lLnZpc2libGUgPSBNYXRoLm1pbihtZS5tYXgsIHZpc2libGVQYWdlcyk7CiAgICAgIG1lLnNldFBhZ2VOdW1iZXIobWUubnVtYmVyKTsKICAgIH07CgogICAgbWUuZ2V0VmlzaWJsZVBhZ2VSYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhcnQgPSBtZS5udW1iZXIgLSBNYXRoLm1heChNYXRoLmZsb29yKChtZS52aXNpYmxlIC0gMSkgLyAyKSwgMCk7CiAgICAgIHZhciBlbmQgPSBtZS5udW1iZXIgKyBNYXRoLmZsb29yKG1lLnZpc2libGUgLyAyKSArIDE7CiAgICAgIHZhciBwYWdlQ291bnQgPSBtZS50b3RhbDsKCiAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICB2YXIgZGlmZlRvU3RhcnQgPSAwIC0gc3RhcnQ7CiAgICAgICAgc3RhcnQgKz0gZGlmZlRvU3RhcnQ7CiAgICAgICAgZW5kICs9IGRpZmZUb1N0YXJ0OwogICAgICB9CgogICAgICBpZiAoZW5kID4gcGFnZUNvdW50KSB7CiAgICAgICAgdmFyIGRpZmZUb0VuZCA9IGVuZCAtIHBhZ2VDb3VudDsKICAgICAgICBzdGFydCAtPSBkaWZmVG9FbmQ7CiAgICAgICAgZW5kIC09IGRpZmZUb0VuZDsKICAgICAgfQoKICAgICAgc3RhcnQgPSBzdGFydCA8IDAgPyAwIDogc3RhcnQ7CiAgICAgIGVuZCA9IGVuZCA+PSBwYWdlQ291bnQgPyBwYWdlQ291bnQgOiBlbmQ7CgogICAgICB2YXIgZmlyc3QgPSBmYWxzZTsKICAgICAgdmFyIGxhc3QgPSBmYWxzZTsKCiAgICAgIGlmIChzdGFydCA+IDAgJiYgbWUudmlzaWJsZSA+IDEpIHsKICAgICAgICBzdGFydCA9IHN0YXJ0ICsgMTsKICAgICAgICBmaXJzdCA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChlbmQgPCBwYWdlQ291bnQgJiYgbWUudmlzaWJsZSA+IDIpIHsKICAgICAgICBlbmQgPSBlbmQgLSAxOwogICAgICAgIGxhc3QgPSB0cnVlOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGZpcnN0OiBmaXJzdCwKICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgbGFzdDogbGFzdAogICAgICB9OwogICAgfTsKCiAgICBtZS5nZXRSb3dTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcm93U3RhcnQgPSBwYWdlLm51bWJlciAqIHBhZ2Uucm93czsKICAgICAgaWYgKHJvd1N0YXJ0IDwgMCkKICAgICAgICByb3dTdGFydCA9IDA7CgogICAgICByZXR1cm4gcm93U3RhcnQ7CiAgICB9OwoKICAgIG1lLmdldFJvd0VuZCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcm93U3RhcnQgPSBtZS5nZXRSb3dTdGFydCgpOwogICAgICByZXR1cm4gTWF0aC5taW4ocm93U3RhcnQgKyBtZS5yb3dzLCBkYXRhLmxlbmd0aCk7CiAgICB9OwoKICAgIG1lLmdldFBhZGRpbmdSb3dzID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciByb3dTdGFydCA9IG1lLmdldFJvd1N0YXJ0KCk7CiAgICAgIHZhciByb3dFbmQgPSBtZS5nZXRSb3dFbmQoKTsKICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID4gbWUucm93cyA/IG1lLnJvd3MgLSAocm93RW5kIC0gcm93U3RhcnQpIDogMDsKICAgIH07CiAgfTsKCiAgdmFyIENvbHVtbnMgPSBmdW5jdGlvbihkYXRhLCBjb2x1bW5zLCBvcHRpb25zKSB7CiAgICB2YXIgbWUgPSB0aGlzOwoKICAgIG1lLmRlZmF1bHRzID0gewogICAgICBtaW46IDUKICAgIH07CgogICAgbWUubnVtYmVyID0gMDsKICAgIG1lLnZpc2libGUgPSAwOwogICAgbWUudG90YWwgPSBjb2x1bW5zLmxlbmd0aDsKICAgIG1lLnN1YnNldCA9IFtdOwogICAgbWUucGFkZGluZyA9IDA7CiAgICBtZS5taW4gPSBvcHRpb25zLmNvbHVtbnMubWluICE9PSBudWxsID8gb3B0aW9ucy5jb2x1bW5zLm1pbiA6IG1lLmRlZmF1bHRzLm1pbjsKICAgIG1lLm1heCA9IG9wdGlvbnMuY29sdW1ucy5tYXggIT09IG51bGwgPyBvcHRpb25zLmNvbHVtbnMubWF4IDogbnVsbDsKICAgIG1lLndpZHRocyA9IHt9OwoKICAgIHZhciB3aWR0aHNMb29rQWhlYWQgPSBNYXRoLm1heCgxMDAsIG9wdGlvbnMucm93cy5taW4pOwogICAgdmFyIHBhZGRpbmdDb2xDaGFycyA9IDEwOwoKICAgIG1lLmVtcHR5TmFtZXMgPSBmdW5jdGlvbigpIHsKICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbikgewogICAgICAgIGlmIChjb2x1bW5zLmxhYmVsICE9PSBudWxsICYmIGNvbHVtbnMubGFiZWwgIT09ICIiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKCiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB2YXIgcGFyc2VQYWRkaW5nID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA+PSAwID8gcGFyc2VJbnQodmFsdWUpIDogMDsKICAgIH07CgogICAgbWUuY2FsY3VsYXRlV2lkdGhzID0gZnVuY3Rpb24obWVhc3VyZXMpIHsKICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbikgewogICAgICAgIHZhciBtYXhDaGFycyA9IE1hdGgubWF4KAogICAgICAgICAgY29sdW1uLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoLAogICAgICAgICAgY29sdW1uLnR5cGUudG9TdHJpbmcoKS5sZW5ndGgKICAgICAgICApOwoKICAgICAgICBmb3IgKHZhciBpZHhSb3cgPSAwOyBpZHhSb3cgPCBNYXRoLm1pbih3aWR0aHNMb29rQWhlYWQsIGRhdGEubGVuZ3RoKTsgaWR4Um93KyspIHsKICAgICAgICAgIG1heENoYXJzID0gTWF0aC5tYXgobWF4Q2hhcnMsIGRhdGFbaWR4Um93XVtjb2x1bW4ubmFtZS50b1N0cmluZygpXS5sZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgbWUud2lkdGhzW2NvbHVtbi5uYW1lXSA9IHsKICAgICAgICAgIC8vIHdpZHRoIGluIGNoYXJhY3RlcnMKICAgICAgICAgIGNoYXJzOiBtYXhDaGFycywKICAgICAgICAgIC8vIHdpZHRoIGZvciB0aGUgaW5uZXIgaHRtbCBjb2x1bW5zCiAgICAgICAgICBpbm5lcjogbWF4Q2hhcnMgKiBtZWFzdXJlcy5jaGFyYWN0ZXIsCiAgICAgICAgICAvLyB3aWR0aCBhZGRpbmcgb3V0ZXIgc3R5bGVzIGxpa2UgcGFkZGluZwogICAgICAgICAgb3V0ZXI6IG1heENoYXJzICogbWVhc3VyZXMuY2hhcmFjdGVyICsgbWVhc3VyZXMucGFkZGluZwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKCiAgICBtZS5nZXRXaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgd2lkdGhPdXRlciA9IDA7CiAgICAgIGZvciAodmFyIGlkeENvbCA9IDA7IGlkeENvbCA8IG1lLnN1YnNldC5sZW5ndGg7IGlkeENvbCsrKSB7CiAgICAgICAgdmFyIGNvbHVtbk5hbWUgPSBtZS5zdWJzZXRbaWR4Q29sXS5uYW1lOwogICAgICAgIHdpZHRoT3V0ZXIgPSB3aWR0aE91dGVyICsgbWUud2lkdGhzW2NvbHVtbk5hbWVdLm91dGVyOwogICAgICB9CgogICAgICB3aWR0aE91dGVyID0gd2lkdGhPdXRlciArIG1lLnBhZGRpbmcgKiBwYWRkaW5nQ29sQ2hhcnMgKiBtZWFzdXJlci5tZWFzdXJlcy5jaGFyYWN0ZXI7CgogICAgICBpZiAobWUuaGFzTW9yZUxlZnRDb2x1bW5zKCkpIHsKICAgICAgICB3aWR0aE91dGVyID0gd2lkdGhPdXRlciArIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYICsgbWVhc3VyZXIubWVhc3VyZXMucGFkZGluZzsKICAgICAgfQoKICAgICAgaWYgKG1lLmhhc01vcmVSaWdodENvbHVtbnMoKSkgewogICAgICAgIHdpZHRoT3V0ZXIgPSB3aWR0aE91dGVyICsgY29sdW1uTmF2aWdhdGlvbldpZHRoUFggKyBtZWFzdXJlci5tZWFzdXJlcy5wYWRkaW5nOwogICAgICB9CgogICAgICByZXR1cm4gd2lkdGhPdXRlcjsKICAgIH07CgogICAgbWUudXBkYXRlU2xpY2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKG1lLm51bWJlciArIG1lLnZpc2libGUgPj0gbWUudG90YWwpCiAgICAgICAgbWUubnVtYmVyID0gbWUudG90YWwgLSBtZS52aXNpYmxlOwoKICAgICAgaWYgKG1lLm51bWJlciA8IDApIG1lLm51bWJlciA9IDA7CgogICAgICBtZS5zdWJzZXQgPSBjb2x1bW5zLnNsaWNlKG1lLm51bWJlciwgTWF0aC5taW4obWUubnVtYmVyICsgbWUudmlzaWJsZSwgbWUudG90YWwpKTsKCiAgICAgIG1lLnN1YnNldCA9IG1lLnN1YnNldC5tYXAoZnVuY3Rpb24oY29sdW1uKSB7CiAgICAgICAgT2JqZWN0LmtleXMoY29sdW1uKS5mb3JFYWNoKGZ1bmN0aW9uKGNvbEtleSkgewogICAgICAgICAgY29sdW1uW2NvbEtleV0gPSBjb2x1bW5bY29sS2V5XSA9PT0gbnVsbCA/ICIiIDogY29sdW1uW2NvbEtleV0udG9TdHJpbmcoKTsKICAgICAgICB9KTsKCiAgICAgICAgY29sdW1uLndpZHRoID0gbnVsbDsKICAgICAgICByZXR1cm4gY29sdW1uOwogICAgICB9KTsKICAgIH07CgogICAgbWUuc2V0VmlzaWJsZUNvbHVtbnMgPSBmdW5jdGlvbihjb2x1bW5OdW1iZXIsIG5ld1Zpc2libGVDb2x1bW5zLCBwYWRkaW5nQ291bnQpIHsKICAgICAgbWUubnVtYmVyID0gY29sdW1uTnVtYmVyOwogICAgICBtZS52aXNpYmxlID0gbmV3VmlzaWJsZUNvbHVtbnM7CiAgICAgIG1lLnBhZGRpbmcgPSBwYWRkaW5nQ291bnQ7CgogICAgICBtZS51cGRhdGVTbGljZSgpOwogICAgfTsKCiAgICBtZS5pbmNDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbihpbmNyZW1lbnQpIHsKICAgICAgbWUubnVtYmVyID0gbWUubnVtYmVyICsgaW5jcmVtZW50OwogICAgfTsKCiAgICBtZS5zZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbihuZXdOdW1iZXIpIHsKICAgICAgbWUubnVtYmVyID0gbmV3TnVtYmVyOwogICAgfTsKCiAgICBtZS5zZXRQYWRkaW5nQ291bnQgPSBmdW5jdGlvbihuZXdQYWRkaW5nKSB7CiAgICAgIG1lLnBhZGRpbmcgPSBuZXdQYWRkaW5nOwogICAgfTsKCiAgICBtZS5nZXRQYWRkaW5nQ291bnQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG1lLnBhZGRpbmc7CiAgICB9OwoKICAgIG1lLmhhc01vcmVMZWZ0Q29sdW1ucyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbWUubnVtYmVyID4gMDsKICAgIH07CgogICAgbWUuaGFzTW9yZVJpZ2h0Q29sdW1ucyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbWUubnVtYmVyICsgbWUudmlzaWJsZSA8IG1lLnRvdGFsOwogICAgfTsKCiAgICBtZS51cGRhdGVTbGljZSgwKTsKICAgIHJldHVybiBtZTsKICB9OwoKICB2YXIgZGF0YSA9IHNvdXJjZS5kYXRhOwogIHZhciBwYWdlID0gbmV3IFBhZ2UoZGF0YSwgb3B0aW9ucyk7CiAgdmFyIG1lYXN1cmVyID0gbmV3IE1lYXN1cmVyKGRhdGEsIG9wdGlvbnMpOwogIHZhciBjb2x1bW5zID0gbmV3IENvbHVtbnMoZGF0YSwgc291cmNlLmNvbHVtbnMsIG9wdGlvbnMpOwoKICB2YXIgdGFibGUgPSBudWxsOwogIHZhciB0YWJsZURpdiA9IG51bGw7CiAgdmFyIGhlYWRlciA9IG51bGw7CiAgdmFyIGZvb3RlciA9IG51bGw7CiAgdmFyIHRib2R5ID0gbnVsbDsKCiAgLy8gQ2FjaGVzIHBhZ2VkVGFibGUuY2xpZW50V2lkdGgsIHNwZWNpYWxseSBmb3Igd2Via2l0CiAgdmFyIGNhY2hlZFBhZ2VkVGFibGVDbGllbnRXaWR0aCA9IG51bGw7CgogIHZhciBvbkNoYW5nZUNhbGxiYWNrcyA9IFtdOwoKICB2YXIgY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKICAgIGlmKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHsKICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7CiAgICB9IGVsc2UgaWYod2luZG93LmdldFNlbGVjdGlvbikgewogICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICB9CiAgfTsKCiAgdmFyIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYID0gNTsKCiAgdmFyIHJlbmRlckNvbHVtbk5hdmlnYXRpb24gPSBmdW5jdGlvbihpbmNyZW1lbnQsIGJhY2t3YXJkcykgewogICAgdmFyIGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBhcnJvdy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwKICAgICAgImJvcmRlci10b3A6ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweCBzb2xpZCB0cmFuc3BhcmVudDsiICsKICAgICAgImJvcmRlci1ib3R0b206ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweCBzb2xpZCB0cmFuc3BhcmVudDsiICsKICAgICAgImJvcmRlci0iICsgKGJhY2t3YXJkcyA/ICJyaWdodCIgOiAibGVmdCIpICsgIjogIiArIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYICsgInB4IHNvbGlkOyIpOwoKICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOwogICAgaGVhZGVyLmFwcGVuZENoaWxkKGFycm93KTsKICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwKICAgICAgImN1cnNvcjogcG9pbnRlcjsiICsKICAgICAgInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IiArCiAgICAgICJtaW4td2lkdGg6ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweDsiICsKICAgICAgIndpZHRoOiAiICsgY29sdW1uTmF2aWdhdGlvbldpZHRoUFggKyAicHg7Iik7CgogICAgaGVhZGVyLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgY29sdW1ucy5pbmNDb2x1bW5OdW1iZXIoYmFja3dhcmRzID8gLTEgOiBpbmNyZW1lbnQpOwoKICAgICAgbWUuYW5pbWF0ZUNvbHVtbnMoYmFja3dhcmRzKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICBjbGVhclNlbGVjdGlvbigpOwogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CgogICAgcmV0dXJuIGhlYWRlcjsKICB9OwoKICB2YXIgbWF4Q29sdW1uV2lkdGggPSBmdW5jdGlvbih3aWR0aCkgewogICAgdmFyIHBhZGRpbmcgPSA4MDsKICAgIHZhciBjb2x1bW5NYXggPSBNYXRoLm1heChjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggLSBwYWRkaW5nLCAwKTsKCiAgICByZXR1cm4gcGFyc2VJbnQod2lkdGgpID4gMCA/CiAgICAgIE1hdGgubWluKGNvbHVtbk1heCwgcGFyc2VJbnQod2lkdGgpKSArICJweCIgOgogICAgICBjb2x1bW5NYXggKyAicHgiOwogIH07CgogIHZhciBjbGVhckhlYWRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHRoZWFkID0gcGFnZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCIpWzBdOwogICAgdGhlYWQuaW5uZXJIVE1MID0gIiI7CiAgfTsKCiAgdmFyIHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKGNsZWFyKSB7CiAgICBjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggPSBwYWdlZFRhYmxlLmNsaWVudFdpZHRoOwoKICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKCiAgICBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwogICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKCiAgICBpZiAoY29sdW1ucy5udW1iZXIgPiAwKQogICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQocmVuZGVyQ29sdW1uTmF2aWdhdGlvbigtY29sdW1ucy52aXNpYmxlLCB0cnVlKSk7CgogICAgY29sdW1ucy5zdWJzZXQgPSBjb2x1bW5zLnN1YnNldC5tYXAoZnVuY3Rpb24oY29sdW1uRGF0YSkgewogICAgICB2YXIgY29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgY29sdW1uLnNldEF0dHJpYnV0ZSgiYWxpZ24iLCBjb2x1bW5EYXRhLmFsaWduKTsKICAgICAgY29sdW1uLnN0eWxlLnRleHRBbGlnbiA9IGNvbHVtbkRhdGEuYWxpZ247CgogICAgICBjb2x1bW4uc3R5bGUubWF4V2lkdGggPSBtYXhDb2x1bW5XaWR0aChudWxsKTsKICAgICAgaWYgKGNvbHVtbkRhdGEud2lkdGgpIHsKICAgICAgICBjb2x1bW4uc3R5bGUubWluV2lkdGggPQogICAgICAgICAgY29sdW1uLnN0eWxlLm1heFdpZHRoID0gbWF4Q29sdW1uV2lkdGgoY29sdW1uRGF0YS53aWR0aCk7CiAgICAgIH0KCiAgICAgIHZhciBjb2x1bW5OYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbHVtbk5hbWUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLWhlYWRlci1uYW1lIik7CiAgICAgIGlmIChjb2x1bW5EYXRhLmxhYmVsID09PSAiIikgewogICAgICAgIGNvbHVtbk5hbWUuaW5uZXJIVE1MID0gIiZuYnNwOyI7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgY29sdW1uTmFtZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2x1bW5EYXRhLmxhYmVsKSk7CiAgICAgIH0KICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGNvbHVtbk5hbWUpOwoKICAgICAgdmFyIGNvbHVtblR5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY29sdW1uVHlwZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtaGVhZGVyLXR5cGUiKTsKICAgICAgaWYgKGNvbHVtbkRhdGEudHlwZSA9PT0gIiIpIHsKICAgICAgICBjb2x1bW5UeXBlLmlubmVySFRNTCA9ICImbmJzcDsiOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGNvbHVtblR5cGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwiICsgY29sdW1uRGF0YS50eXBlICsgIj4iKSk7CiAgICAgIH0KICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGNvbHVtblR5cGUpOwoKICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNvbHVtbik7CgogICAgICBjb2x1bW5EYXRhLmVsZW1lbnQgPSBjb2x1bW47CgogICAgICByZXR1cm4gY29sdW1uRGF0YTsKICAgIH0pOwoKICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNvbHVtbnMuZ2V0UGFkZGluZ0NvdW50KCk7IGlkeCsrKSB7CiAgICAgIHZhciBwYWRkaW5nQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgcGFkZGluZ0NvbC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtcGFkZGluZy1jb2wiKTsKICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHBhZGRpbmdDb2wpOwogICAgfQoKICAgIGlmIChjb2x1bW5zLm51bWJlciArIGNvbHVtbnMudmlzaWJsZSA8IGNvbHVtbnMudG90YWwpCiAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChyZW5kZXJDb2x1bW5OYXZpZ2F0aW9uKGNvbHVtbnMudmlzaWJsZSwgZmFsc2UpKTsKCiAgICBpZiAodHlwZW9mKGNsZWFyKSA9PSAidW5kZWZpbmVkIiB8fCBjbGVhcikgY2xlYXJIZWFkZXIoKTsKICAgIHZhciB0aGVhZCA9IHBhZ2VkVGFibGUucXVlcnlTZWxlY3RvckFsbCgidGhlYWQiKVswXTsKICAgIHRoZWFkLmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICB9OwoKICBtZS5hbmltYXRlQ29sdW1ucyA9IGZ1bmN0aW9uKGJhY2t3YXJkcykgewogICAgdmFyIHRoZWFkID0gcGFnZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCIpWzBdOwoKICAgIHZhciBoZWFkZXJPbGQgPSB0aGVhZC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpWzBdOwogICAgdmFyIHRib2R5T2xkID0gdGFibGUucXVlcnlTZWxlY3RvckFsbCgidGJvZHkiKVswXTsKCiAgICBtZS5maXRDb2x1bW5zKGJhY2t3YXJkcyk7CgogICAgcmVuZGVySGVhZGVyKGZhbHNlKTsKCiAgICBoZWFkZXIuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIGhlYWRlci5zdHlsZS50cmFuc2Zvcm0gPSBiYWNrd2FyZHMgPyAidHJhbnNsYXRlWCgtMzBweCkiIDogInRyYW5zbGF0ZVgoMzBweCkiOwogICAgaGVhZGVyLnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDIwMG1zIGxpbmVhciwgb3BhY2l0eSAyMDBtcyI7CiAgICBoZWFkZXIuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gIjAiOwoKICAgIHJlbmRlckJvZHkoZmFsc2UpOwoKICAgIGlmIChoZWFkZXJPbGQpIHsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKDBweCkiOwogICAgICBoZWFkZXJPbGQuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDEwMG1zIGxpbmVhciwgb3BhY2l0eSAxMDBtcyI7CiAgICAgIGhlYWRlck9sZC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtcmVtb3ZlLWhlYWQiKTsKICAgICAgaWYgKGhlYWRlck9sZC5zdHlsZS50cmFuc2l0aW9uRW5kKSB7CiAgICAgICAgaGVhZGVyT2xkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBoZWFkZXJPbGRCeUNsYXNzID0gdGhlYWQucXVlcnlTZWxlY3RvcigiLnBhZ2VkdGFibGUtcmVtb3ZlLWhlYWQiKTsKICAgICAgICAgIGlmIChoZWFkZXJPbGRCeUNsYXNzKSB0aGVhZC5yZW1vdmVDaGlsZChoZWFkZXJPbGRCeUNsYXNzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB0aGVhZC5yZW1vdmVDaGlsZChoZWFkZXJPbGQpOwogICAgICB9CiAgICB9CgogICAgaWYgKHRib2R5T2xkKSB0YWJsZS5yZW1vdmVDaGlsZCh0Ym9keU9sZCk7CgogICAgdGJvZHkuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIHRib2R5LnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDIwMG1zIGxpbmVhciwgb3BhY2l0eSAyMDBtcyI7CiAgICB0Ym9keS5zdHlsZS50cmFuc2l0aW9uRGVsYXkgPSAiMG1zIjsKCiAgICAvLyBmb3JjZSByZWxheW91dAogICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGVhZGVyKS5vcGFjaXR5OwogICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGJvZHkpLm9wYWNpdHk7CgogICAgaWYgKGhlYWRlck9sZCkgewogICAgICBoZWFkZXJPbGQuc3R5bGUudHJhbnNmb3JtID0gYmFja3dhcmRzID8gInRyYW5zbGF0ZVgoMjBweCkiIDogInRyYW5zbGF0ZVgoLTMwcHgpIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICB9CgogICAgaGVhZGVyLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKDBweCkiOwogICAgaGVhZGVyLnN0eWxlLm9wYWNpdHkgPSAiMSI7CgogICAgdGJvZHkuc3R5bGUub3BhY2l0eSA9ICIxIjsKICB9CgogIG1lLm9uQ2hhbmdlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIG9uQ2hhbmdlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogIH07CgogIHZhciB0cmlnZ2VyT25DaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgIG9uQ2hhbmdlQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ob25DaGFuZ2UpIHsKICAgICAgb25DaGFuZ2UoKTsKICAgIH0pOwogIH07CgogIHZhciBjbGVhckJvZHkgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0Ym9keSkgewogICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0Ym9keSk7CiAgICAgIHRib2R5ID0gbnVsbDsKICAgIH0KICB9OwoKICB2YXIgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKGNsZWFyKSB7CiAgICBjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggPSBwYWdlZFRhYmxlLmNsaWVudFdpZHRoCgogICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoKICAgIHZhciBwYWdlRGF0YSA9IGRhdGEuc2xpY2UocGFnZS5nZXRSb3dTdGFydCgpLCBwYWdlLmdldFJvd0VuZCgpKTsKCiAgICBwYWdlRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFSb3csIGlkeFJvdykgewogICAgICB2YXIgaHRtbFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICAgIGh0bWxSb3cuc2V0QXR0cmlidXRlKCJjbGFzcyIsIChpZHhSb3cgJSAyICE9PTApID8gImV2ZW4iIDogIm9kZCIpOwoKICAgICAgaWYgKGNvbHVtbnMuaGFzTW9yZUxlZnRDb2x1bW5zKCkpCiAgICAgICAgaHRtbFJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpKTsKCiAgICAgIGNvbHVtbnMuc3Vic2V0LmZvckVhY2goZnVuY3Rpb24oY29sdW1uRGF0YSkgewogICAgICAgIHZhciBjZWxsTmFtZSA9IGNvbHVtbkRhdGEubmFtZTsKICAgICAgICB2YXIgZGF0YUNlbGwgPSBkYXRhUm93W2NlbGxOYW1lXTsKICAgICAgICB2YXIgaHRtbENlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwoKICAgICAgICBpZiAoZGF0YUNlbGwgPT09ICJOQSIpIGh0bWxDZWxsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1uYS1jZWxsIik7CiAgICAgICAgaWYgKGRhdGFDZWxsID09PSAiX19OQV9fIikgZGF0YUNlbGwgPSAiTkEiOwoKICAgICAgICB2YXIgY2VsbFRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhQ2VsbCk7CiAgICAgICAgaHRtbENlbGwuYXBwZW5kQ2hpbGQoY2VsbFRleHQpOwogICAgICAgIGlmIChkYXRhQ2VsbC5sZW5ndGggPiA1MCkgewogICAgICAgICAgaHRtbENlbGwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIGRhdGFDZWxsKTsKICAgICAgICB9CiAgICAgICAgaHRtbENlbGwuc2V0QXR0cmlidXRlKCJhbGlnbiIsIGNvbHVtbkRhdGEuYWxpZ24pOwogICAgICAgIGh0bWxDZWxsLnN0eWxlLnRleHRBbGlnbiA9IGNvbHVtbkRhdGEuYWxpZ247CiAgICAgICAgaHRtbENlbGwuc3R5bGUubWF4V2lkdGggPSBtYXhDb2x1bW5XaWR0aChudWxsKTsKICAgICAgICBpZiAoY29sdW1uRGF0YS53aWR0aCkgewogICAgICAgICAgaHRtbENlbGwuc3R5bGUubWluV2lkdGggPSBodG1sQ2VsbC5zdHlsZS5tYXhXaWR0aCA9IG1heENvbHVtbldpZHRoKGNvbHVtbkRhdGEud2lkdGgpOwogICAgICAgIH0KICAgICAgICBodG1sUm93LmFwcGVuZENoaWxkKGh0bWxDZWxsKTsKICAgICAgfSk7CgogICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjb2x1bW5zLmdldFBhZGRpbmdDb3VudCgpOyBpZHgrKykgewogICAgICAgIHZhciBwYWRkaW5nQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKICAgICAgICBwYWRkaW5nQ29sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1wYWRkaW5nLWNvbCIpOwogICAgICAgIGh0bWxSb3cuYXBwZW5kQ2hpbGQocGFkZGluZ0NvbCk7CiAgICAgIH0KCiAgICAgIGlmIChjb2x1bW5zLmhhc01vcmVSaWdodENvbHVtbnMoKSkKICAgICAgICBodG1sUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpOwoKICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaHRtbFJvdyk7CiAgICB9KTsKCiAgICBmb3IgKHZhciBpZHhQYWRkaW5nID0gMDsgaWR4UGFkZGluZyA8IHBhZ2UuZ2V0UGFkZGluZ1Jvd3MoKTsgaWR4UGFkZGluZysrKSB7CiAgICAgIHZhciBwYWRkaW5nUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKCiAgICAgIHZhciBwYWRkaW5nQ2VsbFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICAgIHBhZGRpbmdDZWxsUm93LmlubmVySFRNTCA9ICImbmJzcDsiOwogICAgICBwYWRkaW5nQ2VsbFJvdy5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLCAiMTAwJSIpOwogICAgICBwYWRkaW5nUm93LmFwcGVuZENoaWxkKHBhZGRpbmdDZWxsUm93KTsKCiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBhZGRpbmdSb3cpOwogICAgfQoKICAgIGlmICh0eXBlb2YoY2xlYXIpID09ICJ1bmRlZmluZWQiIHx8IGNsZWFyKSBjbGVhckJvZHkoKTsKICAgIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKICAgIHRib2R5LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKCiAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CiAgfTsKCiAgdmFyIGdldExhYmVsSW5mbyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhZ2VTdGFydCA9IHBhZ2UuZ2V0Um93U3RhcnQoKTsKICAgIHZhciBwYWdlRW5kID0gcGFnZS5nZXRSb3dFbmQoKTsKICAgIHZhciB0b3RhbFJvd3MgPSBkYXRhLmxlbmd0aDsKCiAgICB2YXIgdG90YWxSb3dzTGFiZWwgPSBvcHRpb25zLnJvd3MudG90YWwgPyBvcHRpb25zLnJvd3MudG90YWwgOiB0b3RhbFJvd3M7CiAgICB2YXIgdG90YWxSb3dzTGFiZWxGb3JtYXQgPSB0b3RhbFJvd3NMYWJlbC50b1N0cmluZygpLnJlcGxhY2UoLyhcZCkoPz0oXGRcZFxkKSsoPyFcZCkpL2csICckMSwnKTsKCiAgICB2YXIgaW5mb1RleHQgPSAocGFnZVN0YXJ0ICsgMSkgKyAiLSIgKyBwYWdlRW5kICsgIiBvZiAiICsgdG90YWxSb3dzTGFiZWxGb3JtYXQgKyAiIHJvd3MiOwogICAgaWYgKHRvdGFsUm93cyA8IHBhZ2Uucm93cykgewogICAgICBpbmZvVGV4dCA9IHRvdGFsUm93c0xhYmVsICsgIiByb3ciICsgKHRvdGFsUm93cyAhPSAxID8gInMiIDogIiIpOwogICAgfQogICAgaWYgKGNvbHVtbnMudG90YWwgPiBjb2x1bW5zLnZpc2libGUpIHsKICAgICAgdmFyIHRvdGFsQ29sdW1uc0xhYmVsID0gb3B0aW9ucy5jb2x1bW5zLnRvdGFsID8gb3B0aW9ucy5jb2x1bW5zLnRvdGFsIDogY29sdW1ucy50b3RhbDsKCiAgICAgIGluZm9UZXh0ID0gaW5mb1RleHQgKyAiIHwgIiArIChjb2x1bW5zLm51bWJlciArIDEpICsgIi0iICsKICAgICAgICAoTWF0aC5taW4oY29sdW1ucy5udW1iZXIgKyBjb2x1bW5zLnZpc2libGUsIGNvbHVtbnMudG90YWwpKSArCiAgICAgICAgIiBvZiAiICsgdG90YWxDb2x1bW5zTGFiZWwgKyAiIGNvbHVtbnMiOwogICAgfQoKICAgIHJldHVybiBpbmZvVGV4dDsKICB9OwoKICB2YXIgY2xlYXJGb290ZXIgPSBmdW5jdGlvbigpIHsKICAgIGZvb3RlciA9IHBhZ2VkVGFibGUucXVlcnlTZWxlY3RvckFsbCgiZGl2LnBhZ2VkdGFibGUtZm9vdGVyIilbMF07CiAgICBmb290ZXIuaW5uZXJIVE1MID0gIiI7CgogICAgcmV0dXJuIGZvb3RlcjsKICB9OwoKICB2YXIgY3JlYXRlUGFnZUxpbmsgPSBmdW5jdGlvbihpZHhQYWdlKSB7CiAgICB2YXIgcGFnZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBwYWdlTGlua0NsYXNzID0gaWR4UGFnZSA9PT0gcGFnZS5udW1iZXIgPyAicGFnZWR0YWJsZS1pbmRleCBwYWdlZHRhYmxlLWluZGV4LWN1cnJlbnQiIDogInBhZ2VkdGFibGUtaW5kZXgiOwogICAgcGFnZUxpbmsuc2V0QXR0cmlidXRlKCJjbGFzcyIsIHBhZ2VMaW5rQ2xhc3MpOwogICAgcGFnZUxpbmsuc2V0QXR0cmlidXRlKCJkYXRhLXBhZ2UtaW5kZXgiLCBpZHhQYWdlKTsKICAgIHBhZ2VMaW5rLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXBhZ2UtaW5kZXgiKSkpOwogICAgICByZW5kZXJCb2R5KCk7CiAgICAgIHJlbmRlckZvb3RlcigpOwoKICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CiAgICB9OwoKICAgIHBhZ2VMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlkeFBhZ2UgKyAxKSk7CgogICAgcmV0dXJuIHBhZ2VMaW5rOwogIH0KCiAgdmFyIHJlbmRlckZvb3RlciA9IGZ1bmN0aW9uKCkgewogICAgZm9vdGVyID0gY2xlYXJGb290ZXIoKTsKCiAgICB2YXIgbmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIG5leHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIk5leHQiKSk7CiAgICBuZXh0Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhZ2UubnVtYmVyICsgMSk7CiAgICAgIHJlbmRlckJvZHkoKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CiAgICBpZiAoZGF0YS5sZW5ndGggPiBwYWdlLnJvd3MpIGZvb3Rlci5hcHBlbmRDaGlsZChuZXh0KTsKCiAgICB2YXIgcGFnZU51bWJlcnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHBhZ2VOdW1iZXJzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmRleGVzIik7CgogICAgdmFyIHBhZ2VSYW5nZSA9IHBhZ2UuZ2V0VmlzaWJsZVBhZ2VSYW5nZSgpOwoKICAgIGlmIChwYWdlUmFuZ2UuZmlyc3QpIHsKICAgICAgdmFyIHBhZ2VMaW5rID0gY3JlYXRlUGFnZUxpbmsoMCk7CiAgICAgIHBhZ2VOdW1iZXJzLmFwcGVuZENoaWxkKHBhZ2VMaW5rKTsKCiAgICAgIHZhciBwYWdlU2VwYXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHBhZ2VTZXBhcmF0b3Iuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLWluZGV4LXNlcGFyYXRvci1sZWZ0Iik7CiAgICAgIHBhZ2VTZXBhcmF0b3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIi4uLiIpKQogICAgICBwYWdlTnVtYmVycy5hcHBlbmRDaGlsZChwYWdlU2VwYXJhdG9yKTsKICAgIH0KCiAgICBmb3IgKHZhciBpZHhQYWdlID0gcGFnZVJhbmdlLnN0YXJ0OyBpZHhQYWdlIDwgcGFnZVJhbmdlLmVuZDsgaWR4UGFnZSsrKSB7CiAgICAgIHZhciBwYWdlTGluayA9IGNyZWF0ZVBhZ2VMaW5rKGlkeFBhZ2UpOwoKICAgICAgcGFnZU51bWJlcnMuYXBwZW5kQ2hpbGQocGFnZUxpbmspOwogICAgfQoKICAgIGlmIChwYWdlUmFuZ2UubGFzdCkgewogICAgICB2YXIgcGFnZVNlcGFyYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBwYWdlU2VwYXJhdG9yLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmRleC1zZXBhcmF0b3ItcmlnaHQiKTsKICAgICAgcGFnZVNlcGFyYXRvci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLi4uIikpCiAgICAgIHBhZ2VOdW1iZXJzLmFwcGVuZENoaWxkKHBhZ2VTZXBhcmF0b3IpOwoKICAgICAgdmFyIHBhZ2VMaW5rID0gY3JlYXRlUGFnZUxpbmsocGFnZS50b3RhbCAtIDEpOwogICAgICBwYWdlTnVtYmVycy5hcHBlbmRDaGlsZChwYWdlTGluayk7CiAgICB9CgogICAgaWYgKGRhdGEubGVuZ3RoID4gcGFnZS5yb3dzKSBmb290ZXIuYXBwZW5kQ2hpbGQocGFnZU51bWJlcnMpOwoKICAgIHZhciBwcmV2aW91cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIHByZXZpb3VzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJQcmV2aW91cyIpKTsKICAgIHByZXZpb3VzLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhZ2UubnVtYmVyIC0gMSk7CiAgICAgIHJlbmRlckJvZHkoKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CiAgICBpZiAoZGF0YS5sZW5ndGggPiBwYWdlLnJvd3MpIGZvb3Rlci5hcHBlbmRDaGlsZChwcmV2aW91cyk7CgogICAgdmFyIGluZm9MYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgaW5mb0xhYmVsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmZvIik7CiAgICBpbmZvTGFiZWwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIGdldExhYmVsSW5mbygpKTsKICAgIGluZm9MYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRMYWJlbEluZm8oKSkpOwogICAgZm9vdGVyLmFwcGVuZENoaWxkKGluZm9MYWJlbCk7CgogICAgdmFyIGVuYWJsZWRDbGFzcyA9ICJwYWdlZHRhYmxlLWluZGV4LW5hdiI7CiAgICB2YXIgZGlzYWJsZWRDbGFzcyA9ICJwYWdlZHRhYmxlLWluZGV4LW5hdiBwYWdlZHRhYmxlLWluZGV4LW5hdi1kaXNhYmxlZCI7CiAgICBwcmV2aW91cy5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgcGFnZS5udW1iZXIgPD0gMCA/IGRpc2FibGVkQ2xhc3MgOiBlbmFibGVkQ2xhc3MpOwogICAgbmV4dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgKHBhZ2UubnVtYmVyICsgMSkgKiBwYWdlLnJvd3MgPj0gZGF0YS5sZW5ndGggPyBkaXNhYmxlZENsYXNzIDogZW5hYmxlZENsYXNzKTsKICB9OwoKICB2YXIgbWVhc3VyZXNDZWxsID0gbnVsbDsKCiAgdmFyIHJlbmRlck1lYXN1cmVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbWVhc3VyZXNUYWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICBtZWFzdXJlc1RhYmxlLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIG1lYXN1cmVzVGFibGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgbWVhc3VyZXNUYWJsZS5zdHlsZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7CiAgICBtZWFzdXJlc1RhYmxlLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIG1lYXN1cmVzVGFibGUuc3R5bGUud2lkdGggPSAiYXV0byI7CgogICAgdmFyIG1lYXN1cmVzUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKICAgIG1lYXN1cmVzVGFibGUuYXBwZW5kQ2hpbGQobWVhc3VyZXNSb3cpOwoKICAgIG1lYXN1cmVzQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICB2YXIgc2FtcGxlU3RyaW5nID0gIkFCQ0RFRkdISUowMTIzNDU2Nzg5IjsKICAgIG1lYXN1cmVzQ2VsbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzYW1wbGVTdHJpbmcpKTsKCiAgICBtZWFzdXJlc1Jvdy5hcHBlbmRDaGlsZChtZWFzdXJlc0NlbGwpOwoKICAgIHRhYmxlRGl2LmFwcGVuZENoaWxkKG1lYXN1cmVzVGFibGUpOwogIH0KCiAgbWUuaW5pdCA9IGZ1bmN0aW9uKCkgewogICAgdGFibGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHBhZ2VkVGFibGUuYXBwZW5kQ2hpbGQodGFibGVEaXYpOwogICAgdmFyIHBhZ2VkVGFibGVDbGFzcyA9IGRhdGEubGVuZ3RoID4gMCA/CiAgICAgICJwYWdlZHRhYmxlIHBhZ2VkdGFibGUtbm90LWVtcHR5IiA6CiAgICAgICJwYWdlZHRhYmxlIHBhZ2VkdGFibGUtZW1wdHkiOwoKICAgIGlmIChjb2x1bW5zLnRvdGFsID09IDAgfHwgKGNvbHVtbnMuZW1wdHlOYW1lcygpICYmIGRhdGEubGVuZ3RoID09IDApKSB7CiAgICAgIHBhZ2VkVGFibGVDbGFzcyA9IHBhZ2VkVGFibGVDbGFzcyArICIgcGFnZWR0YWJsZS1lbXB0eS1jb2x1bW5zIjsKICAgIH0KCiAgICB0YWJsZURpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgcGFnZWRUYWJsZUNsYXNzKTsKCiAgICByZW5kZXJNZWFzdXJlcygpOwogICAgbWVhc3VyZXIuY2FsY3VsYXRlKG1lYXN1cmVzQ2VsbCk7CiAgICBjb2x1bW5zLmNhbGN1bGF0ZVdpZHRocyhtZWFzdXJlci5tZWFzdXJlcyk7CgogICAgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGFibGUuc2V0QXR0cmlidXRlKCJjZWxsc3BhY2luZyIsICIwIik7CiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInRhYmxlIHRhYmxlLWNvbmRlbnNlZCIpOwogICAgdGFibGVEaXYuYXBwZW5kQ2hpbGQodGFibGUpOwoKICAgIHRhYmxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoZWFkIikpOwoKICAgIHZhciBmb290ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGZvb3RlckRpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtZm9vdGVyIik7CiAgICB0YWJsZURpdi5hcHBlbmRDaGlsZChmb290ZXJEaXYpOwoKICAgIC8vIGlmIHRoZSBob3N0IGhhcyBub3QgeWV0IHByb3ZpZGVkIGhvcml6b250YWwgc3BhY2UsIHJlbmRlciBoaWRkZW4KICAgIGlmICh0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwKSB7CiAgICAgIHRhYmxlRGl2LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICB9CgogICAgbWUucmVuZGVyKCk7CgogICAgLy8gcmV0cnkgc2VpemluZyBjb2x1bW5zIGxhdGVyIGlmIHRoZSBob3N0IGhhcyBub3QgcHJvdmlkZWQgc3BhY2UKICAgIGZ1bmN0aW9uIHJldHJ5Rml0KCkgewogICAgICBpZiAodGFibGVEaXYuY2xpZW50V2lkdGggPD0gMCkgewogICAgICAgIHNldFRpbWVvdXQocmV0cnlGaXQsIDEwMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWUucmVuZGVyKCk7CiAgICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwKSB7CiAgICAgIHJldHJ5Rml0KCk7CiAgICB9CiAgfTsKCiAgdmFyIHJlZ2lzdGVyV2lkdGhzID0gZnVuY3Rpb24oKSB7CiAgICBjb2x1bW5zLnN1YnNldCA9IGNvbHVtbnMuc3Vic2V0Lm1hcChmdW5jdGlvbihjb2x1bW4pIHsKICAgICAgY29sdW1uLndpZHRoID0gY29sdW1ucy53aWR0aHNbY29sdW1uLm5hbWVdLmlubmVyOwogICAgICByZXR1cm4gY29sdW1uOwogICAgfSk7CiAgfTsKCiAgdmFyIHBhcnNlUGFkZGluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpID49IDAgPyBwYXJzZUludCh2YWx1ZSkgOiAwOwogIH07CgogIG1lLmZpeGVkSGVpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb3B0aW9ucy5yb3dzLm1heCAhPSBudWxsOwogIH0KCiAgbWUuZml0Um93cyA9IGZ1bmN0aW9uKCkgewogICAgaWYgKG1lLmZpeGVkSGVpZ2h0KCkpCiAgICAgIHJldHVybjsKCiAgICBtZWFzdXJlci5jYWxjdWxhdGUobWVhc3VyZXNDZWxsKTsKCiAgICB2YXIgcm93cyA9IG9wdGlvbnMucm93cy5taW4gIT09IG51bGwgPyBvcHRpb25zLnJvd3MubWluIDogMDsKICAgIHZhciBoZWFkZXJIZWlnaHQgPSBoZWFkZXIgIT09IG51bGwgJiYgaGVhZGVyLm9mZnNldEhlaWdodCA+IDAgPyBoZWFkZXIub2Zmc2V0SGVpZ2h0IDogMDsKICAgIHZhciBmb290ZXJIZWlnaHQgPSBmb290ZXIgIT09IG51bGwgJiYgZm9vdGVyLm9mZnNldEhlaWdodCA+IDAgPyBmb290ZXIub2Zmc2V0SGVpZ2h0IDogMDsKCiAgICBpZiAocGFnZWRUYWJsZS5vZmZzZXRIZWlnaHQgPiAwKSB7CiAgICAgIHZhciBhdmFpbGFibGVIZWlnaHQgPSBwYWdlZFRhYmxlLm9mZnNldEhlaWdodCAtIGhlYWRlckhlaWdodCAtIGZvb3RlckhlaWdodDsKICAgICAgcm93cyA9IE1hdGguZmxvb3IoKGF2YWlsYWJsZUhlaWdodCkgLyBtZWFzdXJlci5tZWFzdXJlcy5oZWlnaHQpOwogICAgfQoKICAgIHJvd3MgPSBvcHRpb25zLnJvd3MubWluICE9PSBudWxsID8gTWF0aC5tYXgob3B0aW9ucy5yb3dzLm1pbiwgcm93cykgOiByb3dzOwoKICAgIHBhZ2Uuc2V0Um93cyhyb3dzKTsKICB9CgogIC8vIFRoZSBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYWRkIGFzIG1hbnkgY29sdW1ucyBhcyBwb3NzaWJsZQogIC8vIHN0YXJ0aW5nIGZyb20gbGVmdC10by1yaWdodCwgd2hlbiB0aGUgcmlnaHQgbW9zdCBsaW1pdCBpcyByZWFjaGVkCiAgLy8gaXQgdHJpZXMgdG8gYWRkIGNvbHVtbnMgZnJvbSB0aGUgbGVmdCBhcyB3ZWxsLgogIC8vCiAgLy8gV2hlbiBzdGFydEJhY2t3YXJkcyBpcyB0cnVlIGNvbHVtbnMgYXJlIGFkZGVkIGZyb20gcmlnaHQtdG8tbGVmdAogIG1lLmZpdENvbHVtbnMgPSBmdW5jdGlvbihzdGFydEJhY2t3YXJkcykgewogICAgbWVhc3VyZXIuY2FsY3VsYXRlKG1lYXN1cmVzQ2VsbCk7CiAgICBjb2x1bW5zLmNhbGN1bGF0ZVdpZHRocyhtZWFzdXJlci5tZWFzdXJlcyk7CgogICAgaWYgKHRhYmxlRGl2LmNsaWVudFdpZHRoID4gMCkgewogICAgICB0YWJsZURpdi5zdHlsZS5vcGFjaXR5ID0gMTsKICAgIH0KCiAgICB2YXIgdmlzaWJsZUNvbHVtbnMgPSB0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwID8gTWF0aC5tYXgoY29sdW1ucy5taW4sIDEpIDogMTsKICAgIHZhciBjb2x1bW5OdW1iZXIgPSBjb2x1bW5zLm51bWJlcjsKICAgIHZhciBwYWRkaW5nQ291bnQgPSAwOwoKICAgIC8vIHRyYWNrIGEgbGlzdCBvZiBhZGRlZCBjb2x1bW5zIGFzIHdlIGJ1aWxkIHRoZSB2aXNpYmxlIG9uZXMgdG8gYWxsb3cgdXMKICAgIC8vIHRvIHJlbW92ZSBjb2x1bW5zIHdoZW4gdGhleSBkb24ndCBmaXQgYW55bW9yZS4KICAgIHZhciBjb2x1bW5IaXN0b3J5ID0gW107CgogICAgdmFyIGxhc3RUYWJsZUhlaWdodCA9IDA7CiAgICB2YXIgYmFja3dhcmRzID0gc3RhcnRCYWNrd2FyZHM7CgogICAgdmFyIHRhYmxlRGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YWJsZURpdiwgbnVsbCk7CiAgICB2YXIgdGFibGVEaXZQYWRkaW5nID0gcGFyc2VQYWRkaW5nKHRhYmxlRGl2U3R5bGUucGFkZGluZ0xlZnQpICsKICAgICAgcGFyc2VQYWRkaW5nKHRhYmxlRGl2U3R5bGUucGFkZGluZ1JpZ2h0KTsKCiAgICB2YXIgYWRkUGFkZGluZ0NvbCA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRXaWR0aCA9IDA7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29sdW1ucy5zZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5OdW1iZXIsIHZpc2libGVDb2x1bW5zLCBwYWRkaW5nQ291bnQpOwogICAgICBjdXJyZW50V2lkdGggPSBjb2x1bW5zLmdldFdpZHRoKCk7CgogICAgICBpZiAodGFibGVEaXYuY2xpZW50V2lkdGggLSB0YWJsZURpdlBhZGRpbmcgPCBjdXJyZW50V2lkdGgpIHsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgY29sdW1uSGlzdG9yeS5wdXNoKHsKICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciwKICAgICAgICB2aXNpYmxlQ29sdW1uczogdmlzaWJsZUNvbHVtbnMsCiAgICAgICAgcGFkZGluZ0NvdW50OiBwYWRkaW5nQ291bnQKICAgICAgfSk7CgogICAgICBpZiAoY29sdW1uSGlzdG9yeS5sZW5ndGggPiAxMDApIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJNb3JlIHRoYW4gMTAwIHRyaWVzIHRvIGZpdCBjb2x1bW5zLCBhYm9ydGluZyIpOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpZiAoY29sdW1ucy5tYXggIT09IG51bGwgJiYKICAgICAgICBjb2x1bW5zLnZpc2libGUgKyBjb2x1bW5zLmdldFBhZGRpbmdDb3VudCgpID49IGNvbHVtbnMubWF4KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIC8vIGlmIHdlIHJ1biBvdXQgb2YgcmlnaHQtY29sdW1ucwogICAgICBpZiAoIWJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgKyBjb2x1bW5zLnZpc2libGUgPj0gY29sdW1ucy50b3RhbCkgewogICAgICAgIC8vIGlmIHdlIHN0YXJ0ZWQgYWRkaW5nIHJpZ2h0LWNvbHVtbnMsIHRyeSBhZGRpbmcgbGVmdC1jb2x1bW5zCiAgICAgICAgaWYgKCFzdGFydEJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgPiAwKSB7CiAgICAgICAgICBiYWNrd2FyZHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb2x1bW5zLm1pbiA9PT0gbnVsbCB8fCB2aXNpYmxlQ29sdW1ucyArIGNvbHVtbnMuZ2V0UGFkZGluZ0NvdW50KCkgPj0gY29sdW1ucy5taW4pIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHBhZGRpbmdDb3VudCA9IHBhZGRpbmdDb3VudCArIDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBpZiB3ZSBydW4gb3V0IG9mIGxlZnQtY29sdW1ucwogICAgICBpZiAoYmFja3dhcmRzICYmIGNvbHVtbk51bWJlciA9PSAwKSB7CiAgICAgICAgLy8gaWYgd2Ugc3RhcnRlZCBhZGRpbmcgbGVmdC1jb2x1bW5zLCB0cnkgYWRkaW5nIHJpZ2h0LWNvbHVtbnMKICAgICAgICBpZiAoc3RhcnRCYWNrd2FyZHMgJiYgY29sdW1uTnVtYmVyICsgY29sdW1ucy52aXNpYmxlIDwgY29sdW1ucy50b3RhbCkgewogICAgICAgICAgYmFja3dhcmRzID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbHVtbnMubWluID09PSBudWxsIHx8IHZpc2libGVDb2x1bW5zICsgY29sdW1ucy5nZXRQYWRkaW5nQ291bnQoKSA+PSBjb2x1bW5zLm1pbikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgcGFkZGluZ0NvdW50ID0gcGFkZGluZ0NvdW50ICsgMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIHdoZW4gbW92aW5nIGJhY2t3YXJkcyB0cnkgZml0dGluZyBsZWZ0IGNvbHVtbnMgZmlyc3QKICAgICAgaWYgKGJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgPiAwKSB7CiAgICAgICAgY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyIC0gMTsKICAgICAgfQoKICAgICAgaWYgKGNvbHVtbk51bWJlciArIHZpc2libGVDb2x1bW5zIDwgY29sdW1ucy50b3RhbCkgewogICAgICAgIHZpc2libGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMgKyAxOwogICAgICB9CiAgICB9CgogICAgdmFyIGxhc3RSZW5kZXJhYmxlQ29sdW1uID0gewogICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyLAogICAgICAgIHZpc2libGVDb2x1bW5zOiB2aXNpYmxlQ29sdW1ucywKICAgICAgICBwYWRkaW5nQ291bnQ6IHBhZGRpbmdDb3VudAogICAgfTsKCiAgICBpZiAoY29sdW1uSGlzdG9yeS5sZW5ndGggPiAwKSB7CiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uID0gY29sdW1uSGlzdG9yeVtjb2x1bW5IaXN0b3J5Lmxlbmd0aCAtIDFdOwogICAgfQoKICAgIGNvbHVtbnMuc2V0VmlzaWJsZUNvbHVtbnMoCiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uLmNvbHVtbk51bWJlciwKICAgICAgbGFzdFJlbmRlcmFibGVDb2x1bW4udmlzaWJsZUNvbHVtbnMsCiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uLnBhZGRpbmdDb3VudCk7CgogICAgaWYgKHBhZ2VkVGFibGUub2Zmc2V0V2lkdGggPiAwKSB7CiAgICAgIHBhZ2Uuc2V0VmlzaWJsZVBhZ2VzKE1hdGgubWF4KE1hdGguY2VpbCgxLjAgKiAocGFnZWRUYWJsZS5vZmZzZXRXaWR0aCAtIDI1MCkgLyA0MCksIDIpKTsKICAgIH0KCiAgICByZWdpc3RlcldpZHRocygpOwogIH07CgogIG1lLmZpdCA9IGZ1bmN0aW9uKHN0YXJ0QmFja3dhcmRzKSB7CiAgICBtZS5maXRSb3dzKCk7CiAgICBtZS5maXRDb2x1bW5zKHN0YXJ0QmFja3dhcmRzKTsKICB9CgogIG1lLnJlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgbWUuZml0Q29sdW1ucyhmYWxzZSk7CgogICAgLy8gcmVuZGVyIGhlYWRlci9mb290ZXIgdG8gbWVhc3VyZSBoZWlnaHQgYWNjdXJhdGVseQogICAgcmVuZGVySGVhZGVyKCk7CiAgICByZW5kZXJGb290ZXIoKTsKCiAgICBtZS5maXRSb3dzKCk7CiAgICByZW5kZXJCb2R5KCk7CgogICAgLy8gcmUtcmVuZGVyIGZvb3RlciB0byBtYXRjaCBuZXcgcm93cwogICAgcmVuZGVyRm9vdGVyKCk7CiAgfQoKICB2YXIgcmVzaXplTGFzdFdpZHRoID0gLTE7CiAgdmFyIHJlc2l6ZUxhc3RIZWlnaHQgPSAtMTsKICB2YXIgcmVzaXplTmV3V2lkdGggPSAtMTsKICB2YXIgcmVzaXplTmV3SGVpZ2h0ID0gLTE7CiAgdmFyIHJlc2l6ZVBlbmRpbmcgPSBmYWxzZTsKCiAgbWUucmVzaXplID0gZnVuY3Rpb24obmV3V2lkdGgsIG5ld0hlaWdodCkgewoKICAgIGZ1bmN0aW9uIHJlc2l6ZURlbGF5ZWQoKSB7CiAgICAgIHJlc2l6ZVBlbmRpbmcgPSBmYWxzZTsKCiAgICAgIGlmICgKICAgICAgICAocmVzaXplTmV3V2lkdGggIT09IHJlc2l6ZUxhc3RXaWR0aCkgfHwKICAgICAgICAoIW1lLmZpeGVkSGVpZ2h0KCkgJiYgcmVzaXplTmV3SGVpZ2h0ICE9PSByZXNpemVMYXN0SGVpZ2h0KQogICAgICApIHsKICAgICAgICByZXNpemVMYXN0V2lkdGggPSByZXNpemVOZXdXaWR0aDsKICAgICAgICByZXNpemVMYXN0SGVpZ2h0ID0gcmVzaXplTmV3SGVpZ2h0OwoKICAgICAgICBzZXRUaW1lb3V0KHJlc2l6ZURlbGF5ZWQsIDIwMCk7CiAgICAgICAgcmVzaXplUGVuZGluZyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWUucmVuZGVyKCk7CiAgICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CgogICAgICAgIHJlc2l6ZUxhc3RXaWR0aCA9IC0xOwogICAgICAgIHJlc2l6ZUxhc3RIZWlnaHQgPSAtMTsKICAgICAgfQogICAgfQoKICAgIHJlc2l6ZU5ld1dpZHRoID0gbmV3V2lkdGg7CiAgICByZXNpemVOZXdIZWlnaHQgPSBuZXdIZWlnaHQ7CgogICAgaWYgKCFyZXNpemVQZW5kaW5nKSByZXNpemVEZWxheWVkKCk7CiAgfTsKfTsKCnZhciBQYWdlZFRhYmxlRG9jOwooZnVuY3Rpb24gKFBhZ2VkVGFibGVEb2MpIHsKICB2YXIgYWxsUGFnZWRUYWJsZXMgPSBbXTsKCiAgUGFnZWRUYWJsZURvYy5pbml0QWxsID0gZnVuY3Rpb24oKSB7CiAgICBhbGxQYWdlZFRhYmxlcyA9IFtdOwoKICAgIHZhciBwYWdlZFRhYmxlcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcGFnZWR0YWJsZT0iZmFsc2UiXSxbZGF0YS1wYWdlZHRhYmxlPSIiXScpKTsKICAgIHBhZ2VkVGFibGVzLmZvckVhY2goZnVuY3Rpb24ocGFnZWRUYWJsZSwgaWR4KSB7CiAgICAgIHBhZ2VkVGFibGUuc2V0QXR0cmlidXRlKCJkYXRhLXBhZ2VkdGFibGUiLCAidHJ1ZSIpOwogICAgICBwYWdlZFRhYmxlLnNldEF0dHJpYnV0ZSgicGFnZWR0YWJsZS1wYWdlIiwgMCk7CiAgICAgIHBhZ2VkVGFibGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLXdyYXBwZXIiKTsKCiAgICAgIHZhciBwYWdlZFRhYmxlSW5zdGFuY2UgPSBuZXcgUGFnZWRUYWJsZShwYWdlZFRhYmxlKTsKICAgICAgcGFnZWRUYWJsZUluc3RhbmNlLmluaXQoKTsKCiAgICAgIGFsbFBhZ2VkVGFibGVzLnB1c2gocGFnZWRUYWJsZUluc3RhbmNlKTsKICAgIH0pOwogIH07CgogIFBhZ2VkVGFibGVEb2MucmVzaXplQWxsID0gZnVuY3Rpb24oKSB7CiAgICBhbGxQYWdlZFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHBhZ2VkVGFibGUpIHsKICAgICAgcGFnZWRUYWJsZS5yZW5kZXIoKTsKICAgIH0pOwogIH07CgogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCBQYWdlZFRhYmxlRG9jLnJlc2l6ZUFsbCk7CgogIHJldHVybiBQYWdlZFRhYmxlRG9jOwp9KShQYWdlZFRhYmxlRG9jIHx8IChQYWdlZFRhYmxlRG9jID0ge30pKTsKCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICBQYWdlZFRhYmxlRG9jLmluaXRBbGwoKTsKfTsK"></script>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
</style>
<link href="data:text/css;charset=utf-8,%40font%2Dface%7Bfont%2Dfamily%3A%27Open%20Sans%27%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bsrc%3Alocal%28%27Open%20Sans%27%29%2Clocal%28OpenSans%29%2Curl%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAE8YABIAAAAAhWwAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABlAAAABYAAAAWABAA3UdQT1MAAAGsAAAADAAAAAwAFQAKR1NVQgAAAbgAAABZAAAAdN3O3ptPUy8yAAACFAAAAF8AAABgoT6eyWNtYXAAAAJ0AAAAmAAAAMyvDbOdY3Z0IAAAAwwAAABZAAAAog9NGKRmcGdtAAADaAAABJsAAAe0fmG2EWdhc3AAAAgEAAAAEAAAABAAFQAjZ2x5ZgAACBQAADWFAABReBn1yj5oZWFkAAA9nAAAADYAAAA293bipmhoZWEAAD3UAAAAHwAAACQNzAapaG10eAAAPfQAAAIIAAADbLTLWYhrZXJuAAA%2F%2FAAAChcAAB6Qo%2Buk42xvY2EAAEoUAAABuQAAAbz3ewp%2FbWF4cAAAS9AAAAAgAAAAIAJ2AgpuYW1lAABL8AAAAKwAAAEyFNwvSnBvc3QAAEycAAABhgAAAiiYDmoRcHJlcAAATiQAAADyAAABCUO3lqQAAQAAAAwAAAAAAAAAAgABAAAA3AABAAAAAQAAAAoACgAKAAB4AR3HNcJBAQDA8d%2BrLzDatEXOrqDd4S2ayUX1beTyDwEyyrqCbXrY%2BxPD8ylAsF0tUn%2F4nlj89Z9A7%2BtETl5RXdNNZGDm%2BvXYXWjgLDRzEhoLBAYv0%2F0NHAAAAHgBY2Bm2cY4gYGVgYN1FqsxAwOjPIRmvsiQxviRg4mJm42NmZWFiYnlAQPTewcGhWgGBgYNBiAwdAx2ZgAK%2FP%2FLJv9PhKGFo5cpQoGBcT5IjsWDdRuQUmBgBgD40BA5AHgBY2BgYGRgBmIGBh4GFoYDQFqHQYGBBcjzYPBkqGM4zXCe4T%2BjIWMw0zGmW0x3FEQUpBTkFJQU1BSsFFwUShTWKAn9%2Fw%2FUpQBU7cWwgOEMwwWg6iCoamEFCQUZsGpLhOr%2Fjxn6%2Fz%2F6f5CB9%2F%2Fe%2Fz3%2Fc%2F7%2B%2Bvv877MHGx6sfbDmwcoHyx5MedD9IOGByr39QHeRAABARzfieAFjE2EQZ%2FBj3QYkS1m3sZ5lQAEsHgwiDBMZGP6%2FAfEQ5D8REAnUJfxnyv%2B3%2F1r%2Fv%2Fq3Eigi8W8PA1mAA0J1MzQy3GWYwdDP0Mcwk6GDoZGRn6ELAE09H%2F8AAAB4AXVUR3fbxhPfhRqr%2F6Cr3h8pi4wpN9K9V4QEYCrq7b2F0gC1R%2BXkS3rjKWXlfJeBfaF88jH1M6TfoqNzdWaXxZ0NM7%2FftJ2ZpXfzzeVILi0uzM%2FNzkxPTU68Md64GQZ%2Bvfa6d%2BP6tatXLl%2B6eOH8uVMnTxyvVg4fGisfhNfcV0f3luz%2F7Srmc9nMyPDQ4IDFWUUgjwMcKItSmEAASaNaEcFo069WAghjFIlAegyOQaNhIEhQxALHEqIeg2P0yHLjKUuvY%2Bn1LbktrrKrOgUI%2FMUH0ebLc5Lk73yIBO4YeUrL5GGUIimuSx6mKl2tCDD8oKmCmGrkaT5Xh%2Fp6rlphaS5PYp4kPAy3Un74OjeCdTi4nFosU6Qg%2BqRBsoazczLwHdeNqpVx3AW%2BoVjdhMThOo6YkGJTl862RFq5r263bbYSHyuswVrylsSBhHzVQKDU11g6hkfAxyOf%2FDVKJ1%2FHCvgBHtNRJ%2Bb7eSYepeQ4VLZBqAeMjgM7%2FzyJJF1kuGw%2FYFpEq458Xrr65YTUa6VCEKGKVdJ%2B2FoBYYNKCwV1K6B2s1mJnPB7Ww6GtyO04ya%2FHHWPHs5P4J65NyVa5VA0E0LocwPci45b6tvMvohm1BYc1h12Xd2GrbbHVkjB1pzs6IKtOHeYd%2BJYhFasmfs9Zt%2BSZlo9pu8eg0utWZAKB8vjaxBQx7cSbK3Qdr2nBwM27vrXcUHtLolLJyJjK3CAbDcFDo3hsPZ63IH2RrsoWyskdB47jiKitFtcAgqj4wQQxN3PB81RCiCo0Y1jnUVYlOj5JHhJd2JBevIEeSQxDWzTN8PEE3AL90KtP11dVrC5II1L1w331pHFq10vPBGYeyUCFRvB7PAEzMltdubhb%2BlZ4dw9w86yyNfG%2B%2Bu0ZWOBkmsb%2BGrsrKGIN4R0XPQimnAEcj3CI6ZDR35zzHJEZlcW5cQCTMwty4umkB5B4ajHwVNhQDqdMLSAmClnhLScgYgMbQJESALUrtIvjpQz9LVxuIPSiYgQkjusZ01l4BERrPtdO9KfDErKQLne6EUbJlXHqTccNzL163tuES26ickjo5va6FIkCyIyaFEYA%2BlejuqlFxLWIYKmQG9W0tlMe0yXu80wPe%2FOavEJrd8srSFziSal30wMj5H2mH7T6H218RQ93qOFysDEgtLBoRuQUeXjyPQKexdLjoa4vtAQJiBsEXYutEo9T1%2Fm5mUdBMbXFCzIq8Z6Yl5%2B7nyic%2B1mE3xisVatpBarpcC%2FmUs9%2Fs3Csty2GRPfLMo7FrfqcS1KDxIntwVjnkEtjRJoFKEVHWmelIyxd7Y9xlqGHTSA0VfbnBks08M4W21bHczuJBrTiYixiBnsMF7PepCwTAdrGcy8UqZb5uWGvIyX9QpW0XJSrqE7hNzjjGU5u1vgRe6k5DVv4DZvpVnP6Vi0yMKLOhUvPUq9tCzvFhi5mV9KVNMvWpfRJg1bggjEml6Uz6KmiiN92dh%2BGg19OHK4TmOC61TIcAFzsF7DPNQ0fkPjNzr4sMZHaEX5fk7uLZr9LHK9AW9KF2wU%2F%2F%2FBUfaOnlREfyrK%2Frv6Hyn3ISkAAAEAAwAIAAoADQAH%2F%2F8AD3gBhXwHfFRV1vg5974yvZdMQspkSIYkQkgmhdAyIIQQWsSADCLSpajUiMgiAkuJNGmhKyJGDCyybCiyiGBHRGQtyLIuf2UX19UPy7oWyFz%2B972ZBxOE72N%2BL2%2BYd%2Bbe0%2B5p99wBAscBBIN4ACjI4D4oUJEIVAbIL8wPYX4oP1TQ3um3%2B0v5dZz2bj44nsyKLhYPXKkaL1wCAhuuXcQ69dsWyAu7qF5PBMFqQzQRkzQgYvIQCuXleXYHlCXl2x1YZg%2BF7HxMDNAQLQoVetwuKZCZjRUTQqc%2Ff7RjebisqAeuEQJXmpZUdA%2F3KgcgsJA2kL1xDNPDZqCyQAWdXiIy5YOHThUq4%2FKB1XFpgPr5heVtJuSQvJzxOeKB6HfEplzKWCEA4Sc%2BVgqkw8bwIF16K7fg0ttNJr3DajEKBqfT5UlNkwXJKyD4hCRRlFySwU%2BTvTTJkJTh1wkms6l%2FpBWa08Fmt%2FWP%2BNz2AWYcYEez3WwXvU5qECE%2FVB5ylJXl5993Hyc3zw6hkHaPoerldxVjh7eMX%2FF3hYWxu0KF382pcKpXsV%2B9QlS93Mj%2FSz%2FujinsVE1dDTszcEk1u4LpPdjXmDdw6UAsqFlUg7rmf2J%2Bd3aGLmC757GBuEe55mHNXGxifZVrLtuNNUBhwbU6wSQ5IAOyoS2MCxcH7VmpXkHIdZlFP4BPtOvFdvlZZsncL0Kl1pZcS99Iam5eK1erfhFvrkviL9HDKc5X6OV%2FChUq7aGEvw5U6QuFVCbEhOSSZHegODM7WOzxhOzZ2cVFJaXFIbfHK2cH7WlELuK3EnR5vHZJEkzvHZw35S933n0ucur5ky%2FMO7SraN2mrVuqGiNPnIt%2BNnTy6HF4fMkfvf%2B6EEjfkpWPh7rtXrJgp%2BNAk9hzQScj6194%2F%2ByxlZE72Ow0KvcdloMLbPcBiDD%2B2jdSW%2FEk6MENfk55AfQMtwabaPC0aZWZ2a6Nob1NKgxRc3qemb%2FaF0jtk3xZPtkpc4Xjr3KVXE7WDfpi%2BsfVJ1RotwUyJVFVbE4ZV3JUPi0pLsq%2B%2BXMM4A9Vd%2B%2FYcXcVvrtx7bLN61av2oINVTU11dU1NVV4cuPaFRvXrV7xDGPNH6%2BheQJpbMQaHLiz8R9fXb5w8dLl5vO7XnzhD7uef37Xxa8u%2F%2F3ipa9pxpUqrt5AYeq1b8QPxVNg5BQWw13h9k4PpEqB3Lx2eW0DlmxfqkdfUhoy9Y6EnNZgW0t7MZ%2F6smlubka%2BI0NfFckQoDwPkjih%2Bd4yrpTleTdRqoinJE6Ts7AULcTt8mRxQbYjMeLcXMpYwucgMgaCkrrMn668Z97YBwZHJm%2F%2B%2FhnWZ%2FKwOzazl5c2DerS%2Bo2Xth9eshXXd7jTu7NHHeb98%2BVHfqw%2F%2Bz%2FCmp5zhvSZe3e%2FkSOubt2EO3tExnWrrbsy%2F51x94%2BaWFa%2F84V1k%2Fbfx2Z1fWE0%2B2It%2B2zfxGEfAaBiMbBctRiug0CpIBLFUpyK2R%2BOumYgYrZB%2BcZAdoT4%2BTfM0CpsksEggGCxGoNUsV4J5sVpc5SGJE6pwxvIJgM3r97%2B1Kq1S7et2UQKUI%2Fv7znOCn%2F8jpW80ohvKaN24aOatFEFAx8XLFYDFYItR0UbkQMljuIiEgx5HMS0efW2pWtXPbVdGZb9yjruPIInv%2FsR3z%2F%2BEisAhMFkrmCRXGCB9uEUKgoomw16o95qEwxoJiaT2cDtl84CUP5G4XWJOTBmWLK8olOmNOjMKhUpWZWHK5LZgl9279229we2OBUX50kuVjv5QDo7PBwnsvrhWJF%2BYDIuVagZDxeFHOF1MEKbsBMEQS%2BKJjOVdXJ1BKw61EH%2BfeqSTzTz3I7ZA3Zuv%2Bwhshy3sDFL2TjctJR6n2SDsfFJ3A0I5ewXfAgugw7s%2B0XQG0SAfFVWHOEsr6TyphSHW5NHFc9J6Wa%2B7B3Dfp42HguHAUINniPlZCpQ%2Fl0CogDIrW%2F8u85iv7sGv8ZzGzYAxjwV%2FMCxTwobJQCTWU8HRPQeruaaXpRqestVdUOXso7dupeF7px4Z8%2Bed3arKFc44AIg51W9ch4kIIiUEocmSk4sBpCcj15oUDRJXYYExl37RmirrkIv55rLASYJJF%2BS3t0nopeptU%2BE%2BmLrLK%2BlPgQyid3mCBU6UP1rVz8R2n770zc%2FXf7x8s%2FNn9fvaFi3rmFHPfmMLWRP4lycho%2FjNPY4W82Os88wiJ34K4tdAIQjAOQkx8YArcM2PaAOjSZBL8uolzAJFFvGDXd8ej67P2AvKpUkOYghcnK7zl300RBcsExwzJ%2Fhbrd7GuYBwhgAIYtbTx%2F3%2Bd4klJ3gtKCQnGIz9InYZEzqG8EkjSzNavCB%2FcXYlcQshhyMsZrI6PYLWc3lOG%2FvlA4rHr%2F3uTFD3r38%2Fr%2B3fMKOke9W4oJ9G566u7au84CpOz%2Fct5R99wF7W6dIYjjnawrHIAh3hlungFOWgXoyzVKbHOr1eD19Il6vISsrrU8kSzbY%2B0QMGpdjgYh60zDTHJKHoyP4404pw27zB4o1o62gq%2BBLL299am8j%2Bzv774zj995%2FdgTOZsOfWr3rnTWPj2h8qGbo1%2FM%2F%2FkYYvmxfms7TtPrM54E7ns4vwBw0rFy%2FaNJjRRVTet31OgCBPABhongUDOCAzuE0h6gnxChToCJ1ulB0iH0jeqvscFBZotflk%2BhMQ5oJDqhrC%2Fl%2F%2FFxmAUlGYeK5Z6Jl5MDec2yJQdc%2Bl5ViNduL1avoZ805eGll04jy6COKheT8S%2BU6kQwdw%2BlW6nPpXF4qtEoBziwAye3mMnRLkqlPRLqZdQlsKxTcLghkqhzjrLL5M%2BWgUwldSkjbL1HPLrCf51d8MHbv66zu%2FmcGl5Kz0YNZ0%2Bmcf759kbEB29qGGrZiYWop2b2R9fYqnKnlWOVzqXqgNfQIB5LtRr8fQLLT7CyT0ZLaL2K0WFzU5e0TcfmojkckcgvcyhJ4pNlr8Bd63VyEhIbiGhfIBFGTq8R9lqcWB2Dl1G79Rn%2F9i8n08OU3L%2F760UX2E369YuvqVUPrI9VryFR8CXc5V%2FrYefbW7svv%2FYNdxUHv%2FOnFVQ1V8yse2Dde0UcAIY%2FzU4L0sA1FEQg3jJT0jVAJFBlqbOOrALk1dCOmkuHNF%2BmpaKOYunHhldNAlZhEyFGpz4R20C%2Bc47Vmu%2B6gqXo9lewuq5TfXrLnZORk9Ink5JjAlNwvYvJBoF8E5N8qd9nN3jrmj7mOx8OPLDXqolpgwv0zZkpuzaeTynf%2BvWjNvnr22b%2BbsfDJR7%2Be%2BcL6dQ1bXlu3CDvOWfHIMytnrhJPHt7x4L7eg%2F48%2B8C5U0euLuu%2Ff8ozr1xteHTRssdGru8V3kwfeHTMsN937%2FzksLEzFdlO5NQpNsMLWdAtnJlizzQYAAQu26AljUvWZbEQlyuJi1Ymcr8Iaal2jjKNg5qJ9Ctqx02jMyDFKHJw8TpUIvjHKhXZQlZ0%2FIwe1eO%2B%2B6%2FRVHpg2mv%2FuPbBuguPMtfKLU%2BtuXfjkIFraEVzg2tlMuZg6O57%2FvXBP1C3kZ3H9od2PPV81RMVE%2FaNAy3HEcaokRS34Ta%2BLAA8XotzQMRiizkRDVfN87X0JXae6NzkVR6Znehb6J8XL%2BY3IKovXMjn0oEDMrkmmc2iXu9yGm0DIkab6hgTZklwj%2FT6FDccpXsmn6Rjlxv%2BknyrTFMR8%2BU%2FcF9%2BDiRwh%2FUCiChwdeXD58cDhSwsRjeikNNcTo83%2F0AtP2DDKLywji1nhxSezMTjgo9eVHOy3LBbJgIQ0OsEsToiIFRHrIjI4wHOlfxEz6a4ZOTXTLq9eTjdTofW1bEH6up%2Bg5GIBDhGEr2BkRNVlMZTa%2FP3HKVyrMMKrF3H%2FKPYUAWjlGsXaRnXrxTIhrJwqp%2FbMtnphFYWIdgGoLWtddqASGuPzdA7YhNaqFZLvVJSEa48LZwUd4YSN4mJ%2Baq%2FctSSXgtmD6gf2emV91%2F9KNj38bHd9l3PX0tq19dMnzFw3OSsgsWjj%2BzqPXn0w4On3e9nZ%2BNJLYFZ1yqkQ2ITFEM5zzwyA%2B1KLJ1kVwpAjsvSTgx3S%2BrQQeiisxv5Ky%2B9kGbnqUmllmSFEhOP6%2FG4ug6C2nJQUPdSt0td36R1IFMgbsUalrqlQAbw4KK1v1BwIH%2FudKqm8NCQbeMHP2LUtVk3rv7Fb4712N3Tt%2FDeaWvZt3%2B8wA7swe6Y%2F5cvjv3I1rHJn%2BAyhLM44ODVn14%2F7bBUDpq%2Fhpxb8c388XfdM%2BrU3veu%2BTws17Pv7O79aFvzMnvxc3aaHRq8sAZX4jgUsP7CfvYntoNhGYquJiAAAKJNPAIyWLjk0ojFqENR0SwqyILNaiG9I0bRYhFECoKD518xh6iplZYz%2B5W8H0OIlBsz%2FtURB6IHmnaT7itJORvb6A94cnbjGZYvHrnSg0zENwfPGTGddQIKJwCEo9xyW8ALGdA7nO0UUg1Wn89iEGQLjwd01iRrUlXEarWAxVcVsTjAWxUBevt4QnM9%2FgxBMbluwe4SAjxpj%2FmcgN0ef3cCt2IAhVVLsR%2F7%2BTIjjZjU9PTeY1ew4I9%2FOvhn8cCeI%2FNf9BnK2Pk3%2FkZ7TF00%2B6HoquhndauXPAGAMIdb09Oqr8gOu6jFpbdQb5IDekccglHi%2FHK2DL%2B4emRymUNIE3%2BRo3WokKfbtNP37Cs0%2F7rxjQ0X2Cvs2Rex%2FNNLuysbxBB7lX3FPmdvl64rwyU44QusOVSzuj8AUTgmDuEc04FdsYcWQQ8COJyiuSoiUsFSFREct4ppwc9rSBlA%2BZuAPZTBx2Az2Uo2CY%2FhIHysic%2F1z59PI%2FdU5CtWz%2BaJB9gi9gKmYebVKZgHgMq89Bc%2Br1GJWSSDAQXQoWAyS%2FreEUlCQsTeEUKRr3B03DZmUZBwxy%2F6S%2FMZmh%2BdTYZHt5OF4oH1LKc%2BeilhJj0UhpMlAKQ6pAbjTRPxSW45Q0CbAac3asPzwaNfrY9LTuyi2ilOhUvnI8SSohNapUJK7wiAaDLZe0dMgujtHRGdt4%2B8%2FHaphRyV9%2Brq5lT1xe9nfPc0a2IrDuKQL%2F%2F9bve3DrL%2Fso%2FQj0kbVrGXCYuWZWXjUhzzD7xn%2F%2BD6GvYau8Q%2BZe8H8LUY7WK6yuVQ2KdHBJ0giCCaTTraO6LTiQaJoshJV81RgnG%2FQbydi5f%2FDYnpjc2ssZGSRrI3Ws1z7dXkYQC8NoLNxfFqVpwaNht1OotVT4GzFDJj9GrpGI15%2BJJiPpxLMg0v6dVv9AONx9jclFWuR6fyFGvI0TNxvRC%2BUjHmnkjBViRGg4Ix0Yn6RGzLWkgJZRVRDKHw1TvRrzc2NpL1J6JN5M0l0dc5snnk4%2BjCBF0QIT1soQCCJCMFzgtw3EBXxTekkO0%2B0aio0pV%2FbIp9V%2BKIgpPrUZJOFCUev%2FJSmsuNBjuVjDK1gKQgp2DnLbuZlRjwuJUAn2MY4nce4COtZjadZSsCntbhh6zRomMm0bbpo%2Bbh4oGrVQLPOume7Uev%2FBCXo1IDsUG7sFsvcaytVpDB7jBS2aqjKCdypaUI4xPzabNJKZdj%2BWvNn%2BtsW4%2FRVB2xkGeEk582NR%2FnE3ZMwaxy2guAqFp99FZ5bu%2BIXqDW3hHqvLVNiOltBiTmueJRtpW9oZgjHIE9sBOOujo9%2Bv1%2Ffvn5h%2F9Eeb77LHuYa%2B94HIt1bArbxs6yU1iIuRjEAnYqZp%2BE8erqdUBRONnA%2Bc75DE6XQaiKGAySLDuqIjKVEtavhpXmSgW%2FmlplYChutYXx7Ay7tLsRZ5PWUePGL949euKoYPr7t1HOh2jK6mdXrVC5wHaoXLBCCp%2BZp8MeAIEa%2BOqmZtns6x0xC7KTL2yZM%2BMtlRs3J6I2pViG8q258sX7OOxndrH0tpz5ki3rzuqxivyf%2FDnN%2BWMCN1SGs8yIxKS3y0aDQdYTwePVm8EMVRGzmVDK5UepkSi6cntnp2Ku8ktw20SOf5bGNm4BcRXyGdhfcfkJ9jQ7%2FVXTzl2vfEZGRLeJB94%2Fzf4%2BLjqZjFi9cuWqJwDVHIFw29ha4V6a0wSQ5BSFrGxTGvV4uH30CFSfoEoJiY4mt0CGlozy8D%2Bo5jgx%2B6jmBbwy4BEI%2B9d3rHnZ0I%2FGN%2B7usnL1ey%2BxM389WLx%2F1%2BINHRbWXfoDLjz%2B6Z07su%2BYN73vyIFFvd959sV3qtf2nfFA35F3FQw8AoDgABCGcv7JvJ7iABSRUp1epgK3CYLmFeJ5qGYSi7k3IEsbWYFQyQrE9PWqJzjM14yPj2OHrLDdhgYZZafDrqOCmQ8UpzGUuFzsLkUnVHMYs4uij%2F2F%2FcJfFxrfee3ld8QDzf2vsC8wo5nuaa44%2BMabh%2BghQAAA4XW1%2FpMcNqJgMuooCJQqiPLlrxWvQhjgF8%2F%2FSgXTwej3O6M%2FNmF1x8zWHdVaFh%2F5uU3bnwXkmg1yXz6aT6km%2BQwpyW6LRdQn2Q0U9TGTotqUGOKqNclWAjJldKcyenwSZ0h8cyc75y5CT3v2xU42u%2BnL9p6UYpSa0Nne7yy%2B1EQ%2F7PaW6%2Fdbm0N88llHNx18ic5qnrv59RXv0YUK93QAQr1q9QNhhyCJ3ORLiskXFJMvtDT5KhocAz63Yu7rj%2FPIY0oTXmKdjuAkfHg%2F60QWROeQZnI4%2Bgq5M9oX4lybrUY5GWGrIBJRpnoDiChTUeOcJmE%2BqKL%2BGCJdcNEhlrSb%2BQ6T8%2BR887zoCZJPFyv1ZQBBscZ6pWKmQyqDLKBgMIoCNwcUdUrMcuuKmVot8AvlzU6qi9roq82%2F0LSFwoaNC69OAIQGdoRMVnSRY2mRUFAYoxcJlTDIOdBSfeJRD5nMSvEEu4B%2BdkS6svyKX6HWC0A%2Bi1c2Kd5c2XRy3h0mgYbo%2F4spg%2FKNEDuCzdrMFFACSacHOUgFevPMXj5rMb9CfMoLfOrSA%2BKF5b9KyigFJCgExOMgQVJYD1TWiQQEwrO%2BG5rpVFUTC3DfaPxsA1vG9pEg3dQ8jnwV9QJea2Zv0k3XKtUKsJLHIlEqwBgjmU%2FLQUfRp9mbCwCxTjhHHZIf9OA8AILRID2BkJ%2Bs1ZoxwDW1OMStBHU83G1fm5MZ0%2B4QzhUdK3f33F8MRKk50lPCUEXzoVc4K1NnTEvz%2BRw6yqMpYkzrFSFGI7jd1ooIt4LJFRHRA24o%2F98LVH4tX7NllapJZ7zS6LZn8QVeLKsVKjrQrxv43GPPvUychyc%2FVveH0F3HR77xCrNs%2FmPDWy89tOWB3js3Y1%2Bb1GPe7Jq5dxTuORZ11TZuHC3LD00fOhwI7OVWtVZygRPSeVUt0%2BD1Wq2mVGqiGX4zmNwOu8HOhccRljzgqoiArYV5DSXF1SDB1sddEk825YBijeRQiVcrvHAqyJ5Pv%2F3%2Bk0l%2F7GwKzGzQ6Wa811i%2FqXFjfb0wlJ1jP%2FDXxwMGLpdcbNHcsTuWvv7ll29fOPPJXwAQpnMOLxWGxbIaK6VuPU3ySmaOmQ0cHDPPzVmNGM9qlJ1DHgNzu6hmOGTcZXYV9f8d8HTbUOn8QrbvuW11Tz3swiw0oRPvyPQu96Sywe9%2B2mlNGRBlVqGU88fB%2BdM97E%2BVvGCx2CV7ht%2FhtgIgmqhez9mjt1FnRYR6bscerSYTkLTqvTcUDPLPA6osi%2BJOiG7ST%2F%2Fn2W%2B%2F%2B%2BTCTLMsNCxmTzdu3Ny4evOmNS9gNlr5647tA%2Frh0V%2B%2Fmfny%2B4Gv3r54%2Bi%2BfxLF0cN44IRk6hdOTDF4jpdzqtkrxGit4uRskyaUyyqIw6paZQyiRZQ632%2B%2BJsUuivNbh53Kb%2Bx%2F2JYp%2Fe%2F%2B7qFl8eecf%2FzBk65bfb7WQLstc2AZl1GMH9v3fJxx%2Fp2pttp%2F%2Bc%2FeGrS8oUksFoBYpHVxK3cVlMjkJ4UaSuj0GvhQMgKIsVkScspUqq0GtY98IAxWmOZS1p2QNgeJSXkPW3DX3mE%2BzrxreeANH3lObN6LH8KHopW83l9G3%2B3TugmsDC9PnPNkLgEKQuYQCzplcKIVu8HC4a56vQ5YpvYtY4ESnSHIzW6Vn%2BQzd72xlLbYWV0R0nXpFDJm6XKvOqvPk5pJekVxrm%2FJekTY2T7teEU9KnHUa%2Bzj%2F8pXd%2BrzbxD1uragaVBdAqDC%2BjaAUkrJv%2FOXKcGMXmJOnbhQXF%2FF3QsHJVnf87VhB3sSqoa%2Fte5X9jf3r7FdPzMgtC%2FccNOnTtwb3ZPb6ZWdOPLzh7amPD50%2F4z8%2F1T4uVE5ICkzt9ewxXYdBbfPqVx54ddvqMauTndXFnYfmBnY%2B2PS66ypEhs2ZFOn5IO08%2FZFvfn4cEPYCCD24nnuUzM5i0nFz7dF7vEkWvcMhVEQcNgOA3q0Y7xjlCatesVT2mALbtRUfM1P06cfm%2F%2BGZhgadoWD%2FjBMnyJuLfn%2Fkk%2BjrfHXnDOow4N5XP4gWAxDYDoDjxAtAwcr9tZ3PJCDa7Ga5MmImVlQ04%2F3EwqZSIqAJJVQc3NDQ1CG3TceObXI7CJWYU1Zc0qFDaSkAubaKudSxTZAEd4Q9TqPRrNP5kj22yognrLcC1z6ISzW5xSTOhATTljhb3v2det7Zv%2FeNGZnLt9g16B6h%2BaqNHZHv0yaP8TSV89QGJTzetxgMRqNOEkSdYHeYAGw2nY7KRje1xiKGfD5zeUyFyuJsRTUiQi0bdclYkzcER73JeuD5E2zOnB07dKSgy2icydpGlxLpQTZOcjW%2FXTo9NjcO5nNT4GQCoiASQHfca2tMVBjHYVRo6SRfJQGoCAfcdruDiz%2BgdwRo66xWHrfb4RPMPm5p0302p1UPDkUPuCLEt534Igi1bHVIVIgEzfAqepHh1bRDypryyOa1DVNmblnVsDhFl79rIuIAXcHhmYdfJicWLNj3cnSLcv%2Fzx9HjQmV99dDDg8e8%2BheuMZq2cnxdUBBOApeiri69x23S22xcWW02g%2FV2ytpSV72Jmrp7m4JG6NDUt95RNPXwJ%2Bq8d0XUSWM2dhSfU9EknsU6wSyDnOwzeLgds1GbYvxvmcVylSHFilGFxE4PYRT74fKaf%2FwOTZcvobX5lZ3PPffii88%2F10Cy2I%2FswyeR%2FAFNmMfeZ1f%2F8rfzH545p1j5vdyW1apU%2B6E8nOEzCrKsS3foHJkBwQhWq7siYrXprboUaHXDzMdZ0GLBqpaeO2hPAhMUr62Y%2BgRHrThpU8Niry7c%2BPBf%2F%2Bf7yzvryabGFc8%2B6xowcMRg1kUqqh9azT5h%2F1GcNr14%2BGTWl29fevfUeYVXHNNSlVexqMKW6qHJyT6bL8OfnOK1pqalecxOp8wtv80MFRHz%2F%2BY2VT5yJ1l63Ul6r3vQ0njtQyL9GzaIW15cvXnjnI8uf%2FfJ57P0SQsajObpM%2Fd9mHXp3YunT59birloRDO2a6z%2F9T38eEzFCzE9okGOpw1ywy6zXm8wEF4DsZrB4FYtg03rc2nRkaE5IY15ZEfvjt4eRQtfaahz6rrsFoaZNlk%2FfTbaJFSenDQjlrnS6XyW1twOtIplrqLzeuZaEfHYJKq%2Frj%2F5t8pdueG5kbsG25Hfpq50%2Bj%2Fe%2F%2BtjA%2FbXzF82%2BdmN88r%2FevSPL3Z6ftEjj7Yds%2BJ13jSzsaHnpjbt7h4Uvrdr2aAH%2ByzaXLm4R1W3O7p2KO71FCCkX%2FuG7BQrwKPWJlwu3jPioEKS1%2BC0OXtFLGGbVeaCkj1xU3kqIVjV5ONWqo52xVGXhtxKNuHyEMcdA5NSJuSy17ZurRiBXdlrw2vN8lyzHQeQZdU9%2F83mRWePngiAsIOvrjKhElx8fh86ZZPJ4DS4PSaz2aZzWdVV7TFqEbMS%2F4daVmW0rJcrhBY127EvX9TPNNQl6UP7Z7zztlAZLeMO6GMSvnpozV2Dj54hp7RcjgiVau%2BHAQ0ms6hHK6jhiJZl%2BNX0NFTicIYQt7ER%2B76ptuiMte%2FtYyP4oI%2F8o0cx9iPtrx6K5UpSgI%2FWinsblz4lNc3rsZipYBZ0yQ7ubnTuxCyYK7c2A1U2Z2Rlk8LhUHSq1BmbsoRPKeSfcBbp2qSdPsY%2B3jNxsk5nLHCcaHqjg0snBF7dzc6QBZ3OvHR%2FdK5QyUaz6j5l%2B4tJbXTp7trW9eRvHClACAIIOpXGzLBdFiVAUWlxQZ3RLaD1pnQ4ngmjmhUfYgteQT9m%2FJktwFVH2Cn27hFSQLxsGO6IfhU9jUdYD0AgfL1LfHw3z%2FsVMqnHK5jB7OBLO0UHfIJCVam1GRJo46KKOdrSUrLvuwFOnfnuS%2FtYTsWfl%2FStKu2xq3cXzuCVn9wf%2Bpn87mrGy5vtC03HtkAsZ6YPCZW3yJl7RUQr6npF0P2%2F5cz0oeZ%2FksHR0%2BTL6D5y31Q6eN685sPxrixetlPl5%2FYlJxu9AFbZRbmnpqlpTq09K3F7TdV%2FbpXcPJZTfEtxCddDvj7d3EK4ZLfHjedrpx794PFH58%2F49MClCxdM44aRZaRxE%2BaPjywnw0Zg4ebdS6Xj7NzZoCl4FhAvMxuZrfluorSo0RSABN%2BtlHzx8nKeJv3cDAiV7Ijaw5Oq4OwWDQ4H8UFqqsXiE2laujso0QScEzYFFXSDxYr7U7DPVNCV5Dj2pcRw4eKhDx%2BZ%2F9jjp45OnvHwVFIePIvB49LSPRvZ%2ByPvJcsjvOq5cRenZNg4zJn2qEvdpyXVQg6tAS%2FXAzu1JvkcpuoIdVglCaojEuTngS3pjfw38rSkOlOZT8nQVNOmbD9lKoU5HFg8t2TMUz2mRrqPyi95omTcisrHK%2FsMJSfuLFn%2FUKvsVinhsvqH%2FRkZSeoOPFuKdcJwrcuYCALV8343AGpSu4xtNPOWXcZcCQNO1%2FXt0PNKk%2FGszp3Ly0IVZPfVC2Lfxb3C5ZVhQDjK7fd5dVemazjNozNTahCARxo62irVJxKnwUz4SzDKgg%2B07k9ljt9sw2apra1KOJCldLR6NAOuqD89OWHNwpPHcdniPisKChY%2BtHv7My8sX%2FFdifTO%2Bxlov4LNXXfvoH7vstCH5z462QkQypUYSDzBpV4Zzk5y6s3mZI%2BdGD1OMS3dlORL6h%2FR%2B3xOcNr6RpxJIPa5uRWkRdPQzZ6Nm29lf5Lfinl2ypuduEqQxqONXTatnD0HG9jQblU05erVU2%2B99f%2FEEzUL%2B%2F1uGTs397MxS%2B7YtDz%2FxwtzsfO%2BU4psZqMkeIVtnHNByAibW0GmBSxtctLd7iwZeNSYn1gJchaVBku9il8r9co82Ja9clCxDnKwNLs0IXQ6VLV4%2BOLx8%2BeOq7t%2FUVXVgmF14%2BYuGrN42MKqeVtnzHh627QZW8mHj01aNmxh794Lhz059ZEFD%2FCHvfj7JZN%2BN2XbM1Onbd8BiscDEJT9Fw8MDrdzWGSj0WYS9URPTS6LW%2FYmGSwW2So5HBScbqsz3UmsTqvThG7JlATlWg%2B33RHrzL7lpjuGUOGj1uaovjBEKnH2HjYCJfY6dmGv72BvYGd%2BARu7j1wgZ5vZ3Ma57Ec08RslQBKsgaxUVYkkUR726QUqUDlmFjgmiYqtbgjFLYRiI5p%2FYebmnxVpXPuF1kupUABdeGdcdiE4pdy0Dj5fmkmCgNS13E07lbRqK%2Fn1%2FmCviN%2Btt%2FWK6OGGznh%2Fs4t9I39VVFmLztSUlwuwZdCiRC2l%2FKk33lG0dHD%2FqprTbw5%2FZmTxqMV9Z8yYvelw%2FcCqjf%2F%2B6K9P9H9t4KLl7R%2BcvmJR99W%2Ff6Ggbs3LPQbRnMF1WW0mD5q1NDW4IJjSKdy5prTH%2BklDl%2BfctXrZxm5rs9r27dWuY8e8oqHTRvWb0MVZPfnuKWXOMUCwWLTQ8eKH6u5TWpiTanKAI8lnpW495N90QCAhzctKeI%2FFxVnZpaXZWcU4pzgrq7Q0K6tYnFrUrl1RYUFBYfwOQGEM7xzvEdt5hxKeSwWDXmrNT0936a1esbSDZAKH1ZRuIuCwOYjJYXKk5AWcoRQByhNPBdhblgFRMxHuG90bnN2obu8KDjc3eYHM1py5DiFU2NqhNXTQOXMWz10weE77sRWvffDZq0880vHB5vXv4PB3les1tv2D02z76xP2YNvdezD3pT3s7N497JOXhMCeTTu3t%2F2dq9X3n575qfMjIXZI%2FQ7b%2Fu6brOGD0zj0rT%2BwD%2F%2BwB3P2xr8GQKCCushU8W1OdzqUhlt5pRQDokeJazP8rQwGh88D1EYJNTvSOakf3feGku9qVGpqG4xTV8ojfbXWGSt18iYUtdZJXEnDlt0%2FedPztWvHjM%2BbtnB%2BHauecmLUlAeov2bk6HHjJkhCcGFoRIcJs1jnI2OaCgRBqd8NhFraSI%2BCBGbICTupxI21YNTrBbMkWKwmUYegHGS5WbPRiyhjVuw2EAfPVEriM1kjLsUhtexzTK9lO0kQ1%2Fdk29mzvXB9yo23qh9EHfeDXhAhJWwiKKAki0J1RCSQr20nattixUJOXfM71Bv9Hhc%2BCdeuaV3LRAIbAAjXdUoX16r7wqGgF3iOLui5Zpn1JodXKu1gsnFoi9Pi0DmtjnQHAR63E4fT4bythikCCP22ZKVVoUS%2Bhp0Bqm51Fnr%2BL2UjHz5YPXLwfRNx36B%2Bl3eeXrwWxYbNVy%2F8n%2BpGrtwd7tNtSfXsNFaLo9jTdPZ89ub%2FpXB47YrkEiRpzW3r%2BoJ09UfBJLnmAoG5dBi5LJ5U83Z%2F2GIGp7L7nGwzHPNQhS3J7yWaAKe27LkytvA6c%2FfPn39g4Oqa%2Bfun195VPX3qwLunC2vmH9i%2FoGZlTdOCgdOm3l0zdZoiv%2FGASic8yQYLAMhwBiA6Q93NqCLLub9OUmpcstOLaHGCwAsItnQvZqjyadHEUVx6cz%2B0JMt%2Bsjy645vIQH91edGont0XbPj9msiaPXiIVI2%2FNHhk35IePbMLh0yeP6V6%2FZPPA4KflKlzBqAsnGkVRaCONIPUOstxn%2FMhJ%2BnrRKMzxUmcTl2yP92s88eVhKvIfTe2KDHRmKtlyd%2F2PpPpA3vsPbRzw4w1sz%2F8snbmA6Or7%2Bw%2BpUPP8mXDl2wVvqx%2BwJu%2F%2FYmVHWb32L5q0oAeXXrkBYa2LZl5056LnkfvwhP6xD0X5YAIN3pyAOvaT85494494cnCD133dnN3O1oEqNZDegiV4IHicLJoMOhs4HS6dC6%2BLeC2ulLMRKks6LWkMWHX6XqfaELKyMnTOhsGs13PNCxJNkz%2BZ%2F0Qg6GhAeewK698pKaNLwyr2caOScrsU1mzMEJygRWCYYcgIoBopDa7TidSq4jaQa%2F8RJkG7MortqVTEvILI6Z9PL1rzacn%2F%2Fov0pY1S3t%2FraYhx5WrKDBA2ED6Yh0dqvitsEECMJuofkCEQsyAJOqq2jzatUOseZR82L1nz%2B7xMwlZzIVNAOBQIge7xQhgUfrILXa7jtog%2F71CzQq3qDNoZYbSkOzBpo31obZtOw24a8BDQx4ubWIXRk7UT9S1Kckrtu%2BbHgSEvqQKP1d3kPleHwFKDSZuX2mGBGlK3sc5EGO7FpnEzw8MXLlQ8pQsvpNv4K4ld9471NP2%2FhFAoDt1kaPi26q3zgo7lONnEnBvHfMfbr3iP964r4XTTjgzJSYsWHJ0V%2F3qF3eu3%2FB8lN07fsKwYRMeGCZM3nHw8LPP7T%2Bw%2FTH%2Bb%2FYjjwCBau4hdsY9BF%2BZRr1AgMrEoJdu5R%2F4fBhELEUxdqM72c5aTGef1%2BIQVnvjPTGxCb3wfhzek01IufGW24c%2BAOIZzq8gnCYLACAbHrsGKMNHNDV6EPR%2FosTBA8ziYuCw7Tjs%2BThseQz2CwV2Ou3PYeV9xMZBVchkAMkvnuAQM34FFf4CxEZ9KD5qXmxUIBBiM2mNMBxSoY3Sba1zpQWwlbVVwCXk5EIqmmhqKj93lzEgkm2zG3tH7IEWecP9w%2B9rGZ4ohslCYnXDUm9MGF2J0ihbnJBfkf59Rs7q4vv9Y9X1ozq9%2BdbRTwPhSMnYbk2zOnXtXqqkXKHH1tZM7NOvw5ip2e0XjzjcWDEhMjB%2FyIz70jFvcU%2FeGRvmVKrdoPJ0bltbq9R1v%2FYaDgTdn4hNzIa84ltA1MLCGETS7SCOQSAGkdoSIv86xGsg3HKMrOsQE6CUQxiaKGmtgtyAkWIwIMNxKIN5QK4xAIk3MIIVnNA%2FfAdPM%2BwIOhPaRNEtuvROycm7kHm7iMHM7wabASUqOtByowkglmHm5an5G8bOiYau9y%2FSAF7vYVQ2zqR5UUeUXdxLDtMT0SMkNXqR9Lhag0cfURpetbZG%2FAvZr2jRHOZSOkc5ztkqzrMIAf55rM9N5VmbON8PqhxBs8aRmyFqoTwG4b4dxLFrV2MQyS0hsq5DTACHylWC%2FhhXgUA%2BgFip9id54Z5wod3t1glmAKcgCUk%2BrogS11erXC6%2FJJ%2BWL8jcIsuyoNfbqiJ6Kri17tNEXW55EDWhHZV7uVhLarxnM5QhVqpNqbM3bcJ9eBf%2Bbn%2F07S9xNlt4lIyKtaWSunqyntWxHSQcba5nhhhNYrmqS%2B3jurSmJdWx7jiVLwUx3sKsmLb5bgdRi4YYhP92EMegKQaR3RIiX4PgeGy65RhZ1yEmwMdxnW4b5z7CQrQJJmEDGMEX1st6ino0mXXgy0%2B0x2rMHLeOu0ewbTh8BHua7RiLw9m2MThS2DCa%2F3fbaLyfPTsaR%2BCIsWwrAOXzv877434CJ6RAQFkZnnRvmsAPExtcAA6rqFMCF0%2Ba32f2945YHTpRoDazQHnjnES1lrm3%2BFq4%2BYgL%2Fygm0lglwc7fxSoM1BZEj3qKzovZ1zsLv1479tEH9ykddGe2jnx04rGmh6Mjpu%2F9zy%2FNwbFk68SdWpPhmOUDNr2FDyl9dMMXV699l61D26bmvgOVZjp2ZRN9qTc7xVdOrI9LlUxpXLoVMfk7Nb7fDFELp2MQKbeDOAZzYhAZLSGyrkNMgA3xlRNMtEfCbHWUTvF5CmKjOFSQeO%2FfrHjvH9%2BpMOtFUbKDBB6vWeALiC8fs96sl2LdkZoVarkRrHVH8v9lCDcaJGexM%2BzzQ42NZ9GHnuYrO3mL5LvvUdvFy4zXWq%2FB6ei%2FV%2B5Y9yQAqv0oW6R0aK94ppxcMTUAXpMJUu25YkGhw5Hbrl12RaQd5LrV3S5tj%2Bvm0xpaZCBL2vZIQjWCo6Q2%2F2lnOTKUqE%2F1UYJv5ZAOKb36Lxv32p%2BOTCrfUnn27ofnjujZq094yVz2TcPf%2Fv7%2B58IPi6dX3OnPyC0L3b917LZdPTcF8w%2F0mVQxcHZN%2BcTisqHF1YMuXO0r7Nv3562c52pXkOTnPL8TACXovgLUVWlXOH6L57V56vN2t3t%2B7FP1eajFc%2FGz689fe%2BUW3xc%2FvP58whegruiOKsCNGRZehzj%2BcwyiTQwCqAIhKbtXOVDENWdkOJQLre3tedlIaF%2BWlJTe3ghi5y4pbYNtKyK%2BAqGgV6RD66BdECyZQU%2BxzqKriLgsNtBaO9R97viBxZsNL1corarUot3Jy%2F%2BqHSkOv7bLFExMz5TiAMaaVIb%2Fwg7NmPnUc0VVb4%2Ba%2F3xO8a6Hj%2F0reqcOO967tWbwurHswpy73lz03Mt7Jg1ZtfPpwzvoK7OWGon8BOY%2F%2ByddrEUqp%2Fie%2B4eMYP%2F9%2ByRWGwjyVpav5k5sXH9%2F5MVNo2XdQ6Sw4ektO5V1zXc4lW4kzreeMU%2BJFaqnVDtxVIn1ikl8vyqRVppEbn5e21993vp2z4%2F9rD7PafGcS1R7PsEQk1d7TaLX%2FgqAo9URXolZHHYXKGOgqI3xIgApTICovZYRgzDHIa79iUMMSoA4xl6IQTg0iG84RDrHQ4OYwA4CqBbHZ9d89VRlx1zyq6euqsJ5fsnUqhXwYN5jsTttkj7YRp9eETFSj91nsfLIR0%2B9LqSttY3QmLJw6%2F3b430QyITiIlAqxdlBMcj%2FlHpUk%2B6gRVqnV4kwil39%2Be%2FsK5T%2F9sUYXdkp9n3vr4YN77ll3OW%2Bpzc8v7NpC3vppe0vPUtC7Ev2FzR%2FcQmlWcInr25%2BcGHXgtrefZ6cNHMlm8b%2BtaaRbXjh4Aku21jXgbraqmOrzaLyJC1RNqNUrt0Vk%2F1HquySb%2Fe8drD6PPN2z4%2Bp45Ngi%2Bd8fu35a9%2Ff4vtcJtrzCSkx3Wh3fS2Ph2YhR9gJVO1CD4WTPAaDTSACKjsZTifKZjMqJ%2FQQ8tX1yhOfG8nPjUN6iccXE96Pp8ejezqVFHXsFCrqot3J8iefZP%2Fq3KW8Y1m4nPwYfwOUY3tEGCUsjvv7PvxEa3orl8vQ6iZn76u47uxt1M%2Bb2Kjnf3P2ZWVxBdGcfXw7QXSpTl4Si1SnX6L2X2yaUjNt%2BDw0Xd40o6Z25NzmV4rxTJ9pvAljfYjl95r63Iuxboyetf0XbEBQGjL6zuy7cMOvu8aRRcWffLRjTHRO6DzXjNjutSq5e2KSf0PVDI8mmZuf107VNOfWz4851OeBFs%2B5ZLXnE%2FyxtZarrfrYDqw6wr2xGWIjpKsAWu%2BI2t%2BVyXex0jOkFJfNZpfsrQMOsKeYPHqqT%2BNdjB7q5euvRZPnb3oYUWsXUUomXo%2FW9JUVbx7J4HugOKR748Sz333%2Fyd8fMwk63mSElTs38OYRzF9LmyID2Efsvwpjn83sV86KdcDaFQ1NOXQi58u3ce%2FZMxo1nF6Nmgn7Y%2FTmxejV%2BpuEyuv9TaJArLfsb%2BIw6gkU6UvxFLggHe4Ot0uSrE5nKpjtqZKY4bc6eDxpBaOR51hGGj%2BVwg8UUAc4b5zk4det2ia1fWVJO2TlvZF9aafq7NnSl1EYN4y9zJ7BYRgeN5RaonxdR8%2BRfs09fmXXEH%2Becs89LqzDiTgeF3ljSZmwlZ1m55QTGn6hNi32qy1yujAU0iAXCmBQuG26zkI8nqx8t7tVlk4oDOW1Mbbh0RHvSCKixdiunWg32pIyxcyKCIieFj7YoVjVRAeseV9R9a0q5rdyvYktTFkxnyvWs%2FNzup6pu8B%2BROnrBae6djz2%2BInL0aAOq4Y%2Fe8%2BQDVf9G154buPm5xvWCb3mrjKRjN%2B7vp4xEwtQh3q8Y%2Ba0KbPYz19MYDO5tw1mkLIPz3985rOPP%2F10x9NP7wBEE68Q7pH8YFF6wGWwWXmN0KJs3CSfKkwsE%2FIgzx1QzhIE0DR3nLfB89CcmUMWLuFF2u%2BWPJGTu3C%2Bt3TBoiIAgpP5iG2lhdp%2BkEMyxSpMejflw753u9KSrHUfcfpp29njxj46a8zY3z3YPRTq3rmsqJu4b9TM2lGjps8c3qFLlw78AkQdn%2Bk78TN1N5wPn%2BSzg2gC%2FnKrZc73En4mKLYb3o4vKU6BwvQ0olRTQpJEXXkDB%2FTOLAxZRpmn39tucP%2FKjIL21tHmqcL5rLZZnbvMquO3Tl1n1aldEci5Ff%2FFEyCCePMvngykw%2BK%2FeMIh5f8VUtYgffQ49lB7%2BR0HUNTpQenhP6WBBkscHEs5y%2BQZ1WF29yx63DMUTVyicNM3RdTpRZly061Rq55Od5RisXIk%2FbGKDPGARzmLjqmfcouq%2Fe4LkcAKAEQZizSpY1khOWwS0KwXbHbQUZP2M1%2Bx3pUgbyrhA%2FvjeGG9tcNjs9M6maNnb2B4FnXTeR1Tw7TF6DZldL0ZRcHuMIs2WRn9LW10DWe%2Fei9JQJ4ELUkjOsxJ7m6%2BQYbnXvbTY2Ow6D6FHh%2F7lTTBZZSVLOtqB8g4iCCHzeZK%2BdC1Y38ymWJ3vb5SBnteXszG7cAfyXB6EYzgPBD%2FURrIP3Wr6u%2BOqQ9OmDF94qRp5JtZj%2F9u9sx5C%2Ficym8TiHvgB8gGOwAEwU4c%2FM4nELJA1RaoJelK5ZPTbBAIlYikk0WuCInpvPM3e2CJ%2B16ASv2UpGqjUBAIkMRRWhRNSeqtK6QAyGYBkJXxUyYgEkE7ZYLxAQJIVjbPWkkXx4%2BZIJRzr1gnnuT0TQ2Xp3rTPZ5kI5Hl5NZ2wZDslYJtjN4kb%2F%2BILklMTUvtHyFp1rT0tPw0qqdJaUlpzsxM6BvJlJ0W3iDhg5ZN3bwwdMsfKruRW2ZQbuRlt9evdcorVpPyolGwuJT%2FdUDsCHUKOz4AWfRHQvA065Z1snHLxtW7%2FoddaNewgZANO4LY%2Bn9OPN%2BrQSxmD80rC7ed1%2FRm9%2FpuaEacl3tH9TwUsfXIpYPVzprl6o4iBXdYT0AUtDAtYc3y%2BEuJtrjkUwGEVlI650ylKvE%2B5ABA%2FHNTwuf9lc%2BBgItUcf0%2FAgZwQedwuks0ypTyaYjSqY%2BiqLe60l3E5aIWOZ1mxPuV70toergeGwR4g0v8V2eKi0otVJZJ05xV7GHcsHQO%2B0ESk9LSjDup6913x%2FKzVKdeX9THFGzb1v5TDDfpQ45bECoJ9%2B43cBcf0nCXXr%2FF8%2F43notvxJ6rVEnqc1TWG05X9cp%2BAAQRKWiHl2Knck80KgqljCAC4Aq1QvJpPHP6XaxCImp1FiUv6pwAUXstt2Ud9NrbHGJCAsQx9ufEKktsFtJBzroOMYF9EK%2FV%2BGK1mv8PflNJUQAAAAABAAAAARmahXJJOF8PPPUACQgAAAAAAMk1MYsAAAAAyehMTPua%2FdUJoghiAAAACQACAAAAAAAAeAFjYGRg4Oj9u4KBgXPN71n%2FqjkXAUVQwU0Ap6sHhAB4AW2SA6wYQRRF786%2B2d3atm3b9ldQ27atsG6D2mFt2zaC2ra2d%2FYbSU7u6C3OG7mIowAgGQFlKIBldiXM1CVQQRZiurMEffRtDLVOYqbqhBBSS%2Fohgnt9rG%2BooxYiTOXDMvUBGbnWixwgPUgnUoLMJCOj5n1IP3Oe1ImajzZpD0YOtxzG6rSALoOzOiUm6ps4K8NJPs6vc%2F4cZ1UBv4u85FoRnHWr4azjkRqYKFej8hP3eqCfDER61uyT44DbBzlkBTwZD8h8%2FsMabOD3ZmFWkAiUs5f4f2SFNZfv6iTPscW%2BjOHynEzEcLULuaQbivCdW5SDNcrx50uFYLzFHYotZl1umvNM1tgNWX%2BV%2F3gdebi3ThTgVEMWKYci4kHZhxBie3TYx3rHbGr%2BPdo7x4dIHTKe5DFn%2BO%2Fj%2BW2VnE3ooW6isf0LIUENvZs1gf%2FLHojJwdpplCP5gn%2F5gi26FoYa19ZVFOJ6Sxuoz%2Fq2Ti20IKVJdnqvYJwnhfPH%2F2f6YHoQF30aZaK9J8T026RxH5fA%2FWPW%2F8IW4zkpnIfoFLifGB86v0ffm5nbyRs5iaHR3hNBD0HSfTzoPugRM%2BhdN0x052KoHLBS0tdgpidAiEesDsgWYO73RWQz2LWIwjqnMe%2FuYISQtlbyf2NlT9Q9PoBcBnrO6I5ELoMeyHkNnIXGdv809H%2FDXNOTeAEc0jWMJFcQxvFnto%2F5LjEvHrdbmh2Kji9aPL4839TcKPNAa6mlZUyOmZk6lzbPJ3bo56%2F%2FCz%2BVaqqrat5rY8x7xnzxl3nvo%2B27jFnz8c%2FmI9Nmh2XBdMsilrBitsnD9rI8aiN5DI%2FjSftC9mIf9pMfIB4kHiI%2BhWfQY5aPAYYYYYwpcyfpMMX0aZzBWZzDeVygchGXcBlX8ApexWt4HW%2FgLbzNbnfwLt7DJ%2Fp0TX4%2BUucji1hCnY%2FU%2BcijVB7D46jzkb3Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhhjytxJOkwxfRpncBbncB4XqFzEJVzGFbyCV%2FEaXscbeAtvs9sdvIv3cjmftWavuWs2mg6byt3ooIsFOyx77Kos2kiWsIK%2FUVPDOjawiQmO4CgdxnAcJzClz2PVbNKsy2ZzvoncjQ66qE2kNpHaRJawgr9RU8M6NrCJCY6gNpFjOI4TmNIn36TNfGSH5RrssKtyN%2B59b410iF0sUFO0l2UJtY%2F8jU9rWMcGNjHBEUypf0z8mm7vZLvZaC%2FLzdhmV2XBvpBF25IlLJOvEFfRI%2BNjgCFGGGNK5Rs6Z7Ij%2F45yNzro4m9Ywzo2sIkJjuBj2ZnvLDdjGxntLLWzLGGZfIW4ih4ZHwMMMcIYUyq1s8xkl97bH0y3JkZyM36j%2F%2B58rvTQxwBDjDDGNzyVyX35Ccjd6KCLv2EN69jAJiY4go%2Flfr05F%2BUa7CCzGx10sYA9tiWLxCWs2BfyN%2BIa1rGBTUxwBEfpMIbjOIEpfdjHvGaTd9LJb0duRp2S1O1I3Y4sYZl8hbiKHhkfAwwxwhhTKt%2FQOZPfmY3%2F%2FSs3Y5tNpTpL9ZQeGR8DDDHCGN%2FwbCbdfHO5GbW51OZSm8sSlslXiKvokfExwBAjjDGlUpvLTBY0K5KbiDcT672SbXZY6k7lbnTQxQI1h%2B1FeZTKY3gcT2KvTWUf9pMZIB4kHiI%2BxcQzxGfpfA7P4wW8yG4eT%2FkYYIgRxvgb9TWsYwObmOAITlI%2Fxf7TOIOzOIfzuEDlIi7hMq7gFbyK1%2FA63sBbeJtvdwfv4j28zyaP8QmVL%2FimL%2FENJ5PJHt3RqtyMbbYlPfQxwBAjjPEN9ZksqkMqN6PuV7bZy7LDtuRudNDFwzx1FI%2FhcTzJp73Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhjjb1TWsI4NbGKCIzjJlCmcxhmcxTmcxwVcxCVcxhW8glfxGl7HG3gLbzPxDt7Fe%2FgY%2F%2Begvq0YCAEoCNa1n%2BKVyTUl3Q0uIhoe%2B3DnRfV7nXGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOM8XZouTZemS1OAKcAUYAowBZgCTAHm3x31O7p3vNf5c1iXeBkEAQDFcbsJX0IqFBwK7tyEgkPC3R0K7hrXzsIhePPK%2F7c77jPM1yxSPua0WmuDzNcuNmuLtmq7sbyfsUu7De%2Fxu9fvvvDNfN3ioN9j5pq0ximd1hmd1TmlX7iky7qiq7qmG3pgXYd6pMd6oqd6pud6oZd6pdd6p%2Ff6oI%2F6pC%2FKSxvf9F0%2F1LFl1naRcwwzrAu7AHNarbW6oEu6rCu6qmu6ob9Y7xu%2BkbfHH1ZopCk25RVrhXKn4LCO6KiOGfvpd%2BR3is15xXmVWKGRptgaysQKpUwc1hEdVcpEysTI7xTbKHMcKzTSFDtCmVihkab4z0FdI0QQBAEUbRz6XLh3Lc7VcI%2FWN54IuxXFS97oH58%2BMBoclE1usbHHW77wlW985wcHHHLEMSecsUuPXMNRqfzib3pcllj5xd%2B0lSVW5nNIL3nF6389h%2BY5NG3Thja0oQ1taEMb2tCGNrQn%2BQwjrcwxM93gJre4Y89mvsdb3vGeD3zkE5%2F5wle%2B8Z0fHHDIEceccMaOX67wNz3747gObCQAQhCKdjlRzBVD5be7rwAmfOMQsUvPLj279OzSYBks49Ibl97In%2FHCuNDGO%2BNOW6qlWqqlWqqlWqqlWqqYUkwpphTzifnEfII92IM92IM92IM92IM92IM92I%2FD4%2FA4PA6Pw%2BPwODwOj8M%2Ff7kaaDXQyt7K3mqglcCVwNVAq4FWA60GWglZCVkJWQlZCVkJWQlZDbQyqhpoNdAPh3NAwCAAwwDM%2B7b2sg8kCjIO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO47AO67AO67AO67AO67AO67AO67AO67AO67AO67AO67AO63AO53AO53AO53AO53AO53AO53AO53AO53AO53AO53AO5xCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMd6lCHOtShDnWoQx3qUIc61KEOdahDHepQhzrUoQ6%2Fh%2BP6RpIjiKEoyOPvCARUoK9LctP5ZqXTop7q%2F6H%2F0H%2B4P9yfPz82bdm2Y9ee%2FT355bS3%2FdivDW9reFtDb4beDL0ZejP0ZujN0JuhN0Nvht4MvRl6M%2FRm6M3w1of3PVnJSlaykpWsZCUrWclKVrKSlaxkJStZySpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGa1axmNatZzWpWs5rVrGY1q1nNalazmtWsYQ1rWMMa1rCGNaxhDWtYwxrWsIY1rGENa1nLWtaylrWsZS1rWcta1rKWtaxlLWtZyzrWsY51rGMd61jHOtaxjnWsYx3rWMc61rEeTf1o6kdTP%2F84rpMqCKAYhmH8Cfy2JjuLCPiYPDH1Y%2BrH1I%2BpH1M%2Fpn5M%2FZh6FEZhFEZhFEZhFEZhFEZhFFZhFVZhFVZhFVZhFVZhFVbhFE7hFE7hFE7hFE7hFE7hFCKgCChPHQFlc7I52ZxsTgQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQti5bl63L1mXrsnXZuggoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCyt5GQBFQBPTlwD7OEIaBKAxSOrmJVZa2TsJcwJ6r0%2F%2B9sBOGnTDshOF%2BDndyXG7k7vfh9%2Bn35fft978Thp2wKuqqqKtarmq58cYbb7zzzjvvfPDBBx988sknn3zxxRdfPHnyVPip8FPhp8JPhZ8KP78czLdxBDAMAMFc%2FbdAk4AERoMS5CpQOW82uWyPHexkJzvZyU52spOd7GQnu9jFLnaxi13sYhe72MVudrOb3exmN7vZzW52s8EGG2ywwQYbbLDBBnvZy172spe97GUve9nLJptssskmm2yyySabbLHFFltsscUWW2yxxX6%2B7P%2BrH%2Fqtf6%2B2Z3u2Z3u2Z3u2Z3u2Z3s%2BO66jKoYBGASA%2FiUFeLO2tqfgvhIgVkOshvj%2F8f%2FjF8VqiL8dqyG%2Bd4klllhiiSWWWGKJJY444ogjjjjiiCOO%2BPua0gPv7paRAHgBLcEDFOsGAADAurFtJw%2Fbt23btm3btm3btm3btq27UCik%2F1sq1CH0I9wl%2FDTSONInsjxyKcpGc0VrRNtGx0dXRF%2FFpFiV2KbYl3j%2B%2BJz4vkTaxKjEgcSXpJzMm6yb3ALkAnoCV0ARLAcOBjdCAJQJqgWNhJZDT2EbbgTPhz8h%2BZFJyDbkFSqgVdGh6Br0BhbFFCwHVhNrj43DXuH58V74WcIkahHvyDRkLXIGeY18SxWl%2BlMHaIVuSc%2Bh3zHpmNbMJOYuy7DF2E7sFvYMJ3Clf%2B3DHecNvjm%2Fm38g1BYmioxYS5wqbhZ3S0Wl2tJkab50U04pl5CHy9vlmwqlZFJaK4uVnco55YlaUK2kNla7qEPV6epi9aMW01jN0zJohbRZ2mptj3ZWu6e91wE9vT5LX63v0c%2Fq9%2FUPRiZjprHS2GmcNG4ar8yIOcycZC4yN5mHzMvmE%2FOrhVq6NcCaYC2wNlgHrAvWQ%2Ft%2Fe6w9115r77XP2fecrE4xp65zwM3lNnZnuBfdZ17E071sXj6vrTfP2%2BHd8F74lJ%2FeL%2BHv86%2F6D%2F23Qfogf1A%2BqB10CAYGk4LFwdaf2C%2BJfQAAAAABAAAA3QCKABYAVgAFAAIAEAAvAFwAAAEOAPgAAwABeAFljgNuBEAUhr%2FajBr3AHVY27btds0L7MH3Wysz897PZIAO7mihqbWLJoahiJvpl%2BWxc4HRIm6tyrQxwkMRtzNIooj7uSDDMRE%2BCdk859Ud50z%2BTZKAPMaqyjsm%2BHDGzI37GlqiNTu%2Ftj7E00x5rrBBXDWMWdUJdMrtUveHhCfCHJOeNB4m9CK%2Bd91PWZgY37oBfov%2FiTvjKgfsss4mR5w7x5kxPZUFNtEoQ3gBbMEDjJYBAADQ9%2F3nu2zbtm3b5p9t17JdQ7Zt21zmvGXXvJrZe0LA37Cw%2F3lDEBISIVKUaDFixYmXIJHEkkgqmeRSSCmV1NJIK530Msgok8yyyCqb7HLIKZfc8sgrn%2FwKKKiwIooqprgSSiqltDLKKqe8CiqqpLIqqqqmuhpqqqW2Ouqqp74GGmqksSaaaqa5FlpqpbU22mqnvQ466qSzLrrqprs9NpthprNWeWeWReZba6ctQYR5QaTplvvhp4VWm%2BOyt75bZ5fffvljk71uum6fHnpaopfbervhlvfCHnngof36%2BGappx57oq%2BPPpurv34GGGSgwTYYYpihhhthlJFGG%2BODscYbZ4JJJjphoykmm2qaT7445ZkDDnrujRcOOeyY46444qirZtvtnPPOBFG%2BBtFBTBAbxAXxQYJC7rvjrnv%2FxpJXmpPDXpqXaWDg6MKZX5ZaVJycX5TK4lpalA8SdnMyMITSRjxp%2BaVFxaUFqUWZ%2BUVQQWMobcKUlgYAHQ14sAAAeAFNSzVaxFAQfhP9tprgntWkeR2PGvd1GRwqaiyhxd1bTpGXbm%2FBPdAbrFaMzy%2BT75H4YoxiYFN0UaWoDWhP2IGtZtNuNJMW0fS8E3XHLHJEiga66lFTq0cNtR5dXhLRpSbXJTpJB5U00XSrgOqEGqjqwvxA9GsekiJBw2KIekUPdQCSJZAQ86hE8QMVxDoqhgKMQDDaZ6csYH9Msxic9YIOVXgLK2XO01WzXkrLSGFTwp10yq05WdyQxp1ktLG5FgK8rF8%2FP7PpkbQcLa%2FJ2Mh6Wu42D2sk7GXT657H%2BY7nH%2FNW%2BNzz%2Bf9ov%2F07DXE7QQYAAA%3D%3D%29%20format%28%22woff%22%29%7D%40font%2Dface%7Bfont%2Dfamily%3A%27Open%20Sans%27%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A700%3Bsrc%3Alocal%28%27Open%20Sans%20Bold%27%29%2Clocal%28OpenSans%2DBold%29%2Curl%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAFIkABIAAAAAjFQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABlAAAABYAAAAWABAA3UdQT1MAAAGsAAAADAAAAAwAFQAKR1NVQgAAAbgAAABZAAAAdN3O3ptPUy8yAAACFAAAAGAAAABgonWhGGNtYXAAAAJ0AAAAmAAAAMyvDbOdY3Z0IAAAAwwAAABdAAAAqhMtGpRmcGdtAAADbAAABKQAAAfgu3OkdWdhc3AAAAgQAAAADAAAAAwACAAbZ2x5ZgAACBwAADiOAABYHAyUF61oZWFkAABArAAAADYAAAA29%2BHHDmhoZWEAAEDkAAAAHwAAACQOKQeIaG10eAAAQQQAAAICAAADbOuUTaVrZXJuAABDCAAAChcAAB6Qo%2Buk42xvY2EAAE0gAAABugAAAbyyH8b%2FbWF4cAAATtwAAAAgAAAAIAJoAh9uYW1lAABO%2FAAAALcAAAFcGJAzWHBvc3QAAE%2B0AAABhgAAAiiYDmoRcHJlcAAAUTwAAADnAAAA%2BMgJ%2FGsAAQAAAAwAAAAAAAAAAgABAAAA3AABAAAAAQAAAAoACgAKAAB4AR3HNcJBAQDA8d%2BrLzDatEXOrqDd4S2ayUX1beTyDwEyyrqCbXrY%2BxPD8ylAsF0tUn%2F4nlj89Z9A7%2BtETl5RXdNNZGDm%2BvXYXWjgLDRzEhoLBAYv0%2F0NHAAAAAADBQ8CvAAFAAgFmgUzAAABHwWaBTMAAAPRAGYB%2FAgCAgsIBgMFBAICBOAAAu9AACBbAAAAKAAAAAAxQVNDACAAIP%2F9Bh%2F%2BFACECI0CWCAAAZ8AAAAABF4FtgAAACAAA3gBY2BgYGRgBmIGBh4GFoYDQFqHQYGBBcjzYPBkqGM4zXCe4T%2BjIWMw0zGmW0x3FEQUpBTkFJQU1BSsFFwUShTWKAn9%2Fw%2FUpQBU7cWwgOEMwwWg6iCoamEFCQUZsGpLhOr%2Fjxn6%2Fz%2F6f5CB9%2F%2Fe%2Fz3%2Fc%2F7%2B%2Bvv877MHGx6sfbDmwcoHyx5MedD9IOGByr39QHeRAABARzfieAFjE2EQZ2Bg3QYkS1m3sZ5lQAEscUDxagaG%2F29APAT5TwRIgnSJ%2Fpny%2F%2FW%2F%2Fv8P%2Fu0Bigj9C2MgC3BAqKcM3xgZGLUZLjNsYmQCsoGY4S3DfYZNDAyMIQAKyCHTAAAAeAGNVEd320YQ3oUaqwO66gUpi6wpN9K9V4QEYCquKnxvoTRA7VE5%2BZLemEvKyvkvA%2BtC%2BeRj6m9Iv0VH5%2BrMLEiml1XhzPdNn3n0rj6%2FEKn2%2FNzszO1bN29cv%2FbcdOtqGPjNxrPelcuXLl44f%2B7smdOnjh09crhe279vqrpXPuM%2BPbmzYj%2B2rVws5HMT42OjIxZnNQE8DmCkKiphIgOZtOo1EUx2%2FHotkGEMIhGAH6NTstUykExAxAKmEqSGMFl6aLn6J0svs%2FSGltwWF9lFSiEFfO1L0eMLMwrlT30ZCdgy8g2S0cMoZVRcFz1MVVStCCB8raOD2Md4abHQlM2VQr3G0kIRxSJKsF%2FeSfn%2By9wI1v7gfGqxXBmDUKdBsgy3Z1TgO64b1WvTsE36hmJNExLGmzBhQoo1Kp2ti7T2QN%2Ft2WwxPlRalsvJCwpGEvTVI4HWH0HlEByQPhx468dJ7HwFatIP4BBFvTY7zHPtt5Qcxqq2FPohw3bk1s9%2FRJI%2BMl61HzISwWoCn1UuPSfEWWsdShHqWCe9R91FKWyp01JJ3wlw3Oy2Ao74%2FXUHwrsR2HGHn4%2F6rYez12DHzPMKrGooOgki%2BHtFumcdtzK0uf1PNMOxwDhN2HVpDOs9jy2iAt0ZlemCLTr3mHfkUARWTMyDAbOrTUx3wAzdY%2BniaOaUhtHq9LIMcOLrCXQXQSSv0GKkDdt%2BcVypt1fEuSORsRUwgrZrAsamYJy8fu%2BAd0Mu2iYFhexjy9FIVLaLcxLDUJxABnH%2F97XOJAYQOOjWoewQ5hV4Pgpe0t9YkB49gh5JjAtb880y4Yi8AztlY7hdKitYm1PGpe8GO5vA4qW%2BFxwJfMosAk2X9n9X2cVVfnA36pzHNHJGbbITj75NTwpn4wQ7ySKfAu9u4kVOBVotr8LTsbMMIl4VynHBizBEJNVKBAfMNA9867j0InNX8%2BranLw2s6DOmqIHBIbDfQR%2FCiOVk4XBY4VcNSeU5YxEaGgjIEIUZOMi%2FoeJag4mEB3PUOweCaG4wwbWWAYcEMGKn9mR%2FsegY3R6zdYg2jipGKfZctzINQ%2FvxkJa9BOjR44W0OpTKAskcnjLTcKyuU%2FSVIWSKzKSHQHebYW9mfGYjfSHYfbT3%2Bv877XhsIwGzEUaleEwITyE2u%2F0q0Yfqq0%2F0dMDWuicvDanKbjsB2RY%2BTQwOnfvbMUhiNPFyDCRwhZhdjE69Ty6FjoOoeX0spZz6qKxxu%2Bed523KNd2do1fm2%2FUa6nFGqnkH8%2BkHv94bkFt2oyJj%2BfVPYtbzbgRpXuRU5uCMc%2BgFqEIGkWQQpFmUckZe2fTY6xr2FEDGH2px5nBcgOMs6WelWF2lmiKEiFjITOaMd7AehSxXIZ1DWZeymhkXmHMy3l5r2SVLSflBN1D5D5nLM%2FZRomXuZOi16yBe7yb5j0ns%2BiihRdlFbd%2FS91eUBslhm7mPyZq0MNzmezgspUUgVimQ3kn6ug48mntu3E1%2BMuBy8u4JnkZCxkvQUGuNKAoG4RfIfxKho8TPoEnyndzdO%2Fi7m8Dpwt4XrnSBvH45462t2hTEX4Bafun%2Bq8jIzK%2FAAEAAgAIAAr%2F%2FwAPeAF8egd8lFXW9zn3PmX6PNMnPZNJMRRDMkzmDYgZMRRDCEmMMUPJIgZEepHlRYyIiNhRUdYuS4ksy9reLDYsdOmLLC%2FLy7L2CgKrrCJkLt%2B9T2YyYPl%2BD8804J5zT%2Fn%2FzznPBQKbACSTvAEoqJAdtUhUJpQYjBJVAUrKSkIOJ1ZUOEKOUGkfV8ARiPB7E72m87WJZF58ibzhXPVE6QsAAnMufI4H9XXsUBh1UpOJSJLmQNWqNsasLkKhsrKnA%2FT1HCF9PQzSAPYtD5V5PW4lmFeIK86EcCRbObLp2lGjGxpH4%2Bf0wLkjjU3NDSNGxYSMxbSdDkzomhE1SypQalCISvniob1lDuTL7injC1O%2BMr%2FxmeJtxeRt%2FiJviJ8mmrjFOr0BJCZ3QAbkQFu0ypCZ45HcRqNJQkiT%2FLKsOO02s2Ryudze7CxVUnw%2Bv9%2BtmKTcgEEymzPRlgN2e5rHaeOXyeeiisnJFagMOSsqSkr45kL8Tr450SfM5%2Fy1V66pGvBwTV1BcYcDEX67QjQkbo8cigTplyVI2OHh%2F6zdXHO4%2BiR6SjoxMPzo8O21h2tPx7O2lmylNV%2FtY5Nwubj3fXUA%2F8BuFveBr74CoNB84V6pSnFCLhRCL7g7OijfR7Oy3FalR49AcXYRFBnsQUcgkAYO6H15j6wiAGu%2BI%2BAo6pleFDAWKJZMX%2BaImNunWOpiskIVH796ewAqEzvV9gqX9nQ4Qd8S%2F1V%2FScSM%2FrmsTP9FfNUNIvzuVlRPMFxY5PB6fY6iwsJw3%2FJIOOTx%2BlT%2BWzaR%2BxYWecrR7fWFFanqi%2F33nnn9%2Bv%2BMvXr7mk933%2Fv5Gy3PrN6yZjg7WFV1D5s2oGoh7nx%2Bk2vvTrkeDT0HKlieXvvakkfecj%2F5uKnhm6iNHRk27a6bevTL%2BclH3ulVkX3cBTJUXjip%2FCDvBiO4wQ95PB6qo%2Flen0%2BWTRpofo8nLa04mB3UgpeX5PbMLEzzKz4%2FtapOlXt5a1llpXhN7FF7r8zJ37o%2FiN15Q2XhvsE8RdajOqwFyrwFGETXr%2F0F9u9dNnZsWW9869X1azow9qe%2Fkpc7D52mPRf%2F%2FHcJFrR1npvf9sWX336EO7%2F9x7lqeUMn6frt8y%2B%2F%2FZD%2FJjzecOGEAnxvWdzjpTAzWtHbGjRhlhdMXqvLVZSWnl5kpSoChLJVtcwXSPea8vNLSrT0dEnTegyPaZIUqIlJLnSKhAV%2FpfBuhb9EbE53bYVIM%2F3S45hfiZ%2B7th8IFPHN5QuXcscms1vF8kiAZ2qBsEEEFQX7FnJDeNy%2B8nIF2JLZ7%2F77DPtk3rJhVV9vefPD%2B57CzCF98cr82%2Bs631s4%2FvbxrKPf1XjT0Iqrh%2F%2BuafTMxR%2B9e%2B%2BmxqZnxzzx5l8embstxo7PeX0Ju3DjoqYJA7C611hyd3hAtH%2FzpD5jAAVm4DM6Zjj5C5WIAIu9DuxCIB0kuvEBAKGBbSTz%2BL%2B3Qm7UZjaZqCSBqtrN%2BVQgmAMTua3joeaMhBTicTt9wULS8PSj5x58eNk9Z5c9RUrRiPte3MTKzvyHRd5Yh9vFygP4yq3JlfmyfHG%2Bso1LyP%2F5yqgRNVjuDPclRSGvk7Q%2B%2FejZJY89%2FOA5sTT7ifVb%2Bzru%2FOEM7tv0EisFhErSJGUpbrBBOOo3ms0ypVZUVc0umUyqilarYrDxpN1aJrKQuykJwvwz%2FyPMUOCTXSqlRa6CiEzJy8U4J8DWf%2FjpM%2FeeOMZeLMKpxYqbPTyx088Oz8MKtnMuFqefm4gzAKEZPpUqpG1g5qivGRSjkSKAxWo2giJRKOFCysqS4vjNhQXCAa4Bxz1HEI%2ByNlx0FBextqOk9SjezW49yhaIHbGzuBtOggKe1wgFWVapDCXbdSNt5ghfoNCgMxLA3X1v%2B%2BdV%2Beg%2FvIsdR9MJYWVcS5rISqDg%2BCuVQQLkSiTc7QoHPANIGq49dw6wi7GwgmvujZoUrrSRNsaMLqjsmfjnkYu4aU6SlJZ28xECNyqt0mMrM2pBricBidueiNS5iDcRA0ir4h%2By4yQgGJP%2FDwLVF05IQ%2BW9XLoPLou6LYoTFPCnGT0jYkaV2kfEaBok8y%2B1kkYCeeDQnIEyQI2nUrlDE3kkDT3PzsfZhXMoxZHGw2OmTRl7w%2BSpLeQoW8gexttwNi7C6ewO9hD7%2FusTaELr8eOAMA%2BA1nJtTNAj6jJKAAZEs8WgqihJRgX9wJHOkYoXkf8iwR2RiKKqRRiitWw3lYdnr30cDzNae%2F8Tw%2F1L3sS5gFALINXpKDQgmp1pQxW86M3O8aoqMTlNtTGnSjATM2tjXEgCYfS3hKyuCkFHkzBeScI6WKhFVxLuD%2BEQLt4TkOo6CU5f1drrhvrrVly%2FdspDayfe%2B8EtQx7fuJG0HcbZLyyc1r%2B5qXbojtE1xa0dt4x%2F5c31r9hA6MYtP5DrVgijoiV5Po6KKs3MBOCVStFlgez8bG57v8%2Fvq4tZ%2FGilfr8pX7VqJm1EzJQGeg3j5%2FxX8ruWMbrG4oduFyXxMEFyQlkpkMeJTvhKbCMY1j%2Fo2ykPlEmSr335KxvYPvbZydev29P65KNrX58%2Bc92zfxv6%2BKil76PnU1Sl6fe%2Bl694%2F%2FzIweMjUO1ZPnH2TU3fxqa09%2Bl%2F6OHXAQgEAaSZuhddMDiaZ1epkRAzpTKAxyVzrnGh7JLreGi7qF1VqO5WvoGQ0DwF584uo3cpz4sCBzc9T9SAQPKgoqI082X2QfxhshCzXmZ5Jmoo6MvOYAk7gCWH6cudN5%2B98oSroZZNBoRWbuEw1ygDmqI9OZ36aJrbbTPYqIFmZrldRpdFA27ONADF4%2FHXxjyKYhkRU9LgYsIJ6e%2BpgHAkGUjkgUhLSBg2N9w3IMwpylMaKScT%2Fn6efcC%2BPLN8xActmMGOhu%2B4bH6EpsV%2FyAgOoO0n9%2F%2BHnR2B5h7hr455LAPJ1%2Bwc%2B1i1AYGhXOs6eQf4IR%2BuigYUp8WSlweZTnAWFNpz6mJ2u4d60kbEPGnUwENEvUTbVJbqTCjIAQJlPo8IXEUNdQEJcCAhMvd%2Fgvy8Q3E6TmsbErv%2B%2BZ2tRuuN%2F7f1X%2BzsNyv%2FvYhoN066sbVlcRuZiq%2FiWvuP7rEb%2F7LuhyPfsFPLMffdxfMnz7%2B1fu5qEc0RPdM6QIHLo14FgCDKRFYNMiWU1MaoAsLfupYpQwobhpDby4OfkoJ4iZQWPyy9jNLm8wLSdEtUyzvBB3lwOVwbLXYqnl6U%2Bo3%2BQo%2FHnp1ttBtL%2BihOZyBQXGwBS0Z9zJIGwfoYXGwTYYlLnVeWdKFwoCSqAj0%2FLqoW8qk7kShFiku3kK9cfCPVHyDedt%2FqpeyLL06zk4uXtU1DyfXfE2fPmrng0Ccjbhg%2Bflxtq7zz3ZUzXhrU%2FO6sjqN73mrbXD2iY%2FKzm89vbBp7Y%2F3VcwaOI3vqq674XdnlYysH1Ym8GajvcgekQQFURnOzZJfFEgyCCwqLtNy6mKZRrzd9RMyrUkMdR%2BNfdbfu7DIBzCIaw0J5kS16edcXuNOdBXwbyU1J1ewxtvTOqxtHP%2F3%2BJIOl3xOz3v0nmr9Y%2Bf2d8VNjp4xrbbm7jQ5mdazJdtYzasufW2r%2B83%2FH0fEE%2B3DTXbdNum1%2BHfd4stOSZuvMURh1OXnyAPjtnsaYXeumMPAnaOwXTOb4NVYT72PqU%2BxG7xcf6mPNQAQX6%2FIUcHKmcllV1UUlBRXFZdIaYyZNUjgzJ6Rpm8u6mKrApzM0vUgYbrTrbF2SFHbS18Xa5GhSmF5P7JYqZODSiqKajIK%2FVYNEqQIEZRigFxShVFwJURhGD6JU0ZlDP443kvW7ccNSPH2abWFfCns140peoYDeNeZHHSqlRgkMcp00ViJSV30QKhkjagSue7JMQH4304%2FFkrTgKC9Tjh69VLueUScBrhFPNVAUJJTKEur6Ce0u1dCFuorNZH28UayJb2IaDjjNtKWsWmioXPicrpB365FYFc3LTU9PA%2BB2dlqdhUV2QCMFCAazGmNBl900ImaXkg7mVCR4KJVkyfpRJFR5F86oRckaXOFoe0m%2F7W6YevPVY5uWvzf1w3P7vm99YGyIHU4139VjH6ob1tLvqqpxR9u2r5m2onVI9RVXsHUX9eMTLkxQdnCc6AuVEIv2VCsq3G5XOGzt77rMZaWBtEDvNOgN0au8hkhEMg3QTPzqkVUq5feAklS7rOucMleiPU7ivc6kQtuiYCqrfNTdlVF8fxLxCKgtj3iUQC44%2BjrzOa06UfyDSESH3x2j106vnpWmTXnhlT1o%2BUfT%2Fqt9NdGau79%2FZhf73%2BexCP2T2Pz%2FZefZXez6I%2FgIyv%2FEkRs7Yf3IFpM1FG27n5x%2B%2BNQ9Q%2FotPPTGQSQBH%2FPd%2F9Yf%2Fvjjne1sx152gh0p6f3eKHwYW3%2FEZZ93sA627uCCpcfMzwj7AIC8WN4IKljh6miAWKkBQZHNZgqip6CSZLOSmpjVSs0yBZocIpTouZRiZWGortKL8gsDiITjI5Uik%2BLHJ7FXiYTziRJnywoMgWdwNFstbzxXRcbikdvy72CqiPvXAaQznI%2Ft4Idczsm9VLdbktKzzeY83vfZ7QGDlqalDY9ZNLRSTbODPb0mZneCvyYG9BLcSxY9KQVDSTe5ArmSp7voCQYwWfE4HPqnwOu4AyOYNn%2FC%2FfPZh2fjx7C84%2FaZ8xev2nXHraxT3vDKpkVrHaacdQ%2B%2B%2FxGdXTuy8Zr4NrZo3PgNgDCXI%2FUBnh9eKI36VZeLN%2BNWnxscUBNzSKpskmtiJleyNBOvSfVEKuQRD2%2B0Iw4l2BUdoTI%2BZiikBS%2B9h9OfOtrxL7aJvdiOkQOHDrc2tEs72U%2FHmW846xyGi3DSZ3j9azd1FvUDImwoz%2BE2NIBd1OtGAIdVkjTZUhOTqWTlLbMzaamUcEELnGVzAbVA0BHKleew8ew2Ng534wR8gL3Dxq5ZjO%2FxGuQP7A55A7ubrcHDnUMBdY8RLs0Mg6L5BgnAqphMiBbFWBOzKNxLAnII3zehaKqJofOXXkp5iCsitPAkbol0bqDV8RN4ijmIm4tl7zK2BLqkUsalGqFvNN1AqVkBQDQJoSl5QlZS0MVSLhaCX7P9dHD8OHKMEwKWxLu8KBdxL6ZDTbQo3e8nNquVEFemy2DIsGlmjQdbOr9BNkt%2Br%2BzlsmTu1FB3wd0z5VlnstgW8BBwKLpv9YJL5RlPdMKNOALkU1L14E93sr%2ByVfg43vTxgZtW%2FGXnd1vevKGVHafhuOnyAlyMU3AcPjDybB377rOT591Y2mUHeYJu%2FUg004jIzW%2BQJFm2GGhNrMaABoNsUijK3QmbMnfKFN2XPIHtjr%2FNdmE5uRrDZG78Xj5t2EIGAOCFiawBT%2BozgRw%2BbSAGXiPLwM0MRsr79e4NCw4Rxa5IJL6kRnJurq0bOKEZy79hDV4k7gVL5JHn1l4AdgYS%2BtfxVS0wMJpjIcRkNiOAzUBl2cq%2FUrNZoXwP3VtwpgBXF1eWAOXEQAdVfSMRDKBcx1awhYvEZm7FB7CZETKxJf4D39CN6%2FHf8XkJ6VIlly6LPUkqBVCQArccJKJUl6GXoPq6r3PD1MsbzldfSPxvRcyR3dAvmukGo9nI1bbxUPHKisdJjEQxq9QGilBcN36X0mUp6hA6Y9DpEYujXuXykscVRBpkK4wudhzbcaSC07GdfUgtRrZEms9Wzok3cw1WSi3nqklH6R3oPr8kYcedOm6WR9NMYETFagVwUFlRVM1MVW5RVLtHv11adI%2FEnAKwL1KEcM%2FJO9nv43fpSiwh81U7%2BqQGdrQtXseFv4FZvycdQPQ8%2BVKfDHgE0jgAfBZF8RpdNTGjRO01Mer6daQROSBexQQy16Hxpkj%2Bkj3BXubXE3gz1vNr%2FPlDb76Bs9nSNzaSY%2BxxdivejVP5tZCj0mP%2FOYvf4smfoAvtpHU62rkEFkhGowdsNrvdbQXBV3ZNM9TENGr%2FTSzoRn%2FZLXHoEyAo4ckJSx%2Bau%2BBBspEdYacX8yA6iCb0UGXmlKkTd504Fz8rb%2FgchAXYat0CdkjjEZynUFmSCDVIJg9AhmYypVOVEwBXRFK5UWSV22N7Ev4uHU92T9OQe%2BLX7PPaKziWzWZnfL9pJMZW1bO5OPS3LSUP1S3lg9poocvnk0ySppm8njQw8cTzu4wWMA6PAZgtFm40C%2FWaRcikzJbSWfPzuXKqQ0sxKLdfgl3BF0A82brsgaXLW7gB12EPzH7oTqxuZWvZKtp73M0Tm%2BPz4vvlDUeOLdxZwVwPk1KRVS2cQX0ce4s4n%2BRlpKcHICC7LeCGy4rdAbAELNlGX3ZNzCdRYyq%2BuhvwVHHWrRpn%2BIvGGoVFl%2FMhDadWMcJP9LZen9cr%2Bdin7JuOx%2FZeN2FqnzFL7767DtWvZu2f2TrnyermlsJrn977BC7f%2Flkz5g4srx3e8%2Borqypveeqmzf8qL%2F13n8KGgcUDKqrHbRP6FwNIYiqrimdLCgBFNBhVKlHOuxSdv3y2lARgcoLtYrOlOn53IGEMEF7k%2BdXC13JCQdThQHSbDQaX08hRhsdSYuuXVBAOtyLx4BHI6%2B6CYLnlEXbyLfYFex%2FD9zz7BAf0ztqVZ%2B7EwHn6YufCPz33%2FDraBqjXfyHBI2K%2BRonRKAOiVZYkC3BDJ%2Bq9VNpUJOaj%2BsXtVx6h57CC2dmLTMMKdPlKFXO0a4DY%2BdTwvZeN%2FqJLhrqRy8gSsx%2BT0e52yQh%2Bv2ynlszMrKwci9mcnemSzdRvt6NJiOSi%2BEtCbgo1UyM3WkiKOMKJUtMlGvCIi78nPihD2fPbzWFJ6WPdxqngfix9q9Sr9HQdwoJDth5mUy%2Fnm1hKoRixV%2FmpUJxwVT85trLi1EAa6twb%2BaS%2B9uuhNBsStmnSbVMVzTXLnPpUo6oYTYpJ0C2VLGYDkWXJqFCUkhDL9evG%2BooUZ3VpjZj8Izex59h6fnXg56wfNmF%2FDGMtC5Pi%2BGHyHdka%2F47Y4j27dJCYyF2B7wZVlZEQEERvNFFF4QqiSgVDdslOjEH5Z65AarLLowIDZAGWchEZbA%2FLwDo6mozsXBTfQUqoXleVJiZ0RugfzTJISFUVEExmlYuSRP1I0IAGUcZdOgxNpl1qFqqPbALSzPPvkbfjTVJ6vIrs30m%2FRXi%2F0ykkLWUbyWw9T7KjVgXRIIFRJlTBfN2EuvH0BNZX4iUpmc0y8bOPPmIblXMHz60Xa1gA6MDkVFt%2FZIKYnGpfnBa6sUmAHY9%2FmJhqI4S4fJ%2BQL55xoKIY%2BVYNoOZTiaaCvQtCfCFHMMy1CH34IX7GMmfKjQd%2FUoR8AzFIA%2BR3QIHeUTdBWVYkSTznFd6SVJko0DW%2BxLKLeyTRZYcwiGjADQ%2FjqVO8uP6KGOiGzmqyKN4maq1OtpHWXhja9SRIRonoRhEaJZ5K0NrOFyl%2F%2FvMAAGKNdIQ%2BqATAwK1gBjVKRVTIdwCUpB%2FrioP0XWLww7EvHPD6PGRL5ZkqbKpcLx3ptW2gZ%2Fz7GYIdmjju9pfm6E8Zq6OFTovBQvLy%2FP78LIMhaEkbFrNYZLfbPjjm5jWdnDM4JnvBk0Az%2Fy%2BZVYSeXlcUJWdMvMcN9%2B1u8h0omny9N6YT%2BhuGr1r0xzd%2BOr%2F5xbv%2FOn7T8Y9PswO%2FX3znY5MWPHHDsNfXvfono1K6rn7f%2BK3vx32E27h55MJbxwOBFVznDsUNTsjh7BvIojRg1Mw2n89szrWA2WPUFFDSh8QUL7iGxEC7mCz83SHi7H5mUeZ0aISzRVANCgTlw1AfH9d2D8WobftHX%2B7YNsMT%2BhpLLZbJM2ZOJJNvaZk%2BQ5rNdrPv2XH2t6XzFTdbPuiJ9jP3rwh0PPOXNWvWAMLoCyfoMWk2eDi6esRYymclxCubh8RkDexcM%2B%2BlZZJuOTk32SdwmnJoYkjgUBQyIf4DZqJx81Mjh9525cmTzcuHVf%2FBTQZgFvauOZFVwBH49ZIydr4kH4iQK81M2CcaDRi9Gi%2BobTZhqFy7xwIOIyi6fTTdPt5ft4%2BoT4Q%2BecShOXlPGioU%2FBLkji3iOnVPiAnZ9vHnOw9ON%2Fmw7Jv%2B1omT5kyVp7dNmDnLjWVoRx7zq9vG4YSfTjyy5vt7ViWNk9BynD61y%2BDMEKROSUpzOLKcJlOm3%2BOkzuoYFVUUVMesmuoZHFNTel5aloiry3bI3RbgrbNeR4XKwOMJ6AVAxMMtOP2GaQZcT2aVs%2B%2FY3zDt7LdoiJfID985vmNc3Qb61PyZM%2Bd3NmAPdGAahth3Jx%2B789Eel5%2B4rCjB7nSOkgMeuCKa7SZElSn1%2BqwAPhndyHVz283akJgZqJ4bgp8v7QVDiRwWFgxH9KfOeieocBWpiZ1l%2B9eu3bj%2Fufm1o2uv6ocGOq9zCZ23rKHh3ZdLPsoafsVgoKAwtzSV26sYyiEKd0SrzFlZAwZIfRwOUqzmSkGUpIHpPXr4fJFg8Kp0K1jRqlj7qv2GxYy5Eke5wr7FpDpWXFxYWDksVqi5e1fH3BkXz%2Bn4pxIOWz79gRHv0LneqJs2FQ76ewKfPao%2BpSsqEvmsj%2BykQFfCF6ZeRcGFyUQK8v26El%2F4WGzqS33OfxjpXbL2ndc3sTfYvm9%2BvP3WksHVg5tvOnmsZKGTFc2buvrNabOfa5w5%2Fdrrmura10otT%2FceNqZjJ5Xzew187smt%2F1i1bPw9We5Roeh1xYVrZ732vkM6L1UOHVlb2WcEHT5q0qRRuwBhBYC0lmeDB8LRdATw2Y0Wg8Fo9Nolp1MaEnNqJkCjR6D%2FJfU5336yUOPaKqJJEuCQeFQirWX7O%2B6YxfZjqapqE%2F61bQ958LsXt8S%2F40CwpeDekav%2Fvh0ILAPAD7lsA1jEZFcyGsFksprtJg9Rr4kR6DJ%2FZWoO7uobKtNnnyJUlrW3X3ttO14phMgLHn98yIjzPqkFgFxoY259XSt4oSTqd%2FL0JgaDT%2FNcE9PAaBctOk%2FsjOTEKYEwCRGJxwB6tajQpMDBcxoHXzN8CJbum6GLZe60066mRmnd%2BeJXN6mThXRIWPMH%2FUn%2BNdGgxLmTUKrIsmYzWa0Gg8lkN4P41WCzUcXkofbu2oTf3cjSZdpuokXRuGOyi1dx22KswGZWhYd5AffOIrF9jYxdh40sI74Et93MVivueDXr0gYPcG0ouF4DRIkAevQioLvExgPivyvuhO7qQJ5BQRgeLXS7XPrsKDMzI6PAajSaTPkuq9WRKzu46XwOzWzPRJNH7%2BG7krl7%2BOC8ePqbjJDCRIiEfKFykdziVfBd8q%2Bke9n%2B%2BuvnTGL7vy529F437Xwso%2FdL097ZwvbVXz9jOnlw3rz12%2BLfSS1Lh1%2B%2FurZpy%2BF4kfhtxYuQjGCut1tMFxHAq6vrscoOoatQFU0Xx29SyV%2FXLRG8TS0ierkyof%2BZtWWXEPbn7boC9dce3JHE5yf0pzhpostXLJYMcLnSvcYhMa9mp0Nidu8vu%2FxUrvPeVQMOCCQs6MzrxGVT5986ecr8W6dQmX3ELvzxh7swGyl%2FI6Xt6%2F70Qnv7mhfYKbbnQTS8jE7s8wA7B4LrOep1cC1ckMMn1Hl%2BRVFNlKpZmqrlcuQEq9U9hBOEwa5mQEaKzBKmSBWoSQVlTvPepDFCnPndRKFJtuemosq2GZrG9p%2FtaZv8wfaPbt58TGf7vePdSx%2Fwsv5K9SPtbB87%2FT%2Fs7H10mU722JDgM67pTN1euaIq8dIsyh%2BTpOUZ%2Bfg6PcNnz%2FZanE5V4I0FhsQsv8m6iSfIBUmS5S2dL8HBXl8ook%2BLIkFBaLdMkafPPzxZ2v7R5zsmPXeFIQMJ22e1lq48uri9oOMZ9uLa9lNYiho3Z9%2B6xqU%2FbcBDAybXN3ZFFJ3LddVEh0mcejw5BCxZZVnUS7wGFxqlMrTMRy%2BJIqpdWewrCD%2B6iu3%2Fsre97yvSbCP7xLR8SXyH1LKxZTYkqp%2F1XIZ4dpmjpLktAEU5bnchWNw5lhxTli9rcMynUdPgGPX%2BvJ2%2F2BgiqPTHK2HB5clePsGgXCkPt082oetPnbx1%2FbDrDtW395oycuG8yJd%2F3%2FXu6MZHa5Zcv2zRrf2wZn1HILfzsvKx%2Bb0rCstHz73%2B8VXN%2F8y%2F%2FJriK%2FqHR%2F%2B30LeE6xuRa8AjToRYDHa7y2UyEIfB4fWZnHbn4JjVYrfL3HVyQt3QpktOVnRhgnBcxKOXvoLpIyFPwCO6cjK3bsas9tdeeHRt8xasYDuu%2BTD4aeiNN0jGwgknTn4e%2F%2FyqK4UOT%2FGc4zM%2BcENZ1E8cDrfby3t%2Fj9NoJ7JNtumyPcmJ1sVDgItr7tQYgH%2BgrxdrpR2zt72PpSLjsXRp7XUHt5Mj8dki4Ynt%2FEpI9JkPcrlm6BV1m0GWiYgIK0G0GNEuC5llKWndDU1X%2Fx0SbTfiOtaElf%2FINyryZYexkjVJLfFF86aMXUzaumS4AZRtXEaWOMsoSyaOIVng81ETVTMyMjNzVEXJ9plMVLbbMxQ7yDqidR3RdPz2LIDSIO1WQ8wBsin%2FpGskRZpuUfew19lm7LMwJ1eRcrT7sG6R5NCsqBgvN92NPdk7uARPdt4vtTDH4m9q1lxH%2FPGvvE03jMkcer4XnuKKI5gApOW6bWqi%2BYoMaKSUSAQlGWWzQVWtfIZmMSoUAA1mj4T2S2cBqaROkYZeq3KlhdkClOu%2FmD2BI48cxZHsMWxja46fYO2kPwmyZ7A1fiy%2BDRewhcJLzK17ycs1KTC73ZrXK0koahm%2FJgob%2FpNT8no0p9XJMTHDAFyVskQJkKKvhBlTUzxHyokifvTqgNsSaw9mmBRz7n4cwoqu%2BvcfR9RErqqfl%2Bfkfr2%2FYcZNo8ic866XXnR8Z72xNZI450HXce2MIn%2BoKqkIYDYgmvQhAm8c7YR%2FMwyOoefSIULSSMJGySlCWEwR6LrOB4nC0uhAZiCmDrLp6%2B3xekDI4T38Id7D54ipCHUbcnIcfn%2BuNTMzIFGXy8qjKd9qSbTzYosp2hbbF7bnuBrm%2BREWRw08Coc18VTQ4xFQ6%2BEJhDmL2m6%2Fc%2FOZG4cpn31T3XpmM9quH32qucGAVz7Z9jEdXMUObcyzBF8xskNVg%2BknbU8BIO5gJWSlYgMK7tcIpZJMAaCyhONDYlbqCOKOo0cV29lA1ylOauB7yBN7yOHlOmgGQ75bkoI52TabW3Z7qCzl%2F3%2F2IIuHzuFynuSi2BZnlftyiBSnzxyCyzwcrImh4e0Xbhz2%2B9mfKtWtL7xTP39x26LeM2aFPyFVQ7CnuWmyw5K3EXsOrqIfh2dPY5tNjY2nGm7QTxGQIqmCtoEHIlG%2FAg4zmKnd7qNeu82mSJSaHQ5QoCRU1lYi9ElBdqqp5pwa1sv%2FRAMmELwQB0baym968pqFwxaOC99ePv7pgf89chFZcXX5l1NzcyPRii%2Bnphf8lzhBwpbiQanl0rP6Dg26zurbad4v56mukCugE0Wi7Vh7JsTasSV5lIO0dJbKBcljHAhLOdJqfN6cwad7QYchPV3OyCA%2Bn4mYMrPSXCNiBtuIGMiGNH4pGWmKygXqpwH4S8%2BePzvOII575nOCTh4R15lS69q26gmSEBt94OCr7YtF6z7vlm8b7mpdcN%2BrL%2FfHcyhjZk77c8arjmflv%2FBn9kZObzbAuFFEB4A0ST%2Bd2BztZXeaidFqTfd6iV%2FzO51ado7Fn%2BavjxnT0sDFqcleG3P6QR7xs%2BNNXUfUIJTSVqjbjT%2BpBpRfbpXXFSKawsFwiBuQbNyyZcyzs2sbcS679w9k3%2Fmvbhr%2B6qufy7sbvojGrt10dOm6WtZ5ttes1keObtl5BAjMBCYFpHXcnkW8R87TLC6j7EsnBrDZ8jIhM%2FOyYp9LSycWo2xQPZ4ctYBHz%2FYyHc11H2qb9S%2BiA4oURXyC3SM%2B0WGqPrVIoJJaFCmMXFRdbixfuGzBqEk3j1qwfGE43Pbogt%2BNn93Y9siC8v1T6%2BqnzxxRO50cnPC7BcsWhCMLly6MTZs8uu2RtlBo%2FiNtYyYOnz6ttm7aDBHpCoDEp%2BPghZnR%2F7I53U6Plce2UaYyMYkJqxeRED%2FHBp%2FidDkbYkCRuuwmm93WEFPtdgt6FMsl5xX9mtiW3kNfypcpEhAfkgPKkCfoEXdAGF7cGCBD0YAVbOGWH374gX38448%2FvsOW4BViZBv3vHrfq8eO8RdyHMhFiKNCMGoniiKGmUaJSlTVsUcEbCpFdAhyJGBIAFHnAbag8wAAgUm89lnw%2F0o5D7g2jvTvPzOzu9KCJNSFaAKEBMYHAokSuQpiY04OODjYsWxCcjbkNaluuPdyiXuaS0jHpPfeE0N68fVO%2FObSe%2B8uy39mVlqEzr76oeyi%2BbG7U3bK83yfkUZBGZwCMyKlaRaXRRTLC6E4JyfkAld4DKmpsbkrK0ttpSafxzc15nHqTVNjepQycUvmivi5NiuyMYtA0qyNo3NOVr9OFfZJmt75WUW7VMhOWtE4fsubj9zRP33SzuaW6LxFB3rWTJj4xSuvXdHyYsOAb%2Fbpj257c%2BOS5s4tvmrim7appHXPputbn8kPlVdURssit194%2FxklXdGr7p3261Hh7uKKUGH0uu2nzi8Pxya1V5qmAUYu4UfygiRwVi0%2FYrQaWIvIdGcQ4pBB7dzU9snCdpLZJF%2FSOXJNjdRPPa0uMhVd2TKurqk5Mq5FXFPXEB0%2F7ucNExvqGieOb6wDIIw7lSbR99oBPqhmvm9ikm0mm7%2Fc7yzPc%2BbV1IrpYEmnX1mlhbZglpActKMVbEo36zBrHWyifBGnSASrw44ZvIhr6bwgFCxiuH4R45HIul%2Bc91p4c3j55tf%2FfvilPddGFx5b8zJqf5X9DCi9v%2Fm10vvcrj6U09uHsg%2F0Ke%2F29invHSBfX7VJ%2BTAv99nwkcNvfNd82xjlI%2F4%2FSu%2BrLyi3%2FObXaPaLTJb0b6xlBfCX%2BDHKMLqgAOoieZk65HLlmXXU56PLK%2FRmGI2e9HQbys4GEGweShSEA0F1mAtak3BQbR1SPGxVVo3K6irbp3YM1ToJV3pGr452r7n58XnrWi6tr79h3tY9yqTy%2FKbYvMvxsYvGRLrPu%2FBCWegef0l%2BcNcmpeGP%2FqIz6oqkNPas06Fd6BEEkMAIbZHRaUaDTKd2RMKCgERqGDdkGNkrBpBGCE4XBIMoIpOMsR4lWko4kLBqJI%2BK5j8Faab66Q897w8yR4ALIR3yqYfpaPGg8hFyDSo70RG06A12%2FoayC49HL1E%2Fs9K3DL2QNXzKGb8fhTCZCCJkRZgzSkcQkogAAdYJoQTf6LXQWZQQHjx2hLz1I7pgEIaGErEHWAIzAAhaezTEW%2BS5kUqBYFHUgcViJEbamxB9uT%2FROLFE8QLBIegdsp5%2BnaSN8spKbara53ErgY4FlFnoIwadmhP5X7VaYcvuz5QHAu8h%2FcO3K%2Bs89eFTJuceP%2Bdft9utd0xUFqDpyj3kqh3K1%2BH6uhrlzX%2FZctHQEckuSNLhJG8MjPTGCNLRbwWDZH%2BFr%2F6Jm7D5hAmyIDMiQ0ZGTrbVkMkqRQ3FUq17vL06HSowmDyctbXd2N5201ln3XjW5a88G6uvnz2nLjJHWMg%2B7W0766bZL10emd02YWJ7G%2BNFAYSwiCGdcx%2BZGTqdRB35BoSomd9sMRrSZYQkAYOKeoYC8S5MM5WnxriwyfZwnAs9I2%2Fh3kG0RVlFY12UNylYiiCAo%2FgZTriVRKwOA5LAgiyuTNnkwQ4Hyucer4lJXb96j39EPHUF%2BJnjK%2F5%2BbriipGXeqiuf3np9%2B4YudA6O3jbYEQv6S2bt37Cle8be7rMBwVgcxo%2BIr4APJkRy7enY7QbIl%2FLTzVK65C8mdrvDIed4PSa5IIE5pbQ8dlABTRX6S6xu1DgHrezj3QjuuaN9%2Fn1P7N541ards5oXtJ3REgwFWsOdE%2Fb9v3W9wlu7a432i6at2N7wzOzzq6tvrAr76ePuDExYn%2BqLI0JEDyCnCdwXdyjui3uFjR%2FVNMjMIUk6ao6YiGZWHZ0i%2FDX75U5H1aEgAOK2LmrkhkxmMUmXJFnOsjrBQR%2FdrXNlOGl7yiCq4Y2Z%2BzTTkbYwT8qwtv73xo0CxS6XhZtDZ7WvpVaAD0ZnlC6fNWF%2Bvigy%2Byj67YoVdz%2FPrAF7Z8wo%2F9mM65SDUhQQLFSOCbslO2RAIOJINwsiAoTMFr0emUykKWYSWc8XiHtk4gMlbe5qgAb7UsMIa0IFwu6bbumd0PqX1%2F72IW5Tjkmn%2F3QfCVmPHEWCwiKd8Cj0e7KGEUURmUU6Ebk1RiCQCHSypSLhfEr%2F%2B2Eqe2hQsaNeALBCVcRlNjI7Fh1Y7Gaz0W60ySYW9pXNXt9QQI0EXB1%2F3PjAIiZPQYprQ3RWgnr3Xd88KXuOu%2FGW5v7s6Kwj6xc5btOZJpzh7hmf2cktXDiKGxPRSYI8MjopD%2BWfMDoJeePRSb4QbvyciNkVzReismdxFD2z4Oyi0vHr6MwOwnTUfEt8ic9KPBFjIvYqgzhkDw%2FxTGK3kxc9YlKPgt969IarH3%2FwwP4nFG9dY%2BPEiY2NdULbnf0v3Hr7wAu3dHR2dnTMm5cy6s2OlKZTy49OL2AW1Ib01FNiGh70BD7YIdHEB79%2FOej1B9UBL%2B6NL0aoFonqQehRdg4ip%2FLxIFqsSMPn2KuMXYbaUNsyJZw1fMrGrnIA6Qpa2n5Y%2BTuAYvg1fgUA6eAP5Nrjj4L8IMFW%2BuJUVye0D51Au5h8T7W6B7CZSZlyNlXeJ75ClUs8XEnM8as%2BEb9qmXpVwDBeWUH%2BLLTzNU5DpKiQug4YJk0jh0pMoyDbnI1lQp0JPk9rzJdhoRy8xZvKwaN4g9Cm5HHsnddbrUub3bCVWHLF4ldiF1wYPjM27aFzzp37w3lvHP3F7rOrUcnw6jY6d1dT86yJ4eiY0sOnTO6%2F%2FYLru%2Bj0cyyamXhHhoZU2lu3GPuhiOexHiQ0HfQPYqfoh9HVJ1B0w2%2F%2FheIgzFQV2SMV52iKgYTCOlIxU1N0cUXaQwR7uWRYkxbXSNDfPYvXhpfEa4MpdD7OPtrg4sg4yUbMNmIRLCjNZEJsvgbgEETRbiYUvqb4syENGQkj%2FJFkkzkxTAQrMmlscsKiQLvUAAeUNb8G7yQ062PCs0QKkEYsI9rR6nzH9imOvcoLeLew9%2FghbKIUT%2BhoLlq5jiPvcYqZDnXNrC6WKXZGjNP8%2BVlGYAXOBfY556p5%2BZaodTT0KC89ZE%2BUXqqiG9pSFPdShT1JcXDoO1XhHnmNmZqia%2BgnXgMYFag1wGbucZ7cAJnQGCmivUCW3ep0GlBamtthAIqVWwGovcRJi9eKLYy8TgmP0%2BBgddahWmkscQqUlpiPo4MhBwPPA1tV5FzFz7cKwm9%2Bd%2BCzzzahATIdd1Du%2FG5GoOPWnR9%2BofQoyl1qHsRXeDuriLez36eUA%2BdUeTlUxtt7N1fgvJMpulHDv1AchOdUhXek4hxNMZBQZI1UzNQUXVzB2vvoeGkj2IAMglnogXTIjaRLBGTZYORGZXcgqMUn8260FqnLBlSM7lL%2BuB%2BVocqr6Rhetkf5tfL7vfj3qKxH%2BSMavZf%2B%2BVuaSiUAhD7DLeIHkgA2yIZCCEdyXJ4cuz0tB9LAW%2BTMK3Ab3QxXJQWpdOWImbyK8arGGFaJqpEG2V2IO%2FyqihEFV1Wm94Xts3tnv8iA1RevaL1x1sDRP56CjrR2UWL1%2FZBiOG0%2BWqzyvXWXXHDpANrEwNWGNfM3DSi%2FfHYJ%2Frbsp%2B8e6j5uKR4aUmlIXgO18Vocrdaz1uOkKrqR6V8oDkKPqsgfqZipKbq4gr0RJcl9kqDwq4yNv3kb1KtYuCSJSmbrqZpIDiOjjbIoSpJTMDbFZEdTTJAFWdIRyZowKGrdjOZBjePIDroW0tZGwh2UUz1yNcPaH1CQ4fikjst3rbt0NcHv%2FagMUij5c2Vc18rz5%2FNZJM3JfMkD1dAaGU3tegXFxQDlWSZTbXkgUGPKKtBBcbEui2SWhkqnxEIQcFgyozFLwnGq7ZUx0g03TH%2FaTYLqcnOkuuX8iaFL8zhXsVAn4a3SSDRSWl1%2FRVfoo3fmXTau%2BubIbfnTo2vnNjQ0TVjXsWQjbb4%2BhL9FfuGvkV%2BcNqai1JldVTJn7srmu%2B7JLfy6KLhqVGhcaeOylsh5lbWnl49r6TrnKPVMv%2FLO%2FazH5ASbVEBr5VQ%2BUtQfAPb2jbbEazY1vfvCE6Xna%2BkHfxhi6RUj001a%2BkAasPTikemClt4lAX%2B3T%2BGCYcUDmqJ%2FlKrwqwogTCEpQjeUQBBOgS2RydU1JDM%2FP2g3GoNBuabG7%2FGMKZPlsC%2FfW50fjVVXsyDp7OxQNJZtNo6aSoF3p%2BS0NFDHPHgbYiBJgQZGv%2FERLZmZ0t5q6wkJKnqMhzBz8MufZG0ZXsZRzHYYrWJk1TDShwoZfiVWbn2rce4L19%2F03NdfPRtr2nHzvKc%2Femdx%2Fd3LDyM4XkaJq%2Bcfm%2FbY8bqFq1fv6FyOvX%2B1oHvwefbOru7Y0zcz5q91cn3Tq52bInXKZx9RCGvWp8UlOEsQzpxD6T%2F05acLVrNap952xtZhP0xWx0%2B0iY%2BfnCrjtT1FbQ2389oqStRWanr34n%2BeflDP00eNTBe09C6rWpeVidoeugYAvcGv8LTaXynTgF0DGRLXuBwA%2Fy5J0T00eaRi6JdU8UmS4qDyuqqwJBTvUMXlkqApuriC9Vdu9UkSBIfk5fPVpZGx4MYuV46oJ%2BkEY0tOTnr6qEKLpcQNmZh%2BSJ2ImdjppB56CnnSKS02%2BRpiJifBU2MEnYC8izsQ2clwI9I%2B1YYLf3Gtkw8SVgdtm4XAwyNdtX46hDAvXCL2GCmnN3ZetuitjjuuvUr5%2F0PfKX9DwuFDDfpT17zfga0rz19x8fIFq84TXdXF99Wdtr1n%2Fm5lz4fKh8pLyPrJR8gyV%2Bhdtuva4%2FMv2Lj1ih27%2Blg74MwMf2tPV9%2FaEPAZUHI97ucl3KK2k5t4PReeOJ319ZfAyRW8pRiS%2BgUt3aSlD6jpeSPTBS29y6C2pIDWK8yCw0JYeIl7wbKhNGJ1pqWZBQEIyYUcNwVKAXHz0vPBYdBQiw8WTxJRTWOGj2%2BK1tf%2FPFpXNzVaf2ojO%2BKOwcEvTpva%2FPOG6c1EmNrUMqWhpRkIfcaHKAN0OZ81eEfOGnzxWQOjb0jBFAZx%2FC%2BzhmCNsJ9hQWsvOLVn0n5GBm1eUrt%2FzK5jR21o%2FOiJKy9AhwzKa%2F6alefjSoYJlXV2dVyL7IwUqpp%2BQes1ytH2RjTouvnWlnFKMOP2oSGVpeD1c2ZST4ByefGmpvMavgVOruA1XMnTC0emC1p6V0B9A0u1np977PkV5qi9zXh%2BBQ8XJOgmziYWsLhqD%2B1vHQZzli2Dxi8VWsCcbXDIRM6dEpOdxEnL%2BCQocxLLTDtnDWdWTT4Wyh0nAU7ot8Herhf%2F%2FuZLf5xv0ulUfvGjOONEDrXMYEgzK%2BCtE9qVsXpQVixvbB7mnLQ8CVqeut5Qc%2F0zNdcJKk9oH6byMk5M5VGJGk2mO108BE7wQmekxuJwGFF%2Bvs6WAeDL0umKLHa6drMgI7HQX0YznaWSNBddcwhCLotpRQ5tBcd%2BThplmiAy%2BBMMx2M6XcOLuERnVGvx%2B3WnH9vn31Wm9Cv3oTPQhPGbvaRDW9Q9dstdd%2FXVrfR7t8jpaBvqQuejTSZZXeCR145%2B8%2B1PDivZbnPyN%2BhT3SphMXhgNARhQWRMoMKEHQ6%2FX19RkWu3V%2BXr9aEchzvgiMYCATCbfxaNmc3YJNDOmfLEZnDT4VwQvFNiQupwHj45Cp00iOdT56kG4bniI7dDo6KTeT2fSk%2BLtyhf7dl5pPfHLSgb4QUvT7nsi2%2BR%2BbhTt2fL%2BU90tDx99FwN5Pu4fbWMBnC3%2FZprdiD9%2FciByqY1XcvYaf26naXlbOCeHGf7BhavuJhFHD0h%2FFXwSAVgZP0Zi5ozAMh6jE0ZWF4vsh39sg5pyx2NKqQzEZ2XGU%2BdFNAgrdc1Ne977elTUafn6kbhr2ed0XJ29tMLqh5sYBENqFX4M4lKD8Q9ehmS1eqmkUWyR8ay7CDxvRTYHVKNZ7qk8YhEdy1YcOklCy%2B67Pqa0tKaiorSGvGlCzavv%2BiCDZu7ykKhsrKqKkDwa%2BHPgkEygQuqIm4KNEUEQjLdBhvobPTrYvM6MzavFyCQ9fpZmoNENQebXw6qkISXvbF5mNVHiE23yjF6xRM27knfvXTUtKZoET%2B%2FfAk7F%2Buray7vKyjOr%2BKHAr4bGHqI3IN7%2BG5S%2BAS7SU0nbeih999Xlbp%2FqtQllG7Sj%2Fp4jIw7kiaIOqTTySBou5KZB5gLq7jGWhvCumKTs7N6sN5L%2Bp1zkG2h8t3HkHQFCVwRmQhIknSCRC8wvD8WUrffQHtNwbWDkz3iI84XlPdRySFI3luLeVIwEfnuWhIEtNuffHstwOzeZBl%2F%2BgzwRczUIGsiggSSZNFlkHRtI0Z%2BoT8E%2BbOoWSnwxY%2FoUzVPdILhSZyRP8ezp2Vz%2BE4SGJn%2FndpNDXwrMFMaMYjsRi%2BqN9Luoz60qB5QH885cqO31JNM8Ua1DBJFgVlJkOt5SRihMGIaeQcIpN7Ap91gROGgt0eWkkvbi2wunXrfKIyCdLA9wszuRplAgHssUq3uc6%2FavnXvvku37cGf9hzou3r%2FLbcAELbTizQXhfm75mXsYF6m6kEvys4gbKuXAofMQuS5LUhtbJnmP9AJy8gdX3yp56m7v%2BAps89kZzPacGPqPmctKUf%2BVkA7vpHbtCsijrgDV9RLQAg9pa0JI9VZmsxW0W%2FVN5vqlE12xKZeO24nRzp2bfoHPRPEf7z2SBs4vvHEBm8ApCxj83oe25YVSSeAEcaCFtqW8B8j5EX48mN%2F%2FIKMjge2AeK7BW0S%2B6EYdkQaJaL3%2BXI8RW5ntmywWIrSafaLika5cnP12dklBpdLzpRy83Knx0heRt66PJxOMvMy82yFPiiEabFCndlkMzXHbNp2YiNNoxZenyxzKUghO%2FCtQOhvro%2FH5DgKdA420DrVfS4oWELdb%2F7qWvq7BuL7XXhXXu9CVyrtGKN5yj0hZNq9ecn93ynPj9q6VMBLtvjQpG%2Be6ps7ebnwys5f3ucNFDzwTXgIxqK0Tx5wFVff9zVyT%2F%2FQ4%2BXsWgfzjp%2B0n6MTYDbdHRriMbs%2FSh7wQyNfQ04lboD45x8nfd7MPgcMBhzF34tPQRpYGbthFXUmWnBEBixim90k62TJikTRaiW6PJLPDTwBLSYu4RpNwn%2B8DhpfWI1CfA%2BzWrZnHP5%2BzefKBrTh0zXKHkmuzliH39q3rwfXHT%2FUN3Nu1gWuZ9Wn05u0pyuGRuJWn14KAMTT4QTpzcPp0q6k3PF0dS8BvtMDAcsjIIiIQGKXQLYPAt8FgTU2uvZ8EQDruB3sL%2FEV7krVDmZIWNNupYoPkxTdQ3NGKoYYgS4mKQ4q76sKS0JxHADfqZupKbq4gq9wuaT6%2FwCVeR0IAAAAAQAAAAEZmiehT9dfDzz1AAkIAAAAAADJQhegAAAAAMnoSqH7DP2oCo0IjQABAAkAAgAAAAAAAHgBY2BkYODo%2FbuCgYGr9zfPv0quXqAIKrgJAJZXBsIAeAFtkQOsGEEQhv%2Fbnd272rZtG0Ft27ZtW1G9dYMiamrbZlgrqN17M89K8uVfTna%2FoRs4AwCUGVBCU0zQl7DAlEIZWoPOfhXUs0BbVQAL1CG0ZepQd9STPdUW9dQ61FGN%2BU5LpOW1pswUpmU0hZj%2BTGOmWnQ2lPNyV2rEoO%2FA%2BmUw0CwATG8cNjkwyXzEYZrG9Of5NUyy%2BXBY7Q4Hm9a8tgCH%2FWU4bOcwPfmsjc7GvDcYPWk7StjU2G8qAf5xwHQE6D%2BzHRXUbqzi96bmrEQNEeim4V965jWnB%2Bho0sNRHnTn7E5H0V3nQAlaAGsawqkxWKfGhDPoO2Ts%2FGdwsk5fIecd011vh9O%2FOaegHO9toBWAfYLM5JBSxvoNquliyEeDvUucbeXvMd55vIqRtTGMJTnzAkP5bdnsXvTX6VGOPkbfYe%2ByRgh%2F6xHoLms6QDmmlvyFPThTB2PEtbczfMbr3XUu1JD7fmqUjaYre68jzpPD3wJIH6QH0RyQ5L6Ui%2FGeGFqDOZLiPj7iXnpkDsKJ5%2BTwO3LmEe8JYecb2fcazoXMC%2FEd4z0J7EFS3MdH3EuPJJX07gom%2Bff4%2FDMcpS1ee85bBLQNGO84cgiqPerpVcghUBEeK%2FS1jzBBfUZbwUv5X%2F7bkOlslqCEwJ5TBw4lBFsBJdRuHA4vYk%2Fown8RLYvLrQAAeAEc0jWMJFcQxvFnto%2F5LjEvHrdbmh2Kji9aPL4839TcKPNAa6mlZUyOmZk6lzbPJ3bo56%2F%2FCz%2BVaqqrat5rY8x7xnzxl3nvo%2B27jFnz8c%2FmI9Nmh2XBdMsilrBitsnD9rI8aiN5DI%2FjSftC9mIf9pMfIB4kHiI%2BhWfQY5aPAYYYYYwpcyfpMMX0aZzBWZzDeVygchGXcBlX8ApexWt4HW%2FgLbzNbnfwLt7DJ%2Fp0TX4%2BUucji1hCnY%2FU%2BcijVB7D46jzkb3Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhhjytxJOkwxfRpncBbncB4XqFzEJVzGFbyCV%2FEaXscbeAtvs9sdvIv3cjmftWavuWs2mg6byt3ooIsFOyx77Kos2kiWsIK%2FUVPDOjawiQmO4CgdxnAcJzClz2PVbNKsy2ZzvoncjQ66qE2kNpHaRJawgr9RU8M6NrCJCY6gNpFjOI4TmNIn36TNfGSH5RrssKtyN%2B59b410iF0sUFO0l2UJtY%2F8jU9rWMcGNjHBEUypf0z8mm7vZLvZaC%2FLzdhmV2XBvpBF25IlLJOvEFfRI%2BNjgCFGGGNK5Rs6Z7Ij%2F45yNzro4m9Ywzo2sIkJjuBj2ZnvLDdjGxntLLWzLGGZfIW4ih4ZHwMMMcIYUyq1s8xkl97bH0y3JkZyM36j%2F%2B58rvTQxwBDjDDGNzyVyX35Ccjd6KCLv2EN69jAJiY4go%2Flfr05F%2BUa7CCzGx10sYA9tiWLxCWs2BfyN%2BIa1rGBTUxwBEfpMIbjOIEpfdjHvGaTd9LJb0duRp2S1O1I3Y4sYZl8hbiKHhkfAwwxwhhTKt%2FQOZPfmY3%2F%2FSs3Y5tNpTpL9ZQeGR8DDDHCGN%2FwbCbdfHO5GbW51OZSm8sSlslXiKvokfExwBAjjDGlUpvLTBY0K5KbiDcT672SbXZY6k7lbnTQxQI1h%2B1FeZTKY3gcT2KvTWUf9pMZIB4kHiI%2BxcQzxGfpfA7P4wW8yG4eT%2FkYYIgRxvgb9TWsYwObmOAITlI%2Fxf7TOIOzOIfzuEDlIi7hMq7gFbyK1%2FA63sBbeJtvdwfv4j28zyaP8QmVL%2FimL%2FENJ5PJHt3RqtyMbbYlPfQxwBAjjPEN9ZksqkMqN6PuV7bZy7LDtuRudNDFwzx1FI%2FhcTzJp73Yh%2F3kB4gHiYeIT%2BEZ9JjlY4AhRhjjb1TWsI4NbGKCIzjJlCmcxhmcxTmcxwVcxCVcxhW8glfxGl7HG3gLbzPxDt7Fe%2FgY%2F%2Begvq0YCAEoCNa1n%2BKVyTUl3Q0uIhoe%2B3DnRfV7nXGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOMc5zjHOc5xjnOc4xznOMc5znGOc5zjHOc4xznOcY5znOM8XZouTZemS1OAKcAUYAowBZgCTAHm3x31O7p3vNf5c1iXeBkEAQDFcbsJX0IqFBwK7tyEgkPC3R0K7hrXzsIhePPK%2F7c77jPM1yxSPua0WmuDzNcuNmuLtmq7sbyfsUu7De%2Fxu9fvvvDNfN3ioN9j5pq0ximd1hmd1TmlX7iky7qiq7qmG3pgXYd6pMd6oqd6pud6oZd6pdd6p%2Ff6oI%2F6pC%2FKSxvf9F0%2F1LFl1naRcwwzrAu7AHNarbW6oEu6rCu6qmu6ob9Y7xu%2BkbfHH1ZopCk25RVrhXKn4LCO6KiOGfvpd%2BR3is15xXmVWKGRptgaysQKpUwc1hEdVcpEysTI7xTbKHMcKzTSFDtCmVihkab4z0FdI0QQBAEUbRz6XLh3Lc7VcI%2FWN54IuxXFS97oH58%2BMBoclE1usbHHW77wlW985wcHHHLEMSecsUuPXMNRqfzib3pcllj5xd%2B0lSVW5nNIL3nF6389h%2BY5NG3Thja0oQ1taEMb2tCGNrQn%2BQwjrcwxM93gJre4Y89mvsdb3vGeD3zkE5%2F5wle%2B8Z0fHHDIEceccMaOX67wNz3747gObCQAQhCKdjlRzBVD5be7rwAmfOMQsUvPLj279OzSYBks49Ibl97In%2FHCuNDGO%2BNOW6qlWqqlWqqlWqqlWqqYUkwpphTzifnEfII92IM92IM92IM92IM92IM92I%2FD4%2FA4PA6Pw%2BPwODwOj8M%2Ff7kaaDXQyt7K3mqglcCVwNVAq4FWA60GWglZCVkJWQlZCVkJWQlZDbQyqhpoNdAPh3NAwCAAwwDM%2B7b2sg8kCjIO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO4zAO47AO67AO67AO67AO67AO67AO67AO67AO67AO67AO67AO63AO53AO53AO53AO53AO53AO53AO53AO53AO53AO53AO5xCHOMQhDnGIQxziEIc4xCEOcYhDHOIQhzjEIQ5xiEMd6lCHOtShDnWoQx3qUIc61KEOdahDHepQhzrUoQ6%2Fh%2BP6RpIjiKEoyOPvCARUoK9LctP5ZqXTop7q%2F6H%2F0H%2B4P9yfPz82bdm2Y9ee%2FT355bS3%2FdivDW9reFtDb4beDL0ZejP0ZujN0JuhN0Nvht4MvRl6M%2FRm6M3w1of3PVnJSlaykpWsZCUrWclKVrKSlaxkJStZySpWsYpVrGIVq1jFKlaxilWsYhWrWMUqVrGa1axmNatZzWpWs5rVrGY1q1nNalazmtWsYQ1rWMMa1rCGNaxhDWtYwxrWsIY1rGENa1nLWtaylrWsZS1rWcta1rKWtaxlLWtZyzrWsY51rGMd61jHOtaxjnWsYx3rWMc61rEeTf1o6kdTP%2F84rpMqCKAYhmH8Cfy2JjuLCPiYPDH1Y%2BrH1I%2BpH1M%2Fpn5M%2FZh6FEZhFEZhFEZhFEZhFEZhFFZhFVZhFVZhFVZhFVZhFVbhFE7hFE7hFE7hFE7hFE7hFCKgCChPHQFlc7I52ZxsTgQUAUVAEVAEFAFFQBFQBBQBRUARUAQUAUVAEVAEFAFFQBFQti5bl63L1mXrsnXZuggoAoqAIqAIKAKKgCKgCCgCioAioAgoAoqAIqAIKAKKgCKgCCgCyt5GQBFQBPTlwD7OEIaBKAxSOrmJVZa2TsJcwJ6r0%2F%2B9sBOGnTDshOF%2BDndyXG7k7vfh9%2Bn35fft978Thp2wKuqqqKtarmq58cYbb7zzzjvvfPDBBx988sknn3zxxRdfPHnyVPip8FPhp8JPhZ8KP78czLdxBDAMAMFc%2FbdAk4AERoMS5CpQOW82uWyPHexkJzvZyU52spOd7GQnu9jFLnaxi13sYhe72MVudrOb3exmN7vZzW52s8EGG2ywwQYbbLDBBnvZy172spe97GUve9nLJptssskmm2yyySabbLHFFltsscUWW2yxxX6%2B7P%2BrH%2Fqtf6%2B2Z3u2Z3u2Z3u2Z3u2Z3s%2BO66jKoYBGASA%2FiUFeLO2tqfgvhIgVkOshvj%2F8f%2FjF8VqiL8dqyG%2Bd4klllhiiSWWWGKJJY444ogjjjjiiCOO%2BPua0gPv7paRAHgBLcEDlNxQAADArI3Ydv7Vtm3btm3btm3btm3bD7VvBoIgLXVVqCf0ztXT9dzd3j3cvcX90CN5Snmae%2Fp45np2e356gbeH94HP8Q3x3feH%2FX38NwJwoHigQ2Ba4GBQCK4NfgxVDE0OnQr7w1nCI8P7wi8jdqR4ZGzkRDQSLRmdH%2F0UqxTrEVsbux%2FPHe8b3xh%2FlgglzESJRJfE6MS6ZChZJzkj%2BRouCA9GJKQuMhI5hsZRHR2A7kZ%2FYZWxldhtPDPeFd%2BIPybyE0OIy2SIrEy2IneSX8mvFKB6UpfodPQYeiOTjmnK3GOzsCPYpexaLjdXiRvBHeJ%2B8BX5Lvxe%2FqOACmWEnsJ60SsyYjqxiLhE3CoeE6%2BLL8RvUlRqJXWThkszpJXSbjkq83JaOZ9cXm4gd5IXKZACK4qSSSmiVFWmq0lVUtOr%2BdXyagO1oxbRSM3UsmnFtOpaC62nNkqbo7M60HPppfXaemu9j77X4IwUI49RxqhrtDWOGzeM92Y985lFWWWtcdZia4d10%2FpiU3YZu6%2B91j7rME5xp5szGVAgDcgBioDhYDpYDjaDE%2BAmeAW%2Bp8R%2FA5ajfCcAAAABAAAA3QCKABYAWAAFAAIAEAAvAFwAAAEAAQsAAwABeAF9jgNuRAEYhL%2FaDGoc4DluVNtug5pr8xh7jj3jTpK18pszwBDP9NHTP0IPs1DOexlmtpz3sc9iOe9nmddyPsA8%2BXI%2BqI1COZ%2FkliIXhPkiyDo3vCnG2CaEn0%2B2lH%2BgmfIvotowZa3769ULZST4K%2BcujqTb%2Fj36S4w%2FQmgDF0tWvalemNWLX%2BKSMBvYkhQSLG2FZR%2BafmERIsqPpn7%2ByvxjfMlsTjlihz3OuZE38bTtlAAa%2FTAFAHgBbMEDjJYBAADQ9%2F3nu2zbtm3b5p9t17JdQ7Zt21zmvGXXvJrZe0LA37Cw%2F3lDEBISIVKUaDFixYmXIJHEkkgqmeRSSCmV1NJIK530Msgok8yyyCqb7HLIKZfc8sgrn%2FwKKKiwIooqprgSSiqltDLKKqe8CiqqpLIqqqqmuhpqqqW2Ouqqp74GGmqksSaaaqa5FlpqpbU22mqnvQ466qSzLrrqprs9NpthprNWeWeWReZba6ctQYR5QaTplvvhp4VWm%2BOyt75bZ5fffvljk71uum6fHnpaopfbervhlvfCHnngof36%2BGappx57oq%2BPPpurv34GGGSgwTYYYpihhhthlJFGG%2BODscYbZ4JJJjphoykmm2qaT7445ZkDDnrujRcOOeyY46444qirZtvtnPPOBFG%2BBtFBTBAbxAXxQYJC7rvjrnv%2FxpJXmpPDXpqXaWDg6MKZX5ZaVJycX5TK4lpalA8SdnMyMITSRjxp%2BaVFxaUFqUWZ%2BUVQQWMobcKUlgYAHQ14sAAAeAFFSzVCLEEQ7fpjH113V1ybGPd1KRyiibEhxt1vsj3ZngE9AIfgBmMR5fVk8qElsRjHOHAYW%2BQwyumxct4bKxXkWDEvx7JjdszQNAZcekzi9Zho8oV8NCbnIT%2FfEXNRJwqmlaemnQMbN8E1OE7Mzb%2FP%2F8xzKZrEMA2hl3rQATa0Uxs2bN%2B2f8M2AEpwj5yQBvklvJ3AqRcEaMKrWq%2F19eWakl7NsZbyJoNblqlZc7KywcRbRnBjc00FeF6%2Fenoi05EcG62tsXhkPcdk87BHVC%2BZXleUPrOsUHaUI2tb4y%2F8OwbsTEAJAA%3D%3D%29%20format%28%22woff%22%29%7D%2A%7Bbox%2Dsizing%3Aborder%2Dbox%7Dbody%7Bpadding%3A0%3Bmargin%3A0%3Bfont%2Dfamily%3A%22Open%20Sans%22%2C%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A16px%3Bline%2Dheight%3A1%2E5%3Bcolor%3A%23606c71%7Da%7Bcolor%3A%231e6bb8%3Btext%2Ddecoration%3Anone%7Da%3Ahover%7Btext%2Ddecoration%3Aunderline%7D%2Epage%2Dheader%7Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23159957%3Bbackground%2Dimage%3Alinear%2Dgradient%28120deg%2C%23155799%2C%23159957%29%3Bpadding%3A1%2E5rem%202rem%7D%2Eproject%2Dname%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A%2E1rem%3Bfont%2Dsize%3A2rem%7D%2Eproject%2Dtagline%7Bmargin%2Dbottom%3A2rem%3Bfont%2Dweight%3A400%3Bopacity%3A%2E7%3Bfont%2Dsize%3A1%2E5rem%7D%2Eproject%2Dauthor%2C%2Eproject%2Ddate%7Bfont%2Dweight%3A400%3Bopacity%3A%2E7%3Bfont%2Dsize%3A1%2E2rem%7D%40media%20screen%20and%20%28max%2Dwidth%3A%2042em%29%7B%2Epage%2Dheader%7Bpadding%3A1rem%7D%2Eproject%2Dname%7Bfont%2Dsize%3A1%2E75rem%7D%2Eproject%2Dtagline%7Bfont%2Dsize%3A1%2E2rem%7D%2Eproject%2Dauthor%2C%2Eproject%2Ddate%7Bfont%2Dsize%3A1rem%7D%7D%2Emain%2Dcontent%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emain%2Dcontent%20img%7Bmax%2Dwidth%3A100%25%7D%2Emain%2Dcontent%20h1%2C%2Emain%2Dcontent%20h2%2C%2Emain%2Dcontent%20h3%2C%2Emain%2Dcontent%20h4%2C%2Emain%2Dcontent%20h5%2C%2Emain%2Dcontent%20h6%7Bmargin%2Dtop%3A2rem%3Bmargin%2Dbottom%3A1rem%3Bfont%2Dweight%3A400%3Bcolor%3A%23159957%7D%2Emain%2Dcontent%20p%7Bmargin%2Dbottom%3A1em%7D%2Emain%2Dcontent%20code%7Bpadding%3A2px%204px%3Bfont%2Dfamily%3AConsolas%2C%22Liberation%20Mono%22%2CMenlo%2CCourier%2Cmonospace%3Bcolor%3A%23383e41%3Bbackground%2Dcolor%3A%23f3f6fa%3Bborder%2Dradius%3A%2E3rem%7D%2Emain%2Dcontent%20pre%7Bpadding%3A%2E8rem%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A1rem%3Bfont%3A1rem%20Consolas%2C%22Liberation%20Mono%22%2CMenlo%2CCourier%2Cmonospace%3Bcolor%3A%23567482%3Bword%2Dwrap%3Anormal%3Bbackground%2Dcolor%3A%23f3f6fa%3Bborder%3Asolid%201px%20%23dce6f0%3Bborder%2Dradius%3A%2E3rem%3Bline%2Dheight%3A1%2E45%3Boverflow%3Aauto%7D%2Emain%2Dcontent%20pre%3E%20code%7Bpadding%3A0%3Bmargin%3A0%3Bfont%2Dsize%3A1rem%3Bcolor%3A%23567482%3Bword%2Dbreak%3Anormal%3Bwhite%2Dspace%3Apre%3Bbackground%3Atransparent%3Bborder%3A0%7D%2Emain%2Dcontent%20pre%20code%2C%2Emain%2Dcontent%20pre%20tt%7Bdisplay%3Ainline%3Bpadding%3A0%3Bline%2Dheight%3Ainherit%3Bword%2Dwrap%3Anormal%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Emain%2Dcontent%20pre%20code%3Abefore%2C%2Emain%2Dcontent%20pre%20code%3Aafter%2C%2Emain%2Dcontent%20pre%20tt%3Abefore%2C%2Emain%2Dcontent%20pre%20tt%3Aafter%7Bcontent%3Anormal%7D%2Emain%2Dcontent%20ul%2C%2Emain%2Dcontent%20ol%7Bmargin%2Dtop%3A0%7D%2Emain%2Dcontent%20blockquote%7Bpadding%3A0%201rem%3Bmargin%2Dleft%3A0%3Bfont%2Dsize%3A1%2E2rem%3Bcolor%3A%23819198%3Bborder%2Dleft%3A%2E3rem%20solid%20%23dce6f0%7D%2Emain%2Dcontent%20blockquote%3E%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emain%2Dcontent%20blockquote%3E%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%2Emain%2Dcontent%20table%7Bwidth%3A100%25%3Boverflow%3Aauto%3Bword%2Dbreak%3Anormal%3Bword%2Dbreak%3Akeep%2Dall%3Bborder%2Dcollapse%3Acollapse%3Bborder%2Dspacing%3A0%3Bmargin%3A1rem%200%7D%2Emain%2Dcontent%20table%20th%7Bfont%2Dweight%3A700%3Bbackground%2Dcolor%3A%234CAF50%3Bcolor%3A%23fff%7D%2Emain%2Dcontent%20table%20th%2C%2Emain%2Dcontent%20table%20td%7Bpadding%3A%2E5rem%201rem%3Bborder%2Dbottom%3A1px%20solid%20%23e9ebec%3Btext%2Dalign%3Aleft%7D%2Emain%2Dcontent%20table%20tr%3Anth%2Dchild%28odd%29%7Bbackground%2Dcolor%3A%23f2f2f2%7D%2Emain%2Dcontent%20dl%7Bpadding%3A0%7D%2Emain%2Dcontent%20dl%20dt%7Bpadding%3A0%3Bmargin%2Dtop%3A1rem%3Bfont%2Dsize%3A1rem%3Bfont%2Dweight%3A700%7D%2Emain%2Dcontent%20dl%20dd%7Bpadding%3A0%3Bmargin%2Dbottom%3A1rem%7D%2Emain%2Dcontent%20hr%7Bmargin%3A1rem%200%3Bborder%3A0%3Bheight%3A1px%3Bbackground%3A%23aaa%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2C%23eee%2C%23aaa%2C%23eee%29%7D%2Emain%2Dcontent%2C%2Etoc%7Bmax%2Dwidth%3A64rem%3Bpadding%3A2rem%204rem%3Bmargin%3A0%20auto%3Bfont%2Dsize%3A1%2E1rem%7D%2Etoc%7Bpadding%2Dbottom%3A0%7D%2Etoc%20ul%7Bmargin%2Dbottom%3A0%7D%40media%20screen%20and%20%28min%2Dwidth%3A%2042em%29%20and%20%28max%2Dwidth%3A%2064em%29%7B%2Etoc%7Bpadding%3A2rem%202rem%200%7D%2Emain%2Dcontent%7Bpadding%3A2rem%7D%7D%40media%20screen%20and%20%28max%2Dwidth%3A%2042em%29%7B%2Etoc%7Bpadding%3A2rem%201rem%200%3Bfont%2Dsize%3A1rem%7D%2Emain%2Dcontent%7Bpadding%3A2rem%201rem%3Bfont%2Dsize%3A1rem%7D%2Emain%2Dcontent%20pre%2C%2Emain%2Dcontent%20pre%3E%20code%7Bfont%2Dsize%3A%2E9rem%7D%2Emain%2Dcontent%20blockquote%7Bfont%2Dsize%3A1%2E1rem%7D%7D%2Esite%2Dfooter%7Bpadding%2Dtop%3A2rem%3Bmargin%2Dtop%3A2rem%3Bborder%2Dtop%3Asolid%201px%20%23eff0f1%3Bfont%2Dsize%3A1rem%7D%2Esite%2Dfooter%2Downer%7Bdisplay%3Ablock%3Bfont%2Dweight%3A700%7D%2Esite%2Dfooter%2Dcredits%7Bcolor%3A%23819198%7D%0Acode%20%3E%20span%2Ekw%20%7B%20color%3A%20%23a71d5d%3B%20font%2Dweight%3A%20normal%3B%20%7D%20%0Acode%20%3E%20span%2Edt%20%7B%20color%3A%20%23795da3%3B%20%7D%20%0Acode%20%3E%20span%2Edv%20%7B%20color%3A%20%230086b3%3B%20%7D%20%0Acode%20%3E%20span%2Ebn%20%7B%20color%3A%20%230086b3%3B%20%7D%20%0Acode%20%3E%20span%2Efl%20%7B%20color%3A%20%230086b3%3B%20%7D%20%0Acode%20%3E%20span%2Ech%20%7B%20color%3A%20%234070a0%3B%20%7D%20%0Acode%20%3E%20span%2Est%20%7B%20color%3A%20%23183691%3B%20%7D%20%0Acode%20%3E%20span%2Eco%20%7B%20color%3A%20%23969896%3B%20font%2Dstyle%3A%20italic%3B%20%7D%20%0Acode%20%3E%20span%2Eot%20%7B%20color%3A%20%23007020%3B%20%7D%20%0A" rel="stylesheet" type="text/css" />
</head>
<body>
<section class="page-header">
<h1 class="title toc-ignore project-name">Air Traffic Challenge - xgboost</h1>
</section>
<div id="TOC" class="toc">
<ul>
<li><a href="#model-with-all-variables-numeric-factor"><span class="toc-section-number">0.0.1</span> Model with all variables (numeric / factor)</a></li>
<li><a href="#feature-importance"><span class="toc-section-number">0.1</span> feature importance</a></li>
<li><a href="#resources"><span class="toc-section-number">1</span> Resources:</a></li>
</ul>
</div>
<section class="main-content">
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(tidyverse)</code></pre></div>
<pre><code>## Warning: package 'tidyverse' was built under R version 3.4.4</code></pre>
<pre><code>## Warning: package 'ggplot2' was built under R version 3.4.4</code></pre>
<pre><code>## Warning: package 'tibble' was built under R version 3.4.4</code></pre>
<pre><code>## Warning: package 'tidyr' was built under R version 3.4.4</code></pre>
<pre><code>## Warning: package 'dplyr' was built under R version 3.4.4</code></pre>
<pre><code>## Warning: package 'stringr' was built under R version 3.4.4</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(caret)
<span class="kw">library</span>(xgboost)
<span class="kw">library</span>(lubridate)
twist_zrh_cleaned <-<span class="st"> </span><span class="kw">readRDS</span>(<span class="st">"twist_zrh_cleaned.RDS"</span>)
flightdata <-<span class="st"> </span>twist_zrh_cleaned <span class="op">%>%</span>
<span class="st"> </span><span class="kw">mutate</span>(<span class="dt">delayed =</span> <span class="kw">ifelse</span>(<span class="kw">abs</span>(<span class="kw">as.numeric</span>(diff_in_secs)) <span class="op">></span><span class="st"> </span><span class="dv">1800</span>, <span class="dv">1</span>, <span class="dv">0</span>)) <span class="op">%>%</span><span class="st"> </span>
<span class="st"> </span><span class="kw">select</span>(<span class="op">-</span>geometry) <span class="op">%>%</span><span class="st"> </span>
<span class="st"> </span><span class="kw">mutate</span>(<span class="dt">month =</span> <span class="kw">month</span>(date),
<span class="dt">hour =</span> <span class="kw">hour</span>(planed_time),
<span class="dt">continent =</span> <span class="kw">as.character</span>(continent)) <span class="op">%>%</span>
<span class="st"> </span><span class="kw">mutate</span>(<span class="dt">month =</span> <span class="kw">as.factor</span>(month),
<span class="dt">hour =</span> <span class="kw">as.factor</span>(hour),
<span class="dt">continent =</span> <span class="kw">as.factor</span>(continent)) <span class="op">%>%</span><span class="st"> </span>
<span class="st"> </span><span class="kw">mutate</span>(<span class="dt">snow=</span><span class="kw">ifelse</span>(temp_avg<span class="op"><</span><span class="dv">0</span> <span class="op">&</span><span class="st"> </span>precip<span class="op">></span><span class="dv">2</span>,<span class="dv">1</span>,<span class="dv">0</span>))</code></pre></div>
<pre><code>## Warning: package 'bindrcpp' was built under R version 3.4.4</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># flightdata_landing <- flightdata %>%</span>
<span class="co"># filter(start_landing == "L")</span>
flightdata_starting <-<span class="st"> </span>flightdata <span class="op">%>%</span>
<span class="st"> </span><span class="kw">filter</span>(start_landing <span class="op">==</span><span class="st"> "S"</span>)</code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># set.seed(3456)</span>
<span class="co"># # split into training and test datasets</span>
<span class="co"># trainIndex <- createDataPartition(flightdata_starting$delayed, p = .8, </span>
<span class="co"># list = FALSE, </span>
<span class="co"># times = 1)</span>
<span class="co"># </span>
<span class="co"># </span>
<span class="co"># flighttrain <- flightdata_starting[ trainIndex,] %>% select_if(is.numeric)</span>
<span class="co"># flighttest <- flightdata_starting[-trainIndex,] %>% select_if(is.numeric)</span>
<span class="co"># </span>
<span class="co"># predictors = colnames(flighttrain[-ncol(flighttrain)])</span>
<span class="co"># #xgboost works only if the labels are numeric. Hence, the labels have to be converted to numeric</span>
<span class="co"># </span>
<span class="co"># label = as.numeric(flighttrain[,ncol(flighttrain)])</span></code></pre></div>
<p>TO DO : cross validation!</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">####################################################################################
<span class="co"># Step 1: Run a Cross-Validation to identify the round with the minimum loss or error.</span>
<span class="co"># Note: xgboost expects the data in the form of a numeric matrix.</span>
<span class="co"># # cv.nround = 200; # Number of rounds. This can be set to a lower or higher value, if you wish, example: 150 or 250 or 300 </span>
<span class="co"># bst.cv = xgboost(</span>
<span class="co"># data = as.matrix(flighttrain[,predictors]),</span>
<span class="co"># label = label,</span>
<span class="co"># nfold = 3,</span>
<span class="co"># nrounds=300,</span>
<span class="co"># prediction=T,</span>
<span class="co"># objective="binary:logistic")</span>
<span class="co"># # </span>
<span class="co"># # </span>
<span class="co"># # #Find where the minimum logloss occurred</span>
<span class="co"># min.loss.idx = which.min(bst.cv$dt[, test.mlogloss.mean])</span>
<span class="co"># # </span>
<span class="co"># cat ("Minimum logloss occurred in round : ", min.loss.idx, "\n")</span>
<span class="co"># # </span>
<span class="co"># # # Minimum logloss</span>
<span class="co"># print(bst.cv$dt[min.loss.idx,])</span></code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">##############################################################################################################################
<span class="co"># Step 2: Train the xgboost model using min.loss.idx found above.</span>
<span class="co"># Note, we have to stop at the round where we get the minumum error.</span>
<span class="co"># set.seed(100)</span>
<span class="co"># </span>
<span class="co"># bst = xgboost(</span>
<span class="co"># data =as.matrix(flighttrain[,predictors]),</span>
<span class="co"># label = label,</span>
<span class="co"># nrounds=200,</span>
<span class="co"># print_every_n = 100,</span>
<span class="co"># objective = "binary:logistic")</span>
<span class="co"># </span>
<span class="co"># # Make prediction on the testing data.</span>
<span class="co"># flighttest$prediction = predict(bst, as.matrix(flighttest[,predictors]))</span>
<span class="co"># </span>
<span class="co"># # binary</span>
<span class="co"># flighttest$prediction01 <- as.numeric(flighttest$prediction > 0.5)</span>
<span class="co"># </span>
<span class="co"># #Prediction Error</span>
<span class="co"># mean(flighttest$prediction01 != flighttest$delayed)</span></code></pre></div>
<div id="model-with-all-variables-numeric-factor" class="section level3">
<h3><span class="header-section-number">0.0.1</span> Model with all variables (numeric / factor)</h3>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(Matrix)</code></pre></div>
<pre><code>##
## Attaching package: 'Matrix'</code></pre>
<pre><code>## The following object is masked from 'package:tidyr':
##
## expand</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Create a stratified random sample to create train and test sets</span>
<span class="co"># Reference the outcome variable</span>
flightdata_starting <-flightdata_starting <span class="op">%>%</span><span class="st"> </span><span class="kw">select</span>(airline_code, flightnr, airplane_type, origin_destination_code,distance_km, snow, month,hour, iso_country,iso_region,continent,schengen,lightnings_hour_f,lightnings_hour_n,winddir_h,windspeed_avg_h,windspeed_peak_h,global_rad_avg_h,airpres,sunshine_dur_min,temp_avg,temp_min,temp_max,rel_humid, delayed,precip) <span class="op">%>%</span><span class="st"> </span>
<span class="co">#sparsematrix cannot handle NAs -> filter complete cases</span>
<span class="st"> </span><span class="kw">filter</span>(<span class="kw">complete.cases</span>(.))
trainIndex <-<span class="st"> </span><span class="kw">createDataPartition</span>(flightdata_starting<span class="op">$</span>delayed, <span class="dt">p=</span><span class="fl">0.75</span>, <span class="dt">list=</span><span class="ot">FALSE</span>, <span class="dt">times=</span><span class="dv">1</span>)
train <-<span class="st"> </span>flightdata_starting[ trainIndex, ]
test <-<span class="st"> </span>flightdata_starting[<span class="op">-</span>trainIndex, ]
<span class="co"># Create separate vectors of our outcome variable for both our train and test sets</span>
<span class="co"># We'll use these to train and test our model later</span>
train.label <-<span class="st"> </span>train<span class="op">$</span>delayed
test.label <-<span class="st"> </span>test<span class="op">$</span>delayed
<span class="co"># predictors = colnames(train[-ncol(train)])</span>
<span class="co"># #xgboost works only if the labels are numeric. Hence, the labels have to be converted to numeric</span>
<span class="co"># </span>
<span class="co"># label = as.numeric(train[,ncol(train)])</span>
<span class="co"># Create sparse matrixes and perform One-Hot Encoding to create dummy variables</span>
dtrain <-<span class="st"> </span><span class="kw">sparse.model.matrix</span>(delayed <span class="op">~</span><span class="st"> </span>.<span class="op">-</span><span class="dv">1</span>, <span class="dt">data=</span>train)
dtest <-<span class="st"> </span><span class="kw">sparse.model.matrix</span>(delayed <span class="op">~</span><span class="st"> </span>.<span class="op">-</span><span class="dv">1</span>, <span class="dt">data=</span>test)
<span class="co"># ?sparse.model.matrix</span>
<span class="co"># View the number of rows and features of each set</span>
<span class="kw">dim</span>(dtrain)</code></pre></div>
<pre><code>## [1] 83933 5390</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">dim</span>(dtest)</code></pre></div>
<pre><code>## [1] 27977 5371</code></pre>
<p>Train the model</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">param <-<span class="st"> </span><span class="kw">list</span>(<span class="dt">objective =</span> <span class="st">"binary:logistic"</span>,
<span class="dt">eval_metric =</span> <span class="st">"error"</span>,
<span class="dt">max_depth =</span> <span class="dv">7</span>,
<span class="dt">eta =</span> <span class="fl">0.1</span>,
<span class="dt">gammma =</span> <span class="dv">1</span>,
<span class="dt">colsample_bytree =</span> <span class="fl">0.5</span>,
<span class="dt">min_child_weight =</span> <span class="dv">1</span>)
<span class="co"># Pass in our hyperparameteres and train the model </span>
<span class="kw">system.time</span>(xgb <-<span class="st"> </span><span class="kw">xgboost</span>(<span class="dt">params =</span> param,
<span class="dt">data =</span> dtrain,
<span class="dt">label =</span> train.label,
<span class="dt">nrounds =</span> <span class="dv">500</span>,
<span class="dt">print_every_n =</span> <span class="dv">100</span>,
<span class="dt">verbose =</span> <span class="dv">1</span>))</code></pre></div>
<pre><code>## [1] train-error:0.090620
## [101] train-error:0.086605
## [201] train-error:0.084103
## [301] train-error:0.082077
## [401] train-error:0.080433
## [500] train-error:0.078515</code></pre>
<pre><code>## user system elapsed
## 120.92 11.78 28.86</code></pre>
<p>The model is really bad at predicting delays. At a threshold of 0.5 it predicts just a few delay. At lower thresholds the missclassification rate is significant.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">pred <-<span class="st"> </span><span class="kw">predict</span>(xgb, dtest)
test<span class="op">$</span>prediction <-<span class="st"> </span>pred
test<span class="op">$</span>prediction01 <-<span class="st"> </span><span class="kw">ifelse</span>(test<span class="op">$</span>prediction <span class="op">>=</span><span class="st"> </span><span class="fl">0.5</span>, <span class="dv">1</span>, <span class="dv">0</span>)
<span class="co"># Problem -> the model predicts almost no delays</span>
test <span class="op">%>%</span><span class="st"> </span>
<span class="st"> </span><span class="kw">group_by</span>(delayed,prediction01) <span class="op">%>%</span><span class="st"> </span>
<span class="st"> </span><span class="kw">count</span>()</code></pre></div>
<div data-pagedtable="false">
<script data-pagedtable-source type="application/json">
{"columns":[{"label":["delayed"],"name":[1],"type":["dbl"],"align":["right"]},{"label":["prediction01"],"name":[2],"type":["dbl"],"align":["right"]},{"label":["n"],"name":[3],"type":["int"],"align":["right"]}],"data":[{"1":"0","2":"0","3":"25382"},{"1":"0","2":"1","3":"39"},{"1":"1","2":"0","3":"2547"},{"1":"1","2":"1","3":"9"}],"options":{"columns":{"min":{},"max":[10]},"rows":{"min":[10],"max":[10]},"pages":{}}}
</script>
</div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Set our cutoff threshold</span>
pred.resp <-<span class="st"> </span><span class="kw">ifelse</span>(pred <span class="op">>=</span><span class="st"> </span><span class="fl">0.5</span>, <span class="dv">1</span>, <span class="dv">0</span>)
<span class="co"># Create the confusion matrix</span>
<span class="kw">confusionMatrix</span>(pred.resp, test.label, <span class="dt">positive=</span><span class="st">"1"</span>)</code></pre></div>
<pre><code>## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 25382 2547
## 1 39 9
##
## Accuracy : 0.9076
## 95% CI : (0.9041, 0.9109)
## No Information Rate : 0.9086
## P-Value [Acc > NIR] : 0.7371
##
## Kappa : 0.0036
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.0035211
## Specificity : 0.9984658
## Pos Pred Value : 0.1875000
## Neg Pred Value : 0.9088045
## Prevalence : 0.0913608
## Detection Rate : 0.0003217
## Detection Prevalence : 0.0017157
## Balanced Accuracy : 0.5009935
##
## 'Positive' Class : 1
## </code></pre>
</div>
<div id="feature-importance" class="section level2">
<h2><span class="header-section-number">0.1</span> feature importance</h2>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Get the trained model</span>
model <-<span class="st"> </span><span class="kw">xgb.dump</span>(xgb, <span class="dt">with_stats=</span><span class="ot">TRUE</span>)
<span class="co"># Get the feature real names</span>
names <-<span class="st"> </span><span class="kw">dimnames</span>(dtrain)[[<span class="dv">2</span>]]
<span class="co"># Compute feature importance matrix</span>
importance_matrix <-<span class="st"> </span><span class="kw">xgb.importance</span>(names, <span class="dt">model=</span>xgb)[<span class="dv">0</span><span class="op">:</span><span class="dv">20</span>] <span class="co"># View top 20 most important features</span>
<span class="co"># Plot</span>
<span class="kw">xgb.plot.importance</span>(importance_matrix)</code></pre></div>
<p><img src="data:image/png;base64,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" /><!-- --></p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(ROCR)</code></pre></div>
<pre><code>## Warning: package 'ROCR' was built under R version 3.4.4</code></pre>
<pre><code>## Loading required package: gplots</code></pre>
<pre><code>## Warning: package 'gplots' was built under R version 3.4.4</code></pre>
<pre><code>##
## Attaching package: 'gplots'</code></pre>
<pre><code>## The following object is masked from 'package:stats':
##
## lowess</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="co"># Use ROCR package to plot ROC Curve</span>
xgb.pred <-<span class="st"> </span><span class="kw">prediction</span>(pred, test.label)
xgb.perf <-<span class="st"> </span><span class="kw">performance</span>(xgb.pred, <span class="st">"tpr"</span>, <span class="st">"fpr"</span>)
<span class="kw">plot</span>(xgb.perf,
<span class="dt">avg=</span><span class="st">"threshold"</span>,
<span class="dt">colorize=</span><span class="ot">TRUE</span>,
<span class="dt">lwd=</span><span class="dv">1</span>,
<span class="dt">main=</span><span class="st">"ROC Curve w/ Thresholds"</span>,
<span class="dt">print.cutoffs.at=</span><span class="kw">seq</span>(<span class="dv">0</span>, <span class="dv">1</span>, <span class="dt">by=</span><span class="fl">0.05</span>),
<span class="dt">text.adj=</span><span class="kw">c</span>(<span class="op">-</span><span class="fl">0.5</span>, <span class="fl">0.5</span>),
<span class="dt">text.cex=</span><span class="fl">0.5</span>)
<span class="kw">grid</span>(<span class="dt">col=</span><span class="st">"lightgray"</span>)
<span class="kw">axis</span>(<span class="dv">1</span>, <span class="dt">at=</span><span class="kw">seq</span>(<span class="dv">0</span>, <span class="dv">1</span>, <span class="dt">by=</span><span class="fl">0.1</span>))
<span class="kw">axis</span>(<span class="dv">2</span>, <span class="dt">at=</span><span class="kw">seq</span>(<span class="dv">0</span>, <span class="dv">1</span>, <span class="dt">by=</span><span class="fl">0.1</span>))
<span class="kw">abline</span>(<span class="dt">v=</span><span class="kw">c</span>(<span class="fl">0.1</span>, <span class="fl">0.3</span>, <span class="fl">0.5</span>, <span class="fl">0.7</span>, <span class="fl">0.9</span>), <span class="dt">col=</span><span class="st">"lightgray"</span>, <span class="dt">lty=</span><span class="st">"dotted"</span>)
<span class="kw">abline</span>(<span class="dt">h=</span><span class="kw">c</span>(<span class="fl">0.1</span>, <span class="fl">0.3</span>, <span class="fl">0.5</span>, <span class="fl">0.7</span>, <span class="fl">0.9</span>), <span class="dt">col=</span><span class="st">"lightgray"</span>, <span class="dt">lty=</span><span class="st">"dotted"</span>)
<span class="kw">lines</span>(<span class="dt">x=</span><span class="kw">c</span>(<span class="dv">0</span>, <span class="dv">1</span>), <span class="dt">y=</span><span class="kw">c</span>(<span class="dv">0</span>, <span class="dv">1</span>), <span class="dt">col=</span><span class="st">"black"</span>, <span class="dt">lty=</span><span class="st">"dotted"</span>)</code></pre></div>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqAAAAHgCAIAAAD17khjAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nO3df5Qj3Vkf+O/1O7ZxTDe/1uvArEkIUnu66Tm8juPjICUh0E28Uq9DdweGOCyZ3bCo1juYlhf3guPO9M7QLOG0WSTsN0FiHRhY4tCOpxucaa2h+7DAkYzXB/x6Ve4etyoB581gHPDangb8g3m5+0dJpSqpJFWVqkpXpe/n9B8lqVT1qKTWo3ufW7eElBJERESULC+YdABEREQUPiZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCp2lnlLPCTTab1WqGy/pGTctms7b1tHLNcFmxu7J9o67bDPGJU6J91LVa3yM1zfXtsNFq3Q2IbHkShyWkvXvaTOeAuBwrokgxwVNSNRqNaj7d89Vb07LpdL7aaDRs61WL+XQ62//9a61s32g1nx6ZFgI/cXq0zhoACuu5SQdCRIMwwVOyNYr7VuI2ytl8tTFoxWrekX6Hrdwopgc3xwI/cZoYFzqAzFJ60oEQ0UBM8JQUmVJL2rRKGfN+/cJM20b5ZrGddzOF45a1cuu4s2ajeLOT4rsrZwql41bfqqjuuTfGvT/Rree2fV+2G0anC7hW1tod/pq14Pip4LI5o6ZZRYJhJYLevdq62btbc2zfeHDQALC8kOrfWq7i9jYUjrv3VXqa/bY4s1rPj6z+l995GSNenVHW+uowrq9+4N47D9s2NGQzzg1mrQ26Vom8xkY0Hkk03ToppCfBS3lcsN9vJfy+9VwetG7b85K1asbxA8F9Q6Of2A7PsaYzZNvmujKllpdnWpt3PLc/Ktcnd5/bd5e5BfPWgK25HpC+dV1eGnpflvvL9/DqBmx85Aq9gbqv1j3I/Z+9wRvubHlkbERhYQueEsoo71Xtt82iMVDY2epvdqa2dsyM0ThrOVburzGntur1eiWXcmm7jvPEUTLt7oDWvbVUbtvMEdWjbvv6qAoAmRtr5uZrWr4KAIV2J4KZVRoD+h3SSxnAevHt/ne43WW+rnA76K2X1s58bkHaX/7oV1fbN3tRrMfbvweGbrl/71ZvTCd/t9ex9fT06uy5s+vWcSHjvoaX2IjGFNtPCaJoDGkzAX1tcrf2e9/jo1YeGYuXJ/pqwfe073raxX277WvPD2lK9z3oPKCOu9pP9t6A99CCtz3i8eWPenXd/hhfPS2D+jEcO3fe2Xvgh7yn3mMjCgtb8JRoheN7Lg32qdPbWE6t3bC14dsV8W77vdPebhTTVqU33W5adoYkuG5PvzCsXohCodC5q7ODdr+E2V0Q0gh6l36ATrfBgHVGvrrOq0Gjmk+nh5a5h+y9sxvnKu3ODvfD6OznaMut28sJPmIjGhcTPCWUOcatkmun99TCMgCX5NHW6Vv3tPJAgZ9osvWNj9qRLcP35Xfni/G2PTPwxsEDo93bX1jfXsq072pvr53qJj2CfvSrS23dc3aNm6dCimzZxykMnd04RxIOfYe9HPdQYiPyhAmekqLTF98esN6oFvce2BpGnaaXa63TKti3k6S18lHft65Rzg5pcwV+ol/dDF/uy+9WFG6d6HX3Ho12O7NxsH+kA0BmKd3eReNs31ngN9OY6wj6WHh5dalcpS5l67hUKmS62bRR9FHodm+ru7frhz6lVwixEXnCBE8Jk8pt1a3BULazzrt9o8V0VutOXWcYNS3b6eHt5DBr5WrenpONWjmbLjYajWox7z7OyscTXbKBn5a3leGLxd78bjUzXX5mDNTJ8NVqo7O19maqVUd+D7WDPgjvry6V29qq1OtSylbJMYjSz26cT3Fv1w97SrtHJNTYiDxhgqcESm3VO2OT81aKT23ds05479Q/hRDpdHdamu4I++7KZgdqe918sX/V3l37fWLjwOxoMGo94/5HvsgdW3HXudlO3be61z4/3Oicxj54Lj1HrdjMX/a7Ovl90h30GP3quresc+ZbZ0Ma3oN20zlZwZoByShnzeH7mdK26+8bK7J8N7K8400NKTYiT6Idw0cUuQEj17tjwZ1DmgcNuc8UjnsHNQ9cedD55P6eOHj4f98w8gGj8rtng/cH5Ham+PDR/bZ4OptzucvHCHr7FgaOoreH1DsIffDLH/HqBrwBw05gdx0C7/88ePfI7NsdGRtRWNiCp4TqNnBtrXjkKvVW69hR/GxPP1O3xuPBubJ9XVjrDt23tyemtuqtkvVtnymUjluDs4P7fjotbJcO81zF+TozhdJxa0ABvh1Pp7zQbUt27+rsYeId9KYRry5Xqbsd/6Ev301qq+7YTyZTKLUGDWOwRdZ5QiZT6HtTw4qNaCQhpZx0DERERBQytuCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBrkw6gPgIISYdAhERzRwp5UT2q06CP92cXz287L//2h15fjukfUzqKBMR0WwKqW1Z00S+mim16lspz89Roov+dHNeiNWT1RPZ7w52hZjfPJ10jERERJOUWT67KUS2bHhcX4UEf/rMyeXcxsnj+ysuD94+P9mYuzx5ZuIZXtf1SYfgjoH5xcACUDY2BuYXAwtAldiWtutS3sNNIYTQaiNXVyHB188vcfVpt+wOAFh5+iouz+txRkRERKSk1FZdSinXj4RpcKZXIcFnF+fw6NmBTfTTZx9hbjEbZ0RulpeXJx2COwbmFwMLQNnYGJhfDCwAFWPLVdqFbCvT96V6FRL8yq3VucvD1cW7bg/eXVw9vJxbvTWwgU9ERDSzrEwvKznnIyokeKzcf9weTdfv7YsnUrqX5+OlSg2mDwPzi4EFoGxsDMwvBhaAyrENoc5pcrfPZVhnwxEREYVDCNFsNoUQEz3ROlfxv/fJRhyrSb89RESkNOucdStZ2BNHsCQywdSjRBf9cKeb80K4F+iJiIhCYWZik5npe3KzlC0hRDar1byeiB4fo5ztH2SXtEbt8DmDms2mORjSLKhwOdJlq2qlSDzWsj08FeLhciKX+fmfrmWzH77n/uvXr+NLZfMDOoDnTt/xttJv/vz73gPg9B2na5W1z+ufB/DclyznUoaufx7AO06f297Kfb5v+9evX8dg0WXhpCX4IcbsJ9F13XzDVMPA/GJgASgbGwPzi4G5EkLg70oA+BPg88AT4KEAgC+X8tPQdf0dzy2vH706X/3dlpQtTfvEEj64UKnkjLL2YG0b+w/WKgPmkJ1gFz0TPBERzSjx+s7SvxP4u1L+uu0hWz2+pmUvtuvFtLhTKLymUoGmfQj6l23Xt1KoaRrWsbeHZejYuVfJpfBCR0eyeDKxy6BMQQ2eiIgodGIDAOT7IN8HKSX+725i7qnH56uNYlq0SoVHjwEYFwCwvGC12NPr9+qVSr2+frRfA3DF+Rcmo5x1O598wGx2TPBeWeUr1TAwvxhYAMrGxsD8YmDiO9t/8hDyfd37zVxuco6tk81ms9SSqbXX6r/+m0fazbOl7X+0hAsDZrK/eHDRag+70y+MqBK8Uc4KkT640XK5Ktsx8m4XoVHhPPi7i2L34Yh1wrxoLBERzRTxPQCAJ+2b8j3uqw3pSz+7qZWX9eW3vq+ysK9dILW2bt5ztnSvsvYge1O7WNYPlnbqqYjyqvHgoDHwarG5Squkpw8eGFuOhxUpS5sXg482i7MGT0Q0U8T32ZL6zw5eLdzs8DJnDf6PQ6nB1zSRx3HfbLRDH1ehBQ9g5f7jk8351d3Fu7fZUCcioqDEG7vL8mc8rB962y+SvJpeyuDgwkDOfay+caEjcyPtvFOdGvzK/bdcw8NdZWe0YeHKLwbml7KBQeHYGJhfCQ5MvAniTQAg/2X7b9jKfZPWhRZbJDX41NqNTKOYdh9NV9PSxUbmxlpP8lekBQ+As9ETEdFY5Ds8rRZtxTaavJraqsutmuY6m1um1JKyv2k/Q2Vp1uCJiJJHvBkA8GR0do8pC6SdNXhjYufBq9SCJyIi8qyd2gH5kx5Wjq2Np0xeVacGr7oEF64iwsD8UjYwKBwbA/Nr2gMTb4V4K8Q2xDbkT7b/vBhzqvLAz50gZX5pEBERDSX+GeSP+VlfCER5NRd3yuTVGSpLswZPRKQy15Ht4g6A9uns8kfiD8q/Vzlr8M9yLnoiIpphLpdjvwNxx8Bva5lf1Y5vOrJ7TSu7ni9mbmf4dcMjF+Fc9P4wwXulbA2GgfnFwAJQNjYG5peagVmXYwcgfhTYk0IIXEHry/cLP1Cp17cv9q2Z1o2ylt3TzwZtyvyJEG54CpwHHwQTPBERKUH8KMSPQr4N8m0AIN+G1pm+lAaQWsBZq7PaWqW+03fh+Am32u2Y4KfO8nLfB0oNDMwvBhaAsrExML+UDez6g2Vcaad2G9tVWdtSLjO6RDzEyt9BUybBKzPaj4iIZo/4CeAJ8M8lfribpK2EnV7CAwO5lHEBLPQ/t7OaWgOolcmrbMF7pWbhCgzMPwYWgLKxMTC/lApM/ATkD0L+EOQPodls9l+OvX1VVu3m2dJ2rqZptkue52M8MWpKa/DK/NIgIqLZIMrdq7jauSTsVK5St66AWqnk2q32XKUiK5VIgwxOmbw6Q6eG8zx4IqLJEuX2gtwK9PSp+BrfcJ4Hf8S56ImIKNFEOWBet0xBdlcJa/BeKVW4smNgfjGwAJSNjYH5FX9g4hmIZ7pt90EGBTb5iWtYgyciIuohnoG8NdYWpq/VrkxenYZ6Rkimo3hDRJQU4hkAQRL8ZC4SE5bvcdbg/0/W4ImIKEHGabtPa2o3KZNXWYP3ihU1vxiYX8oGBoVjY2B+RRqYqHQq7v6zu67rE6+1DzKlNfikJXgxWLPZtN4kXdf9Llu7CPDcSJft4akQD5cDL6NDkXimIjZ7eCrEM7PLogJd15tZXd6CvIXmN/vezvXr182G+8RfS/8yOjytv9XUt5pmdte3mtZFdOI3Q2Vp1uCJiMIl3gUAeAKpBd1C8r6Z3+Sswb+TNXgiIpoS7bwOAJDfO8Z2kpfdoVBeTVoXfXTsvTRKYWB+MbAAlI2Ngfk1fmDiXZDf2/0LsoVOrd2e3ZU9YvAbmzI1eGV+aRARkdrEvTA2kshWu5Jm6EDzU0VEFIyZ2uXNSccxFd7qrMH/c9bgiYhIPVarfZzsPt0T1/ilTF5lDd4rZetDDMwvBhaAsrExML+8ByZ+EeIXgSuQN8dtu0spR2Z3ZY8YWIMnIqJkEL8IAPK7x9vITLXa7ZTJqzNUlmYNnohoEDOpm8ZM7bPux501+B9mDZ6IiGInfqmzdAXyu8LYIJtSyuRV1uC9UrY+xMD8YmABKBsbA/OrPbPsL7X/5Hd1/8Y3TnZX9oiBNXgiIlKceC+ar4R4bzjpvLvZTl6f9ba7SZm8OkN9Kew4IqKZJd4LAPIfRLBlfrX2qDhr8P/jxH73sIueiCjhosjurtPNEhBhF31NE0JoNfOGUc52r5aaLRsu6zPBe6VsfYiB+cXAAlA2NgY2nHhvb3YPJbAoWu2KHDFXKsRW00S+WjiWlRwAo5xNH9xoyY6ds7SV+buUqRUQEVGoxC9H0icPttqHiySv1o6qyJS2c+aN/WKjcFxPWY/mtkuZ9F55O7eVsj1nhmonLBQR0ewQvwwA8tvD2+DMTlzj1y86a/D/bSgHraaJPJzt97o9m9sf71Cli/7uYqeUsHgXON2c79YWFu9OOjgioikhfrn9h1CzO7xNN0tARDX43HoB1SOzFz61diPTOGvZHzYudGSW0s7nKJHgTzfndx9tnEgppbyDXSFWD6/e6ZQW7mBXzG+eTjpGJWowrhiYXwwsAGVjY2B24gFwBfLb23+ufAVmtrLCCW4UZd9KqHEefK5yXKjmzUF2qa17JT3fHVlX09JFlO45+uehRoI/febkcm711goA4PYbrgFzG++83Xn09js35i5Pnpl8hiciUpJ40P4DINfC3DJb7UFENYo+V5FSHiMvhBDpYgONYrrd0X20LmW9N72rUYO/uyh2cUee33a55X5PIKzBE1HCRJHUWWsf1wNnDf6/menz4LOLc3j0rL2J7rh1+uwjzC1mYw+LiEhl4gHkWsjZHWy1j0+ZqWpHJviaZjuNvqYNOJ1+LCu3Vrud8Hff/RC4PPx+a2SdowN/gpStDzEwvxhYAMrGNpuBmR3ywVL7oMBiq7UPouxbCSVq8DWtZzqbTnIWwjb7jdPQBF/ThNhbaslWKWPekascLxfToef4lfuP71w9XBVCCLGLO1KebDza7cS9ev4W+fj+xPM7EZESomi4s4IZpuhb8EY5K/aWuvPcyPUjtyQ/5E3tnmlnP+fOKGfTxeWek+2mAj/BRDTVxPuBJ2Gmdn4rRqLurMH/rdDOg9dLZh52Oefd7dT4YS341lkDywu9w/JSC8tjB0pERP6I90O+jtmdzHPee6UWltFzavzQBJ9eykC/6O2Nrx1V+8+mj9Tp5rwKs90oWx9iYH4xsACUjS3ZgYn3d//k68bfHmALTLXsruxbCSVq8DZu7Wy/E92ktnYKjeJNe8HdKGfzVRR2+k+3i9DK/cfS8zlyYjDY3iRd1/0uW7sI8NxIl8d8XVxWZxkdisQzFbHZw1MhnlCWxfu7y/J1aF7Vm1fD2b4Q4vr16yq8xv5ldCgST/DYXtrUX9o0s7v+0maz2RySmHyNbeyc+J6vwprVzlTbLzYyN9Z6UvPILpqaJvLV7s1MqeVyNv1UYH8UESlOvB9AaI11moyPOGvwT4fbWWIl5YytIl91zc0zlPOY4IlIWeIUeBJJaufENXH7qDPBL6s40c2Ak95r2qBT7sbjuMCMzeSr7yZ7L41SGJhfDCwAZWNLQGDiFOIUciWqhnvPxDUJOGLx8xfb9Ex008tt+N64TjfnhVg9WT2R/e5gVyhxsRkionCZqR2ADHumjzgvEkO9JpHgjXK2v+3t0mvdU3XvF3Yd/nRzfvVk9WTQbDYjHvaMXfREpALxG8CT9nLoqZ0m7+POLvq/OrEuepdfF7mKlBUANU3sLcUxpK5+fomrTw/8mK88fRWH53WA/whENNXEb7QXIsrrbMYoYaLd8nZDuuhzFbfLz0Wg/2IzDopcbEbZ+hAD84uBBaBsbNMSmPgNiN+A/Ob2XxQ8ZvdpOWJKSWQN3jGZ/ch57YNaubU6d3m46j6a7u7i6qESF5shIgrATO1AhHndXGDbXRURJnijnPWRlIf94rOmvkU5mz7bkZVclDPR310Uuw/7757bGL/6bmLnFRHFKdK83t4Fv9YU9ClnDf6/COe3l1HOposN9zFwA06FH/LhsE1tbyvHu85oPxX4n0BEsRF1yIlXFmkiPutM8F8eSoIfkXv9XmwGQOdiM+mlTGcW+9TajUzfjPazQNn6EAPzi4EFoGxsqgUm6u2/5pdFFdiYp8CpdsQsygYGJWrw7pd/s4xxsZnUwrLLdWeIiKjNzOsAZDbatnvPxDWknEgSvPvl3yyuF5sZ1mttL7hbnfTsoici6mGl9qi2z+lmp8jzzi76K2HW4AuuY+D81+A7z4KV4s35b9y3rz4meCIKnZnaEWV2p+ki4UjwLxAh/jIbMBHdgOnnRtTgcxXZyea5Snvy2KnM7uNTtj7EwPxiYAEoG9tkAzNH0rn2yY8fWETTzfKtDMBXbE+cf6GyErHTgD71IQneKGddrzZDRDTrzIo7a+3UL8oE78+I0+Qwpd3xbthFT0Tji6Hczm+qqXbp7KKfD7OL3p+hn6RkpXj+2xDRmKJutfNrKgE+7UzwXzm5BD/0evD5KlDNRz5V7XRQtj7EwPxiYAEoG1tsgYkPQnzQR3b3FVic083yrQxAmRq8P0PO0etcVY6IaFaJD7YX5Gsj2wVb7RSNGfpg8b+IiDxiXqfAPuHsov+ayXXRK3PdWiIiNZjZPbrUDmb3RJtst7zdiPPgyaJsfYiB+cXAAlA2thADM6vs4oOQrw0huw8PbILZfRbeytAlrwZPRDQTYmiyg9PNzgx1WvAz1E3EPjEisouh0E4z6NxZg19S8jQ5U00zz4zLlg2gpnFuOyKaeuJ3IH6n3RUfda09iulmSWXqdNEPTfA1TYi9pZZslTLmHbnK8XIxPZs5Xtn6EAPzi4EFoGxsfgNrp/ZXQ746oojazMAUnG42MW9lnKa0Bj90Lvq9aqZ0zzmHfW67lGkU95Wd6MZlVp6OZrNpvUm6rvtdtnYR4LmRLtvDUyEeLgdeRoci8UxFbPbwRq4vfgfNF+vNF0cem9lqV+H4TNEyOhSJJ3BsL9SbL9SbZnZ/od5sNpuYEE9z0TuuAT+189eyBk80I/onhhO/034o6oY7+FUz8z7grMFnlKzBp5cy0C96e+NrR1VkltKRBkVEFJSZX01CCPERiI+0++Tlq41aWctmtZrzi62mlWsAYJQ1TdM0rVwLUIaMc7pZUtlUdNGntnYKjeJNe8HdKGfzVRR23C89m2z2XhqlMDC/GFgAysbWE5i99Sw+Ajwr8bSQ39h+1CjvHy1U6vXti33ri80oa9k9/QwAjAdnS9uVSqWylfP7Fdffap+WI6YOZQOD2rENMfQ8+FxFypomRBEAGmlRBDKllpzF9E5E00N8BADMvG7vLW2d6UtrAFILOGsB5jfZWqW+oGnthw/OtAMdO/cq3lK8ldfZaicLz4OfABbGiBJPCIFnpdVkh/Mfv6ZpqFRytgXH/UbNSOVSfY8O2Re/Uqjfrzlr8H9PyRo8EdHUMGvtZp98905nDk4v4cIAYFy4bcF4cNFqd9z3jz5ywexOrqaiBl/TZvTK7+6UrcEwML8YWADKxmYGJj4C+Y2dP3NsnRD9LezU2vrZTa2s3Txb2s7VNM05pUdqDXs3tbKW3VsaOM7I+8Q1ih8xBSkbGHzGpk6CH3Y9+PUCqtW8qJo3M6X2eXJEREoQH0Wzk93tBratU7lK3ep67/bC5yoVAEht1esAsDV4j2y100jTVoOvaSJf7d4sTONp8CyYESWK+CjkN8SyI14khvx4j7MGf0P1Gnyu0jmttFXKANUjdtwT0QSJj8a3LwWnmyWVqdNF7y3Bd644I0S62AAK69PXfh+bsvUhBuYXAwtAqdjM7G4236MLbMyLxCh1xOwYWADJq8Eb5Wy62LBusgZPRBNjb7LH0DPPih4FNhU1+Jom8tXpLLe74n8s0ZSKs9zObwka0884a/AFJWvwuYqUicnuRDSlxMdGTLkZ2o6Y3UltRjlrnQLacw67Uc72n9fOiW68UrY+xMD8YmABTCQ28TGIj0G+EvKVA9cZP7CILhKj7LvJwAJQoQZvlLPpIkotc9DnMfKjJ6rpT/A1TYhs2bCPrOvD6W+IKCpmXhcfAzAstYezL7baKWzRJHjjwUEjU7rXGQmXq8hWSc+b2XqQGfpw8z+ZSHHxJHWiSP2kswb/P4dTg69pIo++QXE1TeT1Uqu+hXI2XVzueXz4VLVuvw1qWhQt+LuLQojFu+aN0835bm/B/OZp2DsjIvXElt29TzdLFEA0Lfj0UsblGgm5ijxeLqYH5GTfNXjjIvwyyd1Fsfvw2h15fhvA6eb86snqSWdmHfmW81Ur80+SsvUhBuYXAwsgwtPN/337b3itfZAAgcUzcY2y7yYDC0CBGnxq7UamUdzvz+S5ynGhmref1G5xSfCd2nu+ikYx3Vt+TxcbmdJ2qGPr7777IeY23nnbvPH9h5fX3nJ/xXr09js35h6+nc14oqQx8zoA+fWQXx/xvthqp7hENMgutVVvlXS3oXW5ijnJbJ/h58HvLcUxuc3dRbELZ/v9sS3DOx4fA2vwRIow8zoQeV4nit+uswZ/V9Xz4OOZuu72G67h4bvNXviVW6tzl+d1+8Onzz7C3GI2hkCIKGLi4xD/vt1kjyG7s9VO8VNnqlolzoO/fX7n2sNdc5Ddyv3DjUe73ZF1dxdXD7FxaG/RT4ay9SEG5hcDCyCU2MTHIf9KyHl9SGCT7bRT9t1kYAEoUIMfwHWCmw5FzoO/fS6lvINdIYRYPbzE5eFqe1fvfoOUjyef3oloPOLjce0omolriCZqQEZOFxtANe+emmeoLM0aPNFEmKld/pVY9sV/c5q0H3TW4P/3sGrwNU3kq72XfTPczn/vUKKLnoiSKp7szlY7qSOqLvpcRcrj5WJ6+Ox1dsMTvNVdb5vj3vOmw3K6OS8UOBNe2foQA/OLgQUQIDbx8U7RPcrsruu6mq12Zd9NBhaAMjV4f0l+2EWaalq+mim1tlIwyjeLDRSOZSVX00RaW4jzKnMr9x97/98dPmhW1/Xl5WV03i2/y9ZGAjw3uuXxX9esLav5PiYvNhnX57/ZbKp83FRbVvlYJSO2N+pNAO9Yvg7gTXrzjc0Ricnvz9NcRbaWsum0OCi16mvD1hxxPfj2zLf2S8O7T4g7BdT8mU+UMGarPfK9CAF2yJOSvtdZg/9XEZ0Hb5Sz6WIjk8k0GmPV4GtHVaCwngOimaqWiJJBPIrp2u3xTDdLFEBMp8mltuqyVULDZYrajmET3awXUD2qtfN7ZikNALX9YqOT68PluMKMzeSr7yZ7L41SGJhfDCyAkbGJRxCPIK9CXo0qBtfpZpU9aIUr8bIAACAASURBVAzML2UDg8/YYjwPPrVVl1IO7FEf1oI3p7AXIl+FeRVao5y1eurDdLo5L4TjCjNdd7DLK8oRqcrM61GndhNb7TQVJjKTneuENyqUpd3mn/f+sGeswROFSDwCEHlSB/9zadr8A2cN/r6Sc9HHpn5+iatPD0zfK09fRc/09EQ0IVaTHczuRG6mZy767vnv0Z0Fn12cw6NnB3bCK3KxGWXrQwzMLwYWgK7r4pMQn2x3xUfdIe994hplDxoD80vZwKB2bEMMTfA1TaSLKLWsgnirhGI69JnoV26tzl0errqPpru7uHp4Obd6i7PRE02K+CQAyJdDvjyW3bHVTtMsyhZ8b5t7+AVihvwjGeVs+uBG7wXh3e8Nwd1Fsfuw/+65jfGr7yZ+axD5ZaX2OPbF/1BKhNc5a/C/GlINvn3ee8kt/bpOUz+0Bd86a2B5oXdDqYVlNM5a4wfb6/a5yxh6XkmOaGLEJ9lqJ/Itmha88eBgQHYHkKu0SpnGwYOeEvqQBJ9eykC/6C25Gxd655z42aJsDYaB+cXARhKfgviUI7VHHVvg7K7OQevBwPxSNjAocR68e5Pb4tr2HpLgU1s7hUYxbR9WZ3YRFHZC758nIlWITwGA/Krod+Q2cQ3RtIsmwbs3uS2ube9R3WJmSu/eHthDoD72ARKNJD4VR2onSrDXOmvw/0+oNXj3qeYG1OBnKOcxwRMNYrbaEX3DnReJocR7tTPB/26YE93UNJGv9t89oOmtwkQ300HZ+hAD84uB2YnPQnwW8qvaf4OEFVvo083y3fSLgQWgQA3elKu4jkYf0LE+MsHXtKjnuSGiCRGfBQD5ZdHviLV2mhnqzGQ3tNe6pom8bm/5G+VsuogpLcOzi54InaRuiiG1g/96NGNe6eyiv5jcXPQjJro52+mt5/cl/anBbxki8dmYkjr4H0ezSp0EP3yiG5cT3nPrhWgmulGdsvUhBubXbAbWrrUHze5+Y4stu8/muzkOBhaAMjV4f4ZPdOOSyWd2ohuiaWTm9fhr7Wy708xSJ8GPrMFX7WfdDTsPT3nsMKSZEltS7+6R/2JEwFVnF/0fKFmDH3C+ncM05Xp++9CMEH8KAPKlk46DaCa93Jng/7OSNfgB59s5TE12H5+y9SEG5ldSAxN/2v6TLw0/uw+KbeLTzSb13YwOAwtgSmvwVya6dyIKU/ytdvaKEfWYbFK3m6Fea3bRU1LF3CfP6WaJhnips4v+zybXRc8WPNEUm0i5namdaAh1WvCci94rZetDDMyvxAQWUbndla7rak43m5h3MzYMLADW4JUw5Duo2Wzqur68vIzOu+V32RTsudEtmzfViUf9ZTXfR++xXU8v4wmav6c3AcQV2/Xr182GuzrHip//2fz8qx/bR/QmgOvL3wigqX8ETUzKyLJ052S5TKlV32ppYm9pGqepBViDp0QQX4B8cYy7438NkU8CTzlv/4WCp8mZV5LbW2rJVilj3pGrHC8X07ykHNEsYHYnCuSK829ihiR4o7xXzZTuOZvrue1SplHcr0Udl3rsvTRKYWB+TWlg4gsxNd9dp5ud0oM2QQzML2UDg+/YpiDBt84aWF7o7Y1PLSxHGhARWcykbqX2eLI7W+1E41ElwY+4XOzBjVZ9K9Vd4uViieISc7mdiEIh8FXO2/+fgjX41NZOoVG8aS+4G+VsvorCzvRld6IpEltvfHt3k55ulihZVGnBDx1kl6tIuXOWFuliA41iWoh0EaXWLE1Ab6NsfYiB+aVyYHH2xlvMC0sMX0flgzbpENwxML+UDQxTW4Mfue9cRcpKHJEQzSjxfHs6jCZibbWDc9IRRUKVCWZmqCzNGjypRjwPAPKpUesR0fQQ+Hrn7f+gYA2+polBtBk8TY4oROJ5iOchn4o1u7PWThQLVbrofV4P/rgAFI5nsgqvbH2Igfk18cAGpfaoA/NSax9k4gdtEAbmFwMLYEpr8D4vNpOrHBeqeTbgifwTkALSzO6x7petdqKZ5L8sXdNEHtPYiGcNniZCoPupk4g71/JjTxQzgW903v5/FazBuzMu1O1FIVKNmd0lhPkX337dppslolhE1UXfHRmn1QCjnB0xMs5vgq/tFxsorE9d8318ytaHGJhfsQUmIH3l9bACi6LVznfTLwbml7KBQY0avFHO5vVSyxwOh7wQ6eLysTU+DnnRfx04v6Po89VMqTV93fNEcRP48/g75E1stRNNVBQJ3nhw0MjcWDOnkc2tF4BMadvKxbntUqZx8KAnw89QfY7FSIqNwJ9LvDDWPXLiGiI1CHyz8/ZvhvGP6Rz+1j8Yzm143NDLxWZdmvzxOd2cF2Lx7sT2TxRM/Nkd450CR0ShiqIFn17KQL+wZ2THLeNCR2Yp7XyO78vFRuDuoutsOquHl8DDXfPG5BO9svUhBuZXFIEJ/Ln1Fzi7+w0szolrZurdDAUD80vZwKBEDT61dqPbCV87qgKN4r41ss7RgW8ZOtFNTOe83z6/cw3A3MaJY1Kdk4054Nod88b57cjDIArCSurWX2y7ZqudSEmRDLJLbdWPl4tpczQcjqVslfR8p0GcPtuR/VdxH1KWrmkiX3V/KIrJ7O4uit2Hcxsnj++vmHecbs6vHl69E1puZw2eQifwOQASL4lvj6y1E6lN4Nudt39FwfPg3aaqbYtiGP3tcynvXD1cFfObp+FvnSh08Wd3sNVONAWmYKramuY6xq6mRXexmdvn8mQDaiZ5ZetDDMyv8QMT+JzA5yReEm52HxLYxKebTfC7GREG5peygUGZ2OxT2/SkYaOc7U/Nys1kt3L/cTvJb5xEuiOiACJK7SN2yuoS0TSJaqKbdBHtmW7MqW5GtbVdvjiG1N5NmVKrv5gfttPN+dXDS1xjDZ6UEXOfPD+xRNNI4Ludt/91GP/IRjmbPrhhT76djF/fSrVvLPcMj3P5cZGrSFkBUNPE3lIMqdzdyv3H/GojhQhcSszFtztmd6JpFUXdvXXWwPKOPR+ntupyQRPpLFr1LdfnDB9kN6ns7qDIhDeK1GD6MTC/fAUmcGn+xZDddV1X9iIxyXg348TA/FI2MChxHnz/RDcAkKvI4+ViekBfve8afPxW7j/2fh6865Q51nwg1puk67rfZWsXAZ4b6fKYr4vLrssCnxa41HW9qX9cYk5iLob9Xr9+3czr6hwHaxkdisTTE5I68XA58DI6FIkncGxN/c1N/c1mdm/qb242m0MSk+fxs6m1Gxn71DYWc8qadLHR/5wZ6gZknyeNJPBpc0HiKyYbCRFNKYFbztv/IqzUY5Sz6WLDbSIa90dmKOcxwdMQZmqPP69z4hqihBFwVsTFTyk40U3MTjfnXXsvJl99N9l7aZTCwPzqCUzgjwQ+LfEVE2m12yeuUfaIQeHYGJhfDCwAn7FNwUQ3ps5V4bNlY+DcN+M63ZwXYvVk1TkXvekOdoWK895QAgj8kcAfSbws5tQe50ViiCh2E0jwrhPdDO21rmkir5da9bUH1vl3nbvCHF5/ujm/erLanYTe38OesYue7MzUPukoiChpBN7mvP2/KdhFb5T3qpnSPWcqz22X3AfyjaF+fomrTw9M3ytPX8XleT3MPdKsE/ijCeyUrXYiipHv68GnFpbDjiG7OIdHzw7shD999hHmFrNh79UvZetDDMwXgU/oui7xspib7146kNQ8YiZlY2NgfjGwAJJXg3c/rb52VEVmKR1mDCu3VucuD1fdR9PdXVw9vJxbvTVm/zwRAIFPxL1HVSeuIaLIRJfg7ZebsXOf6cZfDR4DT8Ib391Fsfuw/277FeLHwxr8TOnJrGZql/jqmGPgR45o1gj8mPP2Pw3le8A81d39WjA1TeSr/Q+N/ALqufRMLBeaiQa/bWeH/b0WQkD+gcRXA0atvL93gJ17lVz7M2yUtZsHWL6xXtkK7zcrP2lEs0xg33n7f4nmYjOjHx55mlyu4jhrbVqz+/iUrQ8xsB5WfhX4hMAnIP8A4msAGOX9o4VKvb79is/rZuXJKN/Edr1e2cbeqMsu+t97AMq+lVA4NgbmFwMLQIEavPuoOEtqYRmNs5bzTnUmuiEKk8BzwBOJr7a65Vtn+lIaQAqA+W+Q2jJ/sLbOENqwErbdiWZefBebsRgXev/wuCEJvjPFzQChNXmmxPJy6KcPhIOB9RN4TuIVEq9w3t3++fvcO95hu9MoZ/eW7o3VMxXWxDXKvpVQODYG5hcDC8BnbFEkePNiMwOuG1fT0sVG5sZaz/fY0MvFHhcAZEqtbg/9cQFA4VhKeYx8JLPaEQUm8JzAc1JKiK/t3tnpM08v4cIAYFx0n1HTsvsL98YtPNmnmyWimRfJKPrUVt3MvC72llpuFfQRE92gcOx4Tq7SKmWqe2XDnPHm4MHsZHhl60MMDFZq77TapZTWJ99Kvam19bObWlm7ufKmN+VqmlY2atqevoyjfU3TfP9WjWK6WWXfSigcGwPzi4EFoEAN3tQzKm7E6Lgh+26dNVDY6R1bbFXyc52FWR11R0oQ+D3zY9zTIe/SpE7lKvUczP/VXKWSA1APPHaeTXYiUtyQEb/ug/Kte1HOpovLkZwSHw2evJQYAi3rt6nE18W6a36KiGgogV9w3v7HCs5Fn9raKTSKaUehvaali43CzlYKxoODBgrr05LdKTEEWgAkvs78i3XXzO5ENNoUTFVr9vYfLxfT3Up+HsdSVnLtRH88Na33EChbH5qRwARa5p9EWmKsk9r8BhbbdLPKvpVQODYG5hcDC0CZGrw/I/edq0hZ8XgvUQQ6TfZQL4Dgfe9stRORP5NM6nYz9OXFb+ppNKnszk8LEQUj8D7n7b+vYA0eg+e6mbVJbihuAufmH5jdiWjKqNJFPyzB17R8NVNqSdkqZczZbWSrlAFmq/beoWx9KGGB2fL6osRiFNl9ZGCTyu7KvpVQODYG5hcDC2BKa/DDpqo9qsKc+i61sNyeAze1da890Q1RyHpSe9x7j2DiGiKaSaok+CFdkTVN5GGe526Us+mzHfOUd/vyVGG/q7IEmsCV+JM6EVHoBH7LefvvKFiDt127ptuEJwqTQFOgKXF9ItmdrXYiioAqLfhhE92s3cg0ivs1AMitF9oTzxsPDhp916SbBcrWh6Y3sE5qvx5PPBYrMNUuEqPsWwmFY2NgfjGwAFSObYhhPy5SW/XjM5HX1mUll6scH4m0KAIoHMsxL74VoSENsmazqeu6edU/893yu2wK9tzols2b6sTjfVkuX5/Ifq9fvy6lVOc4qP8ZUzk2TO3nn+9jUmNr6nMAri9/DkBTfwmaTUzIDJWlWYNXhEATQPwN9/be+TEgoigJfNh5+68rWIM3ylle8Z3CJPBhgQ8DT+LP7rFNN0tEM28KavCtswaWF5TtjI+bvZdGKVMRmJnaJV5l/sUcSU+rfSqOmGqUjY2B+cXAAvAZmyoJfsi+c5XjQrsCH188lDRmb1X8SR22vM5WOxHFaArmoq9pIl91f6gwRZeBt7D4GjOBD5kLEq+ZwN75dhPRJAj8nvP2X5vUd9EMfQnyGz82Ah8wf8NOJLUTEU2QwHPO21+r4CA7clC2PqRaYAIfACDxmqb+krh37W3iGtWOmEXZwKBwbAzMLwYWwJTW4Ecm+M4F5bJlA6hpHFdPAwl8QOADEt8k8U0TCUC1iWuIaCapkuCH9lrXNJHXS6362oNs+uBGq76Vsu5Sd6qbgdhFHylz+mWJvx33foUAh9ERkTIEPu28/ZUKdtEb5b1qpnTPmcpz2yVr/loiCPyW+Sfxt+PP7mCrnYhoAN/nwacWliMNSFnK1ocmFZjArwv8OoBBqT3SwMa5SAzfygCUjY2B+cXAAkheDd52NTmb2lEVM3mxGbKYqV3iWyS+ZSKtdlZbiEhhqiR4fzV4lLPpYmMqz4JnVgiD2WQHIPEtE9g730EiUp7Anztvv0jZ8+B7prvJTOcAO4DpISiBXwPQOa99Anm9HQbfPiKaBgLObyrxgjC+u/pGuDuSs3u7e+RpcrmKtJvW7D4+ZetD0Za68WsS3ybxbWaHvK/nhhJYFBeJmc23ckzKxsbA/GJgAfiL7Xnh+IuAUc6KvaVWNzWvHwmh9Y1+50Q3NJCZ3ScZAFvtRDR1njj/wlfbLzYKO/bmdm67lKnu9U5TMyTB1zTh9pNgVi0vK3r6QESBdXrmgxs/sIiy+6y9laFQNjYG5hcDC8BfbFEneOOivz8htbCMxlnLeeeQBJ9bLwDVvBC2qewic7o539mRWLzb/1DPfRQtq2d+Arv2Nt0sEZGiok7wbmerGxd6/wluw7rou+X34wLQKKY7GTjsZv3p5vzqITZOzJ3dwa6KCV3Z+lC4gQnUwuqZDxZYDBPXzMhbGS5lY2NgfjGwAPzFFlmC76ThfBWoHtkTcW2/2MjcWOsZI+etBt9N9a1SpnfDYzt95uRybuPw/op58/a5PNl4tCvmN0/D3At5FX/Dna12IkqOSBK8lYaPC+YdVsm9pokBU8h7G8TUc65cyCfC310Uu7gjz2/33fto4+TxfWzOrx5e7XvcN47YGk6gBkBiCqc4ICJShvik8/ZfnljqGTLJjlHOposN62Z0Z8BnF+dw8uwpsGK/9/a5xKJYXbx7shjFTqlL4H3mgsTrY90vf3IRUfJEMnI+iBFz0aNwHP0Z8Cu3VucuD7+/v+p++/zOtYe7q4eXEe3YF2XrQ+MEJnAocAg8kXh96Nl9eGATzO6JfCujpmxsDMwvBhaAIjV4v4aNoq9I6dYVb5SzIY+yW7n/+GTjkdvQutvn8mRjLtSdUYfAIQCJDYmN+HYawcQ1REQKUSbB+2hF2brsp3I2enYIWwTeAwC4EmdqB98CIpoB4mPO29dC+d7rGQrnqjc1e9ixY7Oci36KCbwbAHBF4jtj3e/MH3kimh3io87by2F9ARp+L/c2aia79hl3AJAptSYyF70iE90oWx/yEpjALwj8gsQbJN4QW3Y3A1Mwu0/1WzkpysbGwPxiYAGoUYNPbdVbpUw177lI7pLgHYm9Pciuc+LdJKzcfyw9nyMnBoPtTdJ13e+ytYsAz410eeTrEviFpv6qpv6qicTZbDbVOVaKL6NDkXimIjZ7eCrEw+XAy+hQJJ7AsTWf0ptP6WZ2bz6lN5vNIYnJ5xQgqa2dAjyn+P7WVU0TefR2AfRdqG4KKdiUjIHAzwJXJL4n1p0KAQ6jI6KZJD7ovP03J5Z6+lvwucpxoTsDPS82M1XsPwkFflbgZwHEnN0Ry3SzRESKUmYUvVsNvjMj3nH3YjMjB++Nz365GbvJV99N9l4apViBmV0UJiGExH9v/gEAjFpZy2a1WveKQUZZy2Y1rVwzlzVN07Sy7XGf+vua1D9iqlE2MCgcGwPzi4EF4C82pRN8hz3Roz3NfSTXlDvdnBdi9WT1RPa7g13BaelHsxcgBH4GsmpPt0Z5/2ihUq9vX+y330CjfBPb9XplG3tazXhwtrRdqVQqW7nANRi22omIJsUoZ/u73P3UBrrny4V7Hvzp5vzqyerJ4/srQR72LNk1ePPVCfyMeVPi++yvt6ZlL7brWynUNA0V+3tX07IX2ztnN/ewDB079yo+U3yyjyoRkV+ip0G6qlANfrCeFn1o6ueXuPr0wPS98vRVXJ7Xw91nEgn8S+CJxPdJfF/fg8sLLonbKGf3lu5tpdLr9+qVSr2+frTva8wFszsRUa+p6KIfJFcJdxq77OIcHj07sBP+9NlHmFvMhrnHIJStD+m6LvAOyH8B8T9JvNG8syf1ppdwYQAwLrrPq2nZ/YV79a0UjAcXrXblRb/wUILxON2sykds0iG4UzYwKBwbA/OLgQWQwBp8XMyLzay6j6a7u7h6eDm3emvM/vmkEniHuSDxRnNsnakn9abW1s9uamXt5tnSdq6maWWjpu3pyzja1zStjDXs3dTKWnZvaWfkiZBstRMRDRNhgjfKWdfR6O4nvKnzZX13Uew+7L97bmP86rspeZnJzO4Sb4pjX4k7ekREURDvdd7+jnC+PM2Jat2ni69pIl/tf2iGvrWTlKIEfhKAxJtj2l2CDh0RUaTELzlv/8NQvj+NcjZ9cGPgdHOuD6vQRT8d1KkPCewDT6zsHkNgwT6d6hyxHgwsAGVjY2B+MbAAFKjBt84a7oOlTamFZTTOWs47meCnksR21LvwP0kyERFFlODTS5lho6CNCx2ZpbTzzhnqek1GP7PAfgzZnYiIghHvct7+H8KswbvPQjOgBn9l/L1SbAR+LNrt8yIxRERjiubUuNRWXW7VNNee1UypJWV/9z276L2aeH1I4Eck3irx1p77Qwws3OlmJ37EBmFgASgbGwPzi4EFoExsnfnmegwYescWvOoEfsRckPhnkWyfrXYiohBNdHIbuySUpT2axhq8wC5wJaLUTkREoRNl5+3ixFIPW/DqEthFlA33qfu5Q0Q0BZRpwbMG71WcNRiBtwm8TeKOxJ2RKwcILJ7srkzVqhcDC0DZ2BiYXwwsAAXOgw+CLXhFSfxo6Nu08jrb7kREUVGmBT9D/bRT0Skt8EMAJH48/C1Pw8snIpp2oqfj9X9lDZ7ankj8RBTbZXYnIoqDMi141uC9iro+JPCDAj8YILsPCWyy080qW1FjYAEoGxsD84uBBcAaPAUXLLWPxFY7EVHclGnBz1BdVs0itMAt82eWRHnkyp42yIlriIgmR/RcLeTtrMHPHoHvBb4E4aV2E1M7EdEkKdOCZw3eq3DrQwI3AUg8I/HMmJvSdV3NS7sqW1FjYAEoGxsD84uBBTClNfikJXgxWLPZtN4kXdf9Llu7CPBcc1kIYb+/qb95nHjsITWbTbPhPs52uDzxZXQoEs9UxGYPT4V4uBx4GR2KxBM4tqamNzXdzO5NTW82m5gQFcvSEZlsDd7au8B3Q/xryH8scQ8wauX9vQPs3Kvk2hcDMsra/gGWdra3cq6XB3LbJhERKUJ8n/P2/zGxL+qkteDV5MzET6SUED8PwCjvHy1U6vXti/2yAZj3YLtSrywc3Wzf422bRESkBnbRTx17L00wAt8u8F0Sv2Td0zrTl9IAUgs4awEAUluVrZRRKx/hxpprA96qtVvZffzAIsLA/FI2MCgcGwPzi4EF4C82JvhZI/DtEr9sz+4AgOUFlzSeSq+t4+xBfwuerXYiItUxwU+d5eXlAM8SWBF4nZQS4le6d3bydHoJFwYA46LzkFEr14BUKreOAyvD97faxw8sBgzML2UDg8KxMTC/GFgA/mJTJsHzPPgICXwzcEXi/QCklP15OrW2fnZTKy/rZ0v3tmqadrFdWcN+VrtY1g+WduopgK12IqLposx58DOUPMbMlLqu+/oRJ/Ba4EskfiPwHj3yG1hsGJhfygYGhWNjYH4xsAB8xSZe77z97ziKPlkEXg0gcHZXc+IaIiKaImzBR7MvvFrid+LZFxERqUPknLf/L85FnyAC3yDxUd/P4kViiIgSQJkaPLvovRp0HqQ1FS4AgVcKvDJAdgcgpQyW3ZU9eZSB+aVsYFA4NgbmFwMLgOfBzyKz29/UboLjY363EE1oREQ0CcokeNbgw9mgwFcBXwrxH227GD7PvFHW9ovVaqF07GHWeSIimg7im5y3f5s1+Gkm8FLgSyQ+LtBtjnfmmTfKWjld2UpZ88ynakKIVqt0trQtZWWCYRMRUfhYg586A2vweAp4IvGpnvsHzTMvRL5QaqVaZ/rBvpbNarXh15QJHtjEMTC/lA0MCsfGwPxiYAGwBj9zzLr7C/AXEl+ASwnAMc98p9aearWOcfbASK/fq1cq9fr60X4t1qiJiChKkST4miZG0nqyCRO8V67TGP2XEn8h2gPpe6os9nnm80JIKe3zzO/vX7TaTXf9Yrw2vLJzPzEwv5QNDArHxsD8YmABKDAXfa4iW6UMgMKxHKTScwa+OjX408351cPL/vuv3ZHnt+MPZ7CeKeUHjZ6wzzMvj6GVDcc882sX2ZuOOeeJiCgJouqWT23VW8im89p6XyofYOBPgRidbMwBmNs4cXnszrWBD/k05ottNps9GwHwNXLgNmM7vGZgCmJgfikbmFQ4NgbmFwMLwFdsSDn/wk0ExwUMbcXbqdBFf/rMyeXcxsnj+ysuD94+P9mYuzx55jT2sPrZ++G/EWJB4g/ajXmjVu4dMCelbJUyvSURIiJKtkgH2eUqsr8vfgAVzoO/uyh2MaQjftTjHo1/HrzVOf/3JD4DfBDS3KZR1vYXKpWcIUQaVqe9UdZuHmCn7vGdICKiBBCvcN7+TzN9Nbns4hwePTuwiX767CPMLWbjjMiNNVe8lPJXBT6I7htmnRF3XCgct99Io7yP7R11x4wQEVEkeJqczcqt1bnLw9XFu24P3l1cPbycW73l1n0fHyGEWYMRQmgQ/0Q6Rs7nq43PPtCyWe1Dj9vrG+V9bG/h6Jd/80MAjLKmaZqmlcc+592NsiePMjC/lA0MCsfGwPxiYAEocx68Uc56OkHOpMQo+pX7jyXuLgohdvsem9s4keeTze4WsxFf7cxWZ2Z3IcTJxrXbX1qp1083F2//VwBgtICzf5b96Qd/9ulXlI1/hLOl7coWx8oTEc2AaFrtRjmbLjYypZbsP/OqpgkhMqVW3ZloVKjBx2ScGrxVff8piR8Q7SlurK3V3rC4d/F3bvwN/f36175pZ/7oYruyhbL2YO3qT78e5+ev0bJ7WIZun5WeiIgSScw5b/9JKHnWKGfTBzd6U/jwh1Xooledlct/pTe7G7XyG77hry1qJ3jdL1W2KvU3LePo6LH+069Pf923/vzLFvCap7/ytzXt55/72hvr25y0johoFkTSRd86azinR3VKLSyj0Z4W3TIFCf50c14I9wJ9DKy2e7PZ/Puie08N+5kvu5Yvvsf4z//huT9++FPfWT4tf+t3v+vfVKvv+eDDh8Zzn3hY3fuB7fd/xfgo4gAADvhJREFUsPauf/Vvf+3f/tjbD4HxJ61zpWzhioH5pWxgUDg2BuYXAwtAgRp8eikzLIUYFzoyS2nnnUrU4Idbuf/Ye+/G8Mur67puzjhovltelq0nXr9+3Wy16/rnAfzk17z6Q3OvbdYrAEo/+h2/8G/e8vKVD//ms9h81fXWk6eaz34YwO/+4KtqH3tN88M/A+BUy+4t7VQ+r+u6p/16Xw72umZ52TpoisTD2Pj55/uYpNiaH9YBXL++DKDZ1IHm8MTkrQM/tXYjUyymtQW3k+BrWrrYyJTu9TTwWYP39Czbcw0h0seFwg//XPXRXy/Mf6j6SLzo2j/57y7f9a7Pfd1fesmLXv7JjxlffPFXvPjJn75w/mvfnP793Q+84EX44l9c/Zu/8p8+wPPhiYgSry+bh5hna5rIV/vv7h9fB2Aquugny8runbMR0p236kUL/xAST115AT6Hx18EXjh/+Ynf/8xTAk/+7DHmX/wnn/7998iv+97WF74g5dIffmgrijPkiIhIMVI6/kKVq7jOSTtg6J06Cf50c9719L6JVd8tZnZvNpuw9aX8ja/C739i/S8/9fwXvvjFP9J/6zPAZ1ov+oq/+iVXcOUpPP/nL3/Z3Itf8JmHn3zvt2llLfsfxfN/chhVePbuI6UwML+UDQwKx8bA/GJgAagc2xBKJPjTzXkhVk9WXS82g10h5jcnPBW97Ltw3He8+W996sfXP/4XeB5XXvLBR3+K//rxK774ibM//PK/JJ/Hlat//IeXc2987p++9DO//3M//nONz7zsW/9ge3LRExFRohnlbP90NyrU4E8351dPVgdcbGbkw56NPxc9ERGRLxNMPSq04Ovnl7j69MD0vfL0VVye1+OMiIiIaMqpkOCn42IzytZgGJhfDCwAZWNjYH4xsABUjm0IFRL8FFxshoiIaNL8XWxGnbL03UWx+7D/7rmN8avvJtbgiYgoZmGlHutiMy7nxNU0ka/yYjOz8mKJiEgFIaUeXmwmSsrWYBiYXwwsAGVjY2B+MbAAFIgtyMVmpmAu+hANnxB4SjWbIyY6ph48YgHwoPnFI+YXj9hQ6aUMDi4MDLjmuHGhI3Nj+i42E5YxO0mU7eFnYH4xsACUjY2B+cXAAlAgtiAXm5mhBE9ERDSlUlt1uVXTXHs5MqWWlP1N+4n/KpkaCvyCc8fA/GJgASgbGwPzi4EFoHJsQ3CQHRERUQIxwRMRESUQEzwREVECMcETERElEBM8ERFRAjHBExERJdBUDv0nIiKi4diCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCd7q7KNrmN0/HXi1ENa2zx2zZGLWyUc4KrRZHWB4PxenmvBAxHzJvR8woZ30c2FD4/PDcXYzvU+btoHVXaovhs+bxoNk/aIt3I48KHo5Y39GK6Zh5O2LxHzB1/zEtp5vzww9G/N//gUmy3LkGzG2c9C0HWy1ExwUgU2r1LQ9eGygcRxyUlB4PxcnGHKyHzBu4difawLwdsVYp0z1Qow9sGPx+eO5cA+L4iEnp+WPWKmViOFB23v8xu4/cuabMx6z/OZH/d3o7Yicbc87VIj9gHo/YcQHdhxz/pTEw/+UGH4n4v//HwARvOdmYc7xXd665vsseVwtR7xfqcWHw591M7jEleG+H4mRjznl33x2h83jEer5gYvgi8fvhMb9r4vkO8fwxG/b5i0LAf0xlPmZ9z4n86Pk4Yvb7lfkq68388f2k7PzDDT4Q8X//j4Vd9B2nz5xc4urTK9Yd2cU5PHx3b0eNx9VCZDw4aGB5IWXdkV7KoHrk0sNX00S+mim1bGk+Sh4Pxcr9x1Ke37bd8fRV4NGz0XVteT1iuYqU9a1U793R8fnhOd18+8O5jY1rAx4Ol+ePmXGho7CeiyUowNc/5tzqre5qfZ+7sHn/x+w+pXyz2MiUtqM9evF/R3nk8YjVjqrI3FjrrpZaWEbj4EHUHfV3F8Xuw7mNE1ua76PssR2ACd5ubjHbvbHy9NXxVgtRZindvZFaWHZfK1eRMWesQIfi7rsfwvE/EgVvR8wmnu9eH0fsdHPjEBuH95+OOCAbTwetddbI6Hsi1gKph4NWP7/E1adXYq6O+vuY1faLDRR24vgP9fIxW7m1OoeHb28fp7uLuw9x7Q0R/iICEOAfs6Nx1oogHLvb51LKx/dHfjHF//0fHBN8R/380uXevoamx9VC1DpruNyrX8Q88KRfsENxd3H3IeY23hnhF4nfI1bThBDpYiNTuhftd6+PI9ZJ79H+DLLxetBqR1U0cMPqL905S0eb470dtNNnHwEPd8W739CO62T1ZDXaYWO+/zFrR1XE8BPS+8ds5f5jeefq4aoQQojdRxsnkfZ4eD5i6aWMM50bF3qUYfkR//f/eJjgKUZ3F8XuQ1y74+FncoxyFSmllK0bB+n4R+y6ij29e9fbTZRbLzSK+zGdsjHC3MaJlaFW7r/lmlp9p309zxN3d1GIXdyx/SJSYlB4amungGq+869olG8W3X4YkAdM8B3ZxTmXe/t6kj2uFqL0UsblXnsla0L8HgqrxBVtMyHwEUtt7RSiLfV5PGITSe+BP2ajK8/j8fExc94ZdXXU5xGLL797/pi9/SGu3en8N67cP9yYuzz8/gh/Enk+YrmKPC40imkhhBDpsx15XHD27U9M/N//42GCt7s8r3dvnD77aLzVQqRqh5XnQ3G6OW9m97ja7oGOWF/fYARGH7HTZ04ucdnuOBVi9yHMW9Gfphz4Yxb1l+/ogzagFOool0bA+xGLuf3u4R+zfn7pUk6OurfZ6xFrd6tJKWUlZ1zoKjRp2uL//g+OCb5j5dbqnOPTXT+/dBlz4nG1EKXWbmQcdarWWSPWYcyDeD4Up5vzq4eX1+54GcASBo9HzChne+YbifrIejtiK/cf2090sU61jbbjY6yDFuWXr8eP2e039PbIt4fdRRaYr39M40KPrdvN4xHLLs45cxWAaBujQb/KjAcHDTUa8BP4/h9TlOfgTZuETHQT45nKXg6FYzaNuHifT6P7SCxn2/r/8MQ3l4b3g2b7cB0XVDlozjOUe89XjoT3f8x4plGyeDtijrlt4vk/9XTEnHMBxXzo5Khz2znRzfRqz7MGYOicGQNWi1CrZFWvemeAcEnlMU5FMvKI2Vawi/y4eTxi9ikD4jlkHj9jlji/Q6b+oNnOYI7nmHk8YnHPxub5iNlP+VbpiNk/YvFmd9mf4Cf//R+YkFK6ff8SERHRFGMNnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ6IiCiBmOCJiIgSiAmeiIgogZjgiYiIEogJnoiIKIGY4ImIiBKICZ5ooJomhBDZsjHpQHwwylkhRoZd04TQavFF5Y0zqprWWZ5EtN29E00rIaWcdAxESjLK2fTBcgHV6vKxrOQmHY43NU3k9VKrvpUauRqUflWTjVD940M0GlvwRO6MBwcNLK9v38igejRVjbnlheHZnYhmAhM8kSvjwUEDhfVcas2R4Y1ytqe7uKZZ3eFW97izh7ymiWy5rAkhrKeanf/Cfpd9e9Y2ypp9SwO2D9vD+SpQzXvakctGneuM2F17jWy51l2vdzXHizGcT+zfaacr3v5CsmXDcb/fg98TjYc3onfvHjdOpB5JRP2OC0Cm1JJSylYpYy23bxWO+1d0rOa4cVyAbQPm7c4WnBs3V+08dlwA4B5Gz9OccVvRDd5R55GeV2PbvafdtUoZoBuxI3q3F2PbtNtq9nhdlwMc/N6D4+2NcBxGbxsnUg4TPJELW37vveVMMtZDzmdIe47oeei4YL9l31xv/rJnpCHb7w3clhcH7MhazX0jnnfXl+1apYz9B0nfFqxDNXCnQxN8gIM/5EV5OD7eDwWRethFT9THKO9Vkbmx1ill59YLaBT3zR7c1NZOweqzrx21V7QWLOkle9e+rS6eq8jOGLiaJtLFhvWU1lkDhXXbwK7ceqG9NGr7bgbvyLGDar6/897P7uwl/9TCMhoHD4zOEIaFni00zlqDd+pBsIM/IFoPxwfBjjyREpjgiXoZDw4aQKOYtsqu+SrQ/U7PrXeSjPPL3/4MMTBh2Au6eRx3erkBGBf60Li8bn/kjmxyFdkqZap5lxq8x91lltKj4jClFpZH73SkcQ++nYfjE3zjRBPHBE/Uwxxe19MFe1xwyfC1oyoKO9YZaS6VWZfzrIzyzWKjs3nH490M6M7b9j3syCm1Ve++yGreGkPmc3cjOX6/DNrpaGMdfEc8Ho9PoI0TKYAJnsiptl9sZErbPd/fue1SBtW9dh4yk4x2VLV61HPrBbP/eaSefvjWWbc52Nf3282J3rfvZUcD5CrHhW4vusfdmT3ybd1WdWrtRgb6hS1vt84abs397k49Gufg23k8PsE2TqSCweV5olnUN6Sqo3+YNRxjrdzGw3fHx3VX7BvMhd7NehhF3z8i3Ha325C9nh3ZB9n1DCv3s7t2t7bjdIHRo+gH7nTQ0LbeUW1+Dv6Ag+Ph+DiHVY7cOJFymOCJbPrGsdsNSljOZ1tcz1brWS1TavUmjOOCbQsuKal/+70xOs/vct2RbTXb/nry1ujdmYer1F3PrbLhtmn3nfad42cL3LFlHwd/4MEZenx6E76HjRMph1PVEilM8SlTjXI2XZyiiXyJZgpr8ETK6J2prablq/3DAYiIvLgy6QCIqCO1VT8+E3lR7dxROJZ1pnciCoRd9ERERAnELnoiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKICZ4IiKiBGKCJyIiSiAmeCIiogRigiciIkogJngiIqIEYoInIiJKoP8fHIvKIgaFv18AAAAASUVORK5CYII=" /><!-- --></p>
</div>
<div id="resources" class="section level1">
<h1><span class="header-section-number">1</span> Resources:</h1>
<p><a href="https://xgboost.readthedocs.io/en/latest/R-package/xgboostPresentation.html" class="uri">https://xgboost.readthedocs.io/en/latest/R-package/xgboostPresentation.html</a> <a href="https://github.com/rachar1/DataAnalysis/blob/master/xgboost_Classification.R" class="uri">https://github.com/rachar1/DataAnalysis/blob/master/xgboost_Classification.R</a> <a href="http://jamesmarquezportfolio.com/get_up_and_running_with_xgboost_in_r.html" class="uri">http://jamesmarquezportfolio.com/get_up_and_running_with_xgboost_in_r.html</a></p>
</div>
</section>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
</body>
</html>